From 15cf921616bed2b0f711a39d2c4b9dcc1b8f59d3 Mon Sep 17 00:00:00 2001
From: Timothy Carambat <rambat1010@gmail.com>
Date: Thu, 16 May 2024 10:38:21 -0700
Subject: [PATCH] Support SQL Agent skill (#1411)

* Support SQL Agent skill

* add MSSQL agent connector

* Add frontend to agent skills
remove FAKE_DB mock
reset skills to pickup child-skill dynamically

* add prompt examples for tools on untooled

* add better logging on SQL agents

* Wipe toolruns on each chat relay so tools can be used within the same session

* update comments
---
 .../SQLConnectorSelection/DBConnection.jsx    |  47 ++
 .../NewConnectionModal.jsx                    | 271 +++++++++++
 .../SQLConnectorSelection/icons/mssql.png     | Bin 0 -> 38612 bytes
 .../SQLConnectorSelection/icons/mysql.png     | Bin 0 -> 12971 bytes
 .../icons/postgresql.png                      | Bin 0 -> 47152 bytes
 .../SQLConnectorSelection/index.jsx           | 109 +++++
 .../WorkspaceSettings/AgentConfig/index.jsx   |   7 +
 server/endpoints/admin.js                     |   2 +
 server/models/systemSettings.js               | 114 ++++-
 server/package.json                           |   4 +
 server/utils/agents/aibitat/index.js          |  13 +-
 server/utils/agents/aibitat/plugins/index.js  |   3 +
 .../plugins/sql-agent/SQLConnectors/MSSQL.js  |  89 ++++
 .../plugins/sql-agent/SQLConnectors/MySQL.js  |  59 +++
 .../sql-agent/SQLConnectors/Postgresql.js     |  52 +++
 .../plugins/sql-agent/SQLConnectors/index.js  |  60 +++
 .../plugins/sql-agent/get-table-schema.js     |  98 ++++
 .../agents/aibitat/plugins/sql-agent/index.js |  21 +
 .../plugins/sql-agent/list-database.js        |  49 ++
 .../aibitat/plugins/sql-agent/list-table.js   |  85 ++++
 .../agents/aibitat/plugins/sql-agent/query.js | 101 ++++
 .../utils/agents/aibitat/plugins/websocket.js |   2 +-
 .../agents/aibitat/providers/anthropic.js     |   2 +-
 .../utils/agents/aibitat/providers/azure.js   |   7 +-
 .../agents/aibitat/providers/genericOpenAi.js |   6 +-
 server/utils/agents/aibitat/providers/groq.js |   2 +-
 .../agents/aibitat/providers/koboldcpp.js     |   6 +-
 .../agents/aibitat/providers/lmstudio.js      |   6 +-
 .../utils/agents/aibitat/providers/localai.js |   6 +-
 .../utils/agents/aibitat/providers/mistral.js |   6 +-
 .../utils/agents/aibitat/providers/ollama.js  |   6 +-
 .../utils/agents/aibitat/providers/openai.js  |   2 +-
 .../agents/aibitat/providers/openrouter.js    |   6 +-
 .../agents/aibitat/providers/perplexity.js    |   6 +-
 .../agents/aibitat/providers/textgenwebui.js  |   6 +-
 .../agents/aibitat/providers/togetherai.js    |   6 +-
 server/utils/agents/aibitat/utils/dedupe.js   |  19 +
 server/utils/agents/defaults.js               |  14 +
 server/utils/agents/index.js                  |  70 ++-
 server/yarn.lock                              | 442 +++++++++++++++++-
 40 files changed, 1745 insertions(+), 59 deletions(-)
 create mode 100644 frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/DBConnection.jsx
 create mode 100644 frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/NewConnectionModal.jsx
 create mode 100644 frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/mssql.png
 create mode 100644 frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/mysql.png
 create mode 100644 frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/postgresql.png
 create mode 100644 frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/index.jsx
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MSSQL.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MySQL.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/Postgresql.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/index.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/get-table-schema.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/index.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/list-database.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/list-table.js
 create mode 100644 server/utils/agents/aibitat/plugins/sql-agent/query.js

diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/DBConnection.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/DBConnection.jsx
new file mode 100644
index 000000000..7a58da454
--- /dev/null
+++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/DBConnection.jsx
@@ -0,0 +1,47 @@
+import PostgreSQLLogo from "./icons/postgresql.png";
+import MySQLLogo from "./icons/mysql.png";
+import MSSQLLogo from "./icons/mssql.png";
+import { X } from "@phosphor-icons/react";
+
+export const DB_LOGOS = {
+  postgresql: PostgreSQLLogo,
+  mysql: MySQLLogo,
+  "sql-server": MSSQLLogo,
+};
+
+export default function DBConnection({ connection, onRemove }) {
+  const { database_id, engine } = connection;
+  function removeConfirmation() {
+    if (
+      !window.confirm(
+        `Delete ${database_id} from the list of available SQL connections? This cannot be undone.`
+      )
+    ) {
+      return false;
+    }
+    onRemove(database_id);
+  }
+
+  return (
+    <div className="flex gap-x-4 items-center">
+      <img
+        src={DB_LOGOS?.[engine] ?? null}
+        alt={`${engine} logo`}
+        className="w-10 h-10 rounded-md"
+      />
+      <div className="flex w-full items-center justify-between">
+        <div className="flex flex-col">
+          <div className="text-sm font-semibold text-white">{database_id}</div>
+          <div className="mt-1 text-xs text-[#D2D5DB]">{engine}</div>
+        </div>
+        <button
+          type="button"
+          onClick={removeConfirmation}
+          className="border-none text-white/40 hover:text-red-500"
+        >
+          <X size={24} />
+        </button>
+      </div>
+    </div>
+  );
+}
diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/NewConnectionModal.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/NewConnectionModal.jsx
new file mode 100644
index 000000000..e76b27cce
--- /dev/null
+++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/NewConnectionModal.jsx
@@ -0,0 +1,271 @@
+import { useState } from "react";
+import { createPortal } from "react-dom";
+import ModalWrapper from "@/components/ModalWrapper";
+import { WarningOctagon, X } from "@phosphor-icons/react";
+import { DB_LOGOS } from "./DBConnection";
+
+function assembleConnectionString({
+  engine,
+  username = "",
+  password = "",
+  host = "",
+  port = "",
+  database = "",
+}) {
+  if ([username, password, host, database].every((i) => !!i) === false)
+    return `Please fill out all the fields above.`;
+  switch (engine) {
+    case "postgresql":
+      return `postgres://${username}:${password}@${host}:${port}/${database}`;
+    case "mysql":
+      return `mysql://${username}:${password}@${host}:${port}/${database}`;
+    case "sql-server":
+      return `mssql://${username}:${password}@${host}:${port}/${database}`;
+    default:
+      return null;
+  }
+}
+
+const DEFAULT_ENGINE = "postgresql";
+const DEFAULT_CONFIG = {
+  username: null,
+  password: null,
+  host: null,
+  port: null,
+  database: null,
+};
+
+export default function NewSQLConnection({ isOpen, closeModal, onSubmit }) {
+  const [engine, setEngine] = useState(DEFAULT_ENGINE);
+  const [config, setConfig] = useState(DEFAULT_CONFIG);
+  if (!isOpen) return null;
+
+  function handleClose() {
+    setEngine(DEFAULT_ENGINE);
+    setConfig(DEFAULT_CONFIG);
+    closeModal();
+  }
+
+  function onFormChange() {
+    const form = new FormData(document.getElementById("sql-connection-form"));
+    setConfig({
+      username: form.get("username").trim(),
+      password: form.get("password"),
+      host: form.get("host").trim(),
+      port: form.get("port").trim(),
+      database: form.get("database").trim(),
+    });
+  }
+
+  async function handleUpdate(e) {
+    e.preventDefault();
+    e.stopPropagation();
+    const form = new FormData(e.target);
+    onSubmit({
+      engine,
+      database_id: form.get("name"),
+      connectionString: assembleConnectionString({ engine, ...config }),
+    });
+    handleClose();
+    return false;
+  }
+
+  // Cannot do nested forms, it will cause all sorts of issues, so we portal this out
+  // to the parent container form so we don't have nested forms.
+  return createPortal(
+    <ModalWrapper isOpen={isOpen}>
+      <div className="relative w-1/3 max-h-full ">
+        <div className="relative bg-main-gradient rounded-xl shadow-[0_4px_14px_rgba(0,0,0,0.25)] max-h-[90vh] overflow-y-scroll no-scroll">
+          <div className="flex items-start justify-between p-4 border-b rounded-t border-gray-500/50">
+            <h3 className="text-xl font-semibold text-white">
+              New SQL Connection
+            </h3>
+            <button
+              onClick={handleClose}
+              type="button"
+              className="border-none transition-all duration-300 text-gray-400 bg-transparent hover:border-white/60 rounded-lg text-sm p-1.5 ml-auto inline-flex items-center bg-sidebar-button hover:bg-menu-item-selected-gradient hover:border-slate-100 hover:border-opacity-50 border-transparent border"
+              data-modal-hide="staticModal"
+            >
+              <X className="text-gray-300 text-lg" />
+            </button>
+          </div>
+
+          <form
+            id="sql-connection-form"
+            onSubmit={handleUpdate}
+            onChange={onFormChange}
+          >
+            <div className="py-[17px] px-[20px] flex flex-col gap-y-6">
+              <p className="text-sm text-white">
+                Add the connection information for your database below and it
+                will be available for future SQL agent calls.
+              </p>
+              <div className="flex flex-col w-full">
+                <div className="border border-red-800 bg-zinc-800 p-4 rounded-lg flex items-center gap-x-2 text-sm text-red-400">
+                  <WarningOctagon size={28} className="shrink-0" />
+                  <p>
+                    <b>WARNING:</b> The SQL agent has been <i>instructed</i> to
+                    only perform non-modifying queries. This <b>does not</b>{" "}
+                    prevent a hallucination from still deleting data. Only
+                    connect with a user who has <b>READ_ONLY</b> permissions.
+                  </p>
+                </div>
+
+                <label className="text-white text-sm font-semibold block my-4">
+                  Select your SQL engine
+                </label>
+                <div className="flex w-full flex-wrap gap-x-4">
+                  <DBEngine
+                    provider="postgresql"
+                    active={engine === "postgresql"}
+                    onClick={() => setEngine("postgresql")}
+                  />
+                  <DBEngine
+                    provider="mysql"
+                    active={engine === "mysql"}
+                    onClick={() => setEngine("mysql")}
+                  />
+                  <DBEngine
+                    provider="sql-server"
+                    active={engine === "sql-server"}
+                    onClick={() => setEngine("sql-server")}
+                  />
+                </div>
+              </div>
+
+              <div className="flex flex-col w-full">
+                <label className="text-white text-sm font-semibold block mb-4">
+                  Connection name
+                </label>
+                <input
+                  type="text"
+                  name="name"
+                  className="border-none bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                  placeholder="a unique name to identify this SQL connection"
+                  required={true}
+                  autoComplete="off"
+                  spellCheck={false}
+                />
+              </div>
+
+              <div className="flex gap-x-2">
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Database user
+                  </label>
+                  <input
+                    type="text"
+                    name="username"
+                    className="border-none bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="root"
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+                <div className="flex flex-col w-60">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Database user password
+                  </label>
+                  <input
+                    type="text"
+                    name="password"
+                    className="border-none bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="password123"
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+              </div>
+
+              <div className="flex gap-x-2">
+                <div className="flex flex-col w-full">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Server endpoint
+                  </label>
+                  <input
+                    type="text"
+                    name="host"
+                    className="border-none bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="the hostname or endpoint for your database"
+                    required={true}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+                <div className="flex flex-col w-30">
+                  <label className="text-white text-sm font-semibold block mb-4">
+                    Port
+                  </label>
+                  <input
+                    type="text"
+                    name="port"
+                    className="border-none bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                    placeholder="3306"
+                    required={false}
+                    autoComplete="off"
+                    spellCheck={false}
+                  />
+                </div>
+              </div>
+
+              <div className="flex flex-col w-60">
+                <label className="text-white text-sm font-semibold block mb-4">
+                  Database
+                </label>
+                <input
+                  type="text"
+                  name="database"
+                  className="border-none bg-zinc-900 text-white placeholder:text-white/20 text-sm rounded-lg focus:border-white block w-full p-2.5"
+                  placeholder="the database the agent will interact with"
+                  required={true}
+                  autoComplete="off"
+                  spellCheck={false}
+                />
+              </div>
+              <p className="text-white/40 text-sm">
+                {assembleConnectionString({ engine, ...config })}
+              </p>
+            </div>
+            <div className="flex w-full justify-between items-center p-3 space-x-2 border-t rounded-b border-gray-500/50">
+              <button
+                type="button"
+                onClick={handleClose}
+                className="border-none text-xs px-2 py-1 font-semibold rounded-lg bg-white hover:bg-transparent border-2 border-transparent hover:border-white hover:text-white h-[32px] w-fit -mr-8 whitespace-nowrap shadow-[0_4px_14px_rgba(0,0,0,0.25)]"
+              >
+                Cancel
+              </button>
+              <button
+                type="submit"
+                form="sql-connection-form"
+                className="border-none text-xs px-2 py-1 font-semibold rounded-lg bg-[#46C8FF] hover:bg-[#2C2F36] border-2 border-transparent hover:border-[#46C8FF] hover:text-white h-[32px] w-fit -mr-8 whitespace-nowrap shadow-[0_4px_14px_rgba(0,0,0,0.25)]"
+              >
+                Save connection
+              </button>
+            </div>
+          </form>
+        </div>
+      </div>
+    </ModalWrapper>,
+    document.getElementById("workspace-agent-settings-container")
+  );
+}
+
+function DBEngine({ provider, active, onClick }) {
+  return (
+    <button
+      type="button"
+      onClick={onClick}
+      className={`flex flex-col p-4 border border-white/40 bg-zinc-800 rounded-lg w-fit hover:bg-zinc-700 ${
+        active ? "!bg-blue-500/50" : ""
+      }`}
+    >
+      <img
+        src={DB_LOGOS[provider]}
+        className="h-[100px] rounded-md"
+        alt="PostgreSQL"
+      />
+    </button>
+  );
+}
diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/mssql.png b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/mssql.png
new file mode 100644
index 0000000000000000000000000000000000000000..7bd58a9a3eac3327f9f9703a081b79274fc8ee62
GIT binary patch
literal 38612
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

literal 0
HcmV?d00001

diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/mysql.png b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/mysql.png
new file mode 100644
index 0000000000000000000000000000000000000000..5a440811548774bb7554a38ccfd82a300d1037fd
GIT binary patch
literal 12971
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
Wp6`yeHk5$2lX$xNxvX<aXaWHHSL%WQ

literal 0
HcmV?d00001

diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/postgresql.png b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/icons/postgresql.png
new file mode 100644
index 0000000000000000000000000000000000000000..67918df7a77905a065d286802efe3055969ec266
GIT binary patch
literal 47152
zcmeAS@N?(olHy`uVBq!ia0y~yVDtiE4mJh`hH6bQRt5$J&H|6fVg?4jBOuH;Rhv(m
zfq~^`W=KRygs+cPa(=E}VoH8es$NBI0RsrwR9IEy7UZUuBq~(o=HwMyRoJS7RaoT}
zTY-f2)$O<xpunamCCw_x#SN;oC?(BSJ)@+gz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7
zNVg~@O}Dr*uOzWTH?LS(-Hr>@D3{dY<f6=ilFa-(1(4B+N%^HEw(9C|RS+koB*U#K
zC@snXTauEjpPG}Jo0?ZrtZ%4ih~mnWWUG?QlAKgDhdbt!po!#Uf_!3?lbDxot6rg-
zlA4xSnp2`~mz<wlkXVwLl#{BUt5A?%T#{atT3nc8qYrXqP9~BmU=dV<^|4qFR)*wT
zG6TY~q@*Y_2_6`E#d?Wgky20y>Lusr>L;dvg2MnMI3T*L98-#s91ikHaB3l%NKPg=
z9tskRic>=>3sP;>gHnt0ON)|Iky8QGK<A>=#FEq$J0k-l6I}yST|-kFeKaX}MA|?l
zTq{aEQ|v6v%u~!Q43l*ejZ(~YP0TEebQ4XC4RwtyEsc^44U$bvlg;2}L9}3)<d)=_
zVrOb(YGh_=X=q|-ZfR;^0M`SS#LyCwUz(f&@|K+uTqQybp&T4rn9+<HTrjVq1}j)A
z<q=(gl(Rsw49>Ek_$^3D(>K&JMv32olr$^H(vpn)BD;{xTm|REqQu;!#1b2QBndRn
zQSQQu+yazz2zOycVu8M)9%>4#$Stq}r<VMpko^1{JLkl_vP1=qpwzsS)S}cPO&fi5
z75Ll>EsPY<)C9S>A*E)0c)4cBP;0Hkz_97Ar;B4q#hf>L!%I|dRzCl^TX5pUdkVt$
z#7_Nwmz94aZSvhI9$q4zy<y76ZL3R*&z*U9;@swQS>JQhza^Hrr<+b%G4tX&8O=VI
z+ezjp%dYM_UHa3BQDeb_Mi-^pG?zQI9Fu1{gfgcFOm#i>eomGN)5MwPO3ME}-aQ|y
zxOB=75V#}qw2uG4@#Dvr-~HHn>G<*E>B2P&zkK}o@g_^WMr}<^joCqQFL`<S`Mw{9
ztMr9;-x+FZZt-e9&E4zAQ8?ZG(Ph0KPA@+PpFQhx@%FpFu?)Vy*9p5S9%=jjsr9ou
zd%Q;Nt+urhMccLQ-c{G%dA)SXmDi<SN0p8yO$=J;vN!Iyf$x&kL<zPaFB4zq>!nQx
z6?Uy#{MvERMUIIXBCb0(ny>zOqlU5e!-v*SjLu#+wKOjM=AU=9xLNw*Ud!7L)xP#Q
zdO0YFTr^rI&AIG%xu&WUhtBD&h-%;C*Y?D3w%D~ldRc3t)Rfby&z?V<vD5DGnKPwn
zX=x|ctqE8eq9N8T(yglXRA_6J>}8XUI-RMrJXBV#61u?jVxfYgZHL^2PM5<+k_v@R
zvi$w~mxqtn(8kCqK3@J|frM*dfJo}$!YzltKiq8TbZ?#WvGnM|{bJDp4oZ8a?`_g~
z{%ormmwI0U!=as)qOOjiq3{2;?7iGJyJUCXt!K%F|L>dl-i|Wn`5nL4Z)ecLu(e5%
z)4uz2G_J~8F{^7?CJPf|)2_Z%nJdl}uAJ4jEK~P5N5J~)D?_xNe6AD|6Pqz}URq90
zk9PPv153k`QF`uMqn3uPu1qdGuCcUr?NjspwnwZQ!$eqJLoYHjGVStH5mK9cazpm_
zyl-#spTB2Y{X$-1f%056p-zDdCcjHpz2aQ%U;T(Xb@qjt#U^=So-0EZh3EunP1T%!
zdd=FW5z*1g`=_bTk6#?MHc3KlStgT$NaM0whXgxYI*%r~BpXgTsj@MGCzfA`i<Q$|
z>DyT;j+`A2?;7s7{q9M{oyP{gleca)4GRxHx%SzNnKK{$`XX}L`*ce9<|kp{C!ZFH
zbi4XoF6lezAjriSTfS_E)x&^}2qizIc?x3v!u`iRmtQU^Ex&m6rmKyhx&X(7(@%F)
zJX8|bk9~4#>FJoAMXhg6b$u_`sB_xz*lb<vMuANar@5Hje6{v@>gHl)UGA4Q8$?`P
z16dXZbj;mdR`}t8BcHtGnZ{=Jmv3JyPd-_}zs1`2z1{6*{VCrkO3(dOwf5MXJ2KbR
z)Mw6|nV3{F=jF=RI=Z@>cJ1=o7_lH|Wx(2ym0_!AEW0TXY5uRlB~XN^k)bL;eFZyb
ztCNe8VA4m4&Xh^>=E?o~_3P!USBo~U?!I?VuBxiqb7|1L)N3XIzn`lGAN_hfIZ~{<
zyE|rA!NiZ9g?e+WkKecvI&J#26Hkkte6FnKs-3;#;Zz3&2NNk}v2G!MwGNj>I{Las
z_U8UOW6J!xT^2l;w<PWKuF602I?STK$Tuso9Qx?JD=hW0q~or60*X;g&JPP_{QFn;
zP4>q5$^N!SCn~$&*qqLPFkr=3iQ0oX+%*gL`0rp+Y*`St*2v!c{L0JAD_;L7)Qj73
z;?gCdop-dR7KvUqk(wrFl4tQ<@5?*4^e(;D#Y*4G8V}rVafw=>acJJDS5_M%dP1~Z
zt>&gB6f`um^B2DOpxEZ_=Aky3#pG;t{pn3nHM!<i^MY0$xp6~c{r+E4$M4rnewiJd
z623WPRjB`hC2##R1O?vTn04>g#!}haekQra1!n8TZGW##`K)*E$DNP6F4vvj^rqcw
z@>3}emVl6}^X_F!ImWUp8t^n%?d{v5qm!8^rS^4~<KDQ%QEP)%h8Xx>{+OJ#;@p>8
zlg|Cjl-g@OEyKhszFwZ+zNY7V?L%&xnm37$KJIvbJV&`^;hy6=mhX;QJL&XOi{f7<
z>-YZBQn&jt;pkG;^ZD0yIL34e_`Ny&G14pAE>C1f=C2LM?#Fgt7M+^*b;70JBDbx&
zg}RTvc=PJffrHI578~Z@t^Q_Uw5d5m$4f)x(~(Pa<F03!hHZ}Yn`3eE`@Y|?=juw@
zo-R%O^mEVWkBc&`?pgFbD=t#rSls@~Z{qd&?%(&mweOr(yL5_f`^!a{QY%Bc*1gNK
zvbKI(9~+xuB>6txXr_t;UnM`MtA>Ki>dTcHH`Yxw+8NV#HD}t<R@P_Fo=3*aNKZ^`
z{P~mh+4E-_(@)<k+;M+JflBbBT$k&myLRoiD0?Gl_x<Pj&nJ@mC;2T8481CT`gf21
zl<xxOe^cu6`nKPz>XzU8iA&vop33%FpP4v&Uq&6?U#=|T`jJWEZ1BEkFBfOd(si6K
z{ZrojhiYr`R}1s?(hi=>FVCxgdt-6G(Wc~<b?fvNUDP=3?JZ+pH>du`Kkqp<9~E!D
zS@qmF_gko0y;;MmRdHRtVjK(DO+v12JJ7Po!foS`FHP2cU&B@huD-tVde*(?CiP*)
zyRr?-OEx4Q=lk~N_URWdH2(hGc3W}sNdcbL0MVn|bt}7GxjxGOCTn7^a_4jI%w^`+
zYV6J*`ona6`Ep6=-G_E=e!ipTr;+yQ(;{4~K8G`Q7`b%M?Odg`#45<<>zB(lKehLt
zn5f+DnQnCN`L8?GH4E>g&0<X|ES$K#PyTuS{(roF^DG`lN}c_^bEW>hFS-H>GMy9r
z$|v}xdn~_v<Z)rrMv0RllL{>E7=^B}eyMZSt2Jq(%ff&K5gGv+B6AcjNZrhtwsos%
zb^PH4?|kg<zStpfXmiyYhIZqvVhcE0BXo}ST?~|~|5NDZ?q2!)?e@yASHo>zU$m7A
z_ux6~5GYa-t3K1~()H{9{{H;T%*;GIe3M?DnefhI@+%L)-lK17nHfb~51RODUDdkk
z)mn6O+r6-`u!y**w8FxPtv@Zr#Kj^bVp1wAJEOL?ty)!5TE4ORyBw&nUwF9v=JtI3
zxpU|0?(Ca)!Lo7gSIv-U(WPGl|4Q5L@H(orxwyEd<Qb2;|C}d_jngIeS52+4dtZB9
zZyiVUG}rWWb^G5t&wqTnzNYmrJHJ3t&5V5s_o8bS-f^3yyf1&>N4EI?v-dyTTYfLK
zvT|qYtebPrDJ@;He0lrAhl$_b+&$gM%q}4(sW#PXqSsQ7WkD{B1NEcs)*N25p0Ch;
zf86?Dt*IJMK8tX<Ub|NGq{wpGv}rrcEKmOUVR3!=`psLw<<V3x*0Y{F3zav%UK{xR
zGgBi&>EgaEPuk9}znb-8*SQlXII6$DfBdk$zwp5U#;RXcFW<aTndy_qA(N{rd;I7o
zovzj<-8tIYI=XsB_V)fZV(A$-&Lx*9pE9>@`}+R&q-nQ8IydjLTYi(Nq~4_eo!k6}
zeG8-38rhm2eR_Jj<-cRI_muvzc>MVBjAfn6GJW5t+ix%lO@6*Ew&vmUeFyaae$u~u
z_wL)@dhZSQ1>_08E6GVrY~26%*Y%&f|Nn~LX;!(`)T{T%rZ<=6d)+Kcei-!I{<G+}
z`Ng4ZT{fZPc<0f_FLu?1%lv-5eE+h{TQA+03LSN7yt&izm|lEhPEOD2@Hg{s=4?x?
zx~*fi=_dOwzXgvsO7Po%;+S9aZnDj<8_8e3e7jY*KjFhV_5Ib;WCF~2LPB#lO4;*W
zPuH6J{?Mdv{`#)n&lqmG1&TN=;AmWQ<NuXsnwIz8nah5D^-Amd^5vC(w_g8w&|AOo
z;UU&nU#m`A7M(BG5qo@c`TS?||81^6wb5NpQHC%7r9|yJnRt!&M(=nNB-q6DV;*GJ
z|62a%hr9iv2#vfC%QI)WmHV6b+x*f1C6(LzR+O|QtO)hFcAw+y{Ta)HUmsJ<+jPJ8
z*e#u!(&OK!M@J_Y)-`sE>wo&k{=WF-Ay+Z6XD8P_TXFsMy&JRcdk2bGSy@&5=~Vym
zXnI}aV)y<_6a9oaSQxH_E;Bi%Dr=nQJn<rLUH-TE_f`nJbj!4VeO$9K>+XUW(-o3x
zPow6>tUTtm&u80%f2)JmU0o@qc6HZY`Je?H7ff0kRxQfrx;Vj4Nk~PQ`|{MD3o|<=
zbg*!~mU@`bu;7}?E%P6GG5-tKh9y7yRT@|MGj-qZx$ld9eo9?6^;DZ=^Ri4He*Vwe
z`~PLvygVJRHq+;x0r$b@?;deKjXfedH)`#%=;QsL>;M0*KYvnKJ$j9MxP;a2T@~+w
zAvwogzIsZ+g>SZ|%WvM;cjy`ahX0Qx7HTX~l$!SZ@saKoQGN+0u8M7}t2=S*<)dDm
z@asl)rH@$T=UE)QX)Is(^i*omYRjyxQVbg-dXCH0&sqQHk^ZMY%jc_$^;fUY<&?1e
zpLyiw!7VDKhmRQO_LN?mb712&mK9x1%d}WbSVJ`;Jl^k^)%44J$xYpWm9yvUusVKQ
zeEH0Xh*Z1il&uj54Rm$PEiQ*leZ16Y>l~Bg&97bVh#uc`#dPYql$M1)O%vy-D938D
z85Qo5VZ3U3^>+Q=%5V|Z)0<|@ne*gz{om^~?|0vS{OgOzvP@ICIb9A>lPYY^O|So`
z{b%#~x~T^bI-02So=mU)(E3U5VceUmSyS`>|K0v$vi-m0W5<rY2@wiEqtor7a!7rC
zb)SCi)6<}GT1BXH+Dp+pKibyM7Rx@Wbu*}SYtYo9t$s`M0?c)?+By>>J-ipK<myto
z5GrcBU{SVKVyv<hpAa{zM@zGdv(>3y9iQjv%GoQndL8+?{oL7eMrLNm+|$o}_*eZt
zcxA|sJJ0RUch9e#_^+|iw|{w%`Hb^o5i#1EC+TmVqrW+7%>?Z*jj-3-5@v~s3Hb(I
zF#T<z<k;(?;-V#`BFQ<igT?ds;gm;-K^FyH?P}gNv)~%f<c~i?{rq)4+`5?^Gb3(M
z-VBXX$9J;i=^d69daLS@$=I}E-Ne4um)^&3+@7EKKS6!>Z>tyH$89$5xoAE8bn3Y|
zc4y7^f874(u($rivuV+PcQQF06!5qG%=7>8{vY!zemrcqJ$+aF%<g{uDdn7}H?0U;
zUGw_=zdrjv{Qnzg&Xm;IJaJlbq*!fj?Vr!<>!#}0e0=`$-K$TNCdSTMeqfnuq;8nR
z?9)Y+X{|4x?lD$fGeJ94Bb?V-)ODL*<ZNASMV48M1g@DTCC-hAP?y~3sy3O!c!sCJ
zm8lEXEBm=zf1@RQ+-cG!S^w1myX<36Th2b4B&BxO_HNmeyEEC$qL)wGqI+!h=hbs&
zMm+d*hRayHQmn|eYpT_<*>TCHYs_E%;+qwe9uvPnV4J?di;jSFB_DsIQ+@M9ezP0%
zl&f;SW)w+(Gi{2l*qmyfWvVlybw9jYD!K3fLy6?#o73Ju$m8g%m3#C5dWfUR65~5l
zpL{3~pKoDtX5Br$^QZO%9>}b$oGJhJL;Ihb^Xq!KpP%3Ea{2D2<A2%tKCG|*Z2t4g
z^7;2S<zIV#4V3Z}mM#fe`C)N*+{62S<^NAxxpL(+BMaBSiZ2_F|LFbyZ~x<&>GM=Y
z_|~3|-*SI>ka>h|$PSa;hfc08p0jtG$F_iF0V@O7&Nly75H6W-v+0>^blr8+sT0--
z@?|YiQgquj`OQ1;&5Nx))0LdGq|}~7ELj({cD`PojMwFoSg)+MlV1DI{9LKp7eC|K
zp|7f8+@hyU7ng<{I%j`h!0KLs#k-IlUnA~Z7P!WI<gk_PN{M#&T^2@{&i1_%>GYTo
z;IP@-`nvm$#;Cg~X{zT>FF#iK^ooUd_R?#o7Vd6%Z9Vne1?E*wYH|-3UX+_>Z*%D1
zLBB-{8|I$hd9FQj{q>zCAC>C=xc{FhzwZ;*RIjBkcf5U_asA!hKdb*gt$)@k9-qTG
z<L4dOnuU9umu$J6zqj;{?!WE!KbVglTX*ByjK{MtoAip?|5p0{D*k_V+1p#Chqbzc
zt|pkxe!lm#@t)GeS=`sBue|E}zU^bqs%g_}=eVyk+&253fp6WRv_p)&|9s}i_7%L7
z^|(B@XHri~M{CK0$GW<l63dSM$(s0GFaEjva`l}RwVksP%_gnB9?E*RPa@Z1+q1`o
z_w1#3Hq>vJ>|Xx$<An_VzcVd5H{^ADC!4=d-<eiWl{7DZUv1-MVeSwa$NjS}{=8=B
zt)n2y`RU0%$GDn|DYeX!ixwW>mG|1bdGnv2_5aS-JbryYp)zyj!|f$<2F`~M|GD=5
z58wR1GtUe0u)TkEqyE;%)=zu|{&#;CKmU3E|AYFccemefT(-bbLEypj{XbmmK5wt@
z-uJI=!Pi5ky4|m}E8~8@kXk=)Zc37(`_?>xfGNC>3b!w7inh@3IlZp!qUqGWiW&Dp
zrqnjim63S!<UxRVt?b3#i51V&_k}!N+kL(A<zd5f{<=Y{u3ijjO$&^F|9g-3;d?8#
z2L+kGef;8WM`2F7zW+Pv2NwdwS7w|jHZ(Ds^QPElf7FxT@^KHB@~=1A9d#o>y)L{k
zMt$0r7k)=8{$1cWFMspkzk@yMFV3#(30iq%`~QE@f9&gjwEOt^<z<NMDSqx(_q)8l
z-GBcFrd{iPJ5^2(sQ>@H{{Q#)-xcIs?r@i<rndh7eE)Csy^6P``bk{hN`7<O|1bV?
zZvRi)U%!4esKv`CNT}J{7@w5?|3C%gb;ET3?;*E0ZhQFo-A&f_KNv%=%DJzMN-tb{
zWa(?~Gils1(r;BKcWn8=ch}~~%B80JzMazC_w!q&nt1VyX|*;%+xqIQCoRqYQO5MU
z#w$WQbf?kur%$d{t~;}CfmYMI6p`5MFHItc#O7ug9N2fzuk2gNhDrLy({<PUUbEYx
z?0JlaQ-Id>ofezV{CuhEqbYexg@f&i*!*GzfrR(>YJ1+?IJne%`nAYu6V9et*8j6%
zW^V3zCv$gN@!!iG`ct-d3N%HnJr@7}Y5d2t`8AV+c3u&B^WzM+{)gTBzgP3{@|wo3
zVLClYXYJG<tIf}Syq-TNIjfNO@}zsc8*Y~Tx|bMjxGwMe^2dLEeRi+R*wWsx%A{BP
z)v}Yjr>FmzJl+4(x1*V>OfS#2x_4jts^xs&`SB|yW8%*hS0y!mYz=+%P@yw}!#6aF
zDSXzdifLOCz1FRNVtD4-swKNSvu{QTg>j3X^VK!nAGO3@R#}j*Dp}ZRL6(;DVdtK{
zKBKaqT;AT^y6>k(pDq0QDzxnFJ=gg7`TEn!8RIqbnYX`scBON&U(0W+OP+aKbh;0_
z_kGy?|JnB&+w1GS?UtlQ`RJ|vxOKY!$4i}tT%y+O8zW0@O-xZaVgLI~pj~YW`@x3U
zi;}9pdtJ5CpDXb=TYr8^j^1sN+Whsii)&2-mgX63obdR{5u2k$y*^4#Yfjc{ZYUO;
zd{LpjeK$u2*LAVtIE7Pnvv-%*%=>?BXV|M{CvV)*3Qya#<Z<GzNrBO4=GKb3CMF~_
z99*cV7rQ58`cX64WV6|+RaLW`-T5Z_Ex-Nlcg2Mdt)I*$1Wk&LeQN*r=KPPpve#F7
zJ__=(+P&+?+WY@>=T-fBIZY+u^d^b;h^PMXb|+syUw84&`falM2`^Jtu`_G^Kda97
zskr~Gs>Fq;Wjl^~&3(V8e&+vAkBxQKPkoz`aqDwMLUL=LKvT`iQ#Z4_eRS4L;$VN-
z<Nn6OzE`8(<GO{#4NsFL#yclu+dSCz(&FwWuiNoa5B_`+x|q<==riZQu4j_gWp5U2
zU*FIDTz|uk9XBS$Z85O--x%@W#>Qlq#nOLI*+m~0KNWo>_s6eiv-3Y4um9pcrAzgF
zKBMpB@Vd9xe=Lpvm#Q?;qualzDzn%A=RwbV`wZ@OY}xiPI4*(vXg7cFr+)jw4i}Rf
zN|T<>I(UD7b?5)@SNl&)&+g@@oh^61>JCHaqlkjy)vo7!^a55~k$B}J#GA!?U$rds
zLWY0WzLGg7TV-x0Jze)K`d&#*m(#+S$A`WcO>3FESF?%n>}~dhii#Qc?#21dvpD$b
z)vDP3{=1@?ziyexzU2G%_Wu1%Z`#kVeaQV(_rX1pn>o|$fA-g(d3kyH-kZ~>Ok!r|
z|D^x_>i#A52@6!EA~ml6@LxaY+1AaIBQ}+C-B{<55S~A4{k{(Z%`;uRcXcI3)qHP0
z{pV<QdZc!E<FP9r9T!#Z;tp7M?d_9)OJ!<bO2}^9Fnvp(z>2N~>y?i=sGU3F)R(jH
zl8EJfxs4?&ukfxrlV<4CJ=a#Yg=y9I1)@#{1_lo9?(Fh)KNO!9-K@@C8<w0@({$Lq
zuOc+~ZQa|g%KHNDv8~_#P3r$o`@fP?vyO5<IP$n~-!JL^y65Yk8ON>G(aep%Y<_>=
ziE_Igk5qfNe{Ovh_E<&PvF>Yddu7sjhE=aZni-a5eth;*^WW+Ia~tO5M_hhe;}d<b
zc%sM2FQ25s(>ALpJN~jtTG5v;kaK#Ix@fY&<b)!{<3;=KOi|xo8(i41E3qiGj8&0k
z@m|>$rrxW|L|qdLGCHc(9=o|Y-LS`v??qG{FQd)BCzI>yp5_)kzIv-RuS1~8Yw02H
z`~U5JZoQ_;$0uud=6wCf?zp|W4VtRU)y00C`#oJVEGzfFN&Y-HyM4>&`^(>a_{8B>
z#I%$gz0>h~{t0fr>E!+3nL4ZHTb6g-mrwtB`2F5<dB3=&F>AN0Jj?Dnq-<UNvsYX`
z&At4T=J%F<&566RL$cWJ*Su!BU-#W;Y1H18+>`INy_Ns}YW;^Jll`l>=k3hQ$>0Cg
zY`Op3U!A|!y;I#6aE~d-%WtmDQTF%s4VhALOROchJ{{Hn%QQDO)>k$?VQt96rToWd
zoEO`Z%6m&v@r}xlgFa3AwmbVX3?AJ5_3dNG&u6#AcNk61{kZwxk_$PZT#Vd1h3dbZ
z(){;suD8fshQ7V?Wd-fGofbR2@LbE??Lm3>%kOk#IIoO)K081D!PMZ#S9pXu<L;LK
zKftj6n}6Nhb?444J5tyB^l56`?~kiP=Ca<q^*1WVyk_AZR-emH+V%f8Or0vao^MCg
z+M*{f0_RnJi_EvzRBg*F%&M7Jt{3}#*8XjqSL`?|9pd`1b@AdiZ{B8HQBS_^yuU85
z%lw?5Y1D$PA3xsFI~%s2A*@^U-~Mp>NBQ?`{1*o0ziFSF{qxAZx_>8^_f6=`uNRIr
zm+CWKx4-VOjQYBBmAvhDH`;%EGTG+e6JcJ%5~&$;EIuk4Utgbp`$yfRkF7=AJ1Qqn
zo;-QZj}I)N%QYLf=#<1h-}!u=^5m0SzQmmo)!tK+HD_y3@P@^`h53hUYcuT%3vQg8
z{zWO&N9W0p-Q{`#Yp&HLxo(ow4`7<I%5-1hADj64&oW1|R!6XzOnuJR|Dk{0J%5`u
z`MbAX(|Ka7UHR|T*Ud5UaoI0}L^@q69v&6nd+x`#W?#@q@6XTAZ{K6R()Yt@r|S~c
zofQw6E(c%!_Ws67r@zd9ZT_AyZgE;TZRPEqD^>mC=6=4_wADJutBG-{xV%)Vf^fdd
zDev8x$G_X{IP>GrDs?$~-5r}7i?*IKzh`ycyl?*UEq*%Aj8pY(cg`2@>$_zatN8BZ
zl`w{MHF1l&#9K3)%ul8B%UT_IaW3%v!`_ywF@62#=6tle@;gU1USoU1lu1QP&+Od%
z{KV5RY2Lin2QQrYFWMVC_{&$8eB=80xX)|)%f7Sk41W1=ol5_^cghk0AB`MXYf8@U
zleG2z#3=A@x9jGwp{uU^Job@$&zFZ1OIKYK+Qs==YX6TjjB>Z{rt5Dx_O0&yx9<$0
zho3ZWjJ)P$dS~nXrBh0lT$Zt{x)R4GxqM~G(nCM47Iw8d-HxC9woQLZwBxOAhq?Ck
ze1}c;&UUz7I<M+g=B1Y<-uIpy`J*MiPXA&EPx*egeVXg!gTh7U-MH*uuXgX#_L!BY
z?C0z_<+ZOz=~n!g?cCQloteJ+&(YWEm9G~iAFWJGfAO~C<LUVpCknz3MXyV)7JRYl
z(A1kc#-}Tv|4i*p(hy1d{_bwss;J8m)22_4Iwf1XtxbQ*><3ZN-Q1sjVrOUN6rU0;
ze|yi>fxF?e$@V2rj$EyrcFl`pd32O@{A4GNB@HD?XN0TSFN7{ty;S?}meO*yXSVV;
z{9p54%Zb!`>h<SmzkhLA(Z<xjO1^?J60aUjpJ(f#w21lk?}Wn3JFj_#E}M4!PNP!G
zUG}Z@2@Nhv7meDcPSv@YQ+E5<m&slFQ)VkH-Mi?~kE?~x($e?3?qOhKXP1<bD&ldg
zuHG2*{L&ettGizMwBEYT^!bu|gYx0KJ>QlsxTrQGY3VuX=gUusYL|(BnjbVV=UAQ>
z<795jf1kc?K9l;kChFyu{})ZC`pZZ>5@v7TYd7ciTqBjGDQTAds?x>cp`kBdy-||u
z-(FK!m)l!ow_o@1PtRlGr*s3>U)@obdrFVDc-zWVr%v<<T3K5&mS?HWj67*<xBu1N
zZF7$vz53n5;K1VDzvu8hGZUH-7x(zfkv(_g*3^FecTY*G*WNE~?&JJ>dmQ$~Y(9FT
zFnLLm;=WH;>fEY>&h;eyUdQ-7J2EC)r~OUT{?3$19wxUUvRO2ydWqD?Kh=HA{Zx%Z
zQDeGxPj77IO*yXC8@tQpcdavje>TVLe9^uy4k|O07v#<4DOI!BwYdG6>89+`$(Mz>
z&#V>O{x_{&U}8{GgqZ!mj3)WHGZ*AV>8_4=_r~`lxBnYeDXu${S>9hwVqJXFP;04*
z#1&4qX5I4^r#EScb;orsK7Z{)YZ3Po?n*T^wJ5zG2?i(5#aizba#N95cJfQoyjh8s
zf0J&<#=N=8!_QYbv9Go8t*~aIYW%acpM$UPzGk%OtM1O-c=P}MuvMSR-^V<8btkL)
zs%}I2H~x=D=GCR!et&D*zO?J&Be6+Ai&kkds!zWJ8be(wv@CPm|K>ftAiLK*Ejr_~
zJ<P;qabQ*T?>+ZbCuQAD$*SZ%yybdHUb&7Y=j(4<tQYJ&edgBf<KkhGv(MW}O#4{7
zQ1H&oh!Y>T=f`gd&!57(+eni46Sx1HR0ZMVx6T>t5D4K(KKy-&1{dRU^{mBD=P!v`
zmoW2M@4b`H)qXhrG~6L-+0ES@a;nU<ulnHEFW)BlsP3(0Ez@4p8gnuG$?bO@-bNQB
z)7{HYWiM9SIDO{d4_$L-e_x<-=Dz+N$)nlwzMtMbeJwF<_q?5dx8JSJwEO=e&!n`v
z$?9FsG2P@CbBmDemTk%JxH8up?l1i7JHP+1_^JMbdpVyyd%j`GRiV^3FJCH3^;Z4n
zRMeP~U3PNO?Ijy}3s2wbd-p<7EN{ssjyIo9cN?ER*L(fm@r!&MiYu=0{QGzJw2$7C
zJ+Ivu9ws!T^Yd(6ZO&`b^7dVSVs^2F=ASl+?akoal#-aZaOpHLh08M)W%$f}GZzG`
zG(B}&jzL>T;=+x~)79==xh}w%TpYPftoX(2X*0j>G~8w%@bJ|guKRWWji&Cp_~|cy
znOeoa6C70zTjwt<57d17+J8~DR9D8{xw@B^L>2FntE~LU6#LzJ?tQI&0eMYRCOuu6
zx@1d3Td>{KR}PoAOq(j+-4|fTF?|7xm9QY2QDJ@+Tbb{NA9u8}pU&FL)|X$K)0OQQ
z74+%a&rHAG^X8nw8C?%n)-u0&_4b3@w({S5+Dg|h<=!j6blJrGN-4Kuhl|n*-|Y84
za{55UmY&MCeb*Co#7fHx>TaD?*4oOh@b=KjpRfJgUV6Dm-JToQKK*&voWF7{Cu)By
zEKRVCe<tr|w#)4%N1N4To4xfX;@+o88!0IrWa!#tx{$|RNtgTnPq4`fOH*=nuTOfk
zFjMMc#+iS+H_vZf60<tEnqg6AP{Sgvo)T4?|4UALEj-h5SvAAC;K1``JAxA~Z?dQ?
z?K7UtJ!9Ez3-J)w4=0<Qc~TzTezcG8^)0r1|GNeT*Ep9h(g0P0_gL&^Kc2r<H$X2u
z<B7zrvj&GA7M!-5rm7j<Th{-u;_>CsR#{ukLsiKyxf)|<P1g?n*le-AZ+84l-6=mm
zx(lzFrnOde{Ywk~_tGU=i{AMK9KCwXMWy4~mOso6D<c*~t=$&UH*48K_LBRv_PEw8
zyu-3ME`MdxgrHmEvy~0v_`SS?a-%M+j4kAmXIkY|ZgeZD)q^uUEquk5-ubWCB+9#3
z{QAxpr<!$NeX=P~q;>f>-U~B1s%1~U7n@nJBlT78EVb3EBfXXeoqpbOIML~~+$X!)
zpz<mt+f-+Ho0yc-%{?6w4XPWpi{w~XR2Dm0B_-a@D>*I3JNe~Qo6^Ho3X8tI?GRvc
z<q#`&?TeqW=t)V-_WvBrGg*$8eM^cepI4P?{%FI0`?or-igVvi%iOqWlhekC9Kll&
zHhwm8yBDATn|Vb1l&^tr@!_XyG`LQ+typ;H-mC82oh|E9TKXbR>}F7zpdA`nxXQa`
z=AP0!#c97)MC~MIr=~4!cw};ELXZ$IYemZRyA4nL((m!k-|6ITl9FF?@5&aRP1@R1
zyp~S8uJVZU(MJor?VwsZVfDTxWz$bSd;G%7<z+|f$6Ko`zuvv+l<K{Hzo5MOI{vI#
z7tcyXMND(OYq0Vfuhv$ptGgVp8myQtc6FEIS%aA~;-CIKZG5lU-D0Xy^{>lc((imr
zFE5MJ@t(xNZqD+Q=Ws%0rR3$3yKdi}9}zB0+81!o=+?8{Kh``?Gw;9jENzDL%+NV2
z%L9Tp<||bH&f0h;t8j6^uIe4_*XPvKAAXYgoR#U~rAm)`sr&Ejbux);3Gy-tO;nh?
zVeO}k4i^;<g9Qt<n0!MGe7e2PE=Zd3Vpf}`qwu@PX(cX)-@JR9P?LA{BkTQtH+)Vn
zGL}=5<lNQlD#)}rE<G`k(X}wm?vk8?j-0w!x9x`eNB<rYKjj+`x>a?m6Gvm_OzB%8
zoQiYY*1qjiSg_J>`+{o?z6*nv$7J)y-0bc&Z82P+b>xs$psho?l2g5vo05=<5Rbqm
zQyopsDcL$}r_P8vwRwj2rl?f`t7l8!+kQ7Q?wzUBCCQgwpDtwZSO32JWofd?AxEbw
zhR}^iIm3D8GW4mcb}d?<_0B2xTj6mh#<K5Ae?FYaxxA6<jvwn3hoo7P-i1s_F}b3&
zt2L?db@1ih?C=|c?@M+u$9`XYZ#$@2vEcPDw}mEVYM-?H%3qhcdwFUsxHPllMyo~N
z*Yp{aau)X749Qe^``?j2<IA!|JteA=Z#_5GZ<svsoytlN4&UHeHO1@BK1pG`;;SZp
z{l|k-Jn}I!Q*-i;3O_0nJN@jYlZnKG3m)d@-$*}M`L}t=V?~jR5vQ(gHOaSV7BiXE
zYtd^oVZkb{xhFXokN?_p*C_D%<U4bFgaSn0&+*bc`SjY1J!NNim$eGC98P3oZ+}x-
zQj^E|zbDtp;qol6KRK_yT3uZgTlp|<PL~qL%c#@a%2ZcmmmE9%EjKM(H^`J{+I6is
zaj8&^5_RP_Fa3*i()E9{8TFK?NAFs2U*h==(F>+i4<DW@BX#P-p^LJ63hTPw*IOLh
zdQ|4Zyyq(;RoZt8{kfA|{o~BVz)SCbE_&EikZH*lZaepX{=MxtqZemuF@`RzX;0>5
zH~n?FFn#8oW8Z%6v<%xEnV;jtvFM_Pvhv}&O+RxVa6e7saI}#6s1+)rxFT$|$hEcB
zi#Qy0mIw!ko-xbYthTgvvf5pZm7CY5&Cn5jBUWg=E4b#-1B3pz?~+#-I~qy3h;Ey{
zX=nHL-%%M~Lw7ZDzb{vOasJ59qszZ<-fn+*{{J5)>c^kYy}o^V#I2?EV(jg^f5_K8
zlVES(bz%0JwCks)o!fWsMD&!;&)&aHbCX!+dUs~o{d1NDf0tfNnDB2)?E3fnno}cV
z_Ev4(xNN(#iqz8jgbf?Rf~4nuFFP)N%2&W?g6Hzw|G~k|%{6xW{dnGFMnzoL2+8`M
zxh2}+#>r<N3pS)~PIc50dUV~sw8dXma-qGf`kROox=jtbeR=NAtb3MZ>Az5B;p#Je
z`r~cP^&=N$@BTTK-v3cP{?~-f*Twd(%(lL>WnIG?`8QAEYu*X+@s?X(&e_Ah^lf#^
zuEd~K*EGYjrew2~9zL=~rS!7W0<9Obx|V6Nl=g<0cqqx_JhAmU-v6@Z-CLR6+Pgk>
zyc6X!>5|u3*LTxtr3P2u^qHVlGL!dtr@vm#9j{^T$l+);*-?;7t+&A?&$K;rR-Cw)
zBFn`Ix>J67t*!kmAlq#umZx$?n@LD;Zv4L^jzWpnP1T#L!@Uf2x|5dr?M&l#-4?Jc
zVry_xh^qiU`%5o357##x8(uACzQMSjxq0rN%l`5Y@7MpfT{ivNtw%9Cm1g#}|GfH~
zuP|Z7>dZT3*UJxYi8v#=(`NIbqpwf<=&ac^LEG|peEB`+1suO+*h_m;R8Bnad;3V<
zws^r;=GG^Ef=q12oQob_d(<Aa_Slgh7MC_TY+U|?QTM=u3koM)7U{})@k@ak7TJNj
zO830u-MVFq%gz`zsopBF@H;2dqfbn|wW~Kd;`)Vas%Ku$ioJA0#xi$aT6EB+s5M2k
zmA%>BmU=Pq&u%%L6YiXqm^e$!sWCvoK}#wnzrHP<pQo_I-MrJ|LbZFSpv|`3^Yv}E
z&9<+8YGRr$+5Eedd3U3jt47VI2L}D`-Z=-~S!$T$UAZ>o>E6@EHUFCp&-v<4(hj>Q
z;^@IIa3N>@{LEWtC$N@H4cix!oVxZ*(mK<Z(FyFk_lVVc9MO$2_;&hD$FFz$_#P?V
zjo#$Uad7KNPcd<^J#3e{7A?q>QdU;}wyNjH<#*9XLB*^{>%4n$pw$?6HyIv$b4RDu
zsWHRkRqTh00Sy%q>5F&o-^=mx*0GC~FSWm|pJ#u~VCS|Cr`p4xTNrOVaCK*B7*}dm
zTj$GP2V}G_`%aA14Vf8xvbfalbai;zk1rEt|D00ipBNdQ_WjO6!F&6SPFstw7tUzz
zX*`$G@|=%Xn3ru&`=Tk|xZ3N#9<z-5^?_^kQLeqRhV!f~&aB&KB70F`)vADXS9jV>
ze%f0ctg}}1Z9}KP3&yLJ9ye|<nmFFwVDtao+KwgNEKRcxd6b{}XLonrjA=)2ZcdLp
znYQ<4pQ>u3L&L<0vT@FQ`(3_*CeM-!=3n^B%<Lx|UA>z@?Af!E>(^eqd^!0&cMFr0
z?8bs>`?ahr%;o~B?h<#u)_H|CYj4)xQ}#_tzVGaY3EDUJn$14rb6x9gPy5ZAw;iqI
z+=4~9o=TnmX>@)1XPtGTKd<c;7i6mY8|?1k)}-N-;N_WabEcTx-NJUC!`@8aSJj=<
zgPK7zf7QQ@cQ|S{&gK2^_PhS)x!?5zjdkpbOQwK^n--p9`MBZT({oWlpRVlFTA9&d
z|Nmp=@@dfm0iycpSC1O3Jr?y~dt<W3B|+}Xle@N=ykV8tUDVq2*m?SmY1zw+51*U6
zc%Q>PwS56~JnwvOU%cq3b@O0N>bcz;yN)V#dwajRxm&z^?aYQ{m!|eC(BhhwbAPHt
z{uGJ#Q7Th+o%~TVO@5Bd^SR!ab=FLivYdMM9sBdVyO-xbT&*vY>R-<m8@xBOYH40U
zuHy0A)7O1|Y&;p1G{5nu{J8Q^c14%$9l=$H9!}I_GcH_rF8#gtt*+m)?54f7%#un6
z87zVmHC4l(Z`xDyNvpMJ?!t8}|Nj`fOP){(h|=nN^PS7`s^zAai9$RpO4Ov!PQ1(0
zJk?3k``$g#M_f7KMoG^Po8_KP+w9}xQze+c-MhB_Kf_^VW!>X%HkZ~cyu-9HqUT?u
zotW4&TgR1Gv(B79$J8sdy<yp<*<A})a+xl+&7RGA$3Xnj7M-w9sdW`qP5JxlXRbUt
z=Q`(c-`0=!4hwqvhF0YG%lE%~SH5Oe+i68X&P!8!iVAjg@9VROuYRgxZ((_E@$O%q
zE_Y4|I9ka)yHKDWF23pe*~COoPj{0O@9yzM|DPLp#kYI&b+MU|nm6`KtF?OVeRw!`
z69;S4Y2(v-imGG|ZwZ*oQV<(#YskDOR4<$>^|pVdv~d1ImL4|aPO<E(n{=L~rO%X+
z&##H^ljwgZ<9fYxNvh(XRE0cA`_Co9cTC-Wv9s;T4f0xbRqOgXUsEqh)fG+`CTE3s
zZpl{e`1*K~!?u8j+4}Pz`N!Fvyz*$)+%TmbmG@oJf9;u}9k}jlV9VVPj-f8fQ97yz
z8;%{eu72^l!_aK{(@SS2J?1YBTIFQ*o6Y)d=AT-t_#m%EiF5DqE&n@X^1jLX*DdV#
z_9RAfxNg`I_RK%t?x6eR?khgr+n2iTO#5(esw8MaOijFKo=4MLe!t^p&(@@UPJMpo
z-meHpp=+jmJf+)0nmH9`%$t=|w{PNNt)(tkP55MNTEsXM{-k`qeQ3Le`N2&(O$Qa4
zot@+Cq;6cboIH8*mDi=aRnE+uRCeUh5oN1ZueG|%ErOi3MZ|6w{Pa|7xw`m@D?BDk
z4VUh@X}F`YkN;TO&w`x3^zZzYR~645)$D56nbR1v(rH`3(@S4P<!;}tc#+YyVEy5B
zv(JgWTjKZhTH)?r9;e0Txv0G0+@Y%abk@N$MRG5H<olj}^yG(4_s;DVN$(k$Us_C?
z(xZPPwn=Qxi*4DB-kP4rm0D(n?G!mAb}DA&ttm_DyRUZ&964-N{rghfSN<EBj_K#;
zE|1Z(-hK1EbobF4^$Gvm<W_;_QFH}3SYEt-=^7~NbGhJ>wT{^H=aI3oU#GPSIJoP$
z_#2&CV;r09zG~|=tI~3&6<UY7Pu;T5t7G2nv|*C|=lHr3Da8jj&e<(G*dQz76tq?{
zW=7mI{djxtZ2<>2B~(@R7Tr}?lYKA5T9o^uAos=~jr*5ZmVXX9JZq7a>>+7BhQnJl
zLb7z*)}?wbn|^J_zB%r}qACfq!jvD@-L-uEwqsG|+PzF&Q+NGU*t-4Brx{D9ym|3*
z!E)tmlM*JzM?b!Evwy|)*Se2y)F;@_^jY?FMr|H1Xn=EB<`@1ilf9NkM8<79t8zId
zGqdyQ($rtSe#vNiP3UTS;ph7P`vm)GUUxHIK70_>w@PWp)RXJ0FUQV}fBOH|x8F6d
zJ{TM?`zFNCt{MJ%&itrHQ;mgV;^T_9gd1!QN?04ADARE(xIjUYb7Ehs<mAZcE$_dc
z)hW2c`p#ZjvvARM->c4X@08;>7yYj8mcM@Un#|N`m$rq3e@g9|`b$@S`IJl1?-Ktf
z9P_g-Vs>&e*uUYxlOHbLeyaqU+~w=%w9L<_bN}JAlhcVqBy{QW?bChI)wQ*?dzXBE
znmTRz^yqK=FQsBTSJXOsZ)e-JSMS2C#G9E8UWfND)p)e6Nb>H>*O#I?_g8+lx&QkC
zSEt8>psnw8g3{b~+<mq8=T)VfPOa}ku2^eNOlX)Faz*e}^_%4-S)6Zw)m(p_(eD%Z
z#>OK<$np51#hyK8KWdh`STtRm+GAGR^Q9^6=<PN4CQXyoxPA5Z!#qZow#0(coSvIE
zBbQqos{5XybL?PqdxwjXd9DBavmb4D&wk)n`lyoyv<$Ld`^je=y)(&XYgaN~nBOVP
z`|2E5&0Ez;LdzAKFG_5VovOr<^-7mr{El=`VUxwvSqJZAO|043wn{_SvM%Vx>o)x-
zUAkW%Gy0|~2!Ga!d1vax0a}%`Eow7ksG{IC^Es2#6nEWx?_vE^<LZ?fmK^TVodL^Y
zO!F+4UzB~GkltkbH?v%sVQJDt<K=$U-u62*V-{PN8Ei^E@?N5({YQE}H^-Y3<^K8o
zpLf?@lxjQp<7%PT(M8ukI4~@}tNAE#ukPY|+v-DuOwUYP+okkI>izA?^UE^l%?{d9
zH~Tijj=ZQdsonRcgeCY_@1A6+zW;Na|L)v_>#q40`QE+D+LYk1R9mpLNGtzsuC8Wh
zd+DNsZd%hE5~3zubz;4|IWC_!RPc@bo04UBFKxW0dNXI*_j}dXEtj-?FRnPw5gQwu
zTd8a3@xy7SD2t!|e!-Hv`#!V=A1!+MDV3|W$()r{;=~b8OWEbO`4l%Uaou_^i}m*1
z+9_|>-kFdvL+$g<MY0SFFK*M3<rWMGRX2TpZ=QwXf{2wHXJ}hJo!YSBu14+58O2_C
zxjxfWJKIavGYcR3Cv$mAgl_1@>R&m3V{Sj~oaCW#VB_4q-*y(Qb3DCiN6}NR<nUus
zV*3I*T$E%i3K}9zp8ZyTF96DI0!;xLM?Re3SXhv(l^Q7~{P^*c>tC1gu!gW%KhCW#
zoHcFkmpeUg`){XB-zp$6EhTg9jZZ(z9Mm(epEM8Mb4R;H;EA?rT6lMF?v1m~ZdSr9
zdC8spohnPRUo@8b&i9=hwDp;&=AB#BhYHf0F3y`Wec^*=U-tbxCN09%I&G=^q?ID<
ze6mUlerGzCcj-@wc8Qv_Zk?V`r_18G(-uuQn>KUq++0tCaFK)O?(vB@p8i(mU{QLe
z?dGkRh(e|PxAg-jZ4H{5v~}Vll?}q@FMm8?%l~YL;G?3e4}KNhGgP1ZK9HlzD(PI-
z)a}3aEnpA1{VDs9f$pi$=IH63zin)H?cTrgWSi}`r%P4O&9QrX_2uq$eGexlmc6}I
zdV2oj&4Te7+q)X}?W^0hd)M3&p5IEb(Wec~%-r^debx(c<tQsze!--)dGUVP39pxJ
zU+4b%UQckqiYuC-uYDKka9Hn^-di%gy5;(tFt2s`>nE<ik}2otujS_NzGb7?xv+b}
z(OIRTuEp2a6#jb_`FVTcI$^=N&WB^~mE4m(=bnDfpssX}>cSX)Hp`+X9JY6Dzp3m$
zyY3)6xOCJmv)ya^<=gj#7W+(G12sgwd-`LS#+gSkNyK(?+&#HMd`pJD*{$5Qk}bE}
zCj_j!w(`oW-V@s&^Y^ryNB5^!gH|&pZuR*5)6>=Y&6}4y);dfMIKpQ8h2^`M-?xDD
zNfXzlc&jz0&YELWIVnc(`PR_ML6baGD*k*_-?PeazV%`8Q@Tnm3KBd<R=Xw#ocI=8
z)f==vc5#T_)+GrlN{(*TljcpmdG1c!pRZ>2-Z!>hd^+nQN15mH*Sl`7c`SGTMqJ#R
zsF^RH#&|!=Hds(pv1E3E!)ES?{DZwpx;qsYJWunvbBlBOimnGAJj7pC?09OMo|g9G
z!QbzUQrS;9B&6h?Jxu1ePI{~TbnYYWr@9I)3IG57^$Rbqp1tn1kDs5x>k^@&+DQ)+
z8ZOS`d)}8VzxvWzg^SmoUiH*8eAl>w`^~8ZUS}5+#^pGER626!#Iw7{3@we@yzV~u
zbH&K?aL$@c<wXDbS@-%Pym`MLf5?@4)?{z-t9?$PZ?-I6yUb<B{HYx*l@(i#ua+*~
zzWegKXMasYAD>j8uOQaHeQNz5N6<9OBd!Pg{{Eh`?%B7p(9oH)=O(|pwRPEE)?KR%
z?#xt>yL4N}_r$rq(f21`nk002kNLHH&_LT+wV5R~Rg70xXY3MBT$;9IibUJdqpwe|
z5!3PwPV<b{I(B%mZJ+6mtt<8j1eA)&X1iSvQF5&H?q}Toc+Zp#yY<h$+js0xf)mH7
zr$+1d|Fdd!%8qX=usAc>-?nwts(q%F(?7Hpb?*psFE8hJK78)hiF2kI5^Un<<3B8W
z<aDF^4u6^28;^CtpRUPuNOLWnQs(k4uIJLEvZn1<-|QC^;K`8Ixm(@(d#|tVvl&rQ
z*{8ZiGiDu9-d%N4MM*dNZqB#5)~vZjdoQ-}zghR8b3^RbtutG8+FF<TK0V>FUA(q@
z>-$?zRF?bCEz>%@<atKjlZoyUvUgv0KZ!jeek$6*%Tq(<(S?W3EKH0d5A{xQrJtYo
z^;Y!G-^&&$Rt5R>=I)N!a>*~AYwhWoTb2Z`E$(O8n<e4bsU8>Lemx|_b?5rNuAGgB
zI#(BqtZp+ltNwlPVP4tSvV<Aerm=VkHaYEd+o{Rx<+UeN>+Y@hvmc&I(DA-Bx98K1
zd395kJ(!R=YmRmGwCu@~&uPm9^1iV7ebRrDkLusd?_j67a2(uM`}=K1(&Xa*x1Okc
zE-pS>EyT-u<KkSW(5c%tYN(d+7OUKN!e6rN?$WHe)kZ(d)?P1N?h?xK$S!W86Ne6G
ze*B(uLF=xF<V<oY=~e&sWpVbaX)GRrEUjL>lazOC)46rGUP$onOQw?IgSnZL&1NK~
z`=7dfdy~$z>C-FUZoRH4*4>*WlaNu-(cW+CV<7QG_tb9CqO5}#J_yY8IW{xv_VR*U
z-Sam$r|+#5VNA3=km1jDcJrin`y;p*7cO|VbW%g@?pf1vqHJ<zAAf1`Frr>QI*#S(
zzl9vT)1SFt7c<Z~UA%n7szV!NYkNwTZ;Nqxpr@3UEWbvJrPJfWwinw!$Q^7rrOwA!
zy-w)+=H<(lS$sUme$V1f#`XsvCNAdT<=vY4?_G0`{*>*G@%8rB<!`fguH<gDNw>GU
zJ?n(-o0g|8N6zx+G;@bLnXK5}b7XDwdg*nxJO4h8*<Ylv#Zh$f<7e8}dG774xjWO$
zT*~Lml0`MYPH?PRlp~i@#CQ1Zt-SQNH_p0GnmFP5jvvePrwd)4BqR4S>A%CWmCKjL
zZu;@<<Kr`D&TN^Yb1d0#UeznlAX(Xc9`{l~iyLAbIol8SnCbr2Y*`SuzWD2_&}&6I
z-L_}5{C#OrEBo=c^@p^U*zmiXJRPnYtepMKws`3)#;uCe&iz~^E%vOoJn)A1nR)Z0
z9{u?u)Y0}(oGZg-+w%U#a~9XcinYSIp0+*Ic%xZqB(<gWQ*xYMORlfo=K78llP9XH
zw7U*nx+Ijp=O5eFsN|i3nV!Gc*(@qv1f0$}`25`i?x(s+GVMR#*;aF~HS30f227SM
zTQ*B-w^O;+p@8&5*>TnT1s$yJ?W$Ro=~=W?>*}sb|4T(8iXAT)*GF%+6}UagnCJDs
zqkCK4dWN)sW`2IOX1;QJ{7`WsPnwX8&8_U;!S-tI*Y55LT4CYa__laGhxH8MOIv5}
z6Vu$N(o>>ZnX%<~G~11*&EM}m|FSYTPF;J$=SqHg+f(cA?w;HFu%`P{9;i4~5@{5>
zaAR{hc>jy|hdXa{f`fx~e`j|cn%BtlFrm7nK+tJIUwc$uowrxfQLd}I3jJNQBmy|u
zu9RM`w-&tH+j4)s<__5l8?Osg{XfMsJuPg{eoZF<PPU4){|b`JoziOW{;8VwdFeEx
zFmKROi3?|SywVqIvGl)rwOC#B^P<O29H*8F>HmMg9<n+#z5I9n%aU2=|D8$aWNS9B
z2%c|!6trl}FIBLlw9If%a{F~psRc25#Xm2pYEAVzoz2HvD#ZVC!_k+w${y$yYc=@j
z+}R+rRMs_CH*Ce4*MU22A2(zeIH;_s4(s17);rxx`F-u`tzSJ7G{c|uZoa-kvNwi-
zQAYCRvm58^)MKANZdS`a8s)uQP4n%V<_&d|rE-@4jna~O^l+|iOX=F9^M4;?moNDA
z<m9sA<qKAEwe!h8`=~x|$NT4R)kWhq^4S?rhD=g!=fC|=LER{7{q>(O7WYS-Ub~ee
zsov_G!?8HyUv;r3@;+@^#dX{LrU}pKNo&Mb_qpyo`&hWlduzstZ5wj$&$fLVryFMX
zZ|irC-!dMrmYrlz-t42ZrfTii7J-&##yE>z&3@ZwJV;(4$+q;_v?4!4C!LbVUu0j}
zsPOTX7ba}jeAG5@?X@2V?f*1PU8<_Ccu!BR!!5byTYCMml@i&^|Ihg=fYyU`EfVNH
zYEkgwL7VGrwPWgeJ09Hl=UBaW?(d&_rUwaevT?jxdpR!H>(kR!=5OzwJI}s5Z)fRB
z9?ykA=}QC3{<M6T4?nU_ciqQ(PbGIhx#WA4QBLaZ!;7(dznwGhzQ)~{7`0~V?CXKs
zS1(F>$iTH$(&_B;=R2Jbt1MQ0Up*<P=;tNZd)3cnU$s3n`8PEp;?2Fyv)$!tk8D@l
zE*P(oFRaMY-0b}2%eQSgvuDpu&3VJMEV1HZzAMMKFX<QZlcyfu-8p4ag@s2zw#w|?
zp4XOU1>fGBdnnd_xwfF1*rmNwd^y)lU9I!P>-LYA+uO9GOb<V~+OM{EliT!$RUdA)
zmtUINk#KUhJp=D*%juW4X_&eyO7T=oTm8H8-TU9{#x`5?7r3gdzN+<p&tJ32ajJcP
z;}~@h6rZ>E_xI1gT>axtZq33yzAXYgJbVTQ7B@EOPCs4v@sR7Ptx>1{InU)}Gb-FY
z`%LZU;9Ht{XG`xn-LN}VboR!#?t^Q&q~3W|oj!0YSwLs~)Cld+y-#`HnV((l-FJ5F
zhi^w;`-Lw&cBAb3(#n4)_}+h)?!CQ5<>{=8o6bg;Ih(Lt`@3hsvQIA$D}QTV^75_N
zv*(ph+4X~0hRl-7X!_S!2U^CpUnqSxXqC2y+T=HPcee*<JhA-RDlo^gcGjO;v&tQ#
zgC=#h-@H40o9yrJubaf~Y+2cS<Jq;nc?Oy*vfsRU`{78GMe?qFbIPw>%$(mPbp4RA
z?#b2Z>NBI_4oAOs<4{`2a9&<A(cS;kvZeE<O_6v#%~*_M3-9SX51zwMK6se(_kOdQ
zpFe+l)Y@a#`TNh#G)~`hMgC>a`<dzUQ&Uoo_;cP$t68{*nW>S%y-!YcrcYHZm#OdL
zJ2y9<iJ6}%xMae*!h{u*GYksib=3}UGW((QHqR+3y4qpaO{Tk@9L;mj?Q%Z1Wp|YM
z4x{Z(Ygc}avR<ggCCt70&yO=p?us<KG2eT*PG!E8&7+;6+rHiPnkDa5<|@?E%xG6x
zFrzPG#Zr^P)XJIfYrj|DQ!0CRf7kBal@D9RJ(mXU^T;#a7jRE4Z|B{4w$-2=k7bH1
zJFm*9`_IdXeB&7``t57F$MM5{zMuC_XK7pzW^OR+)32EQVG;Zlc2{@z$}Zfhd#bj1
zZi)Khb5?rWVxDw`E)%=<rslBOjI!-Yd-Uwq&z<|^(wU;m@d}HwZK@MG9-eF2n>#n*
zCjY{)`&(FiR$sj2XK|FHn%&4|*Yf^`YcG^DBgNkD|8Mtx-{-!|9Y@_RhxFNg;%M)e
z`?&UGb%Xwt@&<uz{TcW7)vj3e>dIX&pVLq7mfv3(xBary9dC=t9LBdUC(i%!yC6}U
z>xozBsjF3sGuK`IwOU#1*0kAYx7MkYMO~OUQE$1{(t|l>=Y6(qc)D!IclLvSvKrs-
zDQ|UJdM)W=Z`tySe<%2?J8NRsty$GE?cCdh-BNF+mE~1UQIWY)@$iMl+>h6Ex@s04
z*uMX(uGi8a?|Yf<R)@RoKSy4ASt31u^L!al=D4%6%tGeb3upey*DrS1ZTq-7e5aKe
zn}zAFLwRil6-&57L${r++AaC+Z1mdMYo2KL%E+j5-JaVc#L4z<m+SLixxB$fcV<4h
zaqix<ndwXO3LgG4+G%!j;U2-f;P}H+_LQf#ZN4s+nOCx8C6~U<mS)@9%=H`Fs`r_O
zDoW;toc7Q(^yzlm`D};78{v)H?awCf{>{M_a_5R?rsutix2AscEMD5Sv@(QVwkY~x
z;BWtTi~gkV9Pt|O8Nylk<m_CQ87KR1ZJnELX}|wK_4~couV_k__$H?Nvv(F0%$@$~
zUeDFJZs*oKiPljH4V8H3H>rnZqnYN(-Lg5Wuf7wS*VT4l<??Akn<nXhzV}p;XZ7CT
z=sU$A-r~!`Wkq{R{<GPhl&~+(nf`Y};p);QDr>S!TxMTq6~E%!y){U5`wDF-o)3Q>
z%6=(3vgiBcpiNu094X)TH8(6QOlF~og2<zd68bgYT#e?={r*kmkH};0r?Cm==iTk;
z>$BQ_)4Y0Pz=JzCH;1ggDi(hwA-!qemTKoa)%9~&V`fHYmWUtU7rA?K;I7GmD&^rD
zV&e1Mb&dpAvvaKIy54$nl7Zd!Q%`43-R8-?OY-dN`u)|FZQR$V&$ilf`~SRK=AiL}
zxC879v;}iBC-HpSbuUkJ62rGI=@s7&2&_u>y7l_IgpB<^HBhphenGFrAxiA`xA%{4
z`qynrz3M;z?NR&7<qg(<`Cd8p*?kdk64VX8UYvg3(9rIp5<_e!$L?R3GP;WHuPRxm
z`z-1dD{E7T$%%=wcfSSklm~8j!y<k1@^3bYH$GcB3by8bIJflmlhdIhOXvQbZ1zs1
zMm7FfwS3IR=oOarlY=Jpu>8E~UN*6-ZI965i|;}fztsD-Gfq1+Li^@btBDB>=k08~
z!Z%$t-??eiq3`=X#}@6Jv)$LLbKUEjcc0@ItX{oZH|tS-)Q8qje1c93UR(9se`L9s
zu_pER*O!^cjvsGq+q#53r0?yUuWNd$b6q)E{@Yi-mz6tSd$+niEv=e;!;7g3oRbt7
z%DP+^afPnQiuAjaq`s~&>9}8Qe%_?n-#-@L|818)>G{1QWsgMEyL8>B<%W6}P0sC{
z;xci{k$ciN9KLLe(AjqW&prEPZ}dDmr?@mJn9e_L)N%Lb%=<iP`>N}n&$(}zJXw?P
zTaQR@Xnlh9tkoPp?@T{ip7ks7G*jF){j4MTU*4L17C7H`<Ysl+i>~JdaegfqgpZZa
zdGYw{<Go?cCZ3Z5Qf9jH28Nwo&*~7S^6dKbXw`3LrXBd3%&8V68M1KWj-8W2Kfhih
zqIhBU)wd=}cQ3#1pSn7%=yBWZ0;{>#PpR(K+tB*SR>@Onl1^}Z{Q0I<?l0GSzE3)-
zvb*e^PNr3xz?Q31gTv)?er!rB*(2becB4A0Atvy?l;@;~fcS$<uMgI}FUp)3UG2<T
zoPBz&mc=uZ>f;;jez~dlKDbtGcc&-e*V5pdHv8|?PFmQxa?y7Mp$`Sc?#6ZNyO(8j
zJUi9#aoIoR>EV{9BFRZw&NJ_yW}kL`vCf07YeE%Snwy(#{yqsllC*KsZ)Fj#j}M&r
z1EZs}m$RHT*cK4SrsAm-6n2c)e2wOsI}AlTWvaiuNld9&l5+dhhWYEJWv$-v{!HZ5
zUxgvQ1uN2L%$wNhwANWc>QkY&yD{VX(?!~QUMox1neNr9kWFRuKlz*aaqyn9CC67~
z)UCDo{H#)Q)0vO^4CCwywk<ikUdeNddB~;(>*lPRmbFUBZnf!J9Z#R7#WJsDou{ef
zy~|j%dg-bqXPxclr~kgTHs|)Ptw-2bYH(?XtxfsLYd%Hf&DNQcIScpr{HU>;rW@@R
z8Mt4_bCSi?yJt_nd*@`g@ItVgn0ctsmz{#fm%d$a`M%K0;e5fIzsq~sqFkfbL|!;>
zX<AnHpZ9J$-QC7lLRntstkYY?v2OqWUmN49+#Y#^E1arR)!g>z(oUQ8vUcA8D;6zz
z5*T^laI?A2lWBcvHh%7&h26!A3;VwHU69}{e7<R?OU=AVuP@!de%#pKKKN2>;H1<;
z4-KUA_s@N`>XoEb@a!azV^3^4GiT@8ExH-nf~P)yEG&CdF?pqCa#xy2Pvi}Or8|v$
z%+{ZKA>t+Rf9a;mZ8GmJ7Hetp=sx=XVWBDaioPF#rf=`=KG@^(ZQV32DQ)L4LH5Rb
za*4k$7FW$Z7CASiF7b@M0OK5)j*XvP?6U&n*64Vzi3{+r4p!w`YT$aUCE<Bz-K3c^
z+e^0^tlxHK)}-0-V)p-Up1-j>z5iYFk_W%vMD1#c&fB>)rL^ztnMCfVsZJb@CQ?iH
z)*AXPzg%U}BCzMzsntDweNmmy6*zvz=$OeZnYm<#()Wk+1k2{XQJ)^}y=XhP)FPWL
zWr}v&FGpE^^6OU=n8LbeO=k9iw*fsnx7y{}-m*T``S0WDsyO4`dFq@ibNbf0pEDHF
z*A;vokfJSmD#gI;=(%@w&#q0`oLE@AP`q#BlCK9EnQeYQPG4)rpO$;hL*<a|_j}%{
zp-)YJ9xbv>0J(CKN{yZT>2MwMTdiVo_BZdIedyf&^^T+OdbuY>8anf%y)V43I^AU#
zK5J!3-}Czx$97)4#8T29{BYYjv3IeS@#2>Ec1Cb5*r|2q(K4^v{V%E}cs##x^=|&!
zBRi)pyPJP>;k?AM((jW`i{Fvh^szN1YF?%9hf@bP_xLT_Q5>mVyh^#XOlFcxQdZaU
z`88d^>i$f}N(HO_o}0QleB;M&x4)Y0+~yG{nzL}vnJv089<{NuRZ4v=I;T~HIJfQj
zwQ62X-Vctir;HVEz0zLS6)_|5nzOC)pPJ`|lV-+rMoeShTa!}zyK-uwo>|!DIkS{J
z?-=ZtTYo!oYqbDJTXOIlOUsT`qU#QC?XvvlqLp3qP^9bkv>0{87xJ^8Ty;**T)qCm
zwR6*i=C56~>dnoqv&HMbu6C+rc>F#%GV-Lm-8aLggAZ6QZ#%R9Wc1(k;>r!JpNtay
zGGD)b{W9uO>*=>zCyT8&)Y~)v{X1=H;xFdwx;Yw}N!FK>r>S;M|28-6^g=oB3uhX`
z+iGj79t*vTv*VwCd!>86zR-h<;deP!Db-mmcP|O;Ro=UJj&yJGnV9vJDxOZ$RQta5
zeOhg+ep19V!?;*E)R#ZbcWH6Wi#Ap_r>ex+7cU0Rt9#|i#>VEg&mtxA**^An=_e<t
zs;-mSJ8NQ@r&Gns+c)>vZVQM@i_sHbowuVgKqKYu0>9~#gVp^%9ebTWCGT}W#GMdN
zUzG$^mGdgg5{@r3`t#yy^BX(Mgvb^((^N*g(roqldzMaKwL#uDLzVw+>xtD;-Ltj6
zhOKs+$PqcsBkj{0yPNr2=I+?G_GHqT%|D*Lo19~N$GLE;h3BR7d$;Kv$X^qG<j}Dd
z57V!>>dZd*;nnH&8!9iSCGXPhIe$VYEC2bu-|vn;|GaQjR;S0RRbG12leH!$6eKiE
zzN>Co^+ki7Pv*gojmclWeiiILu3O%(JMBHMbxWC~q5L0F?eI%it{k~=VZ+2e<%vFO
zH@B5)m*21MS6uWfJ?j*cPEN-qYqQGGW7%C#Z%(x6&%4!s|7}WL?9QkBm#=45@2n4%
zF3vtxk@j2g+gv%Nxo4vr=LH=UuDI(bW*#Q>^eER;`(JL4-`E?sEIRSw-Q$;=`9AX`
z2W!r|SJu*&(eblX^qS<UNhxdgUF2RogVi`Ca@q3b?Z@lCI45n42y}`5UVgv$z3r8&
z*C%?YoOu5ENpYo`@MIo7o(uQy``5?I+uGWGne#R=BZI?q{dd>ts+}1oUZ>|+-YNOa
z7Pc<RH8fP!Z~1DK8R^9@Z#Y%X6m$~cYmeNVC%e1+y_@N;H6D|Wyo=p!QTWH=bod&E
z#XnpwJWl%h$7-9r?eP$`?2sulcS`T9(AxX{i^Bh(uWf7I^`)L!t$Up3gtyQS8^5q~
zt5f|-Tg>~uf4sEs@*Ein^?9cx4r)wLX<X)*JF}nltEh$Srm3EKEHZZHr#`q`iuzf+
z*Ji`f>mM@iYxL(^9-00w($jTAfa!@ZpQ9M%7Mk-^f9h1fu{Yb?Z~5kcABQ3?-@SkR
zyz>3OdcwlOM~)qnl$B0Z5=$;AnR26oXCbG_LP<vDMit3=1H~8b-#<TakU8hxp3c<M
z(>_0FmwR%ISDK^!@HLAZJ=v$(@xO0fU-wO6oqEaqsXeD(K6>gqoBQWv2ea8rSFP$2
z)ec{z(WTlIx4pU9R+;D6GOn<DJl#wG30EB#>QN2aVjd=?o7(%z;+NQuJAAiZX+@ZA
zZ~IyLG^DlW$6deJKNrF$l$eGW7pEKBJuYpSv+C22Y0h(`XI|k>2$-=io}Yj1%~wtw
z5*?}^cFBN(?x)#Y^Z0vvX6FBYy?>&I%DLH6=|+-#aux?>=kGcAZ|`r5x<?kZ&#NS5
zB~>k_x@bqOR9I6a-FErNo@Go$GiB1x%}Kj{F1BKCoLITewd#w>-A}C#ZqryVa8~#1
zn%#xA_I1A`|GJ6&I=jF0b(mbu3uhBk^XS0yt2*XCU27_1YwqK>x9gB1m$#&?-%%k?
z;lKBPabKL!Kl|3~2;2ShI#XtKuH-qHGq1$V-}Qp?%>7%Ees%sU?3*L4xO&wJOJ3JW
zUQu!}{4*BKKlik<=Cq;`BY(MG?$%G5XZ0O@FTZ&C@?rJ;zk1Hj&f>QM6{qrO)U1`r
zpS|>A_r1{2tDju8x{_)HXHQ#p<iraN`#%ShO}1~@@bO!3_$Q;7={KAzTRGU8*TnAb
zi{JObds1+4gM)BWvU`8ghXagKQqmJsB^%=sYyK{BGn2PC`|==XN@d#7!&}l)A|G8l
zCstQnYdx_ceU^vVvgt>|7TjJLAo(d+(&%)H=d=G_1(qUpub=r%NHCiE^vMH@_G&kY
z**-7lYIgS(uMMoRRZ)2IdBcKzO&iXyjc;F6EaWud^wS%kUafv}d;5M5p6+j{f0LrR
zcO8w$DSgE{T~wr<dHZQsR}-(uNXf260@Cu!_wS#7<ci3l8~X!7tImD<Ft=TP*}8Sp
zSh>Y-wVK{z+!heWsN#9(Wyz(jC7j)2dP&#U&D}LQc3S80$2nD*!mGpXJ5;(_b}d@K
z=@^{aG4=B+3uBYON#`q;3c5u^O;icne)Z$YXseal{8N^E<xqU_`n7YQh?cgteuTld
zwa2o!-pqN$aW*tDd;ZIqdG{uIn#o$6UCmxCF>l7EzEWMgJx(vKo|(QSr1<-(pCxAD
zLLYVnq}<#!EntUv*qVrw?e&ijzqz-wd*Q=Gwa0}<GksPTcqw=r`L#1|Ki+)){qgtT
zg*jMOtXr3M?oL=#^z%!1uDC>2TFUiHdrmvK<g$!i&5Y&qDkiO6zc=k^+OyA<WpD4C
z4EDD<IDP-G(B0LKtq+Ku()RH6<z0P!P1^r|ds8<5I=d=UDtdd~(%rvVCT^N~ZOWOI
zCvqb09C^mPTymzzSr1d$#3hS7JW5Q$Ki=&1&RoSaJxAG7h@D^Nf%N|mr74lmn7`lg
zO%E40H8uTFW0yUfyR-V^>n<I|na3vT2o~+&G~JcCRyVmaTepAjp83wU%Gc*a%zFO3
z*m`GusWkt+1?wkYzyG-D>cW)Bw1<mY|6Gm#Z(6&zR>r!nXJ7I2j-zTPQjDGyMW#d^
zdsy(O#PZ|snwG<Yi>6Ku2@MSjjrCO#+E~*ozG&ytR@b+0|Lp(&`G4Z)WxfsnzMpvh
z`OU4Z-8X(%Of2}JYo8z7r8^~@quBHDE7R<XcgN2cy}M)Sz+d)duJv*6{dE)j&iU2E
z%{TO)nz4>&bDpEJecfM;K5d)7X0Ab3S-PdPe*BR=JtI0guTQRJ-<3}<E-wD_e*a(V
zZFzUQmaW?J?^oHZS+gQH7OBpSoqJ}car?AsVuz+D%#C<IyH(-B@+YgGT^Ibe`{(re
z?;jkP`Ea$+g(~xi%1wMT*{|z7Fu%4{_?xIy=S<J9`K4l;bS_`G;ZW;bd(zI-cXLyd
zc+#)ZnRRQ=6kff4z4$-7e8TbB`9_wOnYqIAFRTqexgyQ}_WI8`peSvr{9Ia6a^d35
zlLrnk{H(b*<CPbv(ETm9V}9Q`zt?HJ6|p%lGSYr;Eavf7F%0flCo-#H*(rnh_ja_j
z@`}2y^xS3t^~}r5HJ|18o%{Co_E*DGMxCB}#V>4BcCR@0eCeu9UAul+DNQtTS}4FR
zuKQ?S^?Owr&8=Z)RC}BfLjRcg`%Y86^-Al<le2ScKC9<nvX<Jf_Uqt`>#J5Towa-V
zdF3a?k)2;=E!%Ap;ydBwGtac5A2xn9>zvjt`MNjo$uon$ZAaJdy(-==`EZ`zu}wOQ
zGo`w8f}^9oRfH0YHceP=ZEAY-#0!m8t8Ueu@;)MVO1neFv&BjA-JaKaW$$hrJkepd
zwZuYZj#XvX+1X|n_f-^L6!A*R^Oaov?E2^Kx#}0zT`;+_#Ue|o&aU{j(6n<a^>iOC
zSUJbKys!T6^ZI8?#p6}xpBG;$@X|iiH(AT@=*g3lOUlce1zMC6UrD|C_-l{rwZ-#d
z=AL_IX=rfF!^Sf=vf<b%gShF=_Uks@UpFo5U6k2$ceA&yyV-Ubc?tcvt7lercHy!$
zSJtoQ>TSHJ`E9;r%Jq|syM7;knX~fAy424ZYj_@(T1{MQbM=s^K+J*Kz%Rmq8Ip}l
zwljvA@@~J}s1vBP>d=g==T~b^?g(C~viR`fjJAMVF*4B_>kT&P6o1y;{^3iozu~W2
z*$#>hpAPBQ9o+l<uKVjdJAZ8xa`}^&7kB4~^zkamPIdj&5hA}&9jfD(-@UTAv|Fms
zQgpR#vw)QH;>9+f=Dz>*<gx#rrytL@U!0?))paPgytbjg{*kb%=#Ewa6=Tb~t-n?5
zYrZn<P3Dx+Zo0FzM(+EXIqt3(x^+BH2vx-JnU%b#yY;TIFeNQr<j${8LQTsuI{KEa
z5}LnBjfMR@&*u}~zi$+0HSAfn@PyD^=ErX=El=!n?bVqZ?3-ITVZ!y^`;U*T6q&Uv
zHe=&Lwv^9OFLU}z%>1=xryEU8OsMHvaQ*0{Yf?3O?OXYMFQ0h+xum?@*vu--B(GrS
z9hPRrC)+<3-kOrc{Z!PA!%;)#5%c#uXV=Z$?Xirjl-qy4)!E|ncBiNB|0KFPK>NU=
zV_ta~tDm>ty}KeyQT*NBzQae}7k+%Wm3wFHNf~dIuem16ggF1bp6Fij=;QHTlcn4H
z(`GX^eKo&#;`zQ0l}-ztmb=>STKnnIz2KVs%XUe@nK68=`#!St=iT!+oB#Z=wAF{|
zn6OPHsVC0=a`i3w-hbZ1;q_jHhRUy^A+9y5Gy9x{J>{yOGVJ!}RapGnpp~JWCB04k
zg=FXFL+kQZDc4D99}aQ<<MKz&#*aO3d6V<Rz}`#MGv|0&%~qZq-l=Zf<GW14e~DzD
z`pIV@)6T4X_U~%$j;>d;X4SvGcQ3B)<LCGn|2$qNd0n}3<-(myO**HyxmI@GaI$n>
z6TN@lxpjW`Dr$F&?(tlH`OmNL{m=TW-=_pt?=HQ}X5;rR+H`*Ha`vxfoYTDxRXE#q
z3cr8aX|rJ$@BHJDmzF8a_51wyef@m-n*WB26>r^+p1etC@hYvkbLZCl)Q;b%lYH5I
z`gNAwyMF(?xSHMj)?=+rJz6Gp8(*u)`i8EFypizs^4pMzfOx+n?-l2rI&(_&;Ze&a
zyrPb^UwtP^Runn-uhU;MMYCq(486XOD@`5;XZC&VQ#x5Cs=oKe`X(K3j<YM0SFQ>Z
zwzz!n%xbBtg7)9nM;(y$elEcKbIrU5YQn<8e_m{q-|)EC{M_z(v8~(ZKX=|%S^Z}H
zWbK}x4IyD+pBi_+Klb?JG`o<yclZ2w9Y5Je&3nzhou;XGHg35Z!Swx})_#t~2JJj|
zE?qq1{8~)VX!1hMjwk2qeg*IQe%HO@XwviAe@_3)EM(TiZ0-90FTDQbrBv@gk);ow
zyA-U+pYlHUmizsRL%YPD*`;_YP4n2ex|$(WH$-KUitT}rU^$09+b{21G^29z#RW4n
z*7KW94!5)xO4o{w2@kS*f8QwLv|a16?)Y0X{QP~Eb}l#aS!T3kQ{|^sZCPt}ecV0w
z&b6C|=G*R=#=kz=qx49<<HVXb7u|n8<gatE%m1O?>#L=uwd3oy+Zx*1o7bK!Z^#Wi
z$FND~ana5lnTLJ%eCUq<@ax;#hPwA@Mv`@({`l|6Jj}Lhn$AWhYd+Vs$CE7ISlb?v
zK3@HmNpx5Ee_8o>qiLsfve!PGyuBny_FMFO&V}Xws&h|^?fcsQ|Hy?04=Pux9d%8R
z<zsJjX!zAuWp<~Ao8RV#<Fm7~(_Q^r1zTl%d_Nuz=PTG!zD4Ds)ERyLp0`3NpR~G^
zq7S_-v-)5qJ4gQfTw9KX{g?k75<F&^TCBDB<CCMVbx{RpqUOhzFq}QXGeNbp;kajX
zEo-^n?9;EdSuwTkUbJE7KXWNr$%obbHis7f|C-_1Y;-~R?)7!i$4^~deb0>j^0S(p
zg>w{BB9|@OHjV#IF+V%M%!W&*DUr*5AK{$$_v7X>nYpSme6NGU6+7B$Y<8qErne>W
z_^R|i`QUv#hEKg=r|Hu_-*RJ3T%1*{C#rPLwJ!Vcb^rhBb93x^FTZpN4LvPXxclx7
zTRAN)t&FU!q`GM7xv_Ig%E~TXxDoLv+Eo79N0(Xh`-&RO`@SxWQ3zlEquh1k+7soR
zn}g-MFGOG4)w}5Qvr;jq38z<QxJ~`O{phUOuQO(~rTuvql2W7Bx~gM->({_(=hr4i
zX7fIE`>@&~m*b1p%jJIa9zFd3qkLZdx1B-zmn_+B{cQW$=fd;<=q|eWB6Y9Odv=hg
zRXh*9Ei3+fR{F=&^Y!Pp<=*xR+x+Lt&*zcb^JKT*uWWz!f3k{-Yf@x3@Avx`j(s<O
zs~#M(>21;sK|f!I+{gz1``3;xYRl*>Rd0E4;^E<%zwiGyE_Uxz@)QaV4xTb~>ctBe
z9D<9DyRF48-`h81)hjJ6twk={i+9}3d;NLFWl!bYRHd0uJFoM7esu40mG+(O8`h|N
z(eM0O`gF%~(FX!YH4Qe4Fz%4$a?H<c+Ijowg00JXjP|!b?9}`;%VC=8lSO+xg9BPK
zO{GF-D%F`M&Yyj1!u*}4sXAFbLGgl1tb`O^Ts7uA^Eyap(#@P{@&8|igKDZx`S0&t
zD$!f)9JyuFr1SL;KkLM9%UPy(v9wipigAaE=asA1KR<Bhzj*iV*$)>sgc{b=)XZ_;
z|J_zhH*fjIjTdj-dt6fR{L;=jZ~8yJTDUo^b%wXF_ujil-1B43tom81;cBND8v4?*
zcv^nl-`8*MZf0*k>=;~Z{5n78{3lWEjO=V>8NSD#e}DX0GtEA`s&9U!f-gr~lIOhI
z#~Su`3+JSmmEZezbbheu!C&9l^4{iX#&Y-mi?dr_#AsdoO~D~h<@6$!zk6c3&gjbO
zUU6ZXBPElrF;B&8s@lwx3#E?Q%XBpze|g|>(1)FKr?Bn`VX>XUzQ^UT9h01R+;rjf
zw;Po_FR!aS=s)N5GmGM9JpOk7EY92iw{doM_Bi_0r+3e(Pn(SPeOans`1)9HS?AXB
zPEe3Y9@+8qT6E>pr)T$k=oT0F=@j&HUF_~350m>r$BeSBzn-nC=<Xb6R~2lX+^NET
zjwkwe)ovMghV`cpwqMgpNDk-rbKR&T<$GB|R`TKQ`#<^C@A<<O8X9`1{6F)Z{|A3(
zX5<`sT&66Yy6X%>%ghfsl2vXN;S0*cZ0?z#>fbK^^z7r>l+eBTXIhV?i#?3E5pXa+
z_r(IMH~O~XCr>b5F}YXA_~5Ghv?Y@qx+>)y=XX#2oE3R1D%a(|X;CHb*&n-S2<Elx
zytea*+`q4@bZ+m=w!~IH{$)=;SF-*3ee=^Rv3XUWJo#j8Rzy$y)&AwYS5@i4XV22=
zzIVqz>EplCdjI`)W{dYi(HiLj!8xZ+o&Is+xZSZvW_F9>Up-&z)aE|BnO^7P?yfHV
zen;$k{yd-Cw_a)gICE@i&F|J&89Q^PDP2#$9OBMf-dr8N_2WTlF@X=$)EfMKeLr5A
z?EmSBuzx^o@L~DCC*_OJ+kSskVCD5K_)oyh;N;JV=bwZm1!wy4`+hjKF>afz<#7j{
z#K?B>sOp@3SE6E%J%1l_?9Z;E?343LdoSE&y`?j^TKsqITt3$Irz`K7ElaQzkvysR
zu=4g_(S0^w^xeF=q-IZd<Zv{botlx+VSc}&`T6|XzPGoxO+1;hMoj2vd=6iGbKg3@
zeLt%AA8+H8F0h!p&0`;^gh>1%<J_Bidiv)J?e)$1HGf~Ps1#Mc*>|v!QSM*={{^La
z+PU0f5&X+oN=(8(9_3&2;NsceHwqW+Ke9f32j^E2q5jFg!?u0A$lLARWzt~xwC>-|
z=M_Kh|7Ug${PF00?Zn;hc5xqFxM%Owt^}>Ai_3E+ZB{Py`_fyuq<qS}iJVEDTLMK^
zY~Z={YtBRMqbru*xEFD9xp~>et3kcaJ3ln97H_LqAO7o9zz#d9x_;qyrRjfUy|%R;
zih7eNJ>}Z8Is4updhf(>%+1}h<b^<W+53lEb)zk+zHkU{<Xn6x;Gy8O-UBm_KYn;_
z_q#{scAqoF%1drARZ4DX{iLPfDWo^Od-waj?XlM7pH7|Df9)#r#r)>>a{d3`^#7ll
z|MzG8;%(cmam;wJ^wcfs#WgSIO||*{D=^NkVp``)9?MW?ra68yk9BeIugQCSZJk)G
z%36nRhtSZvuczZb$>0B1e(cz>$gNeP+1J+|erYt@Z{|^Lh3VlZpM?B6u4Z}9-tD_X
zPvb{VwxnPlf1ioxo&|1IdR@Hh{U(hI$|jAcH8<x4D$DQAG+b*cDC5fizGQWT!i5U%
zuQOFWCb=AWZ=2tdcC2CNn$Jo54m?tAPb)u~V|Mz)366GtxupB|_Rg^=oFlC6XJBOG
zWHy_1L)g`b_`FGRyEmo!am)WdqQ2wtIqQ{cS8JbqxTW&@4W~*`gYc~;W@ewP=l?WG
z_nZIh%uM63i(!f^potBRR_B_R{QnwOt<rKXR}pbtrYZGobGc6P+e2<~_Sd}sM=-fg
zoEaZ}>=tXUiJNn)LbKweoiTmp+xDNc|9^SAMfp3KO*(;*k)8Ge8;+$)St<*A*6mzA
z+r0m~p@H4e5H;^p0&c}s8KPM`8bq^P(^~ER=B(f<dVVP^@9ivSlP9&&uem(quPSf3
zY5CP`qH5=+hT}q-n{94AY;Lc3xAS>MUf!aG3mXG8dage|{I+bNg-pT^iOoA@Zu+$O
zs4WivEGf5e{rdiW_u|fdo3r$NjQ-@wlYLZ$p71<u{TwSbNoS!4*Hh7_Ya(`b`Tsq)
z{KcDBhu)S=SJ`oUk9p3*Jzg`Cb|yXbvir2L|I_;afAo(${^;alJpJ)W^?64gfBf`Q
zzoxM(qxGMq!z5KEIdSdh*Ec4`<tEN|)zna1=JD?S_Wu03$I>!(B_}qy7~SMqC0KEB
z`&Czi<*yF5m-wkpJv;H_$|_U&<lRkeoUbL)Ql&2xf7_#{Zkp;Cc5eOCYwOaUg-xI8
za`)`{nM?PrdAV?FNPd~J=cJ3`C%&wH<y86Wi{`%nFBTtBSL0w|nlgR5Fjwn`Uo~ON
zkH+Y^YfV*|>NU}8*^G|ko~n~o8#g~H%Kl{Xdbh<|9ihGrI~F&Cy7;}@@B66;ZM?U6
zXALO+C#rDvA3xkKSJm<E-DI2pZ;DekOP==fULN%4!SDO(hL$JA>;Hex%*fIBsUsru
z|MJtLH8Vc_w7I=K_i^<9AO3IdZC(9j?>k}j7nar2GF)9dQzOFV9&FEh`Q+QuwR5Co
zo?mh3DPBCe=g8zL<&7!RO3d1`A`a{_u;Tc6H-xR$#Kl=>#rlM}T+7m@2PYkpK6?E9
z`}fa}Y<#>XX78z0)AHt>$`SKcWa-ig6#S$lK6mD-RXu&Z3s-8ztq<?_<L9|>{kr*C
z^~f1~v;WWBx$<&<@E+SmAEGowl3s3Fdgo^&|Av3Zq*tz8yLZ9W%;HK=u1~smLG+@=
z{{K()4F$VDUh3AL_QcE2*Y_i+hiqbU<o&;U;xD5%v9up<T$XvcYuzjRvoCl5ygC2h
z6ZM+s58GebU97!#_*U_@c6qyR%u>?Qonc{2tql#%6Ibf<2ZYN#XxmnG$#QCnmABDk
z^_gcUo?UruV@l+qw<QmXtvM@VS#0#~OtYBv`HRye(-%sA&;S3T8>1(#9ky1d_d)!{
z)peB<R6DyCtUt1U)haFJ!-tn#&eT2;l%u;pwCzyq1@6=n)3}``sl?=oUp(b?ZB69i
zTxs)78HLuSrlzX<0-{yc^K1)<OFgqPBsp0*{^#NKle|<bYk$8EGcEC)bmD1I&b=+2
zo72yIILL2%B6s_Jzt~vWxb@ppdbhUhdmEC}^-fs5;@8XN6(7U*r`6Q_*&`zR+1UQ?
zN&gQOHZ|Y4=P%#4FV5d{lFI7p1ugT~9+zme>{<7D(Jj|>r-l1`ADW-OXFA=yuXl6p
zZ!@`{=gM#H&zCR1Q~7+0k7r_t)BL?fnhf)gdtP{~wZp2#Avn~{&Fy5`<{dG5dzUh^
zKHPu7(%1ii`TCisUmki|_ONXC%KR1S@9tEV=tdseBzk(~%5`cYeACxl-^TjsR1)`7
zodbJLitEIjkpKU3{-^T#&)Y!*cQtz1tZpX0kB@W;*F2WrckX=sx8iH-Vo!gXs=adU
z+M{pF7G^g2Se^YSd>j-cdw%|U{pH)YX)?}QvzE?2I3vgG^kjdVgEKEL|M?{UzuD>V
zbqn_F*<-Rui;L;UwJBY*XM8i3>o5Lu!*E{ZFUh)}hq#X%JKkG(a<kR0TE!NDDXe>T
z#Ii1&B-*-Xm64#dyH=L2_Q|TG%D7N&zXUGMhknz!r+bULtiRrU{<*49pM<PfbmmOs
z_GQo1R;|u1u#mBk;j{KA7TwTVG%dmEt+kc)&(HgRaDzHjC#HqRtIj?<?a9l`S;zkE
zt+p(ApkV*!ApeKoe}DX`yHYc6<x0(E%a(aaH8QpzHay#PQQl8G|FT7%-Td^^({yEQ
ztETXp-#??f{hn9#@uXF&SFe4sa_8Eqhl0O+UMqLUNA2*98xrmOvPq{`uix}@sqY-y
zYOxEe1y-)Ade~~d`T7i&FU5M_s|&2Xh4%)ZRN2_cnWAhTGA-rV_N^NqKAU|qZS#}Q
zmL{Rj(?nzP)aACfCun$B2q_Bn39RiA>J1a(V*U85W=D+P>QBKR3v(vUsmxh8$8|>1
z&6`(G#{cQx|L9?U{p|F4b!|Rs!JC{8Cx*Q7R1s43UCf}(xl_feYoE@#J$vT-w*SGP
z-Zwwtb@qBimxURvi!^$AdOn=F?7#Wt(&-r)83}>a*0OVDx15>joEj=Rv7jZuqGVph
ztR<H-AAPhq?0opkmpQ5D-`T#oxp(&E<$i`{X3KtueqCzud?!<v;I;o}{aPA6EfAl+
zcuUAl7aKnvvxUETCI-ymS{=Urng9Rw_M5w8xP6_CigX%<9`0VSd*KR>Hr)x~{Lvce
zlFJU5nwx)Ky1u6M+Ro1vf86aKoq2irNm1k%Q9Xu5N9-eaO+K_wfNA^jvv+=e{_*Cy
z-SJ-YyGI@zQ276&H~+(_)B4e3+8iRTjvT!aI>&zeuyF5_dHD1B{NvBR3awqUWYeZe
z8L3kWG<t47Hk2!CoE7ewe#z&EnuMg}!tZx1-Q3+zrWiljWO+I=)AxCITb1Mf*o&5D
z>`KI)BQLC8e@e4T-Oli!OHRywJ)skuoKi!listOR!8Mbc>*1QceDC#h7S3s%!S53q
zDk}f?$MJ}5HJ1K%A1!Wg&rQxK=qRyT+dX?pJD1n0HzGepYVG7rw{E>t_S;Ra=7Zz2
zE!!Rih$v0usQ(yV?-}fEZ2$k|c?lT_gC^ZsrdKDcaE69{ovJjG=kepmGS*cg{U@9i
zSJ&Ly(Ot~Y9o{=5S^Hb%tJP&&KHp(hoj<eGBaCmU(&=eO)msc&iWaGylI8euKP}$u
zI@h*<b4e+Y#~y#&kn&RKmiYF~)z|alDl3hDe}B7t`}XNao~XPmx#cBQZZW6ACa-Cs
z059*?65YsC$8MYZWp}R54hSwbuK#kp-X}a=y#N0TcNxo?j*S}&7h5#vF>xi^E{@EM
znWmZ&x${AZ<OY^2F-wD#DxCD+C8{n@UUtPt+-tA&(>1yq)mZYTH*Yu}8#E()lFG4U
z!=RTYeA!XFdHu(K+<23>Kl}5y8%~zp8&A#VY&`um=_~K*$bCtc%zyuW`S#7w%IM68
z4+bwoxI#Ia8WpC7PIXy4^~%-jfsv7!OMl0_aQs?fbEo#bt<JkQ3FqJ4&8d2+`t8lF
zvj+||=<Q2$Y=4w8UuYro=|yvwG5#{-*00_xXSK`f<nvE&?rvV5(p$W-RLk?wjpuJl
zg18PmFB1B+vsZ6wtK@+fCo*2{T%fP9VduAvt)HY8L_Cn;WB<y_d*$kN<_YIT*G>o&
z$)0(q<oW;BHIkpVE<2|7>h<f$-FdR<esdpPSm?ax=QBP&d7Be2UTEx$Ij422Aw=V^
zs&BE{to^6EdX%&)?#R88dKJ03Om}W<tWLy*W82o=w%AZVKW;|&q%}`|O)503PQT~W
za6XqKHSpBbRjYXTc_nX)tlR&bNjooRoo&v-J#9NCeAub?L1EwIP^n2OjXZoe9hVAj
zcp0;)<+prALq*M`dGj`x%zv@$`yER*wqKn`)jXC4rEHcgvfR7A&$;kH(eAIA^#&fH
zrJ`$#pKmHS=p;2;inH}_g^iqvZ}R(ldo{Y4P1nB+ZE6WivYy3xeRG(`#nU%f_r4Pn
zcTt<1cp>9V+Op!8t21*J?vdNj`bp|Z(eGW$o_ki=$nA;Ke<~_!vfX6!zhlyC7kI19
zR<#pUpE*Zq?n#CRMOGhw{$Xii{9`9C!8mu)xt>{WejIb$7$b|B*2f-jx2#UK{AKYs
zPhD<#lUhq?oZjrSMiv$sx#{x)3-@}=&KCc@J|p;0>zc5;udW1F|M63=`+wWLXu1Di
zRZl00{nm5+MBEqt-@fXZck3k$b@h|2rjItWb4E6K94L<COI4bfP?K}!S8N7T`{BmZ
zFK6u&o}Dcat&w|g8aL<j+iMT+i%8mX`K8N5Zl%d*pRIW$wIF-3&grVzw{I?+(#9Go
z_~FqUwJB-0!VK;9%lBXBdltig!zuG~U*-1Tde2D(R&!KWdQ}~&Ug@goJ!vaXftlik
z)n{g}F6s)N!N$&hB5kwkOs<6i0_$bJ?$eu5TfX>gX}5}}MXcZAOWXfN=}mXm)|1Ow
zV^QRBY0a6XAu6#NbNO~2xgq=Fz549Sw@o-0JP*lpJor|%{**<op8mFgTW2_yEqz+F
zvsbmwP4#=uwv<=Atlgi2vc%4cq%GRB$b-eU?f%9L*>499Fx>RnmeQGKAaN+0`)O&T
z?i4fQwz!LTdoMpcFlF+a)|Q}YU9<Yn@~ytK=HkoZ-5;c#GOHAdcFG(+eE7-d%Gafw
z94yQ`V)R~rHoL9|wzhQ|yWAW<b%ixT`9Jqm-P`8ZZse`9Y08A_z879h*1Mp4_T))V
zwIt!^tUC`aoG_2eG`jlztr#PaRtcvUqFpk6%b(U?G3hN?W)h|2U6tK=Go@vwki@5*
z996NZo*#ubN__0(T(F@eSV2Qu+kN8H$VWCCD)nzTWf~`QC{9Q{xj~~e#8-K$k7$wJ
z#pU<pt{<&VIxmt|DA2IszVnF})AP1%?>L&|b40z%zVY%y6{)osirvze=H`6%+t7L`
z?bwCZpkq%jEx*SwYt<w#HScY~DV+V8f#+u3v#jDvJ@WqG>!N8M_kaAb*!VHxqPCFT
z{Qgs?yjGhnJ-fAcu6w3&@{G5dHgfBi)~{MNagN%QO)3uyEx*ii-RzKZ=H-^tD+46I
zMd~qLe$;zh{k(O%gM!1B6&dT#ZtVpJIg7<yy+4fgo-?<mXhm+Cdh_459Vgz0x-)IR
z?C7h)Ad;1zwmGtmjeYH`1!=<D6AU~wB(}tD-nnh#@_S~+U6)^~Nbp2HTDWr6Ri3jh
z6H{ySo>!*cS*PXnpit||l$TB`t65oImdyJ1uP!81H|h~*sOi;;z4s#TmR)~#X=Cf9
zv}XogNiByJ7soca#D&i6InLdr^wREB!}U&`lbeq%V7a?!P1h7L7SH8DU%r2j6kA#+
zCv?`=_XjiM?OA)E;kKIHlB4}l+k3t%HS<1xjOcuts#f-z^~ljR8&92LzISMq3<KlJ
zl35E6E_6DoQnGqys-Je<{`+F5Ub94N<fe%%Kkcd^v`wnu>F3I%$B$VJMVNdWZZCXs
zcJ~ZhyM3>W?D>|im^Ddf;+$DYNlyJ0v#%{V|9t7PWyi9lbBf<4b1yyHvq*#MVZjZp
zjMb~OK32?$(OaIMu;%~g9kLZMo0YF+c*Vv>9uUgk+<5E6369Q_E(@~+nz}Mrr(O-+
z<`L%(N;{8Pm>3sFwAjV^sx9|Wog9|5-R^7Iqwf~_+g5A$WxhPM$;H`Z$^NuG^Ugni
z`Tn)KT>tbh;p^9~Uc7GIyDZ+D&$tpmju7s2;b?Pm&0Z?(<LCD(UutcZbDVkN{j2ZI
zl|6-42~1(%6XMVP<VmsRxvyU)c&JS1*(R<xy?f`{VoiPh?YgI4bAZBvr?@IAF3{0J
zX45p*V@Za`l3lf<RXBd%b@{V-q03B#^;ssNZJli;3$IL%JhkLfrr$iP)V*yi3kznP
zTX$|!>MXPCcA%`JF-avbFwn8mwe{(r?%w`rM%l}3pLfo2`IC28OE_llt|`AdqOz5K
z*!pc*#PR3F3ytIba$EnbH4=LIG*u^J3rEH8X_98w#Xu%mG&(daJEnF=uQqG0hf2rM
zF6HA5ET$6~^4gQuB=51h9N{bM@+a?>w05ER)H-3O3&r1bY;A3;RtXDDQo3xmzqhT8
zEm~#0an8amGYeB9(*l1hF&$Lcq%%4EGtZarlTW`|E8-KGvwFS4gHln``ni!`Ry}Jv
zmN8?eX{tt>ywI17zkTNSRi>Yfyj^V*mlv^nTEoPQyx$t@<w52Jp1G95Ev~C1!u9Il
zq&=rLCLizc_nQ`CJwHC&Z?RzJz9<V>u57U@!n{Ad;^uewZpc3F*CM#{dW&1KGxO<b
z`n$c9x9*&D!zr^kbj9lRpq`ILSCc@Ka(ll)+Lxnd%h%TRPu|Kc9guR^X!gOEYb@K^
zx)ijZUwu@l<(j>d71Rv}jo3WeqvEL(xogU<Usc&t`_6uC2Ib~1O@)U6Gp4Q%dswnF
zK%{kZ`uU=S|BNA_x=-}Hgib%db|FU8Ei`@I+@{K!{>um3j-EZUT6cSsmlH?ON|E(@
zK5;$XIAf~4Bwzc^x8Hhy)YwI<tak=^xbn-?x{|WeptvwLhnl3OaI<_hJHx=B*5&JT
zP8?fj=~f-_vWwkwjp^-4M<!Wby|Xt-POm-a)4zFlci-GsYwdJ-&Br?xmwQV}%5HsC
zUmpxMQ6;t@>iN0Uz-ntJ;T<u0+j8%onyBo~5WK-hK9QMQdQrx$GaV^$S3xVgm*>4*
zv`ph<42NS<(IoM@f81=pfA<DY)X>*|KJWLt&6CfpPX-xT=wryq*1RTeuT*>Rd1o1U
z`R6y~?Y-6JZrf%!o$ucERlObY{_4Ag0zV{qZ(Y5!>;B$iOYT?NUUwF)TD2+pIA7eK
zuj|+Tn!HJAbJA6<UAuOD*~V{nU3FW)tr*cS*S6+`t=-u;>sFNapKW<J4{cj}Tj${<
z70!00&1H_v+e^<Ld|c9?;d1`I@UiFJ&F<1-<{#Vn?>MA;i*8yI9?ia2==aLW%YU4!
z|EJE(%zW*}tJkk9UmWHS42}JJ?^u%Y>W!_Jo~=rV>M=Dny;E?Qx9ZR~6+;`FGmq_m
z2`*MvcALmkyVdW)>qp7vy3dv!_1!V2>ad<?Rr>09uG><%8Uh(k56ZN3vN}FlZ`Xae
z`up0nxLnCiDvHu}fxed|B;_9N-}l{i+um)V-xE&>=}n(KJAdcQt=ZS(o~=$cz8$dd
z+t&59Z?pIhJ^R}k>Ed)XWLxfCFRiIe2^kq3pFS0d=|#0T7e>@()a0>$esyYM!)9e+
z6=O@~(ifNhG*#_etdQ<<VX>op?Afa|8E2W~qPBOKa=-ex>nmUPq^T2^Y+wBMT)o{H
z;eLBRyXlv;4|*DTPuG3Cy8es%l`Ge7aX!0lxq0z}`DcHNxdy(7+SGDxo!+)RzqDp8
zo9LlZ@#gpa^oNUF*Tih)at+c^T-EpE=MUfR$bk5R=ga0iIB-+Z$TD<(pZC&9nKx&J
zeJ$+lS}?tGYpTwQ{!KeHy^2#?J}nS$*9l%zyzHx`fx&@txw;wZ^7Tzmu1xv3&c!)d
zIsV6^_m`~7*Xd4p&#aQD@3nR3sVAQ+=T$xO{P*wwANga)kFB|CxjKCPGyVU+>Nl*|
zyZ1<vFw>`5$1-eAPP`ZRZJyMViu)2DQ`+_{TbL!aN#$|CmwykYCd&6-6j*yT)g+{C
zMc<E)JLl|}!?j6q!R6&2Z{|#UC#?SC{Qrs>@%uh7y)239?>a3s(WAxw&tv;%2l;C`
z=ATbjoqIcGKe$*hY&LRscCLB5{(rt%{;d?%x!j7N`I?`b?f>VWnQwnT%R|jGZFhvj
zCGPN)PnE~if_;{4N-5Ujb5(m#D8yOuapxQjH*WUL>wA}RCUfad?QsnaJ$C%qjZLZC
z|G%F2eq($2`mMbxo<Eow?S8KG|9JC!eV>O)QumYJEY+`ai$e`vSM1s~%m3fE<uBg7
zd-i2za017z)$8{-8BKlU9sf&6JAD12#~($eaY#umKOtl{T{!;e(QJoVVF$n5+_WsS
zr?+?G<6iThKhM`4o2DBrAuoM7xUMJH`JsXQ|F!-fUY@UM^H53h-+ABthS<`xYaA|{
z7|rCd|8<c6=l%NM<tdwHP7+yo?3kO~r;q&~AM)4F=*kG;Ka+7wl|8WQa_5sp`^=p<
zepOZ9-19RvuJUK<w|Do>Rs?P~F1~*;W6JrOcg266x!XIb2x(THfA;IRnAhycM$M?h
zhY#2Mj{n~)|MvlVijm~$DiNm#pMOVeOk$O<`QWS*zq6^Uiz`M?yh|sVwRE}v(zDl9
z6xOeLQe=7QrODyu=92j~C%@(1zPUGBeed(CnLWo#y|-nodRt<V`99`My8U;{Yir~E
z4J5WG-+2!%EJHJ9xz*R(|Nn9}|I?q%=O>;^@mj^ksraG7rlhR2@bE0tl9I9uSFW^N
ze|_}r#|0W(n{=Yj?*Ft?=A}>Dk0UI#d-s-<&wp~{<73cLy?L9{Pd@)FzUJFv4X)78
z&^58!`_9+A+k7TJ+j&~*ZS|jaM?rpUt+bx^+Vc4J|6k*Oy!5X>mSU5)=FUW&izc^k
zhq*1D;=b5rv1mwG=;O~n3wF*~Q91QUNK=K)xf35aHb(UPIKuMy@#BnDU6)_F6k05k
zmtkx<oH$K4{v5mg7X|ZsC6jHhZUeQ{z9rt9v{-qu&Hq2eHos1MUvsOUsqq5W<wD=f
zYf2WqoLYV6yKnc#8%kGZH+o*15<e+b>(uGUtyQMwcS_Z@!`3ZXw(QufwA)HQ{~ZH4
zxO-XVk|51*?{6O$?zca9?RuQDnO)o@yOeEm+V57!_NW%LIc6==;Noj%u0L@8&b3ON
z$Zb<fUtc%ezqU8SBr52^Au&&BP@BbcS*V4X)v4L}`%ZfA|7TkL{atEF$`lu+z)Mz(
zuFPtA^saZ)ng<_uaI!S9G%-d+J-cx8>d`~4+?o0L>N1@VK33$|FFDH!^4+!M$o@$#
zMl+wJeD~azTie^r&S!MtzQ2x`@?5{kXVXqT{j9O6=kUuTFAE-h{;kpNqOpF(f}Nm6
zh20Sw5*S0TUS(-MI4Su?aL(-Qhs3;QXE$-*U3N2P+QWs4ZEbBcXL(KVT6*GHk%b8B
z^wX`k-zv)R3HQ2bYU>|<S~S<*ReX_(>WO2|oIqLM*U(n*Pg1F7cd^p_EO|3C@xvhF
z=6MTxNzeY?wD;QWXS0rrInUPamA$ul<Hn6UIkpAdx^d%145&Gqlar&@q&vmT%*;&u
zpqQ7mwDj!m1n#B1y}f5$H?&?lcI?<Qr5jF}$;rvZf;kJfP(yoJYq9j~(;f@8j~=yN
z6SMZzo9T9Lo9|zkDsy)0!QEn~x=l-~*56p`oV$*d<=N&1r%ze$Oz*bW_GY*wDy*v5
zHG9>|<GYUdFUn%#JXxW3|Fi^4*zVF|nMoxlm3PkCqrOll&+dQN?U+OJH2y7~S<mAc
zbiw4Tn9uCU?zB7iXD#dQWC-y!n0ao}nP(?gOI3zW2sdR>I4$HCd2Hp0idZhi_1x`?
z?%(H&beqJ|aaw!Y(ML<TYUj)n@JaooVr&@{Id#vfg;LLzPEWG4Ti$g4?UDCo3Z6n;
zIsqz@3qP)74VJimDuk6Y;K3||$oo?RvSzuRzqwh)s=~wkaqnlH8uJ&|()8v#XEbd$
z`uO>$O=alOKU)@^sMs4<QzyUGbZd)~V$(u_Mu!6+*EUwFXU|G7nwnaob@=2$i{)+V
zlAcRu`aGNAk?NW9=}CxasPK~zUX#W(FO*(_7k_lz_nmp(H}u5mJFgUUFDg8(>(}$!
zWcapr`D5)MMMajEYrJgcrYcNZRITB6KB8&jNfY6dI>9$(PWE_(U0w4$L{I3`g4?b)
zo-a{)uyCQ0L$vRVRSViDTyH(T^u>9Vu<S40J>CU*CI=7hD>Sm?^>rw{aky)mMqYdJ
zwd|+6g-+GjoxgT{8)%%}oI|mzO8xY;_%Mz}1Ko4nu`G&T@~3BpEq@eHU?KCPrY<Wx
z8?>kuv<#xDl^fKTV7>foRbo`S@JXHas^mR2Tl()VcbD{B;`uz}Z{2hi5l^>?j?=j8
z>@Keoelcyus+ZsGC+(Yi|Lp>+H>suBqOWhSni(&v_M-6B=e6E@?za{S_;RQ%E1DxY
zH|6`wz<V#`7Nys8RcLwpT@`Rr@HXnwQS?5x<-SeZh2!ci3hQ6~pQcivY2>)Rds&hF
z>gQn_x9n`1mN8+&^;DU^YuEZHItXug{YB&dwwDGcbL3do#0Q)`bc;i;{ZP*QhW)Qs
zmg`MdHZ)D`TzLGkq70w%>Gw7h*2R1D*66t#O;s|SnNX86=ifcMvbT3m_Rp`J_4W1j
z&lCG==S*E4Hm&3H?}?A}r+@!kI>WQ&!t$%j-GyxSK318{_tkiwPxAx;CxMSUS8`Ra
z;QYOUtFrS)EQ_t5NTlAG%`7RQy%k!gU!=_X*Qvt1QRMJs%||C?K88#aW-g4gx^nz1
zclOT*pVDS6W=zrhS8n#cvomDc-gLLhpBeVn{=Ehk6A#UKvrC4nR8aong7#M%rgt^8
zZ#dt2edPiPx4vbZK{stamP~ti(!^O<^KZJ%*#euR9yUkcZC-q(WsgpFXHj;w?CDvH
zf86EU(Q)UgiDTU56RT$BX>@vXR-Wa%7knl9JLhY$xZjVC);uh)7oUH>y+S;F{`u#g
z%Y%FRdWzO9Z?~;3+g$!WuIMIcIL7At<8;f)Pa^dn+T)*2i_WXmKfG_*%)G|^_xGEm
zaWy_TlhKs_?-N7yxt<r7Lm3s<PyYIO_0G&h-QK5+PI2mX)0wviA6$9DV^RpmqJ)mr
zIMu1ao+(8=>PBzu&5voj|FXOxt-L&o=g1_R&5uRY+aLY8cg$61jjr>wdsR|-Q90>u
zYLz+B=J|7El1hwx@6GU={`0G5UU;x&u4&?_zj=T1)Z?Z%onE-$gzIJ##S__1^2uST
zT9cD=v<_eV$5}RCF7f%xM77J7ztku3ynCH^erDjcGwUBIuYP_>h<DFgR-KRMVmUXr
zmg`S(n{s}S!PBQt*F<ccRABMvU0M39-#=|`=1kjoF>qVn-BbMg|4SV2mv;{h<&(2G
zv3=i9-$M%pV!fv=&^YzmPerJcrTY6D#p$P&J%!e;U29@yy6^qE!#+wa30iZXpEUQ|
z^!f`&rLXwORTKK}?<=&EzWth`D)vO%`E!4QMgFO^YVJ^JyuFe;^ThK-`_7!-Gt1!h
z^XnfD{VTTF|C>j-(<Cx9_4~}gf3=?l|2<)jHJSEX{{@GL(}Yti_gu6+vpBlHa7}&F
zo>lg9E;h_I{k&?&;>C^ERtY%v3r~06=$7KPzq?!;w7m0SfoDZ5-zla%sZ-24YkCW!
zt7YAPCGFYpUnYN!jMBt&h7$fCH`}ILT2Fd#*?jB8s}YTt6{GXoGn;k)R`M1`e%A2)
z|8RG0Myr5ESJUaIN)kLl;qm9^Sg!q3|NnJ;;g=VI&N}=b&jkBlzH`YbGV<ncFNGF?
zIj>(n)c^lyzi|KYLW?;yKeg)*<k$Zy4-k2p#s7ZSku7Ze-}*McJ)&T#{NqKCh+Ndg
zL$%(sKUjz=mp?vKx9jElnM|sSxu+dpc_BpbL3!Ss{_{^CTwHs6rbpVzY$<F1-Vfci
zwl&X|vAVVFDam;`=TtX)_0M<O$6s{&GVZ#t^{U&Cvsa5F?uRv>Pi66LQM{L*JlD(h
zf4Io3qi+K~u*imNseF;4@%*UsUQp6YcN0$eB(>YG-@t6@!|v^RNpJULou0KXPVW5a
zZAQmUR(Bu$H20tSX`@X#(bE=PewlLhRp_5%?siTZB2JSWLO<`>S8Ki8f9|eFJLhbk
zxM!8o)Hz96T8>6D6{eq#d#f1xo#R2mdkNu_GMfZ@^San>+z9MHzVi38C*_J<&z?O?
zkM(P<o^HBvjcS*HP4~?`r=~6b%j3VS!6~a(VAuKgQ<eYP{P`qUb$mHPfu@kO*p&~<
z%gYPW-I*D;3rAi$u729>)m>|w`jsy>Z&C>qEBJijl-RziaQ4_<(W(hv2Tnfp{P%Y0
z;Wsw6Nit7<Rhp&06><x<5p_-c>uY}L#+8gc$}cR-`;w3MPd@$hUb&Ozniw8Vo!Lj8
zol=|_Zrb)Z^V6y{2^OL5S4u5={Iae7&g)O|x$P{czFlY4(U%h@vYeQ7ra<ZN!hMCc
z&admlW#0CGd~r>f$8QNkfXdA1+pm8-I#zZoOX=DTz2%|l@4Tm}gl!M|`1JPe$g5E+
zf1hHVBkTL&#OmV~h7!-KcA2NI4VdLI$)z+@R9Cl{$2(YU{%OMt*ZuE(xE!msjMeJ$
zqbkdOO`r37|J_c#x%}+y$-%5M_e5=4rShQgCFhOlAN?1omwBJ*Wcz3-tI^e><Q#X^
z!hD*}$%isCeLkP*yF5o`mW%N|Yw@e@KYrY*yy9B3lyTPS9@Ao%q{P^k^Y`{Nw0=$f
z)#J~>_qFfym%d=1W$WkPJhvw9b*>xFUOV~Jr>PoUO<7BneUCj}@#<*nr?oDtHq3eb
z>0ZFII{mUUkLJJs!0^le_2TL8J!@BIf1P)%TC%TxrDl5m_tr0Q=ME}*yRD0VnANX-
z>51vvO}`(gcrH?U@UZcz?vdcg>?phCMj5j4S6P0a@BMgdBV#tt#fJ9#5m!&$S#?2F
z^yH<DO-)B0{W7xKv8T1Z`lEpGN}b5i<lmi&d66N<UtK#DIbXR_^Gw!4lZ%tDm#*)v
z+<c;oscnMT@&u83wW(f$^JgSz%~Y9uZo#Tbhy9YWe(G}l?ECNgYls|rTQ<M^j`!JE
z<BKM}D_3d?b+Wt+=_*lcUbgC3kbmvdiH`~%6jp!uS<BMwXd`$2w%q0)63=!$$XvW<
z#evwIJ5C&zUYc~eH2J7G+s#*>e!5XIrg-<q-+x$`80Y9cSCxI7<nw>`(#x4@j|(TA
z6xkUwZO^JjE4B2dcklXDRbw~5bkEDmB~BbhGkGRYp1dSjvuLNx&KSPX(21!xe?_zZ
zsbf0$fR#BuzgCWEy7MxtH%AwGJTbi+yyN>DjdXY6mRdb$4!!tUVJ0sg^1q9yd3Z6S
z$;ImUY4=~9s++_5o=$qkWu~*{;KDOsR08AccGlII&gTFA@!3hmmWIZNNx8?_BSXX$
zUzEkwm~WmFsXOHv^F$972^krev#X~CgoK1VD6sI-u~1~$7}4|icwb?{e@4H#c1J%v
z5ZHLbBDhnt=;t2O+=88VS(q44ojSc@-Kw;6cf!Q<-zB`e6V|kFf@xd#-9I;Trro<2
z$0uv!@x3$e*Y97FvXY8+lIk;kCY^sC7%IwHU?C#oCtkOI{-;kyi>8L2nQh*GRJMEO
z{cB-LYz#Af+TKQQFZ}f-Q^qaI-QS;orVraf&XCa5@9XCN`CypesqDq!=v{1_eQoXG
zhXqsSG*|8o2~AB&X-RhPD|&K5u<G2r)SR3tM?xm~sQH@BcFkaFzub8L`SLY;dRDE<
zdUkHMx4S!g@v}1r-+pWmNGZ15mVf)$g9i!>yu7_S(c5^oAMaK1{PN`sXo0;W)ArM@
z&nKyxn3*kFrM28|-jlQD_n*9Yc$kNmS8#U6WWS|7ucs~Fw5iMf=Vtq*n^&(+`7>*o
zVE=K;x;GZ>{PK^!tPJMi=NFzoLt*Z@31?q5tv|t~x4qjz!NJv))wHzq%zX3yZ+(1H
zQc@o(Y@SE{5?{1><D8E3fB$bUzxT0F=KI3`@9xFv9}q2R5ba%Z!*!!)h_dTfJ@-v1
zo}M|LWiq!n&i(%Bk5^9pqbEnFt=)0-+vM3vkzpHUyQjE#id>Cw?GjaS6qxF=zI=yu
z%>KLIkH3@US8(W1xbo=lr(y-Za%<z=)}L?BjF;ZUEGV!b-Qv__>)AifOx+qHx^s)!
zQ?<D}Hb_>KJye*(DHyUvW9GR79PYQ;1-7hgKAZ92(=DN^zy2})zM7`<qg9W4`c<*u
z`%l$Hd>1ji-}bHe^{2>P3;rksh_nXh=5E=xP2qG_5o36q+~%~ihf<6bIhZ!-2!CL|
z@$Xx7PGu&yZ*T7xejb5-S3wrTY>`b7Iubl=LY*v~DNei#ucWOqo88MazyDU{=bi6%
zWk(jjTxv0g&m~Z1`(w>bPT}R^=WRdp<nRA$b~iSbrM)>zi9hhb!-5ATtBgZS4Nj>D
zc{Uw%jEau(Pz^rO)pIp#@q!D-FD>=n`SaTCh{BUxJ#Jf*U6lmq)&KL~^Yhs3SD%6d
zWj{auXt986x9sim4f*eP&kReg&%3i@Vybw2kILMgN4pkrU0=6OFYflPspfI@b1yIV
zdno@&xcjJp%h~_F#yTBrfpdA&+1EDQ%{w0cAo=R5&^v|KW3ODhW@Kb^D1Uy<BxiO$
zrPD^?>*M`XQ&rVAOWiB`^TP1oUw3;Y5w3~v3qQB&*G!x=NyyChzm31`&*)pXZgH?W
zXZ+JnPua(GFrnjw2aCe&meh)h8RqvZCWpt@&0KcOjg6hX(=EAUQNzuogHMZ+Hbxjq
zxFl_qsQp{Z((bHLB*nrw{j_JHr{?Kt`j4MQ=PfL|XXE3he5gV%>{id#Wh(uprblhI
zZ=bqFEO68AmD3$e&Xsm+MOa<-4xGokctuo)>)RbYw<m;MsaE^GJH0NvKJzuVAjfe*
z*Txd5Q?`6s-7z=M+h-UZDth|HY2MbY0zGODf-hwIE}01|I+XnX#_o^4vlpC+J>&az
zrP;kn1r-%D&dxTwc=29iQ<H`SXn?_Vt7*p~53Q+>GVTV}eLf<*XLC9~b8~Y?Q-ijC
zf2(-xk)~F0!{TQ?pFVxw7`0YHr8C9G(L_x3!S~De?)m-wST$?*>=!RyEZDnuE;IYL
z;+IRO7rp;Gf6=yWX4*T9a)VM@uU!+{_y5NJkJo1B3w0kgn0@xlT<hsqv#$k2#(FwB
zDz4jOvqp@2Qpy#U)TROrm;VPCmf!N*nEyVm@2c$5wOgm2JLd;#^TyXdyL_kS_1Xv>
zu^u<&t)`|uE$#+Vsv@jS2NmAGyX|f?(?x(qOG|5pZ93lsPoqgpu8GHbB-3>b7hlw{
zE`Rf2yT6_1-G|C8hZJ27I>gQEwk&?WDd8ZKR@%7(kIRy`MNClXOfmAbkxS1gn6Pb|
z*{j#DU%q<tsK5S)ay!5L!-wv2i4PyS_Ou)Z9sB93DAcK-oo?j4G)U8Fp}@h13QZb9
zoo+u4zpp=kzV1`-E-UMeQER76oobZ*O~=dobb*D8$0QdMF;@}Z9ed?WB@|~aTKA5_
z|KBsuvUfKeH6#uxNNVV4Jh)WK9l0q*Gxcd|g-u+Jnf9WC4mM)xDl&_9?{0tgOzqyy
z&wR^o-CD8U-Y+;<7_>V1oAvuA$E5QYtl05mP2KEHyW$zWcPdZHFkNKHpZ`K_QR-dG
zYwwn?wRc&0``8>NapOIFX`&V@Kinvs5z3ywIq-;z<b<M<_MNe|#@T27*a<c*I2N~^
zug&A6SJ^Vl)dw1H=UqE?yj^_)*XK1;cD^m)X$@>Bu<?wp?+BgRDzRMP)}O$nsPrja
zMcdxJ{L>e{>2*(um2Z5${%rHyN3FiIJC7zQfWkR@{r-8EHW>x26#0Gs?)mR>fB8z?
zUkR`<E<b#*%R8*#bnf<zDKCTW<e9Sto@tAEc5SNX9YGEji@HA+`Z>4GoSSPc`QrU^
z`~RQ&w`|?|@#*@y)}^PXrB2__wMc-gz2e);^opNPbsHK^KYg_AcK+je)$f;X*<$kh
z?nbtjJE@CxPTwiKJ~yYjRD1uwtLs6DbnV*S`Tw4%@356yx962sj+ylLd-eA7cRZh$
zBgw1o_u+&y|70$<i7K71^LEVhxBYNnX7Q!8ShdNLn{Ups)syP{bm-aHKR?**m+W5d
zUg}!7E28kEYE1RtQl031GV`x@r<n9*m9NWEp6PMn`t{@Y%I`f~Djxsn!$Rkp=eO@a
zn^$e`nWDla8N1TJt+rl`hsCi$_^bMj&Dr96ZEerQ8_egu9&=bUJkB$)(6DSaZ?hTq
zIhU-NK5mmvs@%R`*DYW3|Mwi5n;kl*f7IBm+wsXOZ|~c%tgP$}x39dIy7AcjJ1f@j
z+h+%w>YD%W$9xkrvrBjGocX^0yTse&{+}-#<`0YtGkY~JbymMZz`Ko~cYfv8D7sm(
zd*SSR4>dlfbWMzy)b=jXuZ&;0Q%P(x<L;9kx7WGdn^G-v=EE(`lE}iFJ~w<PNj=Lj
zN)U17VOy)G8hrc6s)iJ=W$FT|YgMlVh+LhJY|>%5E?J(>t=VJd?KTaL6HQG@haD{3
zqQVU7_B?%J!gWgK`s~l5lQ!v0_FL|$BGl7zn1_!qsQ!;d{=ScF*5z+hggO;CnD~}Y
zzWsjB<lgIfE|XOF<gLz>@Bb{zCvVr&;1C(f`Tg#H&Ah#T%l5?O`&~Ylcyg)=7Z>-=
zJsT!GJw5&Nr_<{{oIYOf7aXko{@vZ<i|_w4`~Uj?A9=l~9R}4g?$zx1`#!ck%g`=9
zIyL;mg~R-hzy3V7R{8thMH-REe?5AX^zKi$e}c)(AKTy8PG6{Ke>e7SPUT0{X}a-!
z*Iysa+uonG|M1H*R<_(t4M&p>zAWj>mOOW5x{q4r@3-53e&nxr2~SsV(g+F(I>XFw
zcOrND{l43eC2Qr?E!Y>|J$EK@^9;*uvDMetJbZcI_N?*#-?H}q9`<{vPM&=0zNo93
z4BzJ5*I~bY|K3^k_o~g86UsNUt?!vmR^g1C2HHh%zxGSutXZ=J0@5$>*M1Ys+wqX?
z4d3y|T>1C6X8WjtHs$?4$R4>XM{<AVBhGDkwY?E0r{w2V^F{i7UaDU&*?-*l-zpCQ
zjiSh(uTN+1ShH-#Vp(UI_gok3B+?9I)J1#+{FidNUFLBYDq(lCxF^bRg~!%xvrFS;
zr^aAkkB8f4YnDW66yMe?Soz+zZ1c3)pL+6)rf*p!(4!jCUUD}6WTI)-!^!gRK81-W
z++WsKq&4fJwvhj-w||P`tI~yjn3<Y?zC8a=O3dqzDN8P|Tyu5n^4;x?jdj1Oesl2g
zuddQ`OgPpfdFS`a-#fm3yIr{ZZcCG6-QUykLFG?4m>!f^{dn{If17mvF3#0gXX*al
zyW@Wf%f!16A54qRJC?Tj)7knzY|YNiGIk|1?*BQS|KpeW{>H0Wt^zE-e*b>?{=K`v
zft+m{ik@o4R94;;I8$s`7M5)^bH}4q+LceAPQSS|nf+zRtYypGepOYwbN=3#Yx}uw
z(`s(pyLbQm65qdI^I~R({@Z7t@BhG>x96kVnpupRxA)D-F@L^j&7L{__Fp7jnoq2+
z|LDEwqQ-Ns9^ruLy%#;E^m(v@;<<SKf1A*&S0}G?sH&>^aaP#>!lg@H4GqU%KYe(<
z_S>6kTgThS<BFRP9ysLM{bTp~I#JI_6^WnICY@B#-@m1`a_iPRrQh!^F4>)a&gp25
zNkQPw**{bBm?l~@dNln@nDT9*;4Wq``Xl(ODUfO6j%i`MP8U@cW=y*FFCc7v`a~X!
zHEwgnl<nGEPbrCq9<9`w`EaSq{dHS^_RI+s@mP|gYrQL~O{GhI*Mu_(Q+U#Eb-ij{
zrE$uANojC;RN9oTMHlLRnVh%zdPSsk@~a%@X{nQ5igc}cwsec7%#S^B*W#))&F_>b
ze|~oM_`3k>^RL(MKew;;_a@^l*6(&r{`&fQ^45s+x6O^d@1At=#H_8^J0GvJ{(1Cq
zzw&9L-Q{nSp7+Vd?5*4TtM<y3A6%;(Ri%1Yv@J8-{PN_j2|w>V|GY8nt<<888XB*D
z-;qpucPVzZ_p?1}>%6C>mY&>IYu(;2!*(FUr0BA)dGXz^*OM={oC#SU8W$(G{eGP_
z`*-;Vb8X+xF_pG0zVKpuUjOXf?{~JJTD9s;bLygR>O!2`_J1|oUH;Z>Vrq|?vb1^L
zlQ!x6Gh8QEZm~CB{Qn9w|D`*3obFCkZgEoFwr|%|@9S$9CmriK$#qDf;dYwZ{j{`c
z=MO%bX*X%5$;Xsg0X8QKR6Gr&mfK4#))rWJ*xu>+1&+fLSvsfq7_HsM=3L0;Z0N_^
zvNBu#P}($&(%TW1+b67kK0WZ=MrFw(IhS~y{et3ITes*KADsICfM=S_=fK<3FP^S5
zi83!;misby>rD+!&5LY5LiD;DPG%fQF?(FJQ$t59<=&s4Yhrdzy0pniN9?p@?d-HE
z9DMxB90tk9c-HNGXLU!8KgsXYgU@-5Y6+h|ecJKq)#{3;Pp4<v*UoCVe}0{;_0B(C
z+6Gd+6}5IXtaeQc6*N_kUJH*)eYnUqB>Z~9#;8rHzE8@Gy#6nZd}3dDzZTSlZm{Zj
z`|agM5x2#G_ik=(PjNE+SFty4-TsGeGPjCKSCyu$yLu*abHx5cX7yLECFS`1td5GZ
zPP}z1N=!GdWZLUXk@rPioem1@E_)YJdZpp`+o!X#&6Bo9>3hh})7-yoTiaLZYnSib
zaj_6twr*WtTN~S{Q>V}Gv=Z2qn&IRiXyDD2*1X~z-`r_Alj0)VwkS=WCi<w;r1{|v
zHIu_7KiomhUGW}6kv_pbRn8ujO)Jlq&3*Iqp6S#zYxRyLnJ9EInQdNTw_@vBWw%F~
zrZ?Zs$PKm2NMUVTd~(jVhNCK(iTCC611k?U8BIQu^l{SBnt%EK#U|ghSsJa{!K60%
zmDl6XKR2De<0HGXZ9?C-vRTrzJ(mVGIE0p(8mFBJ*>CUrcgdbTb8c=<zkKnYpVGt!
zPfkw$^7UI#RM@dIk(+l^9cHtt`<gxJBun-8cTZ=>|7W|Nv!{)fTl~?v^2euww{O^R
zGbhq~*_~oZZG|;quU8cB3ot5WVQPFcDO!L<OgGNQ)wS~5-;yhZAG^8>ci&}kcAWC%
z=KT2|^8#bj)6UH@T^E&@bCY3j?OvI+t1q`qJap(N_e}Hrf06fRYq2#qdh74*0j-P=
zFzC4de)+#2g<<O>C)Y;wh9A}VF8j89!sKb{n`6Wnn^h7nEozlbQ;u8Sx+>}F_aMeY
z8%5qWC(ioa^d|4s(+evd|0owuT50k%ma*>BuR<QSiKnx@4WwMWK3x$wy5-q+OM$M5
zUfLXPi7|VhvAb&NUY70Xxg~!5wLyC6EBW+giEb<J&9s@`{qytl`Aa{~;(E;cASTh$
z!s5h-0tQDB0as?#rAu$T5s%B)3tKI^{r23o#Tf+?7A{oWsyDlLw|yo5#f&M>|9??$
zI(+zwtfiB)Gqc@%@#)(9>(6(ef30k9FW-K-^YqgrZ@)eGSoNW5Z^hoYJ96hWPMge;
zeO9rMhnG)?gD1T;)YFqwZF6Om?Bu<6^Ji^{+<e5ZrJ><!*3w0bm=>Qj`6zBG;+kk7
zkWi4}VLV4u<q_w-ipO6IOFM!c84fKpD6;C+=+I!=vSo`vr^|-hZ-e#2PyDg({KZ-j
z)pJJsbb4H*UG^4^>GApb3+zSQ1w?i+2iEQ1-nz4O)$faMnA9gZI!tqPTe#J}#a`%m
zs_CJ2i`6nb$6tKu&-k~P$!u~XS3mP&$1A;-k|}3b7{@l}FDhbTS+r5&WC&NFfT5)7
zr@KEdn-v&&uyM9uZakQ9V%M}INgLlx+Pr2>&-wa?`H@@GOm~;RyQ1XGCc)YM^4+UP
zA<?%b{rMdoj3f+Z`$p)zI&(2;;|jlbt*mEeMxS);77Gdub#-)PRP*idIllEw%jeX#
z{<DemFO|tYcbcSfCe3?Y`e}_K*>$~c%9WLs?=4>znMhszwumvM_3!(Ar%z7iouyh@
zb!+_zqr;7fJd;|OzI^?<@}hs&uI*<NEc~2KJ8LRD*y3^1Wp8lmmBWGpTV6jaoN;r<
zia7x~NA>TmQlA-SpZ}J>aLr}^owv`;VG{poW^8*{xueNrdVR~XdkV&T`&P!ca66dl
zXuippRxl7!FHWxU<KE0YM}AfQ^AbbdORiTP=SV8QUoXDzS+?gfQBINE!%H$<83JYE
z-KPpplk0C^y>3_6)z#sXJybee7k~Lua{1y#&+v5d+S<KezONShbMPSJqs}E#^>Q+5
z69ZUhG&G#dIg+*6u=-lgx_cWMd8OAcjJZ59_QlpIJVKMi#Pt^(3-N!x)#|fAAaCFy
z7uW39!Of0Gaw^|zu?2o^JiA77^{Uk?R<6A|ZRh11=ZpThp4L9K_2!ZT7d(3Ye|NLx
zy~`+YB_!>-?#c(#mKtxASgw9}UsdM0DUS`LBV!{^Y)h6k`N|p?@OXFhucjlxnQ6ad
zbXI-1Al%WgAkX&qwNAaTaIr+=dX9r-UAOk#^{s75N|!s;t!49L&a}>X^X0XdJzSL~
zc9UEGh3!Iyw9S$y6;f+i+M5qAx%|?z-&X$8OOuBM9^Ok9O2rth^WS+o%yW{Pq}!=e
zrz5xhdGzMH(nOAb3l*6f85rvu8XFmZRaL)y_j2L#<+B_AF<Mz$fBfBkV}HGUX{o#A
zhI;$>f3L!47?;0eP1ier`uydj>sOy%c<>;>Y*o6I083+nfrpNivjFRpFBP_q(pF3d
zSZ=fUG@MNfXWbjc^jdHKoc+JPEI%I<>0`cgo^bO+iQc`A4tMu%*rwm_;&m*?#OJqC
zI77;TT=T#On=V`ucexhR^hdccXj9W&osG*@b;S1WZAtbF>N?YSjj_!1Tfx;oLAsAG
zup4&=i?lA$*}Q(~eC6frrtTG`o420M@+!D}Mm(k9_X-2we)*@&wJ8-ga&z>=z0#M@
zy0dWq{0g0UzFLN|E{g;II6L3UVf*y?^U2fa<)5x%PVb47JhqG7QiktMne|gq(VP2I
z@5D_ysdDgPBA=Yik<I@0XB+>%pX8%fQG5Hfh=^Fq-1*D97HL$}+I4kzTb6y%;9yek
zlRs{6VzM##Yvlw<hSK)_46*m$i!S_}I{*E-<r`LX6j<;yIZQ7*zqxHurT|AWd*QMe
zSH|6*O6SuKDR4#Ib8nsJFlAze(DJW;y}uP4^PjZFOL=YX`y2t+Y3KD4a!Uo*Un^a}
z@Xw<u{rfh9)dxIN7rtip?3>t``kvFJ^5KQdwnK(2j4FXoCRw)X=zL!h$0(mK$>|gP
z=$=o@0rp0Xu8=b`4!*J6ym|B5W5?Wf?Xp_Fmd{b(#oLz)*S-~DdNoa?c(s<MuCA(7
z@1;w3&YWyxlai8p@#aN9@T8|Qvpe^k<hXF=!0D1ZK23bfFMCE-T3)|jVEg~W*7b(l
zH)+k@@n~!K_Dh%V+8&%7akA34hHpWh@}8WZo7UV8`~9-4?CqV>gT^0x792cqfZ_JG
zT;&Jf=O<rNc=D$vKc!{E`RB<G54q0z8na;EKbF0F_ufoV75_CUb!Ia=--eezpWpoR
zM=kE&rq+G??2KksopEEH>Z-TK?dn<AX$v=&&v>@)!H(aT{Mnln1bmllj;vr%Y4(_R
zwk0KCaoHU+;q5xJmp)q=!jj^;Y@hJ~;oH(LxLh_>9sb_!bMxOsi~YCn9%<b6FDE+v
z*PJ^Wlg#qke<tsLa?Zdvs`l-~?{@Z9M$Py0wr{TbDm6z>eAA)}moA->zP(M5t94V~
z{a{7oABP_rSZ~V*-B592Q_tn6PbN*(Hk^HyhmY^m+WKGW`~ED||M*nDW}^K67w$ZK
zJWBow700CKB>&gzQYzMdzA5FU5X;%AN)kMm?%%J!_H)kpnVd~hk9NHKbb95QRZfnI
zV*MZ6@Bg2-OS#>1Y0zV<Q~qVWM(Z<FPH9KSJ-b_5?Rom;_ov^i=lWfX+a|XBG^f&>
ztnB35*RFeH@-OG!dHrR{tYyp8<bL1#{$qN6ZFl{@YxW<n<kx#E2q-*O(d}aLPWz#8
zX7hwV`5*3&a_lN*y?fXZcI}Igut+Y)(#u9`|2q2dx0+sE({NZRFmgt_tC2#+u6y05
z?%vtEYm(4*UdG0hsAq45ZU3a)E{yusbn}Sh<y&?q)cD`Y_I-N2-T#wUEc?ePyNpvk
z_s#vSzc#IIWwnpTk>j)bV^>tUZCJBEjoEvej-v?6rIjM*Z9eN%m%Ue;>gB6>&&Is)
z(7wIZmEUHjU$vRkbYN5J>CM%h&!0aR?mm{0m9uE&%1-9r{1>j@U+(7alX&5o-b3EV
z#}k_rx;!q;WD%V#YcDr5IsM$Mqj%@;VPAfjlgnhD&B^5ZwLQ-4{6hW5-8oNx|Mlwq
z`}EJxeE&RpZm(`36O#U2II^gvSfcV=qehp6YUk9|VH@-AKJ{ShEU-9JeBSQxx3{;i
z&Y3A*uwHp0hyLCVOz!<x1ZDVy`j16yO3{4!^yy6v4aUY*k8G}mh$T-v((`d{Z0}y1
zy}M_=b5Mz%XVbdv$u{?kGFxxAyH$J)us)b!q@8)nmhaj0r|JEI42usQDDBqTQC_O5
z`m>DX%Gne5R=j_-TVFP@JemJs2GdN#@9&vzsb_aKf8Wmg;jXUxjhYuC6Dz#VZhf%v
z^Gxlmor|`)%>L=8q-MIZdS7k6*ZR*k&o}z?%cq{}{h<&b!rFiQaC80F>08RTTrSx(
z@!mYSx*vb#6_%&!#g^ZU{B>%hd2UX$sB5B%&7nTo+dp6K|G#_Nl<*a6);#*hE_dQs
zk+lpTXr!s{+Eqb+l@}JZv%<IU@u`fIto-@&ahsf93E$5B<y*=F!pmL0y1Fb_v}ewx
zOOrN#DR?z0c&&5T6_XO-*xzS1hOM3|owuX0?;GE|+FzMU6FJ_$x!G+0;Q6-Od5<57
zYHO@tp>Tfc^tl)N+^y!O6(lsYwXwxjeRPehej56ylVx?-`emCpPrkg|&sWB4dSS1H
zKa1{_5Bq+<e|}|U@D+J`zuzm%<bJ>V?x7+SQ+M=fgwC~#$9szJ7O(GLliE}Du~q!X
z;o|-3LY)epLfT<#pM0}^cOY%^(<uuRrn%%rnKfT)6tMO$%ig@*WH$diC4tW3$CqZF
z(JxKj?y+iNmQ(1Jif{3XzrR*!`Fh89JpZ<J!|ILgJ%VSF%?l4d;!67|bIaDYc#BHc
zolQAneBBe5mzk%gPipt$y<}%{=qmTAi16S;bDY%mR&zQsJk&X8_^s+`jn*7ad!A!L
zTfVj4xOwC7>*Kp$d~!FrZa(p-vCW<B+q#w-*UspjEUjQ1{hRBS>cmR>M+aNq)Hf9+
z&iiqBc3Q3#w>A4rznYI-qBT#o<DXu9U(>$qn46Te->3EezsFltd|)uYTVs6H)O2x?
zXP>UJafQ%Fi{pK=kB^GSrQE)D{l&X?PJtq;R;~K^>3;pxRB?UztttDe4p+t9|0c!$
zO<rNChRydkn~x+JzWa4VeZ{JkcKWJST2mkW*qChdZ}ah$>({d%NZVZWdv1A9L`X?k
zWZGuQ_1C=*ym$9oeq(dBxw^E}4D<Sb6-U!=zxi18^UPuXhaamdeyzNJ@#aOxzZ)NK
znQ!OoTFDxE^=e3Hcwk6K&+*p>lQt%q&Gc9r?6NqJ?HBut7a7lATwH82Cu70x-O{tq
z9*eF2$eFkMF`wMu>-ojMzN{=RX<GTU@61pAs68F)|NOoGx%s%<;|~uHo0!ab5Wny1
zc^RvU3E5_ODHk6deSdPgnP7kMg9D6a_Wx~eZ`*tB!UKgSg$-F}v-bU1s&80*?#<>`
z;UcYE>zmuxtvH$@aI<jJ?35_QiC&+tb>{VzvqjikK76Q%|LW17XY@*v%zJZB|EP5e
z6RB!bHu=tGSyDCO@7lj6Us)%LhI&}(y1m<#!WXWuk(~1+@>upMjn0^*M_cUo@9(|d
zUoP0U`~|=3&&T`1%I3XEt*f;2PODg{c{1IvQP_K(fpz<TKb3h)*4q0d`!_T%XScj)
z>a)DQB_!(FksVnvvtAY(ZNJd!86^K`^3I*7RtUQOj{3E6#<>bpAM-AzN;BcDOY^SI
z&F*^Y6C02w$KJIqxkIU@V3N>QX6arxz1=mkVymYfum5JuCvWGIo-XeH_nT(f+Z&!|
z_e4EAJKI0BRJ66V^~T#Wo=Gk?V#-S_+ssYP3O6lmoUHDD>Eb;{rI`m_mTW4yY4q>Y
z`u|-|#p8Pn)!i5CoIW$ha<cxvyZ1jf*Z;OFb?<xdoxS4Q&GehQ%k{gb>m)v0)Ou!~
z?d+x|r!{8T*J7O+MI!IsU%GyO|FdImeDZdO7BaJE=H{x-^?UfSYUj^svv<CHc5!B*
z(epQ7t0MO&+AjB>t2EQ+V!<Pp|DWq?dXIXG1qVcQ9Db)D*B=}aaiY{b#$Ido<nzxT
zPyT-I^rNHQH$PqS&Z)1qZf<TiF*Ch*>C&m$`Fk2qrX0#JN-~j}sG|I`#OtoJ`b3p^
z9uxf33?p^cL~rk#owswQxBhOO+uL}OOOsxu&-{0&vY*3IV1i1gcUat^|Nnm3f0FnA
z!@fTEu2;T4|NiP%n)m8H>t;PWyLi{Gu2-|9y1cy#tme+}Q44)8b4lpCnORVH`0<U4
z-Cw?Yr#97V;`_4A4`=b(e0b0t5*F$kv7aMEZ0C<ZZLC+OJ=^%SVE3$kqp8c%ElwS{
zs8=@k&EdBO!A~}=dS~m${nN}iZ8Br`!3GTum8T}1Q+zDuEwPtK&QLj*VBi+7;bt&P
zVWH~O4HBx)M67leAC<WlCjQVsdh@;wi*GOcmv7Q>W!jVAqOUb!XLKJdb$%=J`h&3N
zvKL?4UrP3U@C%mD+dcD<jdrV^_R-2Pn=)g*ZqCJO4}?ydJgk^>aH556Bgfx^5_=D7
z{F}H#ELczZG?!a5BWr6&l;X^3H><WZ`~BzGt~>wir<-<fX4yYq!CreVg_%{Vs_o~)
zYsr^i@l{{j>zwe?N56jay}qNVGe4~<I@J^;(wf84xnk-5{{|-8)h2g_t`0X$KbK>c
zf9uHW+i}lBqNSJn&tJB5>CCn3_jDaiax{_>bQNsYm~_qTkC%$jDrU0;6R#b%KSRR8
z3cvnZy)*5xn~hxmuFjh)K8Ka+PhS&r^7{Utyz?%XEUvAs-Lh>PsM*Rr+bnTogu%?S
zH*(C*q#3JCo>&s4Cf9E)#3$T+yu&ql$z`KSDF<GE4Tz0Ce608Sro_jlPo6&Qm3Dkw
zv~$Pfb-Q1@ew}>&-CdUUW|Mh23pQ>vT)p44LrHpl@adCBW~N)MIsEX!q^a6FGafp<
z+xJ`!G%I(!Pj>P8?d=Z}CS<5M+00Xz=`qn~iGXYA%ea`Brt{B}zrDE$TG+?RE%u;j
zr-4-O57X}NGaZ)9NuBa+S(4Fg14-W*XP2#f%5<US>7JjTf9C)Ha6fW)nQnAkRj07J
z--X+^-K*WLZ^u>huAU}&FTp^;Qz+BY*J`TTM4t&AsuM&d7oT+T^yK{f?ELdx((BT%
zt_qF3zP?lW(18R2&C=UDszX(?S9Mix-q-ECoc-meeu2KF9cq(X*o5Z1;!iwrQ^-l=
zMATc+xA9S7-)~IZy4HhdQA4EBgW^cd^4pPiw~vQ@KCMxFdm_)FCHs~)El3mnbmMG{
z<@%mfV{VI*stK~ZcTK*sNlJAJdoHoCm3Vf=fg@04!WJ_xr@m_GRSVVDYAm_DX<2#b
zX){l@95v<E$}q7h)gCIB-sHYqt}me~<GpeH()rKsDM;&SJ>GTHc*e`(gj16Ci=Meo
zm}Gp)v*Xz0^!aB@7BPHG`PH;poAZ>2NcYN+E@yWBPp`Dsr%hjPYI-$h{nCBE7R-q?
zPPwIU+Gy_Fxo_&f$4b3=otc++@cnn;UN=t_p(U3!-!99x{yg){jW=dpUR^VzEvMhQ
zRjCubujfzA_Z3UO?R@34{PGof`*RZyw`XSNE!?}f`N0Q+j}bm|8<$=_u}N!&tD}pF
z!~_*)vCXXASKSId1&g1ZTe@u5tkl!f`@I%buY3LC`|rx~_jZ1BRxIDVc(Q|ngNf8p
z1*w9kJ0pr;M&<2&yDf0@!#mrauadiB+y3Xv_wTE%J&q-*JmM5!@ljLeYZqRB-8nJv
z;))Nadh$vN5*p6i{^4lnlXVJw@GLt2nf$(QrhDY{n=~$5xpCrj^tK5;Duy$CWA-L8
ze|~m$c98wa+}{NX2Oc`NuUx-=`ND@RcVq9mC@CLFHk{;nb%nYVkA$k{S+A+n-76zC
zubP_1lw5RrrXSI8x3Dg9meFEYfe^>%{YO^5|8)79{Ic4NmU$037Dh~}F!EKJsx~w1
z@`BWDN#-1{?%ibzJfP7T;VV=&*`@KaSL^k2bDYFKdwtd{$O<bvS1&Xr@VF+I%H_;k
zY==zB_=~d)j;uT=_($1L>7&TTC04u7Zt-X2nH4bIg>m!623Mm5GtVD$(w_a86H+02
zWy-VQcZCzYPUqymNW0t^Ec5z{aOd)XfC)TGSC3ZKJep*=X0`6YG^0feE?h7@bMKm6
z(91h4r=OSSJ?~zmG3D9qi16U1yEX4}LZ2sjH5omQn)up2!$9Jg>=b#GnZbb~rIpe=
zY@F?fUEGz9JbLwjvGl`?9=A1N+Ge|V@vgqS@K`Cg<-Y#s!Sj_)A9+;h=H}Mnw)n^*
z!$%(_UWRl{(OK;&?h-inr9|(IHDNkp+GV?SceiG#O?kWb%G{e7+H?JcJ6$@CKaSMi
zdotzJxs+nrC-=J@wJ$dt$68JnOn<X+XVbQ=Tc@74{lcMp)|Z2A;_r9AMe2Vq)qhm9
zQ^2*f*~s+r<SrFYahd#i*$0A57Kdp_Tv=D&lVa33XWB#+&c!EZe2p%(ioNl+?1;?j
zHzB{*EP5$u9CmfZHeDB!iE6VvguRzu*)w_N7PIc4=_h7RKbdhLZ_<VtJU6zyRdn&?
zpZU>d?}Ud-GQt-1e6EU`#(8v7&yir4N1BUHicEBw<znO;^xA)t#;V^lq+N5|I9Gcf
z$}&nYmM)C!xmkPc;;re^uJ$<Q&wG)0xiQS@kDy58!32RFWr3FS_h#AIEjO*+`$Tg^
zoF0ejV%0qxt{e-Fs^V^vx->nqEsgDAyQYfq+f!SP=9mQs1T>s~Zhg94(CCowZS9&f
z>F>YVxXC6PBy7HU?uq9aL4)+Gt2vjvToFA<WsYCES&z}@$Y)D6xDF;v(AD4P;qA@M
zuypCtJAY65_uUG%(e~Kfc8GJ@g5+DPG`QURuNd0c@H90X%}LBleY&D%mSpXx5~FRh
zKY#uNmFU&B#dlqnRqa*Ja!&iE<`8xx^~;8x)`opnc_F)x&6_;w^Y7M$Vu~5B_yu^`
z?wAQ~KRf5`?DSucUOYBxvifZxYE<iFyYo!XRfVo8m2d9sOcLwXy7TAbU9)f7zir;O
ztD`zBbW*<g^C_!WDK1;Ie4oNHM{SE#*{2c5U-onDe0yrHYp=PolZ~=~UdaKUFLj5`
zw{Wli9aGv@yIzA!S6BDXyY2o9HMou*RlRcM+NP|puiliO-_ARe@yh-C=U1=a*LB~%
zWs!!6==6ZtU|TJ>zkgrJ3(x(WQa}IPx0Ke4JL>I?Cre(pPCcWOzG#!)p5A00tyv3B
zalP?bJ4-<N?zubvtajDzH1_TeOiJ9@ZnS;ww0{blYxwr?y^h?eaesO6oEe#`UN>E{
zmse%9lzV(u<^1!{+-pDYy<%-^-2QQKz0rJ28NO+{@qI^=6es#zxO@5R=lWlht+-QO
z@$Fw2&~f&B{-e2fvpkmEOnP|f^fjaWe}6c?JJ;|3Vesy2WNAv=;}FAl_fP0>->;9o
z8(G?y8T~9j`S!%$H&ar(7ByVYeE8@l>yJ5Mb}GN${XTSD&&d7xA43Tqo!D(XrPJg4
z0*xm6sNCFEs=fb`napXGnKOK1=SD7572=#Vd)AMmkNZELo^OBd!-id@?^3779$PL~
z@t{fQ-m98DC+&28WUMvOpQ0&QTw)iuVqv<`*W>-4_qxlco}X9laYT5>r<g0}R;S+G
zRjLzFAn1D3^~uwxiCb?PWW5V1ic*{CBOoc6Sdh{2?wsDY_x00jtG{2oQZXsRq$|aw
z@NMb!Pbbpty+cb)KU|E@eeq%r|E>jpj2#27SbW>I&8+VKo8p|>r=oxA>_1k>tUlUx
zHt+D$qK98A3oSy@b1y1P@;j|!!r#=`$mq0CK>4A;%Mz*CXOF$HEZ*_)+3X#kR;||1
z)%|<o<(krxWz4Yw|0E|y#<?#JjG8s;=KgwncRu-rn>Wub(C|@_Qk?0dwEXH@f8$tZ
z5nc~A!IK$>-W5!EUKAJ^dQ??gKk?)w)gN43Zk3KNUi=An7N1g|_T*lkqrepx@#bcp
zFJFyc$SYac_$bM#PxP4Nw_ITB-nunn+J4i!A3aLy>gwKjGpA#b#lqXYedp>`OB{cu
zpNe4r@;&K{<oUg6HtuDzbN^?(XbNJlc+Xi-x^Ttk=O@}Xq|QF)E*Q)3>V;3wJNK1~
z7cVyE+_m7!#fukbvcv|wdhz0gPm`WTX-P?mnxps>D=RCj$qTr>WMyUNdR|~%+Sk{2
rPUS^Ykh{Bkx=@MZ@Ynv~KjVonM@`=^OU!3rU|{fc^>bP0l+XkKD6-X1

literal 0
HcmV?d00001

diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/index.jsx
new file mode 100644
index 000000000..9feb4b8bb
--- /dev/null
+++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/SQLConnectorSelection/index.jsx
@@ -0,0 +1,109 @@
+import React, { useState } from "react";
+import DBConnection from "./DBConnection";
+import { Plus } from "@phosphor-icons/react";
+import NewSQLConnection from "./NewConnectionModal";
+import { useModal } from "@/hooks/useModal";
+
+export default function AgentSQLConnectorSelection({
+  skill,
+  settings,
+  toggleSkill,
+  enabled = false,
+}) {
+  const { isOpen, openModal, closeModal } = useModal();
+  const [connections, setConnections] = useState(
+    settings?.preferences?.agent_sql_connections || []
+  );
+
+  return (
+    <>
+      <div className="border-b border-white/40 pb-4">
+        <div className="flex flex-col">
+          <div className="flex w-full justify-between items-center">
+            <label htmlFor="name" className="block input-label">
+              SQL Agent
+            </label>
+            <label className="border-none relative inline-flex cursor-pointer items-center mt-2">
+              <input
+                type="checkbox"
+                className="peer sr-only"
+                checked={enabled}
+                onClick={() => toggleSkill(skill)}
+              />
+              <div className="pointer-events-none peer h-6 w-11 rounded-full bg-stone-400 after:absolute after:left-[2px] after:top-[2px] after:h-5 after:w-5 after:rounded-full after:shadow-xl after:border after:border-gray-600 after:bg-white after:box-shadow-md after:transition-all after:content-[''] peer-checked:bg-lime-300 peer-checked:after:translate-x-full peer-checked:after:border-white peer-focus:outline-none peer-focus:ring-4 peer-focus:ring-blue-800"></div>
+              <span className="ml-3 text-sm font-medium text-gray-900 dark:text-gray-300"></span>
+            </label>
+          </div>
+          <p className="text-white text-opacity-60 text-xs font-medium py-1.5">
+            Enable your agent to be able to leverage SQL to answer you questions
+            by connecting to various SQL database providers.
+          </p>
+        </div>
+        {enabled && (
+          <>
+            <input
+              name="system::agent_sql_connections"
+              type="hidden"
+              value={JSON.stringify(connections)}
+            />
+            <input
+              type="hidden"
+              value={JSON.stringify(
+                connections.filter((conn) => conn.action !== "remove")
+              )}
+            />
+            <div className="flex flex-col mt-2 gap-y-2">
+              <p className="text-white font-semibold text-sm">
+                Your database connections
+              </p>
+              <div className="flex flex-col gap-y-3">
+                {connections
+                  .filter((connection) => connection.action !== "remove")
+                  .map((connection) => (
+                    <DBConnection
+                      key={connection.database_id}
+                      connection={connection}
+                      onRemove={(databaseId) => {
+                        setConnections((prev) =>
+                          prev.map((conn) => {
+                            if (conn.database_id === databaseId)
+                              return { ...conn, action: "remove" };
+                            return conn;
+                          })
+                        );
+                      }}
+                    />
+                  ))}
+                <button
+                  type="button"
+                  onClick={openModal}
+                  className="w-fit relative flex h-[40px] items-center border-none hover:bg-slate-600/20 rounded-lg"
+                >
+                  <div className="flex w-full gap-x-2 items-center p-4">
+                    <div className="bg-zinc-600 p-2 rounded-lg h-[24px] w-[24px] flex items-center justify-center">
+                      <Plus
+                        weight="bold"
+                        size={14}
+                        className="shrink-0 text-slate-100"
+                      />
+                    </div>
+                    <p className="text-left text-slate-100 text-sm">
+                      New SQL connection
+                    </p>
+                  </div>
+                </button>
+              </div>
+            </div>
+          </>
+        )}
+      </div>
+      <NewSQLConnection
+        isOpen={isOpen}
+        closeModal={closeModal}
+        onSubmit={(newDb) =>
+          setConnections((prev) => [...prev, { action: "add", ...newDb }])
+        }
+      />
+    </>
+  );
+}
diff --git a/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx b/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx
index c96cc1246..02065251a 100644
--- a/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx
+++ b/frontend/src/pages/WorkspaceSettings/AgentConfig/index.jsx
@@ -5,6 +5,7 @@ import { castToType } from "@/utils/types";
 import { useEffect, useRef, useState } from "react";
 import AgentLLMSelection from "./AgentLLMSelection";
 import AgentWebSearchSelection from "./WebSearchSelection";
+import AgentSQLConnectorSelection from "./SQLConnectorSelection";
 import GenericSkill from "./GenericSkill";
 import Admin from "@/models/admin";
 import * as Skeleton from "react-loading-skeleton";
@@ -205,6 +206,12 @@ function AvailableAgentSkills({ skills, settings, toggleAgentSkill }) {
           toggleSkill={toggleAgentSkill}
           enabled={skills.includes("web-browsing")}
         />
+        <AgentSQLConnectorSelection
+          skill="sql-agent"
+          settings={settings}
+          toggleSkill={toggleAgentSkill}
+          enabled={skills.includes("sql-agent")}
+        />
       </div>
     </div>
   );
diff --git a/server/endpoints/admin.js b/server/endpoints/admin.js
index 2ef611f6a..959e023ff 100644
--- a/server/endpoints/admin.js
+++ b/server/endpoints/admin.js
@@ -350,6 +350,8 @@ function adminEndpoints(app) {
           agent_search_provider:
             (await SystemSettings.get({ label: "agent_search_provider" }))
               ?.value || null,
+          agent_sql_connections:
+            await SystemSettings.brief.agent_sql_connections(),
           default_agent_skills:
             safeJsonParse(
               (await SystemSettings.get({ label: "default_agent_skills" }))
diff --git a/server/models/systemSettings.js b/server/models/systemSettings.js
index 248ca8cd7..7b4f21eeb 100644
--- a/server/models/systemSettings.js
+++ b/server/models/systemSettings.js
@@ -2,8 +2,10 @@ process.env.NODE_ENV === "development"
   ? require("dotenv").config({ path: `.env.${process.env.NODE_ENV}` })
   : require("dotenv").config();
 
-const { isValidUrl } = require("../utils/http");
+const { default: slugify } = require("slugify");
+const { isValidUrl, safeJsonParse } = require("../utils/http");
 const prisma = require("../utils/prisma");
+const { v4 } = require("uuid");
 
 function isNullOrNaN(value) {
   if (value === null) return true;
@@ -24,6 +26,7 @@ const SystemSettings = {
     "text_splitter_chunk_overlap",
     "agent_search_provider",
     "default_agent_skills",
+    "agent_sql_connections",
   ],
   validations: {
     footer_data: (updates) => {
@@ -65,6 +68,7 @@ const SystemSettings = {
     },
     agent_search_provider: (update) => {
       try {
+        if (update === "none") return null;
         if (!["google-search-engine", "serper-dot-dev"].includes(update))
           throw new Error("Invalid SERP provider.");
         return String(update);
@@ -85,6 +89,22 @@ const SystemSettings = {
         return JSON.stringify([]);
       }
     },
+    agent_sql_connections: async (updates) => {
+      const existingConnections = safeJsonParse(
+        (await SystemSettings.get({ label: "agent_sql_connections" }))?.value,
+        []
+      );
+      try {
+        const updatedConnections = mergeConnections(
+          existingConnections,
+          safeJsonParse(updates, [])
+        );
+        return JSON.stringify(updatedConnections);
+      } catch (e) {
+        console.error(`Failed to merge connections`);
+        return JSON.stringify(existingConnections ?? []);
+      }
+    },
   },
   currentSettings: async function () {
     const { hasVectorCachedFiles } = require("../utils/files");
@@ -204,22 +224,30 @@ const SystemSettings = {
   // that takes no user input for the keys being modified.
   _updateSettings: async function (updates = {}) {
     try {
-      const updatePromises = Object.keys(updates).map((key) => {
-        const validatedValue = this.validations.hasOwnProperty(key)
-          ? this.validations[key](updates[key])
-          : updates[key];
-
-        return prisma.system_settings.upsert({
-          where: { label: key },
-          update: {
-            value: validatedValue === null ? null : String(validatedValue),
-          },
-          create: {
-            label: key,
-            value: validatedValue === null ? null : String(validatedValue),
-          },
-        });
-      });
+      const updatePromises = [];
+      for (const key of Object.keys(updates)) {
+        let validatedValue = updates[key];
+        if (this.validations.hasOwnProperty(key)) {
+          if (this.validations[key].constructor.name === "AsyncFunction") {
+            validatedValue = await this.validations[key](updates[key]);
+          } else {
+            validatedValue = this.validations[key](updates[key]);
+          }
+        }
+
+        updatePromises.push(
+          prisma.system_settings.upsert({
+            where: { label: key },
+            update: {
+              value: validatedValue === null ? null : String(validatedValue),
+            },
+            create: {
+              label: key,
+              value: validatedValue === null ? null : String(validatedValue),
+            },
+          })
+        );
+      }
 
       await Promise.all(updatePromises);
       return { success: true, error: null };
@@ -392,6 +420,58 @@ const SystemSettings = {
       CohereModelPref: process.env.COHERE_MODEL_PREF,
     };
   },
+
+  // For special retrieval of a key setting that does not expose any credential information
+  brief: {
+    agent_sql_connections: async function () {
+      const setting = await SystemSettings.get({
+        label: "agent_sql_connections",
+      });
+      if (!setting) return [];
+      return safeJsonParse(setting.value, []).map((dbConfig) => {
+        const { connectionString, ...rest } = dbConfig;
+        return rest;
+      });
+    },
+  },
 };
 
+function mergeConnections(existingConnections = [], updates = []) {
+  let updatedConnections = [...existingConnections];
+  const existingDbIds = existingConnections.map((conn) => conn.database_id);
+
+  // First remove all 'action:remove' candidates from existing connections.
+  const toRemove = updates
+    .filter((conn) => conn.action === "remove")
+    .map((conn) => conn.database_id);
+  updatedConnections = updatedConnections.filter(
+    (conn) => !toRemove.includes(conn.database_id)
+  );
+
+  // Next add all 'action:add' candidates into the updatedConnections; We DO NOT validate the connection strings.
+  // but we do validate their database_id is unique.
+  updates
+    .filter((conn) => conn.action === "add")
+    .forEach((update) => {
+      if (!update.connectionString) return; // invalid connection string
+
+      // Remap name to be unique to entire set.
+      if (existingDbIds.includes(update.database_id)) {
+        update.database_id = slugify(
+          `${update.database_id}-${v4().slice(0, 4)}`
+        );
+      } else {
+        update.database_id = slugify(update.database_id);
+      }
+
+      updatedConnections.push({
+        engine: update.engine,
+        database_id: update.database_id,
+        connectionString: update.connectionString,
+      });
+    });
+
+  return updatedConnections;
+}
+
 module.exports.SystemSettings = SystemSettings;
diff --git a/server/package.json b/server/package.json
index 73b947c46..4f9954700 100644
--- a/server/package.json
+++ b/server/package.json
@@ -58,11 +58,14 @@
     "langchain": "0.1.36",
     "mime": "^3.0.0",
     "moment": "^2.29.4",
+    "mssql": "^10.0.2",
     "multer": "^1.4.5-lts.1",
+    "mysql2": "^3.9.7",
     "node-html-markdown": "^1.3.0",
     "node-llama-cpp": "^2.8.0",
     "ollama": "^0.5.0",
     "openai": "4.38.5",
+    "pg": "^8.11.5",
     "pinecone-client": "^1.1.0",
     "pluralize": "^8.0.0",
     "posthog-node": "^3.1.1",
@@ -72,6 +75,7 @@
     "sqlite3": "^5.1.6",
     "swagger-autogen": "^2.23.5",
     "swagger-ui-express": "^5.0.0",
+    "url-pattern": "^1.0.3",
     "uuid": "^9.0.0",
     "uuid-apikey": "^1.5.3",
     "vectordb": "0.4.11",
diff --git a/server/utils/agents/aibitat/index.js b/server/utils/agents/aibitat/index.js
index f21c4aa45..fa490edb2 100644
--- a/server/utils/agents/aibitat/index.js
+++ b/server/utils/agents/aibitat/index.js
@@ -498,6 +498,17 @@ Only return the role.
     return availableNodes[Math.floor(Math.random() * availableNodes.length)];
   }
 
+  /**
+   *
+   * @param {string} pluginName this name of the plugin being called
+   * @returns string of the plugin to be called compensating for children denoted by # in the string.
+   * eg: sql-agent:list-database-connections
+   */
+  #parseFunctionName(pluginName = "") {
+    if (!pluginName.includes("#")) return pluginName;
+    return pluginName.split("#")[1];
+  }
+
   /**
    * Check if the chat has reached the maximum number of rounds.
    */
@@ -550,7 +561,7 @@ ${this.getHistory({ to: route.to })
 
     // get the functions that the node can call
     const functions = fromConfig.functions
-      ?.map((name) => this.functions.get(name))
+      ?.map((name) => this.functions.get(this.#parseFunctionName(name)))
       .filter((a) => !!a);
 
     const provider = this.getProviderForConfig({
diff --git a/server/utils/agents/aibitat/plugins/index.js b/server/utils/agents/aibitat/plugins/index.js
index d9ff544e2..9a7ee7a05 100644
--- a/server/utils/agents/aibitat/plugins/index.js
+++ b/server/utils/agents/aibitat/plugins/index.js
@@ -6,6 +6,7 @@ const { saveFileInBrowser } = require("./save-file-browser.js");
 const { chatHistory } = require("./chat-history.js");
 const { memory } = require("./memory.js");
 const { rechart } = require("./rechart.js");
+const { sqlAgent } = require("./sql-agent/index.js");
 
 module.exports = {
   webScraping,
@@ -16,6 +17,7 @@ module.exports = {
   chatHistory,
   memory,
   rechart,
+  sqlAgent,
 
   // Plugin name aliases so they can be pulled by slug as well.
   [webScraping.name]: webScraping,
@@ -26,4 +28,5 @@ module.exports = {
   [chatHistory.name]: chatHistory,
   [memory.name]: memory,
   [rechart.name]: rechart,
+  [sqlAgent.name]: sqlAgent,
 };
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MSSQL.js b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MSSQL.js
new file mode 100644
index 000000000..ed75aa7aa
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MSSQL.js
@@ -0,0 +1,89 @@
+const mssql = require("mssql");
+const UrlPattern = require("url-pattern");
+
+class MSSQLConnector {
+  #connected = false;
+  database_id = "";
+  connectionConfig = {
+    user: null,
+    password: null,
+    database: null,
+    server: null,
+    port: null,
+    pool: {
+      max: 10,
+      min: 0,
+      idleTimeoutMillis: 30000,
+    },
+    options: {
+      encrypt: false,
+      trustServerCertificate: true,
+    },
+  };
+
+  constructor(
+    config = {
+      // we will force into RFC-3986 from DB
+      // eg: mssql://user:password@server:port/database?{...opts}
+      connectionString: null, // we will force into RFC-3986
+    }
+  ) {
+    this.connectionString = config.connectionString;
+    this._client = null;
+    this.#parseDatabase();
+  }
+
+  #parseDatabase() {
+    const connectionPattern = new UrlPattern(
+      "mssql\\://:username\\::password@*\\::port/:database*"
+    );
+    const match = connectionPattern.match(this.connectionString);
+    this.database_id = match?.database;
+    this.connectionConfig = {
+      ...this.connectionConfig,
+      user: match?.username,
+      password: match?.password,
+      database: match?.database,
+      server: match?._[0],
+      port: match?.port ? Number(match.port) : null,
+    };
+  }
+
+  async connect() {
+    this._client = await mssql.connect(this.connectionConfig);
+    this.#connected = true;
+    return this._client;
+  }
+
+  /**
+   *
+   * @param {string} queryString the SQL query to be run
+   * @returns {import(".").QueryResult}
+   */
+  async runQuery(queryString = "") {
+    const result = { rows: [], count: 0, error: null };
+    try {
+      if (!this.#connected) await this.connect();
+
+      const query = await this._client.query(queryString);
+      result.rows = query.recordset;
+      result.count = query.rowsAffected.reduce((sum, a) => sum + a, 0);
+    } catch (err) {
+      console.log(this.constructor.name, err);
+      result.error = err.message;
+    } finally {
+      await this._client.close();
+      this.#connected = false;
+    }
+    return result;
+  }
+
+  getTablesSql() {
+    return `SELECT name FROM sysobjects WHERE xtype='U';`;
+  }
+  getTableSchemaSql(table_name) {
+    return `SELECT COLUMN_NAME,COLUMN_DEFAULT,IS_NULLABLE,DATA_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME='${table_name}'`;
+  }
+}
+
+module.exports.MSSQLConnector = MSSQLConnector;
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MySQL.js b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MySQL.js
new file mode 100644
index 000000000..d9982ab31
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/MySQL.js
@@ -0,0 +1,59 @@
+const mysql = require("mysql2/promise");
+const UrlPattern = require("url-pattern");
+
+class MySQLConnector {
+  #connected = false;
+  database_id = "";
+  constructor(
+    config = {
+      connectionString: null,
+    }
+  ) {
+    this.connectionString = config.connectionString;
+    this._client = null;
+    this.database_id = this.#parseDatabase();
+  }
+
+  #parseDatabase() {
+    const connectionPattern = new UrlPattern("mysql\\://*@*/:database*");
+    const match = connectionPattern.match(this.connectionString);
+    return match?.database;
+  }
+
+  async connect() {
+    this._client = await mysql.createConnection({ uri: this.connectionString });
+    this.#connected = true;
+    return this._client;
+  }
+
+  /**
+   *
+   * @param {string} queryString the SQL query to be run
+   * @returns {import(".").QueryResult}
+   */
+  async runQuery(queryString = "") {
+    const result = { rows: [], count: 0, error: null };
+    try {
+      if (!this.#connected) await this.connect();
+      const [query] = await this._client.query(queryString);
+      result.rows = query;
+      result.count = query?.length;
+    } catch (err) {
+      console.log(this.constructor.name, err);
+      result.error = err.message;
+    } finally {
+      await this._client.end();
+      this.#connected = false;
+    }
+    return result;
+  }
+
+  getTablesSql() {
+    return `SELECT table_name FROM information_schema.tables WHERE table_schema = '${this.database_id}'`;
+  }
+  getTableSchemaSql(table_name) {
+    return `SHOW COLUMNS FROM ${this.database_id}.${table_name};`;
+  }
+}
+
+module.exports.MySQLConnector = MySQLConnector;
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/Postgresql.js b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/Postgresql.js
new file mode 100644
index 000000000..463fea510
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/Postgresql.js
@@ -0,0 +1,52 @@
+const pgSql = require("pg");
+
+class PostgresSQLConnector {
+  #connected = false;
+  constructor(
+    config = {
+      connectionString: null,
+    }
+  ) {
+    this.connectionString = config.connectionString;
+    this._client = new pgSql.Client({
+      connectionString: this.connectionString,
+    });
+  }
+
+  async connect() {
+    await this._client.connect();
+    this.#connected = true;
+    return this._client;
+  }
+
+  /**
+   *
+   * @param {string} queryString the SQL query to be run
+   * @returns {import(".").QueryResult}
+   */
+  async runQuery(queryString = "") {
+    const result = { rows: [], count: 0, error: null };
+    try {
+      if (!this.#connected) await this.connect();
+      const query = await this._client.query(queryString);
+      result.rows = query.rows;
+      result.count = query.rowCount;
+    } catch (err) {
+      console.log(this.constructor.name, err);
+      result.error = err.message;
+    } finally {
+      await this._client.end();
+      this.#connected = false;
+    }
+    return result;
+  }
+
+  getTablesSql() {
+    return `SELECT * FROM pg_catalog.pg_tables WHERE schemaname = 'public'`;
+  }
+  getTableSchemaSql(table_name) {
+    return ` select column_name, data_type, character_maximum_length, column_default, is_nullable from INFORMATION_SCHEMA.COLUMNS where table_name = '${table_name}'`;
+  }
+}
+
+module.exports.PostgresSQLConnector = PostgresSQLConnector;
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/index.js b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/index.js
new file mode 100644
index 000000000..9cf1e1ff4
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/SQLConnectors/index.js
@@ -0,0 +1,60 @@
+const { SystemSettings } = require("../../../../../../models/systemSettings");
+const { safeJsonParse } = require("../../../../../http");
+
+/**
+ * @typedef {('postgresql'|'mysql'|'sql-server')} SQLEngine
+ */
+
+/**
+ * @typedef {Object} QueryResult
+ * @property {[number]} rows - The query result rows
+ * @property {number} count - Number of rows the query returned/changed
+ * @property {string|null} error - Error string if there was an issue
+ */
+
+/**
+ * A valid database SQL connection object
+ * @typedef {Object} SQLConnection
+ * @property {string} database_id - Unique identifier of the database connection
+ * @property {SQLEngine} engine - Engine used by connection
+ * @property {string} connectionString - RFC connection string for db
+ */
+
+/**
+ * @param {SQLEngine} identifier
+ * @param {object} connectionConfig
+ * @returns Database Connection Engine Class for SQLAgent or throws error
+ */
+function getDBClient(identifier = "", connectionConfig = {}) {
+  switch (identifier) {
+    case "mysql":
+      const { MySQLConnector } = require("./MySQL");
+      return new MySQLConnector(connectionConfig);
+    case "postgresql":
+      const { PostgresSQLConnector } = require("./Postgresql");
+      return new PostgresSQLConnector(connectionConfig);
+    case "sql-server":
+      const { MSSQLConnector } = require("./MSSQL");
+      return new MSSQLConnector(connectionConfig);
+    default:
+      throw new Error(
+        `There is no supported database connector for ${identifier}`
+      );
+  }
+}
+
+/**
+ * Lists all of the known database connection that can be used by the agent.
+ * @returns {Promise<[SQLConnection]>}
+ */
+async function listSQLConnections() {
+  return safeJsonParse(
+    (await SystemSettings.get({ label: "agent_sql_connections" }))?.value,
+    []
+  );
+}
+
+module.exports = {
+  getDBClient,
+  listSQLConnections,
+};
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/get-table-schema.js b/server/utils/agents/aibitat/plugins/sql-agent/get-table-schema.js
new file mode 100644
index 000000000..2f66d119d
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/get-table-schema.js
@@ -0,0 +1,98 @@
+module.exports.SqlAgentGetTableSchema = {
+  name: "sql-get-table-schema",
+  plugin: function () {
+    const {
+      listSQLConnections,
+      getDBClient,
+    } = require("./SQLConnectors/index.js");
+
+    return {
+      name: "sql-get-table-schema",
+      setup(aibitat) {
+        aibitat.function({
+          super: aibitat,
+          name: this.name,
+          description:
+            "Gets the table schema in SQL for a given `table` and `database_id`",
+          examples: [
+            {
+              prompt: "What does the customers table in access-logs look like?",
+              call: JSON.stringify({
+                database_id: "access-logs",
+                table_name: "customers",
+              }),
+            },
+            {
+              prompt:
+                "Get me the full name of a company in records-main, the table should be call comps",
+              call: JSON.stringify({
+                database_id: "records-main",
+                table_name: "comps",
+              }),
+            },
+          ],
+          parameters: {
+            $schema: "http://json-schema.org/draft-07/schema#",
+            type: "object",
+            properties: {
+              database_id: {
+                type: "string",
+                description:
+                  "The database identifier for which we will connect to to query the table schema. This is a required field.",
+              },
+              table_name: {
+                type: "string",
+                description:
+                  "The database identifier for the table name we want the schema for. This is a required field.",
+              },
+            },
+            additionalProperties: false,
+          },
+          required: ["database_id", "table_name"],
+          handler: async function ({ database_id = "", table_name = "" }) {
+            this.super.handlerProps.log(`Using the sql-get-table-schema tool.`);
+            try {
+              const databaseConfig = (await listSQLConnections()).find(
+                (db) => db.database_id === database_id
+              );
+              if (!databaseConfig) {
+                this.super.handlerProps.log(
+                  `sql-get-table-schema to find config!.`,
+                  database_id
+                );
+                return `No database connection for ${database_id} was found!`;
+              }
+
+              const db = getDBClient(databaseConfig.engine, databaseConfig);
+              this.super.introspect(
+                `${this.caller}: Querying the table schema for ${table_name} in the ${databaseConfig.database_id} database.`
+              );
+              this.super.introspect(
+                `Running SQL: ${db.getTableSchemaSql(table_name)}`
+              );
+              const result = await db.runQuery(
+                db.getTableSchemaSql(table_name)
+              );
+
+              if (result.error) {
+                this.super.handlerProps.log(
+                  `sql-get-table-schema tool reported error`,
+                  result.error
+                );
+                this.super.introspect(`Error: ${result.error}`);
+                return `There was an error running the query: ${result.error}`;
+              }
+
+              return JSON.stringify(result);
+            } catch (e) {
+              this.super.handlerProps.log(
+                `sql-get-table-schema raised an error. ${e.message}`
+              );
+              return e.message;
+            }
+          },
+        });
+      },
+    };
+  },
+};
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/index.js b/server/utils/agents/aibitat/plugins/sql-agent/index.js
new file mode 100644
index 000000000..b7c1ed7d3
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/index.js
@@ -0,0 +1,21 @@
+const { SqlAgentGetTableSchema } = require("./get-table-schema");
+const { SqlAgentListDatabase } = require("./list-database");
+const { SqlAgentListTables } = require("./list-table");
+const { SqlAgentQuery } = require("./query");
+
+const sqlAgent = {
+  name: "sql-agent",
+  startupConfig: {
+    params: {},
+  },
+  plugin: [
+    SqlAgentListDatabase,
+    SqlAgentListTables,
+    SqlAgentGetTableSchema,
+    SqlAgentQuery,
+  ],
+};
+
+module.exports = {
+  sqlAgent,
+};
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/list-database.js b/server/utils/agents/aibitat/plugins/sql-agent/list-database.js
new file mode 100644
index 000000000..20e67c281
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/list-database.js
@@ -0,0 +1,49 @@
+module.exports.SqlAgentListDatabase = {
+  name: "sql-list-databases",
+  plugin: function () {
+    const { listSQLConnections } = require("./SQLConnectors");
+    return {
+      name: "sql-list-databases",
+      setup(aibitat) {
+        aibitat.function({
+          super: aibitat,
+          name: this.name,
+          description:
+            "List all available databases via `list_databases` you currently have access to. Returns a unique string identifier `database_id` that can be used for future calls.",
+          examples: [
+            {
+              prompt: "What databases can you access?",
+              call: JSON.stringify({}),
+            },
+            {
+              prompt: "What databases can you tell me about?",
+              call: JSON.stringify({}),
+            },
+            {
+              prompt: "Is there a database named erp-logs you can access?",
+              call: JSON.stringify({}),
+            },
+          ],
+          parameters: {
+            $schema: "http://json-schema.org/draft-07/schema#",
+            type: "object",
+            properties: {},
+            additionalProperties: false,
+          },
+          handler: async function () {
+            this.super.handlerProps.log(`Using the sql-list-databases tool.`);
+            this.super.introspect(
+              `${this.caller}: Checking what are the available databases.`
+            );
+
+            const connections = (await listSQLConnections()).map((conn) => {
+              const { connectionString, ...rest } = conn;
+              return rest;
+            });
+            return JSON.stringify(connections);
+          },
+        });
+      },
+    };
+  },
+};
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/list-table.js b/server/utils/agents/aibitat/plugins/sql-agent/list-table.js
new file mode 100644
index 000000000..d186bf01e
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/list-table.js
@@ -0,0 +1,85 @@
+module.exports.SqlAgentListTables = {
+  name: "sql-list-tables",
+  plugin: function () {
+    const {
+      listSQLConnections,
+      getDBClient,
+    } = require("./SQLConnectors/index.js");
+
+    return {
+      name: "sql-list-tables",
+      setup(aibitat) {
+        aibitat.function({
+          super: aibitat,
+          name: this.name,
+          description:
+            "List all available tables in a database via its `database_id`.",
+          examples: [
+            {
+              prompt: "What tables are there in the `access-logs` database?",
+              call: JSON.stringify({ database_id: "access-logs" }),
+            },
+            {
+              prompt:
+                "What information can you access in the customer_accts postgres db?",
+              call: JSON.stringify({ database_id: "customer_accts" }),
+            },
+            {
+              prompt: "Can you tell me what is in the primary-logs db?",
+              call: JSON.stringify({ database_id: "primary-logs" }),
+            },
+          ],
+          parameters: {
+            $schema: "http://json-schema.org/draft-07/schema#",
+            type: "object",
+            properties: {
+              database_id: {
+                type: "string",
+                description:
+                  "The database identifier for which we will list all tables for. This is a required parameter",
+              },
+            },
+            additionalProperties: false,
+          },
+          required: ["database_id"],
+          handler: async function ({ database_id = "" }) {
+            try {
+              this.super.handlerProps.log(`Using the sql-list-tables tool.`);
+              const databaseConfig = (await listSQLConnections()).find(
+                (db) => db.database_id === database_id
+              );
+              if (!databaseConfig) {
+                this.super.handlerProps.log(
+                  `sql-list-tables failed to find config!.`,
+                  database_id
+                );
+                return `No database connection for ${database_id} was found!`;
+              }
+
+              const db = getDBClient(databaseConfig.engine, databaseConfig);
+              this.super.introspect(
+                `${this.caller}: Checking what are the available tables in the ${databaseConfig.database_id} database.`
+              );
+
+              this.super.introspect(`Running SQL: ${db.getTablesSql()}`);
+              const result = await db.runQuery(db.getTablesSql(database_id));
+              if (result.error) {
+                this.super.handlerProps.log(
+                  `sql-list-tables tool reported error`,
+                  result.error
+                );
+                this.super.introspect(`Error: ${result.error}`);
+                return `There was an error running the query: ${result.error}`;
+              }
+
+              return JSON.stringify(result);
+            } catch (e) {
+              console.error(e);
+              return e.message;
+            }
+          },
+        });
+      },
+    };
+  },
+};
diff --git a/server/utils/agents/aibitat/plugins/sql-agent/query.js b/server/utils/agents/aibitat/plugins/sql-agent/query.js
new file mode 100644
index 000000000..fca1aeb03
--- /dev/null
+++ b/server/utils/agents/aibitat/plugins/sql-agent/query.js
@@ -0,0 +1,101 @@
+module.exports.SqlAgentQuery = {
+  name: "sql-query",
+  plugin: function () {
+    const {
+      getDBClient,
+      listSQLConnections,
+    } = require("./SQLConnectors/index.js");
+
+    return {
+      name: "sql-query",
+      setup(aibitat) {
+        aibitat.function({
+          super: aibitat,
+          name: this.name,
+          description:
+            "Run a read-only SQL query on a `database_id` which will return up rows of data related to the query. The query must only be SELECT statements which do not modify the table data. There should be a reasonable LIMIT on the return quantity to prevent long-running or queries which crash the db.",
+          examples: [
+            {
+              prompt: "How many customers are in dvd-rentals?",
+              call: JSON.stringify({
+                database_id: "dvd-rentals",
+                sql_query: "SELECT * FROM customers",
+              }),
+            },
+            {
+              prompt: "Can you tell me the total volume of sales last month?",
+              call: JSON.stringify({
+                database_id: "sales-db",
+                sql_query:
+                  "SELECT SUM(sale_amount) AS total_sales FROM sales WHERE sale_date >= DATEADD(month, -1, DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)) AND sale_date < DATEFROMPARTS(YEAR(GETDATE()), MONTH(GETDATE()), 1)",
+              }),
+            },
+            {
+              prompt:
+                "Do we have anyone in the staff table for our production db named 'sam'? ",
+              call: JSON.stringify({
+                database_id: "production",
+                sql_query:
+                  "SElECT * FROM staff WHERE first_name='sam%' OR last_name='sam%'",
+              }),
+            },
+          ],
+          parameters: {
+            $schema: "http://json-schema.org/draft-07/schema#",
+            type: "object",
+            properties: {
+              database_id: {
+                type: "string",
+                description:
+                  "The database identifier for which we will connect to to query the table schema. This is required to run the SQL query.",
+              },
+              sql_query: {
+                type: "string",
+                description:
+                  "The raw SQL query to run. Should be a query which does not modify the table and will return results.",
+              },
+            },
+            additionalProperties: false,
+          },
+          required: ["database_id", "table_name"],
+          handler: async function ({ database_id = "", sql_query = "" }) {
+            this.super.handlerProps.log(`Using the sql-query tool.`);
+            try {
+              const databaseConfig = (await listSQLConnections()).find(
+                (db) => db.database_id === database_id
+              );
+              if (!databaseConfig) {
+                this.super.handlerProps.log(
+                  `sql-query failed to find config!.`,
+                  database_id
+                );
+                return `No database connection for ${database_id} was found!`;
+              }
+
+              this.super.introspect(
+                `${this.caller}: Im going to run a query on the ${database_id} to get an answer.`
+              );
+              const db = getDBClient(databaseConfig.engine, databaseConfig);
+
+              this.super.introspect(`Running SQL: ${sql_query}`);
+              const result = await db.runQuery(sql_query);
+              if (result.error) {
+                this.super.handlerProps.log(
+                  `sql-query tool reported error`,
+                  result.error
+                );
+                this.super.introspect(`Error: ${result.error}`);
+                return `There was an error running the query: ${result.error}`;
+              }
+
+              return JSON.stringify(result);
+            } catch (e) {
+              console.error(e);
+              return e.message;
+            }
+          },
+        });
+      },
+    };
+  },
+};
diff --git a/server/utils/agents/aibitat/plugins/websocket.js b/server/utils/agents/aibitat/plugins/websocket.js
index b6154984d..f5c73b33b 100644
--- a/server/utils/agents/aibitat/plugins/websocket.js
+++ b/server/utils/agents/aibitat/plugins/websocket.js
@@ -49,7 +49,7 @@ const websocket = {
       setup(aibitat) {
         aibitat.onError(async (error) => {
           if (!!error?.message) {
-            console.error(chalk.red(`   error: ${error.message}`));
+            console.error(chalk.red(`   error: ${error.message}`), error);
             aibitat.introspect(
               `Error encountered while running: ${error.message}`
             );
diff --git a/server/utils/agents/aibitat/providers/anthropic.js b/server/utils/agents/aibitat/providers/anthropic.js
index 307731ba7..b69b14d6c 100644
--- a/server/utils/agents/aibitat/providers/anthropic.js
+++ b/server/utils/agents/aibitat/providers/anthropic.js
@@ -3,7 +3,7 @@ const { RetryError } = require("../error.js");
 const Provider = require("./ai-provider.js");
 
 /**
- * The provider for the Anthropic API.
+ * The agent provider for the Anthropic API.
  * By default, the model is set to 'claude-2'.
  */
 class AnthropicProvider extends Provider {
diff --git a/server/utils/agents/aibitat/providers/azure.js b/server/utils/agents/aibitat/providers/azure.js
index cdcf7618b..0ecc398f1 100644
--- a/server/utils/agents/aibitat/providers/azure.js
+++ b/server/utils/agents/aibitat/providers/azure.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the Azure OpenAI API.
+ * The agent provider for the Azure OpenAI API.
  */
 class AzureOpenAiProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -84,6 +84,11 @@ class AzureOpenAiProvider extends InheritMultiple([Provider, UnTooled]) {
         );
         completion = response.choices[0].message;
       }
+
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return { result: completion.content, cost: 0 };
     } catch (error) {
       throw error;
diff --git a/server/utils/agents/aibitat/providers/genericOpenAi.js b/server/utils/agents/aibitat/providers/genericOpenAi.js
index e41476d2a..a1b2db3ea 100644
--- a/server/utils/agents/aibitat/providers/genericOpenAi.js
+++ b/server/utils/agents/aibitat/providers/genericOpenAi.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the Generic OpenAI provider.
+ * The agent provider for the Generic OpenAI provider.
  * Since we cannot promise the generic provider even supports tool calling
  * which is nearly 100% likely it does not, we can just wrap it in untooled
  * which often is far better anyway.
@@ -94,6 +94,10 @@ class GenericOpenAiProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/groq.js b/server/utils/agents/aibitat/providers/groq.js
index 720d87437..01f69f7c1 100644
--- a/server/utils/agents/aibitat/providers/groq.js
+++ b/server/utils/agents/aibitat/providers/groq.js
@@ -3,7 +3,7 @@ const Provider = require("./ai-provider.js");
 const { RetryError } = require("../error.js");
 
 /**
- * The provider for the Groq provider.
+ * The agent provider for the Groq provider.
  * Using OpenAI tool calling with groq really sucks right now
  * its just fast and bad. We should probably migrate this to Untooled to improve
  * coherence.
diff --git a/server/utils/agents/aibitat/providers/koboldcpp.js b/server/utils/agents/aibitat/providers/koboldcpp.js
index 77088263c..2dd127845 100644
--- a/server/utils/agents/aibitat/providers/koboldcpp.js
+++ b/server/utils/agents/aibitat/providers/koboldcpp.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the KoboldCPP provider.
+ * The agent provider for the KoboldCPP provider.
  */
 class KoboldCPPProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -89,6 +89,10 @@ class KoboldCPPProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/lmstudio.js b/server/utils/agents/aibitat/providers/lmstudio.js
index f5c4a2e82..258f2e291 100644
--- a/server/utils/agents/aibitat/providers/lmstudio.js
+++ b/server/utils/agents/aibitat/providers/lmstudio.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the LMStudio provider.
+ * The agent provider for the LMStudio.
  */
 class LMStudioProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -89,6 +89,10 @@ class LMStudioProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/localai.js b/server/utils/agents/aibitat/providers/localai.js
index 161172c21..bd0c3b524 100644
--- a/server/utils/agents/aibitat/providers/localai.js
+++ b/server/utils/agents/aibitat/providers/localai.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the LocalAI provider.
+ * The agent provider for the LocalAI provider.
  */
 class LocalAiProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -93,6 +93,10 @@ class LocalAiProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return { result: completion.content, cost: 0 };
     } catch (error) {
       throw error;
diff --git a/server/utils/agents/aibitat/providers/mistral.js b/server/utils/agents/aibitat/providers/mistral.js
index cdc2a5e75..aa2c1c6ec 100644
--- a/server/utils/agents/aibitat/providers/mistral.js
+++ b/server/utils/agents/aibitat/providers/mistral.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the Mistral provider.
+ * The agent provider for the Mistral provider.
  * Mistral limits what models can call tools and even when using those
  * the model names change and dont match docs. When you do have the right model
  * it still fails and is not truly OpenAI compatible so its easier to just wrap
@@ -93,6 +93,10 @@ class MistralProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/ollama.js b/server/utils/agents/aibitat/providers/ollama.js
index d52d80caa..5cb529e51 100644
--- a/server/utils/agents/aibitat/providers/ollama.js
+++ b/server/utils/agents/aibitat/providers/ollama.js
@@ -4,7 +4,7 @@ const UnTooled = require("./helpers/untooled.js");
 const { Ollama } = require("ollama");
 
 /**
- * The provider for the Ollama provider.
+ * The agent provider for the Ollama provider.
  */
 class OllamaProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -83,6 +83,10 @@ class OllamaProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/openai.js b/server/utils/agents/aibitat/providers/openai.js
index 3fcc46ca5..2866a7592 100644
--- a/server/utils/agents/aibitat/providers/openai.js
+++ b/server/utils/agents/aibitat/providers/openai.js
@@ -3,7 +3,7 @@ const Provider = require("./ai-provider.js");
 const { RetryError } = require("../error.js");
 
 /**
- * The provider for the OpenAI API.
+ * The agent provider for the OpenAI API.
  * By default, the model is set to 'gpt-3.5-turbo'.
  */
 class OpenAIProvider extends Provider {
diff --git a/server/utils/agents/aibitat/providers/openrouter.js b/server/utils/agents/aibitat/providers/openrouter.js
index 81297ae28..50c0868dd 100644
--- a/server/utils/agents/aibitat/providers/openrouter.js
+++ b/server/utils/agents/aibitat/providers/openrouter.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the OpenRouter provider.
+ * The agent provider for the OpenRouter provider.
  */
 class OpenRouterProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -93,6 +93,10 @@ class OpenRouterProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/perplexity.js b/server/utils/agents/aibitat/providers/perplexity.js
index 29970fd06..072206950 100644
--- a/server/utils/agents/aibitat/providers/perplexity.js
+++ b/server/utils/agents/aibitat/providers/perplexity.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the Perplexity provider.
+ * The agent provider for the Perplexity provider.
  */
 class PerplexityProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -89,6 +89,10 @@ class PerplexityProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/textgenwebui.js b/server/utils/agents/aibitat/providers/textgenwebui.js
index d1e424255..7ef1cf4c6 100644
--- a/server/utils/agents/aibitat/providers/textgenwebui.js
+++ b/server/utils/agents/aibitat/providers/textgenwebui.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the Oobabooga provider.
+ * The agent provider for the Oobabooga provider.
  */
 class TextWebGenUiProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -88,6 +88,10 @@ class TextWebGenUiProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/providers/togetherai.js b/server/utils/agents/aibitat/providers/togetherai.js
index 4ea5e11c2..78cbb512c 100644
--- a/server/utils/agents/aibitat/providers/togetherai.js
+++ b/server/utils/agents/aibitat/providers/togetherai.js
@@ -4,7 +4,7 @@ const InheritMultiple = require("./helpers/classes.js");
 const UnTooled = require("./helpers/untooled.js");
 
 /**
- * The provider for the TogetherAI provider.
+ * The agent provider for the TogetherAI provider.
  */
 class TogetherAIProvider extends InheritMultiple([Provider, UnTooled]) {
   model;
@@ -89,6 +89,10 @@ class TogetherAIProvider extends InheritMultiple([Provider, UnTooled]) {
         completion = response.choices[0].message;
       }
 
+      // The UnTooled class inherited Deduplicator is mostly useful to prevent the agent
+      // from calling the exact same function over and over in a loop within a single chat exchange
+      // _but_ we should enable it to call previously used tools in a new chat interaction.
+      this.deduplicator.reset("runs");
       return {
         result: completion.content,
         cost: 0,
diff --git a/server/utils/agents/aibitat/utils/dedupe.js b/server/utils/agents/aibitat/utils/dedupe.js
index 8c4d582d0..321f69299 100644
--- a/server/utils/agents/aibitat/utils/dedupe.js
+++ b/server/utils/agents/aibitat/utils/dedupe.js
@@ -38,6 +38,25 @@ class Deduplicator {
     return this.#hashes.hasOwnProperty(newSig);
   }
 
+  /**
+   * Resets the object property for this instance of the Deduplicator class
+   * @param {('runs'|'cooldowns'|'uniques')} type - The type of prop to reset
+   */
+  reset(type = "runs") {
+    switch (type) {
+      case "runs":
+        this.#hashes = {};
+        break;
+      case "cooldowns":
+        this.#cooldowns = {};
+        break;
+      case "uniques":
+        this.#uniques = {};
+        break;
+    }
+    return;
+  }
+
   startCooldown(
     key,
     parameters = {
diff --git a/server/utils/agents/defaults.js b/server/utils/agents/defaults.js
index 4e12b9062..796a7bbcb 100644
--- a/server/utils/agents/defaults.js
+++ b/server/utils/agents/defaults.js
@@ -25,8 +25,22 @@ const WORKSPACE_AGENT = {
     const _setting = (
       await SystemSettings.get({ label: "default_agent_skills" })
     )?.value;
+
     safeJsonParse(_setting, []).forEach((skillName) => {
       if (!AgentPlugins.hasOwnProperty(skillName)) return;
+
+      // This is a plugin module with many sub-children plugins who
+      // need to be named via `${parent}#${child}` naming convention
+      if (Array.isArray(AgentPlugins[skillName].plugin)) {
+        for (const subPlugin of AgentPlugins[skillName].plugin) {
+          defaultFunctions.push(
+            `${AgentPlugins[skillName].name}#${subPlugin.name}`
+          );
+        }
+        return;
+      }
+
+      // This is normal single-stage plugin
       defaultFunctions.push(AgentPlugins[skillName].name);
     });
 
diff --git a/server/utils/agents/index.js b/server/utils/agents/index.js
index 08ce5558e..cf6f312d0 100644
--- a/server/utils/agents/index.js
+++ b/server/utils/agents/index.js
@@ -197,33 +197,71 @@ class AgentHandler {
     this.invocation = invocation ?? null;
   }
 
-  #attachPlugins(args) {
-    for (const name of this.#funcsToLoad) {
-      if (!AgentPlugins.hasOwnProperty(name)) {
+  #parseCallOptions(args, config = {}, pluginName) {
+    const callOpts = {};
+    for (const [param, definition] of Object.entries(config)) {
+      if (
+        definition.required &&
+        (!args.hasOwnProperty(param) || args[param] === null)
+      ) {
         this.log(
-          `${name} is not a valid plugin. Skipping inclusion to agent cluster.`
+          `'${param}' required parameter for '${pluginName}' plugin is missing. Plugin may not function or crash agent.`
         );
         continue;
       }
+      callOpts[param] = args.hasOwnProperty(param)
+        ? args[param]
+        : definition.default || null;
+    }
+    return callOpts;
+  }
 
-      const callOpts = {};
-      for (const [param, definition] of Object.entries(
-        AgentPlugins[name].startupConfig.params
-      )) {
-        if (
-          definition.required &&
-          (!args.hasOwnProperty(param) || args[param] === null)
-        ) {
+  #attachPlugins(args) {
+    for (const name of this.#funcsToLoad) {
+      // Load child plugin
+      if (name.includes("#")) {
+        const [parent, childPluginName] = name.split("#");
+        if (!AgentPlugins.hasOwnProperty(parent)) {
+          this.log(
+            `${parent} is not a valid plugin. Skipping inclusion to agent cluster.`
+          );
+          continue;
+        }
+
+        const childPlugin = AgentPlugins[parent].plugin.find(
+          (child) => child.name === childPluginName
+        );
+        if (!childPlugin) {
           this.log(
-            `'${param}' required parameter for '${name}' plugin is missing. Plugin may not function or crash agent.`
+            `${parent} does not have child plugin named ${childPluginName}. Skipping inclusion to agent cluster.`
           );
           continue;
         }
-        callOpts[param] = args.hasOwnProperty(param)
-          ? args[param]
-          : definition.default || null;
+
+        const callOpts = this.#parseCallOptions(
+          args,
+          childPlugin?.startupConfig?.params,
+          name
+        );
+        this.aibitat.use(childPlugin.plugin(callOpts));
+        this.log(
+          `Attached ${parent}:${childPluginName} plugin to Agent cluster`
+        );
+        continue;
+      }
+
+      // Load single-stage plugin.
+      if (!AgentPlugins.hasOwnProperty(name)) {
+        this.log(
+          `${name} is not a valid plugin. Skipping inclusion to agent cluster.`
+        );
+        continue;
       }
 
+      const callOpts = this.#parseCallOptions(
+        args,
+        AgentPlugins[name].startupConfig.params
+      );
       const AIbitatPlugin = AgentPlugins[name];
       this.aibitat.use(AIbitatPlugin.plugin(callOpts));
       this.log(`Attached ${name} plugin to Agent cluster`);
diff --git a/server/yarn.lock b/server/yarn.lock
index 9e4f184d5..d274e574f 100644
--- a/server/yarn.lock
+++ b/server/yarn.lock
@@ -82,6 +82,13 @@
     "@azure/core-util" "^1.0.0"
     tslib "^2.6.2"
 
+"@azure/abort-controller@^1.0.0":
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249"
+  integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==
+  dependencies:
+    tslib "^2.2.0"
+
 "@azure/abort-controller@^2.0.0":
   version "2.1.2"
   resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d"
@@ -89,7 +96,7 @@
   dependencies:
     tslib "^2.6.2"
 
-"@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0":
+"@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0", "@azure/core-auth@^1.5.0":
   version "1.7.2"
   resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.7.2.tgz#558b7cb7dd12b00beec07ae5df5907d74df1ebd9"
   integrity sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g==
@@ -98,6 +105,59 @@
     "@azure/core-util" "^1.1.0"
     tslib "^2.6.2"
 
+"@azure/core-client@^1.3.0", "@azure/core-client@^1.4.0", "@azure/core-client@^1.5.0":
+  version "1.9.2"
+  resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74"
+  integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==
+  dependencies:
+    "@azure/abort-controller" "^2.0.0"
+    "@azure/core-auth" "^1.4.0"
+    "@azure/core-rest-pipeline" "^1.9.1"
+    "@azure/core-tracing" "^1.0.0"
+    "@azure/core-util" "^1.6.1"
+    "@azure/logger" "^1.0.0"
+    tslib "^2.6.2"
+
+"@azure/core-http-compat@^2.0.1":
+  version "2.1.2"
+  resolved "https://registry.yarnpkg.com/@azure/core-http-compat/-/core-http-compat-2.1.2.tgz#d1585ada24ba750dc161d816169b33b35f762f0d"
+  integrity sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==
+  dependencies:
+    "@azure/abort-controller" "^2.0.0"
+    "@azure/core-client" "^1.3.0"
+    "@azure/core-rest-pipeline" "^1.3.0"
+
+"@azure/core-lro@^2.2.0":
+  version "2.7.2"
+  resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.7.2.tgz#787105027a20e45c77651a98b01a4d3b01b75a08"
+  integrity sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw==
+  dependencies:
+    "@azure/abort-controller" "^2.0.0"
+    "@azure/core-util" "^1.2.0"
+    "@azure/logger" "^1.0.0"
+    tslib "^2.6.2"
+
+"@azure/core-paging@^1.1.1":
+  version "1.6.2"
+  resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.6.2.tgz#40d3860dc2df7f291d66350b2cfd9171526433e7"
+  integrity sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA==
+  dependencies:
+    tslib "^2.6.2"
+
+"@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.3.0", "@azure/core-rest-pipeline@^1.8.1", "@azure/core-rest-pipeline@^1.9.1":
+  version "1.16.0"
+  resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.0.tgz#631172e2fe0346cf4410d1c8e01ad98d849738e2"
+  integrity sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ==
+  dependencies:
+    "@azure/abort-controller" "^2.0.0"
+    "@azure/core-auth" "^1.4.0"
+    "@azure/core-tracing" "^1.0.1"
+    "@azure/core-util" "^1.9.0"
+    "@azure/logger" "^1.0.0"
+    http-proxy-agent "^7.0.0"
+    https-proxy-agent "^7.0.0"
+    tslib "^2.6.2"
+
 "@azure/core-rest-pipeline@^1.13.0", "@azure/core-rest-pipeline@^1.5.0":
   version "1.15.2"
   resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.15.2.tgz#421729bbd8cd5f9f50b403e79941f27ac1bdc302"
@@ -119,14 +179,14 @@
   dependencies:
     tslib "^2.6.2"
 
-"@azure/core-tracing@^1.0.1":
+"@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.1.2.tgz#065dab4e093fb61899988a1cdbc827d9ad90b4ee"
   integrity sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA==
   dependencies:
     tslib "^2.6.2"
 
-"@azure/core-util@^1.0.0", "@azure/core-util@^1.1.0", "@azure/core-util@^1.3.0", "@azure/core-util@^1.4.0":
+"@azure/core-util@^1.0.0", "@azure/core-util@^1.1.0", "@azure/core-util@^1.2.0", "@azure/core-util@^1.3.0", "@azure/core-util@^1.4.0", "@azure/core-util@^1.6.1", "@azure/core-util@^1.9.0":
   version "1.9.0"
   resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.0.tgz#469afd7e6452d5388b189f90d33f7756b0b210d1"
   integrity sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw==
@@ -134,6 +194,43 @@
     "@azure/abort-controller" "^2.0.0"
     tslib "^2.6.2"
 
+"@azure/identity@^3.4.1":
+  version "3.4.2"
+  resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-3.4.2.tgz#6b01724c9caac7cadab6b63c76584345bda8e2de"
+  integrity sha512-0q5DL4uyR0EZ4RXQKD8MadGH6zTIcloUoS/RVbCpNpej4pwte0xpqYxk8K97Py2RiuUvI7F4GXpoT4046VfufA==
+  dependencies:
+    "@azure/abort-controller" "^1.0.0"
+    "@azure/core-auth" "^1.5.0"
+    "@azure/core-client" "^1.4.0"
+    "@azure/core-rest-pipeline" "^1.1.0"
+    "@azure/core-tracing" "^1.0.0"
+    "@azure/core-util" "^1.6.1"
+    "@azure/logger" "^1.0.0"
+    "@azure/msal-browser" "^3.5.0"
+    "@azure/msal-node" "^2.5.1"
+    events "^3.0.0"
+    jws "^4.0.0"
+    open "^8.0.0"
+    stoppable "^1.1.0"
+    tslib "^2.2.0"
+
+"@azure/keyvault-keys@^4.4.0":
+  version "4.8.0"
+  resolved "https://registry.yarnpkg.com/@azure/keyvault-keys/-/keyvault-keys-4.8.0.tgz#1513b3a187bb3a9a372b5980c593962fb793b2ad"
+  integrity sha512-jkuYxgkw0aaRfk40OQhFqDIupqblIOIlYESWB6DKCVDxQet1pyv86Tfk9M+5uFM0+mCs6+MUHU+Hxh3joiUn4Q==
+  dependencies:
+    "@azure/abort-controller" "^1.0.0"
+    "@azure/core-auth" "^1.3.0"
+    "@azure/core-client" "^1.5.0"
+    "@azure/core-http-compat" "^2.0.1"
+    "@azure/core-lro" "^2.2.0"
+    "@azure/core-paging" "^1.1.1"
+    "@azure/core-rest-pipeline" "^1.8.1"
+    "@azure/core-tracing" "^1.0.0"
+    "@azure/core-util" "^1.0.0"
+    "@azure/logger" "^1.0.0"
+    tslib "^2.2.0"
+
 "@azure/logger@^1.0.0", "@azure/logger@^1.0.3":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.2.tgz#3f4b876cefad328dc14aff8b850d63b611e249dc"
@@ -141,6 +238,27 @@
   dependencies:
     tslib "^2.6.2"
 
+"@azure/msal-browser@^3.5.0":
+  version "3.14.0"
+  resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.14.0.tgz#1cb5cab438a9943212aa50c403d11f775c787b21"
+  integrity sha512-Un85LhOoecJ3HDTS3Uv3UWnXC9/43ZSO+Kc+anSqpZvcEt58SiO/3DuVCAe1A3I5UIBYJNMgTmZPGXQ0MVYrwA==
+  dependencies:
+    "@azure/msal-common" "14.10.0"
+
+"@azure/msal-common@14.10.0":
+  version "14.10.0"
+  resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.10.0.tgz#215449726717b53d549953db77562cad6cb8421c"
+  integrity sha512-Zk6DPDz7e1wPgLoLgAp0349Yay9RvcjPM5We/ehuenDNsz/t9QEFI7tRoHpp/e47I4p20XE3FiDlhKwAo3utDA==
+
+"@azure/msal-node@^2.5.1":
+  version "2.8.1"
+  resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.8.1.tgz#aded28d37eea2e7278c9bd44f2016647390f239c"
+  integrity sha512-VcZZM+5VvCWRBTOF7SxMKaxrz+EXjntx2u5AQe7QE06e6FuPJElGBrImgNgCh5QmFaNCfVFO+3qNR7UoFD/Gfw==
+  dependencies:
+    "@azure/msal-common" "14.10.0"
+    jsonwebtoken "^9.0.0"
+    uuid "^8.3.0"
+
 "@azure/openai@1.0.0-beta.10":
   version "1.0.0-beta.10"
   resolved "https://registry.yarnpkg.com/@azure/openai/-/openai-1.0.0-beta.10.tgz#13bcf5c5bc34dd27e33dc6aab5db3dc97dd4545b"
@@ -427,6 +545,11 @@
   resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-1.3.1.tgz#afb95ff78f44fff7e8a00e17d5820db6add2a076"
   integrity sha512-Pe3PFccjPVJV1vtlfVvm9OnlbxqdnP5QcscFEFEnK5quChf1ufZtM0r8mR5ToWHMxZOh0s8o/qp9ANGRTo/DAw==
 
+"@js-joda/core@^5.5.3":
+  version "5.6.2"
+  resolved "https://registry.yarnpkg.com/@js-joda/core/-/core-5.6.2.tgz#1885d10daa404cea2bd55575f910ab3bbe6c33d7"
+  integrity sha512-ow4R+7C24xeTjiMTTZ4k6lvxj7MRBqvqLCQjThQff3RjOmIMokMP20LNYVFhGafJtUx/Xo2Qp4qU8eNoTVH0SA==
+
 "@js-sdsl/ordered-map@^4.4.2":
   version "4.4.2"
   resolved "https://registry.yarnpkg.com/@js-sdsl/ordered-map/-/ordered-map-4.4.2.tgz#9299f82874bab9e4c7f9c48d865becbfe8d6907c"
@@ -954,6 +1077,11 @@
   resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.29.6.tgz#4cd8372f9247372edd5fc5af44f67e2032c46e2f"
   integrity sha512-aX5IFYWlMa7tQ8xZr3b2gtVReCvg7f3LEhjir/JAjX2bJCMVJA5tIPv30wTD4KDfcwMd7DDYY3hFDeGmOgtrZQ==
 
+"@tediousjs/connection-string@^0.5.0":
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/@tediousjs/connection-string/-/connection-string-0.5.0.tgz#9b3d858c040aac6bdf5584bf45370cef5b6522b4"
+  integrity sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==
+
 "@tootallnate/once@1":
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82"
@@ -1030,6 +1158,14 @@
   resolved "https://registry.yarnpkg.com/@types/pad-left/-/pad-left-2.1.1.tgz#17d906fc75804e1cc722da73623f1d978f16a137"
   integrity sha512-Xd22WCRBydkGSApl5Bw0PhAOHKSVjNL3E3AwzKaps96IMraPqy5BvZIsBVK6JLwdybUzjHnuWVwpDd0JjTfHXA==
 
+"@types/readable-stream@^4.0.0":
+  version "4.0.14"
+  resolved "https://registry.yarnpkg.com/@types/readable-stream/-/readable-stream-4.0.14.tgz#5a76a00e1e3dd6ff921ea2b3fac7485c5a492c19"
+  integrity sha512-xZn/AuUbCMShGsqH/ehZtGDwQtbx00M9rZ2ENLe4tOjFZ/JFeWMhEZkk2fEe1jAUqqEAURIkFJ7Az/go8mM1/w==
+  dependencies:
+    "@types/node" "*"
+    safe-buffer "~5.1.1"
+
 "@types/retry@0.12.0":
   version "0.12.0"
   resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d"
@@ -1539,6 +1675,16 @@ bl@^5.0.0:
     inherits "^2.0.4"
     readable-stream "^3.4.0"
 
+bl@^6.0.3:
+  version "6.0.12"
+  resolved "https://registry.yarnpkg.com/bl/-/bl-6.0.12.tgz#77c35b96e13aeff028496c798b75389ddee9c7f8"
+  integrity sha512-EnEYHilP93oaOa2MnmNEjAcovPS3JlQZOyzGXi3EyEpPhm9qWvdDp7BmAVEVusGzp8LlwQK56Av+OkDoRjzE0w==
+  dependencies:
+    "@types/readable-stream" "^4.0.0"
+    buffer "^6.0.3"
+    inherits "^2.0.4"
+    readable-stream "^4.2.0"
+
 body-parser@1.20.2, body-parser@^1.20.2:
   version "1.20.2"
   resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd"
@@ -1931,6 +2077,11 @@ commander@^10.0.1:
   resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06"
   integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==
 
+commander@^11.0.0:
+  version "11.1.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-11.1.0.tgz#62fdce76006a68e5c1ab3314dc92e800eb83d906"
+  integrity sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==
+
 commander@^8.0.0:
   version "8.3.0"
   resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
@@ -2147,6 +2298,11 @@ define-data-property@^1.0.1, define-data-property@^1.1.4:
     es-errors "^1.3.0"
     gopd "^1.0.1"
 
+define-lazy-prop@^2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f"
+  integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==
+
 define-properties@^1.2.0, define-properties@^1.2.1:
   version "1.2.1"
   resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c"
@@ -2166,6 +2322,11 @@ delegates@^1.0.0:
   resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
   integrity sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==
 
+denque@^2.1.0:
+  version "2.1.0"
+  resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
+  integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
+
 depd@2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df"
@@ -2383,6 +2544,20 @@ es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23
     unbox-primitive "^1.0.2"
     which-typed-array "^1.1.15"
 
+es-aggregate-error@^1.0.9:
+  version "1.0.13"
+  resolved "https://registry.yarnpkg.com/es-aggregate-error/-/es-aggregate-error-1.0.13.tgz#7f28b77c9d8d09bbcd3a466e4be9fe02fa985201"
+  integrity sha512-KkzhUUuD2CUMqEc8JEqsXEMDHzDPE8RCjZeUBitsnB1eNcAJWQPiciKsMXe3Yytj4Flw1XLl46Qcf9OxvZha7A==
+  dependencies:
+    define-data-property "^1.1.4"
+    define-properties "^1.2.1"
+    es-abstract "^1.23.2"
+    es-errors "^1.3.0"
+    function-bind "^1.1.2"
+    globalthis "^1.0.3"
+    has-property-descriptors "^1.0.2"
+    set-function-name "^2.0.2"
+
 es-define-property@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845"
@@ -2622,6 +2797,11 @@ eventemitter3@^4.0.4:
   resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
   integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==
 
+events@^3.0.0, events@^3.3.0:
+  version "3.3.0"
+  resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
+  integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
+
 execa@^5.1.1:
   version "5.1.1"
   resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
@@ -3028,6 +3208,13 @@ gcp-metadata@^5.3.0:
     gaxios "^5.0.0"
     json-bigint "^1.0.0"
 
+generate-function@^2.3.1:
+  version "2.3.1"
+  resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f"
+  integrity sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==
+  dependencies:
+    is-property "^1.0.2"
+
 generic-pool@^3.9.0:
   version "3.9.0"
   resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.9.0.tgz#36f4a678e963f4fdb8707eab050823abc4e8f5e4"
@@ -3353,7 +3540,7 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24:
   dependencies:
     safer-buffer ">= 2.1.2 < 3"
 
-iconv-lite@^0.6.2:
+iconv-lite@^0.6.2, iconv-lite@^0.6.3:
   version "0.6.3"
   resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
   integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
@@ -3516,6 +3703,11 @@ is-date-object@^1.0.1, is-date-object@^1.0.5:
   dependencies:
     has-tostringtag "^1.0.0"
 
+is-docker@^2.0.0, is-docker@^2.1.1:
+  version "2.2.1"
+  resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa"
+  integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==
+
 is-extglob@^2.1.1:
   version "2.1.1"
   resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
@@ -3584,6 +3776,11 @@ is-path-inside@^3.0.3:
   resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
   integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
 
+is-property@^1.0.2:
+  version "1.0.2"
+  resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+  integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==
+
 is-regex@^1.1.4:
   version "1.1.4"
   resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
@@ -3655,6 +3852,13 @@ is-weakset@^2.0.3:
     call-bind "^1.0.7"
     get-intrinsic "^1.2.4"
 
+is-wsl@^2.2.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271"
+  integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==
+  dependencies:
+    is-docker "^2.0.0"
+
 isarray@^2.0.5:
   version "2.0.5"
   resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
@@ -3715,6 +3919,11 @@ js-base64@3.7.2:
   resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-3.7.2.tgz#816d11d81a8aff241603d19ce5761e13e41d7745"
   integrity sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==
 
+js-md4@^0.3.2:
+  version "0.3.2"
+  resolved "https://registry.yarnpkg.com/js-md4/-/js-md4-0.3.2.tgz#cd3b3dc045b0c404556c81ddb5756c23e59d7cf5"
+  integrity sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==
+
 js-tiktoken@^1.0.11, js-tiktoken@^1.0.7, js-tiktoken@^1.0.8:
   version "1.0.11"
   resolved "https://registry.yarnpkg.com/js-tiktoken/-/js-tiktoken-1.0.11.tgz#d7d707b849f703841112660d9d55169424a35344"
@@ -3734,6 +3943,11 @@ js-yaml@^4.1.0:
   dependencies:
     argparse "^2.0.1"
 
+jsbi@^4.3.0:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/jsbi/-/jsbi-4.3.0.tgz#b54ee074fb6fcbc00619559305c8f7e912b04741"
+  integrity sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==
+
 jsbn@1.1.0:
   version "1.1.0"
   resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-1.1.0.tgz#b01307cb29b618a1ed26ec79e911f803c4da0040"
@@ -3811,7 +4025,7 @@ jsonwebtoken@^8.5.1:
     ms "^2.1.1"
     semver "^5.6.0"
 
-jsonwebtoken@^9.0.2:
+jsonwebtoken@^9.0.0, jsonwebtoken@^9.0.2:
   version "9.0.2"
   resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
   integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
@@ -4050,7 +4264,7 @@ long@^4.0.0:
   resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28"
   integrity sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==
 
-long@^5.0.0:
+long@^5.0.0, long@^5.2.1:
   version "5.2.3"
   resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1"
   integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==
@@ -4074,6 +4288,16 @@ lru-cache@^6.0.0:
   dependencies:
     yallist "^4.0.0"
 
+lru-cache@^7.14.1:
+  version "7.18.3"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89"
+  integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==
+
+lru-cache@^8.0.0:
+  version "8.0.5"
+  resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-8.0.5.tgz#983fe337f3e176667f8e567cfcce7cb064ea214e"
+  integrity sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==
+
 lru-cache@^9.1.2:
   version "9.1.2"
   resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-9.1.2.tgz#255fdbc14b75589d6d0e73644ca167a8db506835"
@@ -4327,6 +4551,18 @@ ms@2.1.3, ms@^2.0.0, ms@^2.1.1:
   resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
   integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
 
+mssql@^10.0.2:
+  version "10.0.2"
+  resolved "https://registry.yarnpkg.com/mssql/-/mssql-10.0.2.tgz#99f9113a05b8ee32c84704fddc3780554cd89a60"
+  integrity sha512-GrQ6gzv2xA7ndOvONyZ++4RZsNkr8qDiIpvuFn2pR3TPiSk/cKdmvOrDU3jWgon7EPj7CPgmDiMh7Hgtft2xLg==
+  dependencies:
+    "@tediousjs/connection-string" "^0.5.0"
+    commander "^11.0.0"
+    debug "^4.3.3"
+    rfdc "^1.3.0"
+    tarn "^3.0.2"
+    tedious "^16.4.0"
+
 multer@^1.4.5-lts.1:
   version "1.4.5-lts.1"
   resolved "https://registry.yarnpkg.com/multer/-/multer-1.4.5-lts.1.tgz#803e24ad1984f58edffbc79f56e305aec5cfd1ac"
@@ -4350,11 +4586,37 @@ mute-stream@^1.0.0:
   resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e"
   integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==
 
+mysql2@^3.9.7:
+  version "3.9.7"
+  resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-3.9.7.tgz#843755daf65b5ef08afe545fe14b8fb62824741a"
+  integrity sha512-KnJT8vYRcNAZv73uf9zpXqNbvBG7DJrs+1nACsjZP1HMJ1TgXEy8wnNilXAn/5i57JizXKtrUtwDB7HxT9DDpw==
+  dependencies:
+    denque "^2.1.0"
+    generate-function "^2.3.1"
+    iconv-lite "^0.6.3"
+    long "^5.2.1"
+    lru-cache "^8.0.0"
+    named-placeholders "^1.1.3"
+    seq-queue "^0.0.5"
+    sqlstring "^2.3.2"
+
+named-placeholders@^1.1.3:
+  version "1.1.3"
+  resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.3.tgz#df595799a36654da55dda6152ba7a137ad1d9351"
+  integrity sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==
+  dependencies:
+    lru-cache "^7.14.1"
+
 napi-build-utils@^1.0.1:
   version "1.0.2"
   resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806"
   integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
 
+native-duplexpair@^1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/native-duplexpair/-/native-duplexpair-1.0.0.tgz#7899078e64bf3c8a3d732601b3d40ff05db58fa0"
+  integrity sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==
+
 natural-compare@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
@@ -4372,6 +4634,11 @@ node-abi@^3.3.0:
   dependencies:
     semver "^7.3.5"
 
+node-abort-controller@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.yarnpkg.com/node-abort-controller/-/node-abort-controller-3.1.1.tgz#a94377e964a9a37ac3976d848cb5c765833b8548"
+  integrity sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==
+
 node-addon-api@^5.0.0:
   version "5.1.0"
   resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762"
@@ -4685,6 +4952,15 @@ onnxruntime-web@1.14.0:
     onnxruntime-common "~1.14.0"
     platform "^1.3.6"
 
+open@^8.0.0:
+  version "8.4.2"
+  resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9"
+  integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==
+  dependencies:
+    define-lazy-prop "^2.0.0"
+    is-docker "^2.1.1"
+    is-wsl "^2.2.0"
+
 openai@4.38.5:
   version "4.38.5"
   resolved "https://registry.yarnpkg.com/openai/-/openai-4.38.5.tgz#87de78eed9f7e63331fb6b1307d8c9dd986b39d0"
@@ -4848,6 +5124,62 @@ pend@~1.2.0:
   resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
   integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
 
+pg-cloudflare@^1.1.1:
+  version "1.1.1"
+  resolved "https://registry.yarnpkg.com/pg-cloudflare/-/pg-cloudflare-1.1.1.tgz#e6d5833015b170e23ae819e8c5d7eaedb472ca98"
+  integrity sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==
+
+pg-connection-string@^2.6.4:
+  version "2.6.4"
+  resolved "https://registry.yarnpkg.com/pg-connection-string/-/pg-connection-string-2.6.4.tgz#f543862adfa49fa4e14bc8a8892d2a84d754246d"
+  integrity sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==
+
+pg-int8@1.0.1:
+  version "1.0.1"
+  resolved "https://registry.yarnpkg.com/pg-int8/-/pg-int8-1.0.1.tgz#943bd463bf5b71b4170115f80f8efc9a0c0eb78c"
+  integrity sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==
+
+pg-pool@^3.6.2:
+  version "3.6.2"
+  resolved "https://registry.yarnpkg.com/pg-pool/-/pg-pool-3.6.2.tgz#3a592370b8ae3f02a7c8130d245bc02fa2c5f3f2"
+  integrity sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==
+
+pg-protocol@^1.6.1:
+  version "1.6.1"
+  resolved "https://registry.yarnpkg.com/pg-protocol/-/pg-protocol-1.6.1.tgz#21333e6d83b01faaebfe7a33a7ad6bfd9ed38cb3"
+  integrity sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==
+
+pg-types@^2.1.0:
+  version "2.2.0"
+  resolved "https://registry.yarnpkg.com/pg-types/-/pg-types-2.2.0.tgz#2d0250d636454f7cfa3b6ae0382fdfa8063254a3"
+  integrity sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==
+  dependencies:
+    pg-int8 "1.0.1"
+    postgres-array "~2.0.0"
+    postgres-bytea "~1.0.0"
+    postgres-date "~1.0.4"
+    postgres-interval "^1.1.0"
+
+pg@^8.11.5:
+  version "8.11.5"
+  resolved "https://registry.yarnpkg.com/pg/-/pg-8.11.5.tgz#e722b0a5f1ed92931c31758ebec3ddf878dd4128"
+  integrity sha512-jqgNHSKL5cbDjFlHyYsCXmQDrfIX/3RsNwYqpd4N0Kt8niLuNoRNH+aazv6cOd43gPh9Y4DjQCtb+X0MH0Hvnw==
+  dependencies:
+    pg-connection-string "^2.6.4"
+    pg-pool "^3.6.2"
+    pg-protocol "^1.6.1"
+    pg-types "^2.1.0"
+    pgpass "1.x"
+  optionalDependencies:
+    pg-cloudflare "^1.1.1"
+
+pgpass@1.x:
+  version "1.0.5"
+  resolved "https://registry.yarnpkg.com/pgpass/-/pgpass-1.0.5.tgz#9b873e4a564bb10fa7a7dbd55312728d422a223d"
+  integrity sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==
+  dependencies:
+    split2 "^4.1.0"
+
 picomatch@^2.0.4, picomatch@^2.2.1:
   version "2.3.1"
   resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
@@ -4882,6 +5214,28 @@ possible-typed-array-names@^1.0.0:
   resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f"
   integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==
 
+postgres-array@~2.0.0:
+  version "2.0.0"
+  resolved "https://registry.yarnpkg.com/postgres-array/-/postgres-array-2.0.0.tgz#48f8fce054fbc69671999329b8834b772652d82e"
+  integrity sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==
+
+postgres-bytea@~1.0.0:
+  version "1.0.0"
+  resolved "https://registry.yarnpkg.com/postgres-bytea/-/postgres-bytea-1.0.0.tgz#027b533c0aa890e26d172d47cf9ccecc521acd35"
+  integrity sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==
+
+postgres-date@~1.0.4:
+  version "1.0.7"
+  resolved "https://registry.yarnpkg.com/postgres-date/-/postgres-date-1.0.7.tgz#51bc086006005e5061c591cee727f2531bf641a8"
+  integrity sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==
+
+postgres-interval@^1.1.0:
+  version "1.2.0"
+  resolved "https://registry.yarnpkg.com/postgres-interval/-/postgres-interval-1.2.0.tgz#b460c82cb1587507788819a06aa0fffdb3544695"
+  integrity sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==
+  dependencies:
+    xtend "^4.0.0"
+
 posthog-node@^3.1.1:
   version "3.6.3"
   resolved "https://registry.yarnpkg.com/posthog-node/-/posthog-node-3.6.3.tgz#4d3a2a4385e01c4d9e91d01dbde104e60285853d"
@@ -4937,6 +5291,11 @@ process-nextick-args@~2.0.0:
   resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2"
   integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==
 
+process@^0.11.10:
+  version "0.11.10"
+  resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182"
+  integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==
+
 promise-inflight@^1.0.1:
   version "1.0.1"
   resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
@@ -5110,6 +5469,17 @@ readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0:
     string_decoder "^1.1.1"
     util-deprecate "^1.0.1"
 
+readable-stream@^4.2.0:
+  version "4.5.2"
+  resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.5.2.tgz#9e7fc4c45099baeed934bff6eb97ba6cf2729e09"
+  integrity sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==
+  dependencies:
+    abort-controller "^3.0.0"
+    buffer "^6.0.3"
+    events "^3.3.0"
+    process "^0.11.10"
+    string_decoder "^1.3.0"
+
 readdir-glob@^1.1.2:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/readdir-glob/-/readdir-glob-1.1.3.tgz#c3d831f51f5e7bfa62fa2ffbe4b508c640f09584"
@@ -5199,6 +5569,11 @@ reusify@^1.0.4:
   resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
   integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
 
+rfdc@^1.3.0:
+  version "1.3.1"
+  resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.1.tgz#2b6d4df52dffe8bb346992a10ea9451f24373a8f"
+  integrity sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==
+
 rimraf@^3.0.2:
   version "3.0.2"
   resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
@@ -5298,6 +5673,11 @@ send@0.18.0:
     range-parser "~1.2.1"
     statuses "2.0.1"
 
+seq-queue@^0.0.5:
+  version "0.0.5"
+  resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e"
+  integrity sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==
+
 serve-static@1.15.0:
   version "1.15.0"
   resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540"
@@ -5450,7 +5830,12 @@ socks@^2.6.2:
     ip-address "^9.0.5"
     smart-buffer "^4.2.0"
 
-sprintf-js@^1.1.3:
+split2@^4.1.0:
+  version "4.2.0"
+  resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4"
+  integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==
+
+sprintf-js@^1.1.2, sprintf-js@^1.1.3:
   version "1.1.3"
   resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.3.tgz#4914b903a2f8b685d17fdf78a70e917e872e444a"
   integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
@@ -5472,6 +5857,11 @@ sqlite@^4.2.1:
   resolved "https://registry.yarnpkg.com/sqlite/-/sqlite-4.2.1.tgz#d4eedfd1ad702f79110792375f4241a90c75c828"
   integrity sha512-Tll0Ndvnwkuv5Hn6WIbh26rZiYQORuH1t5m/or9LUpSmDmmyFG89G9fKrSeugMPxwmEIXoVxqTun4LbizTs4uw==
 
+sqlstring@^2.3.2:
+  version "2.3.3"
+  resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.3.tgz#2ddc21f03bce2c387ed60680e739922c65751d0c"
+  integrity sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==
+
 ssri@^8.0.0, ssri@^8.0.1:
   version "8.0.1"
   resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.1.tgz#638e4e439e2ffbd2cd289776d5ca457c4f51a2af"
@@ -5496,6 +5886,11 @@ stdin-discarder@^0.1.0:
   dependencies:
     bl "^5.0.0"
 
+stoppable@^1.1.0:
+  version "1.1.0"
+  resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b"
+  integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==
+
 stream-read-all@^3.0.1:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/stream-read-all/-/stream-read-all-3.0.1.tgz#60762ae45e61d93ba0978cda7f3913790052ad96"
@@ -5585,7 +5980,7 @@ string.prototype.trimstart@^1.0.8:
     define-properties "^1.2.1"
     es-object-atoms "^1.0.0"
 
-string_decoder@^1.1.1:
+string_decoder@^1.1.1, string_decoder@^1.3.0:
   version "1.3.0"
   resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
   integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
@@ -5748,6 +6143,28 @@ tar@^6.0.2, tar@^6.1.11, tar@^6.1.2, tar@^6.2.0:
     mkdirp "^1.0.3"
     yallist "^4.0.0"
 
+tarn@^3.0.2:
+  version "3.0.2"
+  resolved "https://registry.yarnpkg.com/tarn/-/tarn-3.0.2.tgz#73b6140fbb881b71559c4f8bfde3d9a4b3d27693"
+  integrity sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==
+
+tedious@^16.4.0:
+  version "16.7.1"
+  resolved "https://registry.yarnpkg.com/tedious/-/tedious-16.7.1.tgz#1190f30fd99a413f1dc9250dee4835cf0788b650"
+  integrity sha512-NmedZS0NJiTv3CoYnf1FtjxIDUgVYzEmavrc8q2WHRb+lP4deI9BpQfmNnBZZaWusDbP5FVFZCcvzb3xOlNVlQ==
+  dependencies:
+    "@azure/identity" "^3.4.1"
+    "@azure/keyvault-keys" "^4.4.0"
+    "@js-joda/core" "^5.5.3"
+    bl "^6.0.3"
+    es-aggregate-error "^1.0.9"
+    iconv-lite "^0.6.3"
+    js-md4 "^0.3.2"
+    jsbi "^4.3.0"
+    native-duplexpair "^1.0.0"
+    node-abort-controller "^3.1.1"
+    sprintf-js "^1.1.2"
+
 text-hex@1.0.x:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5"
@@ -5794,7 +6211,7 @@ triple-beam@^1.3.0:
   resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984"
   integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==
 
-tslib@^2.4.0, tslib@^2.5.3, tslib@^2.6.2:
+tslib@^2.2.0, tslib@^2.4.0, tslib@^2.5.3, tslib@^2.6.2:
   version "2.6.2"
   resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae"
   integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==
@@ -5966,6 +6383,11 @@ url-join@4.0.1, url-join@^4.0.1:
   resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
   integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
 
+url-pattern@^1.0.3:
+  version "1.0.3"
+  resolved "https://registry.yarnpkg.com/url-pattern/-/url-pattern-1.0.3.tgz#0409292471b24f23c50d65a47931793d2b5acfc1"
+  integrity sha512-uQcEj/2puA4aq1R3A2+VNVBgaWYR24FdWjl7VNW83rnWftlhyzOZ/tBjezRiC2UkIzuxC8Top3IekN3vUf1WxA==
+
 url-template@^2.0.8:
   version "2.0.8"
   resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21"
@@ -5991,7 +6413,7 @@ uuid-apikey@^1.5.3:
     encode32 "^1.1.0"
     uuid "^8.3.1"
 
-uuid@^8.3.1:
+uuid@^8.3.0, uuid@^8.3.1:
   version "8.3.2"
   resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
   integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
-- 
GitLab