From 2e0b4f29ce91dc3e30a8ed7b492dd7a2728f93d6 Mon Sep 17 00:00:00 2001 From: Andrea Debernardi Date: Wed, 2 Sep 2026 21:55:50 +0000 Subject: [PATCH 1/2] feat: support SQL Server SHOWPLAN XML plans --- README.md | 9 +++-- package.json | 5 ++- pnpm-lock.yaml | 29 ++++++++++++--- pnpm-workspace.yaml | 6 ++- seo.config.json | 6 ++- src/App.test.tsx | 29 +++++++++++++++ src/components/PlanInput.tsx | 16 ++++---- src/components/PlanView.test.tsx | 31 ++++++++++++++++ src/lib/parse.test.ts | 35 ++++++++++++++++++ src/lib/parse.ts | 15 ++++++-- src/main.tsx | 1 + src/samples.ts | 6 +++ src/samples/sqlserver-statistics.xml | 1 + src/test/fixtures/sqlserver-trivial-scan.xml | 1 + src/test/setup.ts | 1 + vendor/README.md | 15 ++++++++ vendor/tabularis-explain-0.2.0.tgz | Bin 0 -> 39635 bytes ...bularis-explain-sqlserver-1.0.0-beta.1.tgz | Bin 0 -> 9771 bytes 18 files changed, 182 insertions(+), 24 deletions(-) create mode 100644 src/components/PlanView.test.tsx create mode 100644 src/samples/sqlserver-statistics.xml create mode 100644 src/test/fixtures/sqlserver-trivial-scan.xml create mode 100644 vendor/README.md create mode 100644 vendor/tabularis-explain-0.2.0.tgz create mode 100644 vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz diff --git a/README.md b/README.md index 3b19bf0..8401ffb 100644 --- a/README.md +++ b/README.md @@ -3,9 +3,9 @@ [![Discord](https://img.shields.io/discord/1502944695808950282?color=5865F2&logo=discord&logoColor=white)](https://discord.com/invite/K2hmhfHRSt) A free online EXPLAIN plan visualizer: paste the EXPLAIN output of -a **PostgreSQL**, **MySQL/MariaDB** or **SQLite** query and explore it as an -interactive graph, diagram, table and statistics view — with automatic -performance findings. +a **PostgreSQL**, **MySQL/MariaDB**, **SQLite** or **SQL Server** query and +explore it as an interactive graph, diagram, table and statistics view — with +automatic performance findings. Everything runs in the browser. No query is ever executed and nothing is uploaded to a server. @@ -24,14 +24,17 @@ Tabularis dark theme. | PostgreSQL | `EXPLAIN (FORMAT JSON)`, plain `EXPLAIN` / `EXPLAIN ANALYZE` text | | MySQL / MariaDB | `EXPLAIN FORMAT=JSON`, `EXPLAIN ANALYZE` / `ANALYZE FORMAT=TEXT` trees | | SQLite | `EXPLAIN QUERY PLAN` — the sqlite3 shell tree (`|--` / `` `-- ``) or raw `id\|parent\|…\|detail` rows | +| SQL Server | `SHOWPLAN_XML` estimated plans and `STATISTICS XML` actual plans (`ShowPlanXML` documents) | The engine can be selected explicitly or auto-detected from the pasted text. +SQL Server's `ShowPlanXML` root element makes its format unambiguous. ## Stack - [Vite](https://vite.dev) + [React 19](https://react.dev) + TypeScript - [Tailwind CSS 4](https://tailwindcss.com) with the Tabularis colour tokens - [`@tabularis/explain`](https://www.npmjs.com/package/@tabularis/explain) for parsing, analysis and the plan views +- [`@tabularis/explain-sqlserver`](https://www.npmjs.com/package/@tabularis/explain-sqlserver) for SQL Server SHOWPLAN XML - [Vitest](https://vitest.dev) + Testing Library for tests ## Development diff --git a/package.json b/package.json index dc22b97..d4f726d 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "explain-plan", "private": true, "version": "0.1.0", - "description": "Paste a PostgreSQL, MySQL/MariaDB or SQLite EXPLAIN output and visualise the query plan.", + "description": "Paste a PostgreSQL, MySQL/MariaDB, SQLite or SQL Server EXPLAIN output and visualise the query plan.", "type": "module", "scripts": { "dev": "vite", @@ -13,7 +13,8 @@ "test:watch": "vitest" }, "dependencies": { - "@tabularis/explain": "^0.1.0", + "@tabularis/explain": "^0.2.0", + "@tabularis/explain-sqlserver": "^1.0.0-beta.1", "@xyflow/react": "^12.10.2", "clsx": "^2.1.1", "dagre": "^0.8.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ecd1a59..a0e7c0e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,13 +4,20 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false +overrides: + '@tabularis/explain@^0.2.0': file:vendor/tabularis-explain-0.2.0.tgz + '@tabularis/explain-sqlserver@^1.0.0-beta.1': file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz + importers: .: dependencies: '@tabularis/explain': - specifier: ^0.1.0 - version: 0.1.0(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8) + specifier: file:vendor/tabularis-explain-0.2.0.tgz + version: file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8) + '@tabularis/explain-sqlserver': + specifier: file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz + version: file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz(@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8)) '@xyflow/react': specifier: ^12.10.2 version: 12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -521,8 +528,16 @@ packages: cpu: [x64] os: [win32] - '@tabularis/explain@0.1.0': - resolution: {integrity: sha512-yOEInJYbKr07nxCNaRgp4Yv9+rWGf3yF3/MVQfe9yZCBwiX0AR7RGtPSHoY/ki/WAzqXEErMMkpcxnoMnM+6Bg==} + '@tabularis/explain-sqlserver@file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz': + resolution: {integrity: sha512-q2n0kZuDxrmM80CznVv6wAEkptrV/DIRmVc2szY4JamuAUkvkqt/gIjkZpBRKOLlvqPZPcYFPYnJl97Ra1Y4Ww==, tarball: file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz} + version: 1.0.0-beta.1 + engines: {node: '>=20'} + peerDependencies: + '@tabularis/explain': ^0.2.0 + + '@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz': + resolution: {integrity: sha512-oV7tkkMJ4UrH7J1ZaqjhOnLP/yFsxp0SAsNOas8ITDBYTz2LLIq18apMGxePq16QpuaKSqaDrwJL+3Tv8irO7Q==, tarball: file:vendor/tabularis-explain-0.2.0.tgz} + version: 0.2.0 peerDependencies: '@xyflow/react': ^12.0.0 clsx: ^2.0.0 @@ -1794,7 +1809,11 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true - '@tabularis/explain@0.1.0(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8)': + '@tabularis/explain-sqlserver@file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz(@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8))': + dependencies: + '@tabularis/explain': file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8) + + '@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8)': optionalDependencies: '@xyflow/react': 12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) clsx: 2.1.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index e21751e..7bcfb6c 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,4 +1,8 @@ allowBuilds: esbuild: false minimumReleaseAgeExclude: - - '@tabularis/explain@0.1.0' + - '@tabularis/explain@0.2.0' + - '@tabularis/explain-sqlserver@1.0.0-beta.1' +overrides: + '@tabularis/explain@^0.2.0': file:vendor/tabularis-explain-0.2.0.tgz + '@tabularis/explain-sqlserver@^1.0.0-beta.1': file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz diff --git a/seo.config.json b/seo.config.json index 54d624e..6ed87c9 100644 --- a/seo.config.json +++ b/seo.config.json @@ -1,12 +1,14 @@ { - "title": "Explain Plan — Visualize PostgreSQL, MySQL & SQLite query plans", - "description": "Free online EXPLAIN plan visualizer. Paste the EXPLAIN output of a PostgreSQL, MySQL, MariaDB or SQLite query and explore it as an interactive graph, diagram, table and statistics — with automatic performance findings. Nothing leaves your browser.", + "title": "Explain Plan — PostgreSQL, MySQL, SQLite & SQL Server viewer", + "description": "Free online EXPLAIN plan and SHOWPLAN XML viewer. Paste a PostgreSQL, MySQL, MariaDB, SQLite or SQL Server execution plan and explore its graph, diagram, table and statistics. Nothing leaves your browser.", "keywords": [ "explain plan", "query plan visualizer", "postgres explain analyze", "mysql explain format=json", "sqlite explain query plan", + "SQL Server execution plan", + "SHOWPLAN XML viewer", "sql performance", "query optimization", "tabularis" diff --git a/src/App.test.tsx b/src/App.test.tsx index d7a2532..8ebb7df 100644 --- a/src/App.test.tsx +++ b/src/App.test.tsx @@ -23,6 +23,9 @@ describe("App", () => { screen.getByRole("option", { name: "MySQL / MariaDB" }), ).toBeInTheDocument(); expect(screen.getByRole("option", { name: "SQLite" })).toBeInTheDocument(); + expect( + screen.getByRole("option", { name: "SQL Server" }), + ).toBeInTheDocument(); expect( screen.getByRole("link", { name: "Tabularis" }), ).toHaveAttribute("href", "https://tabularis.dev"); @@ -53,6 +56,32 @@ describe("App", () => { expect(screen.getByText("Raw Output")).toBeInTheDocument(); }); + it("renders every plan view for a SQL Server runtime sample", async () => { + const user = userEvent.setup(); + const { container } = render(); + + await user.click( + screen.getByRole("button", { name: "SQL Server sample" }), + ); + expect(screen.getByRole("combobox")).toHaveValue("sqlserver"); + await user.click(screen.getByRole("button", { name: /visualize plan/i })); + await user.click( + screen.getByRole("button", { name: /continue in browser/i }), + ); + + expect(container.querySelector(".react-flow")).toBeInTheDocument(); + + await user.click(screen.getByRole("button", { name: "Diagram" })); + expect(screen.getByText("Metric")).toBeInTheDocument(); + expect(screen.getByText("Table Scan")).toBeInTheDocument(); + + await user.click(screen.getByRole("button", { name: "Table" })); + expect(screen.getByRole("table")).toBeInTheDocument(); + + await user.click(screen.getByRole("button", { name: "Stats" })); + expect(screen.getByText("Time by Operation")).toBeInTheDocument(); + }); + it("shows a readable error for unparseable input", async () => { const user = userEvent.setup(); render(); diff --git a/src/components/PlanInput.tsx b/src/components/PlanInput.tsx index 3904eb4..b5b9d94 100644 --- a/src/components/PlanInput.tsx +++ b/src/components/PlanInput.tsx @@ -32,8 +32,8 @@ const HIGHLIGHTS = [ { icon: Zap, kicker: "Multi-engine", - title: "Postgres, MySQL & SQLite", - text: "Text and JSON EXPLAIN formats are auto-detected, including ANALYZE output with timings and buffers.", + title: "Postgres, MySQL, SQLite & SQL Server", + text: "Text, JSON and SHOWPLAN XML formats are auto-detected, including runtime plans with timings.", }, ] as const; @@ -104,7 +104,7 @@ export function PlanInput({ onPlan }: PlanInputProps) {
- PostgreSQL · MySQL · SQLite + PostgreSQL · MySQL · SQLite · SQL Server 100% in-browser @@ -121,9 +121,10 @@ export function PlanInput({ onPlan }: PlanInputProps) {

- Paste the EXPLAIN output of a PostgreSQL, MySQL/MariaDB or SQLite - query and explore it as an interactive graph, diagram, table and - statistics. Everything runs in your browser — no query is + Paste the EXPLAIN output of a PostgreSQL, MySQL/MariaDB, SQLite + or SQL Server query and explore it as an interactive graph, + diagram, table and statistics. Everything runs in your browser — + no query is executed and nothing is uploaded.

@@ -179,7 +180,8 @@ export function PlanInput({ onPlan }: PlanInputProps) { "Paste your EXPLAIN output here…\n\n" + "PostgreSQL: EXPLAIN (ANALYZE, BUFFERS) SELECT … or EXPLAIN (FORMAT JSON) SELECT …\n" + "MySQL: EXPLAIN FORMAT=JSON SELECT … or EXPLAIN ANALYZE SELECT …\n" + - "SQLite: EXPLAIN QUERY PLAN SELECT …" + "SQLite: EXPLAIN QUERY PLAN SELECT …\n" + + "SQL Server: SHOWPLAN_XML or STATISTICS XML output" } textareaClassName="focus:outline-none" className="min-h-full" diff --git a/src/components/PlanView.test.tsx b/src/components/PlanView.test.tsx new file mode 100644 index 0000000..81fb483 --- /dev/null +++ b/src/components/PlanView.test.tsx @@ -0,0 +1,31 @@ +import { cleanup, render, screen } from "@testing-library/react"; +import userEvent from "@testing-library/user-event"; +import { afterEach, describe, expect, it } from "vitest"; +import "../i18n"; +import SQLSERVER_TRIVIAL_SCAN from "../test/fixtures/sqlserver-trivial-scan.xml?raw"; +import { parsePlan } from "../lib/parse"; +import { PlanView } from "./PlanView"; + +describe("PlanView SQL Server plans", () => { + afterEach(cleanup); + + it("renders an estimated-only plan without timing empty states", async () => { + const user = userEvent.setup(); + const plan = parsePlan(SQLSERVER_TRIVIAL_SCAN, "sqlserver"); + render(); + + expect(screen.queryByText("Execution:")).not.toBeInTheDocument(); + expect(screen.queryByText("Planning:")).not.toBeInTheDocument(); + + await user.click(screen.getByRole("button", { name: "Diagram" })); + expect(screen.getByText("Metric")).toBeInTheDocument(); + expect( + screen.getByRole("button", { name: "Self Cost" }), + ).toBeInTheDocument(); + expect(screen.queryByText("No metric data available")).not.toBeInTheDocument(); + + await user.click(screen.getByRole("button", { name: "Stats" })); + expect(screen.getByText("Time by Operation")).toBeInTheDocument(); + expect(screen.getAllByText("Table Scan")).not.toHaveLength(0); + }); +}); diff --git a/src/lib/parse.test.ts b/src/lib/parse.test.ts index a172908..963a29d 100644 --- a/src/lib/parse.test.ts +++ b/src/lib/parse.test.ts @@ -1,10 +1,24 @@ +import { getExplainParser } from "@tabularis/explain"; import { describe, expect, it } from "vitest"; import { parsePlan, prettifyJson } from "./parse"; import { SAMPLES } from "../samples"; +import SQLSERVER_TRIVIAL_SCAN from "../test/fixtures/sqlserver-trivial-scan.xml?raw"; const sample = (engine: string) => SAMPLES.find((candidate) => candidate.engine === engine)!.text; +describe("SQL Server parser registration", () => { + it("registers SHOWPLAN XML before application parsing starts", () => { + const parser = getExplainParser("sqlserver-showplan-xml"); + expect(parser).toMatchObject({ + engine: "sqlserver", + label: "SQL Server SHOWPLAN XML", + }); + expect(parser?.parse).toBeTypeOf("function"); + expect(parser?.sniff?.(sample("sqlserver"))).toBe(true); + }); +}); + describe("parsePlan", () => { it("parses the PostgreSQL sample with its engine hint", () => { const plan = parsePlan(sample("postgres"), "postgres"); @@ -32,12 +46,33 @@ describe("parsePlan", () => { expect(details).toContain("Search"); }); + it("parses the SQL Server STATISTICS XML sample with its engine hint", () => { + const plan = parsePlan(sample("sqlserver"), "sqlserver"); + expect(plan.driver).toBe("sqlserver"); + expect(plan.root.node_type).toBe("Table Scan"); + expect(plan.root.relation).toBe("ss034_small"); + expect(plan.root.actual_rows).toBe(2); + expect(plan.root.actual_time_ms).toBe(0); + expect(plan.execution_time_ms).toBe(0); + expect(plan.has_analyze_data).toBe(true); + }); + + it("keeps estimated-only SQL Server plans free of invented timings", () => { + const plan = parsePlan(SQLSERVER_TRIVIAL_SCAN, "sqlserver"); + expect(plan.root.node_type).toBe("Table Scan"); + expect(plan.root.actual_rows).toBeNull(); + expect(plan.root.actual_time_ms).toBeNull(); + expect(plan.execution_time_ms).toBeNull(); + expect(plan.has_analyze_data).toBe(false); + }); + it("auto-detects each sample's engine", () => { expect(parsePlan(sample("postgres"), "auto").root.node_type).toBe( "Hash Join", ); expect(parsePlan(sample("mysql"), "auto").driver).toBe("mysql"); expect(parsePlan(sample("sqlite"), "auto").driver).toBe("sqlite"); + expect(parsePlan(sample("sqlserver"), "auto").driver).toBe("sqlserver"); }); it("parses Postgres EXPLAIN (FORMAT JSON) output", () => { diff --git a/src/lib/parse.ts b/src/lib/parse.ts index f9bcdc8..becee6b 100644 --- a/src/lib/parse.ts +++ b/src/lib/parse.ts @@ -13,6 +13,7 @@ export const ENGINE_OPTIONS: Array<{ value: EngineChoice; label: string }> = [ { value: "postgres", label: "PostgreSQL" }, { value: "mysql", label: "MySQL / MariaDB" }, { value: "sqlite", label: "SQLite" }, + { value: "sqlserver", label: "SQL Server" }, ]; /** @@ -36,9 +37,10 @@ export function prettifyJson(text: string): string | null { /** * Parse a pasted EXPLAIN payload for the chosen engine. With `"auto"` the - * engines are tried in order of how distinctive their formats are — - * Postgres (JSON array / `cost=` text), SQLite (`|--` tree or `id|parent|…` - * rows), then MySQL, whose text parser is the most permissive. + * engines are tried in order of how distinctive their formats are — SQL + * Server (`ShowPlanXML`), Postgres (JSON array / `cost=` text), SQLite (`|--` + * tree or `id|parent|…` rows), then MySQL, whose text parser is the most + * permissive. */ export function parsePlan(raw: string, engine: EngineChoice): ExplainPlan { const trimmed = raw.trim(); @@ -53,7 +55,12 @@ export function parsePlan(raw: string, engine: EngineChoice): ExplainPlan { return parseExplainFor(trimmed, engine); } - for (const candidate of ["postgres", "sqlite", "mysql"] as const) { + for (const candidate of [ + "sqlserver", + "postgres", + "sqlite", + "mysql", + ] as const) { // The MySQL text parser accepts almost any text, so when sniffing only // hand it input that plausibly is an EXPLAIN ANALYZE tree ("-> " lines) // or a FORMAT=JSON document. diff --git a/src/main.tsx b/src/main.tsx index 8e9d03d..cba5eac 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,5 +1,6 @@ import { StrictMode } from "react"; import { createRoot } from "react-dom/client"; +import "@tabularis/explain-sqlserver"; import "@xyflow/react/dist/style.css"; import "./index.css"; import "./i18n"; diff --git a/src/samples.ts b/src/samples.ts index 5e14c9d..4a3c0ad 100644 --- a/src/samples.ts +++ b/src/samples.ts @@ -1,4 +1,5 @@ import type { EngineChoice } from "./lib/parse"; +import SQLSERVER_STATISTICS_XML from "./samples/sqlserver-statistics.xml?raw"; export interface SamplePlan { engine: Exclude; @@ -87,4 +88,9 @@ export const SAMPLES: SamplePlan[] = [ { engine: "postgres", label: "PostgreSQL sample", text: POSTGRES_SAMPLE }, { engine: "mysql", label: "MySQL sample", text: MYSQL_SAMPLE }, { engine: "sqlite", label: "SQLite sample", text: SQLITE_SAMPLE }, + { + engine: "sqlserver", + label: "SQL Server sample", + text: SQLSERVER_STATISTICS_XML, + }, ]; diff --git a/src/samples/sqlserver-statistics.xml b/src/samples/sqlserver-statistics.xml new file mode 100644 index 0000000..8a35cd5 --- /dev/null +++ b/src/samples/sqlserver-statistics.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/test/fixtures/sqlserver-trivial-scan.xml b/src/test/fixtures/sqlserver-trivial-scan.xml new file mode 100644 index 0000000..c85f8ef --- /dev/null +++ b/src/test/fixtures/sqlserver-trivial-scan.xml @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/test/setup.ts b/src/test/setup.ts index b0d95b1..012f277 100644 --- a/src/test/setup.ts +++ b/src/test/setup.ts @@ -1,4 +1,5 @@ import "@testing-library/jest-dom/vitest"; +import "@tabularis/explain-sqlserver"; // jsdom lacks the observers and media APIs @xyflow/react touches. class ResizeObserverStub { diff --git a/vendor/README.md b/vendor/README.md new file mode 100644 index 0000000..02accfe --- /dev/null +++ b/vendor/README.md @@ -0,0 +1,15 @@ +# Pre-release EXPLAIN packages + +The site declares the release versions of `@tabularis/explain` and +`@tabularis/explain-sqlserver` in `package.json`. The matching npm releases are +not public yet, so `pnpm-workspace.yaml` temporarily resolves those exact +versions to the committed package tarballs in this directory. This keeps CI +and preview deployments reproducible without changing application imports. +Remove the overrides and these files after both versions are published. + +The tarballs were produced with `pnpm build` followed by `pnpm pack` from: + +| Package | Source commit | SHA-256 | +| --- | --- | --- | +| `@tabularis/explain@0.2.0` | `TabularisDB/tabularis@ba0463d3b861ec8fad110126c67e3fc12bac9839` | `952f9799397422ed7de4379ca9e465c31e32a5837144807ac44f977f0f5c0a0a` | +| `@tabularis/explain-sqlserver@1.0.0-beta.1` | `TabularisDB/tabularis-sqlserver-plugin@e56e5e21d942e97e2d9f1c50658fd968e5e2cda7` | `6d467e93b87921cd3195cc7dfcb26d62979d471ff010375824416e42c26baee9` | diff --git a/vendor/tabularis-explain-0.2.0.tgz b/vendor/tabularis-explain-0.2.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..72f6fdf63e3fdc02d535ac0c39249acfd4cea9f8 GIT binary patch literal 39635 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¨Kq^- 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 literal 0 HcmV?d00001 diff --git a/vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz b/vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b3dd7aea687ee6941b57fad579cd65c6ee56ad12 GIT binary patch literal 9771 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 F002$ARA2xA literal 0 HcmV?d00001 From c0deff1d014386aa63819da5aab3cf4a085bd261 Mon Sep 17 00:00:00 2001 From: Andrea Debernardi Date: Thu, 3 Sep 2026 13:32:07 +0200 Subject: [PATCH 2/2] chore: consume published @tabularis/explain packages @tabularis/explain 0.2.0 and @tabularis/explain-sqlserver 1.0.0-beta.1 are on npm, so the temporary tarball overrides and the vendored archives are no longer needed. The lockfile now resolves both from the registry. --- pnpm-lock.yaml | 28 +++++++----------- pnpm-workspace.yaml | 3 -- vendor/README.md | 15 ---------- vendor/tabularis-explain-0.2.0.tgz | Bin 39635 -> 0 bytes ...bularis-explain-sqlserver-1.0.0-beta.1.tgz | Bin 9771 -> 0 bytes 5 files changed, 11 insertions(+), 35 deletions(-) delete mode 100644 vendor/README.md delete mode 100644 vendor/tabularis-explain-0.2.0.tgz delete mode 100644 vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a0e7c0e..512dc05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,20 +4,16 @@ settings: autoInstallPeers: true excludeLinksFromLockfile: false -overrides: - '@tabularis/explain@^0.2.0': file:vendor/tabularis-explain-0.2.0.tgz - '@tabularis/explain-sqlserver@^1.0.0-beta.1': file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz - importers: .: dependencies: '@tabularis/explain': - specifier: file:vendor/tabularis-explain-0.2.0.tgz - version: file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8) + specifier: ^0.2.0 + version: 0.2.0(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8) '@tabularis/explain-sqlserver': - specifier: file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz - version: file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz(@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8)) + specifier: ^1.0.0-beta.1 + version: 1.0.0-beta.1(@tabularis/explain@0.2.0(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8)) '@xyflow/react': specifier: ^12.10.2 version: 12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) @@ -528,16 +524,14 @@ packages: cpu: [x64] os: [win32] - '@tabularis/explain-sqlserver@file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz': - resolution: {integrity: sha512-q2n0kZuDxrmM80CznVv6wAEkptrV/DIRmVc2szY4JamuAUkvkqt/gIjkZpBRKOLlvqPZPcYFPYnJl97Ra1Y4Ww==, tarball: file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz} - version: 1.0.0-beta.1 + '@tabularis/explain-sqlserver@1.0.0-beta.1': + resolution: {integrity: sha512-sJJRH/Di4MJRjIXvoh5YHSDunLM+36gyWsuFPRSStFaV0YcnZPvHjoIHsJMSbmdoagYkaOKfaTqw5b+FP/iP8Q==} engines: {node: '>=20'} peerDependencies: '@tabularis/explain': ^0.2.0 - '@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz': - resolution: {integrity: sha512-oV7tkkMJ4UrH7J1ZaqjhOnLP/yFsxp0SAsNOas8ITDBYTz2LLIq18apMGxePq16QpuaKSqaDrwJL+3Tv8irO7Q==, tarball: file:vendor/tabularis-explain-0.2.0.tgz} - version: 0.2.0 + '@tabularis/explain@0.2.0': + resolution: {integrity: sha512-oV7tkkMJ4UrH7J1ZaqjhOnLP/yFsxp0SAsNOas8ITDBYTz2LLIq18apMGxePq16QpuaKSqaDrwJL+3Tv8irO7Q==} peerDependencies: '@xyflow/react': ^12.0.0 clsx: ^2.0.0 @@ -1809,11 +1803,11 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.62.2': optional: true - '@tabularis/explain-sqlserver@file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz(@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8))': + '@tabularis/explain-sqlserver@1.0.0-beta.1(@tabularis/explain@0.2.0(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8))': dependencies: - '@tabularis/explain': file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8) + '@tabularis/explain': 0.2.0(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8) - '@tabularis/explain@file:vendor/tabularis-explain-0.2.0.tgz(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8)': + '@tabularis/explain@0.2.0(@xyflow/react@12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8))(clsx@2.1.1)(dagre@0.8.5)(lucide-react@0.563.0(react@19.2.8))(react-i18next@16.6.6(i18next@25.10.10(typescript@5.9.3))(react-dom@19.2.8(react@19.2.8))(react@19.2.8)(typescript@5.9.3))(react@19.2.8)': optionalDependencies: '@xyflow/react': 12.11.2(@types/react-dom@19.2.3(@types/react@19.2.17))(@types/react@19.2.17)(react-dom@19.2.8(react@19.2.8))(react@19.2.8) clsx: 2.1.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 7bcfb6c..18e7078 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,6 +3,3 @@ allowBuilds: minimumReleaseAgeExclude: - '@tabularis/explain@0.2.0' - '@tabularis/explain-sqlserver@1.0.0-beta.1' -overrides: - '@tabularis/explain@^0.2.0': file:vendor/tabularis-explain-0.2.0.tgz - '@tabularis/explain-sqlserver@^1.0.0-beta.1': file:vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz diff --git a/vendor/README.md b/vendor/README.md deleted file mode 100644 index 02accfe..0000000 --- a/vendor/README.md +++ /dev/null @@ -1,15 +0,0 @@ -# Pre-release EXPLAIN packages - -The site declares the release versions of `@tabularis/explain` and -`@tabularis/explain-sqlserver` in `package.json`. The matching npm releases are -not public yet, so `pnpm-workspace.yaml` temporarily resolves those exact -versions to the committed package tarballs in this directory. This keeps CI -and preview deployments reproducible without changing application imports. -Remove the overrides and these files after both versions are published. - -The tarballs were produced with `pnpm build` followed by `pnpm pack` from: - -| Package | Source commit | SHA-256 | -| --- | --- | --- | -| `@tabularis/explain@0.2.0` | `TabularisDB/tabularis@ba0463d3b861ec8fad110126c67e3fc12bac9839` | `952f9799397422ed7de4379ca9e465c31e32a5837144807ac44f977f0f5c0a0a` | -| `@tabularis/explain-sqlserver@1.0.0-beta.1` | `TabularisDB/tabularis-sqlserver-plugin@e56e5e21d942e97e2d9f1c50658fd968e5e2cda7` | `6d467e93b87921cd3195cc7dfcb26d62979d471ff010375824416e42c26baee9` | diff --git a/vendor/tabularis-explain-0.2.0.tgz b/vendor/tabularis-explain-0.2.0.tgz deleted file mode 100644 index 72f6fdf63e3fdc02d535ac0c39249acfd4cea9f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39635 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¨Kq^- zfo4-Qn02mQ$n@Xl;Yqgo^G;^%gVrXns!xBaDMxilJ@pJJ9x2~g8EYp>R_Z;*CsQRn z-i36vQ<&U^XGoCKYyE`( zK3O|WIww`i&3dEzcW{P~65D(_^ajIfxA6_fI;pD97oZ6%erfn;lGl>+cKTyFDm}kl zTWz86DTPz`jm3p*!JS>SAR=oBXiG-1{`pm!Q1?POQzB-T0b6DlZ#jzSVJ}XVTfxl1 zS?dVsz(p8=ZM%TuZWE+Ut`kgwFNo2K`im5+%wnx_U~irDA#M`IOa(N&%=7Jq8gry5 z(12JkEVG*_kO#5cHyk7b^K#s(q~Ica&ew*h!XNNS$pEpNpF1%wib_lJN3rs%&K_h) zhX%xi*1RRD+1W`3_Kc_ii$IqdnO&sksG83_5bJku8Y&KPLFZ>$sT*2NnioquT*w4k zpcV8YqdTYkq1~J|q#%q5&Wi8;ovtudw0&ke7;HYURBt5r`WB_l$1KZw;C}DF|Rf?_tI>XQgo zVl^&oT8;f-UMhvXao}c;9~hwgXjn8O#Ru7GHr2lgvlVkQwFSCQq}0_wodv^cO+-fH zYRyN$vnc5_umb|nCSCPhs}GSU81qfpCngdwrc!ODOg#)~hya<7F@Q!6v7P+_dzb`D zQW{^`_!)8YexthPA+?q#i)zO(WbM?%q~omN){J82QC6v6r>wZ{zJDzSaAiRPbD0%T z<}{U5*u*|WWK9ks>8zPa$FWQ~7EO(5&Fk0Ry^$9-GVx-~Y%GR5>=@Hi=*YkyON~>BTcm-PjaORi=jaR%>q@>G~x-sU{?vdpFoWK}v zd!$rvlo`xU)-}9SB+_uX-}di%kLbv=e8dW6Y|`iuTR2@(^4(mXUm6qiJs)Gqt?KHG zyDy0HzgBEodGnfRP+(A@C5s`sS$L$w%!OSdEq{awKTmh;PiPU`+0p`MALktdw4#Ko zEdH(D(7)_iJzp5}9&on6xRgdGN#@e|38)5+Xqk$|5UYwcuuD<-roJKP%xY|TthVd% zcyAy1vuH9m=x)=e-aqM~Sv_%y08yifYhY?6_`=|uT-^shObAGs(t*DN^^wAB{%_AU zqsF%xs6~wsrG@nyi)`SGS1!THlz*lwL-MU%SOT~7sD3_CR$Zzymus*PVc)ltB?)$r zE$AhY4H)U~H}WCF8{@7Vd+JhOQW7xH=0`7rT6Xv&Foa6%2W=+*8Xr|kU>wwB0oSiQ zRAySCNhxHM0Rt2Vg^@|pRbBg82ksE=H zIalcl8U7%l-4l!-tz&5N>VztwxAH8s@x*bCzjrzDwmj~=(Uh?pRtA^`N7_G@n*FB{ zw?rjitI|#^CxCa4C~;O&FlfY6wuA3iBPpS|Ys%qNcyM59OOM*x&%xMR$Ev9PoGxa1 zQ^;yrjlw=fHAPKdcLBUp1P;d#N!Ul+C)rfxW2z?WsS|8uMe^Vi%8CTIhy%Wk8c8z* zjM%ZI%vy5On5nJ;RHmO=n3WAguFCAeusW!N#d6O?pWB^8mMJPf-Zi#hc^pZEC$R#U zI)sNu3J7&R9B3Dly-bpL`P34!0Hk(dkZM7PJ$Q*A-j)+brADlJZ6|7jnIy<`p|;}| zW=Gg6g~!#^Ho~SN?oBG5D_k)$U2L1e6K8=aKf9~WczKB(qqU4FfH_)NM#)Dal37Wo zB5BO1=qI8sD4$uz{_JdpmF?{I=(&wQzhS8y$SXuT==iaGOkR;uxTH7l z8j7_{iEuudG_M$CU7eY)L5EbgIZ!``6cPBrWWrR6*HtoS7xejL%Zp(p^;#2E0k}m+ zfthcU0~O|nsiqaKYcyH+%J=}884W1ztp4N3X*3KVt+G*J+mJ*t!zGnKEPc6G+E<@Nr>vI7K`1_dWDxsrZdss?$5>h*QP2n6O6`=(S zA(jvl;-H4Gqmr=8x_N=VX;#_Egv1evdW_(xXs!HKRn%4#8REDfLi`h8eDVZ^V*;#* zu5Ko|{>y@i=YaR54ob%cZh_vqv$hJ6;_NstGi_n&u(umXPDk1@$hoOX#GqEjD{ zkIXJ~bJRzxXF)6<;{^)BW@)%%^1C`c6yG6Qs1m1`3tfZAt)>Hf;h*dM-QJ&EX}TU3 z=?Tlqz5Be2FXbI4ylvap^F%V3pUrF6?B5&bPCdWI!H(Eo-;M1Z-;buxV3$_B+bi$s zpK7mJcaY!d{d@oaK{-j4IEH3DSl|luv4mN~_~Ar}ddu(UemZ2l9QKp^xDS?cbfU7M z_weVu|632RXPxZWfpuP~sp0bNvH25~%)Op!M|jBMOAzwT6h8yqkFp^<4R42KA2@aQ{0Jh1y54Zcd|KGvx!N1X@Z+MDNJjEBjqN`S=m!R?qD8Hi-E60o=9_f(1WbWbB z;J=-cc7pMEUmq6jWXmG&l|)qe4KUgOLEBgoDSQ+-NAkhe3q&Q2Y%kPv2^AeNjaXi) zvjz@$8@Lyn>lIM>ez8C9wy+3w%=79kT;=F9G$nE+$KhF@IfI~_w@zf33yFmpJfDL6 z2f2$>(if}v+@*teW(#$jMr>DDMjGfmD<-X;YYwQ9ylis$(bh-0Wx!APT%CP)E#L33 ztiio}asDJvw4jbCs`j1L7Yxf|-r-D7*RWm~pwj#SDi|SZsv^FS&Tp@!vAMiBHf+w$ z>(#uew6h;J;9Zh{@dX-7vYNDHq)5c}JM=G?W=)J5TSka~DXZ498PeDmi*^OLO6k9& z`X%v;$yPdWc8Q{zcd~+V!w;23=i){6KjgX`wq{p zCxasK;Pi5QM_t!v^!~X{sn9uOiN0h&0k~UWkPaEtFZYZ_b?L4+HVt?zrU!2!L`|<_1fq8s7<{{r*hk6{c5K=9b-;r*XYqGz}$Y30pC zz(<5Do73r=`8v^F2QA)&!iFrDuS* zgVNEpCf=iV*{Ur4;cL- zpqDz($!6w$2~)xQ>d9*f)3nP0e<;7}2Vp1Ts;}DQI;I$P8zc18-n>ewqI#hUCg|0H z=|iL=K#JaE0wR#msY^^N11K=D`jQ_FQQ-ZBz&u!^B0-&l^j#zdp(zxK0upC=666!l z?lXu92i-D3LVGQ>EhiUo`S#+GvZsci!@58});6h8$6pqaFl_;f{H5ArZLdd>D7_#0 zdeD}ZL{t2O5QEy)Hnq0SzH=w6+<6a-fVm^FGI4hjELcS;dQI>At}B6dw#wg{tl{0k zbY~s7t?bwc7t2Tv&7pHN3?K(c%%QkP_x1q>o1(dkIC}6UPqQeS(wGpaSwM`%NRXPo z!vp$LC~+GUX2h=o6zD69Bt=Z6gFQaqVb4X?iE-qX%`iS7ic!IWVBsFMC3y>X)9I2LB1NVu+px#>h2 zzNBj~`TaPhxeQZpbZufBYb@tH7%=9tk}E;2)PLTYzQXYwYs@@oaEn)neAaG@y5or7 zwT2{|UI_1lzu<2gmER4v&WUtO-*m}NOrUc0vgHGr*b~9);t%p2)igX8#h6<`!)t*< zkV0zHU6oYh_-@Y3tRj@jP^G&y1lBT@S9t2=I|J;%YY|tu)f;0;u4t_Qdup;>4f_^N zI3I31X;t_ZQr|V*nnc+9ZJkj3hRwQ2+Nj~m5@fMrTdA~V4Gn%(_+&HI+ht#Ki@>^L z=?&J7>U@C?1**Tj5M#n|a7Ut>5zf@X_RNo6X#UOOsh?n}bo)5kiS1nRXTjR*u)d}L zlH<#Md_j)dQY69`frUMy&2V);M5P?M>iEW3M&G7tlzYY3e~wd@)~U3$>Ny;dlcjs! z*n?JinSc-tS?oe_eNhxOkiQ>aK5v9u zPt(**z}w&_>ZT!R{Jf{6ef_u2_X|quu+&3?q)?=Dwvq}iK?1>*0&`XE!}7WOjvE3U zk^8%yba2J3A~jdThPO5YpWLZ^!zW!}wf`)`)rduF^$f!J@n=vPW6Nz9y>-C%8Ive~ zq~9yEn#EM~T-mRPBd$lKnE0C~XM5Dzypd(SI%|-!Uj}i7ulz6B!0NNrBF0in4A=tdMv24Hb=J&Ud|EQ{4w`SM-Ftd1xgip|ibZA=m$q1|QHUGFxU ztwXKQAs1v}bmNT8Z+?kVgefaRYbg)PG>&O< zZ;MmLEO#ja!K0blHO|XA$WJYwE!jFf<|)F`Aa7$;&WmH23(EE>!m!P~OUN5xZH4#8 zWy}J59`1bY!;hy_aG1%F1S$sVINyBb^M^WvK6Cx0LCQT)_O(0gVf^u+195hu$T6ak z2PyTS{DJ40n8dRlWUrzxadtu4PTBnHVj^__f{rJT4mxhw+Fi1gDu~U1F4eq*c6z_kfQ^Si64@gkuR-0t4C(0a~cX99LD~iu-*rl-@3iD;8__- z%-}*Lg-L4E2M@mR)LptopZ7XjB3IK{@M=M^O8uiP9|bX%M4{%znyH8{8qW}^u`b4c;K$m9bXE}+ z9>IzJc9MGjB7ZjHCwyX&qtt8+% zqInJ4#ta#IlM& z#IHQSL|={L&W79{9-@@i6^73W?m1BW?x6 zN%6`qX<^Eaq6pq^Um+z(4xM(}4Xlrq7{rMy#mi7`v!u!l zHz-2s$+qxzTQ}SxUE0qmbG&Wl;Z)RPbeuveJoY|QMWJK(^sh^8Fcof5(6|eM+kMZr z`_;NDfJ+Uk`L<{voZ*w>8D&B$cuv^Uo_8)NJQ5e$7?Pc6%n-HWFxWw?6*ZO4;(4?*h`VO;}q zRz{{yzD=kUGTew<134%%aFgnoOJakn7Ne_vbrjou5XC1u2UbN{&o0wO2Rmi}R3pWC zzXr#j41#l|U-EM|!|!*fD90PvV?T zn{+E>>5Y;C0mk`sW^lA(vC?QvNs%zaIy~pP~BRqN!~I6ivvPgdHvB zIQ^-!i74pko~^wVdS}iuDwF`ZZ>fjcmq9sQ%s!1!Q>b?%Mwbz4VuV7(DFp1oR7%Ef1Me}F>GI4nugwd>H z+lJl#+S}{MMW=T!EmWmVZLb=H_&K&eEJ47jKMd!^2onSX> z+S_ZevCP@kE#z?W{bO$-XzkVMOYxz~gwgVBXyizStnizgroHVBm{E)r`cZ-R66mYP z1EgNpRk|9G!Y;liHbqOb;4|H&mDfiFSzGn0aF%9c;%z@8=1L8cWKva}KTH0VvfHLLsbuU&-f2{}3`oOOjJ9tsJH z=kM03FOiyD)1Z}xE)zcEFqDuDhH!?;9-@7hk$s)Uf1XH+%~W4>>9FnCnW`=B79Pg` zG08L@|GCOCd;Ve#p5z>R-NDm6L(o}J)O^Pa;k2pPQ}2sEZAkxn0BnTbm5jh1zQD}T z2o85{=@zArC4bae)3f*v7O#eTSFK8V^FK^OMRhfS`|<|q0|B=XU;7K#u3J2*AjbaV zWec7b6^DcESszR6n|OeMJr+zwzEI2E=>m>J(~m87kzdYu-0i?@caIJD(NaI#kN?){ z+|$Df*k%ML?EaQfQw(Y?Pki47RB&-sF2H17_ZHQV8WV8E!V# zYs|I1x&91}?APXvHq6%n$fI{U0|r;eS6i_qlZ1j>{${2gqh(6>iYNZ<{Zcb#cE2{^ zjtoTcVna6A@i|)<@@6&~c>d%Xh(4^@u!tX=Z$6RW!zVrR4f(5ngn6RK(te5Gm-2U+ ze|--FPE0lufVNdv183{*JFoHu+3h^cFW1>@c{by;IPT8Nxhak%ON!++%sN(o7W7X# zbq1y5YNxLGcZ)65R#2A1)n_FMJ|vL0FJD1SR_~>4SaqM2g>NsocG8dW;Qay z->X-Cy5jR4Dq8H@oL*5VUdP_~PxB|0YS)f*4~^Jr>E7bZbdbI&r;YYk=v3nyrHK1l zI>#Z>(pu~ZX;rSY@rhIp$_pjQKhge9^yq2vHu5<1PabGGtp_;uSh3X^;;Y=pSlmOA z+9PxLQHp}F9}za0bOMXYWAq}?02MKCi1m`F5*I03$+f$l|lDM5DwIbN!G^J`pVn)SAt6x z!XPiFnI}LF^5qz#M>;^|NDbaI-#W_eS~Du_jW2hE@WHylDOGcjvj|sWQS%K|%ONr2 zH&@a>9AEv{qKSA?`Yh}!@!?E!P%w@xbjHN!MF%zb-C&2SB}6pLmWgcf6MwzFh1VwG zcHE*)v?i%2*qw1|&p((KVqu#W9q6k`Gd<36vn7Pq30c>UKZq;qHP%m|MyW5L?BA|*P6$k_ zIzQv_+wfEDOk@7x=TIIjgV%F|6{WB=JC~SB+rRC*pEq_{B9=~{WW1V36(HOkxEEfm zIz)zhS&$@|MpqjZ)#tid_rx^BRM~S1JbUM`8V(b?MWl)cvBGO7@<9t8&YD1P>PCJ6Wf*LXA>!OAoL=dxQ!V4eoczgEr zO%RPC=;9C3z*|&e3@z5&lX^1EtaG<1Le)5r{;10hE&OMalm5vn5!)5sU^ zETtnJf7`Sm@wW{L4! z)Nl|W-K3A%9Whn@c>cc9a1yj%i3p7hooW6m0T0r~xUjjZOmxsa6bJGeAyK&nXJ#sL z>pGK_k^-_BpgQZnY7+bbW4gMem2ukY9X#oI3)y*NSQ3#nKo*3GNV(S^3%m4DKSzwv zzH?cDK=A9q%ysI*`GXT0H{sPPAou)FM?f?WvF;Bu-kaR47G$lD+5##XO)@V1WBHZUOQQw;+j{GMe787bln3hQm z^LDemYNYkrtaOB<*IdOHs)`}j(0qzhEG~fI`KrnqS)RH7jNK2D%3Xu!%eL9KWNGpo z>!naTZ(jVf;In|gJENh04Fg$b%eL(iV-?Z87dW5Spy!FXH6p-nXHp7*9s5YRro>ny ztAt_D(6kpR#;OnAfSSrHFBJ@xD~=WEx6();RBcBQt)RQV2E~fEsAsYqX2|t^4Sb{| z**30yd{5F*uRzx%o&>QEU(Gr6XZkeGugwFrrL?iZ{>wdZ;z!H>U-IOFX2a z?W^oNFA+7G_2spS45_$e(uBSb-Fwx!ZaBzKKFFdJXWjkbw|>tgwHPM*0`1Wt2Rv?3 zFHxZptf>Yju5eXD5N+QfojpQI{XIthuQLExbyYkInSxn=VN1VN}p21YNSQR*5 zH%~AR&RjuOugzh%LE3j9Z4>$d^JU@%VM+xAI9t+6K*$5Qq9#Pvd)zKJ?i}T4&NU4A zPOK&kKC1y50S!HLGlh1OcZ3-q-!3Uqa3ZbY^*=5=bKhuEjJf5+{8q&2o8?|guQTW{ zg1S1w>am8=U)WZ9>>86AgdOOd)4e6P&9;%?l~}dYC+{H)v1R4?Rn;DJ2v5a1JQR))n z*^_xq%)WfC&VFbsXaXi(6)f;Ro?qmf=zr?j%M0v*-_1-4-%=$E4k6x%u7O6Z_HBXlxeg~lR=W(CSvnY-?5t1F z6!y(FV;Okmbe1|))vkbAH@?VMagZ{n*q06U!I%2Ty{-G zY1244c&*S$B)V|3Di^$*`J1~xlL8j=NMYJtPk2pqRdpP^H(VBrb|$F^-Mmcrkxw?d zrCO|0ntbQG6efl)-q+1r?FIWy$QV_?e$;(i5f_(u3qGA~p4^N)$Q}I~NuF6i0_4Hn ztProsVasMM2=$yG5fzUswzVTo-Rf|(^J2qJ2qx*?58}Hd&1a*U!cnB(PzedESRrcjH0`C@@y;L52>G0K8;Q}$?w2cL5bS|9AvOA5?^_y)FLQ-D+e)dBYqR=C`+UzepFTxwvgmF{9H>Ts((cozjZ{c=uX0YF zGJ)uC4(Z5>v^u0IVTY%M(Hn-0>roz6lk4g;RQa;mdyMQd%0L3U1o>muTEg>8!Gw{x zSpo=yq{~)VsXp(0DsiMk{e2_H;QFo9TOXGCh@_pv#>Pm4eM0}9HaUcon}v)_qo(;j zQ&R4Jr$w{W9?KfAKeHl#2I^3_zi#QcxHrEhiO$kB8wQDBP+u1WO#m4;0DcLi6Uo0i zUN%WNxKEi9Sv}q_kxVv*o@a&pFp*0p+;v8JVxxylz0+_<8bjW>8Z?vf*OKG9-&V{- z>d|$|J}Z@A?cu1H|6?#3D7@|Y=*HJ&I{cZLzEXCt&O$g^wQw8D6(vXdr=?1p$FwHe&p#By>@HLBJ~z~os( z0oekUc?cvfh-;G1ml}wEcs`O@jMCV3A(vJoUvkQx#!6hN_sm)GQQS&wshU(9QJM0h zT9-LJ2IZlgx40aZF&oLv;EhL&8;#ob$UceGzsN%1np>i}V?JBQw!=I& zI~K|Uk|CL8OE|k!jDI>(=Qp_fr@AVf7)h0-f*wFz+ZLZ+nTV&O7s=2NTK3BNyc7HE8I@d)Uf+*7KesNhYm1PU`+D-IyHaSBGM4)#{*BDwM%aOzt z%NAHs=nH0&;Pdr;JE+rboo?5wmajpt$F4g7tvNYWW8GRYXu=EjcUvyErZCL9eheuB z*A^IYQ;}3|; z-lot`tG^G?2%VsZn@$UaDw@3-*0qD{{Tx%jg|4-pymiH272u2k zZjsLk7s{2JS(nq0^{VPqBWaUG)F%Pzb=)}%EfDrq7^4uAIO6Z+Zn(|yH>Dm?x{$`* z`xxx*?My?7Y2O&N*lKXUjIakvDNq6DG~1xDlOSGixUNOGsnE{tf{sTJTV?u?*12II zExchXfIMG&H^r34dg|0}J2=758ol17S0%57JBsvAZ>c6F!Zz75pF@L>t(WI}#psr9 z2{B~It)x1JlCbiat4~iF&o)BUZp*A&Erw&6A#X*Bo6dy$lbcT(1_84|)vDQ9l-yCN z97|`m1C%#? zQcJYc?x3J=J60ZuKt?MI@@|UU{sYv|a)E>u9u^lfnQbiX;^a?rB+ZvHK?4|kJd~fY zpYQF%+JCd3x%!g8>8=ItUk+!(UB!d(ei1(G44&u(JGYG`7X^HCmbXxIi{}qn_^-qL zqbv%bb##_@DL9_ET~&efjQQLF~4{Ah*>r#Z=4FnrHi1*z?d=G>~w7%|M3`6q4o0N`v+k<1}PFy})<5 zD_6>$9Tw)`ks=suawX7O;|69Kj_qS7gSbhU9OR(_+`E9s0zmLv@HtA(e~4uQzdke7 z*8#7EpY!>Ob7U0Byc*&^<@>%P544<~KC-~*=hl8@$*zBEDSOb=-7Tox)v?vmkgrVUHX zX_HJ#;)hP8eJmn#V>mH09pmT4oVzy{AoM5%8&`=NmQ zL%3pOnMImUs6&x(PE{G!uK`u2HV>+eP8FpX zS6tqt&d)algyzkV%Q1v^Eh0_MgwPVL#U@PSZn)ATeRk3&T!SLkCU6>FN`tnQ$U5&! z)wz4h!y(c8q2?5+J||f@6Oq-Jm(axTwQUjc_Mr-(xa*qrVB`^9Fm`SzTO8czncy*+#?k551oHE2;!e;X_j7pmfb8@Tn-}r(WB2EkQp)d) z6%Gy#cdK)BZ#O6?=%W|>^=7AY6fWk5kDZ;{`)+R!my4a7le=ru*WpgcjrfTPoa&Aa zj<>V=WA8`A*B{nJNxTQA?#51vH-oGz&QfnKLL_Cm8})Bs)&}4u?$hlH#dF>zd-dM5 zl`eT*#eNTZR4D^d4*otJ+9f}m>r3h?oor4oF-wllJ$Al&Kl+PD$k$sMKA;AJ9O~iK zwKmEmZ*%5Yy*R4t8}aF3`Pn+HOk?`kJIJogB%@l;_jfpTsT2Qh=Cxk>K95J29&9sp z@LH}zdWMWVwhzIBG+?Zj>+~=b$PTmqb~rP`&9+Cp^`iCeJ9Elkj7zYNXj$i`=WebH zIpyWQG@F~LDC+uForsenszdTbI1oB+OHnTICp>ASkHoXe92C@^5^gQZcF0^1JpCtj zOz%lCuss0QEAqA}!;isGZpl%@>(9*?sdLyM$)l&ApYjhdU9d28c8Xx|iOHD2Lcb(6 z{3Q(@3~16OFw9giC<2!k-lR~&iUfu!rq;}%n{EWeJ+lw*QgEyLtig1Mi^TxJL_sp2(wf`MW!>_*tt9$eOGeR zms)QkPfN|{=w>U9_ot;qOb0Iet^q+umKkUMlIMhJ7uAc8DzYm*Zn{aG<&zk{;)S|> zg8L-0FaNbi^1kAUelO|+{fG_vVbjmb8y)wiHkxmA@%g;V^SkYPpRqW`E`#6W`E_`^ z^z9ax!}U#!aO+4I{8Z0#VLmN5x+ZF9OeH`+=|jMe9nG|2%8Q1w%CJ^$5lx8hS?{S6 zs$Is@z#2JdF%j4!+;ua1yZrg~GWC42G9&cc?%m|8+6i4*+!y$@)fd2dfp688|7Abh z^|MFOmYa+As*XIv3x)sq*QP!dr=7gNWPZymVM9Z@kaoUfKfm=}V=Gj|?EXj+lm;iL zXX51Sxi6qItx(mZch=|s+$%@fofR@%J}+EZlTKD3vKt6l&*nhUWHmnCm!`!3Q2k=O z?>e6R!rN4({KCV-!@*lU{B8%;!uO8-@{P=@RZ%>-agu34-eih@LEk^Idol9_CWfONQDR*h#59aH42kejRpRB$uI(|b zq24(6)}K`%HN;!9NJ-HyiSW@!e?-|bq(*Bu#N)*C?9TbFeGGuj1i@>7&u|VK>NRYl zT*%2)M4>dy>!>RicSLaFtLyG&mKxr{wXz6}p*4p+(k@!`ml;C}bk(%1-(%Xunh~;= zCL)Tt)@MO{j4257I5ir&+lr(&XEVI9Sl!@y!{Q8Gd}AI*Tl?q&&S}K8_w3m~1{_u5we1IaQTTL`6;yr#4LD<%LL&#Ez$pUB8xAnr#RN zpAuP44)S^G_hUD*4&e_cg2)gP0sb9=+3s94kXtNo(z}QW7g~G~2UFcRWA@&Kvcc@E zTU;h54Cz|3(VWo#^-%U0-y$RK!gu5BOdru*NU=t05|4K|Q17N@-$>V-w0M+FBDuzTiZQJ@T4B;~D0|9gi-QHUx9|1#I|>Eyum6VTb^`ml>wX09a;gpR z!sYY6{r#>FAp^LboYai}wtLp^{fO`hl@eNuHvsxC0i5IfGj52JvVp=2QP`7~^9ziG@)U^WbHDV{+^!T_q_&SRC z{&`rQ)TsdWUhXIk%ci6IeKY*cLQmlHmomu4P~s$n>=*lPbegw}wXtXjwWb#}d1d-)h1pCr(ERo*pbW|s*X z`@FPJJp)Jg&d;q@*Q;xI`BzMUvbHwf4GB5KYo2|QW6Nk(RDv~7D5%srhYT}Rz@L)) zOu6;3E>xG!6{=^gxIzyVrpjKuU7U;&)tUiy1HV5}80Cr-^h%T+zkGmV%M@p|!aD<1 z-pV+NN#$7`>Jr#WYbJG0Y-AmUkeU1h{dNP5!SpIk)t@++!$7lwyya2%bva8iz8pP9 zjw7BzZf6ea$Nc3Bk|izrtS$H_Dy3N7I)lc3e=>mtX$aD=eyOpnfQgz<7XmJ_;7}o> zN8IQSm@3a;ew~M=>EpffkdLU4g852*kC6ZgrzzPGrc@(R`LyeUF>ieNP4I?^WzOk% zf&&;q+a#_p^5dc4wFCSiLOtAIFBf#Vg!*BYjrKSq0x)8G5vGVA#I+& zpuGZV=oerGRI|c#xcQP2z^w2FkI#Lr0k_VM9KF{}NY?tb__@SeVO?p$FV~1G6 zsQIncK?XN`v4Q-`XJvYw@+p9G`HP`2!cXMAfwHO*JO)O`UWnS*+_;C6VM?S+Qs209 zQMl1A+JLJY_qkz_vo5xAki0TV`GL*V|9xNNnz)ZIZ?;p*$CXrrZ4;hvA&!cR3o#@C zp2+D!kSruzE^}n0wjl#o)zXp;WflRk^eeSB@^x% zyIz?ZE&LB4VSsoFel^{792X3Qvluwg<=s02okxPq$-w2WI6u1RBQsbe+ZY*hOg@t)ZP{y7zw`h$F(m+(V32H!-??zqk{oJndC|t zMeQhk+U%k)8hB7P#G174&?46Yz|FMJhWBzh82?da}xHb9eF(e;zl~jefsB&i3+5e|_v< zFTwS$dih4+&*Cuhu0sSZ*y2F+iG&pkqHw(Q>VMa|Z;{p)z{zl+NDe%Hz~%tZ{;nrgvY8)!z~6&Oe*?1;4pDcj zz8}CsYQie|TsgnIzHnN{cC-F~8?lp^iAb0B+&iKOK5@bD@w0%*1EWj;lV3+Q6`638 zLRdy9(z7$a@Y@p^6eTh7zlG(2D7TE-i3DW$(n5hYokP|*i?Z-D&W^AMOTUIo3(4a(K6m?PGX-D4N5`0!J&;vz`=^OB zRbq&6l1Q-%#Ue%!@yn=-)30DReeXSLgs4fL5`qQ_{GH>1trOi&rg&B*^GaBPspFKK zG|dw+HAxTqcWD!MTX2GUp1*?%umnqwY$FUQ!oWjMR}}YSln%V?<1BhvgDWfU^xPmS zo2dYTw)fY7hX!uz207x!pYnC$>#nLXccY#0(KYJ%^zynwSj6ZT%}8C`X{P3XSxNB7 z{f5+aFk^)j7lH>#^1Q~}+^kKDU3XR?q64gA%&r3oo(#iL|K65Oss{X=uL7hS8_}nX zQ=jetf*q_&hxi8dv8J)Op9&hozAr!CWI+UD|CkYcKZQb15fZ!>~zNr3x{w zY|${xRGFA;h%4mi*yTqoi!NF}OjbF3=1ne4F5#v3J^i>z$v}YSW-Y~D1XDJ&va--G zy=CzE@u&_yudBH*u!#w+V`J~6WnbrHYB-`R(I8|7<~VzWr$SOmooJ=u?WWMDrJ26I z0e(cS@OGaOKp}W{=@V48A-JtjIjw`r>g0{Zpa~Gldfdu6lW~2pSzaZBo9sI}3nNIV zsK7!#Y26kUp!AX5j%m zeM?Se3~)kc*g*Hu>@lLK`O>HOQ)7-ZD;5Wjfe7H;+of+bb_f_buWT>=F&mu^C6bsF zoubYrZudj|BS1LDrt>n$dxrhEhaNl~qW6?@hU;d?Aj|KK9~#A)(apiv+2QW{aRNW9 z$J-w4b>NXzJl?PlBaQ0(mE_%v`uD}5O?6D*H-Ll$3(j9t=ug0TpqrNGS|Ydo@zAz_ z%`+~Sa1kp9Fb6@tPEbl8fpw$7@oxeH7P^E!teY93q?yaj8N)JmtR-3H&U|M+s;yh+ z`Z);n@H&WDil#pW!3&K!{a#`KtEQJk^DpLw<tMpY*QgDK=k(-5x6+^Tv7_r8>2VD(XhPdS!_j^Fe4p0ykTK8qC~mWFR2twY4P z0oY8z6qq$>8;}trW1VFsz76`HVXZo)f^v1Qt^W$o88GG}dsvY)1Cz6mO7t5W&YPh$ zgUZYz!Vnn@kTD)XI@TyMf^k#O27#p+Qj}!h5CNais49wVLp{3-JRVzxs~A2z%}SML z#8^Ql>}ULoRQO(!DPq#N*Lq64MKExDG!;DWU5j!&6;y@- zf>aMH2hRuW>3luUvsSagub)nD7s10h0j+Cj)Ng=VPE&lZfv25x& zjXJVa^b&A2JH8jFc##^W;>M{t`iad@3bymQ5Iqx42O$LDp3&8UyN<+hVeb8^;xWJp zfs5M}Op)(Csv7xdw)NGt5Neu1tRbDR^gTwEC2|B#vY7m|s_X-a$$+3T?Qh6wh^VoG zgN5U^be(wdJWu49mqwV=+P1&veCgrI^ON7be06#C{PfM$vx~FKXRls>81deh%uz^2 zDS>Prz-#y@yA@j5<(jc8;sz8>f;-KU#R?|+#Z@I%AN23ucl6E-^!96xu?;vZQUQ>? z(Cy+}RSiToU<5a#UTVA$tu3F+)QEJ4p2oz?&S%;6wbebYIizHfYfta3X4U4)?|6|u z#SaGT-d2^Ht=eAqsV-saKRl=!Fn1`>nj$y4x{*2fq{+O2&CTEpCQGLds46oyM*lh< z0Bud5%amkux6P-H1_kUd6){%I;v%DlF+hf#b9Au6>?xSO1;y|HZ)~VoG_sm60jcQ@7t2lhI%pPa2+ zh+H5is&peTWo1PmlbfE64kil_*R3&3z5{yd9JSaEL#{hR}mV_ zAQ1a!2jH7Lta++UnV+YnL*mEFaJSbHbJu#AT89#8;pAHv*1?r>(YwSIJBz%>=$3@@ z-+yeDC0A?|trl*e%s2{~PvBMTSL{g1Trtu167>tN*mYY0JB3`aNvQ9phG}!W&fsJe zwz$B%@1qqH2nBAUHboWQCQ(oegIBZ2GYG(=G^$xK;9(X8SPQ(!qnc#~9=?qNyBb~; zQDfV{V-+)7aa9&i~Jz{6hb2`IE&J)8eOi%jZ(4_Cxonz~@ zud>E;uGm25%Qy~uhM6(OWs0Z}vCcbzEHmr6zRVMeIWBOpq8Yqjsv)Z6Q{iNVL9jN2 z-a;OaKyA4eH;aiYY>y2wFKwuE8m5BBiBQT032H4jpC{mXrj$H}wgE^ygfknD{?|Hb zgG_TMJdt!Y6mFuAD{EC$!Ako<543?bg1A`-7ZGqYw8V=zF6uz!#|o2n!+rKb8>}mr z4ca9=Arb6mAXKX{Pef%IrEqR5w6FFuh1)8v=lIjx3VFQN$$2(R<%FVCo-~70q%uil zosw{_eCgssaB6hU_)qt5eEp&|o3mYI0$Iz|g=2$3g*4dn-0osZpzmn}*YZvGZ zbBUV7i~@c7BG~F)3ZLF66j_x1b{kksy-TM;%`{Vpnxz`PWtSRMvs)%O! z0xHuhwe*O^ZW&igZx<%7gU>;Wjo2jkt};hV8)KsHS|!@=(U1^K-e))Tu1y(_Sb}zd zureO8nSR?)#v_*MS5_I1Smr%KWjtcJeppk+BlgyLVf$O?hjqLGrt}L>8IKscV4BMK zMq+v;b((xd5&QX{?;T@qnx)|LFuBlD2g{0ge3mDIb=BKMiQ-li-GKK(=Y!VWeZNbx z5l@mOo2T;aTworP_W!Yx2fRBbhqPYNv-ymtI=u3lQg5M-T#j#ohHEVODByn#revef zvj9CNWoJc^RkA0hgPJ5%Q{Ap7i8uyv@C8H+u=RQZ!S#Bmq%`tJP3@TE`Y2GnFN50Y z195S#%4}w`SOGDG5=|-a4I2enTfYZVNlFNXT;!mz6;3*(3I=T}XLrDEGZ`Q2?#;lf z!P!g)RZ^9OPS`8Nt>6izSVL}A*^{a1AR2ffJfOf!h{HWxofzwo&FvCib<#={zLF#k zphineZ5zrp8|yxRj6O4zQ7O;WG(#=7-Z5oDU?56xRSXOm!@XwJ&aM-W*3vf+8I4Bs zl(vsukvix_H%$a`5kgJowN`RYJgtRL5=ddt%)^V#)M=Iqly;R7ZV>K3h|q@W^t|YF zRvWS2ueB3r7#mYsm;&;B0uDh1R)9Wxz=eQ9*$fsxY8`+@V;a`X1N=C!0Y&U)6<~TL zSr`hT@+?&nCJr?)L{Km;f5cEY_LL(azvEXTKm^B{aHio878s#lXA96F+#h5!DIJ88 zDy9*1(Nd;*W~o95O0htp5R5`V6!4pRo5)ghtC%%CK}b*s9;!amQ7aZkBfQe~A=tGK zY)9*5zhdtpA0NHFG;*2;Lypg(168P3^+QIc8%+@wL{?#ci>fHC$A5bI^z7pD@4G|2 zSg{>TQ-U$Dxhke!6C74yS?QII*fFRgBL~ze1ZWKdhaoD>V0d}>mwx}R=-Gbwk}YIh zP9J_ZL{k+o16ZvUZiEgcC^3nI9ICXiV3uu10ja}w6oF#cKC@6Uh7K-d3_9Ct05ST7 z9SqtHSe%XLm>I4CDTbII^alHaIrCM2aQ#(O(>)1c)7ZWRF=~j2ns$A^b{wi+P6Vug z5j@Vqsu^1B(SwJkVUe2oG*)$OMXgwF!4-bu9ySo7szhNB3Tj);J&782LTX7LE|r~d zl{D87%DfGE9G15N19J>u=MWZY5NjmNiM*Dg&{iG|_@IekETz&1L(+F#4$XSXG++{S z(lFq26CjWAO-l4+ssvuFb}Q)MFbie|sn%G@P_w%s8;LQWlX!=07^54Ud?ib1I+>O6 zGGA*9A+on3^aEMgQm6%_k8w6haqct?VnNUyXuO0o1p4e6)2_J$iD$Kai)Q4hh5Lc4 z1$I)rU!X2%T5f8^3+UPtWSIeYBrVon+c8m6pCR*w84w+gfK_0*nnusjxF}_@#GzID zMGK&Ga@Hf>>N&ZiuRGDgv7mO`}Q~x<%pL z+z1W{Qk9gR73(6Z7I8&-L%g%Mb9u`X;QRroA%ecbP7GUyRmb0IQ==;V%$f1I0c_Ee z4XGqFbQI}~lu`&Xgtw#t1UkJfWo;jUCNC(@&q3cDBLWa*tHKtxXVDHf5~@Kd+cjRT zKRt)KARNgAzITBc5QZ81=YRg6t_?5(`#EV)O5_{@Sasfzkz8$Zr>P3D&0LlQM1|Zz zwDW6ij4P2k9ftzA!nM#$kT&0Eqn4S4-qDJqdu0Pw`Y<~qVm2hIN|MqWZ(#847|A3? z22oa)*FqTW%ZA8R;pQ1ay~coJI;wi#*6{ieg@#r?umQN;mT4?g)MV4F0?2{NY~UWg zLO?Ww1Y=}=cmJ)HNO!B@u^^nF9fGMwpnAhundLpq9VN+@7lnZ)0?9)p1n85a1Yyy9 z_Nt-u*>^D6DdIJOv^`p)WySIX%wf~@98=g+Hu@eowN6M+PE zLXYCaNd9z}C*>14s}n4UL*qHaRS8=Y7o7p?OEYp#I@;zl#N-3+p{nTGAwo*L95NY$ zHeQPrtbB@Ou=A)vfL!EmJ4upk%pstfgwDK>w-^)+mRRGMg@}HzOnCA66vD|0F`gIT z(FNCKOWG1@OeQHtD?mn1zzmn*T=|aP3)405CDoY{KGu7rb^aT**1L=3qUJ-PydK4zF_m3gLt`y$3i@GoI( zA@PEwvC#=WxCcf^C*r!KxY~gcVr!B$s(ALWSizvrK@r=4JFl3~t!)Fi&TODjEg0iR z81A~$Ko9p7LWdI2E_fOs&8M+>%>Lq){8bqal#Vj@43*hJgDc{O!UkZW?2NNyK1&hb zW1dIs&nFj;pT9i0_$#|r@W<)1lZ#!lU1~)+7e?yS8BY+ZQZ9rx0&2b2NL|&T<=QNW z9yBV*!+EcB*&t3MfMSH~DTtp#xeDzNJb9+jD*Fat8G|Kms^l~8c`I%aWvGZSo{+}# zX~5Tb@j?3RBo-Iui#tAcvli~rAYX0PT|!N{PIyUQjRXK!TgV4eiPbVKrviedhZ=4X zaYELvRy#XthiFlI?1shH#2EsE4xNbf>W*qbiZ<4k9q=jUygsPqwPMJNzDRD~IXqKdm|+d!~a z?N)z#T%s-h>}_7{4H^5PY($(|cpLWHm7*H+iy|gfe^m&v1DJ;rLWSHWA=HTKe{Nfi zKnxtzWxCy3m|<<1SCR}R^Q<8dIK2g?LKgFJsSig~EBH(%5_XA97nGp@td^|>Y z$*7Wr(0X+%iiVTgLTZ!Q6)%7Qeqo?o&Cvq(tzKnrM%7GV$v!))wh#)Zd$>CDLX>Jx z`-F6B3EmY#v4GlK0ao71U8fLmwSjF)koO3Wo5qMEQ(b3Luxm_M)v)3j!dh88arfYU z?SX)!iNu0%o93%90Ok3JDnB6{=f@}q1kt}4Pr%4K9*dk@b-p#w!yCsF(%}r>RS4h8 z^E23+0P9OaHGEeU%CvPe)Lc$AUrP0-##=uWFP!55Cgt~MyzrCkG_qFI(SEgLLNM|qW$1;ZfFR0 zF=V2839AFIc@h%sA0&on70$OqlHvM}gqYlpfnIFZ*f<7*FnNfQT=LS1O1^4H@?*+D z4xmNNFumCah^nP`rWqN14AvX2i3JE%a^|FXZ;BsRp(so(_!I#u)cdg^_E-QH>_X$O zI)tf1vO1w_CVP}JUoZS@z9ujXvV-#uw!GI|(ufmT<+o_X|eW-qWQ%~TqaR;An(YD(dJI5pY% zBGg%9mw|gb79eo*$)peyUcx6Nx2Dw^jI)_cHHfFV+bgob2D&>Y;RM$_O1NnGC;^TV z{?z!L)GxLGFW%gq4XdK^%-n95nO^_e@j!W3kL87&VaS0RkTO{ofX1qL;@<`5Br92m z6l$=LYzC5rzM`woUS>KU2Vp)b%M8Cj=I4SVRu?cBBdRZ%Xd!vuW!EopX{+)Q?u#&B zg&IiEL+ZuIqQ?_gDrmtxbTFwy(5T^KVCBw6qprUTFhKN?3-=e^#rmSN_dYMQ*Nsdy zlz>4D)fX#7mBj?vN9-IX`V%19OV=&n48DG@5dQ_vt8$ti4VY`v+GGj%w5wXxNV=P} zsG;R9vc7{Q5$7-N9;2sv=WD=|3i z4%u;`&jFP4otwe9JMj0DHGe#nN#c@+!_I`bGktds2kAGh;-QuzNwP(+%z7{sN^z`g z`jkJ2B7sjjM@-R3$B1?Sp0?j6GQDXG=VSY@VMZVG;uIWrJKhGwVLL-M+qh8+@jGa2 zC*8a}oM<~0zWDkN&|b4e1Bgen*$0rXK~o%b0h(>l@*R$3tM9;YTZ+^v4W`x_YP)Y@ zg9Er(k4$5yOtX%Sur)1z2#xO|TNpSiP0-eX)B!Id!kSxR_S#(bfs?dg~g+vTRX!CtOl^Xk;viPtQi(M8p)vAPlm~uLS^)Yn20nEqPtd7 zd@cJk6n`CsUb#VHeu28_!beE)s;mo&Z5~H?wk|>ad~xJ06GwpSFi9Yt-4 zS5ZCi?@RXh7C&D8H)59j*!kaw2X_w|_&@jV-T#vR{bT&-{BQKi;q<@xUcGx`u1BY| zUVOg)y?WQv&s{8_jevaGQ@1yU651%qxG@@c1a7aP;@3r%D>@6;LmoLJv`9Hsj}SPk zp60AS!Rs-xEfbyCbOD5*b1Yzf165`{rePK7Vh~A!RuK2{@&ViN1$eyVmU37tC%*;} zc1AW}JMWoyySoQzQb$IKyhbDTanPg_w%k~Z{oh~yrGKWwegky2_r(8%v|dB!0o#$Q z>1##s`k*!>vP)o>xIS?xKX*IwJ|PhLe^mlIfo~A-2I1$ZZjng|gUEFzA>8ZX*;2H2 zHiqCIdp`jtE`dMvIs?NBRaWKSP_h>)h}bccpMa0Z+5%c>Q~|-FRf)naF@c1Ve)SV{ zO{s;{`Dk>HQ&>rCPS?zkN=GGgv9!R*s5FQOeTwoQ8bV#uCUhijrgl#MTzdRTylL>lOr&5R>b_5%fqfJ+qkjPE0sy=EgKPi* diff --git a/vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz b/vendor/tabularis-explain-sqlserver-1.0.0-beta.1.tgz deleted file mode 100644 index b3dd7aea687ee6941b57fad579cd65c6ee56ad12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9771 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 F002$ARA2xA