From d3a2d38b37adda70fc131a4d03dfb97d4c94d4fd Mon Sep 17 00:00:00 2001 From: Denozordec Date: Tue, 30 Jun 2026 22:22:51 +0700 Subject: [PATCH] =?UTF-8?q?fix(ui):=20=D0=B7=D0=B0=D0=BC=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=82=D1=8C=20=D1=82=D0=B0=D0=B1=D0=BB=D0=B8=D1=86=D1=8B=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BA=D0=B0=D1=80=D1=82=D0=BE=D1=87=D0=BA=D0=B8?= =?UTF-8?q?=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D1=85=20=D0=B8=20=D1=83=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D1=88=D0=B8=D1=82=D1=8C=20=D1=84=D1=83=D0=BD=D0=BA?= =?UTF-8?q?=D1=86=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/(main)/asns/page.tsx | 81 +-- app/(main)/backups/page.tsx | 5 +- app/(main)/bgp/page.tsx | 5 +- app/(main)/certificates/page.tsx | 332 +--------- app/(main)/communities/page.tsx | 138 +--- app/(main)/dashboard/page.tsx | 144 +--- app/(main)/data-collection/page.tsx | 616 +++++------------- app/(main)/domains/page.tsx | 84 +-- app/(main)/filters/page.tsx | 342 +--------- app/(main)/firewall/page.tsx | 185 +----- app/(main)/gre/page.tsx | 177 +---- app/(main)/ip-ranges/page.tsx | 83 +-- app/(main)/ospf/page.tsx | 169 +---- app/(main)/probes/page.tsx | 151 +---- app/(main)/recursive-routes/page.tsx | 171 +---- app/(main)/route-optimizer/page.tsx | 386 +---------- app/(main)/servers/page.tsx | 5 +- app/(main)/settings/page.tsx | 168 +---- app/(main)/uptime/page.tsx | 346 +--------- app/(main)/vxlan/page.tsx | 158 +---- app/(main)/wireguard/page.tsx | 264 +------- components/data-grids/asns-data-grid.tsx | 146 +++++ components/data-grids/backups-data-grid.tsx | 69 +- .../data-grids/bgp-sessions-data-grid.tsx | 82 ++- .../certificate-expanded-detail.tsx | 61 ++ .../data-grids/certificates-data-grid.tsx | 279 ++++++++ .../data-grids/communities-data-grid.tsx | 272 ++++++++ components/data-grids/compact-data-grid.tsx | 116 ++++ .../dashboard-active-probes-data-grid.tsx | 191 ++++++ .../data-collection-scheduler-data-grid.tsx | 219 +++++++ components/data-grids/domains-data-grid.tsx | 155 +++++ components/data-grids/filters-data-grid.tsx | 457 +++++++++++++ .../data-grids/firewall-rules-data-grid.tsx | 311 +++++++++ .../firewall-scenario-rules-data-grid.tsx | 216 ++++++ components/data-grids/gre-pools-data-grid.tsx | 202 ++++++ .../data-grids/gre-tunnels-data-grid.tsx | 352 ++++++++++ components/data-grids/ip-ranges-data-grid.tsx | 157 +++++ components/data-grids/ospf-bfd-data-grid.tsx | 298 +++++++++ .../data-grids/ospf-neighbors-data-grid.tsx | 238 +++++++ .../data-grids/ospf-routes-data-grid.tsx | 171 +++++ .../data-grids/probes-schedule-data-grid.tsx | 221 +++++++ .../probes-speed-probes-data-grid.tsx | 178 +++++ .../data-grids/recursive-routes-data-grid.tsx | 328 ++++++++++ .../route-optimizer-comm-recs-data-grid.tsx | 259 ++++++++ .../route-optimizer-full-routes-data-grid.tsx | 294 +++++++++ ...route-optimizer-ospf-preview-data-grid.tsx | 150 +++++ .../route-optimizer-wan-matrix-data-grid.tsx | 183 ++++++ components/data-grids/servers-data-grid.tsx | 116 +--- .../settings-access-summary-data-grid.tsx | 168 +++++ .../data-grids/shared/data-grid-layout.ts | 28 + .../data-grids/shared/data-grid-shell.tsx | 68 ++ .../shared/data-grid-sort-header.tsx | 51 ++ components/data-grids/snapshot-data-grid.tsx | 498 ++++++++++++++ components/data-grids/subusers-data-grid.tsx | 234 +++++++ .../data-grids/uptime-resources-data-grid.tsx | 385 +++++++++++ .../uptime-speed-history-data-grid.tsx | 242 +++++++ components/data-grids/vxlan-data-grid.tsx | 289 ++++++++ components/data-grids/wireguard-data-grid.tsx | 276 ++++++++ .../data-grids/wireguard-peers-detail.tsx | 81 +++ components/data-page-card.tsx | 18 + components/data-page-toolbar.tsx | 17 +- components/data-table.tsx | 73 ++- tsconfig.tsbuildinfo | 2 +- 63 files changed, 8509 insertions(+), 3652 deletions(-) create mode 100644 components/data-grids/asns-data-grid.tsx create mode 100644 components/data-grids/certificate-expanded-detail.tsx create mode 100644 components/data-grids/certificates-data-grid.tsx create mode 100644 components/data-grids/communities-data-grid.tsx create mode 100644 components/data-grids/compact-data-grid.tsx create mode 100644 components/data-grids/dashboard-active-probes-data-grid.tsx create mode 100644 components/data-grids/data-collection-scheduler-data-grid.tsx create mode 100644 components/data-grids/domains-data-grid.tsx create mode 100644 components/data-grids/filters-data-grid.tsx create mode 100644 components/data-grids/firewall-rules-data-grid.tsx create mode 100644 components/data-grids/firewall-scenario-rules-data-grid.tsx create mode 100644 components/data-grids/gre-pools-data-grid.tsx create mode 100644 components/data-grids/gre-tunnels-data-grid.tsx create mode 100644 components/data-grids/ip-ranges-data-grid.tsx create mode 100644 components/data-grids/ospf-bfd-data-grid.tsx create mode 100644 components/data-grids/ospf-neighbors-data-grid.tsx create mode 100644 components/data-grids/ospf-routes-data-grid.tsx create mode 100644 components/data-grids/probes-schedule-data-grid.tsx create mode 100644 components/data-grids/probes-speed-probes-data-grid.tsx create mode 100644 components/data-grids/recursive-routes-data-grid.tsx create mode 100644 components/data-grids/route-optimizer-comm-recs-data-grid.tsx create mode 100644 components/data-grids/route-optimizer-full-routes-data-grid.tsx create mode 100644 components/data-grids/route-optimizer-ospf-preview-data-grid.tsx create mode 100644 components/data-grids/route-optimizer-wan-matrix-data-grid.tsx create mode 100644 components/data-grids/settings-access-summary-data-grid.tsx create mode 100644 components/data-grids/shared/data-grid-layout.ts create mode 100644 components/data-grids/shared/data-grid-shell.tsx create mode 100644 components/data-grids/shared/data-grid-sort-header.tsx create mode 100644 components/data-grids/snapshot-data-grid.tsx create mode 100644 components/data-grids/subusers-data-grid.tsx create mode 100644 components/data-grids/uptime-resources-data-grid.tsx create mode 100644 components/data-grids/uptime-speed-history-data-grid.tsx create mode 100644 components/data-grids/vxlan-data-grid.tsx create mode 100644 components/data-grids/wireguard-data-grid.tsx create mode 100644 components/data-grids/wireguard-peers-detail.tsx create mode 100644 components/data-page-card.tsx diff --git a/app/(main)/asns/page.tsx b/app/(main)/asns/page.tsx index cbb7833..cc5230d 100644 --- a/app/(main)/asns/page.tsx +++ b/app/(main)/asns/page.tsx @@ -2,11 +2,13 @@ import { useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" -import { DataTable } from "@/components/data-table" +import { DataPageCard } from "@/components/data-page-card" +import { DataPageToolbar } from "@/components/data-page-toolbar" +import { AsnsDataGrid } from "@/components/data-grids/asns-data-grid" import { FileImportDialog } from "@/components/file-import-dialog" import { asns as mockAsns } from "@/lib/data" import { Button } from "@/components/ui/button" -import { UploadIcon, DownloadIcon, PlusIcon, FilterIcon, LoaderCircleIcon } from "lucide-react" +import { UploadIcon, DownloadIcon, PlusIcon, LoaderCircleIcon } from "lucide-react" import { useDataSource } from "@/lib/data-source" import { useEvoBGP } from "@/lib/evobgp-context" import { cn } from "@/lib/utils" @@ -16,6 +18,7 @@ export default function AsnsPage() { const { mode } = useDataSource() const { enabled, snapshot, loading, error } = useEvoBGP() const [importOpen, setImportOpen] = useState(false) + const [search, setSearch] = useState("") const useEvoCatalog = mode === "live" && enabled @@ -25,6 +28,17 @@ export default function AsnsPage() { return snapshot?.asns ?? [] }, [useEvoCatalog, loading, snapshot]) + const filtered = useMemo(() => { + if (!search) return rows + const q = search.toLowerCase() + return rows.filter( + (r) => + r.asn.toLowerCase().includes(q) || + r.org.toLowerCase().includes(q) || + String(r.prefixes).includes(q), + ) + }, [rows, search]) + return (
)}
- {d.asn}, - }, - { - key: "org", - label: "Имя / организация", - render: (d) => ( - - {d.org} - - ), - }, - { - key: "prefixes", - label: "Префиксов", - render: (d) => {d.prefixes.toLocaleString("ru")}, - }, - { - key: "filter", - label: "Фильтр", - render: (d) => ( - - {d.filter} - - ), - }, - { - key: "updated", - label: "Обновлён", - render: (d) => {d.updated}, - }, - { - key: "enabled", - label: "Статус", - render: (d) => ( - - {d.enabled ? "Активен" : "Отключён"} - - ), - }, - ]} - /> + + + + + - + )} {/* ── Настройки ────────────────────────────────────────────────── */} diff --git a/app/(main)/bgp/page.tsx b/app/(main)/bgp/page.tsx index c3c56fe..3423524 100644 --- a/app/(main)/bgp/page.tsx +++ b/app/(main)/bgp/page.tsx @@ -10,6 +10,7 @@ import { BGP_FILTER_FIELDS } from "@/lib/data-filters/bgp-filter-fields" import type { BgpSessionRow, BgpState, BgpType } from "@/lib/bgp/types" import { BGP_AS_NAMES } from "@/lib/bgp/types" import { Card, CardContent } from "@/components/ui/card" +import { DataPageCard } from "@/components/data-page-card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" @@ -292,7 +293,7 @@ function SessionsTab({ sessions }: { sessions: BgpSession[] }) { return (
- + - +
) } diff --git a/app/(main)/certificates/page.tsx b/app/(main)/certificates/page.tsx index 108c0fe..13d9415 100644 --- a/app/(main)/certificates/page.tsx +++ b/app/(main)/certificates/page.tsx @@ -1,14 +1,15 @@ "use client" -import { useCallback, useEffect, useMemo, useState, type ReactNode } from "react" +import { useCallback, useEffect, useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" import { FormField, FormToggle, SectionTitle } from "@/components/form-kit" import { FileImportDialog } from "@/components/file-import-dialog" import { routerCertificates, servers as mockServers } from "@/lib/data" import type { CertStatus, Server } from "@/lib/data" import type { CertificateDto } from "@mmapp/contracts/certificates" -import { Flag } from "@/components/flag" import { Card, CardContent } from "@/components/ui/card" +import { DataPageCard } from "@/components/data-page-card" +import { CertificatesDataGrid } from "@/components/data-grids/certificates-data-grid" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { @@ -37,17 +38,10 @@ import { toast } from "sonner" import { SearchIcon, ShieldCheckIcon, - ShieldAlertIcon, - ShieldOffIcon, BadgeCheckIcon, AlertTriangleIcon, AlertCircleIcon, - CalendarIcon, - KeyRoundIcon, - ServerIcon, PlusIcon, - ChevronDownIcon, - ChevronRightIcon, RefreshCwIcon, UploadIcon, } from "lucide-react" @@ -63,50 +57,6 @@ import { StepperTrigger, } from "@/components/reui/stepper" -const STATUS_CONFIG: Record< - CertStatus, - { - label: string - icon: ReactNode - badge: string - row: string - } -> = { - valid: { - label: "Действителен", - icon: , - badge: "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-500/20", - row: "", - }, - expired: { - label: "Истёк", - icon: , - badge: "bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20", - row: "bg-red-500/5", - }, - revoked: { - label: "Отозван", - icon: , - badge: "bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20", - row: "bg-amber-500/5", - }, -} - -const CERT_TABLE_GRID_CLASS = - "grid grid-cols-[1.25rem_minmax(0,1.35fr)_minmax(0,0.85fr)_minmax(0,1fr)_9.5rem_minmax(0,8.5rem)_6rem] gap-3" - -function daysLeftColor(days: number): string { - if (days < 0) return "text-red-500" - if (days <= 7) return "text-red-500" - if (days <= 30) return "text-amber-500" - return "text-emerald-600 dark:text-emerald-400" -} - -function daysLeftBar(days: number, total = 365): number { - if (days <= 0) return 0 - return Math.min(100, Math.round((days / total) * 100)) -} - function mockToDto(cert: (typeof routerCertificates)[number]): CertificateDto { return { id: cert.id, @@ -125,203 +75,6 @@ function mockToDto(cert: (typeof routerCertificates)[number]): CertificateDto { } } -function CertPartDaysBar({ cert, pct }: { cert: CertificateDto; pct: number }) { - return ( -
- ) -} - -function CertPartDays({ cert, pct }: { cert: CertificateDto; pct: number }) { - return ( - <> -
- - {cert.daysLeft < 0 ? `Истёк ${-cert.daysLeft}д назад` : `${cert.daysLeft}д осталось`} - - {cert.validUntil} -
-
- -
- - ) -} - -function CertPartDetailDates({ cert }: { cert: CertificateDto }) { - return ( -
-

Действителен с

-

{cert.validFrom}

-
- ) -} - -function CertPartDetailSans({ cert }: { cert: CertificateDto }) { - return ( -
-

SAN / Alt Names

-
- {cert.sans.length > 0 - ? cert.sans.map((s) => ( - - {s} - - )) - : } -
-
- ) -} - -function CertPartDetailTrusted({ cert }: { cert: CertificateDto }) { - return ( -
-

Trusted

-

- {cert.trusted ? "Да (доверенный)" : "Нет (не доверенный)"} -

-
- ) -} - -function CertListRow({ - cert, - cfg, - pct, - server, - expanded, - onToggle, -}: { - cert: CertificateDto - cfg: (typeof STATUS_CONFIG)[CertStatus] - pct: number - server?: Server - expanded: boolean - onToggle: () => void -}) { - return ( -
-
- -
-
- {cfg.icon} - - {cert.name} - -
-

- {cert.commonName} -

-
-
- {server - ? ( - <> - - {server.name} - - ) - : ( - <> - - {cert.serverName ?? cert.serverId} - - )} -
-

- {cert.issuedBy} -

-
- -
-
- {cert.usage.map((u) => ( - - {u} - - ))} -
- - {cfg.label} - -
- {expanded && ( -
-
-

Key size

-

{cert.keySize} bit

-
- - - -
- )} -
- ) -} - -function CertRow({ - cert, - server, - expanded, - onToggle, -}: { - cert: CertificateDto - server?: Server - expanded: boolean - onToggle: () => void -}) { - const cfg = STATUS_CONFIG[cert.status] - const pct = daysLeftBar(cert.daysLeft) - - return ( - - ) -} - function CertPartAlertExpired({ expired }: { expired: CertificateDto[] }) { return (
@@ -536,43 +289,6 @@ function CertPartTableToolbar({ ) } -function CertPartTableHeaderDates() { - return ( -
- - Срок -
- ) -} - -function CertPartTableHeaderUsage() { - return ( -
- - Использование -
- ) -} - -function CertPartTableHeader() { - return ( -
- - Имя / CN - Сервер - Выпущен - - - Статус -
- ) -} - function CertPartReference() { return ( @@ -757,7 +473,6 @@ export default function CertificatesPage() { const [search, setSearch] = useState("") const [statusFilter, setStatusFilter] = useState("all") - const [expandedIds, setExpandedIds] = useState>(new Set()) const [certificates, setCertificates] = useState([]) const [loadState, setLoadState] = useState<"idle" | "loading" | "error">("idle") const [loadError, setLoadError] = useState(null) @@ -871,15 +586,6 @@ export default function CertificatesPage() { }) }, [displayCerts, search, statusFilter]) - function toggleExpand(id: string) { - setExpandedIds((prev) => { - const next = new Set(prev) - if (next.has(id)) next.delete(id) - else next.add(id) - return next - }) - } - async function handleRefresh() { if (!liveReady) return try { @@ -1040,7 +746,7 @@ export default function CertificatesPage() { /> )} - + -
-
- - {prefsHydrated && isLive && loadState === "loading" && displayCerts.length === 0 ? ( -
Загрузка сертификатов…
- ) : filtered.length === 0 ? ( -
- -

Сертификаты не найдены

-
- ) : ( - filtered.map((cert) => ( - toggleExpand(cert.id)} - /> - )) - )} -
-
-
+ +
diff --git a/app/(main)/communities/page.tsx b/app/(main)/communities/page.tsx index 51a8fc3..5ca0e30 100644 --- a/app/(main)/communities/page.tsx +++ b/app/(main)/communities/page.tsx @@ -2,14 +2,22 @@ import { useState, useMemo, useEffect } from "react" import { PageHeader } from "@/components/page-header" +import { DataPageCard } from "@/components/data-page-card" +import { + CommunitiesDataGrid, + type CommunityRow, + TYPE_LABELS, + ACTION_LABELS, + ACTION_COLOR, +} from "@/components/data-grids/communities-data-grid" import { Card, CardContent, CardHeader, CardTitle, CardDescription, } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { - PlusIcon, SearchIcon, TagIcon, ServerIcon, FilterIcon, - ChevronRightIcon, CopyIcon, CheckIcon, TrashIcon, PencilIcon, + PlusIcon, SearchIcon, TagIcon, FilterIcon, + CopyIcon, CheckIcon, TrashIcon, PencilIcon, LoaderCircleIcon, } from "lucide-react" import { cn } from "@/lib/utils" @@ -19,21 +27,8 @@ import { useEvoBGP } from "@/lib/evobgp-context" // ─── types ──────────────────────────────────────────────────────────────────── -type CommType = "standard" | "no-export" | "no-advertise" | "local-as" | "custom" - -interface Community { - id: string - value: string // e.g. "65001:100" - name: string - description: string - type: CommType - filterIds: string[] // which filters use this community - serverCount: number - prefixCount: number - action: "permit" | "deny" | "local-pref" | "metric" - actionValue?: number // e.g. local-pref value - enabled: boolean -} +type Community = CommunityRow +type CommType = CommunityRow["type"] // ─── mock data ──────────────────────────────────────────────────────────────── @@ -100,28 +95,6 @@ const COMMUNITIES: Community[] = [ }, ] -const TYPE_LABELS: Record = { - "standard": "Стандартный", - "no-export": "No-export", - "no-advertise":"No-advertise", - "local-as": "Local-AS", - "custom": "Кастомный", -} - -const ACTION_LABELS: Record = { - "permit": "Permit", - "deny": "Deny", - "local-pref": "Local-pref", - "metric": "MED/Metric", -} - -const ACTION_COLOR: Record = { - "permit": "text-emerald-500", - "deny": "text-red-500", - "local-pref": "text-blue-500", - "metric": "text-amber-500", -} - // ─── page ───────────────────────────────────────────────────────────────────── export default function CommunitiesPage() { @@ -225,84 +198,15 @@ export default function CommunitiesPage() {
{/* list */} - -
- - - - - - - - - - - - - {filtered.map(c => ( - setSelected(c)} - className={cn( - "border-b last:border-0 cursor-pointer hover:bg-muted/40 transition-colors", - selected?.id === c.id && "bg-primary/5", - !c.enabled && "opacity-50", - )} - > - - - - - - - - - ))} - -
CommunityИмя / описаниеТипДействиеМаршрутовСерверов -
-
- - - {c.value} - - -
-
-

{c.name}

-

{c.description}

-
- {TYPE_LABELS[c.type]} - - - {ACTION_LABELS[c.action]}{c.actionValue !== undefined ? ` ${c.actionValue}` : ""} - - - {c.prefixCount.toLocaleString("ru-RU")} - -
- - {c.serverCount.toLocaleString("ru-RU")} -
-
- -
- {filtered.length === 0 && ( -
- -

Ничего не найдено

-
- )} -
-
+ + + {/* ── detail panel ── */} diff --git a/app/(main)/dashboard/page.tsx b/app/(main)/dashboard/page.tsx index c128b61..d8dd0cc 100644 --- a/app/(main)/dashboard/page.tsx +++ b/app/(main)/dashboard/page.tsx @@ -22,8 +22,10 @@ import type { PingProbe, Server, ServerStatus, ServerType } from "@/lib/data" import type { GreTunnel } from "@/lib/data" import { useDataSource } from "@/lib/data-source" import { Flag } from "@/components/flag" -import { AlertCircleIcon, AlertTriangleIcon, InfoIcon, FilterIcon, DownloadIcon } from "lucide-react" +import { AlertCircleIcon, AlertTriangleIcon, InfoIcon, DownloadIcon } from "lucide-react" import { Button, buttonVariants } from "@/components/ui/button" +import { DataPageCard } from "@/components/data-page-card" +import { DashboardActiveProbesDataGrid } from "@/components/data-grids/dashboard-active-probes-data-grid" import { cn } from "@/lib/utils" import { requestJson } from "@/shared/api/http-client" import { buildLatencySeriesByProbeSource } from "@/lib/dashboard-latency" @@ -72,11 +74,6 @@ function StatCard({ ) } -function formatLossPct(loss: number): string { - if (!Number.isFinite(loss)) return "—" - return Number.isInteger(loss) ? `${loss}%` : `${loss.toFixed(1)}%` -} - function fmtIntRu(n: number): string { return n.toLocaleString("ru-RU") } @@ -114,22 +111,6 @@ function readMockDashboardStarIds(): Set { } } -/** Совпадает с эталоном uptime / servers */ -function TypeChip({ type }: { type: ServerType }) { - return ( - - {type === "jump-host" ? "JH" : type === "home-router" ? "HR" : "EN"} - - ) -} - interface BackendServerRow { id: number name: string @@ -241,52 +222,6 @@ function mapBackendToServer(s: BackendServerRow): Server { } } -function ProbeSourceCell({ probe, catalog }: { probe: PingProbe; catalog: Server[] }) { - const srv = catalog.find(s => s.id === probe.srcServerId) - const iface = (probe.srcInterface ?? "").trim() || "auto" - - if (!srv) { - return ( -
- - - -
-

- Сервер {probe.srcServerId} -

-

- {iface} -

-
-
- ) - } - - return ( -
- - - -
- -
-
- {srv.name} - -
-

- {iface} - {srv.site && srv.site !== "—" && ( - · {srv.site} - )} -

-
-
-
- ) -} - export default function DashboardPage() { const pathname = usePathname() const { mode, backendUrl, prefsHydrated } = useDataSource() @@ -1020,67 +955,18 @@ export default function DashboardPage() { -
- - - - - - - - - - - - - - - {isLive && probesLoading && liveProbes === null && ( - - - - )} - {!(isLive && probesLoading && liveProbes === null) && activeProbesTable.map((p) => { - const sparkColor = p.status === "down" ? "hsl(0 84% 60%)" : p.status === "warn" ? "hsl(32 94% 44%)" : "hsl(142 76% 36%)" - return ( - - - - - - - - - - - ) - })} - {!(isLive && probesLoading && liveProbes === null) && activeProbesTable.length === 0 && ( - - - - )} - -
ИсточникПробаЦельФильтрRTTПотери60сСтатус
-
-
- - {p.name}{p.target} - - {p.filter} - - {p.rtt == null ? "—" : `${p.rtt} мс`} 5 ? "text-red-500" : p.loss > 0 ? "text-amber-500" : "text-muted-foreground"}`}> - {formatLossPct(p.loss)} - - - - -
- {isLive && probesError - ? "Нет данных о пробах. Проверьте сборщик uptime и настройки проб на странице мониторинга." - : "Нет проб с звездой на дашборде. Включите пробу и отметьте ★ в разделе «Мониторинг»."} -
-
+ + +
diff --git a/app/(main)/data-collection/page.tsx b/app/(main)/data-collection/page.tsx index f414bac..7d4ce02 100644 --- a/app/(main)/data-collection/page.tsx +++ b/app/(main)/data-collection/page.tsx @@ -28,7 +28,6 @@ import { import { requestJson, ApiClientError } from "@/shared/api/http-client" import { parseSchedulerRunSnapshot, - type AlertEngineRuleDiagSnapshot, type AlertEngineRunSnapshot, type GreBgpSnapshotRunSnapshot, type InternetPathRunSnapshot, @@ -41,6 +40,19 @@ import { type SpeedScheduledRunSnapshot, type TrafficRunSnapshot, } from "@/lib/scheduler-run-snapshot" +import { + AlertEngineRuleDiagGrid, + PingSnapshotGrid, + ResourcesSnapshotGrid, + ServersRestPingSnapshotGrid, + SpeedSnapshotGrid, + TrafficSnapshotGrid, +} from "@/components/data-grids/snapshot-data-grid" +import { + DataCollectionSchedulerDataGrid, + type SchedulerJobGridRow, +} from "@/components/data-grids/data-collection-scheduler-data-grid" +import { DataPageCard } from "@/components/data-page-card" import { cn } from "@/lib/utils" import { AlertCircleIcon, @@ -86,16 +98,6 @@ function fmtMs(ms: number): string { return s < 60 ? `${s.toFixed(1)} с` : `${Math.floor(s / 60)} м ${Math.round(s % 60)} с` } -function fmtUptimeSec(sec: number): string { - if (sec <= 0) return "—" - const d = Math.floor(sec / 86400) - const h = Math.floor((sec % 86400) / 3600) - const m = Math.floor((sec % 3600) / 60) - if (d > 0) return `${d}д ${h}ч` - if (h > 0) return `${h}ч ${m}м` - return `${m}м` -} - function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) { if (snap.job === "traffic") { const t = snap as TrafficRunSnapshot @@ -113,44 +115,9 @@ function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) {

Сэмплы на момент {new Date(t.sampledAt).toLocaleString("ru-RU")}

-
- - - - - - - - - - - - - - {t.servers.map((s) => ( - - - - - - - - - - ))} - -
СерверХостРезультатIFΣ RXΣ TXОшибка
{s.name}{s.host} - {s.ok ? ( - - ok - - ) : ( - - ошибка - - )} - {s.interfaces ?? "—"}{s.sumRxMbps != null ? `${s.sumRxMbps} Мбит/с` : "—"}{s.sumTxMbps != null ? `${s.sumTxMbps} Мбит/с` : "—"}{s.error ?? "—"}
-
+ + + ) } @@ -170,59 +137,9 @@ function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) {

Сэмплы на {new Date(u.sampledAt).toLocaleString("ru-RU")}

-
- - - - - - - - - - - - - - - - {u.servers.map((s) => ( - - - - - - - - - - - - ))} - -
СерверСтатусCPU %Память% RAMДиск своб.UptimeПлата / ROSОшибка
- {s.name} - {s.host} - - - {s.status} - - {s.cpuLoadPct ?? "—"} - {s.memUsedMb != null && s.memTotalMb != null ? `${s.memUsedMb} / ${s.memTotalMb} МБ` : "—"} - {s.memUsedPct != null ? `${s.memUsedPct}%` : "—"} - {s.diskFreeMb != null && s.diskTotalMb != null ? `${s.diskFreeMb} / ${s.diskTotalMb} МБ` : "—"} - {s.uptimeSeconds != null ? fmtUptimeSec(s.uptimeSeconds) : "—"} - {s.boardName || "—"} - {s.rosVersion || ""} - {s.error ?? "—"}
-
+ + + ) } @@ -243,42 +160,9 @@ function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) { GET /system/identity на{" "} {new Date(s.sampledAt).toLocaleString("ru-RU")}

-
- - - - - - - - - - - - {s.servers.map((row) => ( - - - - - - - - ))} - -
СерверХостРезультатRTT RESTОшибка
{row.name}{row.host} - {row.ok ? ( - - ok - - ) : ( - - недоступен - - )} - - {row.latencyMs != null ? `${row.latencyMs} мс` : "—"} - {row.error ?? "—"}
-
+ + + ) } @@ -301,41 +185,9 @@ function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) {

Сэмплы на {new Date(p.sampledAt).toLocaleString("ru-RU")} — только пробы, для которых записан замер в этом тике

-
- - - - - - - - - - - - - - - {p.probes.map((x) => ( - - - - - - - - - - - ))} - -
ПробаЦельИсточникIFRTTLossСтатусОшибка
- {x.name} - {x.probeId} - {x.target}{x.srcServerName}{x.srcInterface || "—"}{x.rttMs != null ? `${x.rttMs} мс` : "—"}{x.lossPct}% - {x.status} - {x.error ?? "—"}
-
+ + + ) } @@ -346,56 +198,9 @@ function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) {

Прогоны speed на {new Date(s.sampledAt).toLocaleString("ru-RU")} — по очереди для каждой включённой пробы

-
- - - - - - - - - - - - - - - - - {s.runs.map((x) => ( - - - - - - - - - - - - - ))} - -
ПробаМаршрутИнтерфейсыПротоколTXRXPing RTTLossРезультатОшибка
{x.probeId} - {x.srcServerName} {x.dstServerName} - - {x.srcInterface || "—"} - {x.dstInterface || "—"} - {x.protocol} / {x.direction} / {x.durationSec}s{x.txAvgMbps != null ? `${Number(x.txAvgMbps).toFixed(1)}` : "—"}{x.rxAvgMbps != null ? `${Number(x.rxAvgMbps).toFixed(1)}` : "—"}{x.pingRttMs != null ? `${x.pingRttMs} мс` : "—"}{x.pingLossPct != null ? `${x.pingLossPct}%` : "—"} - {x.ok ? ( - ok - ) : ( - ошибка - )} - - {x.error ?? ""} - {x.pingError ? ( - ping: {x.pingError} - ) : null} -
-
+ + + ) } @@ -535,36 +340,6 @@ function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) { } if (snap.job === "alert_engine") { const a = snap as AlertEngineRunSnapshot - const transitionRu = (t: AlertEngineRuleDiagSnapshot["hitTransition"]) => { - switch (t) { - case "problem": - return "проблема" - case "recovery": - return "восстановление" - case "neutral": - return "нейтрально" - default: - return "—" - } - } - const blockedRu = (b: AlertEngineRuleDiagSnapshot["blocked"]) => { - switch (b) { - case "no_hit": - return "условие не выполнено" - case "stability": - return "стабильность (confirmStabilitySec)" - case "cooldown": - return "cooldown" - case "no_telegram": - return "нет Telegram" - case "dedupe_positive": - return "дедуп восстановления" - case "in_group": - return "в группе (отдельно не шлём)" - default: - return "—" - } - } return (

@@ -605,40 +380,9 @@ function SnapshotTables({ snap }: { snap: SchedulerRunSnapshot }) { {a.ruleDiag && a.ruleDiag.length > 0 ? (

По правилам (почему не ушло в Telegram)

-
- - - - - - - - - - - - - - - {a.ruleDiag.map((d) => ( - - - - - - - - - - - ))} - -
ID правилаСработалоТип срабатыванияСтабильностьКулдаунTelegramСообщениеПричина блока
- {d.ruleId} - {d.evalHit ? "Да" : "Нет"}{transitionRu(d.hitTransition)}{d.stabilityOk ? "Да" : "Нет"}{d.cooldownOk ? "Да" : "Нет"}{d.telegramOk ? "Да" : "Нет"} - {d.hitMessage ?? "—"} - {blockedRu(d.blocked)}
-
+ + +
) : null}
@@ -1057,6 +801,130 @@ export default function DataCollectionPage() { } } + const schedulerGridRows = useMemo(() => { + return SCHEDULER_JOB_KEYS.map((jobKey) => { + const j = schedulerJobsByKey[jobKey] + const fixedSchedule = jobKey === "gre_bgp" || jobKey === "alert_engine" || jobKey === "backups" + const enabled = fixedSchedule + ? Boolean(j?.enabled ?? true) + : jobKey === "traffic" + ? draftTrafficEnabled + : jobKey === "servers_rest_ping" + ? draftServersApiEnabled + : jobKey === "uptime_resources" + ? draftResourcesEnabled + : jobKey === "uptime_ping" + ? draftPingEnabled + : jobKey === "uptime_speed" + ? draftSpeedEnabled + : jobKey === "certificates_renew" + ? draftCertRenewEnabled + : draftInternetPathEnabled + const intervalValue = fixedSchedule + ? String(j?.intervalSec ?? (jobKey === "gre_bgp" ? 30 : 20)) + : jobKey === "traffic" + ? trafficIntervalDraft + : jobKey === "servers_rest_ping" + ? serversApiIntervalDraft + : jobKey === "uptime_resources" + ? uptimeResourceIntervalDraft + : jobKey === "uptime_ping" + ? uptimeIntervalDraft + : jobKey === "uptime_speed" + ? uptimeSpeedIntervalDraft + : jobKey === "certificates_renew" + ? certRenewIntervalDraft + : internetPathIntervalDraft + const onIntervalChange = fixedSchedule + ? () => {} + : jobKey === "traffic" + ? setTrafficIntervalDraft + : jobKey === "servers_rest_ping" + ? setServersApiIntervalDraft + : jobKey === "uptime_resources" + ? setUptimeResourceIntervalDraft + : jobKey === "uptime_ping" + ? setUptimeIntervalDraft + : jobKey === "uptime_speed" + ? setUptimeSpeedIntervalDraft + : jobKey === "certificates_renew" + ? setCertRenewIntervalDraft + : setInternetPathIntervalDraft + const defaultInterval = fixedSchedule + ? Number(j?.intervalSec ?? (jobKey === "gre_bgp" ? 30 : 20)) + : jobKey === "traffic" + ? 30 + : jobKey === "servers_rest_ping" + ? 120 + : jobKey === "uptime_resources" + ? 300 + : jobKey === "uptime_ping" + ? 15 + : jobKey === "uptime_speed" + ? 60 + : jobKey === "certificates_renew" + ? 21600 + : 300 + + return { + id: jobKey, + jobKey, + label: SCHEDULER_JOB_LABELS[jobKey] ?? jobKey, + description: SCHEDULER_JOB_DESCRIPTIONS[jobKey], + fixedSchedule, + enabled, + intervalValue, + intervalReadOnly: fixedSchedule, + intervalDisabled: !enabled && !fixedSchedule, + defaultInterval, + job: j, + onEnabledChange: fixedSchedule + ? undefined + : (nextEnabled) => { + void handleJobEnabledChange(jobKey, nextEnabled) + }, + onIntervalChange, + onRunNow: async () => { + setRunNowJobKey(jobKey) + setCollectorError(null) + try { + await apiFetch(`/api/scheduler/jobs/${encodeURIComponent(jobKey)}/run-now`, { + method: "POST", + }) + await loadCollectors() + } catch (e) { + setCollectorError(e instanceof Error ? e.message : "Ошибка запуска") + } finally { + setRunNowJobKey(null) + } + }, + runNowLoading: runNowJobKey === jobKey, + saveBusy: schedulerSaveBusy, + } + }) + }, [ + apiFetch, + certRenewIntervalDraft, + draftCertRenewEnabled, + draftInternetPathEnabled, + draftPingEnabled, + draftResourcesEnabled, + draftServersApiEnabled, + draftSpeedEnabled, + draftTrafficEnabled, + handleJobEnabledChange, + internetPathIntervalDraft, + loadCollectors, + runNowJobKey, + schedulerJobsByKey, + schedulerSaveBusy, + serversApiIntervalDraft, + trafficIntervalDraft, + uptimeIntervalDraft, + uptimeResourceIntervalDraft, + uptimeSpeedIntervalDraft, + ]) + const enabledJobsCount = useMemo(() => { const jobs = uptimeCollector?.scheduler?.jobs if (jobs?.length) return jobs.filter((job) => job.enabled).length @@ -1223,179 +1091,7 @@ export default function DataCollectionPage() { -
- - - - - - - - - - - - - {SCHEDULER_JOB_KEYS.map((jobKey) => { - const j = schedulerJobsByKey[jobKey] - const fixedSchedule = jobKey === "gre_bgp" || jobKey === "alert_engine" || jobKey === "backups" - const en = fixedSchedule - ? Boolean(j?.enabled ?? true) - : jobKey === "traffic" - ? draftTrafficEnabled - : jobKey === "servers_rest_ping" - ? draftServersApiEnabled - : jobKey === "uptime_resources" - ? draftResourcesEnabled - : jobKey === "uptime_ping" - ? draftPingEnabled - : jobKey === "uptime_speed" - ? draftSpeedEnabled - : jobKey === "certificates_renew" - ? draftCertRenewEnabled - : draftInternetPathEnabled - const iv = fixedSchedule - ? String(j?.intervalSec ?? (jobKey === "gre_bgp" ? 30 : 20)) - : jobKey === "traffic" - ? trafficIntervalDraft - : jobKey === "servers_rest_ping" - ? serversApiIntervalDraft - : jobKey === "uptime_resources" - ? uptimeResourceIntervalDraft - : jobKey === "uptime_ping" - ? uptimeIntervalDraft - : jobKey === "uptime_speed" - ? uptimeSpeedIntervalDraft - : jobKey === "certificates_renew" - ? certRenewIntervalDraft - : internetPathIntervalDraft - const setIv = fixedSchedule - ? () => {} - : jobKey === "traffic" - ? setTrafficIntervalDraft - : jobKey === "servers_rest_ping" - ? setServersApiIntervalDraft - : jobKey === "uptime_resources" - ? setUptimeResourceIntervalDraft - : jobKey === "uptime_ping" - ? setUptimeIntervalDraft - : jobKey === "uptime_speed" - ? setUptimeSpeedIntervalDraft - : jobKey === "certificates_renew" - ? setCertRenewIntervalDraft - : setInternetPathIntervalDraft - const defSec = fixedSchedule - ? Number(j?.intervalSec ?? (jobKey === "gre_bgp" ? 30 : 20)) - : jobKey === "traffic" - ? 30 - : jobKey === "servers_rest_ping" - ? 120 - : jobKey === "uptime_resources" - ? 300 - : jobKey === "uptime_ping" - ? 15 - : jobKey === "uptime_speed" - ? 60 - : jobKey === "certificates_renew" - ? 21600 - : 300 - return ( - - - - - - - - - ) - })} - -
ЗадачаВклИнтервал (с)Последний прогонСтатусСейчас
- {SCHEDULER_JOB_LABELS[jobKey] ?? jobKey} -

- {SCHEDULER_JOB_DESCRIPTIONS[jobKey]} -

-

{jobKey}

-
- - { - if (fixedSchedule || schedulerSaveBusy) return - void handleJobEnabledChange(jobKey, v) - }} - /> - - - setIv(e.target.value)} - className="h-8 text-sm tabular-nums" - inputMode="numeric" - readOnly={fixedSchedule} - disabled={!en && !fixedSchedule} - placeholder={String(defSec)} - /> - - {j?.lastFinishedAt ? new Date(j.lastFinishedAt).toLocaleString("ru-RU") : "—"} - {j?.lastDurationMs != null && ( - {j.lastDurationMs} мс - )} - -
- {j?.running ? ( - - выполняется - - ) : null} - {j?.lastStatus ? ( - - {j.lastStatus} - - ) : null} - {j?.lastError ? ( - - {j.lastError} - - ) : null} -
-
- -
-
+
diff --git a/app/(main)/domains/page.tsx b/app/(main)/domains/page.tsx index 3dfbdf3..f41b7c6 100644 --- a/app/(main)/domains/page.tsx +++ b/app/(main)/domains/page.tsx @@ -2,11 +2,13 @@ import { useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" -import { DataTable } from "@/components/data-table" +import { DataPageCard } from "@/components/data-page-card" +import { DataPageToolbar } from "@/components/data-page-toolbar" +import { DomainsDataGrid } from "@/components/data-grids/domains-data-grid" import { FileImportDialog } from "@/components/file-import-dialog" import { domains as mockDomains } from "@/lib/data" import { Button } from "@/components/ui/button" -import { UploadIcon, DownloadIcon, PlusIcon, FilterIcon, LoaderCircleIcon } from "lucide-react" +import { UploadIcon, DownloadIcon, PlusIcon, LoaderCircleIcon } from "lucide-react" import { useDataSource } from "@/lib/data-source" import { useEvoBGP } from "@/lib/evobgp-context" import { cn } from "@/lib/utils" @@ -16,6 +18,7 @@ export default function DomainsPage() { const { mode } = useDataSource() const { enabled, snapshot, loading, error } = useEvoBGP() const [importOpen, setImportOpen] = useState(false) + const [search, setSearch] = useState("") const useEvoCatalog = mode === "live" && enabled @@ -25,6 +28,17 @@ export default function DomainsPage() { return snapshot?.domains ?? [] }, [useEvoCatalog, loading, snapshot]) + const filtered = useMemo(() => { + if (!search) return rows + const q = search.toLowerCase() + return rows.filter( + (r) => + r.domain.toLowerCase().includes(q) || + r.asn.toLowerCase().includes(q) || + r.filter.toLowerCase().includes(q), + ) + }, [rows, search]) + return (
)}
- {d.domain}, - }, - { - key: "resolvedIp", - label: "Resolved IP", - render: (d) => {d.resolvedIp}, - }, - { - key: "asn", - label: "ASN", - render: (d) => {d.asn}, - }, - { - key: "purpose", - label: "Назначение", - render: (d) => ( - {d.purpose} - ), - }, - { - key: "filter", - label: "Фильтр", - render: (d) => ( - - {d.filter} - - ), - }, - { - key: "updated", - label: "Обновлён", - render: (d) => {d.updated}, - }, - { - key: "enabled", - label: "Статус", - render: (d) => ( - - {d.enabled ? "Активен" : "Отключён"} - - ), - }, - ]} - /> + + + +
- } - const icon = - status === "synced" - ? - : status === "drift" - ? - : status === "missing" - ? - : - const title = - status === "synced" - ? "Совпадает с цепочкой bgp-in на MikroTik" - : status === "drift" - ? "В БД и на роутере разное действие (gateway, blackhole или out-interface)" - : status === "missing" - ? "Эта community не найдена в правиле bgp-in на роутере" - : "Не проверено — нажмите «Сверить с роутером»" - return ( - - - {icon} - - - {title} - - - ) -} - function newId() { return `r${Date.now()}-${Math.random().toString(36).slice(2, 6)}` } function innerIpToGateway(ip: string) { return ip.split("/")[0] } @@ -138,16 +107,6 @@ function dedupeRecursiveRoutesByDstAddress(routes: RecursiveRouteLite[]): Recurs }) } -interface RecursiveRouteLite { - id: string - dstAddress: string - gateway: string - distance: number - routingTable: string - comment: string - disabled: boolean -} - const COMMUNITY_NAMES: Record = { "65001:100": "youtube-bypass", "65001:200": "streaming-eu", @@ -479,171 +438,6 @@ function CommunityInput({ ) } -// ── filter rule row ──────────────────────────────────────────────────────────── - -function FilterRow({ - rule, index, isLast, onEdit, onDelete, onMoveUp, onMoveDown, tunnelsList, serversList, - communityNameMap, - recursiveRoutes, - routerSyncStatus, -}: { - rule: FilterRule; index: number; isLast: boolean - onEdit: () => void; onDelete: () => void; onMoveUp: () => void; onMoveDown: () => void - tunnelsList: GreTunnel[] - serversList: Server[] - communityNameMap: Record - recursiveRoutes: RecursiveRouteLite[] - routerSyncStatus?: FilterRouterSyncStatus | null | "skip" -}) { - const [confirmDel, setConfirmDel] = useState(false) - const isBlackhole = rule.action === "blackhole" - const isRecRef = !isBlackhole && isRecursiveGatewayRef(rule.gatewayTunnelId) - const recRowByRef = isRecRef ? recursiveRoutes.find(r => r.id === rule.gatewayTunnelId.slice(4)) : undefined - const recRowByHop = - !isBlackhole && !(rule.gatewayTunnelId ?? "").trim() && rule.gateway.trim() - ? pickRecursiveRouteByGatewayHop(recursiveRoutes, rule.gateway) - : undefined - const recRow = recRowByRef ?? recRowByHop - const treatAsRecursive = - !isBlackhole && (isRecRef || !!recRowByHop) - const tunnel = !isBlackhole && !treatAsRecursive - ? tunnelsList.find(t => t.id === rule.gatewayTunnelId) - : undefined - const remoteSrv = tunnel ? serversList.find(s => s.host === tunnel.remoteAddress) : undefined - const communityName = communityNameMap[rule.community] ?? rule.communityName - - return ( -
- {/* priority */} -
- {isLast - ? - : {index + 1} - } -
- - {/* reorder */} -
- - -
- - {/* MikroTik sync marker */} -
- -
- - {/* community */} -
-
- - {rule.community} - - {isBlackhole && ( - - ⊘ blackhole - - )} -
- {communityName && ( -

{communityName}

- )} -
- - {/* gateway / tunnel — or blackhole target */} -
- {isBlackhole ? ( -
- - type=blackhole -
- ) : ( - <> -
- - {treatAsRecursive ? ( - <> - - - {recRow ? gatewayFromRecursiveDst(recRow.dstAddress) : rule.gateway} - - - recursive - - - ) : ( - <> - {remoteSrv && } - {rule.gateway} - - )} -
- {treatAsRecursive ? ( - recRow ? ( -

{recRow.dstAddress}

- ) : isRecRef ? ( -

- рекурсивный маршрут (нет строки в списке — синхронизируйте «Рекурсивные маршруты») -

- ) : null - ) : tunnel ? ( -

{tunnel.name}

- ) : null} - - )} -
- - {/* description */} -

{rule.description || "—"}

- - {/* actions */} -
- - -
-
- ) -} - // ── rule sheet ───────────────────────────────────────────────────────────────── interface RuleForm { @@ -1497,8 +1291,6 @@ function CopyRulesSheet({ // ── page ─────────────────────────────────────────────────────────────────────── -type SortKey = "community" | "gateway" | "description" - interface BackendServer { id: number name: string @@ -1530,11 +1322,6 @@ function makeApiFetch(backendUrl: string) { } } -function SortIndicator({ k, sortKey, sortAsc }: { k: SortKey; sortKey: SortKey; sortAsc: boolean }) { - if (sortKey !== k) return - return sortAsc ? : -} - export default function FiltersPage() { const { mode, backendUrl } = useDataSource() const evo = useEvoBGP() @@ -1602,8 +1389,6 @@ export default function FiltersPage() { }, [isLive, apiFetch]) const [selectedServerId, setSelectedServerId] = useState("srv1") const [search, setSearch] = useState("") - const [sortKey, setSortKey] = useState("community") - const [sortAsc, setSortAsc] = useState(true) const [sheetOpen, setSheetOpen] = useState(false) const [sheetMode, setSheetMode] = useState<"create" | "edit">("create") const [sheetInitial, setSheetInitial]= useState(emptyForm()) @@ -1708,24 +1493,14 @@ export default function FiltersPage() { const filteredRules = useMemo(() => { const q = search.toLowerCase() - const list = q - ? currentRules.filter(r => - r.community.includes(q) || - (communityNameMap[r.community] ?? "").toLowerCase().includes(q) || - r.gateway.includes(q) || - r.description.toLowerCase().includes(q) - ) - : [...currentRules] - if (search) { - const mult = sortAsc ? 1 : -1 - list.sort((a, b) => { - if (sortKey === "community") return mult * a.community.localeCompare(b.community) - if (sortKey === "gateway") return mult * a.gateway.localeCompare(b.gateway) - return mult * a.description.localeCompare(b.description) - }) - } - return list - }, [currentRules, search, sortKey, sortAsc, communityNameMap]) + if (!q) return currentRules + return currentRules.filter((r) => + r.community.includes(q) || + (communityNameMap[r.community] ?? "").toLowerCase().includes(q) || + r.gateway.includes(q) || + r.description.toLowerCase().includes(q), + ) + }, [currentRules, search, communityNameMap]) const updateRules = useCallback((serverId: string, updater: (rules: FilterRule[]) => FilterRule[]) => { setRouterCompare(rc => (rc && rc.serverId === serverId ? null : rc)) @@ -1843,10 +1618,6 @@ export default function FiltersPage() { }) } - const toggleSort = (k: SortKey) => { - if (sortKey === k) setSortAsc(v => !v); else { setSortKey(k); setSortAsc(true) } - } - if (!selectedServer) { return (
@@ -2031,7 +1802,7 @@ export default function FiltersPage() { ) })()} - + {/* selected server header */}
@@ -2087,71 +1858,24 @@ export default function FiltersPage() {

Ничего не найдено

) : ( - <> - {/* table header with sort */} -
- # - - - - MT - - - Совпадение с MikroTik (bgp-in): нажмите «Сверить с роутером» - - - - - - -
- - {/* rows */} -
- {(search ? filteredRules : currentRules).map((rule, i, arr) => ( - openEdit(rule)} - onDelete={() => handleDelete(rule.id)} - onMoveUp={() => handleMoveUp(currentRules.findIndex(r => r.id === rule.id))} - onMoveDown={() => handleMoveDown(currentRules.findIndex(r => r.id === rule.id))} - /> - ))} -
- - {/* footer hint */} -
- - Последнее правило имеет наивысший приоритет в RouterOS -
- + handleMoveUp(currentRules.findIndex((r) => r.id === id))} + onMoveDown={(id) => handleMoveDown(currentRules.findIndex((r) => r.id === id))} + /> )} {/* add rule shortcut */} @@ -2160,7 +1884,7 @@ export default function FiltersPage() { Добавить правило для {selectedServer.name} -
+
diff --git a/app/(main)/firewall/page.tsx b/app/(main)/firewall/page.tsx index 5c54ef4..96a8cd6 100644 --- a/app/(main)/firewall/page.tsx +++ b/app/(main)/firewall/page.tsx @@ -2,6 +2,13 @@ import { useEffect, useMemo, useRef, useState } from "react" import { PageHeader } from "@/components/page-header" +import { + FirewallRulesDataGrid, + ActionBadge, + ChainBadge, +} from "@/components/data-grids/firewall-rules-data-grid" +import { FirewallScenarioRulesDataGrid } from "@/components/data-grids/firewall-scenario-rules-data-grid" +import { DataPageCard } from "@/components/data-page-card" import { FormField, FormToggle, SectionTitle } from "@/components/form-kit" import { firewallRules, type FirewallRule } from "@/lib/data" import { Card, CardContent } from "@/components/ui/card" @@ -342,23 +349,7 @@ function fmtHits(n: number): string { return String(n) } -function ActionBadge({ action }: { action: string }) { - const cls = ACTION_STYLES[action] ?? "bg-muted text-muted-foreground border-border" - return ( - - {action} - - ) -} - -function ChainBadge({ chain }: { chain: string }) { - const cls = CHAIN_STYLES[chain] ?? "bg-muted text-muted-foreground" - return ( - - {chain} - - ) -} +// ActionBadge, ChainBadge — из firewall-rules-data-grid function NativeSelect({ value, onChange, children, className }: { value: string; onChange: (v: string) => void; children: React.ReactNode; className?: string @@ -1143,55 +1134,13 @@ function ScenarioSheet({ open, onClose, initial, onSave }: { {/* Rules table */} {rules.length > 0 ? (
- - - - - - - - - - - - - - - {rules.map((r, i) => ( - - - - - - - - - - - - ))} - -
#ЦепочкаДействиеSrcDstПортIfaceКомментарий -
{i + 1}{r.src || "any"}{r.dst || "any"}{r.port || "—"}{r.iface || "—"}{r.comment || "—"} -
- - - - -
-
+ moveRule(id, -1)} + onMoveDown={(id) => moveRule(id, 1)} + onRemove={removeRule} + />
) : ( !addOpen && ( @@ -1683,104 +1632,6 @@ function SimulatorTab({ rules: allRules }: { rules: FirewallRule[] }) { ) } -// ─── Rules Table ────────────────────────────────────────────────────────────── - -function RulesTable({ rules, onToggle, onEdit }: { - rules: FirewallRule[] - onToggle: (id: string) => void - onEdit: (r: FirewallRule) => void -}) { - if (rules.length === 0) { - return ( -
- -

Правила не найдены

-

Попробуйте изменить фильтр или добавьте новое правило

-
- ) - } - - return ( -
- - - - - - - - - - - - - - - - - {rules.map((r, i) => ( - - - - - - - - - - - - - - ))} - -
#ЦепочкаДействиеИсточникНазначениеПротоколПортИнтерфейсПакетовВкл -
{i + 1} - {r.src || "any"} - - {r.dst || "any"} - {r.proto}{r.port || "—"}{r.iface || "—"} - 1_000_000 ? "text-emerald-600 dark:text-emerald-400 font-semibold" - : r.hits > 10_000 ? "text-foreground" - : "text-muted-foreground", - )}> - {fmtHits(r.hits)} - - - onToggle(r.id)} /> - - - - - - } /> - - onEdit(r)}> - Редактировать - - - Дублировать - - - onToggle(r.id)}> - - {r.enabled ? "Отключить" : "Включить"} - - - - Удалить правило - - - -
-
- ) -} - // ════════════════════════════════════════════════════════════════════════════ export default function FirewallPage() { const [rules, setRules] = useState(firewallRules) @@ -1932,7 +1783,7 @@ export default function FirewallPage() { ) : chainGroup === "simulator" ? ( ) : ( - + {/* toolbar */}
{/* IP family selector */} @@ -1980,8 +1831,8 @@ export default function FirewallPage() { {filteredRules.length} правил
- -
+ + )} {/* RouterOS reference */} diff --git a/app/(main)/gre/page.tsx b/app/(main)/gre/page.tsx index 70c9586..a4b263b 100644 --- a/app/(main)/gre/page.tsx +++ b/app/(main)/gre/page.tsx @@ -2,6 +2,9 @@ import { useCallback, useEffect, useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" +import { DataPageCard } from "@/components/data-page-card" +import { GreTunnelsDataGrid } from "@/components/data-grids/gre-tunnels-data-grid" +import { GrePoolsDataGrid } from "@/components/data-grids/gre-pools-data-grid" import { FormField, FormToggle, SectionTitle, SegmentedControl } from "@/components/form-kit" import { greTunnels as mockGreTunnels, grePools as mockGrePools, servers as mockServers } from "@/lib/data" import type { GrePool, GreTunnel, GreStatus, IpsecEncAlg, IpsecAuthAlg, IpsecDhGroup, IkeVersion, Server } from "@/lib/data" @@ -450,7 +453,7 @@ export default function GrePage() { {/* ── Tunnels ── */} {pageTab === "tunnels" && ( - +
{tunnelTabs.map((t) => ( @@ -469,177 +472,25 @@ export default function GrePage() { {filtered.length} туннелей
-
- - - - - - - - - - - - - - - - {filtered.map((t, index) => { - const srv = serverById[t.serverId] - const pool = poolById[t.poolId] - return ( - - - - - - - - - - - - {/* actions */} - - - ) - })} - -
Интерфейс / СерверЭндпоинтыВнутренний IPПулIPsecШифрованиеMTUKeepaliveСтатус -
-

{t.name}

-

- {srv && } - {srv?.name ?? t.serverId} -

-
-

- {t.localAddress === "0.0.0.0" ? авто : t.localAddress} -

-

→ {t.remoteAddress}

-
-

{t.localInnerIp}

-

{t.remoteInnerIp}

-
- {pool?.name ?? "—"} - - {t.ipsec ? ( -
- {ENC_LABELS[t.ipsec.encAlg]} / {AUTH_LABELS[t.ipsec.authAlg]} - - {DH_LABELS[t.ipsec.dhGroup].split(" ")[0]} · {IKE_LABELS[t.ipsec.ikeVersion]}{t.ipsec.pfs && " · PFS"} - -
- ) : } -
{t.mtu} - {t.keepaliveInterval === 0 ? "откл." : `${t.keepaliveInterval}с / ${t.keepaliveRetries}`} - -
- {/* Code preview button */} - - - {/* Actions dropdown */} - - - - - } /> - - - {t.name} - - - setCodePreviewTunnel(t)}> - Просмотр кода - - - Редактировать - - - - - {t.enabled ? "Выключить" : "Включить"} - - - - Удалить туннель - - - -
-
-
- + + )} {/* ── IP Pools ── */} {pageTab === "pools" && ( - +
{displayPools.length} пула
-
- - - - - - - - - - - - - {displayPools.map((pool) => { - const pct = pool.total > 0 ? Math.round((pool.allocated / pool.total) * 100) : 0 - return ( - - - - - - - - - - ) - })} - -
Имя пулаДиапазон CIDRНазначено /30Доступно /30ИспользованиеНазначение -
{pool.name}{pool.cidr}{pool.allocated}{pool.total - pool.allocated} -
-
-
80 ? "bg-amber-500" : "bg-emerald-500"}`} style={{ width: `${pct}%` }} /> -
- {pct}% -
-
{pool.comment} - - - - - } /> - - Редактировать - - Удалить пул - - -
-
+

Назначения по пулам

@@ -664,7 +515,7 @@ export default function GrePage() { })}
-
+ )} {/* RouterOS reference */} diff --git a/app/(main)/ip-ranges/page.tsx b/app/(main)/ip-ranges/page.tsx index 3e7228d..bf3ae03 100644 --- a/app/(main)/ip-ranges/page.tsx +++ b/app/(main)/ip-ranges/page.tsx @@ -2,11 +2,13 @@ import { useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" -import { DataTable } from "@/components/data-table" +import { DataPageCard } from "@/components/data-page-card" +import { DataPageToolbar } from "@/components/data-page-toolbar" +import { IpRangesDataGrid } from "@/components/data-grids/ip-ranges-data-grid" import { FileImportDialog } from "@/components/file-import-dialog" import { ipRanges as mockIpRanges } from "@/lib/data" import { Button } from "@/components/ui/button" -import { UploadIcon, DownloadIcon, PlusIcon, FilterIcon, LoaderCircleIcon } from "lucide-react" +import { UploadIcon, DownloadIcon, PlusIcon, LoaderCircleIcon } from "lucide-react" import { useDataSource } from "@/lib/data-source" import { useEvoBGP } from "@/lib/evobgp-context" import { cn } from "@/lib/utils" @@ -16,6 +18,7 @@ export default function IpRangesPage() { const { mode } = useDataSource() const { enabled, snapshot, loading, error } = useEvoBGP() const [importOpen, setImportOpen] = useState(false) + const [search, setSearch] = useState("") const useEvoCatalog = mode === "live" && enabled @@ -25,6 +28,18 @@ export default function IpRangesPage() { return snapshot?.ipRanges ?? [] }, [useEvoCatalog, loading, snapshot]) + const filtered = useMemo(() => { + if (!search) return rows + const q = search.toLowerCase() + return rows.filter( + (r) => + r.cidr.toLowerCase().includes(q) || + r.asn.toLowerCase().includes(q) || + r.country.toLowerCase().includes(q) || + r.filter.toLowerCase().includes(q), + ) + }, [rows, search]) + return (
)}
- {d.cidr}, - }, - { - key: "asn", - label: "ASN", - render: (d) => {d.asn}, - }, - { - key: "country", - label: "Страна", - render: (d) => {d.country}, - }, - { - key: "purpose", - label: "Назначение", - render: (d) => {d.purpose}, - }, - { - key: "filter", - label: "Фильтр", - render: (d) => ( - - {d.filter} - - ), - }, - { - key: "updated", - label: "Обновлён", - render: (d) => {d.updated}, - }, - { - key: "enabled", - label: "Статус", - render: (d) => ( - - {d.enabled ? "Активен" : "Отключён"} - - ), - }, - ]} - /> + + + + )} - -
- - - - {["Роутер", "Интерфейс", "Сосед (Router ID)", "Область", "Состояние", "Cost", "Uptime", "Prio"].map(h => ( - - ))} - - - - {neighbors.length === 0 ? ( - - - - ) : neighbors.map(n => { - const isHighlighted = selectedId === n.localRouter || selectedId === n.remoteRouter - return ( - setHighlightId(n.localRouter)} - onMouseLeave={() => setHighlightId(null)} - onClick={() => setSelectedId(prev => prev === n.localRouter ? null : n.localRouter)} - className={cn( - "transition-colors cursor-pointer", - isHighlighted ? "bg-primary/5 hover:bg-primary/8" : "hover:bg-muted/30", - )}> - - - - - - - - - - ) - })} - -
{h}
- Нет OSPF-соседей -
{n.localLabel}{n.localIface} -
- {n.remoteLabel !== n.remoteRouterId ? n.remoteLabel : n.remoteRouterId} - {n.remoteLabel !== n.remoteRouterId && ( - {n.remoteRouterId} - )} -
-
{n.area} - - {n.state} - - {n.cost}{n.uptime}{n.priority}
-
-
+ + + ) } @@ -1052,36 +1003,9 @@ function RoutesTab({ routes }: { routes: OspfRoute[] }) { ))} - -
- - - - {["Назначение", "Тип", "Cost", "Следующий хоп", "Интерфейс", "Роутер", "Область"].map(h => ( - - ))} - - - - {routes.map(r => ( - - - - - - - - - - ))} - -
{h}
{r.destination} - - {r.type} - - {r.cost}{r.nextHop}{r.via}{r.serverLabel}{r.area}
-
-
+ + +
Типы: {([ @@ -1139,66 +1063,9 @@ function BfdTab({ sessions }: { sessions: BfdSession[] }) { )} {sessions.length > 0 && ( - -
- - - - {[ - "Роутер", "Интерфейс", "Локальный", "Удалённый", - "Состояние", "Uptime", "Tx / Rx", "Hold", "Mult", - "Пакеты Rx", "Пакеты Tx", "Переходы", - ].map(h => ( - - ))} - - - - {sessions.map(b => ( - - - - - - - - - - - - - - - ))} - -
{h}
-
- {b.serverLabel} - {b.multihop && ( - multihop - )} -
-
{b.iface || "—"}{b.localAddr}{b.remoteAddr} - - {b.state} - - - {b.uptime ?? "—"} - - {fmtMs(b.interval)} / {fmtMs(b.rxInterval)} - - {fmtMs(b.holdTime)} - {b.multiplier} - {b.packetsRx.toLocaleString()} - - {b.packetsTx.toLocaleString()} - - 3 ? "text-[var(--status-degraded-fg)]" : "text-muted-foreground")}> - {b.stateChanges} - -
-
-
+ + + )} {sessions.length > 0 && ( diff --git a/app/(main)/probes/page.tsx b/app/(main)/probes/page.tsx index a0cd912..aa6020d 100644 --- a/app/(main)/probes/page.tsx +++ b/app/(main)/probes/page.tsx @@ -4,6 +4,16 @@ import { useEffect, useRef, useState, useMemo, useCallback } from "react" import { PageHeader } from "@/components/page-header" import { FormToggle } from "@/components/form-kit" import { Card, CardContent } from "@/components/ui/card" +import { DataPageCard } from "@/components/data-page-card" +import { + ProbesScheduleDataGrid, + type SchedRule, + type SchedType, +} from "@/components/data-grids/probes-schedule-data-grid" +import { + ProbesSpeedProbesDataGrid, + type SpeedProbeApiRow, +} from "@/components/data-grids/probes-speed-probes-data-grid" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { servers, greTunnels, type GreTunnel, type Server } from "@/lib/data" @@ -41,13 +51,8 @@ interface DiagTest { source?: "demo" | "live" } -type SchedType = "ping" | "bandwidth" | "both" +// SchedRule imported from probes-schedule-data-grid -interface SchedRule { - id: string; srcId: string; tunnelId: string; type: SchedType - intervalMin: number; enabled: boolean - lastRun: string | null; nextRunMin: number | null -} // ─── tool metadata ──────────────────────────────────────────────────────────── @@ -98,22 +103,7 @@ interface BackendServerRow { latency?: number | null } -interface SpeedProbeApiRow { - id: string - srcServerId: string - dstServerId: string - srcInterface: string - dstInterface: string - protocol: string - direction: string - durationSec: string - enabled: boolean - lastRunAt: string | null - lastTxAvgMbps: number | null - lastRxAvgMbps: number | null - lastStatus: string | null - lastError: string | null -} +// SpeedProbeApiRow imported from probes-speed-probes-data-grid // ─── helpers ────────────────────────────────────────────────────────────────── @@ -466,53 +456,9 @@ function ScheduleSpeedProbesLive({ return (
- - {rows.length === 0 ? ( -
- -

Нет записей speed-test в мониторинге

-

- Настраиваются через API PUT /api/uptime/speed-probes или связанный UI. -

-
- ) : ( - <> -
- Источник - Назначение - Протокол - Сек - Вкл - Последний запуск -
-
- {rows.map(r => ( -
- {name(r.srcServerId)}{r.srcInterface ? ` · ${r.srcInterface}` : ""} - {name(r.dstServerId)}{r.dstInterface ? ` · ${r.dstInterface}` : ""} - {r.protocol.toUpperCase()} - {r.durationSec}s - {r.enabled ? "да" : "нет"} - - {r.lastRunAt ?? "—"} - {r.lastStatus === "done" && r.lastTxAvgMbps != null && ( - - TX≈{r.lastTxAvgMbps.toFixed(1)} RX≈{(r.lastRxAvgMbps ?? 0).toFixed(1)} Mb/s - - )} - {r.lastStatus === "error" && r.lastError && ( - {r.lastError} - )} - -
- ))} -
- - )} -
+ + +

Данные из коллектора uptime (та же БД, что и дашборд). Редактирование — через настройки мониторинга / API.

@@ -553,63 +499,22 @@ function ScheduleTab({ } }, [addSrc, addTun, tunnelsForServer]) - const typeLabel: Record = { ping: "Ping", bandwidth: "BW-тест", both: "Ping + BW" } + const tunnelName = (srcId: string, tunnelId: string) => + tunnelsForServer(srcId).find((t) => t.id === tunnelId)?.name return (
- - {rules.length === 0 ? ( -
- -

Нет правил расписания

-
- ) : ( - <> -
- - Туннель - Сервер - Тип - Интервал - Последний / следующий - -
-
- {rules.map(rule => { - const src = serverOptions.find(s => s.id === rule.srcId) - const tun = tunnelsForServer(rule.srcId).find(t => t.id === rule.tunnelId) - return ( -
- setRules(p => p.map(r => r.id === rule.id ? { ...r, enabled: v } : r))} /> - {tun?.name ?? rule.tunnelId} - {src?.name ?? rule.srcId} - {typeLabel[rule.type]} - каждые {rule.intervalMin} мин -
- {rule.lastRun && {rule.lastRun}} - {rule.nextRunMin != null && rule.enabled && ( - · через {rule.nextRunMin} мин - )} -
- -
- ) - })} -
- - )} -
+ + + setRules((p) => p.map((r) => (r.id === id ? { ...r, enabled } : r))) + } + onDelete={(id) => setRules((p) => p.filter((r) => r.id !== id))} + /> + {showAdd ? (
diff --git a/app/(main)/recursive-routes/page.tsx b/app/(main)/recursive-routes/page.tsx index 4ddd487..7583a70 100644 --- a/app/(main)/recursive-routes/page.tsx +++ b/app/(main)/recursive-routes/page.tsx @@ -2,6 +2,11 @@ import { useCallback, useEffect, useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" +import { + RecursiveRoutesDataGrid, + type RecursiveRouteGroup, + inferCountry, +} from "@/components/data-grids/recursive-routes-data-grid" import { FormField, SectionTitle } from "@/components/form-kit" import { Card } from "@/components/ui/card" import { Button } from "@/components/ui/button" @@ -12,7 +17,7 @@ import { Flag } from "@/components/flag" import { useDataSource } from "@/lib/data-source" import { cn } from "@/lib/utils" import { servers as mockServers, type Server } from "@/lib/data" -import { PlusIcon, SaveIcon, TrashIcon, SearchIcon, XIcon, PencilIcon, ChevronDownIcon, ChevronRightIcon, AlertCircleIcon, CheckIcon } from "lucide-react" +import { PlusIcon, SaveIcon, TrashIcon, SearchIcon, XIcon, PencilIcon, CheckIcon, AlertCircleIcon } from "lucide-react" import { requestJson } from "@/shared/api/http-client" interface BackendServer { @@ -35,25 +40,6 @@ interface GatewayOption { status: "up" | "down" } -const INFER_COUNTRIES = [ - { code: "RU", keys: ["MSK", "SPB", "RTK", "MTS", "VPSVILLE", "IHOR"] }, - { code: "SE", keys: ["SWE", "STO"] }, - { code: "FI", keys: ["HEL", "FIN"] }, - { code: "DE", keys: ["FRA", "GER", "DE"] }, - { code: "NL", keys: ["AMS", "NLD", "NL"] }, - { code: "SG", keys: ["SGP", "SIN", "SG"] }, - { code: "TR", keys: ["TUR", "TR"] }, - { code: "US", keys: ["USA", "US", "NYC", "LAX"] }, -] - -function inferCountry(name: string): string | null { - const upper = name.toUpperCase() - for (const c of INFER_COUNTRIES) { - if (c.keys.some(k => upper.includes(k))) return c.code - } - return null -} - const COUNTRY_OPTIONS = [ { code: "RU", label: "Россия" }, { code: "DE", label: "Германия" }, { code: "NL", label: "Нидерланды" }, { code: "SG", label: "Сингапур" }, @@ -83,13 +69,7 @@ interface RecursiveRouteRow { country: string } -interface RouteGroup { - key: string - dstAddress: string - routingTable: string - comment: string - endpoints: RecursiveRouteRow[] -} +interface RouteGroup extends RecursiveRouteGroup {} function makeApiFetch(backendUrl: string) { return async function apiFetch(path: string, init?: RequestInit): Promise { @@ -149,105 +129,6 @@ const emptyForm = (): RouteForm => ({ endpoints: [newEndpoint()], }) -function RouteGroupRows({ - group, expanded, onToggle, onEdit, onDelete, -}: { - group: RouteGroup - expanded: boolean - onToggle: () => void - onEdit: () => void - onDelete: () => void -}) { - const [confirmDel, setConfirmDel] = useState(false) - const bestDistance = Math.min(...group.endpoints.map(ep => ep.distance)) - const sorted = [...group.endpoints].sort((a, b) => a.distance - b.distance) - return ( - <> - - -
- {expanded - ? - : } -
-

{group.dstAddress}

-

{group.comment || "—"}

-
-
- - -
- {sorted.map((ep, idx) => { - const code = ep.country || inferCountry(ep.gateway) - return ( -
- - {code ? : ?} - {ep.gateway} -
- ) - })} -
- - {group.endpoints.length} - d{bestDistance} - {group.routingTable || "main"} - e.stopPropagation()}> -
- - -
- - - {expanded && ( - - -
-
- Route: {group.dstAddress} - Table: {group.routingTable || "main"} - {group.comment && {group.comment}} -
-
- {sorted.map((ep, idx) => ( -
-
-
- {(ep.country || inferCountry(ep.gateway)) && ( - - )} - Endpoint {idx + 1} -
- distance: {ep.distance} -
-

{ep.gateway}

-
- scope: {ep.scope ?? "—"} - t.scope: {ep.targetScope ?? "—"} - check: {ep.checkGateway || "—"} -
-
- ))} -
-
- - - )} - - ) -} - function EndpointCountryField({ value, onChange }: { value: string; onChange: (v: string) => void }) { const [query, setQuery] = useState("") const q = query.trim().toUpperCase() @@ -794,37 +675,13 @@ export default function RecursiveRoutesPage() {
)} -
- - - - - - - - - - - - {groupedRoutes.map((g) => ( - setExpandedGroupKey(prev => prev === g.key ? null : g.key)} - onEdit={() => openEdit(g)} - onDelete={() => setRows(prev => prev.filter(r => groupKeyOf(r) !== g.key))} - /> - ))} - -
Route / CommentGatewaysEPPriorityTable -
- {groupedRoutes.length === 0 && ( -
- Нет маршрутов в БД для этого сервера. Нажми "Router => DB" для загрузки. -
- )} -
+ ({ ...g, id: g.key }))} + expandedKey={expandedGroupKey} + onExpandedChange={setExpandedGroupKey} + onEdit={openEdit} + onDelete={(g) => setRows((prev) => prev.filter((r) => groupKeyOf(r) !== g.key))} + /> - )} -
- ) -} - -// ─── Community recs table ───────────────────────────────────────────────────── - -function CommRecsTable({ recs, homeId, pinned, applied, applying, onPin, onApply, threshold: _threshold }: { - recs: CommRec[] - homeId: string - pinned: Set - applied: Set - applying: Set - onPin: (k: string) => void - onApply: (comm: string, homeId: string) => void - threshold: number -}) { - return ( -
- - - - - - - - - - - - {recs.map((r, idx) => { - const pinKey = `${homeId}::${r.community}` - const isPinned = pinned.has(pinKey) - const isApplied = applied.has(pinKey) - const isApplying = applying.has(pinKey) - const canApply = r.shouldSwitch && !isPinned && !isApplied - - return ( - - {/* community */} - - - {/* current route */} - - - {/* recommended */} - - - {/* probability */} - - - {/* actions */} - - - ) - })} - -
CommunityТекущий (WAN → JH → Exit)РекомендуемыйP(тек / рек)Действие
-
{r.community}
-
{r.communityName}
-
- {r.current ? ( -
- {r.current.wan} - - {r.current.jh} - - {r.current.exit} - ({r.current.gateway}) -
- ) : } -
- {r.recommended ? ( -
- {r.recommended.wan} - - {r.recommended.jh} - - {r.recommended.exit} - {r.shouldSwitch && !isPinned && ( - - +{(r.recommended.prob ?? 0) - (r.current?.prob ?? 0)}% - - )} -
- ) : } -
-
- - / - -
-
-
- {isPinned && } - - {canApply && ( - - )} - {isApplied && ( - - Применено - - )} -
-
-
- ) -} - // ─── Home Router card ───────────────────────────────────────────────────────── type HomeTab = "wan-matrix" | "full-routes" | "bgp-community" @@ -669,18 +353,17 @@ function HomeRouterCard({ entry, jumpHosts, settings, pinned, applied, applying, {/* Tab content */} {tab === "wan-matrix" && ( - + )} {tab === "full-routes" && ( - + )} {tab === "bgp-community" && ( - )} @@ -1254,51 +937,14 @@ export default function RouteOptimizerPage() { : "нет данных"}
-
- - - - {["Интерфейс", "Cost", "Score", "Ping", "Speed (dl/ul)"].map((h) => ( - - ))} - - - - {ospfPreviewError && ( - - - - )} - {!ospfPreviewLoading && !ospfPreviewError && (ospfPreview?.interfaces.length ?? 0) === 0 && ( - - - - )} - {(ospfPreview?.interfaces ?? []).map((row) => ( - - - - - - - - ))} - -
{h}
- Ошибка preview: {ospfPreviewError} -
- Интерфейсы OSPF не найдены для выбранного сервера. -
{row.interface} - {row.currentCost} - {" → "} - - {row.optimalCost} - - {row.score}{row.pingMs}ms↓{row.dlMbps} / ↑{row.ulMbps}
-
+ ({ + id: `${row.interface}-${row.currentCost}-${row.optimalCost}`, + ...row, + }))} + error={ospfPreviewError || null} + loading={ospfPreviewLoading} + />
{ospfApplyResult && ( diff --git a/app/(main)/servers/page.tsx b/app/(main)/servers/page.tsx index 623afbb..16ca202 100644 --- a/app/(main)/servers/page.tsx +++ b/app/(main)/servers/page.tsx @@ -28,6 +28,7 @@ import { useDataSource } from "@/lib/data-source" import { Flag } from "@/components/flag" import { cn } from "@/lib/utils" import { Card, CardContent } from "@/components/ui/card" +import { DataPageCard } from "@/components/data-page-card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { @@ -510,7 +511,7 @@ export default function ServersPage() { {/* Table */} - + - + diff --git a/app/(main)/settings/page.tsx b/app/(main)/settings/page.tsx index 697fa2e..bfe3b9b 100644 --- a/app/(main)/settings/page.tsx +++ b/app/(main)/settings/page.tsx @@ -26,6 +26,9 @@ import { ServerIcon, LayoutDashboardIcon, RefreshCwIcon, CableIcon, LoaderCircleIcon, DownloadIcon, UploadIcon, } from "lucide-react" +import { SubusersDataGrid } from "@/components/data-grids/subusers-data-grid" +import { SettingsAccessSummaryDataGrid } from "@/components/data-grids/settings-access-summary-data-grid" +import { DataPageCard } from "@/components/data-page-card" import { cn } from "@/lib/utils" import { requestJson } from "@/shared/api/http-client" import { downloadSystemDatabaseBackup, restoreSystemDatabaseBackup } from "@/shared/api/system-database" @@ -568,100 +571,14 @@ function UserSheet({ open, user, onSave, onClose }: {

- {/* table header */} - {form.subUsers.length > 0 && ( -
- Логин / описание - Пароль - JH-серверы - IP-клиента - - -
- )} - - {/* rows */} -
- {form.subUsers.length === 0 && !addSubOpen && ( -
- -

Нет GRE-клиентов

-

Добавьте учётки для подключения устройств

-
- )} - - {form.subUsers.map(su => { - const jhs = servers.filter(s => su.jhServerIds.includes(s.id)) - const revealed = revealedIds.has(su.id) - return ( -
- - {/* login + description */} -
-

{su.login}

- {su.description && ( -

{su.description}

- )} - {su.lastSeen && ( -

{su.lastSeen}

- )} -
- - {/* password */} -
- - {revealed ? su.password : "••••••••••••"} - - - -
- - {/* JH servers */} -
- {jhs.length === 0 - ? - : jhs.map(jh => ( - - - {jh.name.split("-").slice(-1)[0]} - - )) - } -
- - {/* client IP */} - - {su.clientIp || "—"} - - - {/* active toggle */} - toggleSubUser(su.id)} /> - - {/* delete */} - -
- ) - })} -
+ {/* inline add form */} {addSubOpen ? ( @@ -1561,66 +1478,17 @@ export default function SettingsPage() { {/* access summary */} - +
Сводка прав доступа
-
- - - - - - - - - - - {users.map(u => { - const writeSections = u.role === "admin" ? ALL_SECTIONS : u.sections.filter(s => s.level === "write").map(s => s.section) - const readSections = u.role === "admin" ? [] : u.sections.filter(s => s.level === "read").map(s => s.section) - const accessServers = u.role === "admin" ? servers : servers.filter(s => u.servers.find(p => p.serverId === s.id && p.level !== "none")) - return ( - - - - - - - ) - })} - -
ПользовательРазделыСерверыПрава записи
-
- - {u.name} -
-
- {u.role === "admin" - ? Все ({ALL_SECTIONS.length}) - : {(readSections.length + writeSections.length)} из {ALL_SECTIONS.length}} - - {u.role === "admin" - ? Все ({servers.length}) - : {accessServers.length} из {servers.length}} - -
- {u.role === "admin" - ? Полный доступ - : writeSections.length === 0 - ? Только просмотр - : writeSections.slice(0, 3).map(s => ( - {s} - )) - } - {u.role !== "admin" && writeSections.length > 3 && ( - +{writeSections.length - 3} - )} -
-
-
-
+ + ) diff --git a/app/(main)/uptime/page.tsx b/app/(main)/uptime/page.tsx index 7671e23..e31e31e 100644 --- a/app/(main)/uptime/page.tsx +++ b/app/(main)/uptime/page.tsx @@ -10,6 +10,12 @@ import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert" import { Flag } from "@/components/flag" import { StatusDot } from "@/components/status-dot" import { Sparkline } from "@/components/sparkline" +import { DataPageCard } from "@/components/data-page-card" +import { + UptimeResourcesDataGrid, + type UptimeResourceRow, +} from "@/components/data-grids/uptime-resources-data-grid" +import { UptimeSpeedHistoryDataGrid } from "@/components/data-grids/uptime-speed-history-data-grid" import { PING_PROBE_WARN_RTT_MS } from "@/lib/ping-probe" import { cn } from "@/lib/utils" import { servers as mockServers, pingProbes as INIT_PROBES, filters, type Server, type Filter } from "@/lib/data" @@ -854,74 +860,55 @@ function SortIcon({ k, sortKey, sortAsc }: { k: ResSortKey; sortKey: ResSortKey; type ResTypeFilter = "all" | "jump-host" | "exit-node" | "home-router" function ResourcesTab({ resources, serversList, liveApi }: { resources: ServerResource[]; serversList: Server[]; liveApi?: boolean }) { - const [sortKey, setSortKey] = useState("name") - const [sortAsc, setSortAsc] = useState(true) const [resSearch, setResSearch] = useState("") const [typeFilter, setTypeFilter] = useState("all") - const rows = useMemo(() => resources.map((r) => { + const rows = useMemo((): UptimeResourceRow[] => resources.map((r) => { const hasData = r.hasData !== false const ramPct = hasData && r.ramTotal > 0 ? Math.round(r.ramUsed / r.ramTotal * 100) : 0 const hddPct = hasData && r.hddTotal > 0 ? Math.round(r.hddUsed / r.hddTotal * 100) : 0 return { ...r, hasData, - server: serversList.find(s => s.id === r.serverId), + server: serversList.find(s => s.id === r.serverId)!, ramPct, hddPct, } - }).filter(r => r.server !== undefined), [resources, serversList]) + }).filter(r => serversList.some(s => s.id === r.serverId)), [resources, serversList]) // KPI aggregates (только серверы с реальными сэмплами за окно) - const onlineWithSamples = rows.filter(r => r.server!.status === "online" && r.hasData) + const onlineWithSamples = rows.filter(r => r.server.status === "online" && r.hasData) const avgCpu = onlineWithSamples.length ? Math.round(onlineWithSamples.reduce((s, r) => s + r.cpu, 0) / onlineWithSamples.length) : 0 const avgRam = onlineWithSamples.length ? Math.round(onlineWithSamples.reduce((s, r) => s + r.ramPct, 0) / onlineWithSamples.length) : 0 - const highCpu = rows.filter(r => r.server!.status === "online" && r.hasData && r.cpu >= 85).length - const highRam = rows.filter(r => r.server!.status === "online" && r.hasData && r.ramPct >= 85).length - const highHdd = rows.filter(r => r.server!.status === "online" && r.hasData && r.hddPct >= 85).length + const highCpu = rows.filter(r => r.server.status === "online" && r.hasData && r.cpu >= 85).length + const highRam = rows.filter(r => r.server.status === "online" && r.hasData && r.ramPct >= 85).length + const highHdd = rows.filter(r => r.server.status === "online" && r.hasData && r.hddPct >= 85).length // Alerts const alerts = useMemo(() => - rows.filter(r => r.server!.status === "online" && r.hasData && (r.cpu >= 85 || r.ramPct >= 85 || r.hddPct >= 85 || (r.temp ?? 0) >= 70)), + rows.filter(r => r.server.status === "online" && r.hasData && (r.cpu >= 85 || r.ramPct >= 85 || r.hddPct >= 85 || (r.temp ?? 0) >= 70)), [rows], ) // Filtered + sorted const visible = useMemo(() => { let list = rows - if (typeFilter !== "all") list = list.filter(r => r.server!.type === typeFilter) + if (typeFilter !== "all") list = list.filter(r => r.server.type === typeFilter) if (resSearch.trim()) { const q = resSearch.toLowerCase() list = list.filter(r => - r.server!.name.toLowerCase().includes(q) || - r.server!.site.toLowerCase().includes(q) || + r.server.name.toLowerCase().includes(q) || + r.server.site.toLowerCase().includes(q) || r.boardName.toLowerCase().includes(q) ) } - list = [...list].sort((a, b) => { - let diff = 0 - switch (sortKey) { - case "name": diff = a.server!.name.localeCompare(b.server!.name); break - case "cpu": diff = a.cpu - b.cpu; break - case "ram": diff = a.ramPct - b.ramPct; break - case "hdd": diff = a.hddPct - b.hddPct; break - case "uptime": diff = a.uptimeSeconds - b.uptimeSeconds; break - case "temp": diff = (a.temp ?? -1) - (b.temp ?? -1); break - } - return sortAsc ? diff : -diff - }) return list - }, [rows, typeFilter, resSearch, sortKey, sortAsc]) - - function toggleSort(k: ResSortKey) { - if (sortKey === k) setSortAsc(v => !v) - else { setSortKey(k); setSortAsc(false) } // default desc for metrics - } + }, [rows, typeFilter, resSearch]) function exportCsv() { const header = ["Сервер", "Тип", "Площадка", "CPU %", "RAM %", "RAM использ.", "RAM всего", "HDD %", "HDD использ.", "HDD всего", "Uptime", "Температура °C", "RouterOS"] const rowsCsv = visible.map(r => { - const s = r.server! + const s = r.server return [s.name, s.type, s.site, r.cpu, r.ramPct, fmtMB(r.ramUsed), fmtMB(r.ramTotal), r.hddPct, fmtMB(r.hddUsed), fmtMB(r.hddTotal), fmtUptime(r.uptimeSeconds), r.temp ?? "", s.os].join(",") @@ -954,7 +941,7 @@ function ResourcesTab({ resources, serversList, liveApi }: { resources: ServerRe
{alerts.map(r => { - const s = r.server! + const s = r.server const issues: string[] = [] if (r.cpu >= 85) issues.push(`CPU ${r.cpu}%`) if (r.ramPct >= 85) issues.push(`RAM ${r.ramPct}%`) @@ -1035,195 +1022,9 @@ function ResourcesTab({ resources, serversList, liveApi }: { resources: ServerRe
{/* ── Table ─────────────────────────────────────────────────────────── */} - -
- - - - - {/* Sortable: name */} - - - - - {/* Sortable: cpu */} - - - {/* Sortable: ram */} - - - {/* Sortable: hdd */} - - - {/* Sortable: uptime */} - - - {/* Sortable: temp */} - - - - - {visible.length === 0 && ( - - - - )} - {visible.map(r => { - const srv = r.server! - const offline = srv.status !== "online" - const hasSamples = r.hasData !== false - const noMetrics = offline || !hasSamples - const isCrit = !noMetrics && (r.cpu >= 85 || r.ramPct >= 85 || r.hddPct >= 85 || (r.temp ?? 0) >= 70) - const cpuColor = r.cpu >= 85 ? "hsl(0 84% 60%)" : r.cpu >= 70 ? "hsl(38 92% 50%)" : "hsl(142 76% 36%)" - return ( - - - {/* Server */} - - - {/* Board + ROS */} - - - {/* CPU */} - - - {/* RAM */} - - - {/* HDD */} - - - {/* Uptime */} - - - {/* Temp */} - - - ) - })} - -
toggleSort("name")}> - - Сервер - - Модель · ROS toggleSort("cpu")}> - - CPU - - - toggleSort("ram")}> - - RAM - - - toggleSort("hdd")}> - - Диск - - - toggleSort("uptime")}> - - Uptime - - - toggleSort("temp")}> - - °C - - -
- - Ничего не найдено -
-
- {isCrit && } - {!isCrit && } - - {srv.name} - - {srv.site} - {!offline && r.hasData === false && ( - - нет данных - - )} -
-
-
- {hasSamples ? r.boardName : "—"} - {srv.os} -
-
- {noMetrics - ? {offline ? "—" : "нет опроса"} - : ( -
-
- - {r.cpu}% - - -
- -
- )} -
- {noMetrics - ? {offline ? "—" : "нет опроса"} - : ( -
-
- {r.ramPct}% - - {fmtMB(r.ramUsed)}/{fmtMB(r.ramTotal)} - -
- -
- )} -
- {noMetrics - ? {offline ? "—" : "нет опроса"} - : ( -
-
- {r.hddPct}% - - {fmtMB(r.hddUsed)}/{fmtMB(r.hddTotal)} - -
- -
- )} -
- - {noMetrics ? (offline ? "—" : "—") : fmtUptime(r.uptimeSeconds)} - - - {r.temp !== undefined && !noMetrics ? ( - = 70 ? "text-red-600 dark:text-red-400" - : r.temp >= 55 ? "text-amber-600 dark:text-amber-400" - : "text-muted-foreground", - )}> - {r.temp}°C - - ) : ( - - )} -
-
-
+ + +

{liveApi @@ -2478,106 +2279,7 @@ export default function UptimePage() { {speedRuns.length} запусков

- - - - {["Время", "Маршрут", "Параметры", "Статус", "TX avg", "RX avg", "Ping после BT"].map(h => ( - - ))} - - - - {speedRuns.map((run) => { - const src = allServers.find((s) => s.id === run.srcServerId) - const dst = allServers.find((s) => s.id === run.dstServerId) - const maxVal = Math.max(run.txAvgMbps, run.rxAvgMbps, 1) - return ( - - - - - - - - - - ) - })} - -
{h}
- {new Date(run.startedAt).toLocaleString("ru-RU", { hour: "2-digit", minute: "2-digit", second: "2-digit", day: "2-digit", month: "2-digit" })} - -
- - {src?.name ?? run.srcServerId} - - - {dst?.name ?? run.dstServerId} -
-
- {run.srcInterfaceAddress && run.dstInterfaceAddress - ? `${run.srcInterfaceAddress} → ${run.dstInterfaceAddress}` - : "внутренние IP: auto/не указаны"} -
-
-
- - {run.protocol.toUpperCase()} - - · - {run.direction} - · - {run.durationSec}s -
-
- {run.status === "running" ? ( - - running - - ) : run.status === "error" ? ( - error - ) : ( - done - )} - -
-
-
-
- - {run.txAvgMbps} Мбит/с - -
-
-
-
-
-
- - {run.rxAvgMbps} Мбит/с - -
-
- {run.status !== "done" ? "—" : run.afterBtPing?.error ? ( - - ошибка - - ) : run.afterBtPing?.rttMs != null ? ( - - {run.afterBtPing.rttMs} мс - {run.afterBtPing.lossPct != null && run.afterBtPing.lossPct > 0 && ( - · {run.afterBtPing.lossPct}% - )} - - ) : ( - - timeout - {run.afterBtPing?.lossPct != null && · {run.afterBtPing.lossPct}%} - - )} -
+
)} diff --git a/app/(main)/vxlan/page.tsx b/app/(main)/vxlan/page.tsx index 59d8430..1b94f26 100644 --- a/app/(main)/vxlan/page.tsx +++ b/app/(main)/vxlan/page.tsx @@ -4,17 +4,14 @@ import { useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" import { vxlanTunnels, servers } from "@/lib/data" import type { VxlanTunnel } from "@/lib/data" -import { Flag } from "@/components/flag" import { Card, CardContent } from "@/components/ui/card" +import { DataPageCard } from "@/components/data-page-card" +import { DataPageToolbar } from "@/components/data-page-toolbar" +import { VxlanDataGrid } from "@/components/data-grids/vxlan-data-grid" import { Button } from "@/components/ui/button" import { cn } from "@/lib/utils" import { - DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, - DropdownMenuItem, DropdownMenuSeparator, -} from "@/components/ui/dropdown-menu" -import { - SearchIcon, NetworkIcon, PlusIcon, MoreHorizontalIcon, - Trash2Icon, PencilIcon, PowerIcon, CopyIcon, CheckIcon, + NetworkIcon, PlusIcon, CopyIcon, CheckIcon, CodeXmlIcon, LayersIcon, } from "lucide-react" import { @@ -125,100 +122,7 @@ function ExportSheet({ open, tunnel, onClose }: { ) } -// ─── Tunnel row ─────────────────────────────────────────────────────────────── - -function TunnelRow({ - tunnel, - onExport, -}: { - tunnel: VxlanTunnel - onExport: () => void -}) { - const srv = serverFor(tunnel.serverId) - - return ( -
- {/* status dot */} - - - {/* name */} -
-

{tunnel.name}

-

VTEP: {tunnel.vtepIp}

-
- - {/* server */} -
- {srv && <>{srv.name}} -
- - {/* VNI */} -
-

VNI

-

{tunnel.vni}

-
- - {/* Port */} -
-

Port

-

{tunnel.dstPort}

-
- - {/* Remote VTEPs */} -
-

Remote VTEP

-

{tunnel.remoteVteps.length}

-
- - {/* ARP Proxy */} - - ARP {tunnel.arpProxy ? "✓" : "✗"} - - - {/* MAC learning */} - - MAC {tunnel.macLearning ? "✓" : "✗"} - - - {/* Status badge */} - - {tunnel.status === "up" ? "UP" : "DOWN"} - - - {/* menu */} - - - - - } /> - - Экспорт .rsc - Редактировать - - {tunnel.enabled ? "Отключить" : "Включить"} - - Удалить - - -
- ) -} - -// ════════════════════════════════════════════════════════════════════════════ +// ─── Export Sheet ───────────────────────────────────────────────────────────── export default function VxlanPage() { const [search, setSearch] = useState("") const [exportTunnel, setExportTunnel] = useState(null) @@ -284,45 +188,19 @@ export default function VxlanPage() { {/* Table */} - -
-
- - setSearch(e.target.value)} - /> -
- {filtered.length} туннелей -
- - {/* header */} -
- - Имя / VTEP IP - Сервер - VNI - Port - Remote - - - Статус - -
- - {filtered.length === 0 ? ( -
- -

VXLAN туннели не найдены

-
- ) : ( - filtered.map((t) => ( - setExportTunnel(t)} /> - )) - )} -
+ + + + {/* Reference */} diff --git a/app/(main)/wireguard/page.tsx b/app/(main)/wireguard/page.tsx index e61cf26..5c0aff2 100644 --- a/app/(main)/wireguard/page.tsx +++ b/app/(main)/wireguard/page.tsx @@ -2,36 +2,29 @@ import { useMemo, useState } from "react" import { PageHeader } from "@/components/page-header" -import { EmptyState } from "@/components/empty-state" import { servers } from "@/lib/data" -import type { WireGuardInterface, WireGuardPeer } from "@/lib/data" -import { Flag } from "@/components/flag" -import { Card, CardContent } from "@/components/ui/card" +import type { WireGuardInterface } from "@/lib/data" +import { DataPageCard } from "@/components/data-page-card" +import { DataPageToolbar } from "@/components/data-page-toolbar" +import { + WireguardDataGrid, + type WgIfaceWithServer, +} from "@/components/data-grids/wireguard-data-grid" import { Button } from "@/components/ui/button" +import { Card, CardContent } from "@/components/ui/card" import { cn } from "@/lib/utils" import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetDescription, SheetFooter, SheetClose, } from "@/components/ui/sheet" import { - DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, - DropdownMenuItem, DropdownMenuSeparator, -} from "@/components/ui/dropdown-menu" -import { - ShieldCheckIcon, PlusIcon, SearchIcon, KeyRoundIcon, - ChevronDownIcon, ChevronRightIcon, MoreHorizontalIcon, - PencilIcon, Trash2Icon, PowerIcon, CopyIcon, CheckIcon, - CodeXmlIcon, UsersIcon, ActivityIcon, ArrowDownIcon, ArrowUpIcon, + ShieldCheckIcon, PlusIcon, KeyRoundIcon, + CodeXmlIcon, UsersIcon, ActivityIcon, + CopyIcon, CheckIcon, } from "lucide-react" // ─── collect all WireGuard interfaces from all servers ──────────────────────── -interface WgIfaceWithServer extends WireGuardInterface { - serverId: string - serverName: string - serverCountry: string -} - function collectInterfaces(): WgIfaceWithServer[] { const result: WgIfaceWithServer[] = [] for (const srv of servers) { @@ -49,19 +42,6 @@ function collectInterfaces(): WgIfaceWithServer[] { // ─── helpers ────────────────────────────────────────────────────────────────── -function fmtBytes(n: number | undefined): string { - if (!n) return "—" - if (n >= 1_000_000_000) return `${(n / 1_000_000_000).toFixed(1)} ГБ` - if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)} МБ` - if (n >= 1_000) return `${(n / 1_000).toFixed(0)} КБ` - return `${n} Б` -} - -function truncKey(key: string): string { - if (key.length <= 20) return key - return `${key.slice(0, 8)}…${key.slice(-8)}` -} - // ─── RSC generator ──────────────────────────────────────────────────────────── function generateWgRsc(iface: WgIfaceWithServer): string { @@ -90,161 +70,6 @@ function generateWgRsc(iface: WgIfaceWithServer): string { return lines.join("\n") } -// ─── Peer row ───────────────────────────────────────────────────────────────── - -function PeerRow({ peer }: { peer: WireGuardPeer }) { - return ( -
- {/* public key */} -
- - - {truncKey(peer.publicKey)} - -
- {/* allowed IPs */} -
- {peer.allowedIps.join(", ")} -
- {/* handshake */} - - {peer.latestHandshake ?? "нет рукопожатия"} - - {/* rx / tx */} -
- - {fmtBytes(peer.transferRx)} - - - {fmtBytes(peer.transferTx)} - -
- {/* endpoint */} - {peer.endpoint ?? "—"} -
- ) -} - -// ─── Interface card ─────────────────────────────────────────────────────────── - -function IfaceRow({ - iface, - expanded, - onToggleExpand, - onExport, -}: { - iface: WgIfaceWithServer - expanded: boolean - onToggleExpand: () => void - onExport: () => void -}) { - const onlinePeers = iface.peers.filter((p) => !!p.latestHandshake).length - - return ( -
-
- {/* expand */} - - - {/* name + server */} -
-
- - {iface.name} -
-
- - {iface.serverName} -
-
- - {/* port */} -
-

Порт

-

{iface.listenPort}

-
- - {/* MTU */} -
-

MTU

-

{iface.mtu}

-
- - {/* peers */} -
-

Пиров

-

- {onlinePeers} - /{iface.peers.length} -

-
- - {/* status badge */} - - {iface.status === "up" ? "UP" : "DOWN"} - - - {/* menu */} - - e.stopPropagation()}> - - - } /> - - { e.stopPropagation(); onExport() }}> - Экспорт .rsc - - Редактировать - Добавить пира - - {iface.enabled ? "Отключить" : "Включить"} - - Удалить - - -
- - {/* expanded peers */} - {expanded && iface.peers.length > 0 && ( -
-
- Public Key - Allowed IPs - Последнее рукопожатие - RX / TX - Endpoint -
- {iface.peers.map((p) => )} -
- )} - {expanded && iface.peers.length === 0 && ( -
- Нет пиров -
- )} -
- ) -} - // ─── Export Sheet ───────────────────────────────────────────────────────────── function ExportSheet({ open, iface, onClose }: { @@ -310,8 +135,7 @@ function ExportSheet({ open, iface, onClose }: { export default function WireGuardPage() { const allIfaces = useMemo(() => collectInterfaces(), []) - const [search, setSearch] = useState("") - const [expandedIds, setExpandedIds] = useState>(new Set()) + const [search, setSearch] = useState("") const [exportIface, setExportIface] = useState(null) const filtered = useMemo(() => { @@ -328,14 +152,6 @@ export default function WireGuardPage() { const onlinePeers = allIfaces.reduce((s, i) => s + i.peers.filter((p) => !!p.latestHandshake).length, 0) const upIfaces = allIfaces.filter((i) => i.status === "up").length - function toggleExpand(id: string) { - setExpandedIds((prev) => { - const next = new Set(prev) - if (next.has(id)) next.delete(id); else next.add(id) - return next - }) - } - return (
{/* Search + table */} - -
-
- - setSearch(e.target.value)} - /> -
- {filtered.length} интерфейсов -
- - {/* table header */} -
- - Интерфейс / Сервер - Порт - MTU - Пиры - Статус - -
- - {filtered.length === 0 ? ( - } - title="Нет WireGuard интерфейсов" - description="Добавьте первый интерфейс или проверьте поиск" - className="border-0 py-16" - /> - ) : ( - filtered.map((iface) => ( - toggleExpand(iface.id)} - onExport={() => setExportIface(iface)} - /> - )) - )} -
+ + + + {/* RouterOS reference */} diff --git a/components/data-grids/asns-data-grid.tsx b/components/data-grids/asns-data-grid.tsx new file mode 100644 index 0000000..4eb15e0 --- /dev/null +++ b/components/data-grids/asns-data-grid.tsx @@ -0,0 +1,146 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { Asn } from "@/lib/data" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { FilterIcon, NetworkIcon } from "lucide-react" + +interface AsnsDataGridProps { + asns: Asn[] + isLoading?: boolean + pagination?: boolean +} + +function AsnsDataGrid({ asns, isLoading, pagination = false }: AsnsDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "asn", + accessorKey: "asn", + header: ({ column }) => , + cell: ({ row }) => {row.original.asn}, + meta: { + headerTitle: "ASN", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "org", + accessorKey: "org", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.org} + + ), + meta: { + headerTitle: "Имя / организация", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "prefixes", + accessorKey: "prefixes", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.prefixes.toLocaleString("ru")} + ), + meta: { + headerTitle: "Префиксов", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "filter", + accessorKey: "filter", + header: ({ column }) => , + cell: ({ row }) => ( + + + {row.original.filter} + + ), + meta: { + headerTitle: "Фильтр", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "updated", + accessorKey: "updated", + header: ({ column }) => , + cell: ({ row }) => {row.original.updated}, + meta: { + headerTitle: "Обновлён", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "enabled", + accessorKey: "enabled", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.enabled ? "Активен" : "Отключён"} + + ), + meta: { + headerTitle: "Статус", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [], + ) + + const table = useReactTable({ + data: asns, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + ...(pagination ? { getPaginationRowModel: getPaginationRowModel() } : {}), + getRowId: (row) => row.id, + }) + + return ( + } + title="Нет ASN" + description="Добавьте автономные системы или импортируйте каталог" + className="border-0 py-12" + /> + } + /> + ) +} + +export { AsnsDataGrid, type AsnsDataGridProps } diff --git a/components/data-grids/backups-data-grid.tsx b/components/data-grids/backups-data-grid.tsx index be87f82..25c473f 100644 --- a/components/data-grids/backups-data-grid.tsx +++ b/components/data-grids/backups-data-grid.tsx @@ -10,12 +10,13 @@ import { import type { Backup } from "@/lib/data" import { cn } from "@/lib/utils" import { Button } from "@/components/ui/button" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" import { - DataGrid, - DataGridColumnHeader, - DataGridContainer, - DataGridTable, -} from "@/components/reui/data-grid" + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" import { EmptyState } from "@/components/empty-state" import { DownloadIcon, HardDriveIcon, RefreshCwIcon, Trash2Icon } from "lucide-react" @@ -37,31 +38,46 @@ function BackupsDataGrid({ { id: "filename", accessorKey: "filename", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => ( {row.original.filename} ), + meta: { + headerTitle: "Файл", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, }, { id: "server", accessorKey: "server", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => ( {row.original.server} ), + meta: { + headerTitle: "Сервер", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "size", accessorKey: "size", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => ( {row.original.size} ), + meta: { + headerTitle: "Размер", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "kind", accessorKey: "kind", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => { const kind = row.original.kind return ( @@ -77,32 +93,47 @@ function BackupsDataGrid({ ) }, + meta: { + headerTitle: "Тип", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "notes", accessorKey: "notes", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => ( {row.original.notes || "—"} ), + meta: { + headerTitle: "Заметки", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "created", accessorKey: "created", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => ( {row.original.created} ), + meta: { + headerTitle: "Создан", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "actions", - header: () => null, + header: () => Действия, cell: ({ row }) => { const b = row.original return ( -
+
) }, + meta: { + headerTitle: "Remote AS", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "description", accessorKey: "description", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => ( {row.original.description} ), + meta: { + headerTitle: "Описание", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "type", accessorKey: "type", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => , + meta: { + headerTitle: "Тип", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "state", accessorKey: "state", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => , + meta: { + headerTitle: "Состояние", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "uptime", accessorKey: "uptime", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => ( {row.original.uptime ?? "—"} ), + meta: { + headerTitle: "Uptime", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "prefixesRx", accessorKey: "prefixesRx", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => { const n = row.original.prefixesRx return n > 0 ? ( @@ -196,11 +230,16 @@ function BgpSessionsDataGrid({ sessions }: BgpSessionsDataGridProps) { ) }, + meta: { + headerTitle: "Prefixes ↓", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, { id: "prefixesTx", accessorKey: "prefixesTx", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => { const n = row.original.prefixesTx return n > 0 ? ( @@ -211,6 +250,11 @@ function BgpSessionsDataGrid({ sessions }: BgpSessionsDataGridProps) { ) }, + meta: { + headerTitle: "Prefixes ↑", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, }, ], [], @@ -223,6 +267,7 @@ function BgpSessionsDataGrid({ sessions }: BgpSessionsDataGridProps) { getSortedRowModel: getSortedRowModel(), getExpandedRowModel: getExpandedRowModel(), getRowId: (row) => row.id, + getRowCanExpand: () => true, }) if (sessions.length === 0) { @@ -237,16 +282,11 @@ function BgpSessionsDataGrid({ sessions }: BgpSessionsDataGridProps) { } return ( - table.getRow(row.id).toggleExpanded()} - > - - - - + /> ) } diff --git a/components/data-grids/certificate-expanded-detail.tsx b/components/data-grids/certificate-expanded-detail.tsx new file mode 100644 index 0000000..a251d52 --- /dev/null +++ b/components/data-grids/certificate-expanded-detail.tsx @@ -0,0 +1,61 @@ +"use client" + +import type { CertificateDto } from "@mmapp/contracts/certificates" +import { cn } from "@/lib/utils" + +function daysLeftBar(days: number, total = 365): number { + if (days <= 0) return 0 + return Math.min(100, Math.round((days / total) * 100)) +} + +function CertificateExpandedDetail({ cert }: { cert: CertificateDto }) { + const pct = daysLeftBar(cert.daysLeft) + + return ( +
+
+

Key size

+

{cert.keySize} bit

+
+
+

Действителен с

+

{cert.validFrom}

+
+
+

SAN / Alt Names

+
+ {cert.sans.length > 0 + ? cert.sans.map((s) => ( + + {s} + + )) + : } +
+
+
+

Trusted

+

+ {cert.trusted ? "Да (доверенный)" : "Нет (не доверенный)"} +

+
+
+
+
+
+
+
+ ) +} + +export { CertificateExpandedDetail, daysLeftBar } diff --git a/components/data-grids/certificates-data-grid.tsx b/components/data-grids/certificates-data-grid.tsx new file mode 100644 index 0000000..2fae844 --- /dev/null +++ b/components/data-grids/certificates-data-grid.tsx @@ -0,0 +1,279 @@ +"use client" + +import { useMemo, type ReactNode } from "react" +import { + type ColumnDef, + getCoreRowModel, + getExpandedRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { CertStatus, Server } from "@/lib/data" +import type { CertificateDto } from "@mmapp/contracts/certificates" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { + CertificateExpandedDetail, + daysLeftBar, +} from "@/components/data-grids/certificate-expanded-detail" +import { EmptyState } from "@/components/empty-state" +import { + BadgeCheckIcon, + ChevronDownIcon, + ChevronRightIcon, + ServerIcon, + ShieldAlertIcon, + ShieldCheckIcon, + ShieldOffIcon, +} from "lucide-react" + +const STATUS_CONFIG: Record< + CertStatus, + { label: string; icon: ReactNode; badge: string; row: string } +> = { + valid: { + label: "Действителен", + icon: , + badge: "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-500/20", + row: "", + }, + expired: { + label: "Истёк", + icon: , + badge: "bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20", + row: "bg-red-500/5", + }, + revoked: { + label: "Отозван", + icon: , + badge: "bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20", + row: "bg-amber-500/5", + }, +} + +function daysLeftColor(days: number): string { + if (days < 0) return "text-red-500" + if (days <= 7) return "text-red-500" + if (days <= 30) return "text-amber-500" + return "text-emerald-600 dark:text-emerald-400" +} + +function CertDaysCell({ cert }: { cert: CertificateDto }) { + const pct = daysLeftBar(cert.daysLeft) + return ( + <> +
+ + {cert.daysLeft < 0 ? `Истёк ${-cert.daysLeft}д назад` : `${cert.daysLeft}д осталось`} + + {cert.validUntil} +
+
+
+
+ + ) +} + +interface CertificatesDataGridProps { + certificates: CertificateDto[] + serverMap: Map + isLoading?: boolean +} + +function CertificatesDataGrid({ certificates, serverMap, isLoading }: CertificatesDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "name", + accessorKey: "name", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const cert = row.original + const cfg = STATUS_CONFIG[cert.status] + const expanded = row.getIsExpanded() + return ( +
+ {expanded ? ( + + ) : ( + + )} +
+
+ {cfg.icon} + + {cert.name} + +
+

+ {cert.commonName} +

+
+
+ ) + }, + meta: { + headerTitle: "Сертификат", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + expandedContent: (row: CertificateDto) => , + }, + }, + { + id: "server", + accessorKey: "serverId", + header: ({ column }) => , + cell: ({ row }) => { + const cert = row.original + const server = serverMap.get(cert.serverId) + return server ? ( +
+ + {server.name} +
+ ) : ( +
+ + {cert.serverName ?? cert.serverId} +
+ ) + }, + meta: { + headerTitle: "Сервер", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "issuedBy", + accessorKey: "issuedBy", + header: ({ column }) => , + cell: ({ row }) => ( +

+ {row.original.issuedBy} +

+ ), + meta: { + headerTitle: "Издатель", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "daysLeft", + accessorKey: "daysLeft", + header: ({ column }) => , + cell: ({ row }) => ( +
+ +
+ ), + meta: { + headerTitle: "Срок", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "usage", + accessorKey: "usage", + header: () => Использование, + enableSorting: false, + cell: ({ row }) => ( +
+ {row.original.usage.map((u) => ( + + {u} + + ))} +
+ ), + meta: { + headerTitle: "Использование", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "status", + accessorKey: "status", + header: ({ column }) => , + cell: ({ row }) => { + const cfg = STATUS_CONFIG[row.original.status] + return ( + + {cfg.label} + + ) + }, + meta: { + headerTitle: "Статус", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [serverMap], + ) + + const table = useReactTable({ + data: certificates, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getExpandedRowModel: getExpandedRowModel(), + getRowId: (row) => row.id, + getRowCanExpand: () => true, + }) + + if (!isLoading && certificates.length === 0) { + return ( + } + title="Нет сертификатов" + description="Выпустите или импортируйте сертификат" + className="border-0 py-12" + /> + ) + } + + return ( + table.getRow(row.id).toggleExpanded()} + /> + ) +} + +export { CertificatesDataGrid, STATUS_CONFIG, type CertificatesDataGridProps } diff --git a/components/data-grids/communities-data-grid.tsx b/components/data-grids/communities-data-grid.tsx new file mode 100644 index 0000000..7971af1 --- /dev/null +++ b/components/data-grids/communities-data-grid.tsx @@ -0,0 +1,272 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { + CheckIcon, + ChevronRightIcon, + CopyIcon, + ServerIcon, + TagIcon, +} from "lucide-react" + +export type CommunityType = "standard" | "no-export" | "no-advertise" | "local-as" | "custom" + +export interface CommunityRow { + id: string + value: string + name: string + description: string + type: CommunityType + filterIds: string[] + serverCount: number + prefixCount: number + action: "permit" | "deny" | "local-pref" | "metric" + actionValue?: number + enabled: boolean +} + +const TYPE_LABELS: Record = { + standard: "Стандартный", + "no-export": "No-export", + "no-advertise": "No-advertise", + "local-as": "Local-AS", + custom: "Кастомный", +} + +const ACTION_LABELS: Record = { + permit: "Permit", + deny: "Deny", + "local-pref": "Local-pref", + metric: "MED/Metric", +} + +const ACTION_COLOR: Record = { + permit: "text-emerald-500", + deny: "text-red-500", + "local-pref": "text-blue-500", + metric: "text-amber-500", +} + +interface CommunitiesDataGridProps { + communities: CommunityRow[] + selectedId?: string | null + copiedValue?: string | null + onSelect: (community: CommunityRow) => void + onCopy: (value: string) => void +} + +function CommunitiesDataGrid({ + communities, + selectedId, + copiedValue, + onSelect, + onCopy, +}: CommunitiesDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "value", + accessorKey: "value", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const c = row.original + return ( +
+ + + {c.value} + + +
+ ) + }, + meta: { + headerTitle: "Community", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "name", + accessorKey: "name", + header: ({ column }) => , + cell: ({ row }) => ( +
+

{row.original.name}

+

{row.original.description}

+
+ ), + meta: { + headerTitle: "Имя / описание", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "type", + accessorKey: "type", + header: ({ column }) => , + cell: ({ row }) => ( + + {TYPE_LABELS[row.original.type]} + + ), + meta: { + headerTitle: "Тип", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "action", + accessorKey: "action", + header: ({ column }) => , + cell: ({ row }) => { + const c = row.original + return ( + + {ACTION_LABELS[c.action]} + {c.actionValue !== undefined ? ` ${c.actionValue}` : ""} + + ) + }, + meta: { + headerTitle: "Действие", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "prefixCount", + accessorKey: "prefixCount", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + + {row.original.prefixCount.toLocaleString("ru-RU")} + + ), + meta: { + headerTitle: "Маршрутов", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + { + id: "serverCount", + accessorKey: "serverCount", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( +
+ + + {row.original.serverCount.toLocaleString("ru-RU")} + +
+ ), + meta: { + headerTitle: "Серверов", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + { + id: "chevron", + header: () => Детали, + enableSorting: false, + cell: () => , + size: 40, + meta: { + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [copiedValue, onCopy], + ) + + const rowSelection = useMemo( + () => (selectedId ? { [selectedId]: true } : {}), + [selectedId], + ) + + const table = useReactTable({ + data: communities, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + enableRowSelection: true, + state: { rowSelection }, + }) + + if (communities.length === 0) { + return ( + } + title="Ничего не найдено" + className="border-0 py-16" + /> + ) + } + + return ( + onSelect(row)} + tableClassNames={{ + headerRow: "border-b border-border", + bodyRow: cn( + "group/row", + "data-[state=selected]:bg-primary/5", + "[&:has([data-community-disabled=true])]:opacity-50", + ), + }} + /> + ) +} + +export { + CommunitiesDataGrid, + type CommunitiesDataGridProps, + TYPE_LABELS, + ACTION_LABELS, + ACTION_COLOR, +} diff --git a/components/data-grids/compact-data-grid.tsx b/components/data-grids/compact-data-grid.tsx new file mode 100644 index 0000000..db1cb4f --- /dev/null +++ b/components/data-grids/compact-data-grid.tsx @@ -0,0 +1,116 @@ +"use client" + +import { useMemo, type ReactNode } from "react" +import { + type ColumnDef, + getCoreRowModel, + getExpandedRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { InboxIcon } from "lucide-react" + +export interface CompactDataGridColumn { + id: string + header: string + accessorKey?: keyof T & string + cell?: (row: T) => ReactNode + enableSorting?: boolean + headerClassName?: string + cellClassName?: string +} + +interface CompactDataGridProps { + data: T[] + columns: CompactDataGridColumn[] + isLoading?: boolean + emptyTitle?: string + emptyDescription?: string + onRowClick?: (row: T) => void + getExpandedContent?: (row: T) => ReactNode + compact?: boolean +} + +function CompactDataGrid({ + data, + columns, + isLoading, + emptyTitle = "Нет записей", + emptyDescription, + onRowClick, + getExpandedContent, + compact = false, +}: CompactDataGridProps) { + const pad = compact ? "py-2" : DATA_GRID_CELL_PAD + const padFirst = compact ? "pl-4 py-2" : DATA_GRID_CELL_PAD_FIRST + const padLast = compact ? "pr-4 py-2" : DATA_GRID_CELL_PAD_LAST + + const columnDefs = useMemo[]>( + () => + columns.map((col, index) => ({ + id: col.id, + accessorKey: col.accessorKey ?? col.id, + header: ({ column }) => ( + + ), + cell: ({ row }) => (col.cell ? col.cell(row.original) : String(row.getValue(col.id) ?? "—")), + enableSorting: col.enableSorting !== false, + meta: { + headerTitle: col.header, + headerClassName: + col.headerClassName ?? + (index === 0 ? padFirst : index === columns.length - 1 ? padLast : pad), + cellClassName: + col.cellClassName ?? + (index === 0 ? padFirst : index === columns.length - 1 ? padLast : pad), + ...(getExpandedContent && index === 0 + ? { expandedContent: getExpandedContent } + : {}), + }, + })), + [columns, getExpandedContent, pad, padFirst, padLast], + ) + + const table = useReactTable({ + data, + columns: columnDefs, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + ...(getExpandedContent ? { getExpandedRowModel: getExpandedRowModel() } : {}), + getRowId: (row) => row.id, + ...(getExpandedContent ? { getRowCanExpand: () => true } : {}), + }) + + return ( + table.getRow(row.id).toggleExpanded() + : undefined) + } + emptyMessage={ + } + title={emptyTitle} + description={emptyDescription} + className="border-0 py-10" + /> + } + /> + ) +} + +export { CompactDataGrid, type CompactDataGridProps } diff --git a/components/data-grids/dashboard-active-probes-data-grid.tsx b/components/data-grids/dashboard-active-probes-data-grid.tsx new file mode 100644 index 0000000..bb401d8 --- /dev/null +++ b/components/data-grids/dashboard-active-probes-data-grid.tsx @@ -0,0 +1,191 @@ +"use client" + +import { useMemo } from "react" +import type { PingProbe, Server, ServerType } from "@/lib/data" +import { Flag } from "@/components/flag" +import { StatusBadge } from "@/components/status-badge" +import { StatusDot } from "@/components/status-dot" +import { Sparkline } from "@/components/sparkline" +import { CompactDataGrid, type CompactDataGridColumn } from "@/components/data-grids/compact-data-grid" +import { cn } from "@/lib/utils" +import { FilterIcon } from "lucide-react" + +function formatLossPct(loss: number): string { + if (!Number.isFinite(loss)) return "—" + return Number.isInteger(loss) ? `${loss}%` : `${loss.toFixed(1)}%` +} + +function TypeChip({ type }: { type: ServerType }) { + return ( + + {type === "jump-host" ? "JH" : type === "home-router" ? "HR" : "EN"} + + ) +} + +function ProbeSourceCell({ probe, catalog }: { probe: PingProbe; catalog: Server[] }) { + const srv = catalog.find((s) => s.id === probe.srcServerId) + const iface = (probe.srcInterface ?? "").trim() || "auto" + + if (!srv) { + return ( +
+ + + +
+

+ Сервер {probe.srcServerId} +

+

+ {iface} +

+
+
+ ) + } + + return ( +
+ + + +
+ +
+
+ {srv.name} + +
+

+ {iface} + {srv.site && srv.site !== "—" && ( + · {srv.site} + )} +

+
+
+
+ ) +} + +interface DashboardActiveProbesDataGridProps { + probes: PingProbe[] + catalog: Server[] + isLoading?: boolean + emptyTitle?: string + emptyDescription?: string +} + +function DashboardActiveProbesDataGrid({ + probes, + catalog, + isLoading, + emptyTitle = "Нет активных проб", + emptyDescription, +}: DashboardActiveProbesDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "source", + header: "Источник", + enableSorting: false, + cell: (p) => , + }, + { + id: "name", + header: "Проба", + accessorKey: "name", + cell: (p) => {p.name}, + }, + { + id: "target", + header: "Цель", + accessorKey: "target", + cell: (p) => {p.target}, + }, + { + id: "filter", + header: "Фильтр", + accessorKey: "filter", + enableSorting: false, + cell: (p) => ( + + + {p.filter} + + ), + }, + { + id: "rtt", + header: "RTT", + headerClassName: "text-right", + cellClassName: "font-mono text-right", + cell: (p) => (p.rtt == null ? "—" : `${p.rtt} мс`), + }, + { + id: "loss", + header: "Потери", + headerClassName: "text-right", + cellClassName: "font-mono text-right", + cell: (p) => ( + 5 ? "text-red-500" : p.loss > 0 ? "text-amber-500" : "text-muted-foreground", + )} + > + {formatLossPct(p.loss)} + + ), + }, + { + id: "series", + header: "60с", + enableSorting: false, + headerClassName: "w-36", + cell: (p) => { + const sparkColor = + p.status === "down" + ? "hsl(0 84% 60%)" + : p.status === "warn" + ? "hsl(32 94% 44%)" + : "hsl(142 76% 36%)" + return + }, + }, + { + id: "status", + header: "Статус", + enableSorting: false, + cell: (p) => ( + + ), + }, + ], + [catalog], + ) + + return ( + + ) +} + +export { DashboardActiveProbesDataGrid, type DashboardActiveProbesDataGridProps } diff --git a/components/data-grids/data-collection-scheduler-data-grid.tsx b/components/data-grids/data-collection-scheduler-data-grid.tsx new file mode 100644 index 0000000..c34b14d --- /dev/null +++ b/components/data-grids/data-collection-scheduler-data-grid.tsx @@ -0,0 +1,219 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { SchedulerJobStatusDto } from "@/lib/scheduler-settings" +import { FormToggle } from "@/components/form-kit" +import { Badge } from "@/components/ui/badge" +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { cn } from "@/lib/utils" +import { RefreshCwIcon } from "lucide-react" + +export interface SchedulerJobGridRow { + id: string + jobKey: string + label: string + description: string + fixedSchedule: boolean + enabled: boolean + intervalValue: string + intervalReadOnly: boolean + intervalDisabled: boolean + defaultInterval: number + job?: SchedulerJobStatusDto + onEnabledChange?: (enabled: boolean) => void + onIntervalChange: (value: string) => void + onRunNow: () => void + runNowLoading: boolean + saveBusy: boolean +} + +interface DataCollectionSchedulerDataGridProps { + rows: SchedulerJobGridRow[] +} + +function DataCollectionSchedulerDataGrid({ rows }: DataCollectionSchedulerDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "task", + accessorKey: "label", + header: () => Задача, + enableSorting: false, + cell: ({ row }) => ( +
+ {row.original.label} +

+ {row.original.description} +

+

{row.original.jobKey}

+
+ ), + meta: { + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: cn(DATA_GRID_CELL_PAD_FIRST, "align-top"), + }, + }, + { + id: "enabled", + accessorKey: "enabled", + header: () => ( + Вкл + ), + enableSorting: false, + cell: ({ row }) => { + const { fixedSchedule, enabled, saveBusy, onEnabledChange } = row.original + return ( +
+ + { + if (fixedSchedule || saveBusy) return + onEnabledChange?.(v) + }} + /> + +
+ ) + }, + size: 56, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: cn(DATA_GRID_CELL_PAD, "align-top") }, + }, + { + id: "interval", + accessorKey: "intervalValue", + header: () => Интервал (с), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + return ( +
+ r.onIntervalChange(e.target.value)} + className="h-8 text-sm tabular-nums" + inputMode="numeric" + readOnly={r.intervalReadOnly} + disabled={r.intervalDisabled} + placeholder={String(r.defaultInterval)} + /> +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: cn(DATA_GRID_CELL_PAD, "align-top") }, + }, + { + id: "lastRun", + accessorFn: (row) => row.job?.lastFinishedAt ?? "", + header: () => Последний прогон, + enableSorting: false, + cell: ({ row }) => { + const j = row.original.job + return ( +
+ {j?.lastFinishedAt ? new Date(j.lastFinishedAt).toLocaleString("ru-RU") : "—"} + {j?.lastDurationMs != null && ( + {j.lastDurationMs} мс + )} +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: cn(DATA_GRID_CELL_PAD, "align-top") }, + }, + { + id: "status", + accessorFn: (row) => row.job?.lastStatus ?? "", + header: () => Статус, + enableSorting: false, + cell: ({ row }) => { + const j = row.original.job + return ( +
+ {j?.running ? ( + + выполняется + + ) : null} + {j?.lastStatus ? ( + + {j.lastStatus} + + ) : null} + {j?.lastError ? ( + + {j.lastError} + + ) : null} +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: cn(DATA_GRID_CELL_PAD, "align-top") }, + }, + { + id: "runNow", + header: () => ( + Сейчас + ), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + return ( +
+ +
+ ) + }, + meta: { + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: cn(DATA_GRID_CELL_PAD_LAST, "align-top"), + }, + }, + ], + [], + ) + + const table = useReactTable({ + data: rows, + columns, + getCoreRowModel: getCoreRowModel(), + getRowId: (row) => row.id, + }) + + return ( + + ) +} + +export { DataCollectionSchedulerDataGrid, type DataCollectionSchedulerDataGridProps } diff --git a/components/data-grids/domains-data-grid.tsx b/components/data-grids/domains-data-grid.tsx new file mode 100644 index 0000000..5e94388 --- /dev/null +++ b/components/data-grids/domains-data-grid.tsx @@ -0,0 +1,155 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { Domain } from "@/lib/data" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { FilterIcon, GlobeIcon } from "lucide-react" + +interface DomainsDataGridProps { + domains: Domain[] + isLoading?: boolean + pagination?: boolean +} + +function DomainsDataGrid({ domains, isLoading, pagination = false }: DomainsDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "domain", + accessorKey: "domain", + header: ({ column }) => , + cell: ({ row }) => {row.original.domain}, + meta: { + headerTitle: "Домен", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "resolvedIp", + accessorKey: "resolvedIp", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.resolvedIp} + ), + meta: { + headerTitle: "Resolved IP", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "asn", + accessorKey: "asn", + header: ({ column }) => , + cell: ({ row }) => {row.original.asn}, + meta: { + headerTitle: "ASN", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "purpose", + accessorKey: "purpose", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.purpose} + ), + meta: { + headerTitle: "Назначение", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "filter", + accessorKey: "filter", + header: ({ column }) => , + cell: ({ row }) => ( + + + {row.original.filter} + + ), + meta: { + headerTitle: "Фильтр", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "updated", + accessorKey: "updated", + header: ({ column }) => , + cell: ({ row }) => {row.original.updated}, + meta: { + headerTitle: "Обновлён", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "enabled", + accessorKey: "enabled", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.enabled ? "Активен" : "Отключён"} + + ), + meta: { + headerTitle: "Статус", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [], + ) + + const table = useReactTable({ + data: domains, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + ...(pagination ? { getPaginationRowModel: getPaginationRowModel() } : {}), + getRowId: (row) => row.id, + }) + + return ( + } + title="Нет доменов" + description="Добавьте домены или импортируйте каталог" + className="border-0 py-12" + /> + } + /> + ) +} + +export { DomainsDataGrid, type DomainsDataGridProps } diff --git a/components/data-grids/filters-data-grid.tsx b/components/data-grids/filters-data-grid.tsx new file mode 100644 index 0000000..a7d35e0 --- /dev/null +++ b/components/data-grids/filters-data-grid.tsx @@ -0,0 +1,457 @@ +"use client" + +import { useMemo, useState } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { FilterRule, GreTunnel, Server } from "@/lib/data" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { Tooltip, TooltipContent, TooltipTrigger } from "@/components/ui/tooltip" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { + AlertCircleIcon, + AlertTriangleIcon, + CheckCircle2Icon, + ChevronDownIcon, + ChevronUpIcon, + CircleDashedIcon, + PencilIcon, + RouteIcon, + StarIcon, + TrashIcon, + XCircleIcon, + FilterIcon, +} from "lucide-react" + +export type FilterRouterSyncStatus = "synced" | "drift" | "missing" + +export interface RecursiveRouteLite { + id: string + dstAddress: string + gateway: string + distance: number + routingTable: string + comment: string + disabled: boolean +} + +function RouterSyncMarker({ + status, +}: { + status: FilterRouterSyncStatus | null | "skip" +}) { + if (status === "skip") { + return + } + const icon = + status === "synced" + ? + : status === "drift" + ? + : status === "missing" + ? + : + const title = + status === "synced" + ? "Совпадает с цепочкой bgp-in на MikroTik" + : status === "drift" + ? "В БД и на роутере разное действие (gateway, blackhole или out-interface)" + : status === "missing" + ? "Эта community не найдена в правиле bgp-in на роутере" + : "Не проверено — нажмите «Сверить с роутером»" + return ( + + + {icon} + + + {title} + + + ) +} + +function innerIpToGateway(ip: string) { + return ip.split("/")[0] +} + +function gatewayFromRecursiveDst(dstAddress: string) { + return innerIpToGateway((dstAddress ?? "").trim()) +} + +function pickRecursiveRouteByGatewayHop(routes: RecursiveRouteLite[], hopIp: string) { + const hop = hopIp.trim() + if (!hop) return undefined + const candidates = routes.filter( + (r) => !r.disabled && gatewayFromRecursiveDst(r.dstAddress) === hop, + ) + if (candidates.length === 0) return undefined + return candidates.reduce((a, b) => (a.distance <= b.distance ? a : b)) +} + +function isRecursiveGatewayRef(ref: string) { + return ref.startsWith("rec:") +} + +function FilterGatewayCell({ + rule, + tunnelsList, + serversList, + recursiveRoutes, +}: { + rule: FilterRule + tunnelsList: GreTunnel[] + serversList: Server[] + recursiveRoutes: RecursiveRouteLite[] +}) { + const isBlackhole = rule.action === "blackhole" + const isRecRef = !isBlackhole && isRecursiveGatewayRef(rule.gatewayTunnelId) + const recRowByRef = isRecRef + ? recursiveRoutes.find((r) => r.id === rule.gatewayTunnelId.slice(4)) + : undefined + const recRowByHop = + !isBlackhole && !(rule.gatewayTunnelId ?? "").trim() && rule.gateway.trim() + ? pickRecursiveRouteByGatewayHop(recursiveRoutes, rule.gateway) + : undefined + const recRow = recRowByRef ?? recRowByHop + const treatAsRecursive = !isBlackhole && (isRecRef || !!recRowByHop) + const tunnel = + !isBlackhole && !treatAsRecursive + ? tunnelsList.find((t) => t.id === rule.gatewayTunnelId) + : undefined + const remoteSrv = tunnel ? serversList.find((s) => s.host === tunnel.remoteAddress) : undefined + + if (isBlackhole) { + return ( +
+ + type=blackhole +
+ ) + } + + return ( +
+
+ + {treatAsRecursive ? ( + <> + + + {recRow ? gatewayFromRecursiveDst(recRow.dstAddress) : rule.gateway} + + + recursive + + + ) : ( + <> + {remoteSrv && } + {rule.gateway} + + )} +
+ {treatAsRecursive ? ( + recRow ? ( +

{recRow.dstAddress}

+ ) : isRecRef ? ( +

+ рекурсивный маршрут (нет строки в списке) +

+ ) : null + ) : tunnel ? ( +

{tunnel.name}

+ ) : null} +
+ ) +} + +function FilterRowActions({ + onEdit, + onDelete, +}: { + onEdit: () => void + onDelete: () => void +}) { + const [confirmDel, setConfirmDel] = useState(false) + return ( +
+ + +
+ ) +} + +interface FiltersDataGridProps { + rules: FilterRule[] + tunnelsList: GreTunnel[] + serversList: Server[] + communityNameMap: Record + recursiveRoutes: RecursiveRouteLite[] + routerSyncByCommunity?: Record | null + isLive?: boolean + enableSorting?: boolean + onEdit: (rule: FilterRule) => void + onDelete: (id: string) => void + onMoveUp: (id: string) => void + onMoveDown: (id: string) => void +} + +function FiltersDataGrid({ + rules, + tunnelsList, + serversList, + communityNameMap, + recursiveRoutes, + routerSyncByCommunity, + isLive, + enableSorting = false, + onEdit, + onDelete, + onMoveUp, + onMoveDown, +}: FiltersDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "priority", + header: () => #, + enableSorting: false, + cell: ({ row, table }) => { + const isLast = row.index === table.getRowModel().rows.length - 1 + return ( +
+ {isLast ? ( + + ) : ( + {row.index + 1} + )} +
+ ) + }, + size: 28, + meta: { headerClassName: DATA_GRID_CELL_PAD_FIRST, cellClassName: DATA_GRID_CELL_PAD_FIRST }, + }, + { + id: "reorder", + header: () => Порядок, + enableSorting: false, + cell: ({ row, table }) => { + const isLast = row.index === table.getRowModel().rows.length - 1 + return ( +
+ + +
+ ) + }, + size: 28, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "routerSync", + header: () => ( + + + MT + + + Совпадение с MikroTik (bgp-in) + + + ), + enableSorting: false, + cell: ({ row }) => ( + + ), + size: 32, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "community", + accessorKey: "community", + header: ({ column }) => , + enableSorting, + cell: ({ row }) => { + const rule = row.original + const isBlackhole = rule.action === "blackhole" + const communityName = communityNameMap[rule.community] ?? rule.communityName + return ( +
+
+ + {rule.community} + + {isBlackhole && ( + + ⊘ blackhole + + )} +
+ {communityName && ( +

{communityName}

+ )} +
+ ) + }, + meta: { headerTitle: "Community", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "gateway", + accessorKey: "gateway", + header: ({ column }) => , + enableSorting, + cell: ({ row }) => ( + + ), + meta: { headerTitle: "Gateway", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "description", + accessorKey: "description", + header: ({ column }) => , + enableSorting, + cell: ({ row }) => ( +

{row.original.description || "—"}

+ ), + meta: { headerTitle: "Описание", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "actions", + header: () => Действия, + enableSorting: false, + cell: ({ row }) => ( + onEdit(row.original)} + onDelete={() => onDelete(row.original.id)} + /> + ), + size: 64, + meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, + }, + ], + [ + communityNameMap, + enableSorting, + isLive, + onDelete, + onEdit, + onMoveDown, + onMoveUp, + recursiveRoutes, + routerSyncByCommunity, + serversList, + tunnelsList, + ], + ) + + const table = useReactTable({ + data: rules, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (rules.length === 0) { + return ( + } + title="Ничего не найдено" + className="border-0 py-16" + /> + ) + } + + return ( + <> + +
+ + Последнее правило имеет наивысший приоритет в RouterOS +
+ + ) +} + +export { FiltersDataGrid, RouterSyncMarker, type FiltersDataGridProps } diff --git a/components/data-grids/firewall-rules-data-grid.tsx b/components/data-grids/firewall-rules-data-grid.tsx new file mode 100644 index 0000000..7a5aa8e --- /dev/null +++ b/components/data-grids/firewall-rules-data-grid.tsx @@ -0,0 +1,311 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { FirewallRule } from "@/lib/data" +import { FormToggle } from "@/components/form-kit" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { + CopyIcon, + MoreHorizontalIcon, + PencilIcon, + PowerIcon, + ShieldOffIcon, + Trash2Icon, +} from "lucide-react" + +const ACTION_STYLES: Record = { + accept: "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-500/20", + drop: "bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20", + reject: "bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20", + masquerade: "bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-500/20", + "mark-routing": "bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20", + "mark-conn": "bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20", + "fasttrack-connection": "bg-violet-500/10 text-violet-600 dark:text-violet-400 border-violet-500/20", + "dst-nat": "bg-sky-500/10 text-sky-600 dark:text-sky-400 border-sky-500/20", + "src-nat": "bg-sky-500/10 text-sky-600 dark:text-sky-400 border-sky-500/20", + "add-src-to-address-list": "bg-orange-500/10 text-orange-600 dark:text-orange-400 border-orange-500/20", +} + +const CHAIN_STYLES: Record = { + forward: "bg-foreground/5 text-foreground/70", + input: "bg-violet-500/10 text-violet-600 dark:text-violet-400", + output: "bg-sky-500/10 text-sky-600 dark:text-sky-400", + srcnat: "bg-blue-500/10 text-blue-600 dark:text-blue-400", + dstnat: "bg-blue-500/10 text-blue-600 dark:text-blue-400", + prerouting: "bg-amber-500/10 text-amber-600 dark:text-amber-400", + postrouting: "bg-amber-500/10 text-amber-600 dark:text-amber-400", + "ip6-input": "bg-violet-500/10 text-violet-600 dark:text-violet-400", + "ip6-forward": "bg-foreground/5 text-foreground/70", + "ip6-output": "bg-sky-500/10 text-sky-600 dark:text-sky-400", +} + +function fmtHits(n: number): string { + if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)}М` + if (n >= 1_000) return `${(n / 1_000).toFixed(0)}к` + return String(n) +} + +function ActionBadge({ action }: { action: string }) { + const cls = ACTION_STYLES[action] ?? "bg-muted text-muted-foreground border-border" + return ( + + {action} + + ) +} + +function ChainBadge({ chain }: { chain: string }) { + const cls = CHAIN_STYLES[chain] ?? "bg-muted text-muted-foreground" + return ( + + {chain} + + ) +} + +interface FirewallRulesDataGridProps { + rules: FirewallRule[] + onToggle: (id: string) => void + onEdit: (rule: FirewallRule) => void +} + +function FirewallRulesDataGrid({ rules, onToggle, onEdit }: FirewallRulesDataGridProps) { + const indexedRules = useMemo( + () => rules.map((rule, index) => ({ ...rule, _index: index + 1 })), + [rules], + ) + + const columns = useMemo[]>( + () => [ + { + id: "index", + accessorKey: "_index", + header: () => #, + enableSorting: false, + cell: ({ row }) => ( + + {row.original._index} + + ), + size: 48, + meta: { + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "chain", + accessorKey: "chain", + header: ({ column }) => , + cell: ({ row }) => , + meta: { headerTitle: "Цепочка", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "action", + accessorKey: "action", + header: ({ column }) => , + cell: ({ row }) => , + meta: { headerTitle: "Действие", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "src", + accessorKey: "src", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.src || "any"} + + ), + meta: { headerTitle: "Источник", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "dst", + accessorKey: "dst", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.dst || "any"} + + ), + meta: { headerTitle: "Назначение", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "proto", + accessorKey: "proto", + header: ({ column }) => , + cell: ({ row }) => {row.original.proto}, + meta: { headerTitle: "Протокол", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "port", + accessorKey: "port", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.port || "—"} + ), + meta: { headerTitle: "Порт", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "iface", + accessorKey: "iface", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.iface || "—"} + ), + meta: { headerTitle: "Интерфейс", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "hits", + accessorKey: "hits", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const hits = row.original.hits + return ( + 1_000_000 + ? "text-emerald-600 dark:text-emerald-400 font-semibold" + : hits > 10_000 + ? "text-foreground" + : "text-muted-foreground", + )} + > + {fmtHits(hits)} + + ) + }, + meta: { + headerTitle: "Пакетов", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + { + id: "enabled", + accessorKey: "enabled", + header: () => Вкл, + enableSorting: false, + cell: ({ row }) => ( +
e.stopPropagation()}> + onToggle(row.original.id)} /> +
+ ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "actions", + header: () => Действия, + enableSorting: false, + cell: ({ row }) => { + const r = row.original + return ( +
e.stopPropagation()}> + + + + + } + /> + + onEdit(r)}> + + Редактировать + + + + Дублировать + + + onToggle(r.id)}> + + {r.enabled ? "Отключить" : "Включить"} + + + + + Удалить правило + + + +
+ ) + }, + size: 56, + meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, + }, + ], + [onEdit, onToggle], + ) + + const table = useReactTable({ + data: indexedRules, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (rules.length === 0) { + return ( + } + title="Правила не найдены" + description="Попробуйте изменить фильтр или добавьте новое правило" + className="border-0 py-16" + /> + ) + } + + return ( + + ) +} + +export { FirewallRulesDataGrid, type FirewallRulesDataGridProps, ActionBadge, ChainBadge } diff --git a/components/data-grids/firewall-scenario-rules-data-grid.tsx b/components/data-grids/firewall-scenario-rules-data-grid.tsx new file mode 100644 index 0000000..b280f8f --- /dev/null +++ b/components/data-grids/firewall-scenario-rules-data-grid.tsx @@ -0,0 +1,216 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table" +import { ActionBadge, ChainBadge } from "@/components/data-grids/firewall-rules-data-grid" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { cn } from "@/lib/utils" +import { PowerIcon, Trash2Icon } from "lucide-react" + +function ScenarioCell({ enabled, children }: { enabled: boolean; children: React.ReactNode }) { + return
{children}
+} + +export interface ScenarioRuleRow { + id: string + chain: string + action: string + proto: string + src: string + dst: string + port: string + iface: string + comment: string + enabled: boolean +} + +interface FirewallScenarioRulesDataGridProps { + rules: ScenarioRuleRow[] + onToggleEnabled: (id: string) => void + onMoveUp: (id: string) => void + onMoveDown: (id: string) => void + onRemove: (id: string) => void +} + +function FirewallScenarioRulesDataGrid({ + rules, + onToggleEnabled, + onMoveUp, + onMoveDown, + onRemove, +}: FirewallScenarioRulesDataGridProps) { + const indexedRules = useMemo( + () => rules.map((rule, index) => ({ ...rule, _index: index + 1 })), + [rules], + ) + + const columns = useMemo[]>( + () => [ + { + id: "index", + accessorKey: "_index", + header: () => #, + enableSorting: false, + cell: ({ row }) => ( + + {row.original._index} + + ), + size: 40, + meta: { + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "chain", + accessorKey: "chain", + header: () => Цепочка, + enableSorting: false, + cell: ({ row }) => ( + + + + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "action", + accessorKey: "action", + header: () => Действие, + enableSorting: false, + cell: ({ row }) => , + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "src", + accessorKey: "src", + header: () => Src, + enableSorting: false, + cell: ({ row }) => ( + + {row.original.src || "any"} + + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "dst", + accessorKey: "dst", + header: () => Dst, + enableSorting: false, + cell: ({ row }) => ( + + {row.original.dst || "any"} + + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "port", + accessorKey: "port", + header: () => Порт, + enableSorting: false, + cell: ({ row }) => ( + {row.original.port || "—"} + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "iface", + accessorKey: "iface", + header: () => Iface, + enableSorting: false, + cell: ({ row }) => ( + {row.original.iface || "—"} + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "comment", + accessorKey: "comment", + header: () => Комментарий, + enableSorting: false, + cell: ({ row }) => ( + + {row.original.comment || "—"} + + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "actions", + header: () => null, + enableSorting: false, + cell: ({ row }) => { + const index = row.original._index - 1 + return ( +
+ + + + +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, + }, + ], + [onMoveDown, onMoveUp, onRemove, onToggleEnabled, rules.length], + ) + + const table = useReactTable({ + data: indexedRules, + columns, + getCoreRowModel: getCoreRowModel(), + getRowId: (row) => row.id, + }) + + return ( + + ) +} + +export { FirewallScenarioRulesDataGrid, type FirewallScenarioRulesDataGridProps } diff --git a/components/data-grids/gre-pools-data-grid.tsx b/components/data-grids/gre-pools-data-grid.tsx new file mode 100644 index 0000000..90683af --- /dev/null +++ b/components/data-grids/gre-pools-data-grid.tsx @@ -0,0 +1,202 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { GrePool } from "@/lib/data" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { LayersIcon, MoreHorizontalIcon, PencilIcon, Trash2Icon } from "lucide-react" + +interface GrePoolsDataGridProps { + pools: GrePool[] +} + +function GrePoolsDataGrid({ pools }: GrePoolsDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "name", + accessorKey: "name", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + {row.original.name} + ), + meta: { + headerTitle: "Имя пула", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "cidr", + accessorKey: "cidr", + header: ({ column }) => , + cell: ({ row }) => {row.original.cidr}, + meta: { + headerTitle: "Диапазон CIDR", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "allocated", + accessorKey: "allocated", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + {row.original.allocated} + ), + meta: { + headerTitle: "Назначено /30", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + { + id: "available", + header: () => ( + + Доступно /30 + + ), + enableSorting: false, + cell: ({ row }) => { + const p = row.original + return ( + + {p.total - p.allocated} + + ) + }, + meta: { + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + { + id: "usage", + header: () => Использование, + enableSorting: false, + cell: ({ row }) => { + const pool = row.original + const pct = pool.total > 0 ? Math.round((pool.allocated / pool.total) * 100) : 0 + return ( +
+
+
80 ? "bg-amber-500" : "bg-emerald-500")} + style={{ width: `${pct}%` }} + /> +
+ {pct}% +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "comment", + accessorKey: "comment", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.comment} + ), + meta: { + headerTitle: "Назначение", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "actions", + header: () => Действия, + enableSorting: false, + cell: () => ( +
+ + + + + } + /> + + + Редактировать + + + + Удалить пул + + + +
+ ), + size: 56, + meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, + }, + ], + [], + ) + + const table = useReactTable({ + data: pools, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (pools.length === 0) { + return ( + } + title="Нет IP-пулов" + className="border-0 py-16" + /> + ) + } + + return ( + + ) +} + +export { GrePoolsDataGrid, type GrePoolsDataGridProps } diff --git a/components/data-grids/gre-tunnels-data-grid.tsx b/components/data-grids/gre-tunnels-data-grid.tsx new file mode 100644 index 0000000..225e33f --- /dev/null +++ b/components/data-grids/gre-tunnels-data-grid.tsx @@ -0,0 +1,352 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { + GrePool, + GreTunnel, + GreStatus, + IpsecEncAlg, + IpsecAuthAlg, + IpsecDhGroup, + IkeVersion, + Server, +} from "@/lib/data" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuGroup, + DropdownMenuItem, + DropdownMenuLabel, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { + CodeXmlIcon, + LockIcon, + LockOpenIcon, + MoreHorizontalIcon, + NetworkIcon, + PencilIcon, + PowerIcon, + Trash2Icon, +} from "lucide-react" + +const ENC_LABELS: Record = { + "aes-128": "AES-128", + "aes-192": "AES-192", + "aes-256": "AES-256", +} +const AUTH_LABELS: Record = { + sha1: "SHA-1", + sha256: "SHA-256", + sha512: "SHA-512", +} +const DH_LABELS: Record = { + modp1024: "DH-2 (1024)", + modp2048: "DH-14 (2048)", + modp4096: "DH-16 (4096)", + ecp256: "ECP-256", + ecp384: "ECP-384", + ecp521: "ECP-521", +} +const IKE_LABELS: Record = { ikev1: "IKEv1", ikev2: "IKEv2" } + +const STATUS_MAP: Record = { + up: { label: "Up", dot: "bg-emerald-500" }, + degraded: { label: "Degraded", dot: "bg-amber-500" }, + down: { label: "Down", dot: "bg-red-500" }, +} + +function TunnelStatus({ status }: { status: GreStatus }) { + const s = STATUS_MAP[status] + return ( + + + {s.label} + + ) +} + +function IpsecBadge({ secured }: { secured: boolean }) { + return secured ? ( + + IPsec + + ) : ( + + Открытый + + ) +} + +interface GreTunnelsDataGridProps { + tunnels: GreTunnel[] + servers: Server[] + pools: GrePool[] + onCodePreview: (tunnel: GreTunnel) => void +} + +function GreTunnelsDataGrid({ + tunnels, + servers, + pools, + onCodePreview, +}: GreTunnelsDataGridProps) { + const serverMap = useMemo(() => new Map(servers.map((s) => [s.id, s])), [servers]) + const poolMap = useMemo(() => new Map(pools.map((p) => [p.id, p])), [pools]) + + const columns = useMemo[]>( + () => [ + { + id: "name", + accessorKey: "name", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const t = row.original + const srv = serverMap.get(t.serverId) + return ( +
+

{t.name}

+

+ {srv && } + {srv?.name ?? t.serverId} +

+
+ ) + }, + meta: { + headerTitle: "Интерфейс / Сервер", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "endpoints", + header: () => Эндпоинты, + enableSorting: false, + cell: ({ row }) => { + const t = row.original + return ( +
+

+ {t.localAddress === "0.0.0.0" ? ( + авто + ) : ( + t.localAddress + )} +

+

→ {t.remoteAddress}

+
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "innerIp", + header: () => Внутренний IP, + enableSorting: false, + cell: ({ row }) => { + const t = row.original + return ( +
+

{t.localInnerIp}

+

{t.remoteInnerIp}

+
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "pool", + accessorKey: "poolId", + header: ({ column }) => , + cell: ({ row }) => ( + + {poolMap.get(row.original.poolId)?.name ?? "—"} + + ), + meta: { headerTitle: "Пул", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "ipsec", + header: () => IPsec, + enableSorting: false, + cell: ({ row }) => , + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "encryption", + header: () => Шифрование, + enableSorting: false, + cell: ({ row }) => { + const t = row.original + if (!t.ipsec) return + return ( +
+ + {ENC_LABELS[t.ipsec.encAlg]} / {AUTH_LABELS[t.ipsec.authAlg]} + + + {DH_LABELS[t.ipsec.dhGroup].split(" ")[0]} · {IKE_LABELS[t.ipsec.ikeVersion]} + {t.ipsec.pfs && " · PFS"} + +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "mtu", + accessorKey: "mtu", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.mtu} + ), + meta: { + headerTitle: "MTU", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "keepalive", + header: () => Keepalive, + enableSorting: false, + cell: ({ row }) => { + const t = row.original + return ( + + {t.keepaliveInterval === 0 ? "откл." : `${t.keepaliveInterval}с / ${t.keepaliveRetries}`} + + ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "status", + accessorKey: "status", + header: ({ column }) => , + cell: ({ row }) => , + meta: { headerTitle: "Статус", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "actions", + header: () => Действия, + enableSorting: false, + cell: ({ row }) => { + const t = row.original + return ( +
+ + + + + + } + /> + + + {t.name} + + + onCodePreview(t)}> + Просмотр кода + + + Редактировать + + + + + {t.enabled ? "Выключить" : "Включить"} + + + + Удалить туннель + + + +
+ ) + }, + size: 88, + meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, + }, + ], + [onCodePreview, poolMap, serverMap], + ) + + const table = useReactTable({ + data: tunnels, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row, index) => `${row.id}:${row.serverId}:${row.name}:${index}`, + }) + + if (tunnels.length === 0) { + return ( + } + title="Нет GRE-туннелей" + description="Измените фильтр или добавьте туннель" + className="border-0 py-16" + /> + ) + } + + return ( + + ) +} + +export { GreTunnelsDataGrid, type GreTunnelsDataGridProps } diff --git a/components/data-grids/ip-ranges-data-grid.tsx b/components/data-grids/ip-ranges-data-grid.tsx new file mode 100644 index 0000000..f9eba72 --- /dev/null +++ b/components/data-grids/ip-ranges-data-grid.tsx @@ -0,0 +1,157 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getPaginationRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { IpRange } from "@/lib/data" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { FilterIcon, NetworkIcon } from "lucide-react" + +interface IpRangesDataGridProps { + ipRanges: IpRange[] + isLoading?: boolean + pagination?: boolean +} + +function IpRangesDataGrid({ ipRanges, isLoading, pagination = false }: IpRangesDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "cidr", + accessorKey: "cidr", + header: ({ column }) => , + cell: ({ row }) => {row.original.cidr}, + meta: { + headerTitle: "CIDR", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "asn", + accessorKey: "asn", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.asn} + ), + meta: { + headerTitle: "ASN", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "country", + accessorKey: "country", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.country} + ), + meta: { + headerTitle: "Страна", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "purpose", + accessorKey: "purpose", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.purpose} + ), + meta: { + headerTitle: "Назначение", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "filter", + accessorKey: "filter", + header: ({ column }) => , + cell: ({ row }) => ( + + + {row.original.filter} + + ), + meta: { + headerTitle: "Фильтр", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "updated", + accessorKey: "updated", + header: ({ column }) => , + cell: ({ row }) => {row.original.updated}, + meta: { + headerTitle: "Обновлён", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "enabled", + accessorKey: "enabled", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.enabled ? "Активен" : "Отключён"} + + ), + meta: { + headerTitle: "Статус", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [], + ) + + const table = useReactTable({ + data: ipRanges, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + ...(pagination ? { getPaginationRowModel: getPaginationRowModel() } : {}), + getRowId: (row) => row.id, + }) + + return ( + } + title="Нет IP-диапазонов" + description="Добавьте CIDR-блоки или импортируйте каталог" + className="border-0 py-12" + /> + } + /> + ) +} + +export { IpRangesDataGrid, type IpRangesDataGridProps } diff --git a/components/data-grids/ospf-bfd-data-grid.tsx b/components/data-grids/ospf-bfd-data-grid.tsx new file mode 100644 index 0000000..6022df0 --- /dev/null +++ b/components/data-grids/ospf-bfd-data-grid.tsx @@ -0,0 +1,298 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { ActivityIcon } from "lucide-react" + +export interface BfdSessionRow { + id: string + serverId: string + serverLabel: string + localAddr: string + remoteAddr: string + state: "Up" | "Down" | "Init" | "AdminDown" + interval: number + multiplier: number + iface: string + uptime: string | null + multihop: boolean + rxInterval: number + holdTime: number + packetsRx: number + packetsTx: number + stateChanges: number +} + +function stateClass(state: BfdSessionRow["state"]) { + if (state === "Up") + return "bg-[var(--status-online-bg)] text-[var(--status-online-fg)] border-current/25" + if (state === "Init") + return "bg-[var(--status-degraded-bg)] text-[var(--status-degraded-fg)] border-current/25" + return "bg-[var(--status-offline-bg)] text-[var(--status-offline-fg)] border-current/25" +} + +function Chip({ children, color }: { children: React.ReactNode; color?: string }) { + return ( + + {children} + + ) +} + +function fmtMs(ms: number) { + if (!ms) return "—" + if (ms < 1000) return `${ms}ms` + return `${(ms / 1000).toFixed(1)}s` +} + +interface OspfBfdDataGridProps { + sessions: BfdSessionRow[] +} + +function OspfBfdDataGrid({ sessions }: OspfBfdDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "serverLabel", + accessorKey: "serverLabel", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const b = row.original + return ( +
+ {b.serverLabel} + {b.multihop && ( + + multihop + + )} +
+ ) + }, + meta: { + headerTitle: "Роутер", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "iface", + accessorKey: "iface", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.iface || "—"} + + ), + meta: { + headerTitle: "Интерфейс", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "localAddr", + accessorKey: "localAddr", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.localAddr} + ), + meta: { + headerTitle: "Локальный", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "remoteAddr", + accessorKey: "remoteAddr", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.remoteAddr} + ), + meta: { + headerTitle: "Удалённый", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "state", + accessorKey: "state", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.state} + + ), + meta: { + headerTitle: "Состояние", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "uptime", + accessorKey: "uptime", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.uptime ?? "—"} + + ), + meta: { + headerTitle: "Uptime", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "intervals", + header: () => Tx / Rx, + enableSorting: false, + cell: ({ row }) => { + const b = row.original + return ( + + {fmtMs(b.interval)} / {fmtMs(b.rxInterval)} + + ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "holdTime", + accessorKey: "holdTime", + header: ({ column }) => , + cell: ({ row }) => ( + + {fmtMs(row.original.holdTime)} + + ), + meta: { + headerTitle: "Hold", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "multiplier", + accessorKey: "multiplier", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.multiplier} + ), + meta: { + headerTitle: "Mult", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "packetsRx", + accessorKey: "packetsRx", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + + {row.original.packetsRx.toLocaleString()} + + ), + meta: { + headerTitle: "Пакеты Rx", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + { + id: "packetsTx", + accessorKey: "packetsTx", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + + {row.original.packetsTx.toLocaleString()} + + ), + meta: { + headerTitle: "Пакеты Tx", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + { + id: "stateChanges", + accessorKey: "stateChanges", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + {row.original.stateChanges} + ), + meta: { + headerTitle: "Переходы", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: cn(DATA_GRID_CELL_PAD_LAST, "text-right"), + }, + }, + ], + [], + ) + + const table = useReactTable({ + data: sessions, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (sessions.length === 0) { + return ( + } + title="BFD-сессий не обнаружено" + className="border-0 py-10" + /> + ) + } + + return ( + + ) +} + +export { OspfBfdDataGrid, type OspfBfdDataGridProps } diff --git a/components/data-grids/ospf-neighbors-data-grid.tsx b/components/data-grids/ospf-neighbors-data-grid.tsx new file mode 100644 index 0000000..465b6f6 --- /dev/null +++ b/components/data-grids/ospf-neighbors-data-grid.tsx @@ -0,0 +1,238 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { NetworkIcon } from "lucide-react" + +export interface OspfNeighborRow { + id: string + localRouter: string + localLabel: string + localIface: string + remoteRouter: string + remoteLabel: string + remoteRouterId: string + area: string + state: "Full" | "2-Way" | "ExStart" | "Down" + cost: number + uptime: string + priority: number +} + +function stateClass(state: OspfNeighborRow["state"]) { + if (state === "Full") + return "bg-[var(--status-online-bg)] text-[var(--status-online-fg)] border-current/25" + if (state === "2-Way") + return "bg-[var(--status-degraded-bg)] text-[var(--status-degraded-fg)] border-current/25" + return "bg-[var(--status-offline-bg)] text-[var(--status-offline-fg)] border-current/25" +} + +interface OspfNeighborsDataGridProps { + neighbors: OspfNeighborRow[] + highlightRouterId?: string | null + selectedRouterId?: string | null + onHighlight?: (routerId: string | null) => void + onSelect?: (routerId: string | null) => void +} + +function OspfNeighborsDataGrid({ + neighbors, + highlightRouterId, + selectedRouterId, + onHighlight, + onSelect, +}: OspfNeighborsDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "localLabel", + accessorKey: "localLabel", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + {row.original.localLabel} + ), + meta: { + headerTitle: "Роутер", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "localIface", + accessorKey: "localIface", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.localIface} + + ), + meta: { + headerTitle: "Интерфейс", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "remote", + header: () => ( + Сосед (Router ID) + ), + enableSorting: false, + cell: ({ row }) => { + const n = row.original + return ( +
+ + {n.remoteLabel !== n.remoteRouterId ? n.remoteLabel : n.remoteRouterId} + + {n.remoteLabel !== n.remoteRouterId && ( + {n.remoteRouterId} + )} +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "area", + accessorKey: "area", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.area} + ), + meta: { + headerTitle: "Область", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "state", + accessorKey: "state", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.state} + + ), + meta: { + headerTitle: "Состояние", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "cost", + accessorKey: "cost", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.cost} + ), + meta: { + headerTitle: "Cost", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "uptime", + accessorKey: "uptime", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.uptime} + + ), + meta: { + headerTitle: "Uptime", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "priority", + accessorKey: "priority", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.priority} + ), + meta: { + headerTitle: "Prio", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: cn(DATA_GRID_CELL_PAD_LAST, "text-center"), + }, + }, + ], + [], + ) + + const rowSelection = useMemo(() => { + if (!selectedRouterId) return {} + const match = neighbors.find( + (n) => n.localRouter === selectedRouterId || n.remoteRouter === selectedRouterId, + ) + return match ? { [match.id]: true } : {} + }, [neighbors, selectedRouterId]) + + const table = useReactTable({ + data: neighbors, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + enableRowSelection: true, + state: { rowSelection }, + }) + + if (neighbors.length === 0) { + return ( + } + title="Нет OSPF-соседей" + className="border-0 py-10" + /> + ) + } + + return ( + { + onSelect?.(selectedRouterId === row.localRouter ? null : row.localRouter) + }} + tableClassNames={{ + headerRow: "border-b border-border", + bodyRow: cn( + "group/row cursor-pointer", + "data-[state=selected]:bg-primary/5", + highlightRouterId && "[&:hover]:bg-muted/30", + ), + }} + tableLayout={{ dense: true }} + /> + ) +} + +export { OspfNeighborsDataGrid, type OspfNeighborsDataGridProps } diff --git a/components/data-grids/ospf-routes-data-grid.tsx b/components/data-grids/ospf-routes-data-grid.tsx new file mode 100644 index 0000000..85d094d --- /dev/null +++ b/components/data-grids/ospf-routes-data-grid.tsx @@ -0,0 +1,171 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { RouteIcon } from "lucide-react" + +export interface OspfRouteRow { + id: string + destination: string + type: "O" | "O IA" | "O E1" | "O E2" + cost: number + nextHop: string + via: string + serverId: string + serverLabel: string + area: string +} + +function routeTypeClass(type: OspfRouteRow["type"]) { + if (type === "O") return "bg-emerald-500/10 text-emerald-600 dark:text-emerald-400 border-emerald-500/25" + if (type === "O IA") return "bg-blue-500/10 text-blue-600 dark:text-blue-400 border-blue-500/25" + if (type === "O E1") return "bg-purple-500/10 text-purple-600 dark:text-purple-400 border-purple-500/25" + return "bg-orange-500/10 text-orange-600 dark:text-orange-400 border-orange-500/25" +} + +interface OspfRoutesDataGridProps { + routes: OspfRouteRow[] +} + +function OspfRoutesDataGrid({ routes }: OspfRoutesDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "destination", + accessorKey: "destination", + header: ({ column }) => ( + + ), + cell: ({ row }) => {row.original.destination}, + meta: { + headerTitle: "Назначение", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "type", + accessorKey: "type", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.type} + + ), + meta: { headerTitle: "Тип", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "cost", + accessorKey: "cost", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.cost} + ), + meta: { + headerTitle: "Cost", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "nextHop", + accessorKey: "nextHop", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.nextHop} + ), + meta: { + headerTitle: "Следующий хоп", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "via", + accessorKey: "via", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.via} + ), + meta: { + headerTitle: "Интерфейс", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "serverLabel", + accessorKey: "serverLabel", + header: ({ column }) => , + cell: ({ row }) => {row.original.serverLabel}, + meta: { + headerTitle: "Роутер", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "area", + accessorKey: "area", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.area} + ), + meta: { + headerTitle: "Область", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [], + ) + + const table = useReactTable({ + data: routes, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (routes.length === 0) { + return ( + } + title="Нет OSPF-маршрутов" + className="border-0 py-10" + /> + ) + } + + return ( + + ) +} + +export { OspfRoutesDataGrid, type OspfRoutesDataGridProps, routeTypeClass } diff --git a/components/data-grids/probes-schedule-data-grid.tsx b/components/data-grids/probes-schedule-data-grid.tsx new file mode 100644 index 0000000..5f8da8a --- /dev/null +++ b/components/data-grids/probes-schedule-data-grid.tsx @@ -0,0 +1,221 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { Server } from "@/lib/data" +import { cn } from "@/lib/utils" +import { FormToggle } from "@/components/form-kit" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { ClockIcon, Trash2Icon } from "lucide-react" + +export type SchedType = "ping" | "bandwidth" | "both" + +export interface SchedRule { + id: string + srcId: string + tunnelId: string + type: SchedType + intervalMin: number + enabled: boolean + lastRun: string | null + nextRunMin: number | null +} + +const TYPE_LABEL: Record = { + ping: "Ping", + bandwidth: "BW-тест", + both: "Ping + BW", +} + +interface ProbesScheduleDataGridProps { + rules: SchedRule[] + serverOptions: Server[] + tunnelName: (srcId: string, tunnelId: string) => string | undefined + onToggleEnabled: (id: string, enabled: boolean) => void + onDelete: (id: string) => void +} + +function ProbesScheduleDataGrid({ + rules, + serverOptions, + tunnelName, + onToggleEnabled, + onDelete, +}: ProbesScheduleDataGridProps) { + const serverMap = useMemo( + () => new Map(serverOptions.map((s) => [s.id, s])), + [serverOptions], + ) + + const columns = useMemo[]>( + () => [ + { + id: "enabled", + accessorKey: "enabled", + header: () => Вкл, + enableSorting: false, + cell: ({ row }) => ( +
e.stopPropagation()}> + onToggleEnabled(row.original.id, v)} + /> +
+ ), + size: 48, + meta: { + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "tunnel", + accessorKey: "tunnelId", + header: ({ column }) => , + cell: ({ row }) => ( + + {tunnelName(row.original.srcId, row.original.tunnelId) ?? row.original.tunnelId} + + ), + meta: { + headerTitle: "Туннель", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "server", + accessorKey: "srcId", + header: ({ column }) => , + cell: ({ row }) => ( + + {serverMap.get(row.original.srcId)?.name ?? row.original.srcId} + + ), + meta: { + headerTitle: "Сервер", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "type", + accessorKey: "type", + header: ({ column }) => , + cell: ({ row }) => ( + + {TYPE_LABEL[row.original.type]} + + ), + meta: { + headerTitle: "Тип", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "intervalMin", + accessorKey: "intervalMin", + header: ({ column }) => , + cell: ({ row }) => ( + каждые {row.original.intervalMin} мин + ), + meta: { + headerTitle: "Интервал", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "lastRun", + header: () => ( + Последний / следующий + ), + enableSorting: false, + cell: ({ row }) => { + const rule = row.original + return ( +
+ {rule.lastRun && {rule.lastRun}} + {rule.nextRunMin != null && rule.enabled && ( + + · через {rule.nextRunMin} мин + + )} +
+ ) + }, + meta: { + headerTitle: "Последний / следующий", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "actions", + header: () => Действия, + enableSorting: false, + cell: ({ row }) => ( + + ), + size: 48, + meta: { + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [onDelete, onToggleEnabled, serverMap, tunnelName], + ) + + const table = useReactTable({ + data: rules, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (rules.length === 0) { + return ( + } + title="Нет правил расписания" + description="Добавьте правило ping или bandwidth-теста" + className="border-0 py-10" + /> + ) + } + + return +} + +export { ProbesScheduleDataGrid, type ProbesScheduleDataGridProps } diff --git a/components/data-grids/probes-speed-probes-data-grid.tsx b/components/data-grids/probes-speed-probes-data-grid.tsx new file mode 100644 index 0000000..06c4770 --- /dev/null +++ b/components/data-grids/probes-speed-probes-data-grid.tsx @@ -0,0 +1,178 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { ClockIcon } from "lucide-react" + +export interface SpeedProbeApiRow { + id: string + srcServerId: string + dstServerId: string + srcInterface: string + dstInterface: string + protocol: string + direction: string + durationSec: string + enabled: boolean + lastRunAt: string | null + lastTxAvgMbps: number | null + lastRxAvgMbps: number | null + lastStatus: string | null + lastError: string | null +} + +interface ProbesSpeedProbesDataGridProps { + rows: SpeedProbeApiRow[] + serverName: (id: string) => string +} + +function ProbesSpeedProbesDataGrid({ rows, serverName }: ProbesSpeedProbesDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "src", + header: ({ column }) => , + accessorFn: (row) => row.srcServerId, + cell: ({ row }) => { + const r = row.original + return ( + + {serverName(r.srcServerId)} + {r.srcInterface ? ` · ${r.srcInterface}` : ""} + + ) + }, + meta: { + headerTitle: "Источник", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "dst", + accessorFn: (row) => row.dstServerId, + header: ({ column }) => , + cell: ({ row }) => { + const r = row.original + return ( + + {serverName(r.dstServerId)} + {r.dstInterface ? ` · ${r.dstInterface}` : ""} + + ) + }, + meta: { + headerTitle: "Назначение", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "protocol", + accessorKey: "protocol", + header: ({ column }) => , + cell: ({ row }) => {row.original.protocol.toUpperCase()}, + meta: { + headerTitle: "Протокол", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "durationSec", + accessorKey: "durationSec", + header: ({ column }) => , + cell: ({ row }) => {row.original.durationSec}s, + meta: { + headerTitle: "Сек", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "enabled", + accessorKey: "enabled", + header: ({ column }) => , + cell: ({ row }) => {row.original.enabled ? "да" : "нет"}, + meta: { + headerTitle: "Вкл", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "lastRunAt", + accessorKey: "lastRunAt", + header: ({ column }) => , + cell: ({ row }) => { + const r = row.original + return ( + + {r.lastRunAt ?? "—"} + {r.lastStatus === "done" && r.lastTxAvgMbps != null && ( + + TX≈{r.lastTxAvgMbps.toFixed(1)} RX≈{(r.lastRxAvgMbps ?? 0).toFixed(1)} Mb/s + + )} + {r.lastStatus === "error" && r.lastError && ( + {r.lastError} + )} + + ) + }, + meta: { + headerTitle: "Последний запуск", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [serverName], + ) + + const table = useReactTable({ + data: rows, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (rows.length === 0) { + return ( + } + title="Нет записей speed-test" + description="Настраиваются через API PUT /api/uptime/speed-probes" + className="border-0 py-10" + /> + ) + } + + return ( + + ) +} + +export { ProbesSpeedProbesDataGrid, type ProbesSpeedProbesDataGridProps } diff --git a/components/data-grids/recursive-routes-data-grid.tsx b/components/data-grids/recursive-routes-data-grid.tsx new file mode 100644 index 0000000..27e6c30 --- /dev/null +++ b/components/data-grids/recursive-routes-data-grid.tsx @@ -0,0 +1,328 @@ +"use client" + +import { useMemo, useState } from "react" +import { + type ColumnDef, + getCoreRowModel, + getExpandedRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { + AlertCircleIcon, + ChevronDownIcon, + ChevronRightIcon, + PencilIcon, + RouteIcon, + TrashIcon, +} from "lucide-react" + +export interface RecursiveRouteEndpoint { + id: string + gateway: string + distance: number + scope: number | null + targetScope: number | null + checkGateway: string + country: string + disabled: boolean +} + +export interface RecursiveRouteGroup { + id?: string + key: string + dstAddress: string + routingTable: string + comment: string + endpoints: RecursiveRouteEndpoint[] +} + +const INFER_COUNTRIES = [ + { code: "RU", keys: ["MSK", "SPB", "RTK", "MTS", "VPSVILLE", "IHOR"] }, + { code: "SE", keys: ["SWE", "STO"] }, + { code: "FI", keys: ["HEL", "FIN"] }, + { code: "DE", keys: ["FRA", "GER", "DE"] }, + { code: "NL", keys: ["AMS", "NLD", "NL"] }, + { code: "SG", keys: ["SGP", "SIN", "SG"] }, + { code: "TR", keys: ["TUR", "TR"] }, + { code: "US", keys: ["USA", "US", "NYC", "LAX"] }, +] + +function inferCountry(name: string): string | null { + const upper = name.toUpperCase() + for (const c of INFER_COUNTRIES) { + if (c.keys.some((k) => upper.includes(k))) return c.code + } + return null +} + +function RouteGroupExpandedDetail({ group }: { group: RecursiveRouteGroup }) { + const sorted = [...group.endpoints].sort((a, b) => a.distance - b.distance) + return ( +
+
+ + Route: {group.dstAddress} + + + Table:{" "} + {group.routingTable || "main"} + + {group.comment && {group.comment}} +
+
+ {sorted.map((ep, idx) => ( +
+
+
+ {(ep.country || inferCountry(ep.gateway)) && ( + + )} + + Endpoint {idx + 1} + +
+ distance: {ep.distance} +
+

{ep.gateway}

+
+ scope: {ep.scope ?? "—"} + t.scope: {ep.targetScope ?? "—"} + check: {ep.checkGateway || "—"} +
+
+ ))} +
+
+ ) +} + +interface RecursiveRoutesDataGridProps { + groups: RecursiveRouteGroup[] + expandedKey?: string | null + onExpandedChange?: (key: string | null) => void + onEdit: (group: RecursiveRouteGroup) => void + onDelete: (group: RecursiveRouteGroup) => void +} + +function RecursiveRoutesDataGrid({ + groups, + expandedKey, + onExpandedChange, + onEdit, + onDelete, +}: RecursiveRoutesDataGridProps) { + const [confirmDeleteKey, setConfirmDeleteKey] = useState(null) + + const expanded = useMemo(() => { + if (!expandedKey) return {} + const g = groups.find((x) => x.key === expandedKey) + return g ? { [(g.id ?? g.key)]: true } : {} + }, [expandedKey, groups]) + + const columns = useMemo[]>( + () => [ + { + id: "route", + accessorKey: "dstAddress", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const g = row.original + const isExpanded = expandedKey === g.key + return ( +
+ {isExpanded ? ( + + ) : ( + + )} +
+

{g.dstAddress}

+

{g.comment || "—"}

+
+
+ ) + }, + meta: { + headerTitle: "Route / Comment", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + expandedContent: (group: RecursiveRouteGroup) => ( + + ), + }, + }, + { + id: "gateways", + header: () => Gateways, + enableSorting: false, + cell: ({ row }) => { + const sorted = [...row.original.endpoints].sort((a, b) => a.distance - b.distance) + return ( +
+ {sorted.map((ep, idx) => { + const code = ep.country || inferCountry(ep.gateway) + return ( +
+ + {code ? ( + + ) : ( + + ? + + )} + + {ep.gateway} + +
+ ) + })} +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "epCount", + header: () => EP, + enableSorting: false, + cell: ({ row }) => ( + {row.original.endpoints.length} + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "priority", + header: () => Priority, + enableSorting: false, + cell: ({ row }) => { + const bestDistance = Math.min(...row.original.endpoints.map((ep) => ep.distance)) + return d{bestDistance} + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "table", + accessorKey: "routingTable", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.routingTable || "main"} + + ), + meta: { + headerTitle: "Table", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "actions", + header: () => Действия, + enableSorting: false, + cell: ({ row }) => { + const g = row.original + const confirmDel = confirmDeleteKey === g.key + return ( +
e.stopPropagation()} + > + + +
+ ) + }, + size: 80, + meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, + }, + ], + [confirmDeleteKey, expandedKey, onDelete, onEdit], + ) + + const table = useReactTable({ + data: groups, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getExpandedRowModel: getExpandedRowModel(), + getRowId: (row) => row.id ?? row.key, + getRowCanExpand: () => true, + state: { expanded }, + }) + + if (groups.length === 0) { + return ( + } + title="Нет маршрутов" + className="border-0 py-10" + /> + ) + } + + return ( + { + onExpandedChange?.(expandedKey === row.key ? null : row.key) + }} + tableClassNames={{ + headerRow: "border-b border-border", + bodyRow: cn("group/row cursor-pointer", expandedKey && "data-[state=selected]:bg-muted/30"), + }} + /> + ) +} + +export { RecursiveRoutesDataGrid, type RecursiveRoutesDataGridProps, inferCountry } diff --git a/components/data-grids/route-optimizer-comm-recs-data-grid.tsx b/components/data-grids/route-optimizer-comm-recs-data-grid.tsx new file mode 100644 index 0000000..6782b2d --- /dev/null +++ b/components/data-grids/route-optimizer-comm-recs-data-grid.tsx @@ -0,0 +1,259 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { CommRec } from "@/lib/route-optimizer-data" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { ArrowRightIcon, PinIcon, RefreshCwIcon } from "lucide-react" + +function Chip({ children, color }: { children: React.ReactNode; color?: string }) { + return ( + + {children} + + ) +} + +function ProbChip({ prob, best }: { prob: number; best?: boolean }) { + return ( + + {prob}% + + ) +} + +interface RouteOptimizerCommRecsDataGridProps { + recs: CommRec[] + homeId: string + pinned: Set + applied: Set + applying: Set + onPin: (key: string) => void + onApply: (community: string, homeId: string) => void +} + +function RouteOptimizerCommRecsDataGrid({ + recs, + homeId, + pinned, + applied, + applying, + onPin, + onApply, +}: RouteOptimizerCommRecsDataGridProps) { + const rows = useMemo( + () => recs.map((r, idx) => ({ ...r, _rowKey: `${homeId}::${r.community}::${idx}` })), + [homeId, recs], + ) + + const columns = useMemo[]>( + () => [ + { + id: "community", + accessorKey: "community", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( +
+
{row.original.community}
+
{row.original.communityName}
+
+ ), + meta: { + headerTitle: "Community", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "current", + header: () => ( + + Текущий (WAN → JH → Exit) + + ), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + if (!r.current) return + return ( +
+ + {r.current.wan} + + + {r.current.jh} + + {r.current.exit} + + ({r.current.gateway}) + +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "recommended", + header: () => Рекомендуемый, + enableSorting: false, + cell: ({ row }) => { + const r = row.original + const pinKey = `${homeId}::${r.community}` + const isPinned = pinned.has(pinKey) + if (!r.recommended) return + return ( +
+ {r.recommended.wan} + + {r.recommended.jh} + + {r.recommended.exit} + {r.shouldSwitch && !isPinned && ( + + +{(r.recommended.prob ?? 0) - (r.current?.prob ?? 0)}% + + )} +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "probability", + header: () => ( + + P(тек / рек) + + ), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + const pinKey = `${homeId}::${r.community}` + return ( +
+ + / + +
+ ) + }, + meta: { + headerClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "actions", + header: () => ( + + Действие + + ), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + const pinKey = `${homeId}::${r.community}` + const isPinned = pinned.has(pinKey) + const isApplied = applied.has(pinKey) + const isApplying = applying.has(pinKey) + const canApply = r.shouldSwitch && !isPinned && !isApplied + return ( +
e.stopPropagation()}> + {isPinned && } + + {canApply && ( + + )} + {isApplied && ( + + ✓ применено + + )} +
+ ) + }, + meta: { + headerClassName: cn(DATA_GRID_CELL_PAD_LAST, "text-right"), + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [applied, applying, homeId, onApply, onPin, pinned], + ) + + const table = useReactTable({ + data: rows, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row._rowKey, + }) + + return ( + + ) +} + +export { RouteOptimizerCommRecsDataGrid, type RouteOptimizerCommRecsDataGridProps } diff --git a/components/data-grids/route-optimizer-full-routes-data-grid.tsx b/components/data-grids/route-optimizer-full-routes-data-grid.tsx new file mode 100644 index 0000000..95f19a0 --- /dev/null +++ b/components/data-grids/route-optimizer-full-routes-data-grid.tsx @@ -0,0 +1,294 @@ +"use client" + +import { useMemo, useState } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { FullRoute } from "@/lib/route-optimizer-data" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { ArrowRightIcon, ChevronDownIcon, ChevronUpIcon } from "lucide-react" + +function Chip({ children, color }: { children: React.ReactNode; color?: string }) { + return ( + + {children} + + ) +} + +function ProbChip({ prob, best }: { prob: number; best?: boolean }) { + return ( + + {prob}% + + ) +} + +function ConfChip({ conf }: { conf: string }) { + const map: Record = { + HIGH: "bg-sky-500/10 text-sky-600 dark:text-sky-400 border-sky-500/20", + MEDIUM: "bg-amber-500/10 text-amber-600 dark:text-amber-400 border-amber-500/20", + LOW: "bg-red-500/10 text-red-600 dark:text-red-400 border-red-500/20", + } + return {conf} +} + +interface RouteOptimizerFullRoutesDataGridProps { + routes: FullRoute[] + bestId?: string +} + +function RouteOptimizerFullRoutesDataGrid({ + routes, + bestId, +}: RouteOptimizerFullRoutesDataGridProps) { + const [expanded, setExpanded] = useState(false) + const visibleRoutes = expanded ? routes : routes.slice(0, 5) + + const indexed = useMemo( + () => visibleRoutes.map((r, index) => ({ ...r, _index: index })), + [visibleRoutes], + ) + + const columns = useMemo[]>( + () => [ + { + id: "index", + header: () => # Маршрут, + enableSorting: false, + cell: ({ row }) => { + const isBest = row.original.id === bestId || row.original._index === 0 + return ( +
+ + {row.original._index + 1} + + {isBest && ( + + Лучший + + )} +
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD_FIRST, cellClassName: DATA_GRID_CELL_PAD_FIRST }, + }, + { + id: "wanJh", + header: () => WAN → JH, + enableSorting: false, + cell: ({ row }) => { + const r = row.original + return ( +
+ {r.wan.name} + +
+
{r.jh.label}
+
+ {r.hw.pingMs} мс · ↓{r.hw.dlMbps} ↑{r.hw.ulMbps} +
+
+
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "jhExit", + header: () => JH → Exit, + enableSorting: false, + cell: ({ row }) => { + const r = row.original + return ( +
+
+ + {r.exit.label} + ({r.exit.site}) +
+
+ {r.je.pingMs} мс · ↓{r.je.dlMbps} ↑{r.je.ulMbps} +
+
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "totalPing", + accessorFn: (row) => row.hw.pingMs + row.je.pingMs, + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const totalPing = row.original.hw.pingMs + row.original.je.pingMs + return ( + + {totalPing} мс + + ) + }, + meta: { + headerTitle: "Ping (итого)", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "bw", + header: () => ( + + BW (мин) + + ), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + const minDl = Math.min(r.hw.dlMbps, r.je.dlMbps) + const minUl = Math.min(r.hw.ulMbps, r.je.ulMbps) + return ( +
+
↓{minDl}
+
↑{minUl}
+
+ ) + }, + meta: { + headerClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "score", + accessorKey: "score", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( + + {row.original.score} + + ), + meta: { + headerTitle: "Score", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "prob", + accessorKey: "probabilityOptimal", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const isBest = row.original.id === bestId || row.original._index === 0 + return ( +
+ +
+ ) + }, + meta: { + headerTitle: "P(opt)", + headerClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "confidence", + accessorKey: "confidence", + header: ({ column }) => ( + + ), + cell: ({ row }) => ( +
+ +
+ ), + meta: { + headerTitle: "Conf.", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: cn(DATA_GRID_CELL_PAD_LAST, "text-center"), + }, + }, + ], + [bestId], + ) + + const table = useReactTable({ + data: indexed, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + return ( +
+ + {routes.length > 5 && ( + + )} +
+ ) +} + +export { RouteOptimizerFullRoutesDataGrid, type RouteOptimizerFullRoutesDataGridProps } diff --git a/components/data-grids/route-optimizer-ospf-preview-data-grid.tsx b/components/data-grids/route-optimizer-ospf-preview-data-grid.tsx new file mode 100644 index 0000000..af8bf9a --- /dev/null +++ b/components/data-grids/route-optimizer-ospf-preview-data-grid.tsx @@ -0,0 +1,150 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { NetworkIcon } from "lucide-react" + +export interface OspfPreviewInterfaceRow { + id: string + interface: string + currentCost: number + optimalCost: number + score: number + pingMs: number + dlMbps: number + ulMbps: number +} + +interface RouteOptimizerOspfPreviewDataGridProps { + rows: OspfPreviewInterfaceRow[] + error?: string | null + loading?: boolean +} + +function RouteOptimizerOspfPreviewDataGrid({ + rows, + error, + loading, +}: RouteOptimizerOspfPreviewDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "interface", + accessorKey: "interface", + header: ({ column }) => ( + + ), + cell: ({ row }) => {row.original.interface}, + meta: { + headerTitle: "Интерфейс", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "cost", + accessorKey: "currentCost", + header: ({ column }) => , + cell: ({ row }) => { + const r = row.original + return ( + + {r.currentCost} + {" → "} + + {r.optimalCost} + + + ) + }, + meta: { headerTitle: "Cost", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "score", + accessorKey: "score", + header: ({ column }) => , + cell: ({ row }) => {row.original.score}, + meta: { headerTitle: "Score", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "pingMs", + accessorKey: "pingMs", + header: ({ column }) => , + cell: ({ row }) => {row.original.pingMs}ms, + meta: { headerTitle: "Ping", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "speed", + header: () => Speed (dl/ul), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + return ( + + ↓{r.dlMbps} / ↑{r.ulMbps} + + ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD_LAST, cellClassName: DATA_GRID_CELL_PAD_LAST }, + }, + ], + [], + ) + + const table = useReactTable({ + data: rows, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (error) { + return ( +

Ошибка preview: {error}

+ ) + } + + if (!loading && rows.length === 0) { + return ( + } + title="Интерфейсы OSPF не найдены для выбранного сервера" + className="border-0 py-6 text-xs" + /> + ) + } + + return ( + + ) +} + +export { RouteOptimizerOspfPreviewDataGrid, type RouteOptimizerOspfPreviewDataGridProps } diff --git a/components/data-grids/route-optimizer-wan-matrix-data-grid.tsx b/components/data-grids/route-optimizer-wan-matrix-data-grid.tsx new file mode 100644 index 0000000..f1900ef --- /dev/null +++ b/components/data-grids/route-optimizer-wan-matrix-data-grid.tsx @@ -0,0 +1,183 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { HomeRouter, JumpHost, WanJhLeg } from "@/lib/route-optimizer-data" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { WifiIcon } from "lucide-react" + +function LossChip({ loss }: { loss: number }) { + if (loss === 0) return 0% + return ( + 1 ? "text-red-500" : "text-amber-500")}> + {loss}% + + ) +} + +interface RouteOptimizerWanMatrixDataGridProps { + home: HomeRouter + legs: WanJhLeg[] + jumpHosts: JumpHost[] +} + +function RouteOptimizerWanMatrixDataGrid({ + home, + legs, + jumpHosts, +}: RouteOptimizerWanMatrixDataGridProps) { + const bestScore = legs.length ? Math.max(...legs.map((l) => l.score)) : 0 + + const columns = useMemo[]>(() => { + const base: ColumnDef[] = [ + { + id: "wan", + accessorKey: "name", + header: () => WAN-аплинк, + cell: ({ row }) => { + const wan = row.original + return ( +
+ +
+

{wan.name}

+

{wan.iface}

+
+
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD_FIRST, cellClassName: DATA_GRID_CELL_PAD_FIRST }, + }, + { + id: "isp", + header: () => ISP / IP, + cell: ({ row }) => { + const wan = row.original + return ( +
+

{wan.isp}

+

{wan.ip}

+
+ ) + }, + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "bandwidth", + header: () => ( + + Макс. полоса + + ), + cell: ({ row }) => { + const wan = row.original + return ( +
+

↓{wan.maxDl}

+

↑{wan.maxUl} Мбит

+
+ ) + }, + meta: { + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + }, + }, + ] + + const jhCols: ColumnDef[] = jumpHosts.map((jh) => ({ + id: `jh-${jh.id}`, + header: () => ( +
+
{jh.label}
+
+ + {jh.site} · {jh.ip} +
+
+ ), + cell: ({ row }) => { + const wan = row.original + const leg = legs.find((l) => l.wanId === wan.id && l.jhId === jh.id) + if (!leg) return + const isBest = leg.score === bestScore + return ( +
+
+ {isBest && ( + + ★ ЛУЧШИЙ + + )} + + {leg.pingMs} мс + + + ↓{leg.dlMbps} ↑{leg.ulMbps} + +
+ score {leg.score} + {leg.loss > 0 && } +
+
+
+ ) + }, + meta: { + headerClassName: cn(DATA_GRID_CELL_PAD, "min-w-[130px] text-center"), + cellClassName: cn(DATA_GRID_CELL_PAD, "min-w-[130px]"), + }, + })) + + const last = jhCols[jhCols.length - 1] + if (last?.meta) { + last.meta.headerClassName = cn(last.meta.headerClassName, DATA_GRID_CELL_PAD_LAST.replace("py-3", "")) + last.meta.cellClassName = DATA_GRID_CELL_PAD_LAST + } + + return [...base, ...jhCols] + }, [bestScore, jumpHosts, legs]) + + const table = useReactTable({ + data: home.wans, + columns, + getCoreRowModel: getCoreRowModel(), + getRowId: (row) => row.id, + }) + + return ( + + ) +} + +export { RouteOptimizerWanMatrixDataGrid, type RouteOptimizerWanMatrixDataGridProps } diff --git a/components/data-grids/servers-data-grid.tsx b/components/data-grids/servers-data-grid.tsx index 0db6699..e29f957 100644 --- a/components/data-grids/servers-data-grid.tsx +++ b/components/data-grids/servers-data-grid.tsx @@ -2,7 +2,6 @@ import { useMemo } from "react" import { - type Column, type ColumnDef, getCoreRowModel, getExpandedRowModel, @@ -21,11 +20,13 @@ import { DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" import { - DataGrid, - DataGridContainer, - DataGridTable, -} from "@/components/reui/data-grid" + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" import { EmptyState } from "@/components/empty-state" import { ServerExpandedDetail } from "@/components/data-grids/server-expanded-detail" import { @@ -42,9 +43,6 @@ import { RefreshCwIcon, PowerIcon, Trash2Icon, - ArrowUpIcon, - ArrowDownIcon, - ArrowUpDownIcon, } from "lucide-react" const TYPE_LABELS: Record = { @@ -59,10 +57,6 @@ const TYPE_STYLES: Record = { "home-router": "bg-emerald-500/10 text-emerald-400 border-emerald-500/20", } -const CELL_PAD = "py-3" -const CELL_PAD_FIRST = "pl-5 py-3" -const CELL_PAD_LAST = "pr-4 py-3" - function rosVer(os: string): number { const m = os.match(/(\d+)\.(\d+)/) if (!m) return 0 @@ -91,48 +85,6 @@ function RosBadge({ os }: { os: string }) { return {os} } -function ServersTableHeader({ - column, - title, - className, -}: { - column: Column - title: string - className?: string -}) { - const sorted = column.getIsSorted() - const canSort = column.getCanSort() - - if (!canSort) { - return ( - - {title} - - ) - } - - return ( - - ) -} - interface ServerRowActionsProps { server: Server isLive: boolean @@ -234,7 +186,7 @@ function ServersDataGrid({ id: "name", accessorKey: "name", header: ({ column }) => ( - + ), cell: ({ row }) => { const s = row.original @@ -258,8 +210,8 @@ function ServersDataGrid({ }, meta: { headerTitle: "Имя / Хост", - headerClassName: CELL_PAD_FIRST, - cellClassName: CELL_PAD_FIRST, + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, expandedContent: (row: Server) => ( , + header: ({ column }) => , cell: ({ row }) => , - meta: { headerTitle: "Тип", headerClassName: CELL_PAD, cellClassName: CELL_PAD }, + meta: { headerTitle: "Тип", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "model", accessorKey: "model", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => {row.original.model}, - meta: { headerTitle: "Модель", headerClassName: CELL_PAD, cellClassName: CELL_PAD }, + meta: { headerTitle: "Модель", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "os", accessorKey: "os", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => , - meta: { headerTitle: "RouterOS", headerClassName: CELL_PAD, cellClassName: CELL_PAD }, + meta: { headerTitle: "RouterOS", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "site", accessorKey: "site", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => (
{row.original.site}
), - meta: { headerTitle: "Площадка", headerClassName: CELL_PAD, cellClassName: CELL_PAD }, + meta: { headerTitle: "Площадка", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "wan", @@ -345,13 +297,13 @@ function ServersDataGrid({
) }, - meta: { headerTitle: "WAN / LAN", headerClassName: CELL_PAD, cellClassName: CELL_PAD }, + meta: { headerTitle: "WAN / LAN", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "latency", accessorKey: "latency", header: ({ column }) => ( - + ), cell: ({ row }) => { const s = row.original @@ -366,16 +318,16 @@ function ServersDataGrid({ }, meta: { headerTitle: "Задержка", - headerClassName: cn(CELL_PAD, "text-right"), - cellClassName: cn(CELL_PAD, "text-right"), + headerClassName: cn(DATA_GRID_CELL_PAD, "text-right"), + cellClassName: cn(DATA_GRID_CELL_PAD, "text-right"), }, }, { id: "status", accessorKey: "status", - header: ({ column }) => , + header: ({ column }) => , cell: ({ row }) => , - meta: { headerTitle: "Статус", headerClassName: CELL_PAD, cellClassName: CELL_PAD }, + meta: { headerTitle: "Статус", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, }, { id: "actions", @@ -397,8 +349,8 @@ function ServersDataGrid({ enableSorting: false, size: 56, meta: { - headerClassName: CELL_PAD_LAST, - cellClassName: CELL_PAD_LAST, + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, }, }, ], @@ -427,25 +379,11 @@ function ServersDataGrid({ } return ( - table.getRow(row.id).toggleExpanded()} - tableLayout={{ - rowBorder: true, - headerBackground: true, - headerBorder: true, - columnsResizable: false, - }} - tableClassNames={{ - headerRow: "border-b border-border", - bodyRow: "group/row", - }} - > - - - - + /> ) } diff --git a/components/data-grids/settings-access-summary-data-grid.tsx b/components/data-grids/settings-access-summary-data-grid.tsx new file mode 100644 index 0000000..c77a1d5 --- /dev/null +++ b/components/data-grids/settings-access-summary-data-grid.tsx @@ -0,0 +1,168 @@ +"use client" + +import { useMemo } from "react" +import type { Server } from "@/lib/data" +import { CompactDataGrid, type CompactDataGridColumn } from "@/components/data-grids/compact-data-grid" +import { cn } from "@/lib/utils" + +type PermLevel = "none" | "read" | "write" +type Role = "admin" | "operator" | "viewer" + +interface SectionPerm { + section: string + level: PermLevel +} + +interface ServerPerm { + serverId: string + level: PermLevel +} + +export interface AccessSummaryUser { + id: string + name: string + avatar: string + active: boolean + role: Role + sections: SectionPerm[] + servers: ServerPerm[] +} + +function AvatarCircle({ avatar, active }: { avatar: string; active: boolean }) { + return ( +
+ {avatar} +
+ ) +} + +interface SettingsAccessSummaryDataGridProps { + users: AccessSummaryUser[] + servers: Server[] + allSectionsCount: number +} + +function SettingsAccessSummaryDataGrid({ + users, + servers, + allSectionsCount, +}: SettingsAccessSummaryDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "name", + header: "Пользователь", + accessorKey: "name", + cell: (u) => ( +
+ + {u.name} +
+ ), + }, + { + id: "sections", + header: "Разделы", + enableSorting: false, + cell: (u) => { + const writeSections = + u.role === "admin" + ? [] + : u.sections.filter((s) => s.level === "write").map((s) => s.section) + const readSections = + u.role === "admin" + ? [] + : u.sections.filter((s) => s.level === "read").map((s) => s.section) + return ( + + {u.role === "admin" ? ( + + Все ({allSectionsCount}) + + ) : ( + {readSections.length + writeSections.length} из {allSectionsCount} + )} + + ) + }, + }, + { + id: "servers", + header: "Серверы", + enableSorting: false, + cell: (u) => { + const accessServers = + u.role === "admin" + ? servers + : servers.filter((s) => u.servers.find((p) => p.serverId === s.id && p.level !== "none")) + return ( + + {u.role === "admin" ? ( + + Все ({servers.length}) + + ) : ( + + {accessServers.length} из {servers.length} + + )} + + ) + }, + }, + { + id: "write", + header: "Права записи", + enableSorting: false, + cell: (u) => { + const writeSections = + u.role === "admin" + ? [] + : u.sections.filter((s) => s.level === "write").map((s) => s.section) + return ( +
+ {u.role === "admin" ? ( + + Полный доступ + + ) : writeSections.length === 0 ? ( + Только просмотр + ) : ( + <> + {writeSections.slice(0, 3).map((s) => ( + + {s} + + ))} + {writeSections.length > 3 && ( + +{writeSections.length - 3} + )} + + )} +
+ ) + }, + }, + ], + [allSectionsCount, servers], + ) + + return ( + + ) +} + +export { SettingsAccessSummaryDataGrid, type SettingsAccessSummaryDataGridProps } diff --git a/components/data-grids/shared/data-grid-layout.ts b/components/data-grids/shared/data-grid-layout.ts new file mode 100644 index 0000000..41ed055 --- /dev/null +++ b/components/data-grids/shared/data-grid-layout.ts @@ -0,0 +1,28 @@ +import type { DataGridProps } from "@/components/reui/data-grid/data-grid" + +const DATA_GRID_CELL_PAD = "py-3" +const DATA_GRID_CELL_PAD_FIRST = "pl-5 py-3" +const DATA_GRID_CELL_PAD_LAST = "pr-4 py-3" + +const DEFAULT_DATA_GRID_LAYOUT: NonNullable["tableLayout"]> = { + rowBorder: true, + headerBackground: true, + headerBorder: true, + columnsResizable: false, +} + +const DEFAULT_DATA_GRID_CLASS_NAMES: NonNullable["tableClassNames"]> = { + headerRow: "border-b border-border", + bodyRow: "group/row", +} + +const DATA_GRID_CONTAINER_CLASS = "rounded-none border-0" + +export { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, + DEFAULT_DATA_GRID_LAYOUT, + DEFAULT_DATA_GRID_CLASS_NAMES, + DATA_GRID_CONTAINER_CLASS, +} diff --git a/components/data-grids/shared/data-grid-shell.tsx b/components/data-grids/shared/data-grid-shell.tsx new file mode 100644 index 0000000..f38106a --- /dev/null +++ b/components/data-grids/shared/data-grid-shell.tsx @@ -0,0 +1,68 @@ +"use client" + +import type { ReactNode } from "react" +import type { Table } from "@tanstack/react-table" +import { + DataGrid, + DataGridContainer, + DataGridPagination, + DataGridTable, + type DataGridProps, +} from "@/components/reui/data-grid" +import { + DATA_GRID_CONTAINER_CLASS, + DEFAULT_DATA_GRID_CLASS_NAMES, + DEFAULT_DATA_GRID_LAYOUT, +} from "@/components/data-grids/shared/data-grid-layout" + +interface DataGridShellProps { + table: Table + recordCount: number + children?: ReactNode + pagination?: boolean + isLoading?: boolean + loadingMode?: DataGridProps["loadingMode"] + emptyMessage?: ReactNode + onRowClick?: DataGridProps["onRowClick"] + tableLayout?: DataGridProps["tableLayout"] + tableClassNames?: DataGridProps["tableClassNames"] +} + +function DataGridShell({ + table, + recordCount, + children, + pagination = false, + isLoading, + loadingMode, + emptyMessage, + onRowClick, + tableLayout = DEFAULT_DATA_GRID_LAYOUT, + tableClassNames = DEFAULT_DATA_GRID_CLASS_NAMES, +}: DataGridShellProps) { + return ( + + {children ?? ( + <> + + + + {pagination && recordCount > 0 && ( + + )} + + )} + + ) +} + +export { DataGridShell, type DataGridShellProps } diff --git a/components/data-grids/shared/data-grid-sort-header.tsx b/components/data-grids/shared/data-grid-sort-header.tsx new file mode 100644 index 0000000..aade08d --- /dev/null +++ b/components/data-grids/shared/data-grid-sort-header.tsx @@ -0,0 +1,51 @@ +"use client" + +import type { Column } from "@tanstack/react-table" +import { cn } from "@/lib/utils" +import { ArrowDownIcon, ArrowUpDownIcon, ArrowUpIcon } from "lucide-react" + +interface DataGridSortHeaderProps { + column: Column + title: string + className?: string +} + +function DataGridSortHeader({ + column, + title, + className, +}: DataGridSortHeaderProps) { + const sorted = column.getIsSorted() + const canSort = column.getCanSort() + + if (!canSort) { + return ( + + {title} + + ) + } + + return ( + + ) +} + +export { DataGridSortHeader, type DataGridSortHeaderProps } diff --git a/components/data-grids/snapshot-data-grid.tsx b/components/data-grids/snapshot-data-grid.tsx new file mode 100644 index 0000000..15b9fd4 --- /dev/null +++ b/components/data-grids/snapshot-data-grid.tsx @@ -0,0 +1,498 @@ +"use client" + +import { Badge } from "@/components/ui/badge" +import { cn } from "@/lib/utils" +import { + CompactDataGrid, + type CompactDataGridColumn, + type CompactDataGridProps, +} from "@/components/data-grids/compact-data-grid" +import type { + AlertEngineRuleDiagSnapshot, + PingProbeSnapshot, + ResourceServerSnapshot, + ServerRestPingSnapshot, + SpeedRunSnapshot, + TrafficServerSnapshot, +} from "@/lib/scheduler-run-snapshot" + +type SnapshotRow = { id: string } + +function withRowId( + rows: T[], + idFn: (row: T, index: number) => string, +): (T & SnapshotRow)[] { + return rows.map((row, index) => ({ ...row, id: idFn(row, index) })) +} + +function SnapshotOkBadge({ + ok, + okLabel = "ok", + errLabel = "ошибка", +}: { + ok: boolean + okLabel?: string + errLabel?: string +}) { + return ok ? ( + + {okLabel} + + ) : ( + + {errLabel} + + ) +} + +function SnapshotErrorCell({ error, className }: { error?: string; className?: string }) { + return ( + + {error ?? "—"} + + ) +} + +function SnapshotDataGrid( + props: Omit, "compact">, +) { + return +} + +function TrafficSnapshotGrid({ servers }: { servers: TrafficServerSnapshot[] }) { + const data = withRowId(servers, (s) => String(s.serverId)) + const columns: CompactDataGridColumn<(typeof data)[number]>[] = [ + { id: "name", header: "Сервер", accessorKey: "name", cell: (r) => {r.name} }, + { + id: "host", + header: "Хост", + accessorKey: "host", + cell: (r) => {r.host}, + }, + { + id: "ok", + header: "Результат", + enableSorting: false, + cell: (r) => , + }, + { + id: "interfaces", + header: "IF", + accessorKey: "interfaces", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => r.interfaces ?? "—", + }, + { + id: "sumRxMbps", + header: "Σ RX", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.sumRxMbps != null ? `${r.sumRxMbps} Мбит/с` : "—"), + }, + { + id: "sumTxMbps", + header: "Σ TX", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.sumTxMbps != null ? `${r.sumTxMbps} Мбит/с` : "—"), + }, + { + id: "error", + header: "Ошибка", + enableSorting: false, + cell: (r) => , + }, + ] + return +} + +function ResourcesSnapshotGrid({ servers }: { servers: ResourceServerSnapshot[] }) { + const data = withRowId(servers, (s) => String(s.serverId)) + const columns: CompactDataGridColumn<(typeof data)[number]>[] = [ + { + id: "name", + header: "Сервер", + enableSorting: false, + cell: (r) => ( +
+ {r.name} + {r.host} +
+ ), + }, + { + id: "status", + header: "Статус", + enableSorting: false, + cell: (r) => ( + + {r.status} + + ), + }, + { + id: "cpuLoadPct", + header: "CPU %", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => r.cpuLoadPct ?? "—", + }, + { + id: "memory", + header: "Память", + enableSorting: false, + headerClassName: "text-right", + cellClassName: "text-right tabular-nums whitespace-nowrap", + cell: (r) => + r.memUsedMb != null && r.memTotalMb != null ? `${r.memUsedMb} / ${r.memTotalMb} МБ` : "—", + }, + { + id: "memUsedPct", + header: "% RAM", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.memUsedPct != null ? `${r.memUsedPct}%` : "—"), + }, + { + id: "disk", + header: "Диск своб.", + enableSorting: false, + headerClassName: "text-right", + cellClassName: "text-right tabular-nums whitespace-nowrap", + cell: (r) => + r.diskFreeMb != null && r.diskTotalMb != null ? `${r.diskFreeMb} / ${r.diskTotalMb} МБ` : "—", + }, + { + id: "uptimeSeconds", + header: "Uptime", + cellClassName: "tabular-nums", + cell: (r) => (r.uptimeSeconds != null ? fmtUptimeSec(r.uptimeSeconds) : "—"), + }, + { + id: "board", + header: "Плата / ROS", + enableSorting: false, + cell: (r) => ( +
+ {r.boardName || "—"} + + {r.rosVersion || ""} + +
+ ), + }, + { + id: "error", + header: "Ошибка", + enableSorting: false, + cell: (r) => , + }, + ] + return +} + +function ServersRestPingSnapshotGrid({ servers }: { servers: ServerRestPingSnapshot[] }) { + const data = withRowId(servers, (s) => String(s.serverId)) + const columns: CompactDataGridColumn<(typeof data)[number]>[] = [ + { id: "name", header: "Сервер", accessorKey: "name", cell: (r) => {r.name} }, + { + id: "host", + header: "Хост", + accessorKey: "host", + cell: (r) => {r.host}, + }, + { + id: "ok", + header: "Результат", + enableSorting: false, + cell: (r) => , + }, + { + id: "latencyMs", + header: "RTT REST", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.latencyMs != null ? `${r.latencyMs} мс` : "—"), + }, + { + id: "error", + header: "Ошибка", + enableSorting: false, + cell: (r) => , + }, + ] + return +} + +function PingSnapshotGrid({ probes }: { probes: PingProbeSnapshot[] }) { + const data = withRowId(probes, (p) => `${p.probeId}-${p.target}`) + const columns: CompactDataGridColumn<(typeof data)[number]>[] = [ + { + id: "name", + header: "Проба", + enableSorting: false, + cell: (r) => ( +
+ {r.name} + {r.probeId} +
+ ), + }, + { + id: "target", + header: "Цель", + accessorKey: "target", + cell: (r) => {r.target}, + }, + { id: "srcServerName", header: "Источник", accessorKey: "srcServerName" }, + { + id: "srcInterface", + header: "IF", + accessorKey: "srcInterface", + cell: (r) => {r.srcInterface || "—"}, + }, + { + id: "rttMs", + header: "RTT", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.rttMs != null ? `${r.rttMs} мс` : "—"), + }, + { + id: "lossPct", + header: "Loss", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => `${r.lossPct}%`, + }, + { + id: "status", + header: "Статус", + enableSorting: false, + cell: (r) => {r.status}, + }, + { + id: "error", + header: "Ошибка", + enableSorting: false, + cell: (r) => , + }, + ] + return +} + +function SpeedSnapshotGrid({ runs }: { runs: SpeedRunSnapshot[] }) { + const data = withRowId(runs, (r) => r.probeId) + const columns: CompactDataGridColumn<(typeof data)[number]>[] = [ + { + id: "probeId", + header: "Проба", + accessorKey: "probeId", + cell: (r) => {r.probeId}, + }, + { + id: "route", + header: "Маршрут", + enableSorting: false, + cell: (r) => ( + + {r.srcServerName} {r.dstServerName} + + ), + }, + { + id: "interfaces", + header: "Интерфейсы", + enableSorting: false, + cell: (r) => ( + + {r.srcInterface || "—"} + {r.dstInterface || "—"} + + ), + }, + { + id: "protocol", + header: "Протокол", + enableSorting: false, + cell: (r) => `${r.protocol} / ${r.direction} / ${r.durationSec}s`, + }, + { + id: "txAvgMbps", + header: "TX", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.txAvgMbps != null ? `${Number(r.txAvgMbps).toFixed(1)}` : "—"), + }, + { + id: "rxAvgMbps", + header: "RX", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.rxAvgMbps != null ? `${Number(r.rxAvgMbps).toFixed(1)}` : "—"), + }, + { + id: "pingRttMs", + header: "Ping RTT", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.pingRttMs != null ? `${r.pingRttMs} мс` : "—"), + }, + { + id: "pingLossPct", + header: "Loss", + headerClassName: "text-right", + cellClassName: "text-right tabular-nums", + cell: (r) => (r.pingLossPct != null ? `${r.pingLossPct}%` : "—"), + }, + { + id: "ok", + header: "Результат", + enableSorting: false, + cell: (r) => , + }, + { + id: "error", + header: "Ошибка", + enableSorting: false, + cell: (r) => ( +
+ {r.error ?? ""} + {r.pingError ? ( + + ping: {r.pingError} + + ) : null} +
+ ), + }, + ] + return +} + +function transitionRu(t: AlertEngineRuleDiagSnapshot["hitTransition"]): string { + switch (t) { + case "problem": + return "проблема" + case "recovery": + return "восстановление" + case "neutral": + return "нейтрально" + default: + return "—" + } +} + +function blockedRu(b: AlertEngineRuleDiagSnapshot["blocked"]): string { + switch (b) { + case "no_hit": + return "условие не выполнено" + case "stability": + return "стабильность (confirmStabilitySec)" + case "cooldown": + return "cooldown" + case "no_telegram": + return "нет Telegram" + case "dedupe_positive": + return "дедуп восстановления" + case "in_group": + return "в группе (отдельно не шлём)" + default: + return "—" + } +} + +function AlertEngineRuleDiagGrid({ ruleDiag }: { ruleDiag: AlertEngineRuleDiagSnapshot[] }) { + const data = withRowId(ruleDiag, (d) => d.ruleId) + const columns: CompactDataGridColumn<(typeof data)[number]>[] = [ + { + id: "ruleId", + header: "ID правила", + accessorKey: "ruleId", + cell: (r) => ( + + {r.ruleId} + + ), + }, + { + id: "evalHit", + header: "Сработало", + cell: (r) => (r.evalHit ? "Да" : "Нет"), + }, + { + id: "hitTransition", + header: "Тип срабатывания", + cell: (r) => transitionRu(r.hitTransition), + }, + { + id: "stabilityOk", + header: "Стабильность", + cell: (r) => (r.stabilityOk ? "Да" : "Нет"), + }, + { + id: "cooldownOk", + header: "Кулдаун", + cell: (r) => (r.cooldownOk ? "Да" : "Нет"), + }, + { + id: "telegramOk", + header: "Telegram", + cell: (r) => (r.telegramOk ? "Да" : "Нет"), + }, + { + id: "hitMessage", + header: "Сообщение", + enableSorting: false, + cell: (r) => ( + + {r.hitMessage ?? "—"} + + ), + }, + { + id: "blocked", + header: "Причина блока", + cell: (r) => {blockedRu(r.blocked)}, + }, + ] + return ( + + ) +} + +function fmtUptimeSec(sec: number): string { + if (sec <= 0) return "—" + const d = Math.floor(sec / 86400) + const h = Math.floor((sec % 86400) / 3600) + const m = Math.floor((sec % 3600) / 60) + if (d > 0) return `${d}д ${h}ч` + if (h > 0) return `${h}ч ${m}м` + return `${m}м` +} + +export { + SnapshotDataGrid, + TrafficSnapshotGrid, + ResourcesSnapshotGrid, + ServersRestPingSnapshotGrid, + PingSnapshotGrid, + SpeedSnapshotGrid, + AlertEngineRuleDiagGrid, + type SnapshotRow, +} diff --git a/components/data-grids/subusers-data-grid.tsx b/components/data-grids/subusers-data-grid.tsx new file mode 100644 index 0000000..9e8ef5a --- /dev/null +++ b/components/data-grids/subusers-data-grid.tsx @@ -0,0 +1,234 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { Server } from "@/lib/data" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { FormToggle } from "@/components/form-kit" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { CableIcon, CopyIcon, EyeIcon, EyeOffIcon, Trash2Icon } from "lucide-react" + +export interface SubUserRow { + id: string + login: string + password: string + description: string + jhServerIds: string[] + clientIp: string + active: boolean + lastSeen: string | null +} + +interface SubusersDataGridProps { + subUsers: SubUserRow[] + servers: Server[] + revealedIds: Set + onToggleReveal: (id: string) => void + onToggleActive: (id: string) => void + onRemove: (id: string) => void +} + +function SubusersDataGrid({ + subUsers, + servers, + revealedIds, + onToggleReveal, + onToggleActive, + onRemove, +}: SubusersDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "login", + accessorKey: "login", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const su = row.original + return ( +
+

{su.login}

+ {su.description && ( +

{su.description}

+ )} + {su.lastSeen && ( +

{su.lastSeen}

+ )} +
+ ) + }, + meta: { + headerTitle: "Логин / описание", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "password", + header: () => Пароль, + enableSorting: false, + cell: ({ row }) => { + const su = row.original + const revealed = revealedIds.has(su.id) + return ( +
e.stopPropagation()}> + + {revealed ? su.password : "••••••••••••"} + + + +
+ ) + }, + meta: { + headerTitle: "Пароль", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "jhServers", + header: () => JH-серверы, + enableSorting: false, + cell: ({ row }) => { + const jhs = servers.filter((s) => row.original.jhServerIds.includes(s.id)) + return ( +
+ {jhs.length === 0 ? ( + + ) : ( + jhs.map((jh) => ( + + + {jh.name.split("-").slice(-1)[0]} + + )) + )} +
+ ) + }, + meta: { + headerTitle: "JH-серверы", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "clientIp", + accessorKey: "clientIp", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.clientIp || "—"} + + ), + meta: { + headerTitle: "IP-клиента", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "active", + accessorKey: "active", + header: () => Активен, + enableSorting: false, + cell: ({ row }) => ( +
e.stopPropagation()}> + onToggleActive(row.original.id)} + /> +
+ ), + size: 48, + meta: { + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "actions", + header: () => Удалить, + enableSorting: false, + cell: ({ row }) => ( + + ), + size: 40, + meta: { + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [onRemove, onToggleActive, onToggleReveal, revealedIds, servers], + ) + + const table = useReactTable({ + data: subUsers, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (subUsers.length === 0) { + return ( + } + title="Нет GRE-клиентов" + description="Добавьте учётки для подключения устройств" + className="border-0 py-12" + /> + ) + } + + return ( + + ) +} + +export { SubusersDataGrid, type SubusersDataGridProps } diff --git a/components/data-grids/uptime-resources-data-grid.tsx b/components/data-grids/uptime-resources-data-grid.tsx new file mode 100644 index 0000000..c03dab4 --- /dev/null +++ b/components/data-grids/uptime-resources-data-grid.tsx @@ -0,0 +1,385 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { Server } from "@/lib/data" +import { Flag } from "@/components/flag" +import { Sparkline } from "@/components/sparkline" +import { StatusDot } from "@/components/status-dot" +import { cn } from "@/lib/utils" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { + AlertCircleIcon, + ClockIcon, + CpuIcon, + HardDriveIcon, + ServerIcon, + SearchIcon, + ThermometerIcon, +} from "lucide-react" + +export interface UptimeResourceRow { + serverId: string + server: Server + hasData: boolean + cpu: number + cpuHistory: number[] + ramUsed: number + ramTotal: number + ramPct: number + hddUsed: number + hddTotal: number + hddPct: number + uptimeSeconds: number + boardName: string + temp?: number +} + +function TypeChip({ type }: { type: "jump-host" | "exit-node" | "home-router" }) { + return ( + + {type === "jump-host" ? "JH" : type === "home-router" ? "HR" : "EN"} + + ) +} + +function fmtMB(mb: number): string { + if (mb >= 1024) return `${(mb / 1024).toFixed(mb >= 10240 ? 0 : 1)} ГБ` + return `${mb.toFixed(1)} МБ` +} + +function fmtUptime(sec: number): string { + const d = Math.floor(sec / 86400) + const h = Math.floor((sec % 86400) / 3600) + const m = Math.floor((sec % 3600) / 60) + if (d > 0) return `${d}д ${h}ч` + if (h > 0) return `${h}ч ${m}м` + return `${m}м` +} + +function resPctColor(pct: number, warn = 70, crit = 85): string { + if (pct >= crit) return "text-red-600 dark:text-red-400" + if (pct >= warn) return "text-amber-600 dark:text-amber-400" + return "text-emerald-600 dark:text-emerald-400" +} + +function resBarColor(pct: number, warn = 70, crit = 85): string { + if (pct >= crit) return "bg-red-500" + if (pct >= warn) return "bg-amber-500" + return "bg-emerald-500" +} + +function MiniBar({ + pct, + warn = 70, + crit = 85, + className, +}: { + pct: number + warn?: number + crit?: number + className?: string +}) { + return ( +
+
+
+ ) +} + +interface UptimeResourcesDataGridProps { + rows: UptimeResourceRow[] +} + +function UptimeResourcesDataGrid({ rows }: UptimeResourcesDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "name", + accessorFn: (row) => row.server.name, + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const r = row.original + const srv = r.server + const offline = srv.status !== "online" + const noMetrics = offline || !r.hasData + const isCrit = + !noMetrics && + (r.cpu >= 85 || r.ramPct >= 85 || r.hddPct >= 85 || (r.temp ?? 0) >= 70) + return ( +
+ {isCrit && } + {!isCrit && } + + {srv.name} + + {srv.site} + {!offline && !r.hasData && ( + + нет данных + + )} +
+ ) + }, + meta: { + headerTitle: "Сервер", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "board", + accessorKey: "boardName", + header: () => ( + + Модель · ROS + + ), + enableSorting: false, + cell: ({ row }) => { + const r = row.original + return ( +
+ + {r.hasData ? r.boardName : "—"} + + {r.server.os} +
+ ) + }, + meta: { headerClassName: "hidden md:table-cell", cellClassName: "hidden md:table-cell px-4 py-3" }, + }, + { + id: "cpu", + accessorKey: "cpu", + header: ({ column }) => ( + + + + + ), + cell: ({ row }) => { + const r = row.original + const offline = r.server.status !== "online" + const noMetrics = offline || !r.hasData + if (noMetrics) { + return ( + + {offline ? "—" : "нет опроса"} + + ) + } + const cpuColor = + r.cpu >= 85 ? "hsl(0 84% 60%)" : r.cpu >= 70 ? "hsl(38 92% 50%)" : "hsl(142 76% 36%)" + return ( +
+
+ + {r.cpu}% + + +
+ +
+ ) + }, + meta: { + headerTitle: "CPU", + headerClassName: cn(DATA_GRID_CELL_PAD, "min-w-[160px]"), + cellClassName: cn(DATA_GRID_CELL_PAD, "min-w-[160px]"), + }, + }, + { + id: "ram", + accessorKey: "ramPct", + header: ({ column }) => ( + + + + + ), + cell: ({ row }) => { + const r = row.original + const offline = r.server.status !== "online" + const noMetrics = offline || !r.hasData + if (noMetrics) { + return {offline ? "—" : "нет опроса"} + } + return ( +
+
+ {r.ramPct}% + + {fmtMB(r.ramUsed)}/{fmtMB(r.ramTotal)} + +
+ +
+ ) + }, + meta: { + headerTitle: "RAM", + headerClassName: cn(DATA_GRID_CELL_PAD, "min-w-[175px]"), + cellClassName: cn(DATA_GRID_CELL_PAD, "min-w-[175px]"), + }, + }, + { + id: "hdd", + accessorKey: "hddPct", + header: ({ column }) => ( + + + + + ), + cell: ({ row }) => { + const r = row.original + const offline = r.server.status !== "online" + const noMetrics = offline || !r.hasData + if (noMetrics) { + return {offline ? "—" : "нет опроса"} + } + return ( +
+
+ {r.hddPct}% + + {fmtMB(r.hddUsed)}/{fmtMB(r.hddTotal)} + +
+ +
+ ) + }, + meta: { + headerTitle: "Диск", + headerClassName: cn(DATA_GRID_CELL_PAD, "min-w-[175px]"), + cellClassName: cn(DATA_GRID_CELL_PAD, "min-w-[175px]"), + }, + }, + { + id: "uptime", + accessorKey: "uptimeSeconds", + header: ({ column }) => ( + + + + + ), + cell: ({ row }) => { + const r = row.original + const offline = r.server.status !== "online" + const noMetrics = offline || !r.hasData + return ( + + {noMetrics ? "—" : fmtUptime(r.uptimeSeconds)} + + ) + }, + meta: { + headerTitle: "Uptime", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "temp", + accessorKey: "temp", + header: ({ column }) => ( + + + + + ), + cell: ({ row }) => { + const r = row.original + const offline = r.server.status !== "online" + const noMetrics = offline || !r.hasData + if (r.temp !== undefined && !noMetrics) { + return ( + = 70 + ? "text-red-600 dark:text-red-400" + : r.temp >= 55 + ? "text-amber-600 dark:text-amber-400" + : "text-muted-foreground", + )} + > + {r.temp}°C + + ) + } + return + }, + meta: { + headerTitle: "°C", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [], + ) + + const table = useReactTable({ + data: rows, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.serverId, + }) + + if (rows.length === 0) { + return ( + } + title="Ничего не найдено" + className="border-0 py-12" + /> + ) + } + + return ( + + ) +} + +export { UptimeResourcesDataGrid, type UptimeResourcesDataGridProps } diff --git a/components/data-grids/uptime-speed-history-data-grid.tsx b/components/data-grids/uptime-speed-history-data-grid.tsx new file mode 100644 index 0000000..c9a0fb0 --- /dev/null +++ b/components/data-grids/uptime-speed-history-data-grid.tsx @@ -0,0 +1,242 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { Server } from "@/lib/data" +import { Flag } from "@/components/flag" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { cn } from "@/lib/utils" +import { ArrowRightIcon, RefreshCwIcon } from "lucide-react" + +export interface SpeedTestRunRow { + id: string + startedAt: number + srcServerId: string + dstServerId: string + srcInterface?: string + dstInterface?: string + protocol: "tcp" | "udp" + direction: "transmit" | "receive" | "both" + durationSec: number + txAvgMbps: number + rxAvgMbps: number + status: "running" | "done" | "error" + afterBtPing?: { rttMs: number | null; lossPct: number | null; error: string | null } | null + srcInterfaceAddress?: string | null + dstInterfaceAddress?: string | null +} + +interface UptimeSpeedHistoryDataGridProps { + runs: SpeedTestRunRow[] + servers: Server[] +} + +function UptimeSpeedHistoryDataGrid({ runs, servers }: UptimeSpeedHistoryDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "startedAt", + accessorKey: "startedAt", + header: ({ column }) => , + cell: ({ row }) => ( + + {new Date(row.original.startedAt).toLocaleString("ru-RU", { + hour: "2-digit", + minute: "2-digit", + second: "2-digit", + day: "2-digit", + month: "2-digit", + })} + + ), + meta: { + headerTitle: "Время", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "route", + accessorFn: (row) => `${row.srcServerId}-${row.dstServerId}`, + header: ({ column }) => , + cell: ({ row }) => { + const run = row.original + const src = servers.find((s) => s.id === run.srcServerId) + const dst = servers.find((s) => s.id === run.dstServerId) + return ( +
+
+ + {src?.name ?? run.srcServerId} + + + {dst?.name ?? run.dstServerId} +
+
+ {run.srcInterfaceAddress && run.dstInterfaceAddress + ? `${run.srcInterfaceAddress} → ${run.dstInterfaceAddress}` + : "внутренние IP: auto/не указаны"} +
+
+ ) + }, + meta: { headerTitle: "Маршрут", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "params", + accessorFn: (row) => `${row.protocol}-${row.direction}-${row.durationSec}`, + header: ({ column }) => , + cell: ({ row }) => { + const run = row.original + return ( +
+ + {run.protocol.toUpperCase()} + + · + {run.direction} + · + {run.durationSec}s +
+ ) + }, + meta: { headerTitle: "Параметры", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "status", + accessorKey: "status", + header: ({ column }) => , + cell: ({ row }) => { + const status = row.original.status + if (status === "running") { + return ( + + + running + + ) + } + if (status === "error") { + return error + } + return done + }, + meta: { headerTitle: "Статус", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "txAvgMbps", + accessorKey: "txAvgMbps", + header: ({ column }) => , + cell: ({ row }) => { + const run = row.original + const maxVal = Math.max(run.txAvgMbps, run.rxAvgMbps, 1) + return ( +
+
+
+
+ + {run.txAvgMbps} Мбит/с + +
+ ) + }, + meta: { headerTitle: "TX avg", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "rxAvgMbps", + accessorKey: "rxAvgMbps", + header: ({ column }) => , + cell: ({ row }) => { + const run = row.original + const maxVal = Math.max(run.txAvgMbps, run.rxAvgMbps, 1) + return ( +
+
+
+
+ + {run.rxAvgMbps} Мбит/с + +
+ ) + }, + meta: { headerTitle: "RX avg", headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "afterBtPing", + accessorFn: (row) => row.afterBtPing?.rttMs ?? -1, + header: ({ column }) => , + cell: ({ row }) => { + const run = row.original + if (run.status !== "done") return + if (run.afterBtPing?.error) { + return ( + + ошибка + + ) + } + if (run.afterBtPing?.rttMs != null) { + return ( + + {run.afterBtPing.rttMs} мс + {run.afterBtPing.lossPct != null && run.afterBtPing.lossPct > 0 && ( + · {run.afterBtPing.lossPct}% + )} + + ) + } + return ( + + timeout + {run.afterBtPing?.lossPct != null && · {run.afterBtPing.lossPct}%} + + ) + }, + meta: { + headerTitle: "Ping после BT", + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [servers], + ) + + const table = useReactTable({ + data: runs, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + initialState: { sorting: [{ id: "startedAt", desc: true }] }, + }) + + return ( + + ) +} + +export { UptimeSpeedHistoryDataGrid, type UptimeSpeedHistoryDataGridProps } diff --git a/components/data-grids/vxlan-data-grid.tsx b/components/data-grids/vxlan-data-grid.tsx new file mode 100644 index 0000000..8eaece6 --- /dev/null +++ b/components/data-grids/vxlan-data-grid.tsx @@ -0,0 +1,289 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { Server, VxlanTunnel } from "@/lib/data" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { EmptyState } from "@/components/empty-state" +import { + CodeXmlIcon, + MoreHorizontalIcon, + NetworkIcon, + PencilIcon, + PowerIcon, + Trash2Icon, +} from "lucide-react" + +interface VxlanDataGridProps { + tunnels: VxlanTunnel[] + servers: Server[] + onExport: (tunnel: VxlanTunnel) => void +} + +function VxlanDataGrid({ tunnels, servers, onExport }: VxlanDataGridProps) { + const serverMap = useMemo( + () => new Map(servers.map((s) => [s.id, s])), + [servers], + ) + + const columns = useMemo[]>( + () => [ + { + id: "name", + accessorKey: "name", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const t = row.original + return ( +
+ +
+

{t.name}

+

VTEP: {t.vtepIp}

+
+
+ ) + }, + meta: { + headerTitle: "Имя / VTEP", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + }, + }, + { + id: "server", + accessorKey: "serverId", + header: ({ column }) => , + cell: ({ row }) => { + const srv = serverMap.get(row.original.serverId) + if (!srv) return + return ( +
+ + {srv.name} +
+ ) + }, + meta: { + headerTitle: "Сервер", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "vni", + accessorKey: "vni", + header: ({ column }) => , + cell: ({ row }) => {row.original.vni}, + meta: { + headerTitle: "VNI", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "dstPort", + accessorKey: "dstPort", + header: ({ column }) => , + cell: ({ row }) => {row.original.dstPort}, + meta: { + headerTitle: "Port", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "remoteVteps", + header: () => ( + Remote + ), + enableSorting: false, + cell: ({ row }) => ( + {row.original.remoteVteps.length} + ), + meta: { + headerTitle: "Remote", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "arpProxy", + accessorKey: "arpProxy", + header: () => ARP, + enableSorting: false, + cell: ({ row }) => ( + + ARP {row.original.arpProxy ? "✓" : "✗"} + + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "macLearning", + accessorKey: "macLearning", + header: () => MAC, + enableSorting: false, + cell: ({ row }) => ( + + MAC {row.original.macLearning ? "✓" : "✗"} + + ), + meta: { headerClassName: DATA_GRID_CELL_PAD, cellClassName: DATA_GRID_CELL_PAD }, + }, + { + id: "status", + accessorKey: "status", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.status === "up" ? "UP" : "DOWN"} + + ), + meta: { + headerTitle: "Статус", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "actions", + header: () => Действия, + cell: ({ row }) => { + const tunnel = row.original + return ( +
+ + + + + } + /> + + onExport(tunnel)}> + + Экспорт .rsc + + + + Редактировать + + + + + {tunnel.enabled ? "Отключить" : "Включить"} + + + + + Удалить + + + +
+ ) + }, + enableSorting: false, + size: 56, + meta: { + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [onExport, serverMap], + ) + + const table = useReactTable({ + data: tunnels, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getRowId: (row) => row.id, + }) + + if (tunnels.length === 0) { + return ( + } + title="Нет VXLAN-туннелей" + description="Добавьте туннель или измените поиск" + className="border-0 py-16" + /> + ) + } + + return ( + + ) +} + +export { VxlanDataGrid, type VxlanDataGridProps } diff --git a/components/data-grids/wireguard-data-grid.tsx b/components/data-grids/wireguard-data-grid.tsx new file mode 100644 index 0000000..e8e62fb --- /dev/null +++ b/components/data-grids/wireguard-data-grid.tsx @@ -0,0 +1,276 @@ +"use client" + +import { useMemo } from "react" +import { + type ColumnDef, + getCoreRowModel, + getExpandedRowModel, + getSortedRowModel, + useReactTable, +} from "@tanstack/react-table" +import type { WireGuardInterface } from "@/lib/data" +import { Flag } from "@/components/flag" +import { cn } from "@/lib/utils" +import { Button } from "@/components/ui/button" +import { + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuSeparator, + DropdownMenuTrigger, +} from "@/components/ui/dropdown-menu" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" +import { + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { WireGuardPeersDetail } from "@/components/data-grids/wireguard-peers-detail" +import { EmptyState } from "@/components/empty-state" +import { + ChevronDownIcon, + ChevronRightIcon, + CodeXmlIcon, + MoreHorizontalIcon, + PencilIcon, + PlusIcon, + PowerIcon, + ShieldCheckIcon, + Trash2Icon, +} from "lucide-react" + +export interface WgIfaceWithServer extends WireGuardInterface { + serverId: string + serverName: string + serverCountry: string +} + +interface WireguardDataGridProps { + interfaces: WgIfaceWithServer[] + onExport: (iface: WgIfaceWithServer) => void +} + +function WireguardDataGrid({ interfaces, onExport }: WireguardDataGridProps) { + const columns = useMemo[]>( + () => [ + { + id: "name", + accessorKey: "name", + header: ({ column }) => ( + + ), + cell: ({ row }) => { + const iface = row.original + const expanded = row.getIsExpanded() + const onlinePeers = iface.peers.filter((p) => !!p.latestHandshake).length + return ( +
+ {expanded ? ( + + ) : ( + + )} +
+
+ + {iface.name} +
+
+ + {iface.serverName} +
+

+ {onlinePeers}/{iface.peers.length} пиров +

+
+
+ ) + }, + meta: { + headerTitle: "Интерфейс / Сервер", + headerClassName: DATA_GRID_CELL_PAD_FIRST, + cellClassName: DATA_GRID_CELL_PAD_FIRST, + expandedContent: (row: WgIfaceWithServer) => ( + + ), + }, + }, + { + id: "listenPort", + accessorKey: "listenPort", + header: ({ column }) => , + cell: ({ row }) => ( + {row.original.listenPort} + ), + meta: { + headerTitle: "Порт", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "mtu", + accessorKey: "mtu", + header: ({ column }) => , + cell: ({ row }) => {row.original.mtu}, + meta: { + headerTitle: "MTU", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "peers", + header: () => ( + Пиры + ), + enableSorting: false, + cell: ({ row }) => { + const iface = row.original + const onlinePeers = iface.peers.filter((p) => !!p.latestHandshake).length + return ( + + {onlinePeers} + /{iface.peers.length} + + ) + }, + meta: { + headerTitle: "Пиры", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: cn(DATA_GRID_CELL_PAD, "text-center"), + }, + }, + { + id: "status", + accessorKey: "status", + header: ({ column }) => , + cell: ({ row }) => ( + + {row.original.status === "up" ? "UP" : "DOWN"} + + ), + meta: { + headerTitle: "Статус", + headerClassName: DATA_GRID_CELL_PAD, + cellClassName: DATA_GRID_CELL_PAD, + }, + }, + { + id: "actions", + header: () => Действия, + cell: ({ row }) => { + const iface = row.original + return ( +
e.stopPropagation()} + onKeyDown={(e) => e.stopPropagation()} + > + + e.stopPropagation()} + aria-label={`Действия: ${iface.name}`} + > + + + } + /> + + onExport(iface)}> + + Экспорт .rsc + + + + Редактировать + + + + Добавить пира + + + + + {iface.enabled ? "Отключить" : "Включить"} + + + + + Удалить + + + +
+ ) + }, + enableSorting: false, + size: 56, + meta: { + headerClassName: DATA_GRID_CELL_PAD_LAST, + cellClassName: DATA_GRID_CELL_PAD_LAST, + }, + }, + ], + [onExport], + ) + + const table = useReactTable({ + data: interfaces, + columns, + getCoreRowModel: getCoreRowModel(), + getSortedRowModel: getSortedRowModel(), + getExpandedRowModel: getExpandedRowModel(), + getRowId: (row) => row.id, + getRowCanExpand: () => true, + }) + + if (interfaces.length === 0) { + return ( + } + title="Нет WireGuard интерфейсов" + description="Добавьте первый интерфейс или проверьте поиск" + className="border-0 py-16" + /> + ) + } + + return ( + table.getRow(row.id).toggleExpanded()} + tableClassNames={{ + headerRow: "border-b border-border", + bodyRow: cn("group/row", "[&[data-disabled=true]]:opacity-50"), + }} + /> + ) +} + +export { WireguardDataGrid, type WireguardDataGridProps } diff --git a/components/data-grids/wireguard-peers-detail.tsx b/components/data-grids/wireguard-peers-detail.tsx new file mode 100644 index 0000000..f98152f --- /dev/null +++ b/components/data-grids/wireguard-peers-detail.tsx @@ -0,0 +1,81 @@ +"use client" + +import type { WireGuardPeer } from "@/lib/data" +import { cn } from "@/lib/utils" +import { + ArrowDownIcon, + ArrowUpIcon, + KeyRoundIcon, +} from "lucide-react" + +function fmtBytes(n: number | undefined): string { + if (!n) return "—" + if (n >= 1_000_000_000) return `${(n / 1_000_000_000).toFixed(1)} ГБ` + if (n >= 1_000_000) return `${(n / 1_000_000).toFixed(1)} МБ` + if (n >= 1_000) return `${(n / 1_000).toFixed(0)} КБ` + return `${n} Б` +} + +function truncKey(key: string): string { + if (key.length <= 20) return key + return `${key.slice(0, 8)}…${key.slice(-8)}` +} + +function WireGuardPeersDetail({ peers }: { peers: WireGuardPeer[] }) { + if (peers.length === 0) { + return ( +
+ Нет пиров +
+ ) + } + + return ( +
+
+ Public Key + Allowed IPs + Последнее рукопожатие + RX / TX + Endpoint +
+ {peers.map((peer) => ( +
+
+ + + {truncKey(peer.publicKey)} + +
+
+ {peer.allowedIps.join(", ")} +
+ + {peer.latestHandshake ?? "нет рукопожатия"} + +
+ + + {fmtBytes(peer.transferRx)} + + + + {fmtBytes(peer.transferTx)} + +
+ {peer.endpoint ?? "—"} +
+ ))} +
+ ) +} + +export { WireGuardPeersDetail, fmtBytes, truncKey } diff --git a/components/data-page-card.tsx b/components/data-page-card.tsx new file mode 100644 index 0000000..64ea37a --- /dev/null +++ b/components/data-page-card.tsx @@ -0,0 +1,18 @@ +import type { ReactNode } from "react" +import { Card } from "@/components/ui/card" +import { cn } from "@/lib/utils" + +interface DataPageCardProps { + children: ReactNode + className?: string +} + +function DataPageCard({ children, className }: DataPageCardProps) { + return ( + + {children} + + ) +} + +export { DataPageCard, type DataPageCardProps } diff --git a/components/data-page-toolbar.tsx b/components/data-page-toolbar.tsx index d526f67..5248bdd 100644 --- a/components/data-page-toolbar.tsx +++ b/components/data-page-toolbar.tsx @@ -3,7 +3,11 @@ import { ReactNode } from "react" import { SearchIcon } from "lucide-react" import { cn } from "@/lib/utils" -import { Input } from "@/components/ui/input" +import { + InputGroup, + InputGroupAddon, + InputGroupInput, +} from "@/components/ui/input-group" import { Filters, type Filter, @@ -58,15 +62,16 @@ function DataPageToolbar({ /> )} {onSearchChange != null && ( -
- - + + + + onSearchChange(e.target.value)} /> -
+ )} {countLabel && ( {countLabel} diff --git a/components/data-table.tsx b/components/data-table.tsx index b7af128..f6bef21 100644 --- a/components/data-table.tsx +++ b/components/data-table.tsx @@ -4,18 +4,18 @@ import { useMemo, useState } from "react" import { type ColumnDef, getCoreRowModel, - getFilteredRowModel, getPaginationRowModel, getSortedRowModel, useReactTable, } from "@tanstack/react-table" -import { Card } from "@/components/ui/card" +import { DataGridShell } from "@/components/data-grids/shared/data-grid-shell" import { - DataGrid, - DataGridContainer, - DataGridPagination, - DataGridTable, -} from "@/components/reui/data-grid" + DATA_GRID_CELL_PAD, + DATA_GRID_CELL_PAD_FIRST, + DATA_GRID_CELL_PAD_LAST, +} from "@/components/data-grids/shared/data-grid-layout" +import { DataGridSortHeader } from "@/components/data-grids/shared/data-grid-sort-header" +import { DataPageCard } from "@/components/data-page-card" import { DataPageToolbar } from "@/components/data-page-toolbar" import { EmptyState } from "@/components/empty-state" import { InboxIcon } from "lucide-react" @@ -24,6 +24,7 @@ export interface Column { key: string label: string render: (row: T) => React.ReactNode + enableSorting?: boolean } interface DataTableProps { @@ -34,6 +35,8 @@ interface DataTableProps { isLoading?: boolean emptyTitle?: string emptyDescription?: string + pagination?: boolean + countLabel?: string } export function DataTable({ @@ -44,9 +47,10 @@ export function DataTable({ isLoading = false, emptyTitle = "Нет записей", emptyDescription, + pagination = false, + countLabel, }: DataTableProps) { const [search, setSearch] = useState("") - const [globalFilter, setGlobalFilter] = useState("") const filteredData = useMemo(() => { if (!search || searchKeys.length === 0) return data @@ -57,59 +61,70 @@ export function DataTable({ }, [data, search, searchKeys]) const columnDefs = useMemo[]>( - () => - columns.map((col) => ({ + () => { + const defs: ColumnDef[] = columns.map((col, index) => ({ id: col.key, accessorKey: col.key, - header: col.label, + header: ({ column }) => ( + + ), cell: ({ row }) => col.render(row.original), - meta: { headerTitle: col.label }, - })), + enableSorting: col.enableSorting !== false, + meta: { + headerTitle: col.label, + headerClassName: + index === 0 + ? DATA_GRID_CELL_PAD_FIRST + : index === columns.length - 1 + ? DATA_GRID_CELL_PAD_LAST + : DATA_GRID_CELL_PAD, + cellClassName: + index === 0 + ? DATA_GRID_CELL_PAD_FIRST + : index === columns.length - 1 + ? DATA_GRID_CELL_PAD_LAST + : DATA_GRID_CELL_PAD, + }, + })) + return defs + }, [columns], ) const table = useReactTable({ data: filteredData, columns: columnDefs, - state: { globalFilter }, - onGlobalFilterChange: setGlobalFilter, getCoreRowModel: getCoreRowModel(), getSortedRowModel: getSortedRowModel(), - getFilteredRowModel: getFilteredRowModel(), - getPaginationRowModel: getPaginationRowModel(), + ...(pagination ? { getPaginationRowModel: getPaginationRowModel() } : {}), getRowId: (row) => row.id, }) const displayCount = searchKeys.length > 0 ? filteredData.length : data.length return ( - + - } title={emptyTitle} description={emptyDescription} - className="py-12" + className="border-0 py-12" /> } - tableLayout={{ rowBorder: true, headerBackground: true }} - > - - - - {filteredData.length > 0 && } - - + /> + ) } diff --git a/tsconfig.tsbuildinfo b/tsconfig.tsbuildinfo index 8782b09..03c41f9 100644 --- a/tsconfig.tsbuildinfo +++ b/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./lib/backend-internal-url.ts","./next.config.ts","./lib/proxy-backend-request.ts","./app/api/system/database/backup/route.ts","./app/api/system/database/restore/route.ts","./node_modules/clsx/clsx.d.mts","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./node_modules/tailwind-merge/dist/types.d.ts","./lib/utils.ts","./components/ui/label.tsx","./node_modules/@base-ui/react/esm/internals/reason-parts.d.ts","./node_modules/@base-ui/react/esm/internals/reasons.d.ts","./node_modules/@base-ui/react/esm/internals/createbaseuieventdetails.d.ts","./node_modules/@base-ui/react/esm/types/index.d.ts","./node_modules/@base-ui/react/esm/internals/types.d.ts","./node_modules/@base-ui/react/esm/separator/separator.d.ts","./node_modules/@base-ui/react/esm/separator/index.d.ts","./components/ui/separator.tsx","./components/ui/field.tsx","./components/form-kit/form-field.tsx","./node_modules/@base-ui/react/esm/internals/form-context/formcontext.d.ts","./node_modules/@base-ui/react/esm/form/form.d.ts","./node_modules/@base-ui/react/esm/form/index.d.ts","./node_modules/@base-ui/react/esm/field/root/fieldroot.d.ts","./node_modules/@base-ui/react/esm/switch/root/switchroot.d.ts","./node_modules/@base-ui/react/esm/switch/thumb/switchthumb.d.ts","./node_modules/@base-ui/react/esm/switch/index.parts.d.ts","./node_modules/@base-ui/react/esm/switch/index.d.ts","./components/ui/switch.tsx","./components/form-kit/form-toggle.tsx","./components/form-kit/section-title.tsx","./components/form-kit/segmented-control.tsx","./components/form-kit/index.ts","./node_modules/@tanstack/table-core/build/lib/utils.d.ts","./node_modules/@tanstack/table-core/build/lib/core/table.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnvisibility.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnordering.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnpinning.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowpinning.d.ts","./node_modules/@tanstack/table-core/build/lib/core/headers.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnfaceting.d.ts","./node_modules/@tanstack/table-core/build/lib/features/globalfaceting.d.ts","./node_modules/@tanstack/table-core/build/lib/filterfns.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnfiltering.d.ts","./node_modules/@tanstack/table-core/build/lib/features/globalfiltering.d.ts","./node_modules/@tanstack/table-core/build/lib/sortingfns.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowsorting.d.ts","./node_modules/@tanstack/table-core/build/lib/aggregationfns.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columngrouping.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowexpanding.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnsizing.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowpagination.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowselection.d.ts","./node_modules/@tanstack/table-core/build/lib/core/row.d.ts","./node_modules/@tanstack/table-core/build/lib/core/cell.d.ts","./node_modules/@tanstack/table-core/build/lib/core/column.d.ts","./node_modules/@tanstack/table-core/build/lib/types.d.ts","./node_modules/@tanstack/table-core/build/lib/columnhelper.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getcorerowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getexpandedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfacetedminmaxvalues.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfacetedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfaceteduniquevalues.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfilteredrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getgroupedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getpaginationrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getsortedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/index.d.ts","./node_modules/@tanstack/react-table/build/lib/index.d.ts","./components/reui/data-grid/data-grid.tsx","./node_modules/@base-ui/react/esm/merge-props/mergeprops.d.ts","./node_modules/@base-ui/react/esm/merge-props/index.d.ts","./node_modules/@base-ui/react/esm/internals/getstateattributesprops.d.ts","./node_modules/@base-ui/react/esm/use-render/userender.d.ts","./node_modules/@base-ui/react/esm/use-render/index.d.ts","./components/reui/badge.tsx","./node_modules/@base-ui/react/esm/button/button.d.ts","./node_modules/@base-ui/react/esm/button/index.d.ts","./components/ui/button.tsx","./node_modules/@base-ui/react/esm/field/label/fieldlabel.d.ts","./node_modules/@base-ui/react/esm/internals/usetransitionstatus.d.ts","./node_modules/@base-ui/react/esm/field/error/fielderror.d.ts","./node_modules/@base-ui/react/esm/field/description/fielddescription.d.ts","./node_modules/@base-ui/react/esm/field/control/fieldcontrol.d.ts","./node_modules/@base-ui/react/esm/field/validity/fieldvalidity.d.ts","./node_modules/@base-ui/react/esm/field/item/fielditem.d.ts","./node_modules/@base-ui/react/esm/field/index.parts.d.ts","./node_modules/@base-ui/react/esm/field/index.d.ts","./node_modules/@base-ui/react/esm/input/input.d.ts","./node_modules/@base-ui/react/esm/input/index.d.ts","./components/ui/input.tsx","./node_modules/reselect/dist/reselect.d.ts","./node_modules/@base-ui/utils/esm/store/createselector.d.ts","./node_modules/@base-ui/utils/esm/store/createselectormemoized.d.ts","./node_modules/@base-ui/utils/esm/fasthooks.d.ts","./node_modules/@base-ui/utils/esm/store/store.d.ts","./node_modules/@base-ui/utils/esm/store/usestore.d.ts","./node_modules/@base-ui/utils/esm/store/reactstore.d.ts","./node_modules/@base-ui/utils/esm/store/storeinspector.d.ts","./node_modules/@base-ui/utils/esm/store/index.d.ts","./node_modules/@base-ui/utils/esm/usetimeout.d.ts","./node_modules/@base-ui/utils/esm/useenhancedclickhandler.d.ts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useinteractions.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtreestore.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingrootstore.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingfocusmanager.d.ts","./node_modules/@base-ui/react/esm/internals/userenderelement.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingportal.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclientpoint.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usedismiss.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefocus.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehovershared.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehover.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverfloatinginteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverreferenceinteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/uselistnavigation.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/userole.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usetypeahead.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloatingrootcontext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/safepolygon.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtree.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/types.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingdelaygroup.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclick.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloating.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usesyncedfloatingrootcontext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/index.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popuptriggermap.d.ts","./node_modules/@base-ui/react/esm/utils/popups/store.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popupstoreutils.d.ts","./node_modules/@base-ui/react/esm/utils/popups/index.d.ts","./node_modules/@base-ui/react/esm/accordion/root/accordionroot.d.ts","./node_modules/@base-ui/react/esm/collapsible/root/collapsibleroot.d.ts","./node_modules/@base-ui/react/esm/collapsible/root/usecollapsibleroot.d.ts","./node_modules/@base-ui/react/esm/accordion/item/accordionitem.d.ts","./node_modules/@base-ui/react/esm/accordion/header/accordionheader.d.ts","./node_modules/@base-ui/react/esm/accordion/trigger/accordiontrigger.d.ts","./node_modules/@base-ui/react/esm/accordion/panel/accordionpanel.d.ts","./node_modules/@base-ui/react/esm/accordion/index.parts.d.ts","./node_modules/@base-ui/react/esm/accordion/index.d.ts","./node_modules/@base-ui/react/esm/dialog/root/dialogroot.d.ts","./node_modules/@base-ui/react/esm/dialog/store/dialogstore.d.ts","./node_modules/@base-ui/react/esm/dialog/store/dialoghandle.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/root/alertdialogroot.d.ts","./node_modules/@base-ui/react/esm/dialog/backdrop/dialogbackdrop.d.ts","./node_modules/@base-ui/react/esm/dialog/close/dialogclose.d.ts","./node_modules/@base-ui/react/esm/dialog/description/dialogdescription.d.ts","./node_modules/@base-ui/react/esm/dialog/popup/dialogpopup.d.ts","./node_modules/@base-ui/react/esm/dialog/portal/dialogportal.d.ts","./node_modules/@base-ui/react/esm/dialog/title/dialogtitle.d.ts","./node_modules/@base-ui/react/esm/dialog/trigger/dialogtrigger.d.ts","./node_modules/@base-ui/react/esm/dialog/viewport/dialogviewport.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/handle.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/index.parts.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/index.d.ts","./node_modules/@base-ui/react/esm/internals/resolvevaluelabel.d.ts","./node_modules/@base-ui/react/esm/combobox/root/ariacombobox.d.ts","./node_modules/@base-ui/react/esm/autocomplete/root/autocompleteroot.d.ts","./node_modules/@base-ui/react/esm/autocomplete/value/autocompletevalue.d.ts","./node_modules/@base-ui/react/esm/utils/useanchorpositioning.d.ts","./node_modules/@base-ui/react/esm/autocomplete/trigger/autocompletetrigger.d.ts","./node_modules/@base-ui/react/esm/combobox/input/comboboxinput.d.ts","./node_modules/@base-ui/react/esm/autocomplete/input-group/autocompleteinputgroup.d.ts","./node_modules/@base-ui/react/esm/combobox/icon/comboboxicon.d.ts","./node_modules/@base-ui/react/esm/combobox/clear/comboboxclear.d.ts","./node_modules/@base-ui/react/esm/combobox/list/comboboxlist.d.ts","./node_modules/@base-ui/react/esm/combobox/status/comboboxstatus.d.ts","./node_modules/@base-ui/react/esm/combobox/portal/comboboxportal.d.ts","./node_modules/@base-ui/react/esm/combobox/backdrop/comboboxbackdrop.d.ts","./node_modules/@base-ui/react/esm/combobox/positioner/comboboxpositioner.d.ts","./node_modules/@base-ui/react/esm/combobox/popup/comboboxpopup.d.ts","./node_modules/@base-ui/react/esm/combobox/arrow/comboboxarrow.d.ts","./node_modules/@base-ui/react/esm/combobox/group/comboboxgroup.d.ts","./node_modules/@base-ui/react/esm/combobox/group-label/comboboxgrouplabel.d.ts","./node_modules/@base-ui/react/esm/autocomplete/item/autocompleteitem.d.ts","./node_modules/@base-ui/react/esm/combobox/row/comboboxrow.d.ts","./node_modules/@base-ui/react/esm/combobox/collection/comboboxcollection.d.ts","./node_modules/@base-ui/react/esm/combobox/empty/comboboxempty.d.ts","./node_modules/@base-ui/react/esm/internals/filter.d.ts","./node_modules/@base-ui/react/esm/combobox/root/utils/usefilter.d.ts","./node_modules/@base-ui/react/esm/combobox/root/utils/usefiltereditems.d.ts","./node_modules/@base-ui/react/esm/autocomplete/index.parts.d.ts","./node_modules/@base-ui/react/esm/autocomplete/index.d.ts","./node_modules/@base-ui/react/esm/avatar/root/avatarroot.d.ts","./node_modules/@base-ui/react/esm/avatar/image/useimageloadingstatus.d.ts","./node_modules/@base-ui/react/esm/avatar/image/avatarimage.d.ts","./node_modules/@base-ui/react/esm/avatar/fallback/avatarfallback.d.ts","./node_modules/@base-ui/react/esm/avatar/index.parts.d.ts","./node_modules/@base-ui/react/esm/avatar/index.d.ts","./node_modules/@base-ui/react/esm/checkbox/root/checkboxroot.d.ts","./node_modules/@base-ui/react/esm/checkbox/indicator/checkboxindicator.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.parts.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.d.ts","./node_modules/@base-ui/react/esm/checkbox-group/checkboxgroup.d.ts","./node_modules/@base-ui/react/esm/checkbox-group/index.d.ts","./node_modules/@base-ui/react/esm/collapsible/trigger/collapsibletrigger.d.ts","./node_modules/@base-ui/react/esm/collapsible/panel/collapsiblepanel.d.ts","./node_modules/@base-ui/react/esm/collapsible/index.parts.d.ts","./node_modules/@base-ui/react/esm/collapsible/index.d.ts","./node_modules/@base-ui/react/esm/combobox/root/comboboxroot.d.ts","./node_modules/@base-ui/react/esm/combobox/label/comboboxlabel.d.ts","./node_modules/@base-ui/react/esm/combobox/value/comboboxvalue.d.ts","./node_modules/@base-ui/react/esm/combobox/input-group/comboboxinputgroup.d.ts","./node_modules/@base-ui/react/esm/combobox/trigger/comboboxtrigger.d.ts","./node_modules/@base-ui/react/esm/combobox/item/comboboxitem.d.ts","./node_modules/@base-ui/react/esm/combobox/item-indicator/comboboxitemindicator.d.ts","./node_modules/@base-ui/react/esm/combobox/chips/comboboxchips.d.ts","./node_modules/@base-ui/react/esm/combobox/chip/comboboxchip.d.ts","./node_modules/@base-ui/react/esm/combobox/chip-remove/comboboxchipremove.d.ts","./node_modules/@base-ui/react/esm/combobox/index.parts.d.ts","./node_modules/@base-ui/react/esm/combobox/index.d.ts","./node_modules/@base-ui/react/esm/menu/arrow/menuarrow.d.ts","./node_modules/@base-ui/react/esm/menu/backdrop/menubackdrop.d.ts","./node_modules/@base-ui/react/esm/menu/store/menustore.d.ts","./node_modules/@base-ui/react/esm/menu/root/menurootcontext.d.ts","./node_modules/@base-ui/react/esm/menubar/menubarcontext.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/contextmenurootcontext.d.ts","./node_modules/@base-ui/react/esm/menu/store/menuhandle.d.ts","./node_modules/@base-ui/react/esm/menu/root/menuroot.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item/menucheckboxitem.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item-indicator/menucheckboxitemindicator.d.ts","./node_modules/@base-ui/react/esm/menu/group/menugroup.d.ts","./node_modules/@base-ui/react/esm/menu/group-label/menugrouplabel.d.ts","./node_modules/@base-ui/react/esm/menu/item/menuitem.d.ts","./node_modules/@base-ui/react/esm/menu/link-item/menulinkitem.d.ts","./node_modules/@base-ui/react/esm/menu/popup/menupopup.d.ts","./node_modules/@base-ui/react/esm/menu/portal/menuportal.d.ts","./node_modules/@base-ui/react/esm/menu/positioner/menupositioner.d.ts","./node_modules/@base-ui/react/esm/menu/radio-group/menuradiogroup.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item/menuradioitem.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item-indicator/menuradioitemindicator.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenurootcontext.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenuroot.d.ts","./node_modules/@base-ui/react/esm/menu/trigger/menutrigger.d.ts","./node_modules/@base-ui/react/esm/menu/viewport/menuviewport.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-trigger/menusubmenutrigger.d.ts","./node_modules/@base-ui/react/esm/menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/menu/index.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/contextmenuroot.d.ts","./node_modules/@base-ui/react/esm/context-menu/trigger/contextmenutrigger.d.ts","./node_modules/@base-ui/react/esm/context-menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/context-menu/index.d.ts","./node_modules/@base-ui/react/esm/csp-provider/cspprovider.d.ts","./node_modules/@base-ui/react/esm/csp-provider/index.parts.d.ts","./node_modules/@base-ui/react/esm/csp-provider/index.d.ts","./node_modules/@base-ui/react/esm/dialog/index.parts.d.ts","./node_modules/@base-ui/react/esm/dialog/index.d.ts","./node_modules/@base-ui/react/esm/internals/direction-context/directioncontext.d.ts","./node_modules/@base-ui/react/esm/direction-provider/directionprovider.d.ts","./node_modules/@base-ui/react/esm/direction-provider/index.parts.d.ts","./node_modules/@base-ui/react/esm/direction-provider/index.d.ts","./node_modules/@base-ui/react/esm/drawer/backdrop/drawerbackdrop.d.ts","./node_modules/@base-ui/react/esm/drawer/close/drawerclose.d.ts","./node_modules/@base-ui/react/esm/drawer/content/drawercontent.d.ts","./node_modules/@base-ui/react/esm/drawer/description/drawerdescription.d.ts","./node_modules/@base-ui/react/esm/drawer/indent/drawerindent.d.ts","./node_modules/@base-ui/react/esm/drawer/indent-background/drawerindentbackground.d.ts","./node_modules/@base-ui/react/esm/utils/useswipedismiss.d.ts","./node_modules/@base-ui/react/esm/drawer/root/drawerroot.d.ts","./node_modules/@base-ui/react/esm/drawer/root/drawerrootcontext.d.ts","./node_modules/@base-ui/react/esm/drawer/popup/drawerpopup.d.ts","./node_modules/@base-ui/react/esm/drawer/portal/drawerportal.d.ts","./node_modules/@base-ui/react/esm/drawer/provider/drawerprovider.d.ts","./node_modules/@base-ui/react/esm/drawer/swipe-area/drawerswipearea.d.ts","./node_modules/@base-ui/react/esm/drawer/title/drawertitle.d.ts","./node_modules/@base-ui/react/esm/drawer/trigger/drawertrigger.d.ts","./node_modules/@base-ui/react/esm/drawer/viewport/drawerviewport.d.ts","./node_modules/@base-ui/react/esm/drawer/index.parts.d.ts","./node_modules/@base-ui/react/esm/drawer/index.d.ts","./node_modules/@base-ui/react/esm/fieldset/root/fieldsetroot.d.ts","./node_modules/@base-ui/react/esm/fieldset/legend/fieldsetlegend.d.ts","./node_modules/@base-ui/react/esm/fieldset/index.parts.d.ts","./node_modules/@base-ui/react/esm/fieldset/index.d.ts","./node_modules/@base-ui/react/esm/menubar/menubar.d.ts","./node_modules/@base-ui/react/esm/menubar/index.d.ts","./node_modules/@base-ui/react/esm/meter/root/meterroot.d.ts","./node_modules/@base-ui/react/esm/meter/track/metertrack.d.ts","./node_modules/@base-ui/react/esm/meter/indicator/meterindicator.d.ts","./node_modules/@base-ui/react/esm/meter/value/metervalue.d.ts","./node_modules/@base-ui/react/esm/meter/label/meterlabel.d.ts","./node_modules/@base-ui/react/esm/meter/index.parts.d.ts","./node_modules/@base-ui/react/esm/meter/index.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/root/navigationmenuroot.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/list/navigationmenulist.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/item/navigationmenuitem.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/content/navigationmenucontent.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/trigger/navigationmenutrigger.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/portal/navigationmenuportal.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/positioner/navigationmenupositioner.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/viewport/navigationmenuviewport.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/backdrop/navigationmenubackdrop.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/popup/navigationmenupopup.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/arrow/navigationmenuarrow.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/link/navigationmenulink.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/icon/navigationmenuicon.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/index.d.ts","./node_modules/@base-ui/react/esm/number-field/utils/types.d.ts","./node_modules/@base-ui/react/esm/number-field/root/numberfieldroot.d.ts","./node_modules/@base-ui/react/esm/number-field/group/numberfieldgroup.d.ts","./node_modules/@base-ui/react/esm/number-field/increment/numberfieldincrement.d.ts","./node_modules/@base-ui/react/esm/number-field/decrement/numberfielddecrement.d.ts","./node_modules/@base-ui/react/esm/number-field/input/numberfieldinput.d.ts","./node_modules/@base-ui/react/esm/number-field/scrub-area/numberfieldscrubarea.d.ts","./node_modules/@base-ui/react/esm/number-field/scrub-area-cursor/numberfieldscrubareacursor.d.ts","./node_modules/@base-ui/react/esm/number-field/index.parts.d.ts","./node_modules/@base-ui/react/esm/number-field/index.d.ts","./node_modules/@base-ui/react/esm/otp-field/utils/otp.d.ts","./node_modules/@base-ui/react/esm/otp-field/root/otpfieldroot.d.ts","./node_modules/@base-ui/react/esm/otp-field/input/otpfieldinput.d.ts","./node_modules/@base-ui/react/esm/otp-field/index.parts.d.ts","./node_modules/@base-ui/react/esm/otp-field/index.d.ts","./node_modules/@base-ui/react/esm/preview-card/store/previewcardstore.d.ts","./node_modules/@base-ui/react/esm/preview-card/store/previewcardhandle.d.ts","./node_modules/@base-ui/react/esm/preview-card/root/previewcardroot.d.ts","./node_modules/@base-ui/react/esm/utils/floatingportallite.d.ts","./node_modules/@base-ui/react/esm/preview-card/portal/previewcardportal.d.ts","./node_modules/@base-ui/react/esm/preview-card/trigger/previewcardtrigger.d.ts","./node_modules/@base-ui/react/esm/preview-card/positioner/previewcardpositioner.d.ts","./node_modules/@base-ui/react/esm/preview-card/popup/previewcardpopup.d.ts","./node_modules/@base-ui/react/esm/preview-card/arrow/previewcardarrow.d.ts","./node_modules/@base-ui/react/esm/preview-card/backdrop/previewcardbackdrop.d.ts","./node_modules/@base-ui/react/esm/preview-card/viewport/previewcardviewport.d.ts","./node_modules/@base-ui/react/esm/preview-card/index.parts.d.ts","./node_modules/@base-ui/react/esm/preview-card/index.d.ts","./node_modules/@base-ui/react/esm/progress/root/progressroot.d.ts","./node_modules/@base-ui/react/esm/progress/track/progresstrack.d.ts","./node_modules/@base-ui/react/esm/progress/indicator/progressindicator.d.ts","./node_modules/@base-ui/react/esm/progress/value/progressvalue.d.ts","./node_modules/@base-ui/react/esm/progress/label/progresslabel.d.ts","./node_modules/@base-ui/react/esm/progress/index.parts.d.ts","./node_modules/@base-ui/react/esm/progress/index.d.ts","./node_modules/@base-ui/react/esm/radio/root/radioroot.d.ts","./node_modules/@base-ui/react/esm/radio/indicator/radioindicator.d.ts","./node_modules/@base-ui/react/esm/radio/index.parts.d.ts","./node_modules/@base-ui/react/esm/radio/index.d.ts","./node_modules/@base-ui/react/esm/radio-group/radiogroup.d.ts","./node_modules/@base-ui/react/esm/radio-group/index.d.ts","./node_modules/@base-ui/react/esm/scroll-area/root/scrollarearoot.d.ts","./node_modules/@base-ui/react/esm/scroll-area/viewport/scrollareaviewport.d.ts","./node_modules/@base-ui/react/esm/scroll-area/scrollbar/scrollareascrollbar.d.ts","./node_modules/@base-ui/react/esm/scroll-area/content/scrollareacontent.d.ts","./node_modules/@base-ui/react/esm/scroll-area/thumb/scrollareathumb.d.ts","./node_modules/@base-ui/react/esm/scroll-area/corner/scrollareacorner.d.ts","./node_modules/@base-ui/react/esm/scroll-area/index.parts.d.ts","./node_modules/@base-ui/react/esm/scroll-area/index.d.ts","./node_modules/@base-ui/react/esm/select/root/selectroot.d.ts","./node_modules/@base-ui/react/esm/select/label/selectlabel.d.ts","./node_modules/@base-ui/react/esm/select/trigger/selecttrigger.d.ts","./node_modules/@base-ui/react/esm/select/value/selectvalue.d.ts","./node_modules/@base-ui/react/esm/select/icon/selecticon.d.ts","./node_modules/@base-ui/react/esm/select/portal/selectportal.d.ts","./node_modules/@base-ui/react/esm/select/backdrop/selectbackdrop.d.ts","./node_modules/@base-ui/react/esm/select/positioner/selectpositioner.d.ts","./node_modules/@base-ui/react/esm/select/popup/selectpopup.d.ts","./node_modules/@base-ui/react/esm/select/list/selectlist.d.ts","./node_modules/@base-ui/react/esm/select/item/selectitem.d.ts","./node_modules/@base-ui/react/esm/select/item-indicator/selectitemindicator.d.ts","./node_modules/@base-ui/react/esm/select/item-text/selectitemtext.d.ts","./node_modules/@base-ui/react/esm/select/arrow/selectarrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-down-arrow/selectscrolldownarrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-up-arrow/selectscrolluparrow.d.ts","./node_modules/@base-ui/react/esm/select/group/selectgroup.d.ts","./node_modules/@base-ui/react/esm/select/group-label/selectgrouplabel.d.ts","./node_modules/@base-ui/react/esm/select/index.parts.d.ts","./node_modules/@base-ui/react/esm/select/index.d.ts","./node_modules/@base-ui/react/esm/slider/root/sliderroot.d.ts","./node_modules/@base-ui/react/esm/slider/label/sliderlabel.d.ts","./node_modules/@base-ui/react/esm/slider/value/slidervalue.d.ts","./node_modules/@base-ui/react/esm/slider/control/slidercontrol.d.ts","./node_modules/@base-ui/react/esm/slider/track/slidertrack.d.ts","./node_modules/@base-ui/react/esm/internals/labelable-provider/labelablecontext.d.ts","./node_modules/@base-ui/react/esm/slider/thumb/sliderthumb.d.ts","./node_modules/@base-ui/react/esm/slider/indicator/sliderindicator.d.ts","./node_modules/@base-ui/react/esm/slider/index.parts.d.ts","./node_modules/@base-ui/react/esm/slider/index.d.ts","./node_modules/@base-ui/react/esm/tabs/tab/tabstab.d.ts","./node_modules/@base-ui/react/esm/tabs/root/tabsroot.d.ts","./node_modules/@base-ui/react/esm/tabs/indicator/tabsindicator.d.ts","./node_modules/@base-ui/react/esm/tabs/panel/tabspanel.d.ts","./node_modules/@base-ui/react/esm/tabs/list/tabslist.d.ts","./node_modules/@base-ui/react/esm/tabs/index.parts.d.ts","./node_modules/@base-ui/react/esm/tabs/index.d.ts","./node_modules/@base-ui/react/esm/toast/positioner/toastpositioner.d.ts","./node_modules/@base-ui/react/esm/toast/usetoastmanager.d.ts","./node_modules/@base-ui/react/esm/toast/createtoastmanager.d.ts","./node_modules/@base-ui/react/esm/toast/provider/toastprovider.d.ts","./node_modules/@base-ui/react/esm/toast/viewport/toastviewport.d.ts","./node_modules/@base-ui/react/esm/toast/root/toastroot.d.ts","./node_modules/@base-ui/react/esm/toast/content/toastcontent.d.ts","./node_modules/@base-ui/react/esm/toast/description/toastdescription.d.ts","./node_modules/@base-ui/react/esm/toast/title/toasttitle.d.ts","./node_modules/@base-ui/react/esm/toast/close/toastclose.d.ts","./node_modules/@base-ui/react/esm/toast/action/toastaction.d.ts","./node_modules/@base-ui/react/esm/toast/portal/toastportal.d.ts","./node_modules/@base-ui/react/esm/toast/arrow/toastarrow.d.ts","./node_modules/@base-ui/react/esm/toast/index.parts.d.ts","./node_modules/@base-ui/react/esm/toast/index.d.ts","./node_modules/@base-ui/react/esm/toggle/toggle.d.ts","./node_modules/@base-ui/react/esm/toggle/index.d.ts","./node_modules/@base-ui/react/esm/toggle-group/togglegroup.d.ts","./node_modules/@base-ui/react/esm/toggle-group/index.d.ts","./node_modules/@base-ui/react/esm/toolbar/separator/toolbarseparator.d.ts","./node_modules/@base-ui/react/esm/toolbar/root/toolbarroot.d.ts","./node_modules/@base-ui/react/esm/toolbar/group/toolbargroup.d.ts","./node_modules/@base-ui/react/esm/toolbar/button/toolbarbutton.d.ts","./node_modules/@base-ui/react/esm/toolbar/link/toolbarlink.d.ts","./node_modules/@base-ui/react/esm/toolbar/input/toolbarinput.d.ts","./node_modules/@base-ui/react/esm/toolbar/index.parts.d.ts","./node_modules/@base-ui/react/esm/toolbar/index.d.ts","./node_modules/@base-ui/react/esm/tooltip/store/tooltipstore.d.ts","./node_modules/@base-ui/react/esm/tooltip/store/tooltiphandle.d.ts","./node_modules/@base-ui/react/esm/tooltip/root/tooltiproot.d.ts","./node_modules/@base-ui/react/esm/tooltip/trigger/tooltiptrigger.d.ts","./node_modules/@base-ui/react/esm/tooltip/portal/tooltipportal.d.ts","./node_modules/@base-ui/react/esm/tooltip/positioner/tooltippositioner.d.ts","./node_modules/@base-ui/react/esm/tooltip/popup/tooltippopup.d.ts","./node_modules/@base-ui/react/esm/tooltip/arrow/tooltiparrow.d.ts","./node_modules/@base-ui/react/esm/tooltip/provider/tooltipprovider.d.ts","./node_modules/@base-ui/react/esm/tooltip/viewport/tooltipviewport.d.ts","./node_modules/@base-ui/react/esm/tooltip/index.parts.d.ts","./node_modules/@base-ui/react/esm/tooltip/index.d.ts","./node_modules/@base-ui/react/esm/index.d.ts","./node_modules/@base-ui/react/esm/popover/store/popoverstore.d.ts","./node_modules/@base-ui/react/esm/popover/store/popoverhandle.d.ts","./node_modules/@base-ui/react/esm/popover/root/popoverroot.d.ts","./node_modules/@base-ui/react/esm/popover/trigger/popovertrigger.d.ts","./node_modules/@base-ui/react/esm/popover/portal/popoverportal.d.ts","./node_modules/@base-ui/react/esm/popover/positioner/popoverpositioner.d.ts","./node_modules/@base-ui/react/esm/popover/popup/popoverpopup.d.ts","./node_modules/@base-ui/react/esm/popover/arrow/popoverarrow.d.ts","./node_modules/@base-ui/react/esm/popover/backdrop/popoverbackdrop.d.ts","./node_modules/@base-ui/react/esm/popover/title/popovertitle.d.ts","./node_modules/@base-ui/react/esm/popover/description/popoverdescription.d.ts","./node_modules/@base-ui/react/esm/popover/close/popoverclose.d.ts","./node_modules/@base-ui/react/esm/popover/viewport/popoverviewport.d.ts","./node_modules/@base-ui/react/esm/popover/index.parts.d.ts","./node_modules/@base-ui/react/esm/popover/index.d.ts","./components/ui/popover.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./components/reui/data-grid/data-grid-column-filter.tsx","./components/ui/dropdown-menu.tsx","./components/reui/data-grid/data-grid-column-header.tsx","./components/reui/data-grid/data-grid-column-visibility.tsx","./components/ui/select.tsx","./components/ui/skeleton.tsx","./components/reui/data-grid/data-grid-pagination.tsx","./components/reui/data-grid/data-grid-scroll-area.tsx","./components/ui/checkbox.tsx","./components/ui/spinner.tsx","./components/reui/data-grid/data-grid-table.tsx","./node_modules/@dnd-kit/utilities/dist/hooks/usecombinedrefs.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useevent.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useisomorphiclayouteffect.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useinterval.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselatestvalue.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselazymemo.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/usenoderef.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useprevious.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useuniqueid.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/index.d.ts","./node_modules/@dnd-kit/utilities/dist/adjustment.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/types.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/geteventcoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/index.d.ts","./node_modules/@dnd-kit/utilities/dist/css.d.ts","./node_modules/@dnd-kit/utilities/dist/event/hasviewportrelativecoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/event/iskeyboardevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/istouchevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/index.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/canusedom.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getownerdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getwindow.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/index.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/findfirstfocusablenode.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/index.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/ishtmlelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isnode.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/issvgelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/iswindow.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/index.d.ts","./node_modules/@dnd-kit/utilities/dist/types.d.ts","./node_modules/@dnd-kit/utilities/dist/index.d.ts","./node_modules/@dnd-kit/core/dist/types/coordinates.d.ts","./node_modules/@dnd-kit/core/dist/types/direction.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/types.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcenter.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcorners.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/rectintersection.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/pointerwithin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/helpers.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/abstractpointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/pointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensors.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/mousesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/touchsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/keyboardsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/defaults.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/index.d.ts","./node_modules/@dnd-kit/core/dist/types/events.d.ts","./node_modules/@dnd-kit/core/dist/types/other.d.ts","./node_modules/@dnd-kit/core/dist/types/react.d.ts","./node_modules/@dnd-kit/core/dist/types/rect.d.ts","./node_modules/@dnd-kit/core/dist/types/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useautoscroller.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecachednode.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesyntheticlisteners.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecombineactivators.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedroppablemeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialvalue.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userectdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useresizeobserver.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsetsdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesensorsetup.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userects.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usewindowrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedragoverlaymeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/store/constructors.d.ts","./node_modules/@dnd-kit/core/dist/store/types.d.ts","./node_modules/@dnd-kit/core/dist/store/actions.d.ts","./node_modules/@dnd-kit/core/dist/store/context.d.ts","./node_modules/@dnd-kit/core/dist/store/reducer.d.ts","./node_modules/@dnd-kit/core/dist/store/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/types.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/accessibility.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/restorefocus.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/defaults.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/constants.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/distancebetweenpoints.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/getrelativetransformorigin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/adjustscale.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrectdelta.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rectadjustment.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getwindowclientrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/noop.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollcoordinates.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolldirectionandspeed.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollelementrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollposition.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/documentscrollingelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/isscrollable.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/scrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/types.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/applymodifiers.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/dndcontext.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/context.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitor.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitorprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/animationmanager.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/nullifiedcontextprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/positionedoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usedropanimation.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usekey.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/dragoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedraggable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedndcontext.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedroppable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/index.d.ts","./node_modules/@dnd-kit/modifiers/dist/createsnapmodifier.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttohorizontalaxis.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttoparentelement.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttofirstscrollableancestor.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttoverticalaxis.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttowindowedges.d.ts","./node_modules/@dnd-kit/modifiers/dist/snapcentertocursor.d.ts","./node_modules/@dnd-kit/modifiers/dist/index.d.ts","./node_modules/@dnd-kit/sortable/dist/types/disabled.d.ts","./node_modules/@dnd-kit/sortable/dist/types/data.d.ts","./node_modules/@dnd-kit/sortable/dist/types/strategies.d.ts","./node_modules/@dnd-kit/sortable/dist/types/type-guard.d.ts","./node_modules/@dnd-kit/sortable/dist/types/index.d.ts","./node_modules/@dnd-kit/sortable/dist/components/sortablecontext.d.ts","./node_modules/@dnd-kit/sortable/dist/components/index.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/types.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/usesortable.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/defaults.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/index.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/horizontallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectswapping.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/verticallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/sortablekeyboardcoordinates.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/index.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arraymove.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arrayswap.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/getsortedrects.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/isvalidindex.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/itemsequal.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/normalizedisabled.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/index.d.ts","./node_modules/@dnd-kit/sortable/dist/index.d.ts","./components/reui/data-grid/data-grid-table-dnd-rows.tsx","./components/reui/data-grid/data-grid-table-dnd.tsx","./node_modules/@tanstack/virtual-core/dist/esm/utils.d.ts","./node_modules/@tanstack/virtual-core/dist/esm/index.d.ts","./node_modules/@tanstack/react-virtual/dist/esm/index.d.ts","./components/reui/data-grid/data-grid-table-virtual.tsx","./components/reui/data-grid/index.ts","./node_modules/zod/v4/core/json-schema.d.cts","./node_modules/zod/v4/core/standard-schema.d.cts","./node_modules/zod/v4/core/registries.d.cts","./node_modules/zod/v4/core/to-json-schema.d.cts","./node_modules/zod/v4/core/util.d.cts","./node_modules/zod/v4/core/versions.d.cts","./node_modules/zod/v4/core/schemas.d.cts","./node_modules/zod/v4/core/checks.d.cts","./node_modules/zod/v4/core/errors.d.cts","./node_modules/zod/v4/core/core.d.cts","./node_modules/zod/v4/core/parse.d.cts","./node_modules/zod/v4/core/regexes.d.cts","./node_modules/zod/v4/locales/ar.d.cts","./node_modules/zod/v4/locales/az.d.cts","./node_modules/zod/v4/locales/be.d.cts","./node_modules/zod/v4/locales/bg.d.cts","./node_modules/zod/v4/locales/ca.d.cts","./node_modules/zod/v4/locales/cs.d.cts","./node_modules/zod/v4/locales/da.d.cts","./node_modules/zod/v4/locales/de.d.cts","./node_modules/zod/v4/locales/el.d.cts","./node_modules/zod/v4/locales/en.d.cts","./node_modules/zod/v4/locales/eo.d.cts","./node_modules/zod/v4/locales/es.d.cts","./node_modules/zod/v4/locales/fa.d.cts","./node_modules/zod/v4/locales/fi.d.cts","./node_modules/zod/v4/locales/fr.d.cts","./node_modules/zod/v4/locales/fr-ca.d.cts","./node_modules/zod/v4/locales/he.d.cts","./node_modules/zod/v4/locales/hr.d.cts","./node_modules/zod/v4/locales/hu.d.cts","./node_modules/zod/v4/locales/hy.d.cts","./node_modules/zod/v4/locales/id.d.cts","./node_modules/zod/v4/locales/is.d.cts","./node_modules/zod/v4/locales/it.d.cts","./node_modules/zod/v4/locales/ja.d.cts","./node_modules/zod/v4/locales/ka.d.cts","./node_modules/zod/v4/locales/kh.d.cts","./node_modules/zod/v4/locales/km.d.cts","./node_modules/zod/v4/locales/ko.d.cts","./node_modules/zod/v4/locales/lt.d.cts","./node_modules/zod/v4/locales/mk.d.cts","./node_modules/zod/v4/locales/ms.d.cts","./node_modules/zod/v4/locales/nl.d.cts","./node_modules/zod/v4/locales/no.d.cts","./node_modules/zod/v4/locales/ota.d.cts","./node_modules/zod/v4/locales/ps.d.cts","./node_modules/zod/v4/locales/pl.d.cts","./node_modules/zod/v4/locales/pt.d.cts","./node_modules/zod/v4/locales/ro.d.cts","./node_modules/zod/v4/locales/ru.d.cts","./node_modules/zod/v4/locales/sl.d.cts","./node_modules/zod/v4/locales/sv.d.cts","./node_modules/zod/v4/locales/ta.d.cts","./node_modules/zod/v4/locales/th.d.cts","./node_modules/zod/v4/locales/tr.d.cts","./node_modules/zod/v4/locales/ua.d.cts","./node_modules/zod/v4/locales/uk.d.cts","./node_modules/zod/v4/locales/ur.d.cts","./node_modules/zod/v4/locales/uz.d.cts","./node_modules/zod/v4/locales/vi.d.cts","./node_modules/zod/v4/locales/zh-cn.d.cts","./node_modules/zod/v4/locales/zh-tw.d.cts","./node_modules/zod/v4/locales/yo.d.cts","./node_modules/zod/v4/locales/index.d.cts","./node_modules/zod/v4/core/doc.d.cts","./node_modules/zod/v4/core/api.d.cts","./node_modules/zod/v4/core/json-schema-processors.d.cts","./node_modules/zod/v4/core/json-schema-generator.d.cts","./node_modules/zod/v4/core/index.d.cts","./node_modules/zod/v4/classic/errors.d.cts","./node_modules/zod/v4/classic/parse.d.cts","./node_modules/zod/v4/classic/schemas.d.cts","./node_modules/zod/v4/classic/checks.d.cts","./node_modules/zod/v4/classic/compat.d.cts","./node_modules/zod/v4/classic/from-json-schema.d.cts","./node_modules/zod/v4/classic/iso.d.cts","./node_modules/zod/v4/classic/coerce.d.cts","./node_modules/zod/v4/classic/external.d.cts","./node_modules/zod/index.d.cts","./packages/contracts/dist/servers.d.ts","./lib/data.ts","./entities/server/model/mappers.ts","./hooks/use-file-upload.ts","./hooks/use-mobile.ts","./lib/api-mock.ts","./lib/api.ts","./package.json","./lib/app-version.ts","./lib/backend-url.ts","./lib/gre-endpoint-resolve.ts","./lib/network-map-layout.ts","./lib/map-gre-speed-probe.ts","./lib/route-optimizer-data.ts","./lib/dashboard-internet-path.ts","./lib/dashboard-latency.ts","./lib/ping-probe.ts","./lib/release-commits.ts","./lib/release-manifest.ts","./lib/release-modal-storage.ts","./lib/scheduler-run-snapshot.ts","./lib/scheduler-settings.ts","./lib/sidebar-badges.ts","./shared/api/http-client.ts","./packages/contracts/dist/backups.d.ts","./shared/api/backups.ts","./packages/contracts/dist/certificates.d.ts","./shared/api/certificates.ts","./packages/contracts/dist/events.d.ts","./shared/api/events.ts","./shared/api/servers.ts","./shared/api/system-database.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./components/ui/tooltip.tsx","./components/theme-provider.tsx","./node_modules/sonner/dist/index.d.mts","./components/ui/sonner.tsx","./app/layout.tsx","./app/page.tsx","./components/ui/sheet.tsx","./components/ui/sidebar.tsx","./components/nav-main.tsx","./lib/data-source.tsx","./lib/evobgp-context.tsx","./components/app-sidebar.tsx","./components/command-palette.tsx","./components/ui/badge.tsx","./components/ui/dialog.tsx","./components/release-notes-modal.tsx","./app/(main)/layout.tsx","./app/(main)/loading.tsx","./components/ui/breadcrumb.tsx","./components/page-header.tsx","./components/ui/card.tsx","./components/ui/collapsible.tsx","./components/flag.tsx","./app/(main)/alerts/page.tsx","./components/ui/button-group.tsx","./components/ui/textarea.tsx","./components/ui/input-group.tsx","./components/ui/kbd.tsx","./components/ui/scroll-area.tsx","./components/reui/filters.tsx","./components/data-page-toolbar.tsx","./components/ui/empty.tsx","./components/empty-state.tsx","./components/data-table.tsx","./app/(main)/asns/page.tsx","./components/status-dot.tsx","./components/status-badge.tsx","./app/(main)/backups/page.tsx","./components/ui/alert.tsx","./app/(main)/bgp/page.tsx","./app/(main)/certificates/page.tsx","./app/(main)/communities/page.tsx","./app/(main)/containers/page.tsx","./components/sparkline.tsx","./components/dashboard/latency-chart.tsx","./components/dashboard/bandwidth-chart.tsx","./components/dashboard/internet-path-map.tsx","./app/(main)/dashboard/page.tsx","./app/(main)/data-collection/page.tsx","./app/(main)/domains/page.tsx","./components/ui/tabs.tsx","./app/(main)/filters/page.tsx","./app/(main)/firewall/page.tsx","./app/(main)/gre/page.tsx","./app/(main)/ip-ranges/page.tsx","./app/(main)/network-map/page.tsx","./app/(main)/ospf/page.tsx","./app/(main)/probes/page.tsx","./app/(main)/recursive-routes/page.tsx","./app/(main)/releases/page.tsx","./app/(main)/route-optimizer/page.tsx","./app/(main)/servers/page.tsx","./app/(main)/settings/page.tsx","./app/(main)/terminal/page.tsx","./app/(main)/traffic/page.tsx","./app/(main)/uptime/page.tsx","./app/(main)/vxlan/page.tsx","./app/(main)/wireguard/page.tsx","./components/file-import-dialog.tsx","./components/nav-projects.tsx","./components/ui/avatar.tsx","./components/nav-user.tsx","./components/placeholder-page.tsx","./components/team-switcher.tsx","./components/data-grids/servers-data-grid.tsx","./components/reui/alert.tsx","./components/reui/autocomplete.tsx","./components/reui/frame.tsx","./components/reui/number-field.tsx","./components/reui/sortable.tsx","./components/reui/stepper.tsx","./components/reui/timeline.tsx","./node_modules/@radix-ui/react-context/dist/index.d.mts","./node_modules/@radix-ui/react-primitive/dist/index.d.mts","./node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts","./node_modules/@radix-ui/react-focus-scope/dist/index.d.mts","./node_modules/@radix-ui/react-portal/dist/index.d.mts","./node_modules/@radix-ui/react-dialog/dist/index.d.mts","./node_modules/cmdk/dist/index.d.ts","./components/ui/command.tsx","./components/ui/table.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/routes.d.ts","./.next/dev/types/validator.ts","./node_modules/@types/better-sqlite3/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/@types/set-cookie-parser/index.d.ts","./node_modules/@types/statuses/index.d.ts","./node_modules/@types/validate-npm-package-name/index.d.ts"],"fileIdsList":[[97,144,484,485,486,487,1386],[97,144,1386,1388],[97,144,227,525,528,536,537,1299,1300,1311,1318,1329,1332,1334,1335,1336,1337,1342,1343,1344,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1386,1388,1389],[97,144,484,485,486,487,1388],[97,144,227,525,528,531,536,537,1299,1300,1311,1318,1329,1332,1334,1335,1336,1337,1342,1343,1344,1346,1347,1348,1349,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,1386,1388],[85,97,144,227,542,551,566,612,624,979,1283,1297,1301,1304,1314,1315,1316,1317,1386,1388],[85,97,144,227,542,612,979,1261,1304,1305,1314,1328,1386,1388],[85,97,144,227,542,566,612,624,979,1261,1262,1285,1290,1297,1301,1304,1314,1315,1331,1386,1388],[85,97,144,227,542,612,624,979,1304,1314,1315,1333,1386,1388],[85,97,144,227,542,566,612,624,979,1261,1262,1286,1287,1290,1297,1301,1304,1314,1315,1317,1386,1388],[85,97,144,227,542,612,624,979,1261,1304,1305,1314,1315,1386,1388],[85,97,144,227,542,612,979,981,1261,1301,1314,1315,1317,1386,1388],[85,97,144,227,508,518,542,612,979,1261,1273,1274,1275,1283,1288,1289,1304,1314,1315,1317,1330,1331,1338,1339,1340,1341,1386,1388],[85,97,144,227,508,542,551,566,612,624,979,1280,1281,1283,1304,1308,1314,1315,1316,1333,1386,1388],[85,97,144,227,542,551,612,624,979,1261,1283,1295,1297,1301,1304,1305,1314,1315,1317,1330,1345,1386,1388],[85,97,144,227,542,566,612,624,979,981,1261,1301,1314,1315,1386,1388],[85,97,144,227,542,566,612,624,979,981,1261,1283,1297,1301,1304,1314,1315,1317,1386,1388],[97,144,227,1302,1304,1305,1306,1307,1310,1386,1388],[97,144,227,985,1386,1388],[85,97,144,227,508,542,612,979,1261,1270,1271,1272,1283,1304,1314,1317,1330,1331,1386,1388],[85,97,144,227,542,551,612,979,1273,1297,1304,1314,1315,1317,1386,1388],[85,97,144,227,542,566,612,624,979,1261,1283,1304,1314,1315,1386,1388],[85,97,144,227,542,566,612,624,979,1261,1283,1301,1304,1314,1315,1317,1330,1386,1388],[97,144,227,508,542,612,979,1268,1277,1278,1314,1315,1386,1388],[85,97,144,227,508,542,566,612,624,979,1261,1273,1283,1304,1314,1315,1317,1386,1388],[85,97,144,227,542,566,612,624,979,981,1260,1261,1262,1290,1301,1304,1314,1315,1317,1331,1386,1388],[85,97,144,227,508,542,551,566,612,624,979,1261,1273,1283,1291,1297,1301,1304,1305,1314,1315,1317,1330,1386,1388],[85,97,144,227,542,612,979,1261,1304,1314,1317,1386,1388],[85,97,144,227,542,612,979,1283,1304,1314,1315,1317,1330,1338,1386,1388],[85,97,144,227,542,566,612,624,979,1261,1276,1283,1301,1304,1314,1315,1316,1317,1330,1333,1338,1386,1388],[97,144,227,525,535,1386,1388],[97,144,227,526,529,1294,1295,1296,1298,1386,1388],[97,144,227,518,1386,1388],[85,97,144,227,979,1268,1282,1296,1302,1303,1304,1305,1386,1388],[85,97,144,227,518,542,979,1386,1388],[97,144,227,1386,1388],[85,97,144,227,542,979,1274,1315,1317,1331,1386,1388],[85,97,144,227,542,602,603,612,979,981,1179,1261,1317,1327,1331,1386,1388],[85,97,144,227,542,566,624,979,1324,1386,1388],[85,97,144,227,602,603,979,1179,1315,1325,1327,1386,1388],[97,144,227,542,1326,1386,1388],[85,97,144,227,542,612,979,1263,1297,1309,1386,1388],[97,144,227,552,1386,1388],[97,144,227,542,562,1386,1388],[97,144,227,553,563,564,565,1386,1388],[97,144,227,542,1386,1388],[97,144,227,508,518,1302,1386,1388],[97,144,227,979,981,1302,1386,1388],[97,144,227,979,981,1302,1365,1386,1388],[97,144,227,551,1302,1313,1386,1388],[97,144,227,979,1314,1315,1386,1388],[85,97,144,227,508,612,1268,1277,1278,1279,1308,1309,1386,1388],[97,144,227,540,542,1386,1388],[97,144,227,540,542,722,979,1323,1386,1388],[97,144,227,540,542,605,608,1386,1388],[85,97,144,227,542,551,602,603,609,612,624,978,979,1386,1388],[85,97,144,227,542,602,603,612,979,981,1386,1388],[85,97,144,227,602,603,981,1386,1388],[85,97,144,227,542,603,612,979,984,985,1386,1388],[85,97,144,227,542,603,885,1386,1388],[85,97,144,227,542,602,603,612,979,990,1023,1137,1145,1172,1386,1388],[85,97,144,227,602,603,612,979,990,1023,1137,1172,1386,1388],[85,97,144,227,542,602,603,989,990,1177,1386,1388],[85,97,144,227,540,542,602,603,988,989,1386,1388],[85,97,144,227,542,602,603,1386,1388],[97,144,227,603,980,982,983,986,987,990,1173,1174,1178,1386,1388],[85,97,144,227,540,542,608,612,624,979,981,1295,1319,1321,1322,1323,1386,1388],[85,97,144,227,540,542,543,846,979,1386,1388],[85,97,144,195,197,227,542,605,608,1023,1137,1172,1386,1388],[85,97,144,227,542,1386,1388],[85,97,144,227,542,605,608,1386,1388],[97,144,227,542,1261,1330,1386,1388],[97,144,227,542,1261,1386,1388],[85,97,144,227,979,981,1302,1386,1388],[85,97,144,227,518,1386,1388],[85,97,144,227,540,542,1386,1388],[85,97,144,227,542,728,1386,1388],[85,97,144,227,542,605,608,979,1386,1388],[97,144,227,540,542,551,605,608,1386,1388],[97,144,227,540,542,611,1386,1388],[97,144,227,542,732,979,1386,1388],[97,144,227,738,1386,1388],[85,97,144,227,542,979,1309,1321,1383,1386,1388],[85,97,144,227,542,612,786,979,1386,1388],[85,97,144,227,542,777,979,1386,1388],[85,97,144,227,540,542,543,551,1386,1388],[85,97,144,227,540,542,612,624,1320,1386,1388],[85,97,144,227,542,623,1386,1388],[85,97,144,227,542,977,1386,1388],[85,97,144,227,542,885,1386,1388],[85,97,144,227,542,905,979,1386,1388],[97,144,227,542,550,1386,1388],[85,97,144,227,540,542,551,605,608,612,624,979,985,1264,1295,1301,1386,1388],[97,144,227,1296,1297,1386,1388],[97,144,227,542,979,1386,1388],[85,97,144,227,542,561,1386,1388],[97,144,227,540,542,922,1386,1388],[97,144,227,542,961,1386,1388],[97,144,227,1260,1261,1386,1388],[85,97,144,227,1386,1388],[97,144,227,1267,1386,1388],[97,144,227,1261,1271,1272,1273,1386,1388],[97,144,227,1261,1386,1388],[85,97,144,227,1269,1386,1388],[85,97,144,227,1261,1304,1386,1388],[97,144,227,1261,1270,1271,1386,1388],[97,144,227,1261,1270,1386,1388],[97,144,227,525,533,1386,1388],[97,144,156,165,227,1386,1388],[97,144,227,538,541,1386,1388],[97,144,529,530,531,1386,1388],[97,144,227,529,533,1386,1388],[85,97,144,548,674,1386,1388],[97,144,671,674,675,676,677,678,1386,1388],[97,144,671,674,675,676,677,1386,1388],[85,97,144,545,546,548,671,673,1386,1388],[85,97,144,548,614,671,674,1386,1388],[85,97,144,545,546,548,1386,1388],[97,144,682,1386,1388],[97,144,683,684,685,686,687,688,689,690,691,693,1386,1388],[97,144,682,683,684,685,686,687,688,689,690,691,692,1386,1388],[85,97,144,227,546,680,682,1386,1388],[97,144,697,698,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,719,721,1386,1388],[97,144,549,697,698,700,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,719,720,1386,1388],[85,97,144,548,557,699,1386,1388],[85,97,144,548,1386,1388],[85,97,144,696,1386,1388],[85,97,144,1386,1388],[85,97,144,548,723,1386,1388],[85,97,144,548,614,723,724,1386,1388],[97,144,723,725,726,727,1386,1388],[97,144,723,725,726,1386,1388],[97,144,610,1386,1388],[85,97,144,545,546,548,557,1386,1388],[97,144,733,1386,1388],[97,144,729,730,731,1386,1388],[97,144,729,730,1386,1388],[85,97,144,548,614,729,1386,1388],[97,144,672,735,736,737,1386,1388],[97,144,672,735,736,1386,1388],[85,97,144,548,614,672,1386,1388],[85,97,144,545,546,548,673,1386,1388],[85,97,144,614,672,1386,1388],[85,97,144,548,672,1386,1388],[85,97,144,548,699,1386,1388],[85,97,144,548,614,1386,1388],[97,144,701,703,704,705,706,707,708,709,710,711,712,713,715,716,717,719,739,740,741,742,743,744,745,746,747,748,749,1386,1388],[97,144,550,701,703,704,705,706,707,708,709,710,711,712,713,715,716,717,719,720,739,740,741,742,743,744,745,746,747,748,1386,1388],[85,97,144,548,557,1386,1388],[85,97,144,548,614,635,699,1386,1388],[85,97,144,666,1386,1388],[85,97,144,545,546,695,1386,1388],[97,144,718,1386,1388],[97,144,751,752,759,760,761,762,763,764,765,766,767,768,769,770,772,775,778,779,780,1386,1388],[97,144,549,751,752,759,760,761,762,763,764,765,766,767,768,769,770,772,775,778,779,1386,1388],[97,144,227,547,758,777,1386,1388],[85,97,144,778,1386,1388],[97,144,782,783,1386,1388],[97,144,782,1386,1388],[97,144,680,684,685,686,687,688,689,690,691,785,1386,1388],[97,144,680,682,684,685,686,687,688,689,690,691,1386,1388],[85,97,144,548,614,635,1386,1388],[85,97,144,227,545,546,670,682,1386,1388],[97,144,681,1386,1388],[85,97,144,614,633,635,644,666,670,680,962,1386,1388],[85,97,144,548,682,1386,1388],[85,97,144,787,1386,1388],[97,144,788,789,1386,1388],[97,144,787,788,1386,1388],[97,144,791,792,793,794,795,796,798,800,801,802,803,804,805,806,807,1386,1388],[97,144,682,791,792,793,794,795,796,798,800,801,802,803,804,805,806,1386,1388],[85,97,144,548,614,635,799,1386,1388],[85,97,144,227,545,546,670,682,799,1386,1388],[85,97,144,797,798,1386,1388],[85,97,144,548,797,799,1386,1388],[85,97,144,548,557,614,1386,1388],[97,144,557,613,615,616,617,618,619,620,1386,1388],[97,144,557,613,615,616,617,618,619,1386,1388],[85,97,144,548,556,1386,1388],[85,97,144,557,614,1386,1388],[97,144,809,810,811,1386,1388],[97,144,809,810,1386,1388],[85,97,144,661,1386,1388],[85,97,144,635,643,661,1386,1388],[85,97,144,548,646,1386,1388],[85,97,144,546,614,633,661,670,1386,1388],[85,97,144,643,661,1386,1388],[97,144,661,1386,1388],[97,144,545,661,1386,1388],[97,144,643,661,1386,1388],[97,144,546,644,661,1386,1388],[97,144,651,661,1386,1388],[85,97,144,548,643,651,661,1386,1388],[85,97,144,641,661,1386,1388],[97,144,547,633,644,670,1386,1388],[97,144,640,642,643,645,647,648,649,650,652,653,654,655,656,657,658,659,660,661,662,663,664,665,1386,1388],[97,144,651,1386,1388],[85,97,144,546,640,642,643,644,645,647,648,649,650,651,652,653,654,655,656,657,658,659,660,662,666,1386,1388],[85,97,144,545,546,548,554,1386,1388],[97,144,555,1386,1388],[97,144,547,550,556,561,605,608,611,621,623,679,694,722,728,732,734,738,750,777,781,784,786,790,808,812,814,821,836,846,851,864,871,875,877,885,905,915,922,937,939,941,949,961,977,1386,1388],[97,144,622,1386,1388],[85,97,144,548,621,1386,1388],[97,144,545,1386,1388],[85,97,144,555,557,1386,1388],[97,144,544,1386,1388],[85,97,144,547,1386,1388],[85,97,144,548,606,1386,1388],[85,97,144,548,758,1386,1388],[97,144,751,752,758,759,760,761,762,763,764,765,766,767,768,769,770,772,773,774,775,776,1386,1388],[97,144,549,751,752,757,758,759,760,761,762,763,764,765,766,767,768,769,770,772,773,774,775,1386,1388],[85,97,144,227,545,546,670,753,754,755,756,757,1386,1388],[85,97,144,753,758,1386,1388],[97,144,753,1386,1388],[85,97,144,548,614,633,635,643,644,666,670,758,777,1386,1388],[97,144,227,758,771,1386,1388],[85,97,144,753,1386,1388],[85,97,144,548,757,1386,1388],[97,144,813,1386,1388],[85,97,144,758,1386,1388],[97,144,604,1386,1388],[97,144,815,816,817,818,819,820,1386,1388],[97,144,815,816,817,818,819,1386,1388],[85,97,144,548,815,1386,1388],[97,144,822,823,824,825,826,827,828,829,830,831,832,833,834,835,1386,1388],[97,144,822,823,824,825,826,827,828,829,830,831,832,833,834,1386,1388],[85,97,144,548,614,699,1386,1388],[85,97,144,548,838,1386,1388],[97,144,838,839,840,841,842,843,844,845,1386,1388],[97,144,838,839,840,841,842,843,844,1386,1388],[85,97,144,545,546,548,557,837,1386,1388],[97,144,848,849,850,1386,1388],[97,144,549,848,849,1386,1388],[85,97,144,548,848,1386,1388],[85,97,144,545,546,548,557,847,1386,1388],[97,144,965,966,967,968,969,970,971,972,973,974,975,976,1386,1388],[97,144,964,965,966,967,968,969,970,971,972,973,974,975,1386,1388],[85,97,144,227,545,546,670,964,1386,1388],[97,144,963,1386,1388],[85,97,144,614,633,634,635,644,666,670,962,965,977,1386,1388],[85,97,144,548,964,1386,1388],[97,144,854,856,857,858,859,860,861,862,863,1386,1388],[97,144,853,854,856,857,858,859,860,861,862,1386,1388],[85,97,144,855,1386,1388],[85,97,144,227,545,546,670,853,1386,1388],[97,144,852,1386,1388],[85,97,144,614,633,644,666,670,854,962,1386,1388],[85,97,144,548,853,1386,1388],[97,144,865,866,867,868,869,870,1386,1388],[97,144,865,866,867,868,869,1386,1388],[85,97,144,548,865,1386,1388],[97,144,876,1386,1388],[97,144,872,873,874,1386,1388],[97,144,872,873,1386,1388],[85,97,144,548,878,1386,1388],[97,144,878,879,880,881,882,883,884,1386,1388],[97,144,878,879,880,881,882,883,1386,1388],[97,144,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,1386,1388],[97,144,549,886,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,1386,1388],[97,144,549,1386,1388],[85,97,144,548,906,1386,1388],[97,144,906,907,908,909,910,912,913,914,1386,1388],[97,144,906,907,908,909,910,912,913,1386,1388],[85,97,144,548,906,911,1386,1388],[97,144,558,559,560,1386,1388],[97,144,558,559,1386,1388],[85,97,144,545,547,548,557,1386,1388],[85,97,144,548,558,1386,1388],[97,144,916,917,918,919,920,921,1386,1388],[97,144,916,917,918,919,920,1386,1388],[85,97,144,548,916,917,1386,1388],[85,97,144,548,917,1386,1388],[85,97,144,548,614,916,917,1386,1388],[85,97,144,545,546,548,916,1386,1388],[97,144,924,1386,1388],[97,144,923,924,925,926,927,928,929,930,931,932,933,934,935,936,1386,1388],[97,144,923,924,925,926,927,928,929,930,931,932,933,934,935,1386,1388],[85,97,144,548,699,924,1386,1388],[85,97,144,925,1386,1388],[85,97,144,548,614,924,1386,1388],[85,97,144,923,1386,1388],[97,144,940,1386,1388],[97,144,938,1386,1388],[85,97,144,548,943,1386,1388],[97,144,942,943,944,945,946,947,948,1386,1388],[97,144,548,942,943,944,945,946,947,1386,1388],[85,97,144,548,550,1386,1388],[97,144,952,953,954,955,956,957,958,959,960,1386,1388],[97,144,951,952,953,954,955,956,957,958,959,1386,1388],[85,97,144,227,545,546,670,951,1386,1388],[97,144,950,1386,1388],[85,97,144,614,633,644,666,670,952,961,962,1386,1388],[85,97,144,548,951,1386,1388],[85,97,144,546,1386,1388],[97,144,548,607,1386,1388],[97,144,667,668,669,1386,1388],[85,97,144,614,633,668,1386,1388],[97,144,548,614,644,666,667,1386,1388],[85,97,144,636,666,1386,1388],[97,144,625,1386,1388],[97,144,626,1386,1388],[97,144,626,627,629,630,631,632,1386,1388],[97,144,629,1386,1388],[85,97,144,227,629,1386,1388],[97,144,628,629,1386,1388],[85,97,144,1078,1386,1388],[97,144,1080,1386,1388],[97,144,1078,1386,1388],[97,144,1078,1079,1081,1082,1386,1388],[97,144,1077,1386,1388],[85,97,144,1023,1047,1052,1071,1083,1108,1111,1112,1386,1388],[97,144,1112,1113,1386,1388],[97,144,1052,1071,1386,1388],[85,97,144,1115,1386,1388],[97,144,1115,1116,1117,1118,1386,1388],[97,144,1052,1386,1388],[97,144,1115,1386,1388],[85,97,144,1052,1386,1388],[97,144,1120,1386,1388],[97,144,1121,1123,1125,1386,1388],[97,144,1122,1386,1388],[97,144,1124,1386,1388],[85,97,144,1023,1052,1386,1388],[85,97,144,1111,1126,1129,1386,1388],[97,144,1127,1128,1386,1388],[97,144,1023,1052,1077,1114,1386,1388],[97,144,1129,1130,1386,1388],[97,144,1083,1114,1119,1131,1386,1388],[97,144,1071,1133,1134,1135,1386,1388],[85,97,144,1077,1386,1388],[85,97,144,1023,1052,1071,1077,1386,1388],[85,97,144,1052,1077,1386,1388],[97,144,1053,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1386,1388],[97,144,1052,1077,1386,1388],[97,144,1047,1055,1386,1388],[97,144,1052,1073,1386,1388],[97,144,1002,1052,1386,1388],[97,144,1023,1386,1388],[97,144,1047,1386,1388],[97,144,1137,1386,1388],[97,144,1047,1052,1077,1108,1111,1132,1136,1386,1388],[97,144,1023,1109,1386,1388],[97,144,1109,1110,1386,1388],[97,144,1023,1052,1077,1386,1388],[97,144,1035,1036,1037,1038,1040,1042,1046,1386,1388],[97,144,1043,1386,1388],[97,144,1043,1044,1045,1386,1388],[97,144,1036,1043,1386,1388],[97,144,1036,1052,1386,1388],[97,144,1039,1386,1388],[85,97,144,1035,1036,1386,1388],[97,144,1033,1034,1386,1388],[85,97,144,1033,1036,1386,1388],[97,144,1041,1386,1388],[85,97,144,1032,1035,1052,1077,1386,1388],[97,144,1036,1386,1388],[85,97,144,1073,1386,1388],[97,144,1073,1074,1075,1076,1386,1388],[97,144,1073,1074,1386,1388],[85,97,144,1023,1032,1052,1071,1072,1074,1132,1386,1388],[97,144,1024,1032,1047,1052,1077,1386,1388],[97,144,1024,1025,1048,1049,1050,1051,1386,1388],[85,97,144,1023,1386,1388],[97,144,1026,1386,1388],[97,144,1026,1052,1386,1388],[97,144,1026,1027,1028,1029,1030,1031,1386,1388],[97,144,1084,1085,1086,1386,1388],[97,144,1032,1087,1094,1096,1107,1386,1388],[97,144,1095,1386,1388],[97,144,1023,1052,1386,1388],[97,144,1088,1089,1090,1091,1092,1093,1386,1388],[97,144,1051,1386,1388],[97,144,1097,1098,1099,1100,1101,1102,1103,1104,1105,1106,1386,1388],[97,144,1138,1139,1140,1141,1142,1143,1144,1386,1388],[97,144,1151,1386,1388],[85,97,144,1137,1150,1386,1388],[97,144,1153,1386,1388],[97,144,1153,1154,1155,1386,1388],[97,144,1023,1137,1386,1388],[85,97,144,1023,1071,1137,1150,1153,1386,1388],[97,144,1150,1152,1156,1161,1164,1171,1386,1388],[97,144,1163,1386,1388],[97,144,1162,1386,1388],[97,144,1150,1386,1388],[97,144,1157,1158,1159,1160,1386,1388],[97,144,1146,1147,1148,1149,1386,1388],[97,144,1137,1147,1386,1388],[97,144,1165,1166,1167,1168,1169,1170,1386,1388],[97,144,1002,1386,1388],[97,144,1002,1003,1386,1388],[97,144,1006,1007,1008,1386,1388],[97,144,1010,1011,1012,1386,1388],[97,144,1014,1386,1388],[97,144,991,992,993,994,995,996,997,998,999,1386,1388],[97,144,1000,1001,1004,1005,1009,1013,1015,1021,1022,1386,1388],[97,144,1016,1017,1018,1019,1020,1386,1388],[97,144,636,1386,1388],[97,144,637,638,1386,1388],[85,97,144,639,1386,1388],[85,97,144,1377,1378,1379,1380,1381,1386,1388],[85,97,144,1378,1386,1388],[85,89,97,144,193,194,195,196,197,479,524,1386,1388],[85,97,144,601,1386,1388],[97,144,1176,1386,1388],[97,144,582,1386,1388],[97,144,567,590,1386,1388],[97,144,590,1386,1388],[97,144,590,601,1386,1388],[97,144,576,590,601,1386,1388],[97,144,581,590,601,1386,1388],[97,144,571,590,1386,1388],[97,144,579,590,601,1386,1388],[97,144,577,1386,1388],[97,144,567,568,569,570,571,572,573,574,575,576,577,578,579,580,581,582,583,584,585,586,587,588,589,590,591,592,593,594,595,596,597,598,599,600,1386,1388],[97,144,580,1386,1388],[97,144,567,568,569,570,571,572,573,574,575,577,578,580,582,583,584,585,586,587,588,589,1386,1388],[97,144,1175,1386,1388],[97,144,192,1386,1388],[97,141,144,1386,1388],[97,143,144,1386,1388],[144,1386,1388],[97,144,149,177,1386,1388],[97,144,145,150,155,163,174,185,1386,1388],[97,144,145,146,155,163,1386,1388],[92,93,94,97,144,1386,1388],[97,144,147,186,1386,1388],[97,144,148,149,156,164,1386,1388],[97,144,149,174,182,1386,1388],[97,144,150,152,155,163,1386,1388],[97,143,144,151,1386,1388],[97,144,152,153,1386,1388],[97,144,154,155,1386,1388],[97,143,144,155,1386,1388],[97,144,155,156,157,174,185,1386,1388],[97,144,155,156,157,170,174,177,1386,1388],[97,144,152,155,158,163,174,185,1386,1388],[97,144,155,156,158,159,163,174,182,185,1386,1388],[97,144,158,160,174,182,185,1386,1388],[95,96,97,98,99,100,101,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,1386,1388],[97,144,155,161,1386,1388],[97,144,162,185,190,1386,1388],[97,144,152,155,163,174,1386,1388],[97,144,164,1386,1388],[97,144,165,1386,1388],[97,143,144,166,1386,1388],[97,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,1386,1388],[97,144,168,1386,1388],[97,144,169,1386,1388],[97,144,155,170,171,1386,1388],[97,144,170,172,186,188,1386,1388],[97,144,155,174,175,177,1386,1388],[97,144,176,177,1386,1388],[97,144,174,175,1386,1388],[97,144,177,1386,1388],[97,144,178,1386,1388],[97,141,144,174,179,1386,1388],[97,144,155,180,181,1386,1388],[97,144,180,181,1386,1388],[97,144,149,163,174,182,1386,1388],[97,144,183,1386,1388],[97,144,163,184,1386,1388],[97,144,158,169,185,1386,1388],[97,144,149,186,1386,1388],[97,144,174,187,1386,1388],[97,144,162,188,1386,1388],[97,144,189,1386,1388],[97,139,144,1386,1388],[97,139,144,155,157,166,174,177,185,188,190,1386,1388],[97,144,174,191,1386,1388],[85,89,97,144,193,194,195,197,479,524,1378,1386,1388],[85,89,97,144,193,194,195,196,460,479,524,1378,1386,1388],[85,89,97,144,193,194,196,197,479,524,1378,1386,1388],[85,97,144,197,460,461,1386,1388],[85,97,144,197,460,1386,1388],[85,89,97,144,194,195,196,197,479,524,1378,1386,1388],[85,89,97,144,193,195,196,197,479,524,1378,1386,1388],[83,84,97,144,1386,1388],[97,144,158,192,1386,1388],[97,144,538,539,1386,1388],[97,144,538,1386,1388],[85,97,144,1382,1386,1388],[97,144,482,1386,1388],[97,144,484,485,486,487,1386,1388],[97,144,430,493,494,1386,1388],[97,144,202,203,205,217,241,356,367,475,1386,1388],[97,144,205,236,237,238,240,475,1386,1388],[97,144,205,373,375,377,378,380,475,477,1386,1388],[97,144,205,239,276,475,1386,1388],[97,144,203,205,216,217,223,229,234,355,356,357,366,475,477,1386,1388],[97,144,475,1386,1388],[97,144,212,218,237,257,352,1386,1388],[97,144,205,1386,1388],[97,144,198,212,218,1386,1388],[97,144,384,1386,1388],[97,144,381,382,384,1386,1388],[97,144,381,383,475,1386,1388],[97,144,158,257,454,472,1386,1388],[97,144,158,328,331,347,352,472,1386,1388],[97,144,158,300,472,1386,1388],[97,144,360,1386,1388],[97,144,359,360,361,1386,1388],[97,144,359,1386,1388],[91,97,144,158,198,205,217,223,229,235,237,241,242,255,256,323,353,354,367,475,479,1386,1388],[97,144,202,205,239,276,373,374,379,475,527,1386,1388],[97,144,239,527,1386,1388],[97,144,202,256,425,475,527,1386,1388],[97,144,527,1386,1388],[97,144,205,239,240,527,1386,1388],[97,144,376,527,1386,1388],[97,144,242,355,358,365,1386,1388],[85,97,144,430,1386,1388],[97,144,169,212,227,1386,1388],[97,144,212,227,1386,1388],[85,97,144,297,1386,1388],[85,97,144,218,227,430,1386,1388],[97,144,212,283,297,298,509,516,1386,1388],[97,144,282,510,511,512,513,515,1386,1388],[97,144,333,1386,1388],[97,144,333,334,1386,1388],[97,144,216,218,285,286,1386,1388],[97,144,218,292,293,1386,1388],[97,144,218,287,295,1386,1388],[97,144,292,1386,1388],[97,144,210,218,285,286,287,288,289,290,291,292,295,1386,1388],[97,144,218,285,292,293,294,296,1386,1388],[97,144,218,286,288,289,1386,1388],[97,144,286,288,291,293,1386,1388],[97,144,514,1386,1388],[97,144,218,1386,1388],[85,97,144,206,503,1386,1388],[85,97,144,185,1386,1388],[85,97,144,239,274,1386,1388],[85,97,144,239,367,1386,1388],[97,144,272,277,1386,1388],[85,97,144,273,481,1386,1388],[97,144,1292,1386,1388],[85,89,97,144,158,193,194,195,196,197,479,523,1378,1386,1388],[97,144,158,218,1386,1388],[97,144,158,217,222,303,320,362,363,367,422,424,475,476,1386,1388],[97,144,255,364,1386,1388],[97,144,479,1386,1388],[97,144,204,1386,1388],[85,97,144,209,212,427,443,445,1386,1388],[97,144,169,212,427,442,443,444,526,1386,1388],[97,144,436,437,438,439,440,441,1386,1388],[97,144,438,1386,1388],[97,144,442,1386,1388],[97,144,227,391,392,394,1386,1388],[85,97,144,218,385,386,387,388,393,1386,1388],[97,144,391,393,1386,1388],[97,144,389,1386,1388],[97,144,390,1386,1388],[85,97,144,227,273,481,1386,1388],[85,97,144,227,480,481,1386,1388],[85,97,144,227,481,1386,1388],[97,144,320,321,1386,1388],[97,144,321,1386,1388],[97,144,158,476,481,1386,1388],[97,144,350,1386,1388],[97,143,144,349,1386,1388],[97,144,212,218,224,226,328,341,345,347,424,427,464,465,472,476,1386,1388],[97,144,218,267,289,1386,1388],[97,144,328,339,342,347,1386,1388],[85,97,144,209,212,328,331,347,350,384,431,432,433,434,435,446,447,448,449,450,451,452,453,527,1386,1388],[97,144,209,212,237,328,335,336,337,340,341,1386,1388],[97,144,174,218,237,339,346,427,428,472,1386,1388],[97,144,343,1386,1388],[97,144,158,169,206,218,222,232,264,265,268,320,323,388,422,423,464,475,476,477,479,527,1386,1388],[97,144,209,210,212,1386,1388],[97,144,328,1386,1388],[97,143,144,237,264,265,322,323,324,325,326,327,476,1386,1388],[97,144,347,1386,1388],[97,143,144,211,212,222,226,262,328,335,336,337,338,339,342,343,344,345,346,465,1386,1388],[97,144,158,262,263,335,476,477,1386,1388],[97,144,237,265,320,323,328,424,476,1386,1388],[97,144,158,475,477,1386,1388],[97,144,158,174,472,476,477,1386,1388],[97,144,158,169,198,212,217,224,226,229,232,239,259,264,265,266,267,268,303,304,306,309,311,314,315,316,317,319,367,422,424,472,475,476,477,1386,1388],[97,144,158,174,1386,1388],[97,144,205,206,207,235,472,473,474,479,481,527,1386,1388],[97,144,202,203,475,1386,1388],[97,144,396,1386,1388],[97,144,158,174,185,214,380,384,385,386,387,388,394,395,527,1386,1388],[97,144,169,185,198,212,214,226,229,265,304,309,319,320,373,400,401,402,408,411,412,422,424,472,475,1386,1388],[97,144,229,235,242,255,265,323,475,1386,1388],[97,144,158,185,206,217,226,265,406,472,475,1386,1388],[97,144,426,1386,1388],[97,144,158,396,409,410,419,1386,1388],[97,144,472,475,1386,1388],[97,144,325,465,1386,1388],[97,144,226,264,367,481,1386,1388],[97,144,158,169,204,309,369,373,402,408,411,414,472,1386,1388],[97,144,158,242,255,373,415,1386,1388],[97,144,205,266,367,417,475,477,1386,1388],[97,144,158,185,388,475,1386,1388],[97,144,158,239,266,367,368,369,378,396,416,418,475,1386,1388],[91,97,144,158,264,421,479,481,1386,1388],[97,144,318,422,1386,1388],[97,144,158,169,212,215,217,218,224,226,232,241,242,255,265,268,304,306,316,319,320,367,400,401,402,403,405,407,422,424,472,481,1386,1388],[97,144,158,174,242,408,413,419,472,1386,1388],[97,144,245,246,247,248,249,250,251,252,253,254,1386,1388],[97,144,259,310,1386,1388],[97,144,312,1386,1388],[97,144,310,1386,1388],[97,144,312,313,1386,1388],[97,144,158,216,217,218,222,223,476,1386,1388],[97,144,158,169,204,206,224,228,264,267,268,302,422,472,477,479,481,1386,1388],[97,144,158,169,185,208,215,216,226,228,265,420,465,471,476,1386,1388],[97,144,335,1386,1388],[97,144,336,1386,1388],[97,144,218,229,464,1386,1388],[97,144,337,1386,1388],[97,144,211,1386,1388],[97,144,213,225,1386,1388],[97,144,158,213,217,224,1386,1388],[97,144,220,225,1386,1388],[97,144,221,1386,1388],[97,144,213,214,1386,1388],[97,144,213,269,1386,1388],[97,144,213,1386,1388],[97,144,215,259,308,1386,1388],[97,144,307,1386,1388],[97,144,212,214,215,1386,1388],[97,144,215,305,1386,1388],[97,144,212,214,1386,1388],[97,144,264,367,1386,1388],[97,144,464,1386,1388],[97,144,158,185,224,226,230,264,367,421,424,427,428,429,455,456,459,463,465,472,476,1386,1388],[97,144,278,281,283,284,297,298,1386,1388],[85,97,144,195,197,227,457,458,1386,1388],[85,97,144,195,197,227,457,458,462,1386,1388],[97,144,351,1386,1388],[97,144,237,258,263,264,328,329,330,331,332,334,347,348,350,353,421,424,475,477,1386,1388],[97,144,297,1386,1388],[97,144,158,302,472,1386,1388],[97,144,302,1386,1388],[97,144,158,224,270,299,301,303,421,472,479,481,1386,1388],[97,144,278,279,280,281,283,284,297,298,480,1386,1388],[91,97,144,158,169,185,213,214,226,232,264,265,268,367,419,420,422,472,475,476,479,1386,1388],[97,144,209,212,219,1386,1388],[97,144,263,265,397,400,1386,1388],[97,144,263,398,466,467,468,469,470,1386,1388],[97,144,158,259,475,1386,1388],[97,144,158,1386,1388],[97,144,262,347,1386,1388],[97,144,261,1386,1388],[97,144,263,316,1386,1388],[97,144,260,262,475,1386,1388],[97,144,158,208,263,397,398,399,472,475,476,1386,1388],[85,97,144,212,218,296,1386,1388],[85,97,144,210,1386,1388],[97,144,200,201,1386,1388],[85,97,144,206,1386,1388],[85,97,144,212,282,1386,1388],[85,91,97,144,264,268,479,481,1386,1388],[97,144,206,503,504,1386,1388],[85,97,144,277,1386,1388],[85,97,144,169,185,204,271,273,275,276,481,1386,1388],[97,144,212,239,476,1386,1388],[97,144,212,404,1386,1388],[85,97,144,156,158,169,202,204,277,375,479,480,1386,1388],[85,97,144,193,194,195,196,197,479,524,1378,1386,1388],[85,86,87,88,89,97,144,1386,1388],[97,144,149,1386,1388],[97,144,370,371,372,1386,1388],[97,144,370,1386,1388],[85,89,97,144,158,160,169,192,193,194,195,196,197,198,204,232,237,414,442,477,478,481,524,1378,1386,1388],[97,144,489,1386,1388],[97,144,491,1386,1388],[97,144,495,1386,1388],[97,144,1293,1386,1388],[97,144,497,1386,1388],[97,144,499,500,501,1386,1388],[97,144,505,1386,1388],[90,97,144,483,488,490,492,496,498,502,506,508,518,519,521,525,526,527,528,1386,1388],[97,144,507,1386,1388],[97,144,517,1386,1388],[97,144,273,1386,1388],[97,144,520,1386,1388],[97,143,144,263,397,398,400,466,467,469,470,522,524,1386,1388],[97,144,174,192,1386,1388],[97,111,115,144,185,1386,1388],[97,111,144,174,185,1386,1388],[97,106,144,1386,1388],[97,108,111,144,182,185,1386,1388],[97,144,163,182,1386,1388],[97,106,144,192,1386,1388],[97,108,111,144,163,185,1386,1388],[97,103,104,107,110,144,155,174,185,1386,1388],[97,111,118,144,1386,1388],[97,103,109,144,1386,1388],[97,111,132,133,144,1386,1388],[97,107,111,144,177,185,192,1386,1388],[97,132,144,192,1386,1388],[97,105,106,144,192,1386,1388],[97,111,144,1386,1388],[97,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,144,1386,1388],[97,111,126,144,1386,1388],[97,111,118,119,144,1386,1388],[97,109,111,119,120,144,1386,1388],[97,110,144,1386,1388],[97,103,106,111,144,1386,1388],[97,111,115,119,120,144,1386,1388],[97,115,144,1386,1388],[97,109,111,114,144,185,1386,1388],[97,103,108,111,118,144,1386,1388],[97,144,174,1386,1388],[97,106,111,132,144,190,192,1386,1388],[97,144,1258,1386,1388],[97,144,1249,1386,1388],[97,144,1249,1252,1386,1388],[97,144,1184,1244,1247,1249,1250,1251,1252,1253,1254,1255,1256,1257,1386,1388],[97,144,1180,1182,1252,1386,1388],[97,144,1249,1250,1386,1388],[97,144,1181,1249,1251,1386,1388],[97,144,1182,1184,1186,1187,1188,1189,1386,1388],[97,144,1184,1186,1188,1189,1386,1388],[97,144,1184,1186,1188,1386,1388],[97,144,1181,1184,1186,1187,1189,1386,1388],[97,144,1180,1182,1183,1184,1185,1186,1187,1188,1189,1190,1191,1244,1245,1246,1247,1248,1386,1388],[97,144,1180,1182,1183,1186,1386,1388],[97,144,1182,1183,1186,1386,1388],[97,144,1186,1189,1386,1388],[97,144,1180,1181,1183,1184,1185,1187,1188,1189,1386,1388],[97,144,1180,1181,1182,1186,1249,1386,1388],[97,144,1186,1187,1188,1189,1386,1388],[97,144,1188,1386,1388],[97,144,1192,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1386,1388],[97,144,1259,1386,1388],[97,144,227,1283,1284,1386,1388],[97,144,227,1283,1286,1386,1388],[97,144,227,1283,1288,1386,1388],[97,144,227,1269,1386,1388],[97,144,227,1260,1283,1386,1388],[97,144,227,1269,1283,1386,1388]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"75421a9c0088dac67b8d07519590a4fab4e8360644e7dbb476d2509957377711","affectsGlobalScope":true},"4e4da12aa061aac172fb1bcb48e9b6e4b293080d2f494327925fdba8f39632ac",{"version":"a3c887d1dae8a305a9dca648b0b07779893c841098e0d03ab79cd0a407f77645","signature":"47669eccc47a97d505251c42b9d296b4042fc931500729e9c6d860181d726cbf"},{"version":"332f508ab6c1704bb05d6bf8133c208f2f525c49da1f5a3e593c4b8edbd6b76c","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"169dfa4a4d242be0a1a5df09ca38cfc4ba495a252bd2d78b893de232f5e6071f","signature":"f153ee3a86a947cafd8ad8b130de1576fd6b2c7bdcfaf7ecd00c7ed9dbcee5b5"},{"version":"0737535586da181159a0f73f0ac5a2043e16d414f9e75aaf8e583997e2ba4b9f","signature":"1fc3c0fe9ee115c7f6a9f61887e962566e54cef41e93df1b3d8aa838d60cf99c"},{"version":"cea90e20ada094fbbea884ffa7775f7dc95a7683d6db6b48591defc207a3f9bd","signature":"10a04fb13354a619e3f38df790af9f4bcd9f35986abc4d34f1ce138754b06b97"},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"8658354b90861a76abc7b3c04ece2124295c7da0cc4c4d31c2c78d8607188d03","impliedFormat":1},{"version":"7c8c3dfc0cdd370d44932828eb067ef771c8fe7996693221d5d4b90af6d54f2d","signature":"512960c0e955a2324b34354dac25e3e4d431a1af4cd33077935eda5e95c8b7e1"},{"version":"7f19b8476658d25ff197c84030e58cd7395059d876a54630e025951e474ebdae","signature":"cbb6e618cfae37c1feb246b78260428cf2bcba79a0c9bf1ac60d511a4158692d"},{"version":"7459d85c80f2971be954b562724106b13d5a2a57e8bfde51723e94e838f6fcbf","impliedFormat":99},{"version":"c24ab9ac84d65b417a807ada25456697bb2adf1189fa80cb240625dfb3e61c42","impliedFormat":99},{"version":"03952163760a479246853f7ee56fd231d703e8d6f78deb353c7892efeef3db3e","impliedFormat":99},{"version":"0d121799b2cbac398e84a4708fcd82f980f33bf3ac7721a3cf9db9f28d9eb2b2","impliedFormat":99},{"version":"b45c2c7da9952665f78397fccb03f67535535939497b11308c9409c8505eb32a","impliedFormat":99},{"version":"c23b9684ab48ea6956f0a510c3cf724277fa457efa7ff85d5907f4e4290ba0aa","impliedFormat":99},{"version":"15abcaa279117eb516a90c09c4b60c53fb29c1242c7f67bb1003e0cce06f7d19","impliedFormat":99},{"version":"75085bd84ff6965e4a356c53a4689799cabf65caa93c0bba064d5a0c6fa78f13","signature":"bb4b02b4dd58d4e434c952da55797cf052d30d36b09bd14aadfbc70a037c84ce"},{"version":"76e008459f847a96bb1140c11a38d247e69392432a1e690aa660fdb4844f5c74","signature":"013bc41103a767903cfe9896a9b770744ef6b23a2218214d35f5e1bb8ce5245f"},{"version":"94ab156f290eec0f9a4afd7e037f1875adb19647501a59c77fdd7df75ade90f8","signature":"dac7ff6a235973df4609cd0eeabf1cf8b6f14947d15ca41b0423646e0118c886"},{"version":"b2e5691a1a795e58a63d10b907248299ca96bb3433b7fb252279b4f00cc3a5d0","impliedFormat":99},{"version":"4244c6a12dc14768ddc3ee2737ccf1c6c0d07353785d5979df7d250eda461a61","impliedFormat":99},{"version":"cce820aba9ba9d1984461c67d0d543d8eba7ea25c6a1be7a47c31cc18907a631","impliedFormat":99},{"version":"3e7e929f14bc384ed6da8ef0c7dc3aae5ea191494c9554e4327186ef40db2573","impliedFormat":99},{"version":"082062d5e676f7049e4a684dc6726c631fe153cb457e494cc240bbe3be5650a4","impliedFormat":99},{"version":"ab2e38bc6b61891361655b5d2e45c4cbc95c9db4920453fd5329cac7fd4e1385","impliedFormat":99},{"version":"9bb8a03e0015254999c1e96830242fa3764856fd14958d3b097149f4491b1fa6","impliedFormat":99},{"version":"21655de6cf9d8df920b2dd8aaa5d6b4f88630c5c6f4df66947f4a2c4e59f7c79","impliedFormat":99},{"version":"14d276113e85e9c32c086e1084b08a27c2b482ad8dad94bea59a958b55c79593","signature":"40af0fd10141b32fbf06d86d0013777b04e7b15869b53373cdf208a6ab1767ef"},{"version":"678ad513991c4aa409f06946fe76523b83319829e08864262fde3d484fbfe165","signature":"f42cb0804d7f725acee9f5ff68d73d11efe829a138ff42c30842a62c459e3f31"},{"version":"00ef3f8f9711497a58fc5e3e20bde2c6f56be2cb3eafd85c9eadfcd005f116fa","signature":"91ade9247d89a06b8671db5f431f5d0c5fc7fbd571f7d3e3fb7e1e9cf54eb021"},{"version":"7f39b865d511b44c8132a1fa5e9e0efa14ad1f16173da55fcb8fe2fbfbe62703","signature":"5ad36bc62b301bc0219662774972cb1a0fb85752697f204343f63db85ea2565d"},{"version":"b4802b5709ff456f81f9c429f697d8345bf2a364a6f97bdf638012d1ca7cb245","signature":"fae6f054db257082fa32971e00ba4971bbb77361deb6bf6b70d9becf52989f55"},{"version":"e7c2f40dc99121500ad108a4f86541d29cac105ed018f994c7c5a2836e77b257","impliedFormat":1},{"version":"90e930283286ab117ab89f00589cf89ab5e9992bc57e79f303b36ee14649bdd9","impliedFormat":1},{"version":"6d48a6c907c668a6d6eda66acec4242e367c983e073100e35c1e234c424ad1a4","impliedFormat":1},{"version":"68a0e898d6c39160f1326ef922508914498c7a2d0b5a0d9222b7928d343214eb","impliedFormat":1},{"version":"69d96a8522b301a9e923ac4e42dd37fc942763740b183dffa3d51aca87f978d5","impliedFormat":1},{"version":"ff2fadad64868f1542a69edeadf5c5519e9c89e33bec267605298f8d172417c7","impliedFormat":1},{"version":"2866ae69517d6605a28d0c8d5dff4f15a0b876eeb8e5a1cbc51631d9c6793d3f","impliedFormat":1},{"version":"f8c4434aa8cbd4ede2a75cbc5532b6a12c9cac67c3095ed907e54f3f89d2e628","impliedFormat":1},{"version":"0b8adc0ae60a47acf65575952eee568b3d497f9975e3162f408052a99e65f488","impliedFormat":1},{"version":"ede9879d22f7ce68a8c99e455acab32fc45091c6eed9625549742b03e1f1ac1a","impliedFormat":1},{"version":"0e8c007c6e404da951c3d98a489ac0a3e9b6567648b997c03445ac69d7938c1c","impliedFormat":1},{"version":"f2a4866bed198a7c804b58ee39efe74c66ecdcf2dfebef0b9895d534a50790c4","impliedFormat":1},{"version":"ad72538d0c5e417ee6621e1b54691c274bcacaa1807c9895c5fa6d40b45fb631","impliedFormat":1},{"version":"4f851c59f3112702f6178e76204f839e3156daa98b5b7d7e3fc407a6c5764118","impliedFormat":1},{"version":"57511f723968d2f41dd2d55b9fbc5d0f3107af4e4227db0fb357c904bd34e690","impliedFormat":1},{"version":"9585df69c074d82dda33eadd6e5dccd164659f59b09bd5a0d25874770cf6042d","impliedFormat":1},{"version":"f6f6ce3e3718c2e7592e09d91c43b44318d47bca8ee353426252c694127f2dcb","impliedFormat":1},{"version":"4f70076586b8e194ef3d1b9679d626a9a61d449ba7e91dfc73cbe3904b538aa0","impliedFormat":1},{"version":"6d5838c172ff503ef37765b86019b80e3abe370105b2e1c4510d6098b0e84414","impliedFormat":1},{"version":"1876dac2baa902e2b7ebed5e03b95f338192dc03a6e4b0731733d675ba4048f3","impliedFormat":1},{"version":"8086407dd2a53ce700125037abf419bddcce43c14b3cf5ea3ac1ebded5cad011","impliedFormat":1},{"version":"c2501eb4c4e05c2d4de551a4bace9c28d06a0d89b228443f69eb3d7f9049fbd6","impliedFormat":1},{"version":"1829f790849d54ea3d736c61fdefd3237bede9c5784f4c15dfdafb7e0a9b8f63","impliedFormat":1},{"version":"5392feeda1bf0a1cc755f7339ea486b7a4d0d019774da8057ddc85347359ed63","impliedFormat":1},{"version":"c998117afca3af8432598c7e8d530d8376d0ca4871a34137db8caa1e94d94818","impliedFormat":1},{"version":"4e465f7e9a161a5a5248a18af79dbfbf06e8e1255bfdc8f63ab15475a2ba48bd","impliedFormat":1},{"version":"e0353c5070349846fe9835d782a8ce338d6d4172c603d14a6b364d6354957a4e","impliedFormat":1},{"version":"323133630008263f857a6d8350e36fb7f6e8d221ec0a425b075c20290570c020","impliedFormat":1},{"version":"c04e691d64b97e264ca4d000c287a53f2a75527556962cdbe3e8e2b301dac906","impliedFormat":1},{"version":"3733dba5107de9152f98da9bcb21bf6c91ac385f3b22f30ed08d0dc5e74c966f","impliedFormat":1},{"version":"d3ec922ddd9677696ee0552f10e95c4e59f85bb8c93fd76cd41b2dd93988ff39","impliedFormat":1},{"version":"0492c0d35e05c0fdd638980e02f3a7cdec18b311959fc730d85ed7e1d4ff38a7","impliedFormat":1},{"version":"c7122ba860d3497fa04a112d424ee88b50c482360042972bcf0917c5b82f4484","impliedFormat":1},{"version":"838f52090a0d39dce3c42e0ccb0db8db250c712c1fa2cd36799910c8f8a7f7bf","impliedFormat":1},{"version":"116ec624095373939de9edb03619916226f5e5b6e93cd761c4bda4efecb104fc","impliedFormat":1},{"version":"8e6b8259bfd8c8c3d6ed79349b7f2f69476d255aede2cd6c0acb0869ad8c6fdd","impliedFormat":1},{"version":"fca9e5ad75c873f8db5e22fae7b23c6715b1b5b1cdac923a4b3e7ed6ba7143cf","signature":"2bff91fa80b7741572913c9f281fb74fead6552886776b70d62321867c2c8d5e"},{"version":"c840e12da509f2c771dbc356a23750227a43d1864640c7e6404b8f9ec86b3871","impliedFormat":99},{"version":"6ae92eaaaef30fae975de604d3af31d5b00eca7f02d89fab589152df926685fd","impliedFormat":99},{"version":"26cfaec143443411bc7d5363f274f885ced430b8f4bee25a81f7827248848d7b","impliedFormat":99},{"version":"e3b3780b68c70ff42894b68ee8f49186ef3335fc86a9106dd07e11580b460cc1","impliedFormat":99},{"version":"459fda119c27213d3defde220c051414020029abd52fb6fb9aea0beedc512c6b","impliedFormat":99},{"version":"f886d17af7cb7bb1bc44bfa22f1759ea7824c9e758e956808b6888d746ec31c4","signature":"00024b3de4f1de76ac8b2b9db3cc5f0e24be67df993b98a3e64780fa30cfaae6"},{"version":"9c3663fa36fb976609d8fc43372ae38dc2e066dab014a955f40ae6430733fb71","impliedFormat":99},{"version":"e38a172f8912eebc79671e07b81687a304a9d366a47933fde9f97ad79f8ac08a","impliedFormat":99},{"version":"d14549ab3ba7a9d5d1f424c2599233bffa0b317121abf3b6efa2fb902d5e2781","signature":"d64f992b732408304b00a23ea0c77762d738a82991923d2ace56e848597851bf"},{"version":"9d28b54569f4cd1c0c21d95d0e70f6fdbfd792121604b95d7c2d067ee0f0fd11","impliedFormat":99},{"version":"4d857105510df8011cfb5b3769dec55624a1df92e85d399cd03bc82bb89d090c","impliedFormat":99},{"version":"b92dbe495c1dee9f3cd7c1466fdf02476f19ae18a7ecc829e3ed8a380b2d597f","impliedFormat":99},{"version":"bd3e3a447a34cf3dd875ed550ea349589b2dfcd6b3a14abebdc946366bd812a4","impliedFormat":99},{"version":"6b100282ebfd5bfa4d8c72ad5dd3e9d325aa32d0a53623d6171fc2cc2899fbc4","impliedFormat":99},{"version":"29297b3a1e4b3503eef0ec9f601f2a8da149c8074a0813624be8ad4889038ba3","impliedFormat":99},{"version":"5cf87865e3a8b12bb8ddfb311846ff2eae24983faa365f53d9224fb182cd0269","impliedFormat":99},{"version":"98ef9c3f5f15c18abcd6fa9f12e93e1bbd608225501151603cce97642dbc961d","impliedFormat":99},{"version":"c80a56a10f1a8e01c4b7f08df6e9260ae076c910402dae8173fa6c7dcacc51fe","impliedFormat":99},{"version":"becca0fa1bbcc55ad69918f65f771b76904ac98b2563cb34f26fbe240c3d4db3","impliedFormat":99},{"version":"32b344c3765dc7c383516f3326c108ca84c33df44ece8ac789fce47d47ba8810","impliedFormat":99},{"version":"f7d6ecff9a4d631feeaf401c02bb87e26ddb38131c55d15a43b9290747390847","signature":"f774a7e8875649db68f5952801f001f3c316560ede472e5663af7a8c9c18f938"},{"version":"37f96daaddc2dd96712b2e86f3901f477ac01a5c2539b1bc07fd609d62039ee1","impliedFormat":1},{"version":"4faca872dbd194a17b3ee267bd8ddc3daf3d16df96f4e43a02c7d9a862022c4f","impliedFormat":99},{"version":"f89aeba83b1744a0d697c1b7fb8a06d8dc4cf7c0d469d2419772121f499efa8e","impliedFormat":99},{"version":"144a4e5780b800c0553949169f50be285eccbdb0298afd83ef2ae03fef77e2d2","impliedFormat":99},{"version":"66aeb47bf8638d6767f7b4ff684c2d794391c981590073025e98f98e1afed499","impliedFormat":99},{"version":"26748898fec8579096c776866e8e6f07754845b3d08f5ae98c3a59baa9e85c2e","impliedFormat":99},{"version":"6d805abd62920edbd9ed4b20be26d040d01529f3ce53fdab9ca4d0fa9b589f02","impliedFormat":99},{"version":"edbeff52e73b0ff82898142aaf8ffb336910a8ccdfc31b79960ea4ad4c9f407b","impliedFormat":99},{"version":"b64a8c7a27133db3f181199d21c0c582e86f38ba57a031a126b77229526b4916","impliedFormat":99},{"version":"f8d6e2784bb518d523898f614b8c0ae55341968c982d4617f08867b5d11cf354","impliedFormat":99},{"version":"97b02501eb45f487174d5a0ff89b6a95690d50e9eae242e2162118edd5f2705c","impliedFormat":99},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"ad98c359284db8c984e88949b2c3394e4a35158880767b772491489788a6c5a0","impliedFormat":99},{"version":"5c117cca0b75ed634fe3085142a931df2e2214e26f2bbcb34c592b767f13c1e8","impliedFormat":99},{"version":"773c18e2bcc18598df8f8b2be930eb26b22608edf368e42e9ca3484828ec4122","impliedFormat":99},{"version":"f68896096cba0f06ffbf39a67c2280f6f2e5b90c75db56a3f9ae5f7f3bb54460","impliedFormat":99},{"version":"425a03d68f43164e0214b1c333cd58e777d4186f412b530467c18ef0d2b37a80","impliedFormat":99},{"version":"f9a591e5fe0be6728cc84e70325aacafffcf203b051ddef37d65651b43c05056","impliedFormat":99},{"version":"293c0a3e323608f4e20667acc74d7bdba727db954b840ee1db03f2fd5807c761","impliedFormat":99},{"version":"de8b4c367880fe92a0a740b706f08a46d1cf9e3981d55c2701e82423e81ef0ef","impliedFormat":99},{"version":"4a056a71ffda9ff3f2adec60c0189c906f7e46976a0c6650fa196674ff8c4dff","impliedFormat":99},{"version":"3a3fd6f5ca85ceeb293f2a010125f9455404958122b6dd0ba0b34f7dab74feb5","impliedFormat":99},{"version":"42b58bc8da11e9181ecf4ac498d41c74930c73c8ebef091474d0f8cf971b50ac","impliedFormat":99},{"version":"9e003336714371c98108af3dc53342829039327f8b1db97d826ca81805746b7f","impliedFormat":99},{"version":"d8954254110123f6f5c9fda6280674f6b853d47df7fc41c2090e741dc8b6b627","impliedFormat":99},{"version":"cc141bc69488825723b0d638491da8779c4c3e515712d5e1e63709e0136dfb2b","impliedFormat":99},{"version":"df600fddb7f36e4c4b3cc4e36073d0099a5b6352b88be02decf63869c8886313","impliedFormat":99},{"version":"9fe94c8f6b36cb41acd30d89567761a52246932dece21e1ce104baa2e84b07ac","impliedFormat":99},{"version":"5560b9471d610c2543dfaa66a88f7b7cf05cdac61a698d4106b3845b7b7b3b29","impliedFormat":99},{"version":"e80a0ca19ba1ea6d815b5017ce248fc817c076522d1b0f42f062a784897a30a7","impliedFormat":99},{"version":"e96bd939a55117abe6ccbc02839f2f4d9ce3893368fea528ca91c59ebddf496f","impliedFormat":99},{"version":"81f6bf27eedb1ed92466abfcee33795a6b2304691ae01f42e60f8c76894fade7","impliedFormat":99},{"version":"8ae2e6733fc535c43c514f871d28cb0fe5926238dbc3d64c978a1f6f00d73296","impliedFormat":99},{"version":"26a0c2d883e1ed55ba00810d957dedcde5d16d637e33063686e2bc3f58a5c64a","impliedFormat":99},{"version":"68099697ac4e919f6f1832389f32eb67d3d94fae744967f33e0cbc049a222a3a","impliedFormat":99},{"version":"bfb900f7de2066a4be644c269285fda8ccca40b065476a27b082173014d00467","impliedFormat":99},{"version":"fea750ade335a63f707e7fd7410cc11b81805f6b454880e1ed0e178c08fae8ee","impliedFormat":99},{"version":"7e2b8299e85423435784cc6244e2d559ea862d226e7b0ec871c6a53f88e5139f","impliedFormat":99},{"version":"8eca47167dadd486582ecd4e41f7fba6ae66cc4a4c5202f1f7acf34129a0dadf","impliedFormat":99},{"version":"755fc4f6a7aca9da7b38e1f7a39abd36538a72711763c741f1bbbf36f999b654","impliedFormat":99},{"version":"c4e79e849fd94553e07d7386552c472ea4f4fbfc9d280c012018fe7a6c50e598","impliedFormat":99},{"version":"062c0cf9641ca90ff3ad8edc61c2e06299fe6585fb9a4014a8acdf7f11810d51","impliedFormat":99},{"version":"c6f1c0398ad0faa03c5233d82177f636eb9fffd57744651af99b58f8f7915b8f","impliedFormat":99},{"version":"a06e692360fe0d1634250402c3b49a702f067f14c8ba8bcbd33904185e5d5499","impliedFormat":99},{"version":"6047c429574e9ceb94869ce7ab00072238e510f564ee4ae6ec3814b76cdce529","impliedFormat":99},{"version":"ffd2755493fc2319484fb7ac5cc05495cce0f78d1e2d552bc4422f329b73f4de","impliedFormat":99},{"version":"546d955d02e97715e6695474786af5a06c19229adc5fe8fdfe514771ae213211","impliedFormat":99},{"version":"634c90cb73a14987ce89baf22d1096812058737f62ddfd58ea48a29284e57927","impliedFormat":99},{"version":"c450c0dd1017947e3cded19df31cc2b63df4d4c94af45b58e8fba009364af2f9","impliedFormat":99},{"version":"00ec6732d15b24c301e967de238c4a75cf7b8b87d5b0e9924052d0bc97978193","impliedFormat":99},{"version":"eb7f907ec09c730f66cfaef2aee237c86e43eed68bcb794db7f81fcecb01c577","impliedFormat":99},{"version":"2f00cb77390cae0ce2c09d3a2d9a68da5776a70c771373e402d6a6810a360158","impliedFormat":99},{"version":"28c9a13154b55a80df9262638c51da112c6e3f4aaec8dc1677d050d1a1932ae4","impliedFormat":99},{"version":"0eb30dfdea5fb0bc646ece93f7e368e39f63a846c28728eaa3714ae67ebf4a4b","impliedFormat":99},{"version":"acaec9f749a5b8a1f5e0cdc476ee3ea7b6098571799d0a70d47968de441f80d5","impliedFormat":99},{"version":"ed79b8c359c9a83c2d1060bf25695544717177fe01df12b122f9a2241e9b7f08","impliedFormat":99},{"version":"db3e3d27b585f5b9d9b04a2a763e92a22e765ee3e22f02c43689f5e65c5c687b","impliedFormat":99},{"version":"2147d73f1aa38755442b0adbf444a75bb491980a494a95ad972fd953a08ea1d5","impliedFormat":99},{"version":"b12c24f2cd76dbd7e55c5019013d8e8feaad967fbcde4a1760abda4805e43572","impliedFormat":99},{"version":"62d30429d222ea6faafe408fe136c3a1e9df0cde180b0dba5fa4ebd77c0807ee","impliedFormat":99},{"version":"1bdf6a7ba0426bb182fc554488c456a7fe30beedfd15889feddac3581f37dbd4","impliedFormat":99},{"version":"cc3ad501f0214a90cea0e9836890e53f6c3fe0eb1c592862433c80a47989a75c","impliedFormat":99},{"version":"8d85753422eb5125948ea3559874709179eeaf56a58aebaa70b68923de0d6039","impliedFormat":99},{"version":"3bbde357e5d8d70cd29460e158586f4ff7c57e12d4ae997ad5368d6431a5e892","impliedFormat":99},{"version":"d2000199162496a4e85e7ddc9ea0ab05286737b6acb6b8390100fac220e8cb77","impliedFormat":99},{"version":"abc7596044b80fde671f7b0840b09be06525e50917557828cd3430785abe7927","impliedFormat":99},{"version":"faf9a217d8d237b02ab6d95508d8736ae431bbeb38d98885eb5b8fb6dbe48cec","impliedFormat":99},{"version":"1bc8fe760358bb78c737ae2505ab76e78da94a7c6c5e3614fd85f5e736ae7b4d","impliedFormat":99},{"version":"838c1878bc1ec773ca2b72ecc544d0f5b8913711fa8cb2b7f14cef8259743669","impliedFormat":99},{"version":"74b564cd3da8f83d5e472a5b0cc53bf7e276b25576097cb89e6f67caf95b12dc","impliedFormat":99},{"version":"51b6335f5a8e177306647558a3eefa1f6abe259b283c6462223be3d7d0f33300","impliedFormat":99},{"version":"6c26ff3196da213d6fd1e7a73ea96d2c2e52d619284f7c4cea38c441648d4237","impliedFormat":99},{"version":"d0db671cc543e88f9759c1bb7c3d7434e3db899644b20058125635fdd0310573","impliedFormat":99},{"version":"5c43e8a614e16623ed2186c9c7975ca6721f1de9998a2f2b0bd1d9f7938ff16b","impliedFormat":99},{"version":"7845eadb13706afd8d13785b4394674f9150b0ddb77685ed3f5208db6e565fcf","impliedFormat":99},{"version":"2416f55bd1a6bdce90be79529d96a9744c6f803b69df4a8ad9e03b49c0d00b2e","impliedFormat":99},{"version":"98ef8272d45209f1b35eca26902e5f89ba9c4d9fa3ff517affad5289939d8000","impliedFormat":99},{"version":"fc1d2ee8ab07469899ab4434aa246616206876224f23482664c7e5712a9fdf89","impliedFormat":99},{"version":"fbaa490957118d790241f9a8a461fe2747f958e9e9b9997464627bcb006e5590","impliedFormat":99},{"version":"4dbfab1cb3f916f04757d5eefa0b36f038df9aa5922422aa125c9a98a55c0596","impliedFormat":99},{"version":"7c8f26df5230a0dfb5f0bef1a71c8e47c1498a0352a24fecfda35582c6acbebc","impliedFormat":99},{"version":"42447d5ee4c8a43ea24fae30f3aacbb78c5e41a97a8d61f17b119c1fd87d957a","impliedFormat":99},{"version":"6e01fa85be38220b758b349cfaa4153ea23a46100c0ccf7269909b49dd35630f","impliedFormat":99},{"version":"cb0803aafc70fb621d956cec2e48336dca19765d6426a9f8e7544fbb60ca1a8c","impliedFormat":99},{"version":"f0a6673466cf44bdcbd6ef97f40621724849bdfe1a0a4df022f0f7d3e96305bb","impliedFormat":99},{"version":"bfca46214cd7281a43728729cf88b3514ed18fcf3b29213c723920b3111449f1","impliedFormat":99},{"version":"572ae28827f722eaad5435b0f81b819d55cffd12ad4b068dd28579135fb44576","impliedFormat":99},{"version":"fd413d87e8bf7a8e523c70d194b2c3279016d1ec733a9db43640cc1e0cabde6f","impliedFormat":99},{"version":"ef11d500b473d6757129c0d87610d42d3785ef8a2a3989b426d00980b981cc1e","impliedFormat":99},{"version":"25ada8b073df8f9b669aa007ee66298095904b83236652ee940d827c2ed5fe9b","impliedFormat":99},{"version":"017f64eb742469714e498c1c6ef15fbed70fc3345ce6ee5a35e7ff01a3322436","impliedFormat":99},{"version":"b62d96002ec0c8710d0e99aa3175434e1df0f22f5a09291b19e5ec05e8a877e6","impliedFormat":99},{"version":"95811af86fde4fa3e455b3c89e55e545068c4c2ef8aaf9dc1b46fc54d88ce096","impliedFormat":99},{"version":"6a8c18802b20e90d8fcd349e3358bc998f51fd481c6ae7c6449344cf783e1906","impliedFormat":99},{"version":"47039aa29dad4b33704e9ab56ca4ea4c918aaf86afdcd4e059f9dc6045850b6d","impliedFormat":99},{"version":"433839016857a5a785134d2d5e760fdcc9819d241a3ffb5cb76985e666a34a8c","impliedFormat":99},{"version":"ef23a7b386401847e3b4c3ed1b087c32d56e7307b2782aa2f0d0ff4f02d70473","impliedFormat":99},{"version":"2dfa6d1aea770ef46bd51a79cfb7aa10b9ae90c9971eb53b4f5def028425c800","impliedFormat":99},{"version":"66cd137411911fea6db4b352a98279470e386eb3b1cac5db3de1efad678a9015","impliedFormat":99},{"version":"f8d95db2d66d268765d447b554dffdb3f1cd2a22e8da7f6f57dfdcad6a19a1e8","impliedFormat":99},{"version":"b9039512a27d6a5a687011f0af8ccb0adcc07218a8ddbb4b5ae02d62fece2742","impliedFormat":99},{"version":"d11ebedbe79c2e165456a142132ab453b2572938ed76a6fe9324914363b7d6ac","impliedFormat":99},{"version":"f6ba66f3f6c4409e878f48161529c585b3c0e687c8917dd8f6c6464fc5cd4f8e","impliedFormat":99},{"version":"0366e97d9c966d748ad91b782e8ce843ebb692d93a1d211ef5b84cccbe8f53a8","impliedFormat":99},{"version":"b6df34a835cf5bed07333f5e8880e691c9115f1695c61e7dfcf58aa4310db48d","impliedFormat":99},{"version":"b86777df5a816b1b1a2b12a017a8ef8f14ea2fb1a533d1e18e956ced70ac9d28","impliedFormat":99},{"version":"7c309d060d5df0f4c847ff2bce0bd86e33f1ac296194bb4255a66fd13688a9f5","impliedFormat":99},{"version":"f62b4345a66966ceed899441fcec00347daf8c48fc106ac1ff199c84b2738050","impliedFormat":99},{"version":"ab95baa99c5dc2a49bd1d1c00d90955088463e675f4eb869008a357b5b02d6fe","impliedFormat":99},{"version":"7980ab0dad3e7e1eb6e9873231d45f3860864c84c48608267864e4774c4bf39d","impliedFormat":99},{"version":"845b523a3ca13e3fbd496a579aaf51875d60e15ee56f4be60a358dfd87699afe","impliedFormat":99},{"version":"8795c42880ebe333462fb815ecceb525fef2dcdc7b5df056fc67c1cb78199d9a","impliedFormat":99},{"version":"32c98d5e98a05f108f4e405c853db481f83c5a1a9cd6c53870501d8248f9afad","impliedFormat":99},{"version":"bd678ad316e38a4af6e118fb523405ad251ac1bf60479e0e3a10cbadcca69b1a","impliedFormat":99},{"version":"60119e79d11114ef39c8659d9f83c1be11a90cbb2c7e871f540db587d77927bc","impliedFormat":99},{"version":"09e800ec9676338e9462d95f0fb29afbdcc06e69e2676308589c177a5310a15b","impliedFormat":99},{"version":"77f80829050d1e46e800e778653292bdf1242e23c1a0107bb5531c9a8511cc62","impliedFormat":99},{"version":"17939fd2919b3a627774a91326526584824b5a1561e272b971d5a4ee53045b2c","impliedFormat":99},{"version":"569c96350d1f50807ca9142ca0f0071fe99d54b8d273decb0494a53d24acc7be","impliedFormat":99},{"version":"9f2a1b2d492d696451cf36e9b937957ab636d579973a303ba7868bd3926dca90","impliedFormat":99},{"version":"df506f8ab6bcab64cd24be5e65bcf12b959d1d00cd9127d73afc59ba4062867c","impliedFormat":99},{"version":"ecb5aeb3771bea2795b5f4c0f79036c061c3a2bfe0b1d5a83d9183a43e38cd9c","impliedFormat":99},{"version":"31a63b6b49338cc6ddb1a318beda72d3d8fd523e50f8dd5d5ff3accd39a490d7","impliedFormat":99},{"version":"8fc7615fb8fa095406f5a58b1b817b9a685c516058877a3d2c06d4545fdf5dbe","impliedFormat":99},{"version":"f70e9fcb8172de822a729503eefece37f169e063cd7f97a978e3913dc872a82f","impliedFormat":99},{"version":"d5da26af31358a4883edb6112879018b14c7c1fbcc457aa36961b03ee17bedea","impliedFormat":99},{"version":"4e93fb2d2c59bbc1f1a5211b36c447efe4d0af568d682ef1e5eb5f84ca6ccc2e","impliedFormat":99},{"version":"3d13fe973e92e708ad3dbbf1b2385bb799f8e70c8da71a1ac72fcb5521c8a5e9","impliedFormat":99},{"version":"16f3f66b5182e57c554d0e374e29fdc0a899c1321b3f94fa997d19abf9faf931","impliedFormat":99},{"version":"df459c67b9eef71318851331b23926961f0476b4b9d1674addcb627eabe583b2","impliedFormat":99},{"version":"b93915733f1802a8d9093116a5e660385afda0f72a5bab9c9bd356549a61f1cd","impliedFormat":99},{"version":"1dfb1491b28cf3734f3c07745a56d7758a12d546f81a70fbfe8ee9faeb528c54","impliedFormat":99},{"version":"42b00a511331c7f79039ae3be83fd5941b212ce193654c3ac5d82157227b69ad","impliedFormat":99},{"version":"1a5914065c7c6e2b6e98437c4ba6059bfeda3441f0f55cb07189df1e78698922","impliedFormat":99},{"version":"66d3f42196f32c639d8240bbd520852abc024d673c713bc5ab26b4bdde750a74","impliedFormat":99},{"version":"18ce9175445b3edec11bbca1c682a8f3919e74fb3504abd883ac462ea8089a0d","impliedFormat":99},{"version":"aec96f94a27fc61d5f4ead202628e811199f887d48bb7614b7e1706b629cd1ba","impliedFormat":99},{"version":"2ab01a0368f65b3b891e25416ae785dca54808f70d8f6204b99589ed4f7f1d2f","impliedFormat":99},{"version":"efd87ca2190e2d0f905e30343443c8d2f0d32cb2b1c9e05b2cb97b0061abec08","impliedFormat":99},{"version":"3323edd649d2c85d3528912cdf6fb770258d59d75241575fcf25c7850837de79","impliedFormat":99},{"version":"e0c8deca5262879f11ee84fe6664dcd197a60f546930363bf2d78d37c3138c69","impliedFormat":99},{"version":"3b8ba0456ce7763676505d103eb336a6b97659d6fc8a7d7d186558ea0b8c7ea5","impliedFormat":99},{"version":"7bae4a3f50a844fcbdc504d717f5f13dd7178ca99f131b230305db6b55e1dbc3","impliedFormat":99},{"version":"f3a4668046e42e9f5ebfdc8b79238eb27c399443dd1dcfcd4c4c3652692ed031","impliedFormat":99},{"version":"07160ad59d49c6f2999f9703542918df3eb1ef93857bc560b4baa7c6775d22ce","impliedFormat":99},{"version":"642d33e1e66ab109cdcc5a5b5535535768c8b642fd5ef75de4d77de3a5632601","impliedFormat":99},{"version":"3859635347ecc10d4ff5dd68bde66420f5a8539b7313dd62020aa025208d2222","impliedFormat":99},{"version":"f49e8feb6d7473579a5ceb5872598bbc1be3723da653993472720629c72fa0ba","impliedFormat":99},{"version":"14c727434cfe6a078b51a88d005033ad01a76bec36292d7b47369d82e48e1cb0","impliedFormat":99},{"version":"b6cc07bc56c7418ab500421d2629c26acdb6ec2e9af85c5e2c5d7e8c9f92566d","impliedFormat":99},{"version":"d9c1075a7b3547a76f0e4bb8e8c91b7f084b561bb929d437a320fe30dd5a5403","impliedFormat":99},{"version":"53adb1224146150628fd59d35c5a3f3f69629a649052c34ef6ee5186cc911c81","impliedFormat":99},{"version":"7bd99bb2dd0c498dc77015c34771b76d5e5751f52a19124fa0a166d915b5d9e3","impliedFormat":99},{"version":"b03aa91aef645f9856216a2223a47001a84954caf37b7ffb1d63d1327b4231fe","impliedFormat":99},{"version":"2d982c7dba93b9bcabb045898b00e62dd09919b2b35ee63c42880b22494a7ad8","impliedFormat":99},{"version":"cfcb85724714ed6320c09fddcffed5ac71069125cd5b9957406c920dfd4c16ec","impliedFormat":99},{"version":"7142177cf3158dad7b42726ea15c78512dbad6370117509c8eadefcedae72534","impliedFormat":99},{"version":"9322da0c85b107feebedf3005249cb863f4e03736c4b8ab3edcbfcc29981d13b","impliedFormat":99},{"version":"54a730e06094b37f96436ccc8e736bb65b74d256439bf1663344e3fab16d2246","impliedFormat":99},{"version":"bf7e54566eca40b272b32db46261a7ed9bed3e57c7f763d27938a50ddde39411","impliedFormat":99},{"version":"275f0d7153ec08e13d76f1b3e2bb14cadae3b9cf4584db736873d26385a39c43","impliedFormat":99},{"version":"4e8b929462a5c46c53151f6e7519a06e31ea6754a735c942d9ac5d8b535a46fd","impliedFormat":99},{"version":"9feba204a816a0bd46302bf79a40d24a07ce2e112fbc9e471fe78a0e6270cafe","impliedFormat":99},{"version":"71f9aa0443d5bae1667ddbaed2643fb4ccb6f186d5817cc4000360680d329e36","impliedFormat":99},{"version":"b49cc39cc4756d9b5eccd9fbcf800f7c2ac106b5f347ab8f62ea1fe6b91730f0","impliedFormat":99},{"version":"fb86482b9281432d3f09e37234d11e168ac12726c3780e37ca528b9655f121d6","impliedFormat":99},{"version":"5507eba2168bc01b2dbb87374571971b7df7578bb964024f7de2efb110e31d8c","impliedFormat":99},{"version":"0fc6e179087e933a1cbbc89ba26a3747bf87f6021cc9964098af940bc5da04bf","impliedFormat":99},{"version":"488ca0f6d7534a445f6b436a5dd947e3b9059b8f923eeceb0003b14bc8ba2327","impliedFormat":99},{"version":"542d54e6e9763fdc10c02275a0efde153ff4cf9a3bd4d862653a9344b1ca4e75","impliedFormat":99},{"version":"9ef7caf52e244889adfe4f675c36a82adfdc8a7016aeefe333dc10f930e77722","impliedFormat":99},{"version":"c41d4fe5ea1bc9866b9a65949e4467e7164d2ec57b542fc1bd2ccf917a333629","impliedFormat":99},{"version":"a93626ded4c88421ac4e27150b0e11a514683a25f54d6639347a66652e118c9a","impliedFormat":99},{"version":"5804ffbc65b78751fd510218b90827a7ca677ca34a45b4709a00783b658cbaba","impliedFormat":99},{"version":"f9ddadd89c92a88bcf73068883035f3995a1cf7f9c850704c48df35d632e2c67","impliedFormat":99},{"version":"e2e4e22df9eb40e9018e5be0b7c304c53311fb812c3976bff4bddb263c7c5c06","impliedFormat":99},{"version":"88415d6dff3766b93b1f7d98d80778319f71338b85c6b976c220af1ad6a87e62","impliedFormat":99},{"version":"96075eb4d7f8921875074b980853e23a28b616644be6cf2f67d1e8ef83b1e282","impliedFormat":99},{"version":"c29921af69f3db7348ed27915972a51cddde446ac029fface772271c085eacbb","impliedFormat":99},{"version":"e4a58769bce747f03a3606f55e84690c2003f754ab4354a27ac6aba30eef01bb","impliedFormat":99},{"version":"f75aafc4e058d8f8086fcd7ca4e5e66f1b03a9d1a34c8ae2199b2b6e93292529","impliedFormat":99},{"version":"c179c095d5ea3dc914e3c4b2a1b2d79913623ae32480fda7c3517b35aaa4f459","impliedFormat":99},{"version":"7dfcc5f32fd73d26d849530d15ab3459a60d296c13dee963fb2cbc5b78052d0f","impliedFormat":99},{"version":"930c6bd33500b62b1338a60a9a5bc3a2d57267ac49ba66d75917cb1fda319238","impliedFormat":99},{"version":"f1dee245bac4860d8eeea5d5e7c8d7840cd3b2938e2a22f1a6b98c76617b2460","impliedFormat":99},{"version":"ae8a68cf0adad59ea1b6e86f51588d809fca647b917bb0f92c155b6023b09e4d","impliedFormat":99},{"version":"ac0dcf28e390ac8d64abe3a5360ed528a1e4e71eee1fbe5ddf091252c77cddbb","impliedFormat":99},{"version":"6f991230de1286498f9255a25e2d2775622b2a4a01c0e11f28420b8406939da9","impliedFormat":99},{"version":"a870f299693c05120fc13dee17732dc3ed944a71f3dd3c6d65207e6a438b5ad7","impliedFormat":99},{"version":"094cb87fd48e70fcad081ba6ae1f74f9edab2d1329115036fb9c3a389ce3eacd","impliedFormat":99},{"version":"2f3bd6cfa61545179b57e57477fcc3730eb4330329b02bc92d4047ef5cb297a3","impliedFormat":99},{"version":"4a0be6234a190079827c8909b3ec1949d44434ada4d898450b5fb330cc64551d","impliedFormat":99},{"version":"28bdaf936bc3792e20a906ce59550aa56fbe62ec1a575421202cca5bb347941c","impliedFormat":99},{"version":"a1b2194fa0e559036a7a20b3aa5e2f1b9223e2e0970749f86b2b986a5e7fb7f4","impliedFormat":99},{"version":"312211490ce881af3f933b44112667553d75a47d1d1535a32b6d670acec5526c","impliedFormat":99},{"version":"bdd28704a9d5e5f01335c82fab4079572961d9b757b91e3c491def418641db0c","impliedFormat":99},{"version":"688f9a3d70471ece7275fea4b51deff241ea6525394fbbcad89829b211b004a4","impliedFormat":99},{"version":"b44446c5aec3087ea1187db157e783d53e1705fecf7464340486668bac89be80","impliedFormat":99},{"version":"8e551cda9ceaeac0ed69fa73b16de6ec53b41a07309b2af1922425132e90ca8f","impliedFormat":99},{"version":"1f357a80231861ee269346567026801dadb832b62b2c1daf4c66afe8628e9a7c","impliedFormat":99},{"version":"697caf9cc3248e52a45104109102bdbd918c83a8a8cf949d0c1ff18591819a75","impliedFormat":99},{"version":"3d7ed7f00bb47182b1436fde7e6262147ce38c6678d911077363f58b6a9032e0","impliedFormat":99},{"version":"494e42e7469a396cb0bfba116983ad5a571b4496e3ea3fe171893b95f31c6e32","impliedFormat":99},{"version":"edf5814e0546be709b86305581266cbd8609a4cb5e3d416a2cf8290927d3feb0","impliedFormat":99},{"version":"bf640b4000df55cec22005e8888c34661605d15d37fbc6fa52e34b8c5ad248de","impliedFormat":99},{"version":"7fc0767a36586b5ec2307e6d3926b047066d9b1cc5e3be12efec83af5822173e","impliedFormat":99},{"version":"2b5177892e7b27a3597ecb4769c9e048dff0610ac1a5312202f2ba595f2b09d2","impliedFormat":99},{"version":"dffbd270006e6d1eb7e54019953f568f745fbad1f286e6b6f9700c713dd9d71d","impliedFormat":99},{"version":"3209d42dcb86b35a13c127fc39981a644b61a1fb0e59524038d0f3bd7fe25768","impliedFormat":99},{"version":"04066614e03bc94d4d8d93f01375a63412edbc8a544951c30038383cde3cdeb0","impliedFormat":99},{"version":"00861cf1f6f2a140acc65df08e5f6b8271501996a1e216307e2f9a6c76424a80","impliedFormat":99},{"version":"599ea73f6d3589a31f85b81b0eadc24d084d17d78907a5836695deb2cc5146d7","impliedFormat":99},{"version":"d9bcc03f7bda0519079ad03e578ad4b0d141f3e46592373d26bb45dc0ff555d6","impliedFormat":99},{"version":"fb28aed3ac7d66b3aa9ffc1ee1b32cca95f6534efbbe17dd03f161f2a5c9d138","impliedFormat":99},{"version":"1ff2c4fdb6195074f0579878fdb436a371cf6c899bbd02fe19b8e115ed33c3b2","impliedFormat":99},{"version":"9fe651fc8a5eeae070c48667be2c4321013dbf5e201a5a9e0aa7937ad9cd86e9","impliedFormat":99},{"version":"fa6df0af2818d39dcccafa76a485baf0944292ecaf7acc623acdc5832149f796","impliedFormat":99},{"version":"bf2f4914e8b356a9907f7b347f984d4cb8efd2fd359d443793c52d55d9f2abb6","impliedFormat":99},{"version":"4d372ab48ae91c4107d54d66a62aed755d61b56cf5b518b643f1e8e9df3eea21","impliedFormat":99},{"version":"23b3087d67996b84f57f97e8ef2f616544f696eaa38f5c801e29b91409845b41","impliedFormat":99},{"version":"ebf7cac1e696dda90c2be13c4326ff63fb38f6cacf27cc49d8f0ba2abb6a6537","impliedFormat":99},{"version":"74abab6e2be2eb926eee4b60991d5001dd6efd54b762b91e00d6e58c05b042e1","impliedFormat":99},{"version":"a500d403b4be304df9543550d1ba58af869359149599ae64f5d8bfa3112d328c","impliedFormat":99},{"version":"97195a565be7b72d62c4e392be924e5092f0f2e09246bc43f072ba428cd9d6ee","impliedFormat":99},{"version":"5bb81a9aa2387411321b9f1f5c021b6303428634bee563c9a8f1cd388b1be443","impliedFormat":99},{"version":"312296fbd80241ad8f985580f10db0d2f721a1c8f2fd8cbfeccd809bd33e97b6","impliedFormat":99},{"version":"9c160cf18020aec7bd1deac84fb3bda1a03c590ceae2bc5c150ab037dd226886","impliedFormat":99},{"version":"4b966b4f48c930b166a0058b0d8aadcf0b111135b99a6297aaaad1528c42ed97","impliedFormat":99},{"version":"34391457fcd53de5686ceb29e1c809717918358d78f2832ffe1520edddcda564","impliedFormat":99},{"version":"49434614b9d3e50020be6fdd4fe414c7188e230f397d00a6f6228c400f420860","impliedFormat":99},{"version":"6630339cff93a7090d4d4853453fb6e8ae3eb5de8b4097ec20307da179cd01b5","impliedFormat":99},{"version":"bb5091e3d36c153395ee8a8fd0251e5210a861f3c32a2a277a7380fd2c963762","impliedFormat":99},{"version":"f72a16c4d1741836fe27671daff9ca81d89335e7576308a800bd90f8ef3c57a1","impliedFormat":99},{"version":"9ab1a6e40ea9c023fdf1acd3dac4c78ded74107266da619b72c7eff7af366463","impliedFormat":99},{"version":"db17327ad596824321aefdfa22cc1d45d9fe3192fc8fefe4ad17dafe93c739c3","impliedFormat":99},{"version":"65adf40b48468731c55ca36c7c16fbc841bcebcf0285f8cac3b64c16043bff6b","impliedFormat":99},{"version":"b3850b32553f1be8a58b73a50c962d08b804a1aa629b381d599bf1dea1a16dcb","impliedFormat":99},{"version":"3e0cdc2b81450f206bebc0ec846fd23287f5d0877207a357e995a48e57a817c2","impliedFormat":99},{"version":"843970d8488c7d852f90823c88f3fb5925fec0d649c35be1a8be1b9b8884d19d","impliedFormat":99},{"version":"d10c2f3cd86ee5701260d77dfef2365a166b4d5549e0995c71ac8afc732be06b","impliedFormat":99},{"version":"ab483ea9b43ff8d5c1a1d15f25a425edcdd2d56f93fcd14ff1f457fc914f87d0","impliedFormat":99},{"version":"7b928049f4bb3f15bca40fc7d57ff661cdb6c24a7b235fc8fa083f4dc863ede3","impliedFormat":99},{"version":"2693d3e219283d2bb133924f0bdfd8aed628ff62b3857a6de107282a4c145dd9","impliedFormat":99},{"version":"28c2416835913e9fff8766e5dfb8281f7dcec21e5aa530e84f82be8bfce7c319","impliedFormat":99},{"version":"b0d7aad2d62dae4bee5d5ede4ad4771cdbd5a5da17469da06063d3c3e9309dc7","impliedFormat":99},{"version":"2e73ce1cc735fa0c03af07b0dd40b90bfc7bd5cc11d6271a9a965f0403cf69d9","impliedFormat":99},{"version":"753b3efbdc07a3d9993a8fff8295f7b4f95663e308ea85efc7a0c1ffd2ef116f","impliedFormat":99},{"version":"663dcda40cdeda059c58edc42c267f8cd43d0ea7b654479db13698225c9194cf","impliedFormat":99},{"version":"e9e0b502312db594634de99abc4a0becaa67c69faf5531f66d7495e0bd5f5e0b","impliedFormat":99},{"version":"dd8ace76e65e7f7928d2fa8dd862005ca0956704bfd784c8b17240db7e2b6285","impliedFormat":99},{"version":"32fef2013b3ba81f37989a4dc53980b4ec9e99f8b72eb56a1d3014a8023dbdfe","impliedFormat":99},{"version":"b0aa5026e072714b47dc6e37c0fccfa920f0d34ce3a23e4e6c1de14fa43bb5cb","impliedFormat":99},{"version":"ccca7c55f7360afd3cc343bb2ea943e399c3939df2eff5c7da541110a187de5e","impliedFormat":99},{"version":"5e12805b0500eb4a9f6a8bce9db8c65e5e182fa993d2b8fa65a003f3ceba5ff2","impliedFormat":99},{"version":"5c92b3772bdbd60cd5cec1f2a8c0ff75425efd527a315b9d98b38b9bc6aedc84","impliedFormat":99},{"version":"c79752b70dcb13137ee7bf01e6add89298c15e0d773d4c6faf56c1caa5d997bb","impliedFormat":99},{"version":"7e44cb4862e072b762134c46b95bc3e86124439931ae85159e845d0ca2166bb0","impliedFormat":99},{"version":"da08c6b6a9bce701e6d2775ac410ddb2a7189e19b020abea06c1932226248ae9","impliedFormat":99},{"version":"2abf45177ecaca091e103f4d9557a7e8524d160b28a8dd457dcb7defca65245c","impliedFormat":99},{"version":"bb2b81bc35df3045d588a60ac6649c7b45f539c855660642ff1c12e9b83fbf1e","impliedFormat":99},{"version":"acd4a1daff6df3526b17094f8f30ef3c9c19c9bd5bb95c3fa46a1b8037290778","impliedFormat":99},{"version":"b719a8ea8321a8d636c2765f8b5f8efd20a43f8f7922dac4f2f7ce7e361ce233","impliedFormat":99},{"version":"2673620ee9cb5e62777ceeea4e84f0c53a2bea44d74f103ece49bfb7efe95aec","impliedFormat":99},{"version":"77d542e6871aea7774c7482cdedd9ca20cb03145ab9112e6845a1cc77b7b6c00","impliedFormat":99},{"version":"ab2a3d386e021bf5619d581692f14aac01bef911457d9960ef6c21d9b97c1c06","impliedFormat":99},{"version":"0f2d99aaa9d3574828b6f8c1912208e370a041d640497679ccf4a4f5e073efb3","impliedFormat":99},{"version":"466e0183c786efd5a3e1b69d6e0e445c77d771598871c9929137184206362b80","impliedFormat":99},{"version":"49149ce82e10dfa69eb4fb250755ffe74107279286aaf8305ffeb201a0a96658","impliedFormat":99},{"version":"ad06dc58b3a23a89eecc369690d5cf5ec2d141009fff32cdd68b94ad8de375c3","impliedFormat":99},{"version":"f2b23f711dc15c9ba970626eb5e654d4e7401177b13d16085751f40dd1d77d17","impliedFormat":99},{"version":"b958c46e432e3a260af58b20ed0fdc4f3ca0c02bbdcbf12f63113c1a1932b57c","impliedFormat":99},{"version":"7e560e86bc8f0793454de297413f0ee411418d71b0f002563ddffb26b2f8a438","impliedFormat":99},{"version":"808a1b31fb436c3f1c3bc9307623234442cdb742fac3cd39bd0e8cf4797f86a4","impliedFormat":99},{"version":"ec8657eae496906e9c2bf18ddf1f276d6472cd7b42975c609fe49db7d10c4716","impliedFormat":99},{"version":"8834848635faaf4a4c1b77936a3790515df4989872d12e1f586a903ba8a96d32","impliedFormat":99},{"version":"3c9e08a6171b77f9409f6fbeee92cc7cec90295165305f4749c15b66984094b7","impliedFormat":99},{"version":"d5f52fef25eebd772b28fe3acd0ef103cb3d338c73fd23dae81235aa3d3216f3","impliedFormat":99},{"version":"f911612fe6fbb59498bd042d845e42091b622ff60d62f62899ae9c9061da04db","impliedFormat":99},{"version":"df8d828dcc7036d38beba1b517c8bb7cbe632e23cd13819aac0b7454714d7ea5","impliedFormat":99},{"version":"6b97572b898559bde5ead60c3df72bea74dee67a9497f40ca2063af7cdf84bcf","impliedFormat":99},{"version":"d4c1d20b42f4c4b6710aae2ea61f16b05688871fc88c50164be241001c2ed2fb","impliedFormat":99},{"version":"4e93f1e1aed54628991b8092a5eff614ebd874ab3ff1f18903fb1ddd7543a45b","impliedFormat":99},{"version":"3758c87b27039448554b38154244bcc524735bee89342626ff9eb05b8834d05d","impliedFormat":99},{"version":"17e94aa1431a293fbb231edc284dc251555908f46e40b7648574725bd7acfbc6","impliedFormat":99},{"version":"0e1cab758e8f8c92c6d1b8b2a51fe46c31db41c462aaa21bd05929e3facd8b1e","impliedFormat":99},{"version":"6d37cb963c5288b5225af7fa9d072c429920718fa87d8352f72b5b80978aaf0b","impliedFormat":99},{"version":"e429692aefa26a42888b1e63959688bc0c75ef34fd3eb7c246f32b8872aeeb31","impliedFormat":99},{"version":"ad7c8d67cb12d757804393e00b2b8d239667baf6f2fc576fb1c5daf59b288e7c","impliedFormat":99},{"version":"67553438922bac8ec79650768845ef88fca14983aae0ba1cadbfe543d56553a8","impliedFormat":99},{"version":"a4c6df9b9e7bbbc62cb768cb720bdbdc64567fb119d96f55c6ef19a080714246","impliedFormat":99},{"version":"3b7ae137c1c123a48201c848bd32cd6c2d97ed379761428628e76c4ccfa23076","impliedFormat":99},{"version":"f539686c6416fe847b45817a61a19444bc651cc0ed15fb98533916d19f02153c","impliedFormat":99},{"version":"111346e95c27db969bebdf620d68008685571fb01e07c4f9c722f600f5fdda3e","impliedFormat":99},{"version":"a482905e0aed325e2f3cfd61de96fbf7c11e068e79c65f1974948d8962b85c2e","impliedFormat":99},{"version":"e42b4dcb146a1b8dc938bde576005cdf7ec5c98312d2b992ae21a2858765ff21","impliedFormat":99},{"version":"caa109210ba4d1e129e84c3f8d1ef650ea49fe3bf1e6e350083970556c5a0cf4","impliedFormat":99},{"version":"4b3035f436869dc5da9815cb51a371a972fe31e2515c5dc594b3d74ddb701bee","impliedFormat":99},{"version":"13e18664181a3e017dcd8d6da49baf9d039092717810b0c7ca28fa50e3c8734f","impliedFormat":99},{"version":"4c5e59edd69c043995739483a5a88f7bf766c74fdfaf774ce452d772bc45d2ee","impliedFormat":99},{"version":"a3e732e8dbd82dc42bcc233174115bcfc46c8a38b8f242c3805ca813e50ca65c","impliedFormat":99},{"version":"5b848c83ced5eed8cd86a1d6423fdb049c4d30c40399962e95cc4349e3d14387","impliedFormat":99},{"version":"13b1bb5f1ef16e4158d4797082c1bb3aa64f94770ef09913042115c7a16448b2","impliedFormat":99},{"version":"6a6b525b0b5eeed4f13df317533ac5c652d2881b77007889c55d8200cfe52ab1","impliedFormat":99},{"version":"31aa6ac8e6ea18d4826f74d784e8c67e21f7e3002a4a91f88249f9029a0c5655","impliedFormat":99},{"version":"182684b05cb83f74f1789cc9a21752b7638ee64e3a8bab11dcd0debe5cdc7056","impliedFormat":99},{"version":"ec455fb31d11dc3782f7c7bc81bc1ffee91e360b66ee6a55ee8135c896a9b0cd","impliedFormat":99},{"version":"2be8a2b3e409b62c796ee7589d488afedcffc57b4f3a403abc8c1ae9ba568995","impliedFormat":99},{"version":"7022da6a9c58eee4317bc9ed61af467e92ade72a59f9e3785ab7fe8badcb9a35","impliedFormat":99},{"version":"5692c147dca7d616c0c8f2e8c533515c94457b7232fa255970102aebebaf3fc2","impliedFormat":99},{"version":"f2c6f9d179a757baad9dd06349a3a9ccba653aa23b562f78edd67f8b1aaf3e6b","impliedFormat":99},{"version":"a97e0fea0ab50bceccc582e21eab30bdcfb4336df84ba51ac633fc1331ad6e90","impliedFormat":99},{"version":"3c6404057e4070bd93fd138898709d4319d89d35ee589cc46e2fa6996ed5564d","impliedFormat":99},{"version":"59ec53aae4cb5a602660390aab1cbddfc30a8ade8827395ee2e3b30e579377a5","impliedFormat":99},{"version":"1a6bede7c2fdcf397e002644aabbd42b96af4192d72d15ffd90710b288049683","impliedFormat":99},{"version":"199e7d81a0c106da265c07d3e18766f32e4901d7051c46a724a4069d2915d9e5","impliedFormat":99},{"version":"7c9ede5570eb247348c890cbe6010603d9b557386fd357f15118bf38b3ce77ae","impliedFormat":99},{"version":"9b1fbe127225f3450179df062eff4c9c40bc5fd558e1c6a0347b640d83adb980","impliedFormat":99},{"version":"0651f3116ffe2443f5708b6bb467108fa2dd802f5b5f56c96d536fe5886f6651","impliedFormat":99},{"version":"a6b16347eca8b0031b29efe3b5d2f713053914be731c83ba40a658917e627839","impliedFormat":99},{"version":"160d8a163efd2706f63f3e3e25d0ca8685a1ec37c4458b6a005d5e6f9b2e1e59","impliedFormat":99},{"version":"8fc9c4434476710427388af587998bac7a347cc68329b7da3a57fb11b72d12f3","impliedFormat":99},{"version":"5bca5f1300006daa7c26bdd044b319fd43221cb54310bea9a35b808e99463e88","impliedFormat":99},{"version":"016e62f3268bdd7223c7ae9b9dc48acad3703ab46d83551b40c448bf24988426","impliedFormat":99},{"version":"c3c93270e5b1e9da7c9df3d4c29100e6ff601151e5466a247273572fee9b6c79","impliedFormat":99},{"version":"f67d01c40a50fb5fb4f49a94b26380a516e60549a5f525c9d40da370f0c006f5","impliedFormat":99},{"version":"d14328f8d67ccb14c3cff684f2232433977c7eea206444561fa2f379702408eb","impliedFormat":99},{"version":"a601e8a3922b3ae8da17e0c8589f5039a673ac85fed5d99bc27317a6e3d6b217","impliedFormat":99},{"version":"65c925f741aa701668c4342bb02dbc431bca41987d22f1e4e59c2b543c51d38e","impliedFormat":99},{"version":"a66ecd5048fc481ffa36e22fbbe1c21c0c0e3a7c7aa55d8a558379e29d607638","impliedFormat":99},{"version":"164af37e5cde8d2d830b5a5f2aaa6be547b8004e4e98b33fd6977581f8be4d4a","impliedFormat":99},{"version":"63c39bc22c25673c8ec2394d3d01dc7f03c1e38bb29ce1778a891387de2f8ab6","impliedFormat":99},{"version":"e0ace1698102560c3b8090c2dd1f63ecd0a2b8601b4cb4b16df8642793fd036f","impliedFormat":99},{"version":"2dde5815873618121ef4a1aca528467d670bf21d57ac400f4eb5d1aad3632057","impliedFormat":99},{"version":"4ce379e768b6cf2668f18e690ce46d6275990aff9b48ffa901afd09a71da0034","impliedFormat":99},{"version":"ea10ecbebe8831e4e4b5343cb4c67ac7a690ab0cca495a181dcebee808cca284","impliedFormat":99},{"version":"7b75a17e8586b0d83e4d3732ffe41a10812873a89eafec329b879988537fa83e","impliedFormat":99},{"version":"a1f2d957d1ad742c213ebd9469fa939d7ebd30f9b813bbcab4e78ed11fd861ff","impliedFormat":99},{"version":"2406b086d68af6875c2729678c30d9d04a8a07ad5b40b042d4f86adfb1d32f68","impliedFormat":99},{"version":"a2c7210b0f2be82aed4cdfc51ca084b3ac017a2d2e9baf5b519732fafb6feff7","impliedFormat":99},{"version":"ea5eb451f39b58c15b31a4b3fb9edecd2b0f36b362ea3d05f35af19316b6a3be","impliedFormat":99},{"version":"b823dd6b087e807ee23a64e0111190748b8e17c8ae2279615cb00bd30cb6210c","impliedFormat":99},{"version":"d282b807d67808091c07a6803b11f0fd90640647b555bd492b1ef907edcc06ff","impliedFormat":99},{"version":"7a24b1382adc788e18da793742cd4804f4dc1b8cfc14f203684b8a34f507c6f9","impliedFormat":99},{"version":"3ae8914ddfebaad32d5677ad5a8828385b9581a2ea8cf5ea6ae70e0a054dc49f","impliedFormat":99},{"version":"616f1e3b7a9f245abe5a75fd5338ad0130f9ee123cda077040603702a73d0012","impliedFormat":99},{"version":"d3a30a653e4f926e1ee0eb59f8c4e5db595064aad3f2ff9af6c840a8be0ce513","impliedFormat":99},{"version":"698da301c7eac249e909e0bc259ce2f17d44ddb10258e3afec4efe21f47e49cc","impliedFormat":99},{"version":"edf1398a29effd40893b4e850271ea22bdeb0d3d6a901eb08ad2516f13b8bd05","impliedFormat":99},{"version":"73421be7cc17957418f22a7be68c4e6b8d818f1597585bb3020aeb6ef7006f9c","impliedFormat":99},{"version":"67aa5f28d07c6b149d9d30d173af78d6640f9bca18138bfb16b98e66973974b9","signature":"1dc21bc6cb4b1c9e865cda17460990800bff0bdc74b87e89f348cf1ddd9b85db"},{"version":"e2e3eaf9705313f5e3ba3e2ffdb4cb82422b42f0add65f68025f61ad7c64de92","impliedFormat":1},{"version":"b9832fbf3c8179eb1ed49dbb33dd8f4687e25b8afa0d2afe59c5c0444318a1d5","signature":"b569739c3ab8c3e9e6cb0d50980463613530c924a87c7873ac32c774ec057991"},{"version":"e8371bdb342c7d23f6c2d6a38456852c787d80b17be0e930bdabb99545dce854","signature":"6d6449b80881e70de3f27d314c1e8a6353071f30442df504dc00e429b4f2252f"},{"version":"b5758563682bf0f4559fe3952bd541a91be70bb75267609f7f41e0e7c3dcb57a","signature":"e67ad52ddef646359a0a68869085eeb1e76555c2842b7f8c112abbbd02336fc4"},{"version":"4fcf87afaa5c3b6915b8dbab995cd86e6c8d6137516bce19f39efd4cab196d11","signature":"5bfc795a51033dfc336b879b664154b25c5bd4f9c6aaef7b11f1eef426d6f90c"},{"version":"ca3bd1b370ea67b84632d435c22d8270752fa6013c06c365162af265e4a0e87e","signature":"c7776f62c5f67aa3a5144ab2bad806ca330e226fe19dbbc46a3de2ef004fda1f"},{"version":"8110bba70d0cb9fe968c0b7bd092ad12258caef40b028b4a87f402bdab907faf","signature":"b3ee5184dbf154ca01ff12e4703e5dc467ad7c79d8b16c98b8361118de54cea4"},{"version":"8a43673bbe358714ac758e0476ee67346325886db2e77e80c374837f485fdfa4","signature":"40c7d5d8943e781cb3fa3a84a2c63aa80ee9ce94f9e7e42353b37fcfe301ccc1"},{"version":"e6ce1d43fecd03e47c3353d2db898bc18228d8f1d8e097b0df2ca0ee53683ec4","signature":"53a0f11a4033c0a93e4c0b0995f35cf8fbc4171d20259d56b6f25cb1499de2f6"},{"version":"3d2d0b3d87a19aad65821e4cdb1c4bb149209778bea271b1f98265383cddd6d5","signature":"308695a8fda6f510e51efb0430009a61897fb5067344c8d84a84496de1274a3a"},{"version":"900f722c961fa6e1c28104809d56831c9056dc69599e49d364cc13a6f33966a3","signature":"3e2cf4dab2991bf28f1472678a49a0b7c75c097fed6c2683c2a9834b1d4e48ec"},{"version":"09c52eea7f91c248234e5c3307f967b7b4152d07fcf6fd437824bbf468a48beb","signature":"21657dabbb10f3f461fba1f32db7549ab762a33b29bfe99e174c6837259fc395"},{"version":"dd332252bb45677533cd5553e0c35340cee4c485c90c63360f8e653901286a4f","impliedFormat":1},{"version":"dddde95f3dea44dc49c9095a861298e829122a54a3f56b3b815e615501e2ed16","impliedFormat":1},{"version":"794a88237c94d74302df12ebb02f521cf5389a5bf046a3fdbdd3afb21dc02511","impliedFormat":1},{"version":"66a08d30c55a7aefa847c1f5958924a3ef9bea6cd1c962a8ff1b2548f66a6ce0","impliedFormat":1},{"version":"0790ae78f92ab08c9d7e66b59733a185a9681be5d0dc90bd20ab5d84e54dcb86","impliedFormat":1},{"version":"1046cd42ec19e4fd038c803b4fc1aff31e51e6e48a6b8237a0240a11c1c27792","impliedFormat":1},{"version":"8f93c7e1084de38a142085c7f664b0eb463428601308fb51c68b25cb687e0887","impliedFormat":1},{"version":"83f69c968d32101f8690845f47bcae016cbea049e222a5946889eb3ae37e7582","impliedFormat":1},{"version":"59c3f3ed18de1c7f5927e0eafcdc0e545db88bfae4168695a89e38a85943a86d","impliedFormat":1},{"version":"32e6c27fd3ef2b1ddbf2bf833b2962d282eb07d9d9d3831ca7f4ff63937268e1","impliedFormat":1},{"version":"406ebb72aa8fdd9227bfce7a1b3e390e2c15b27f5da37ea9e3ed19c7fb78d298","impliedFormat":1},{"version":"197109f63a34b5f9379b2d7ba82fc091659d6878db859bd428ea64740cb06669","impliedFormat":1},{"version":"059871a743c0ca4ae511cbd1e356548b4f12e82bc805ab2e1197e15b5588d1c4","impliedFormat":1},{"version":"8ccefe3940a2fcb6fef502cdbc7417bb92a19620a848f81abc6caa146ab963e9","impliedFormat":1},{"version":"44d8ec73d503ae1cb1fd7c64252ffa700243b1b2cc0afe0674cd52fe37104d60","impliedFormat":1},{"version":"67ea5a827a2de267847bb6f1071a56431aa58a4c28f8af9b60d27d5dc87b7289","impliedFormat":1},{"version":"e33bb784508856827448a22947f2cac69e19bc6e9d6ef1c4f42295f7bd4ce293","impliedFormat":1},{"version":"383bb09bfeb8c6ef424c7fbce69ec7dc59b904446f8cfec838b045f0143ce917","impliedFormat":1},{"version":"83508492e3fc5977bc73e63541e92c5a137db076aafc59dcf63e9c6ad34061c7","impliedFormat":1},{"version":"ef064b9a331b7fc9fe0b368499c52623fb85d37d8972d5758edc26064189d14d","impliedFormat":1},{"version":"d64457d06ab06ad5e5f693123ee2f17594f00e6d5481517058569deac326fea0","impliedFormat":1},{"version":"e92ea29d716c5fe1977a34e447866d5cfbd94b3f648e3b9c550603fdae0e94fb","impliedFormat":1},{"version":"3d10f47c6b1e9225c68c140235657a0cdd4fc590c18faf87dcd003fd4e22c67f","impliedFormat":1},{"version":"13989f79ff8749a8756cac50f762f87f153e3fb1c35768cc6df15968ec1adb1a","impliedFormat":1},{"version":"e014c2f91e94855a52dd9fc88867ee641a7d795cfe37e6045840ecf93dab2e6b","impliedFormat":1},{"version":"74b9f867d1cc9f4e6122f81b59c77cbd6ff39f482fb16cffdc96e4cda1b5fdb1","impliedFormat":1},{"version":"7c8574cfc7cb15a86db9bf71a7dc7669593d7f62a68470adc01b05f246bd20ff","impliedFormat":1},{"version":"c8f49d91b2669bf9414dfc47089722168602e5f64e9488dbc2b6fe1a0f6688da","impliedFormat":1},{"version":"3abee758d3d415b3b7b03551f200766c3e5dd98bb1e4ff2c696dc6f0c5f93191","impliedFormat":1},{"version":"79bd7f60a080e7565186cfdfd84eac7781fc4e7b212ab4cd315b9288c93b7dc7","impliedFormat":1},{"version":"4a2f281330a7b5ed71ebc4624111a832cd6835f3f92ad619037d06b944398cf4","impliedFormat":1},{"version":"ea8130014cb8ee30621bf521f58d036bff3b9753b2f6bd090cc88ac15836d33c","impliedFormat":1},{"version":"c740d49c5a0ecc553ddfc14b7c550e6f5a2971be9ed6e4f2280b1f1fa441551d","impliedFormat":1},{"version":"886a56c6252e130f3e4386a6d3340cf543495b54c67522d21384ed6fb80b7241","impliedFormat":1},{"version":"4b7424620432be60792ede80e0763d4b7aab9fe857efc7bbdb374e8180f4092a","impliedFormat":1},{"version":"e407db365f801ee8a693eca5c21b50fefd40acafda5a1fa67f223800319f98a8","impliedFormat":1},{"version":"529660b3de2b5246c257e288557b2cfa5d5b3c8d2240fa55a4f36ba272b57d18","impliedFormat":1},{"version":"0f6646f9aba018d0a48b8df906cb05fa4881dc7f026f27ab21d26118e5aa15de","impliedFormat":1},{"version":"b3620fcf3dd90a0e6a07268553196b65df59a258fe0ec860dfac0169e0f77c52","impliedFormat":1},{"version":"08135e83e8d9e34bab71d0cf35b015c21d0fd930091b09706c6c9c0e766aca28","impliedFormat":1},{"version":"96e14f2fdc1e3a558462ada79368ed49b004efce399f76f084059d50121bb9a9","impliedFormat":1},{"version":"56f2ade178345811f0c6c4e63584696071b1bd207536dc12384494254bc1c386","impliedFormat":1},{"version":"e484786ef14e10d044e4b16b6214179c95741e89122ba80a7c93a7e00bf624b1","impliedFormat":1},{"version":"4763ce202300b838eb045923eaeb32d9cf86092eee956ca2d4e223cef6669b13","impliedFormat":1},{"version":"7cff5fff5d1a92ae954bf587e5c35987f88cacaa006e45331b3164c4e26369de","impliedFormat":1},{"version":"c276acedaadc846336bb51dd6f2031fdf7f299d0fae1ee5936ccba222e1470ef","impliedFormat":1},{"version":"426c3234f768c89ba4810896c1ee4f97708692727cfecba85712c25982e7232b","impliedFormat":1},{"version":"ee12dd75feac91bb075e2cb0760279992a7a8f5cf513b1cffaa935825e3c58be","impliedFormat":1},{"version":"3e51868ea728ceb899bbfd7a4c7b7ad6dd24896b66812ea35893e2301fd3b23f","impliedFormat":1},{"version":"781e8669b80a9de58083ca1f1c6245ef9fb04d98add79667e3ed70bde034dfd5","impliedFormat":1},{"version":"cfd35b460a1e77a73f218ebf7c4cd1e2eeeaf3fa8d0d78a0a314c6514292e626","impliedFormat":1},{"version":"452d635c0302a0e1c5108edebcca06fc704b2f8132123b1e98a5220afa61a965","impliedFormat":1},{"version":"bbe64c26d806764999b94fcd47c69729ba7b8cb0ca839796b9bb4d887f89b367","impliedFormat":1},{"version":"b87d65da85871e6d8c27038146044cffe40defd53e5113dbd198b8bce62c32db","impliedFormat":1},{"version":"c37712451f6a80cbf8abec586510e5ac5911cb168427b08bc276f10480667338","impliedFormat":1},{"version":"ecf02c182eec24a9a449997ccc30b5f1b65da55fd48cbfc2283bcfa8edc19091","impliedFormat":1},{"version":"0b2c6075fc8139b54e8de7bcb0bed655f1f6b4bf552c94c3ee0c1771a78dea73","impliedFormat":1},{"version":"49707726c5b9248c9bac86943fc48326f6ec44fe7895993a82c3e58fb6798751","impliedFormat":1},{"version":"a9679a2147c073267943d90a0a736f271e9171de8fbc9c378803dd4b921f5ed3","impliedFormat":1},{"version":"a8a2529eec61b7639cce291bfaa2dd751cac87a106050c3c599fccb86cc8cf7f","impliedFormat":1},{"version":"bfc46b597ca6b1f6ece27df3004985c84807254753aaebf8afabd6a1a28ed506","impliedFormat":1},{"version":"7fdee9e89b5a38958c6da5a5e03f912ac25b9451dc95d9c5e87a7e1752937f14","impliedFormat":1},{"version":"b8f3eafeaf04ba3057f574a568af391ca808bdcb7b031e35505dd857db13e951","impliedFormat":1},{"version":"30b38ae72b1169c4b0d6d84c91016a7f4c8b817bfe77539817eac099081ce05c","impliedFormat":1},{"version":"c9f17e24cb01635d6969577113be7d5307f7944209205cb7e5ffc000d27a8362","impliedFormat":1},{"version":"685ead6d773e6c63db1df41239c29971a8d053f2524bfabdef49b829ae014b9a","impliedFormat":1},{"version":"b7bdabcd93148ae1aecdc239b6459dfbe35beb86d96c4bd0aca3e63a10680991","impliedFormat":1},{"version":"e83cfc51d3a6d3f4367101bfdb81283222a2a1913b3521108dbaf33e0baf764a","impliedFormat":1},{"version":"95f397d5a1d9946ca89598e67d44a214408e8d88e76cf9e5aecbbd4956802070","impliedFormat":1},{"version":"74042eac50bc369a2ed46afdd7665baf48379cf1a659c080baec52cc4e7c3f13","impliedFormat":1},{"version":"1541765ce91d2d80d16146ca7c7b3978bd696dc790300a4c2a5d48e8f72e4a64","impliedFormat":1},{"version":"ec6acc4492c770e1245ade5d4b6822b3df3ba70cf36263770230eac5927cf479","impliedFormat":1},{"version":"4c39ee6ae1d2aeda104826dd4ce1707d3d54ac34549d6257bea5d55ace844c29","impliedFormat":1},{"version":"deb099454aabad024656e1fc033696d49a9e0994fc3210b56be64c81b59c2b20","impliedFormat":1},{"version":"80eec3c0a549b541de29d3e46f50a3857b0b90552efeeed90c7179aba7215e2f","impliedFormat":1},{"version":"a4153fbd5c9c2f03925575887c4ce96fc2b3d2366a2d80fad5efdb75056e5076","impliedFormat":1},{"version":"6f7c70ca6fa1a224e3407eb308ec7b894cfc58042159168675ccbe8c8d4b3c80","impliedFormat":1},{"version":"4b56181b844219895f36cfb19100c202e4c7322569dcda9d52f5c8e0490583c9","impliedFormat":1},{"version":"5609530206981af90de95236ce25ddb81f10c5a6a346bf347a86e2f5c40ae29b","impliedFormat":1},{"version":"632ce3ee4a6b320a61076aeca3da8432fb2771280719fde0936e077296c988a9","impliedFormat":1},{"version":"8b293d772aff6db4985bd6b33b364d971399993abb7dc3f19ceed0f331262f04","impliedFormat":1},{"version":"4eb7bad32782df05db4ba1c38c6097d029bed58f0cb9cda791b8c104ccfdaa1f","impliedFormat":1},{"version":"c6a8aa80d3dde8461b2d8d03711dbdf40426382923608aac52f1818a3cead189","impliedFormat":1},{"version":"bf5e79170aa7fc005b5bf87f2fe3c28ca8b22a1f7ff970aa2b1103d690593c92","impliedFormat":1},{"version":"ba3c92c785543eba69fbd333642f5f7da0e8bce146dec55f06cfe93b41e7e12f","impliedFormat":1},{"version":"c6d72ececae6067e65c78076a5d4a508f16c806577a3d206259a0d0bfeedc8d1","impliedFormat":1},{"version":"b6429631df099addfcd4a5f33a046cbbde1087e3fc31f75bfbbd7254ef98ea3c","impliedFormat":1},{"version":"4e9cf1b70c0faf6d02f1849c4044368dc734ad005c875fe7957b7df5afe867c9","impliedFormat":1},{"version":"7498b7d83674a020bd6be46aeed3f0717610cb2ae76d8323e560e964eb122d0c","impliedFormat":1},{"version":"b80405e0473b879d933703a335575858b047e38286771609721c6ab1ea242741","impliedFormat":1},{"version":"7193dfd01986cd2da9950af33229f3b7c5f7b1bee0be9743ad2f38ec3042305e","impliedFormat":1},{"version":"1ccb40a5b22a6fb32e28ffb3003dea3656a106dd3ed42f955881858563776d2c","impliedFormat":1},{"version":"8d97d5527f858ae794548d30d7fc78b8b9f6574892717cc7bc06307cc3f19c83","impliedFormat":1},{"version":"ccb4ecdc8f28a4f6644aa4b5ab7337f9d93ff99c120b82b1c109df12915292ac","impliedFormat":1},{"version":"8bbcf9cecabe7a70dcb4555164970cb48ba814945cb186493d38c496f864058f","impliedFormat":1},{"version":"7d57bdfb9d227f8a388524a749f5735910b3f42adfe01bfccca9999dc8cf594c","impliedFormat":1},{"version":"3508810388ea7c6585496ee8d8af3479880aba4f19c6bbd61297b17eb30428f4","impliedFormat":1},{"version":"56931daef761e6bdd586358664ccd37389baabeb5d20fe39025b9af90ea169a5","impliedFormat":1},{"version":"abb48247ab33e8b8f188ef2754dfa578129338c0f2e277bfc5250b14ef1ab7c5","impliedFormat":1},{"version":"beaba1487671ed029cf169a03e6d680540ea9fa8b810050bc94cb95d5e462db2","impliedFormat":1},{"version":"1418ef0ba0a978a148042bc460cf70930cd015f7e6d41e4eb9348c4909f0e16d","impliedFormat":1},{"version":"56be4f89812518a2e4f0551f6ef403ffdeb8158a7c271b681096a946a25227e9","impliedFormat":1},{"version":"bbb0937150b7ab2963a8bc260e86a8f7d2f10dc5ee7ddb1b4976095a678fdaa4","impliedFormat":1},{"version":"862301d178172dc3c6f294a9a04276b30b6a44d5f44302a6e9d7dc1b4145b20b","impliedFormat":1},{"version":"cbf20c7e913c08cb08c4c3f60dae4f190abbabaa3a84506e75e89363459952f0","impliedFormat":1},{"version":"0f3333443f1fea36c7815601af61cb3184842c06116e0426d81436fc23479cb8","impliedFormat":1},{"version":"421d3e78ed21efcbfa86a18e08d5b6b9df5db65340ef618a9948c1f240859cc1","impliedFormat":1},{"version":"b1225bc77c7d2bc3bad15174c4fd1268896a90b9ab3b306c99b1ade2f88cddcc","impliedFormat":1},{"version":"ca46e113e95e7c8d2c659d538b25423eac6348c96e94af3b39382330b3929f2a","impliedFormat":1},{"version":"03ca07dbb8387537b242b3add5deed42c5143b90b5a10a3c51f7135ca645bd63","impliedFormat":1},{"version":"ca936efd902039fda8a9fc3c7e7287801e7e3d5f58dd16bf11523dc848a247d7","impliedFormat":1},{"version":"2c7b3bfa8b39ed4d712a31e24a8f4526b82eeca82abb3828f0e191541f17004c","impliedFormat":1},{"version":"5ffaae8742b1abbe41361441aa9b55a4e42aee109f374f9c710a66835f14a198","impliedFormat":1},{"version":"ecab0f43679211efc9284507075e0b109c5ad024e49b190bb28da4adfe791e49","impliedFormat":1},{"version":"967109d5bc55face1aaa67278fc762ac69c02f57277ab12e5d16b65b9023b04f","impliedFormat":1},{"version":"36d25571c5c35f4ce81c9dcae2bdd6bbaf12e8348d57f75b3ef4e0a92175cd41","impliedFormat":1},{"version":"fde94639a29e3d16b84ea50d5956ee76263f838fa70fe793c04d9fce2e7c85b9","impliedFormat":1},{"version":"5f4c286fea005e44653b760ebfc81162f64aabc3d1712fd4a8b70a982b8a5458","impliedFormat":1},{"version":"e02dabe428d1ffd638eccf04a6b5fba7b2e8fccee984e4ef2437afc4e26f91c2","impliedFormat":1},{"version":"60dc0180bd223aa476f2e6329dca42fb0acaa71b744a39eb3f487ab0f3472e1c","impliedFormat":1},{"version":"b6fdbecf77dcbf1b010e890d1a8d8bfa472aa9396e6c559e0fceee05a3ef572f","impliedFormat":1},{"version":"e1bf9d73576e77e3ae62695273909089dbbb9c44fb52a1471df39262fe518344","impliedFormat":1},{"version":"d2d57df33a7a5ea6db5f393df864e3f8f8b8ee1dfdfe58180fb5d534d617470f","impliedFormat":1},{"version":"fdcd692f0ac95e72a0c6d1e454e13d42349086649828386fe7368ac08c989288","impliedFormat":1},{"version":"5583eef89a59daa4f62dd00179a3aeff4e024db82e1deff2c7ec3014162ea9a2","impliedFormat":1},{"version":"b0641d9de5eaa90bff6645d754517260c3536c925b71c15cb0f189b68c5386b4","impliedFormat":1},{"version":"9899a0434bd02881d19cb08b98ddd0432eb0dafbfe5566fa4226bdd15624b56f","impliedFormat":1},{"version":"4496c81ce10a0a9a2b9cb1dd0e0ddf63169404a3fb116eb65c52b4892a2c91b9","impliedFormat":1},{"version":"ecdb4312822f5595349ec7696136e92ecc7de4c42f1ea61da947807e3f11ebfc","impliedFormat":1},{"version":"42edbfb7198317dd7359ce3e52598815b5dc5ca38af5678be15a4086cccd7744","impliedFormat":1},{"version":"8105321e64143a22ed5411258894fb0ba3ec53816dad6be213571d974542feeb","impliedFormat":1},{"version":"d1b34c4f74d3da4bdf5b29bb930850f79fd5a871f498adafb19691e001c4ea42","impliedFormat":1},{"version":"9a1caf586e868bf47784176a62bf71d4c469ca24734365629d3198ebc80858d7","impliedFormat":1},{"version":"35a443f013255b33d6b5004d6d7e500548536697d3b6ba1937fd788ca4d5d37b","impliedFormat":1},{"version":"b591c69f31d30e46bc0a2b383b713f4b10e63e833ec42ee352531bbad2aadfaa","impliedFormat":1},{"version":"31e686a96831365667cbd0d56e771b19707bad21247d6759f931e43e8d2c797d","impliedFormat":1},{"version":"dfc3b8616bece248bf6cd991987f723f19c0b9484416835a67a8c5055c5960e0","impliedFormat":1},{"version":"03b64b13ecf5eb4e015a48a01bc1e70858565ec105a5639cfb2a9b63db59b8b1","impliedFormat":1},{"version":"c56cc01d91799d39a8c2d61422f4d5df44fab62c584d86c8a4469a5c0675f7c6","impliedFormat":1},{"version":"5205951312e055bc551ed816cbb07e869793e97498ef0f2277f83f1b13e50e03","impliedFormat":1},{"version":"50b1aeef3e7863719038560b323119f9a21f5bd075bb97efe03ee7dec23e9f1b","impliedFormat":1},{"version":"0cc13970d688626da6dce92ae5d32edd7f9eabb926bb336668e5095031833b7c","impliedFormat":1},{"version":"3be9c1368c34165ba541027585f438ed3e12ddc51cdc49af018e4646d175e6a1","impliedFormat":1},{"version":"7d617141eb3f89973b1e58202cdc4ba746ea086ef35cdedf78fb04a8bb9b8236","impliedFormat":1},{"version":"ea6d9d94247fd6d72d146467070fe7fc45e4af6e0f6e046b54438fd20d3bd6a2","impliedFormat":1},{"version":"d584e4046091cdef5df0cb4de600d46ba83ff3a683c64c4d30f5c5a91edc6c6c","impliedFormat":1},{"version":"ce68902c1612e8662a8edde462dff6ee32877ed035f89c2d5e79f8072f96aed0","impliedFormat":1},{"version":"0fdcf43fd0f1d8cacc83da11ba56bda5697fd2be7d3f282141903212169dad34","impliedFormat":1},{"version":"015ba7d990cac24d4ff045d75e5b1e74edd306223bae571e3862c92cec7e6515","impliedFormat":1},{"version":"59cd834d4204f5467061c56e16cd3c68eb2d5ce15e27d2b4c0a30a68a9bbb870","impliedFormat":1},{"version":"a8761b5c12f6b4fdfb6bb5698935397e81df493e15c067752f1193b28ca1aa01","impliedFormat":1},{"version":"760a3050427dc1e3d3228fbcfb17f5e9f9c62b7a21af098da05e5d7f1c110fd6","impliedFormat":1},{"version":"cac3a87600ffc325e1e2bff3830e3e9977de05b66e4384f3625e1378222575bb","impliedFormat":1},{"version":"14826ddd521dfed918eead9e6f65fd33f1d37a1f5723a647c0fcebde5fb2680b","impliedFormat":1},{"version":"5da3fd402befb210af1893188bd9199d8193bbf24cceeb7bb0c5262eae410ab4","impliedFormat":1},{"version":"d48ac7569126b1bc3cd899c3930ef9cf22a72d51cf45b60fc129380ae840c2f2","impliedFormat":1},{"version":"e4f0d7556fda4b2288e19465aa787a57174b93659542e3516fd355d965259712","impliedFormat":1},{"version":"756b471ce6ec8250f0682e4ad9e79c2fddbe40618ba42e84931dbb65d7ac9ab0","impliedFormat":1},{"version":"ce9635a3551490c9acdbcb9a0491991c3d9cd472e04d4847c94099252def0c94","impliedFormat":1},{"version":"b70ee10430cc9081d60eb2dc3bee49c1db48619d1269680e05843fdaba4b2f7a","impliedFormat":1},{"version":"9b78500996870179ab99cbbc02dffbb35e973d90ab22c1fb343ed8958598a36c","impliedFormat":1},{"version":"c6ee8f32bb16015c07b17b397e1054d6906bc916ab6f9cd53a1f9026b7080dbf","impliedFormat":1},{"version":"67e913fa79af629ee2805237c335ea5768ea09b0b541403e8a7eaef253e014d9","impliedFormat":1},{"version":"0b8a688a89097bd4487a78c33e45ca2776f5aedaa855a5ba9bc234612303c40e","impliedFormat":1},{"version":"188e5381ed8c466256937791eab2cc2b08ddcc5e4aaf6b4b43b8786ed1ab5edd","impliedFormat":1},{"version":"8559f8d381f1e801133c61d329df80f7fdab1cbad5c69ebe448b6d3c104a65bd","impliedFormat":1},{"version":"00a271352b854c5d07123587d0bb1e18b54bf2b45918ab0e777d95167fd0cb0b","impliedFormat":1},{"version":"10c4be0feeac95619c52d82e31a24f102b593b4a9eba92088c6d40606f95b85d","impliedFormat":1},{"version":"e1385f59b1421fceba87398c3eb16064544a0ce7a01b3a3f21fa06601dc415dc","impliedFormat":1},{"version":"bacf2c0f8cbfc5537b3c64fc79d3636a228ccbb00d769fb1426b542efe273585","impliedFormat":1},{"version":"3103c479ff634c3fbd7f97a1ccbfb645a82742838cb949fdbcf30dd941aa7c85","impliedFormat":1},{"version":"4b37b3fab0318aaa1d73a6fde1e3d886398345cff4604fe3c49e19e7edd8a50d","impliedFormat":1},{"version":"bf429e19e155685bda115cc7ea394868f02dec99ee51cfad8340521a37a5867a","impliedFormat":1},{"version":"72116c0e0042fd5aa020c2c121e6decfa5414cf35d979f7db939f15bb50d2943","impliedFormat":1},{"version":"20510f581b0ee148a80809122f9bcaa38e4691d3183a4ed585d6d02ffe95a606","impliedFormat":1},{"version":"71f4b56ed57bbdea38e1b12ad6455653a1fbf5b1f1f961d75d182bff544a9723","impliedFormat":1},{"version":"b3e1c5db2737b0b8357981082b7c72fe340edf147b68f949413fee503a5e2408","impliedFormat":1},{"version":"396e64a647f4442a770b08ed23df3c559a3fa7e35ffe2ae0bbb1f000791bda51","impliedFormat":1},{"version":"698551f7709eb21c3ddec78b4b7592531c3e72e22e0312a128c40bb68692a03f","impliedFormat":1},{"version":"662b28f09a4f60e802023b3a00bdd52d09571bc90bf2e5bfbdbc04564731a25e","impliedFormat":1},{"version":"e6b8fb8773eda2c898e414658884c25ff9807d2fce8f3bdb637ab09415c08c3c","impliedFormat":1},{"version":"528288d7682e2383242090f09afe55f1a558e2798ceb34dc92ae8d6381e3504a","impliedFormat":1},{"version":"fb7769b384f84612315ad7c6e2bdd2da7336e8033ea5ad589b984984401d19d0","signature":"9bd7d6390348a0c304e2c493b217754f91bb8aa61e897c274a810579a2cf3bb9"},{"version":"d65cba20127fdf9e57a98a7a908a5bb81271425c4c53aec9749b4152ea1b8c35","signature":"f616afe58bbeedd9ebc23117be69c798bd47ffc69288116c3e98f92396484deb"},{"version":"04ab252427e951ddd506f29c20148dcc4917c678f357dc765f79705ceb5c0a78","impliedFormat":99},{"version":"39cc0cb7e3f996b90da21bcd27e706cb8f83e4a5d54af2e204187559b9e9afad","impliedFormat":99},{"version":"826b787ebe74dd7475fd837c31768e266ad2a6cbdf2c70262f40a306b40ae7f5","impliedFormat":99},{"version":"812183419c579572a32327fc3f8897dd32d6b809d81533c7d8b98028c7f19015","signature":"89c15d46f9eca631eaae87debbfd4db8a19ea7d0f16c02ce683185ac8b301d7a"},{"version":"1f50bb5b601e2e1e4722958f23450925320d67701bd02e8546f9d7f401a4fae3","signature":"b4e05ce3e8d7ea34f44dd634d4b2bbb5490c0b77c67a8969092054e9c0ae29fb"},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},"e2d5f0d53d0bb2e8c4f3b9b6cd155b3e838965b6356e32ffade216e7121b1243",{"version":"4facfac89df9c135e45876cae99cf4817d5085e954418ca332a9374517b3cc54","signature":"cb299c653e5a9fbbedfe1e58254d2ab7832b705a75ed54d60ace691859251d70"},{"version":"f3cf9d0fc8b5c27c4a7f6d8ea19b11beca28002b3a9b7634c1be6c95f4a61b27","signature":"8929e2d3b4b8873fd95ede0b475d2bc02a6ce068f65588b53b4f9911626e8f40"},{"version":"0ea2e6969077bffde3adeddbf5e73dc13b27406574cf271c1f082d76bea4deb3","signature":"75ca731c549d86a476e859996acf5fb6cbff46ae122c254684048faba3e072ba"},{"version":"8f49ab68fb2003ac5974ee08d1c8dc6e6d8f1ee080630ffb2cee4f6b2745f4e0","signature":"32f7c168ee545e9b432d2a861f4fb0bc645e21e88c774cedf54e72d1e3ccc049"},{"version":"a33d4acc3bddb705b5a6adaa52091b1b58d8d2158b3a7691374ba96710aea33b","signature":"862830fce887804f3806cb57db306866ba1696c9baf067cf2417a4ca63f7901a"},{"version":"9c07aac2f2a1dbb7298dbf544daf7025a76df908aaa296ff6bf132e7289e75c3","signature":"a462b50ac9b80a668d3131bf2e549be9e4b939fcdef5c3336dabcb3a6593f898"},{"version":"8fa9d84f057ee2dc61f635349fcfe24fb39e445bc5c4ea8009fa61ad923d58f9","signature":"aa1e1d3f59faedc025b65e84f309e74d01aa278491d1d334e28d2beae6be296d"},{"version":"69a3cfbdf9e76ed5a3ec4424ea6604568b438e2fa66d2eccd8ea77ea85aad616","signature":"add6dd8bbe6a647a0e36670fa24db751b78d97ba3c0512a2cc27849c28fd56e9"},{"version":"044c5518a08bc16da5ef6beafb6635c6cff0c1b4576a2f21591a09633e1dab36","signature":"79c029ebb0ff75ca7dd545d3ec1fe3679057b1eb6a59438f51583f75db8ad9e5"},{"version":"fcaf6a25742255f1726196a53c1e327e065d414980c7e1bab4307ec080aac53e","signature":"5df3de0664802d5d4c6f9b81e37caf86013cb4867d726000d86972c6aae4ffa3"},{"version":"54eb94ecb5044480a71e11209f433c6c9c0a82a950921af23933229d97147f43","signature":"96422c767c19742d0276994e8b5b5cbf36a22d1be20f11e3e13734aaeca7d5a0"},{"version":"97e3f2a87e75b1929c52c0e46e5af366a95ffc76fb7cf4411879fcc5d98f5f4c","signature":"5b1e0f2c3a205df986042dc8dd1801be0e4bbcddc4be1f752dfef8384361cd21"},{"version":"a46b77de8c22658e66e9a5f7aeeb91178a9db74a8d878892ba9195f2ab09d5c9","signature":"f39b3c755089070c837c27b2e16b8aa0b9bbc6ecc530eff8716ede3d812c005a"},{"version":"69484422d414c37f8087102e6622d7d697cccc265334cd997ae7cbb185f1febf","signature":"e53c0e0168c97b547ab480666a1bb48c1a7b7cf8cc9cb633cb86ae0a7c1574ab"},{"version":"9b999764c7f4afc9c4760811307a48bdc52cbc15c4e7e3ba24bf7d7bbdd0575a","signature":"9fbd21dc7996da2a1223f159032344ed5d69061536ed612fef1042af7cfb6205"},{"version":"f1aa7f60c6f9776b86cb9f20bd43ec57cb78da14482c704ab381e20b069ec27f","signature":"62caa5731798879929a350c4fda388735edb3c1d32c284cf4f480ee8b1a95084"},{"version":"195568540174f7fca779adce49f6f3b0b7d0f7044b06cf53176e9934d2852903","signature":"eb6e2a33ef262ac0998915eb79bcc7287b97918a67d8751f9487897a5ab1e5d6"},{"version":"6f4a521428c3b50da02daf9978b78798a02767dd402c0057f05f92d41f271929","signature":"998da863117f06a38261ae0ad457627c28d8bb489437091b05f8056eca9b75d5"},{"version":"1ac55aa9cd3dd79360907718de64c1261b188c9efacc6c764f4e6250da56e5da","signature":"842ade20f5857aa8d432fdca645cab72b6e4cb0536c495f7f2f10ece311d22a2"},{"version":"bf89084e094e417e369210937d30e94931a13726ed68a453ca513e7c53c07ab3","signature":"2373ed842870d89bc8757939ca75ba88ebebb967ed732754af81674a538db118"},{"version":"cef6df435d0f1b28edf96596e0830ab798aa6aef167bfc5f3dfaa1f5aa04da1f","signature":"e23ef60c556b07d3805ba5b8296260c43c840dd2c09dd85b1c34db04ac4c02e8"},{"version":"7466a0f32695bad17b42bdd9158eb38954eb45bfc9fa4da7f0d114a021c88f4a","signature":"37f1cd1e8a57e3123f3a65c7948dfb9f1b1c8acaac72480bf91447104fc99e38"},{"version":"3c6b1104b3073968b125e48f373c61e7ea5d0fc04ebe5ec9b7a2532157c68a97","signature":"1a04478ef720ea08c755d1883861e7c5198eabb718d7c9df89f5a905f4c96211"},"55bedd45e4d9628aa01295c97efd31e873574e5caa2b8a8d7e7107d67b441721",{"version":"e0fafe6b5b9984f5361fd5cfcbaa1d437944add84475411bef7687eac2049b2b","signature":"025a9a7fa75140877de9a88739a098e98fa6fcba700be6929794899f5721af2c"},"fc5ba84360bbd75c1d115e13e9c869b6ca0f8bf4aba0e35bcd9a0e3a0911d688",{"version":"285f575788bdc6cd4491306df9db0b7dfe2f53793c2cea2fbf56879e945f05fb","signature":"234049e8cd58b85b6c661fb5e291daf0a110c217d0d1036b4954fd905e7e8986"},"dd3dc6bd52ce93ac0d02f602a529a3dd21077b6c4e8ec463d3fcc4c24635b6b7",{"version":"20b755689e6ddb474b394ba8eb85855871a16becfdf019d93925c5d1a406b506","signature":"821ba89832001f42a5f9bc9dd8f6e273a2b6b306409ee164bfdc8ad00d6efa49"},{"version":"741adee423c998f2d70924e3e019eb59319a4251d19e9f00907ff71d6d10eeef","signature":"afc42f37731b5c230622a00182fc41026c6161b20732715e6766805220254583"},{"version":"9804d06f8fc62aa52cf3f5373745a4ab0c4cc1dac16d9c345ed7594653a115e1","signature":"ab274c4352f4a52f04767fe95c0b2856af9b28fd28ab0337060a78ea084b91e0"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"2cea2294d4947b88d815860f64e0b5e0eb47a59bde47cfd194aac2230c923865","signature":"3fd2cca637c19e2dd3f641f9029c5a55176f4605009eab8fba3807d102a0e34b"},{"version":"12c06899aef359437b9f8e00efea73cf5af03ef598d1f78ed05d146c0c2a4aab","signature":"9dc7d1bfde02824f587fa95384a2adedc6d721a80c73bd1c982d2acb3c63c7e9"},{"version":"6aa2859da46f726a22040725e684ea964d7469a6b26f1c0a6634bb65e79062b0","impliedFormat":99},{"version":"748e4491c9efe3720e185f17d22033c7246341b68710b2e5d7500cac07415059","signature":"933fa1ee8f2a4d203589011944fc76d755d90af71b43ae3c1a174bbe7cac4cfa"},{"version":"7a33e0b083417a529702a065e7a3508b825628fe2188769d028962d61f4e67d7","signature":"0c6f146bf5402327aa93d97c9e263e92bb63b4d87f2af155416cc7d0490a8224"},{"version":"832b647cd752da7f0ad0313ca426a04bfd851d972467bb003294a99b4caefde7","signature":"f5b5d4d2565e15fa4ea35249f6dfac49afe8d18383b09d6f2732010ea11ff387"},{"version":"9cc856f177994fae623b710c68fdcfa461d6896e4a32e258db603a47eb77ffdc","signature":"1c58f4859d3d295aa528f4a7454cc8147e2a057303ddc5a4c635207e43960a39"},{"version":"68d95cb718067fe00d5124879fc384031680ea7cdb1e210233519612e119e8e3","signature":"ffc5ba7899cd510102a414a091cfaa96e12ddfa830ed29546385d81460a86781"},{"version":"354296e0266623cef602569a48cc095d3ed44c98d27b3a4cfa51d83e29a348c8","signature":"fd132caa638c00c50386d713510b365c04904786101a7781c4bdf51e08cb883c"},{"version":"4343097c50adde754b620170594ff8271568a0971315950dce2f44607df9dd80","signature":"2e424c3408a29c0ed051977e191e9d23f4deb33ed3609baee954a6fad99c5191"},{"version":"6ef7eac1e104c49abfc40ca3b027f55b279bb37633dc877fab54aa56f013b8e8","signature":"bab3efbacbeed2211b0d7c61b0d37806d1f6899081a608fa7979f6794868375c"},{"version":"4002026890e795d2ada82c8ffc4da7d0656fbfc0f4b3fbcf239616ba92379430","signature":"93e6d5d02433b7238be2c78ec0eadc8d0179be1cceb86db475f08fa5a8ee52a6"},{"version":"59b6c48fd8c6bd6126f9eb849b0a6f79acc69be4b09534bacbf2ea0cf89ebf58","signature":"df8b3ea676192262d9c2da41910477f146875bd900444cb5de496dd74f92422c"},{"version":"7c449c9a6643890bcc0249ec85867801e47f2e28381ccff64a1256f82a01be96","signature":"d10487882d054ca3cf9a2a27349e4dbf294f26dfc5c504d38067649eee020d47"},{"version":"ccabf6cc674a68b09d9168904bb46b7c1075a67312cf6f51f3e38b8eeacd2fdb","signature":"38df43baf0855698792e9af6ab80eb4bdf4f3ca3131ca06931b6e6b8a218eb20"},{"version":"d6bbe2fbc333d7337dbbc86b70871c39a7fbeeedc4ce3ac9f45a6da9476d581c","signature":"a5b6b71a52f389b7d115fc6b8bced82e8cf37df28240c4851c772ffa01cfe7f8"},{"version":"56e103156654d67277b57ad175dec9dec1cf591fffe83604cde9c164cb65b697","signature":"0c9125307dc3298cfa1a9e3f1dcec660c0e3b42a4d8f5e814927c82dcc0f3f8b"},{"version":"1e15359b2d33097e3a7571c7960125023c425b5d58b7750313d10086abfa867b","signature":"259725002e3502ea9ed78385814c8fa86ade362c5904e23bbb6ddba043f60d46"},{"version":"87481f277297e016acb703d854e09c4676572e332efb8b05f65f26a6443bbd6a","signature":"dc0612d3e5570bee3c4bc032deb54b3828f1d4ed7f1c6b257adcd110a0b05d8f"},{"version":"7c0709aed6d7c857caaf860a4e1db6dc4756797f0c26f3f7f374615edcd91a45","signature":"72061a66546ce2848222cbf23198173eafaff69f20119cf7f9a5b36eb032e4e6"},{"version":"a41b4d3d618416128d0093af2575048a2de8ef25c0926bcea4f19a24a59de476","signature":"0b8fd7aa2222d31c2de139a76ef2aa14dc86717c45b9ef30e2c733be1fa2707e"},{"version":"ead4349ff7b01d696ef89294a81d18ee1d3f732321398896462c834ab9b9e065","signature":"436462fa5201a375c9dbac742a2f3e0b71d98b4760239af217ce75e0f7a87868"},{"version":"2743d9d5de30981b01cda43d6f6d5a8d3aadb85a99d6e80de49c2a7d5941bc8e","signature":"146acc1e5b0bcdb16ba317e118b073e8a604c7ff382b8933fe04b20b76de3efd"},{"version":"1318ca1c9ad8f83a92c373f400c2482137695236a4f937eb442c5d35f63a932d","signature":"2ab438ddf1dffd90b2c967ad6dc247f2d3aae94ae8ddcfe0223dd8692fabfdaa"},{"version":"fe97631e1a07bc0add09503c5032002e37f4c71ef5dd3c7475b856a29848583d","signature":"0548ee14daf1c9e1eac11d80f9afc06b144d14009f4c0ba35c0cad16b57024c6"},{"version":"58b58d84fc54ba5f4ca46937870c619349fd9eccc4d494250ac7bc73a94e05e9","signature":"aa333ffa319c18796c9104d75082dfd218334109f702eb6e9ad369beac518833"},{"version":"17e76f6e6093754756dd10182f833abf35f1020dc4a8a7ead8c0f9703576870b","signature":"74563c6f0fec0e4fb8f3e103e3d80351af1229a035137fbebcc4b3238fcf5763"},{"version":"1e477363fca474e23b9a1f0e5d2920cd7319e076eaa5156ba29ea4722b96bba5","signature":"ea6e4d0c7d2e0f9d19447f890dd7f4b5d8b5e4aaa7221da056608c535193eaee"},{"version":"42de3962daca60255bf1d3cd90bd3c038db73a3ed61ecaac6cffc6a153181e4a","signature":"a5a69817f699d0a399feba1ffd1de3b257911352ff7eb6ba5e91ef538af838a1"},{"version":"642f750ac24f307c937445bffecb251d0b54e389a1b384a49b9901c0d87ad755","signature":"c2bcdff465ce655b5a4db8b5c853037c0ffcbf934db8d5d68d30b18236ef7f7d"},{"version":"00bc9c0550e1c29e46c84290d7ba21a5d003baefbd68a236b6ad8c6f38793561","signature":"0affdaaa123e2a660fef3e10e66a66a010f52485b84a3a561451ec83c345cf16"},{"version":"e65ee3ba54a21ed61e3c50041bb12a6a3fcb215c56611cda6795c23a7bd89f61","signature":"50d02be96e1cb8e6cd0c0152732e2feb23e7d2125d1284f3feffcd49d0f11781"},{"version":"fbd613e0ccdf442e73262fec677630056486f63c0e03b027aa94e6fb0639a045","signature":"cce46fb956fd9ac6dacd24459a95d598239eec6c8cc9538c41fd728b9ff7fc19"},{"version":"d73361628ad3099bbe90da5159b1e2f4ce4b809f08461d0b0eb3e9ea1d98e61e","signature":"e8697b9859e9948d35aacbea8d9ebe7cbfc725e9a722a494a2c603e4a6a63458"},{"version":"84a69fe439af62e1388c3dbaec0c6ebd79e5d6dcd0244ea54514c7c8cc2294ed","signature":"99f8a940cf0c48113e21f665c8301ad08b1a892d7b0960ba4dcdd8fd09414f9e"},{"version":"7e8cd5973fe879e2ec46c622e7ce9dba24066eca02ba6a78764880811c770b49","signature":"0ee491f9ca866e038594facba0f13cdba5d33ed77ea75720fb59901575ef553d"},{"version":"99e25cb89abede9c8371f612f936bdab0636f02f6220d5cf29effb952e2f75cc","signature":"127b5e8dedc0446ebf3921fd7f9578408ea0e19d93aa3d0b5354b8e245c1e54e"},{"version":"ef5b80b7ae877c827ce35a6754ab494168afb143d5574520ff380530f9d15d27","signature":"fd008b6a4256ad1588e4f4fbf3c060a0c88a5e06a1c41699b68a322aec519874"},{"version":"fb5a20f0012821803529d1873db567a355feec51cf1c43246185418180558a50","signature":"510dd4f1641c5c4f4ec24a6944fb50070005ae438918bcaed5e4c240cb02cd88"},{"version":"279cc4e2b1abb1bdccdc13c369969861de0ff5a845a52697482befee0a4d35b5","signature":"6b8137ce1e27b10fc98f9386c65e05aa1124d7099618b65756588b1f596f0533"},{"version":"ecbcf0aa41806cdf5b90049be64b6f72840c79f1c82e0cfdf1cf2fb5b9135149","signature":"fbabb19565451611a4606929f4800e24c181289301f12b8bb220d669f9c9705b"},{"version":"94c941a0826d68044bbf2b6bf16b2d75490e88a2bde77a79bbcadba99bb800cd","signature":"56ecb6612d64591e068365e483c066d5263ec4ffc640647c6e59f67847af65a4"},{"version":"b3cc3302fcd3b4c8dd1b5f29d372069c8f87e69fb65fc6b4d082c0149c64ed25","signature":"eb904f47da1cdf4ced4f809f9395e902c4ce9e836096b75ef01f5cee9ff31dd9"},{"version":"8080b1ee5ae900523b4861dc6db83bd6816a939f54cec05ebb26d33de81c3ef1","signature":"a480b296d50a6813e2377399df9af2bdb1cd5ba93a7d88d84246b4f2d657caec"},{"version":"cb3447302e4aeabacbed21aa47a3126b73cf63a85f1fb9236fca0fbc74fc6fa0","signature":"9f71c319a721a344952d19efa4be2923bed66257c555987934729f7eed22ecc2"},{"version":"a44614f1169502955b8ec789b7300cf423ffa6f5510fce1f7c9372f1302eb17e","signature":"985875e9dc2e64f4d2590c446a9680d3b9962250d6de1bf5559b3c0862b7661c"},{"version":"7676dff324a6a719eda70a4cae36c9caa060b9c3d6ad3f4639647b08ff633d16","signature":"dad52412d59a05a36d09d491d46924e88a834d19106e63153ed52c9c87b3c38a"},{"version":"d2ce5be4d5fa28bd8da93a5f2b1c4d4164a326576feb19a8547b08ee605bf994","signature":"7a4fe07bffc8b6ec1785aec2b011f454fc93828d90b9269ccdda995af85bf073"},{"version":"6c3aeee17506d71eff88a8a075404da08f25a8a9c9364bf4cc6e785fdf2ec122","signature":"430ee4affbe781e7df0fb141d542913f07e1ebb9faa7527c09a9c10500a04bfe"},{"version":"b74f40da4dcfbf9982b35bc0ffd0495e40697536eb4d4ac6da34d286aed7688c","signature":"24a70cba978432c6defd1d3727aab2a8fabfd512f6bdd832f41937b73922e8ea"},{"version":"8bf9ee3935ab86c268a2a71cb5b4b67d3d5587ca9f2e0bf25f37ffdb1980434c","signature":"f9cdbab48e5d956dc3fa248cc214c2592a7fb4e38f7e4960981ff8b3a6d066b7"},{"version":"982e9671bfa15a76271fc40e92a7b7d82432c5776c494367fde68f14939780da","signature":"9a0f929ed7751273653bf241f4216eb40b6ae9a201d7b22220e40f9c41d32592"},{"version":"c8401266b6b277a26b050bc07b5cbb0fa1177599fb8d348c4351e2925b017434","signature":"f807737a6be4499fe6b5616bca83bb0be97951a7ba5b43ecebc04ef674a34b5a"},{"version":"32822459f520e519fb7fcba181df7d38e37092975028574d7a7968d496196862","signature":"d3ed7d6008452be19c994595ac08acf908b3bf225adb2638b9aacb9e6f5dacf3"},{"version":"4202886afaf105d0c768df1f2f65f9348398746f14cf8466999e9e0014f0e5a9","signature":"2c52f37c8391585a92b142c134839f67a7fa38e073ffe9c09a07f56b99736ab8"},{"version":"7dcf6d96042be82551cbb864d7834895d9abe49663bf5321546c48d0b9b2bf18","signature":"71448f2cfbe1028d701b76ca01f0ba0feb8914a64327c7fe1ce7d5d655ab2762"},{"version":"2be2811476b4c99334f1d143f2c33c26a9319b25db845a885fb8164126eed6f6","signature":"c528e02350ce42f7adbc1b62ce358c15c077d08bbc3c4083b41f74185b9690a1"},{"version":"651aaa6d1f6e0341e48cdccd69c8d4f8c4da92fb93e8d7468771b8e9be6ab09a","signature":"e181ed1eff997c7ceb67f449c02f8f43a183c640bd04ca3dcfd6eab2d32af98e"},{"version":"5a0e9676b42a9be70563187518cc1ef755c23ed60bf2d0a4db0088af5d684b1f","signature":"621b6db63cfe465afbfc31b5437ce2785b399050b53f94cbf5dcb51c16235237"},{"version":"94b7dcf73d8350030b6a643254933522c8466c5fe7c8c8d4a716b427de9d0e6a","signature":"096a133c938ec5f61c2f410650e7d5ed1c19c1d9daf1a02f0bf678895748c879"},{"version":"14d6faf0278cfde1d3825a8ea75540d811f279b324db15cade88a3bdfbcdc0a6","signature":"c2415ad916e4254d445f56398524f3a8bcd56ba451fca40e15e61565cffd10e8"},{"version":"9e71b7f79eea48da77c7e107d682f29ff8f3fd95283e63e6f98e31a849f1038a","signature":"e8ac204557ff562329ff0dce6b45c3ee521fa07ef436bc3610596b8c343ca8ee"},{"version":"80cca38488dc3552cf261abed4a34aa33d395c2bbae7849409f3171622ca70f9","signature":"14015613b6b5d535af589c95b5d2b0533b6db9e709fa964c5324b48ec6ffc1c8"},{"version":"4043859aff681dfee15b927537d23c2b432b88768d1c2ca87cd5641904d5094c","signature":"86f7fe134a8f7b19a5d8455e5beeacf98be1a051c56ee446556ba11cdd764b30"},{"version":"d400a2faf81a780339fcbb94c36107a71165698c9ed573264fa7ed4306041e4f","signature":"d58abe97c451055480e2c78c29bde24dd6e7460195b75139e406cdbf08a21929"},{"version":"024d13a3551e6142720d38b8148c65657f87bce44ebe930742c254d039893811","signature":"02249608632de4dba625c09efeb32c5cb3fb5559f4474244cf87811fce8553c8"},{"version":"82c67a21a0965a59ce2e9dcca0d648d075d93c7af8f1fae5aca063fac93475d5","signature":"41f93b9f541194fb6bf2fedd0a57fe424b26c2a650783b3179f91c1953633c27"},{"version":"70df7f30f6e7e9b447e2179382d7d75916fb33e6d007ee2cedac44ddf4886d01","signature":"15b59e3ab4927a27fe19bcee0e5e293a911db01c6aca14b1a4ee8d49a9894b3f"},{"version":"8a057e7c0f0c1503ada06b2320ba3d54da5b35289a31054a81a58d486df1a19e","signature":"e542c24cae57d92fa096bf2f6a4e66aa438f681a6ee7a45536f2fab7cc121d0c"},{"version":"4076270e44f5e425c30e1e5ffdf16273acf4c03937d0b8ffe6edcdf35d00e014","signature":"f78a41fe58d09bb931f375caaa5adaa1593a1f705744cd645cdc60e75dd6df0d"},{"version":"357b2f9aac0192c071cb2ed65cb6e4c8ec01fa02fc15cf50d889b85731b75666","signature":"11d6efbf31b21592f4572cc36e2c30d3c0f6ec6fee6a6775e80ca363604a97df"},{"version":"425b94e5b4d7846d543d1ab74ac743a70c81c2619fc9e370c59b2f2c422bfe7c","signature":"3c99ffebe7fbe6f0f21b277f64af92c807c127204e7471fb7e6eea65245eb96b"},{"version":"e0b67fd2877af4f79e7126a8e25b8a912b4c6d928c1c1f1ca9bb546fd6d5ad09","signature":"24795bf5608837e72f03c49d1eaaea700cb27e139a73c1cb7434f3ac08a5446b"},{"version":"23c51de5b43004d8a78d7b38d3e293117a296d10830e22db1ff1586a355a902e","signature":"b39c9c69c637158afe2cda5c4fccc7c8106c64eef0762fa118405e419ab7e0ad"},{"version":"714718200426dc7973dfa282dbf9e85587456e89ddb2051327429d75c3e684d3","signature":"544f0017bab6d677789200afcc810895bb973b012286080a5ba5ace064b0acd0"},{"version":"10a3e0bf17d8abe6dd96f08f4a635629e047d0533cd02071d6b86c8419c862e9","signature":"44e4a3a036b6fa3bc6df7d3358578c0925936f4e2075ac16fcd45dbd90857996"},{"version":"3678009606f08dc405f9f705589bd330ee83abbb8b1318559c932bbd69d87800","signature":"d6a7287c21fa2c43e0bf3593586ffdcf62171b160c1635211b05e75196ad72ff"},{"version":"8482603c8d1521b372314b36a278376dad9f91e89480b15489d3ac3a074b9680","signature":"5e132ff0a8ac5d4147629fa485ec2056ffc9c2d2d22f63451a3fd233a883d4f4"},{"version":"351e06dfcfe1832ec5b6c4b50a095e2b3a876459833123c272a2fe9bacec5cb3","signature":"21b540e285003d88606668c01c8de02f6fb176e9198c98328a2da46564bc46c8"},{"version":"df5152855c00858c82aaea1d22e729a853e833f15bc057750353e139feb337ae","signature":"df0070e545c9c8df44849927a91035c6983e40d8bf3554bebeb02008fb6c37d4"},{"version":"a823475f934d7ff044aaf807996770be46ebc6514a0901af000471b819ebd5f8","signature":"5c0cb27ce475d5d7437f65c9211639ca02c7114d4cb11d07288c89ed9067a30e"},{"version":"45bb02a28810375147c6aefd646a4a55ef34a628000f6b2fbc77629ddd15c233","signature":"17bfbc93edab8c8b853b61cd382e2dac843a62376dd712c18ed6db720f04772d"},{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"68c01eac9087e3e9557c8cc6bf697b5a300895f59ffd748b26dfe160647463d9","impliedFormat":99},{"version":"0a60daa545b41003e922202c01e47d0cea514b09ba0af1e4684222f5b332841e","impliedFormat":99},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":99},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":99},{"version":"2059b04988eece7f6e992a5c218e9c5361b8fed24cb04caddb7e1cb4339e236b","impliedFormat":99},{"version":"bb703864a1bc9ca5ac3589ffd83785f6dc86f7f6c485c97d7ffd53438777cb9e","impliedFormat":1},{"version":"b80b0f0356add12993366cd4571ceae1416f50035ac189876373d0e5050308c5","signature":"6a8a61a167f2c837aec2d0ddcfd6239a0c0eec8201bf0658ee1ae774f4b67422"},{"version":"a13f55a7c1406197608f223006cf16f211a257b213362caaef0d2abf3a389c8f","signature":"4700c4aaa2f5711d21a8cd9a22eef223fe7b80bd96a12d3467cb6f84c81a3f25"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"84178cb862a3b37f8102cec17af4c66b166a22cb0a5cd5428dc4c8656d794327","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"75421a9c0088dac67b8d07519590a4fab4e8360644e7dbb476d2509957377711","affectsGlobalScope":true},{"version":"41f7ddd7cccdaf7f4e35fbc875c38e1f29d63e770cdd918e3a192804c723c7fa","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"},{"version":"c2a6a737189ced24ffe0634e9239b087e4c26378d0490f95141b9b9b042b746c","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"11a3a97b6f4ebeb1464f05e932538532efaf939094a2df2bb8ba5c7013b2c299","impliedFormat":1},{"version":"1f4ae755492a669b317903a6b1664cb7af3fe0c3d1eec6447f4e95a80616d15a","impliedFormat":1},{"version":"0b301e46295e7dee8bcead624b4a0f94ab8ba1cb3f572b726977322293be2196","impliedFormat":1}],"root":[[531,537],542,543,[551,553],[562,566],603,609,612,624,978,[980,990],1173,1174,1178,1179,[1261,1266],[1268,1283],1285,1287,[1289,1291],1295,1296,[1298,1376],[1384,1390]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[1388,1],[1389,2],[1390,3],[1386,4],[531,2],[1387,5],[1318,6],[1329,7],[1332,8],[1334,9],[1335,10],[1336,11],[1337,12],[1342,13],[1343,14],[1344,7],[1346,15],[1347,16],[1348,17],[1349,7],[1311,18],[1312,19],[1350,20],[1351,21],[1352,22],[1353,23],[1354,24],[1355,25],[1356,26],[1357,27],[1358,28],[1359,29],[1360,30],[1361,12],[1362,12],[536,31],[537,31],[1299,32],[1300,33],[1306,34],[1307,35],[1340,36],[1341,37],[1339,36],[1369,38],[1325,39],[1328,40],[1327,41],[1363,42],[1317,36],[553,43],[563,44],[566,45],[564,46],[565,46],[1303,47],[1364,48],[1366,49],[1314,50],[1367,51],[1310,52],[1370,53],[1371,54],[609,55],[980,56],[982,57],[983,58],[986,59],[987,60],[1173,61],[1174,62],[1178,63],[990,64],[603,65],[1179,66],[1324,67],[1372,53],[1373,68],[1374,69],[1375,70],[1376,71],[1338,36],[1331,72],[1330,73],[1368,74],[1296,75],[1333,76],[1365,77],[1308,76],[1313,78],[1319,79],[612,80],[1315,70],[988,81],[1316,82],[1384,83],[1309,84],[981,85],[1326,53],[552,86],[1321,87],[624,88],[1322,46],[543,70],[978,89],[1323,90],[984,91],[551,92],[1301,84],[1302,93],[985,46],[1298,94],[989,95],[562,96],[1385,70],[1345,97],[1320,70],[1295,98],[1262,99],[1263,100],[1264,100],[1265,36],[1266,36],[1268,101],[533,36],[1269,36],[1274,102],[1275,103],[1304,104],[1261,36],[1305,105],[1270,36],[1272,106],[1271,107],[1276,36],[535,108],[1277,36],[1278,109],[1279,36],[1273,103],[1280,36],[1281,36],[1282,103],[542,110],[532,111],[534,112],[675,113],[679,114],[678,115],[674,116],[677,117],[671,118],[676,113],[692,119],[694,120],[693,121],[683,122],[722,123],[721,124],[702,125],[714,126],[697,127],[700,125],[698,128],[726,129],[725,130],[724,128],[728,131],[727,132],[723,126],[610,126],[611,133],[733,134],[734,135],[732,136],[731,137],[730,138],[729,134],[738,139],[737,140],[736,141],[672,142],[673,143],[735,144],[711,145],[708,146],[748,126],[747,126],[746,126],[704,146],[716,128],[717,126],[713,126],[712,126],[703,126],[750,147],[749,148],[742,125],[701,125],[745,146],[744,126],[740,149],[705,126],[710,150],[707,151],[709,145],[696,152],[739,127],[719,153],[720,2],[715,126],[706,126],[743,125],[741,128],[781,154],[780,155],[778,156],[756,157],[779,126],[782,100],[784,158],[783,159],[684,146],[685,126],[686,126],[786,160],[785,161],[687,162],[688,151],[680,163],[682,164],[681,165],[689,126],[690,166],[691,146],[788,167],[790,168],[789,169],[791,146],[792,126],[793,126],[794,126],[796,126],[795,126],[808,170],[807,171],[800,172],[801,151],[802,100],[798,173],[799,174],[803,175],[804,126],[805,166],[806,146],[617,134],[616,149],[615,176],[621,177],[620,178],[619,149],[613,149],[557,179],[618,180],[812,181],[811,182],[810,126],[809,126],[662,183],[645,184],[647,185],[644,186],[660,187],[643,188],[663,189],[648,188],[649,190],[664,188],[658,191],[650,188],[652,192],[653,188],[654,193],[651,188],[642,194],[655,187],[656,188],[665,195],[657,183],[666,196],[659,197],[661,198],[641,2],[555,199],[556,200],[962,201],[623,202],[622,203],[546,204],[787,128],[718,2],[554,205],[606,2],[911,126],[544,2],[545,206],[695,128],[548,207],[646,208],[614,128],[751,145],[752,146],[760,146],[759,209],[762,126],[761,126],[777,210],[776,211],[763,126],[764,126],[765,150],[766,151],[767,145],[768,209],[770,146],[769,126],[758,212],[754,213],[757,214],[753,215],[772,216],[771,217],[775,126],[773,218],[774,126],[814,219],[813,209],[755,220],[605,221],[604,126],[821,222],[820,223],[817,224],[819,224],[815,126],[816,224],[818,224],[832,145],[830,146],[825,146],[834,126],[836,225],[835,226],[824,126],[833,126],[823,126],[831,227],[827,151],[828,145],[822,118],[826,126],[829,126],[841,228],[839,228],[840,228],[846,229],[845,230],[842,228],[838,231],[844,228],[843,228],[837,2],[851,232],[850,233],[849,234],[848,235],[847,2],[970,145],[971,146],[974,126],[973,126],[977,236],[976,237],[969,150],[967,151],[968,145],[965,238],[964,239],[963,240],[972,126],[966,241],[975,126],[860,145],[861,146],[864,242],[863,243],[859,227],[856,244],[858,145],[854,245],[853,246],[852,247],[857,248],[862,126],[871,249],[870,250],[867,251],[869,251],[865,126],[866,251],[868,251],[877,252],[876,134],[875,253],[874,254],[873,146],[872,149],[881,255],[883,126],[885,256],[884,257],[878,126],[880,255],[882,126],[879,255],[899,145],[892,146],[903,126],[902,126],[890,126],[905,258],[904,259],[897,146],[898,126],[896,126],[887,149],[895,126],[894,150],[891,151],[893,145],[886,152],[900,126],[901,126],[888,149],[889,126],[550,260],[549,126],[909,261],[915,262],[914,263],[913,261],[907,261],[906,134],[912,264],[910,261],[908,261],[561,265],[560,266],[558,267],[559,268],[922,269],[921,270],[918,271],[920,272],[919,273],[917,274],[916,272],[933,126],[935,145],[932,126],[929,126],[925,275],[930,126],[937,276],[936,277],[934,244],[923,278],[926,279],[928,280],[931,126],[924,281],[927,126],[941,282],[940,118],[939,283],[938,118],[945,284],[944,284],[949,285],[948,286],[947,284],[946,284],[943,126],[942,287],[957,145],[961,288],[960,289],[956,227],[954,244],[955,145],[958,128],[952,290],[951,291],[950,292],[953,293],[959,126],[547,294],[608,295],[607,208],[855,151],[670,296],[669,297],[667,2],[668,298],[699,299],[797,128],[628,128],[626,300],[627,301],[633,302],[631,303],[629,2],[632,304],[630,305],[635,128],[634,2],[1079,306],[1081,307],[1080,2],[1082,308],[1083,309],[1078,310],[1113,311],[1114,312],[1112,313],[1116,314],[1119,315],[1115,316],[1117,317],[1118,317],[1120,318],[1121,319],[1126,320],[1123,321],[1122,128],[1125,322],[1124,323],[1130,324],[1129,325],[1127,326],[1128,316],[1131,327],[1132,328],[1136,329],[1134,330],[1133,331],[1135,332],[1071,333],[1053,316],[1054,334],[1056,335],[1070,334],[1057,336],[1059,316],[1058,2],[1060,316],[1061,337],[1068,316],[1062,2],[1063,2],[1064,2],[1065,316],[1066,338],[1067,339],[1055,318],[1069,340],[1137,341],[1110,342],[1111,343],[1109,344],[1047,345],[1045,346],[1046,347],[1044,348],[1043,349],[1040,350],[1039,351],[1033,349],[1035,352],[1034,353],[1042,354],[1041,351],[1036,355],[1037,356],[1038,356],[1074,336],[1072,336],[1075,357],[1077,358],[1076,359],[1073,360],[1024,338],[1025,2],[1048,361],[1052,362],[1049,2],[1050,363],[1051,2],[1027,364],[1028,364],[1031,365],[1032,366],[1030,364],[1029,365],[1026,334],[1084,316],[1085,316],[1086,316],[1087,367],[1108,368],[1096,369],[1095,2],[1088,370],[1091,316],[1089,316],[1092,316],[1094,371],[1093,372],[1090,316],[1104,2],[1097,2],[1098,2],[1099,316],[1100,316],[1101,2],[1102,316],[1103,2],[1107,373],[1105,2],[1106,316],[1138,340],[1145,374],[1141,340],[1139,340],[1140,340],[1142,340],[1143,340],[1144,340],[1152,375],[1151,376],[1155,377],[1156,378],[1153,379],[1154,380],[1172,381],[1164,382],[1163,383],[1162,340],[1157,384],[1161,385],[1158,384],[1159,384],[1160,384],[1147,340],[1146,2],[1150,386],[1148,379],[1149,387],[1165,2],[1166,2],[1167,340],[1171,388],[1168,2],[1169,340],[1170,384],[1001,2],[1003,389],[1004,390],[1002,2],[1005,2],[1006,2],[1009,391],[1007,2],[1008,2],[1010,2],[1011,2],[1012,2],[1013,392],[1014,2],[1015,393],[1000,394],[991,2],[992,2],[994,2],[993,128],[995,128],[996,2],[997,128],[998,2],[999,2],[1023,395],[1021,396],[1016,2],[1017,2],[1018,2],[1019,2],[1020,2],[1022,2],[637,397],[639,398],[640,399],[636,2],[638,2],[375,2],[1377,128],[1382,400],[1379,401],[1380,401],[1381,401],[1378,402],[602,403],[1177,404],[581,405],[591,406],[588,406],[589,407],[573,407],[587,407],[568,406],[574,408],[577,409],[582,410],[570,408],[571,407],[584,411],[569,408],[575,408],[578,408],[583,408],[585,407],[572,407],[586,407],[580,412],[576,413],[601,414],[579,415],[590,416],[567,407],[592,407],[593,407],[594,407],[595,407],[596,407],[597,407],[598,407],[599,407],[600,407],[1176,417],[1175,2],[1391,418],[1392,2],[1393,2],[1394,2],[141,419],[142,419],[143,420],[97,421],[144,422],[145,423],[146,424],[92,2],[95,425],[93,2],[94,2],[147,426],[148,427],[149,428],[150,429],[151,430],[152,431],[153,431],[154,432],[155,433],[156,434],[157,435],[98,2],[96,2],[158,436],[159,437],[160,438],[192,439],[161,440],[162,441],[163,442],[164,443],[165,444],[166,445],[167,446],[168,447],[169,448],[170,449],[171,449],[172,450],[173,2],[174,451],[176,452],[175,453],[177,454],[178,455],[179,456],[180,457],[181,458],[182,459],[183,460],[184,461],[185,462],[186,463],[187,464],[188,465],[189,466],[99,2],[100,2],[101,2],[140,467],[190,468],[191,469],[196,470],[460,128],[197,471],[195,472],[462,473],[461,474],[193,475],[458,2],[194,476],[83,2],[85,477],[457,128],[227,128],[1395,478],[1396,2],[1397,2],[102,2],[540,479],[539,480],[538,2],[1383,481],[84,2],[979,128],[483,482],[488,483],[495,484],[478,485],[231,2],[239,486],[379,487],[382,488],[354,2],[367,489],[374,490],[256,2],[356,2],[237,2],[353,491],[399,492],[238,2],[229,493],[381,494],[383,495],[384,496],[455,497],[348,498],[301,499],[361,500],[362,501],[360,502],[359,2],[355,503],[380,504],[240,505],[425,2],[426,506],[267,507],[241,508],[268,507],[304,507],[207,507],[377,509],[376,2],[366,510],[473,2],[216,2],[494,511],[433,512],[434,513],[430,514],[512,2],[331,2],[435,100],[431,515],[517,516],[516,517],[511,2],[282,2],[334,518],[333,2],[510,519],[432,128],[287,520],[294,521],[296,522],[286,2],[291,523],[293,524],[295,525],[290,526],[288,2],[292,527],[513,2],[509,2],[515,528],[514,2],[285,529],[504,530],[507,531],[275,532],[274,533],[273,534],[520,128],[272,535],[261,2],[522,2],[1293,536],[1292,2],[523,128],[524,537],[199,2],[363,538],[364,539],[365,540],[203,2],[368,2],[223,541],[198,2],[447,128],[205,542],[446,543],[445,544],[436,2],[437,2],[444,2],[439,2],[442,545],[438,2],[440,546],[443,547],[441,546],[236,2],[233,2],[234,507],[388,2],[393,548],[394,549],[392,550],[390,551],[391,552],[386,2],[453,100],[228,100],[482,553],[489,554],[493,555],[322,556],[321,2],[316,2],[469,557],[477,558],[349,559],[350,560],[428,561],[338,2],[451,562],[326,128],[343,563],[454,564],[339,2],[342,565],[340,2],[452,566],[449,567],[448,2],[450,2],[346,2],[424,568],[211,569],[324,570],[328,571],[344,572],[347,573],[336,574],[329,575],[476,576],[402,577],[320,578],[208,579],[475,580],[204,581],[395,582],[387,2],[396,583],[413,584],[385,2],[412,585],[91,2],[407,586],[232,2],[427,587],[403,2],[217,2],[219,2],[358,2],[411,588],[235,2],[259,589],[345,590],[265,591],[325,2],[410,2],[389,2],[415,592],[416,593],[357,2],[418,594],[420,595],[419,596],[369,2],[409,579],[422,597],[319,598],[408,599],[414,600],[244,2],[248,2],[247,2],[246,2],[251,2],[245,2],[254,2],[253,2],[250,2],[249,2],[252,2],[255,601],[243,2],[311,602],[310,2],[315,603],[312,604],[314,605],[317,603],[313,604],[224,606],[303,607],[472,608],[470,2],[499,609],[501,610],[465,611],[500,612],[212,613],[209,613],[242,2],[226,614],[225,615],[221,616],[222,617],[230,618],[258,618],[269,618],[305,619],[270,619],[214,620],[213,2],[309,621],[308,622],[307,623],[306,624],[215,625],[456,626],[257,627],[464,628],[429,629],[459,630],[463,631],[352,632],[351,633],[332,634],[318,635],[300,636],[302,637],[299,638],[421,639],[323,2],[487,2],[220,640],[423,641],[471,642],[330,2],[260,643],[337,644],[335,645],[262,646],[397,647],[466,2],[263,648],[398,648],[485,2],[484,2],[486,2],[468,2],[467,2],[400,649],[327,2],[297,650],[218,651],[276,2],[202,652],[264,2],[491,128],[201,2],[503,653],[284,128],[497,100],[283,654],[480,655],[281,653],[206,2],[505,656],[279,128],[280,128],[271,2],[200,2],[278,657],[277,658],[266,659],[341,448],[401,448],[417,2],[405,660],[404,2],[289,529],[210,2],[298,128],[474,541],[481,661],[86,128],[89,662],[90,663],[87,128],[88,2],[378,664],[373,665],[372,2],[371,666],[370,2],[479,667],[490,668],[492,669],[496,670],[1294,671],[498,672],[502,673],[530,674],[506,674],[529,675],[508,676],[518,677],[519,678],[521,679],[525,680],[528,541],[527,2],[526,418],[625,2],[406,681],[1297,128],[541,2],[81,2],[82,2],[13,2],[14,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[57,2],[58,2],[60,2],[59,2],[61,2],[62,2],[10,2],[63,2],[64,2],[65,2],[11,2],[66,2],[67,2],[68,2],[69,2],[70,2],[1,2],[71,2],[72,2],[12,2],[76,2],[74,2],[79,2],[78,2],[73,2],[77,2],[75,2],[80,2],[118,682],[128,683],[117,682],[138,684],[109,685],[108,686],[137,418],[131,687],[136,688],[111,689],[125,690],[110,691],[134,692],[106,693],[105,418],[135,694],[107,695],[112,696],[113,2],[116,696],[103,2],[139,697],[129,698],[120,699],[121,700],[123,701],[119,702],[122,703],[132,418],[114,704],[115,705],[124,706],[104,707],[127,698],[126,696],[130,2],[133,708],[1259,709],[1253,710],[1257,711],[1254,711],[1250,710],[1258,712],[1255,713],[1256,711],[1251,714],[1252,715],[1246,716],[1187,717],[1189,718],[1245,2],[1188,719],[1249,720],[1248,721],[1247,722],[1180,2],[1190,717],[1191,2],[1182,723],[1186,724],[1181,2],[1183,725],[1184,726],[1185,2],[1192,727],[1193,727],[1194,727],[1195,727],[1196,727],[1197,727],[1198,727],[1199,727],[1200,727],[1201,727],[1202,727],[1203,727],[1204,727],[1205,727],[1207,727],[1206,727],[1208,727],[1209,727],[1210,727],[1211,727],[1212,727],[1244,728],[1213,727],[1214,727],[1215,727],[1216,727],[1217,727],[1218,727],[1219,727],[1220,727],[1221,727],[1222,727],[1223,727],[1224,727],[1225,727],[1227,727],[1226,727],[1228,727],[1229,727],[1230,727],[1231,727],[1232,727],[1233,727],[1234,727],[1235,727],[1236,727],[1237,727],[1238,727],[1239,727],[1240,727],[1243,727],[1241,727],[1242,727],[1267,36],[1284,729],[1286,729],[1288,729],[1260,729],[1285,730],[1287,731],[1289,732],[1283,733],[1290,734],[1291,735]],"semanticDiagnosticsPerFile":[[1369,[{"start":823,"length":48,"messageText":"Cannot find module '@/components/data-grids/server-expanded-detail' or its corresponding type declarations.","category":1,"code":2307},{"start":11268,"length":14,"code":2339,"category":1,"messageText":"Property 'toggleExpanded' does not exist on type 'Server'."}]]],"affectedFilesPendingEmit":[1390,1387,1318,1329,1332,1334,1335,1336,1337,1342,1343,1344,1346,1347,1348,1349,1311,1312,1350,1351,1352,1353,1354,1355,1356,1357,1358,1359,1360,1361,1362,536,537,1299,1300,1306,1307,1340,1341,1339,1369,1325,1328,1327,1363,1317,553,563,566,564,565,1303,1364,1366,1314,1367,1310,1370,1371,609,980,982,983,986,987,1173,1174,1178,990,603,1179,1324,1372,1373,1374,1375,1376,1338,1331,1330,1368,1296,1333,1365,1308,1313,1319,612,1315,988,1316,1384,1309,981,1326,552,1321,624,1322,543,978,1323,984,551,1301,1302,985,1298,989,562,1385,1345,1320,1295,1262,1263,1264,1265,1266,1268,533,1269,1274,1275,1304,1261,1305,1270,1272,1271,1276,535,1277,1278,1279,1273,1280,1281,1282,542,534,1285,1287,1289,1283,1290,1291],"version":"5.9.3"} \ No newline at end of file +{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.es2024.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.es2023.intl.d.ts","./node_modules/typescript/lib/lib.es2024.arraybuffer.d.ts","./node_modules/typescript/lib/lib.es2024.collection.d.ts","./node_modules/typescript/lib/lib.es2024.object.d.ts","./node_modules/typescript/lib/lib.es2024.promise.d.ts","./node_modules/typescript/lib/lib.es2024.regexp.d.ts","./node_modules/typescript/lib/lib.es2024.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2024.string.d.ts","./node_modules/typescript/lib/lib.esnext.array.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.iterator.d.ts","./node_modules/typescript/lib/lib.esnext.float16.d.ts","./node_modules/typescript/lib/lib.esnext.error.d.ts","./node_modules/typescript/lib/lib.esnext.sharedmemory.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./node_modules/@types/react/global.d.ts","./node_modules/csstype/index.d.ts","./node_modules/@types/react/index.d.ts","./node_modules/next/dist/styled-jsx/types/css.d.ts","./node_modules/next/dist/styled-jsx/types/macro.d.ts","./node_modules/next/dist/styled-jsx/types/style.d.ts","./node_modules/next/dist/styled-jsx/types/global.d.ts","./node_modules/next/dist/styled-jsx/types/index.d.ts","./node_modules/next/dist/server/get-page-files.d.ts","./node_modules/@types/node/compatibility/disposable.d.ts","./node_modules/@types/node/compatibility/indexable.d.ts","./node_modules/@types/node/compatibility/iterators.d.ts","./node_modules/@types/node/compatibility/index.d.ts","./node_modules/@types/node/globals.typedarray.d.ts","./node_modules/@types/node/buffer.buffer.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/web-globals/abortcontroller.d.ts","./node_modules/@types/node/web-globals/domexception.d.ts","./node_modules/@types/node/web-globals/events.d.ts","./node_modules/buffer/index.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/env-http-proxy-agent.d.ts","./node_modules/undici-types/retry-handler.d.ts","./node_modules/undici-types/retry-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/util.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/eventsource.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/web-globals/fetch.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.generated.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/sea.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/react/canary.d.ts","./node_modules/@types/react/experimental.d.ts","./node_modules/@types/react-dom/index.d.ts","./node_modules/@types/react-dom/canary.d.ts","./node_modules/@types/react-dom/experimental.d.ts","./node_modules/next/dist/lib/fallback.d.ts","./node_modules/next/dist/compiled/webpack/webpack.d.ts","./node_modules/next/dist/shared/lib/modern-browserslist-target.d.ts","./node_modules/next/dist/shared/lib/entry-constants.d.ts","./node_modules/next/dist/shared/lib/constants.d.ts","./node_modules/next/dist/lib/bundler.d.ts","./node_modules/next/dist/server/config.d.ts","./node_modules/next/dist/lib/load-custom-routes.d.ts","./node_modules/next/dist/shared/lib/image-config.d.ts","./node_modules/next/dist/build/webpack/plugins/subresource-integrity-plugin.d.ts","./node_modules/next/dist/server/body-streams.d.ts","./node_modules/next/dist/server/request/search-params.d.ts","./node_modules/next/dist/shared/lib/segment-cache/vary-params-decoding.d.ts","./node_modules/next/dist/server/app-render/vary-params.d.ts","./node_modules/next/dist/server/request/params.d.ts","./node_modules/next/dist/server/route-kind.d.ts","./node_modules/next/dist/server/route-definitions/route-definition.d.ts","./node_modules/next/dist/server/route-matches/route-match.d.ts","./node_modules/next/dist/client/components/app-router-headers.d.ts","./node_modules/next/dist/server/lib/cache-control.d.ts","./node_modules/next/dist/shared/lib/app-router-types.d.ts","./node_modules/next/dist/server/lib/cache-handlers/types.d.ts","./node_modules/next/dist/server/use-cache/use-cache-wrapper.d.ts","./node_modules/next/dist/server/resume-data-cache/cache-store.d.ts","./node_modules/next/dist/server/resume-data-cache/resume-data-cache.d.ts","./node_modules/next/dist/lib/constants.d.ts","./node_modules/next/dist/server/render-result.d.ts","./node_modules/next/dist/server/response-cache/types.d.ts","./node_modules/next/dist/server/response-cache/index.d.ts","./node_modules/@types/react/jsx-runtime.d.ts","./node_modules/next/dist/next-devtools/userspace/pages/pages-dev-overlay-setup.d.ts","./node_modules/next/dist/build/static-paths/types.d.ts","./node_modules/next/dist/server/route-definitions/app-page-route-definition.d.ts","./node_modules/next/dist/build/adapter/setup-node-env.external.d.ts","./node_modules/next/dist/server/instrumentation/types.d.ts","./node_modules/next/dist/lib/setup-exception-listeners.d.ts","./node_modules/next/dist/lib/worker.d.ts","./node_modules/next/dist/server/lib/experimental/ppr.d.ts","./node_modules/next/dist/lib/page-types.d.ts","./node_modules/next/dist/build/segment-config/app/app-segment-config.d.ts","./node_modules/next/dist/build/segment-config/pages/pages-segment-config.d.ts","./node_modules/next/dist/build/analysis/get-page-static-info.d.ts","./node_modules/next/dist/build/webpack/loaders/get-module-build-info.d.ts","./node_modules/next/dist/build/webpack/plugins/middleware-plugin.d.ts","./node_modules/next/dist/server/require-hook.d.ts","./node_modules/next/dist/server/node-polyfill-crypto.d.ts","./node_modules/next/dist/server/node-environment-baseline.d.ts","./node_modules/next/dist/server/node-environment-extensions/error-inspect.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-file.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-exit.d.ts","./node_modules/next/dist/server/node-environment-extensions/console-dim.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/unhandled-rejection.external.d.ts","./node_modules/next/dist/server/node-environment-extensions/random.d.ts","./node_modules/next/dist/server/node-environment-extensions/date.d.ts","./node_modules/next/dist/server/node-environment-extensions/web-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/node-crypto.d.ts","./node_modules/next/dist/server/node-environment-extensions/fast-set-immediate.external.d.ts","./node_modules/next/dist/server/node-environment.d.ts","./node_modules/next/dist/build/page-extensions-type.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.compiled.d.ts","./node_modules/next/dist/server/route-definitions/app-route-route-definition.d.ts","./node_modules/next/dist/server/lib/i18n-provider.d.ts","./node_modules/next/dist/server/web/next-url.d.ts","./node_modules/next/dist/compiled/@edge-runtime/cookies/index.d.ts","./node_modules/next/dist/server/web/spec-extension/cookies.d.ts","./node_modules/next/dist/server/web/spec-extension/request.d.ts","./node_modules/next/dist/shared/lib/deep-readonly.d.ts","./node_modules/next/dist/server/lib/incremental-cache/index.d.ts","./node_modules/next/dist/shared/lib/router/utils/middleware-route-matcher.d.ts","./node_modules/next/dist/build/webpack/plugins/flight-manifest-plugin.d.ts","./node_modules/next/dist/build/webpack/plugins/next-font-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/locale-route-definition.d.ts","./node_modules/next/dist/server/route-definitions/pages-route-definition.d.ts","./node_modules/next/dist/shared/lib/mitt.d.ts","./node_modules/next/dist/client/with-router.d.ts","./node_modules/next/dist/client/router.d.ts","./node_modules/next/dist/client/route-loader.d.ts","./node_modules/next/dist/client/page-loader.d.ts","./node_modules/next/dist/shared/lib/bloom-filter.d.ts","./node_modules/next/dist/shared/lib/router/router.d.ts","./node_modules/next/dist/shared/lib/router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/loadable.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/image-config-context.shared-runtime.d.ts","./node_modules/next/dist/client/components/readonly-url-search-params.d.ts","./node_modules/next/dist/shared/lib/hooks-client-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/head-manager-context.shared-runtime.d.ts","./node_modules/next/dist/client/flight-data-helpers.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-key.d.ts","./node_modules/next/dist/client/components/router-reducer/fetch-server-response.d.ts","./node_modules/next/dist/client/components/segment-cache/types.d.ts","./node_modules/next/dist/shared/lib/segment-cache/segment-value-encoding.d.ts","./node_modules/next/dist/client/components/segment-cache/scheduler.d.ts","./node_modules/next/dist/client/components/segment-cache/cache-map.d.ts","./node_modules/next/dist/client/components/segment-cache/vary-path.d.ts","./node_modules/next/dist/client/components/segment-cache/cache.d.ts","./node_modules/next/dist/client/components/router-reducer/ppr-navigations.d.ts","./node_modules/next/dist/client/components/segment-cache/navigation.d.ts","./node_modules/next/dist/client/components/router-reducer/router-reducer-types.d.ts","./node_modules/next/dist/shared/lib/app-router-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/server-inserted-html.shared-runtime.d.ts","./node_modules/next/dist/server/route-modules/pages/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/pages/module.compiled.d.ts","./node_modules/next/dist/build/templates/pages.d.ts","./node_modules/next/dist/server/route-modules/pages/module.d.ts","./node_modules/next/dist/server/render.d.ts","./node_modules/next/dist/build/webpack/plugins/pages-manifest-plugin.d.ts","./node_modules/next/dist/server/route-definitions/pages-api-route-definition.d.ts","./node_modules/next/dist/server/route-matches/pages-api-route-match.d.ts","./node_modules/next/dist/server/route-matchers/route-matcher.d.ts","./node_modules/next/dist/server/route-matcher-providers/route-matcher-provider.d.ts","./node_modules/next/dist/server/route-matcher-managers/route-matcher-manager.d.ts","./node_modules/next/dist/server/normalizers/normalizer.d.ts","./node_modules/next/dist/server/normalizers/locale-route-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/pathname-normalizer.d.ts","./node_modules/next/dist/server/normalizers/request/suffix.d.ts","./node_modules/next/dist/server/normalizers/request/rsc.d.ts","./node_modules/next/dist/server/normalizers/request/next-data.d.ts","./node_modules/next/dist/server/after/builtin-request-context.d.ts","./node_modules/next/dist/server/normalizers/request/segment-prefix-rsc.d.ts","./node_modules/next/dist/server/route-modules/pages/builtin/_error.d.ts","./node_modules/next/dist/server/load-default-error-components.d.ts","./node_modules/next/dist/server/base-server.d.ts","./node_modules/next/dist/server/after/after.d.ts","./node_modules/next/dist/server/after/after-context.d.ts","./node_modules/next/dist/server/use-cache/cache-life.d.ts","./node_modules/next/dist/server/app-render/work-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/lazy-result.d.ts","./node_modules/next/dist/server/app-render/create-error-handler.d.ts","./node_modules/next/dist/shared/lib/action-revalidation-kind.d.ts","./node_modules/next/dist/server/app-render/work-async-storage.external.d.ts","./node_modules/next/dist/server/async-storage/work-store.d.ts","./node_modules/next/dist/server/web/http.d.ts","./node_modules/next/dist/client/components/hooks-server-context.d.ts","./node_modules/next/dist/server/route-modules/app-route/shared-modules.d.ts","./node_modules/next/dist/client/components/redirect-status-code.d.ts","./node_modules/next/dist/client/components/redirect-error.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/request-cookies.d.ts","./node_modules/next/dist/server/async-storage/draft-mode-provider.d.ts","./node_modules/next/dist/server/web/spec-extension/adapters/headers.d.ts","./node_modules/next/dist/server/app-render/cache-signal.d.ts","./node_modules/next/dist/server/app-render/instant-validation/boundary-tracking.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation-error.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-relative-url.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-samples.d.ts","./node_modules/next/dist/server/app-render/dynamic-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage-instance.d.ts","./node_modules/next/dist/server/lib/implicit-tags.d.ts","./node_modules/next/dist/server/app-render/staged-rendering.d.ts","./node_modules/next/dist/server/app-render/work-unit-async-storage.external.d.ts","./node_modules/next/dist/build/templates/app-route.d.ts","./node_modules/next/dist/server/app-render/action-async-storage-instance.d.ts","./node_modules/next/dist/server/app-render/action-async-storage.external.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.d.ts","./node_modules/next/dist/server/route-modules/app-route/module.compiled.d.ts","./node_modules/next/dist/build/segment-config/app/app-segments.d.ts","./node_modules/next/dist/build/get-supported-browsers.d.ts","./node_modules/next/dist/build/utils.d.ts","./node_modules/next/dist/build/rendering-mode.d.ts","./node_modules/next/dist/server/lib/router-utils/build-prefetch-segment-data-route.d.ts","./node_modules/next/dist/server/lib/cpu-profile.d.ts","./node_modules/next/dist/build/turborepo-access-trace/types.d.ts","./node_modules/next/dist/build/turborepo-access-trace/result.d.ts","./node_modules/next/dist/build/turborepo-access-trace/helpers.d.ts","./node_modules/next/dist/build/turborepo-access-trace/index.d.ts","./node_modules/next/dist/export/routes/types.d.ts","./node_modules/next/dist/export/types.d.ts","./node_modules/next/dist/export/worker.d.ts","./node_modules/next/dist/build/worker.d.ts","./node_modules/next/dist/build/index.d.ts","./node_modules/next/dist/lib/coalesced-function.d.ts","./node_modules/next/dist/server/lib/router-utils/types.d.ts","./node_modules/next/dist/trace/types.d.ts","./node_modules/next/dist/trace/trace.d.ts","./node_modules/next/dist/trace/shared.d.ts","./node_modules/next/dist/trace/index.d.ts","./node_modules/next/dist/build/load-jsconfig.d.ts","./node_modules/@next/env/dist/index.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/use-cache-tracker-utils.d.ts","./node_modules/next/dist/build/webpack/plugins/telemetry-plugin/telemetry-plugin.d.ts","./node_modules/next/dist/telemetry/storage.d.ts","./node_modules/next/dist/build/build-context.d.ts","./node_modules/next/dist/build/webpack-config.d.ts","./node_modules/next/dist/build/swc/generated-native.d.ts","./node_modules/next/dist/build/define-env.d.ts","./node_modules/next/dist/build/swc/index.d.ts","./node_modules/next/dist/build/swc/types.d.ts","./node_modules/next/dist/server/dev/parse-version-info.d.ts","./node_modules/next/dist/next-devtools/shared/types.d.ts","./node_modules/next/dist/server/dev/dev-indicator-server-state.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/cache-indicator.d.ts","./node_modules/next/dist/server/lib/parse-stack.d.ts","./node_modules/next/dist/next-devtools/server/shared.d.ts","./node_modules/next/dist/next-devtools/shared/stack-frame.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/utils/get-error-by-type.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/container/runtime-error/render-error.d.ts","./node_modules/next/dist/next-devtools/dev-overlay/shared.d.ts","./node_modules/next/dist/server/dev/debug-channel.d.ts","./node_modules/next/dist/server/dev/hot-reloader-types.d.ts","./node_modules/next/dist/server/web/spec-extension/fetch-event.d.ts","./node_modules/next/dist/server/web/spec-extension/response.d.ts","./node_modules/next/dist/build/segment-config/middleware/middleware-config.d.ts","./node_modules/next/dist/server/web/types.d.ts","./node_modules/next/dist/shared/lib/router/utils/parse-url.d.ts","./node_modules/next/dist/server/base-http/node.d.ts","./node_modules/next/dist/server/lib/async-callback-set.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-regex.d.ts","./node_modules/next/dist/shared/lib/router/utils/route-matcher.d.ts","./node_modules/sharp/lib/index.d.ts","./node_modules/next/dist/server/image-optimizer.d.ts","./node_modules/next/dist/server/next-server.d.ts","./node_modules/next/dist/server/lib/types.d.ts","./node_modules/next/dist/server/lib/lru-cache.d.ts","./node_modules/next/dist/server/lib/dev-bundler-service.d.ts","./node_modules/next/dist/server/dev/static-paths-worker.d.ts","./node_modules/next/dist/server/dev/next-dev-server.d.ts","./node_modules/next/dist/server/next.d.ts","./node_modules/next/dist/server/lib/render-server.d.ts","./node_modules/next/dist/server/lib/router-server.d.ts","./node_modules/next/dist/shared/lib/router/utils/path-match.d.ts","./node_modules/next/dist/server/lib/router-utils/filesystem.d.ts","./node_modules/next/dist/server/lib/router-utils/setup-dev-bundler.d.ts","./node_modules/next/dist/server/lib/router-utils/router-server-context.d.ts","./node_modules/next/dist/server/route-modules/route-module.d.ts","./node_modules/next/dist/server/load-components.d.ts","./node_modules/next/dist/server/web/adapter.d.ts","./node_modules/next/dist/server/app-render/types.d.ts","./node_modules/next/dist/build/webpack/loaders/metadata/types.d.ts","./node_modules/next/dist/build/webpack/loaders/next-app-loader/index.d.ts","./node_modules/next/dist/server/lib/app-dir-module.d.ts","./node_modules/next/dist/server/app-render/app-render.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/contexts/entrypoints.d.ts","./node_modules/next/dist/client/components/error-boundary.d.ts","./node_modules/next/dist/client/components/layout-router.d.ts","./node_modules/next/dist/client/components/render-from-template-context.d.ts","./node_modules/next/dist/client/components/client-page.d.ts","./node_modules/next/dist/client/components/client-segment.d.ts","./node_modules/next/dist/client/components/http-access-fallback/error-boundary.d.ts","./node_modules/next/dist/lib/metadata/types/alternative-urls-types.d.ts","./node_modules/next/dist/lib/metadata/types/extra-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-types.d.ts","./node_modules/next/dist/lib/metadata/types/manifest-types.d.ts","./node_modules/next/dist/lib/metadata/types/opengraph-types.d.ts","./node_modules/next/dist/lib/metadata/types/twitter-types.d.ts","./node_modules/next/dist/lib/metadata/types/metadata-interface.d.ts","./node_modules/next/dist/lib/metadata/types/resolvers.d.ts","./node_modules/next/dist/lib/metadata/types/icons.d.ts","./node_modules/next/dist/lib/metadata/resolve-metadata.d.ts","./node_modules/next/dist/lib/metadata/metadata.d.ts","./node_modules/next/dist/lib/framework/boundary-components.d.ts","./node_modules/next/dist/server/app-render/rsc/preloads.d.ts","./node_modules/next/dist/server/app-render/rsc/postpone.d.ts","./node_modules/next/dist/server/app-render/rsc/taint.d.ts","./node_modules/next/dist/server/app-render/collect-segment-data.d.ts","./node_modules/next/dist/server/app-render/instant-validation/instant-validation.d.ts","./node_modules/next/dist/next-devtools/userspace/app/segment-explorer-node.d.ts","./node_modules/next/dist/server/app-render/entry-base.d.ts","./node_modules/next/dist/build/templates/app-page.d.ts","./node_modules/next/dist/server/route-modules/app-page/helpers/prerender-manifest-matcher.d.ts","./node_modules/@types/react/jsx-dev-runtime.d.ts","./node_modules/@types/react/compiler-runtime.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/rsc/entrypoints.d.ts","./node_modules/@types/react-dom/client.d.ts","./node_modules/@types/react-dom/static.d.ts","./node_modules/@types/react-dom/server.d.ts","./node_modules/next/dist/server/route-modules/app-page/vendored/ssr/entrypoints.d.ts","./node_modules/next/dist/server/route-modules/app-page/module.d.ts","./node_modules/next/dist/server/request/fallback-params.d.ts","./node_modules/next/dist/server/web/spec-extension/image-response.d.ts","./node_modules/next/dist/server/web/spec-extension/user-agent.d.ts","./node_modules/next/dist/server/web/spec-extension/url-pattern.d.ts","./node_modules/next/dist/server/after/index.d.ts","./node_modules/next/dist/server/request/connection.d.ts","./node_modules/next/dist/server/web/exports/index.d.ts","./node_modules/next/dist/server/request-meta.d.ts","./node_modules/next/dist/cli/next-test.d.ts","./node_modules/next/dist/shared/lib/size-limit.d.ts","./node_modules/next/dist/server/config-shared.d.ts","./node_modules/next/dist/server/base-http/index.d.ts","./node_modules/next/dist/server/api-utils/index.d.ts","./node_modules/next/dist/build/adapter/build-complete.d.ts","./node_modules/next/dist/types.d.ts","./node_modules/next/dist/shared/lib/html-context.shared-runtime.d.ts","./node_modules/next/dist/shared/lib/utils.d.ts","./node_modules/next/dist/pages/_app.d.ts","./node_modules/next/app.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-cache.d.ts","./node_modules/next/dist/server/web/spec-extension/revalidate.d.ts","./node_modules/next/dist/server/web/spec-extension/unstable-no-store.d.ts","./node_modules/next/dist/server/use-cache/cache-tag.d.ts","./node_modules/next/cache.d.ts","./node_modules/next/dist/pages/_document.d.ts","./node_modules/next/document.d.ts","./node_modules/next/dist/shared/lib/dynamic.d.ts","./node_modules/next/dynamic.d.ts","./node_modules/next/dist/pages/_error.d.ts","./node_modules/next/dist/client/components/catch-error.d.ts","./node_modules/next/dist/api/error.d.ts","./node_modules/next/error.d.ts","./node_modules/next/dist/shared/lib/head.d.ts","./node_modules/next/head.d.ts","./node_modules/next/dist/server/request/cookies.d.ts","./node_modules/next/dist/server/request/headers.d.ts","./node_modules/next/dist/server/request/draft-mode.d.ts","./node_modules/next/headers.d.ts","./node_modules/next/dist/shared/lib/get-img-props.d.ts","./node_modules/next/dist/client/image-component.d.ts","./node_modules/next/dist/shared/lib/image-external.d.ts","./node_modules/next/image.d.ts","./node_modules/next/dist/client/link.d.ts","./node_modules/next/link.d.ts","./node_modules/next/dist/client/components/unrecognized-action-error.d.ts","./node_modules/next/dist/client/components/redirect.d.ts","./node_modules/next/dist/client/components/not-found.d.ts","./node_modules/next/dist/client/components/forbidden.d.ts","./node_modules/next/dist/client/components/unauthorized.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.server.d.ts","./node_modules/next/dist/client/components/unstable-rethrow.d.ts","./node_modules/next/dist/client/components/navigation.react-server.d.ts","./node_modules/next/dist/client/components/navigation.d.ts","./node_modules/next/navigation.d.ts","./node_modules/next/router.d.ts","./node_modules/next/dist/client/script.d.ts","./node_modules/next/script.d.ts","./node_modules/next/dist/compiled/@edge-runtime/primitives/url.d.ts","./node_modules/next/dist/compiled/@vercel/og/satori/index.d.ts","./node_modules/next/dist/compiled/@vercel/og/types.d.ts","./node_modules/next/server.d.ts","./node_modules/next/types/global.d.ts","./node_modules/next/types/compiled.d.ts","./node_modules/next/types.d.ts","./node_modules/next/index.d.ts","./node_modules/next/image-types/global.d.ts","./.next/types/routes.d.ts","./next-env.d.ts","./lib/backend-internal-url.ts","./next.config.ts","./lib/proxy-backend-request.ts","./app/api/system/database/backup/route.ts","./app/api/system/database/restore/route.ts","./node_modules/@tanstack/table-core/build/lib/utils.d.ts","./node_modules/@tanstack/table-core/build/lib/core/table.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnvisibility.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnordering.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnpinning.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowpinning.d.ts","./node_modules/@tanstack/table-core/build/lib/core/headers.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnfaceting.d.ts","./node_modules/@tanstack/table-core/build/lib/features/globalfaceting.d.ts","./node_modules/@tanstack/table-core/build/lib/filterfns.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnfiltering.d.ts","./node_modules/@tanstack/table-core/build/lib/features/globalfiltering.d.ts","./node_modules/@tanstack/table-core/build/lib/sortingfns.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowsorting.d.ts","./node_modules/@tanstack/table-core/build/lib/aggregationfns.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columngrouping.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowexpanding.d.ts","./node_modules/@tanstack/table-core/build/lib/features/columnsizing.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowpagination.d.ts","./node_modules/@tanstack/table-core/build/lib/features/rowselection.d.ts","./node_modules/@tanstack/table-core/build/lib/core/row.d.ts","./node_modules/@tanstack/table-core/build/lib/core/cell.d.ts","./node_modules/@tanstack/table-core/build/lib/core/column.d.ts","./node_modules/@tanstack/table-core/build/lib/types.d.ts","./node_modules/@tanstack/table-core/build/lib/columnhelper.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getcorerowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getexpandedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfacetedminmaxvalues.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfacetedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfaceteduniquevalues.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getfilteredrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getgroupedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getpaginationrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/utils/getsortedrowmodel.d.ts","./node_modules/@tanstack/table-core/build/lib/index.d.ts","./node_modules/@tanstack/react-table/build/lib/index.d.ts","./node_modules/clsx/clsx.d.mts","./node_modules/tailwind-merge/dist/types.d.ts","./lib/utils.ts","./components/reui/data-grid/data-grid.tsx","./components/data-grids/shared/data-grid-layout.ts","./node_modules/class-variance-authority/dist/types.d.ts","./node_modules/class-variance-authority/dist/index.d.ts","./components/ui/label.tsx","./node_modules/@base-ui/react/esm/internals/reason-parts.d.ts","./node_modules/@base-ui/react/esm/internals/reasons.d.ts","./node_modules/@base-ui/react/esm/internals/createbaseuieventdetails.d.ts","./node_modules/@base-ui/react/esm/types/index.d.ts","./node_modules/@base-ui/react/esm/internals/types.d.ts","./node_modules/@base-ui/react/esm/separator/separator.d.ts","./node_modules/@base-ui/react/esm/separator/index.d.ts","./components/ui/separator.tsx","./components/ui/field.tsx","./components/form-kit/form-field.tsx","./node_modules/@base-ui/react/esm/internals/form-context/formcontext.d.ts","./node_modules/@base-ui/react/esm/form/form.d.ts","./node_modules/@base-ui/react/esm/form/index.d.ts","./node_modules/@base-ui/react/esm/field/root/fieldroot.d.ts","./node_modules/@base-ui/react/esm/switch/root/switchroot.d.ts","./node_modules/@base-ui/react/esm/switch/thumb/switchthumb.d.ts","./node_modules/@base-ui/react/esm/switch/index.parts.d.ts","./node_modules/@base-ui/react/esm/switch/index.d.ts","./components/ui/switch.tsx","./components/form-kit/form-toggle.tsx","./components/form-kit/section-title.tsx","./components/form-kit/segmented-control.tsx","./components/form-kit/index.ts","./node_modules/@base-ui/react/esm/merge-props/mergeprops.d.ts","./node_modules/@base-ui/react/esm/merge-props/index.d.ts","./node_modules/@base-ui/react/esm/internals/getstateattributesprops.d.ts","./node_modules/@base-ui/react/esm/use-render/userender.d.ts","./node_modules/@base-ui/react/esm/use-render/index.d.ts","./components/reui/badge.tsx","./node_modules/@base-ui/react/esm/button/button.d.ts","./node_modules/@base-ui/react/esm/button/index.d.ts","./components/ui/button.tsx","./node_modules/@base-ui/react/esm/field/label/fieldlabel.d.ts","./node_modules/@base-ui/react/esm/internals/usetransitionstatus.d.ts","./node_modules/@base-ui/react/esm/field/error/fielderror.d.ts","./node_modules/@base-ui/react/esm/field/description/fielddescription.d.ts","./node_modules/@base-ui/react/esm/field/control/fieldcontrol.d.ts","./node_modules/@base-ui/react/esm/field/validity/fieldvalidity.d.ts","./node_modules/@base-ui/react/esm/field/item/fielditem.d.ts","./node_modules/@base-ui/react/esm/field/index.parts.d.ts","./node_modules/@base-ui/react/esm/field/index.d.ts","./node_modules/@base-ui/react/esm/input/input.d.ts","./node_modules/@base-ui/react/esm/input/index.d.ts","./components/ui/input.tsx","./node_modules/reselect/dist/reselect.d.ts","./node_modules/@base-ui/utils/esm/store/createselector.d.ts","./node_modules/@base-ui/utils/esm/store/createselectormemoized.d.ts","./node_modules/@base-ui/utils/esm/fasthooks.d.ts","./node_modules/@base-ui/utils/esm/store/store.d.ts","./node_modules/@base-ui/utils/esm/store/usestore.d.ts","./node_modules/@base-ui/utils/esm/store/reactstore.d.ts","./node_modules/@base-ui/utils/esm/store/storeinspector.d.ts","./node_modules/@base-ui/utils/esm/store/index.d.ts","./node_modules/@base-ui/utils/esm/usetimeout.d.ts","./node_modules/@base-ui/utils/esm/useenhancedclickhandler.d.ts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.d.mts","./node_modules/@floating-ui/core/dist/floating-ui.core.d.mts","./node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.d.mts","./node_modules/@floating-ui/dom/dist/floating-ui.dom.d.mts","./node_modules/@floating-ui/react-dom/dist/floating-ui.react-dom.d.mts","./node_modules/@base-ui/react/esm/floating-ui-react/utils/constants.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useinteractions.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtreestore.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingrootstore.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingfocusmanager.d.ts","./node_modules/@base-ui/react/esm/internals/userenderelement.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingportal.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclientpoint.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usedismiss.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefocus.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehovershared.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehover.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverfloatinginteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usehoverreferenceinteraction.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/uselistnavigation.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/userole.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usetypeahead.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloatingrootcontext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/safepolygon.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingtree.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/types.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/components/floatingdelaygroup.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/useclick.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usefloating.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/hooks/usesyncedfloatingrootcontext.d.ts","./node_modules/@base-ui/react/esm/floating-ui-react/index.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popuptriggermap.d.ts","./node_modules/@base-ui/react/esm/utils/popups/store.d.ts","./node_modules/@base-ui/react/esm/utils/popups/popupstoreutils.d.ts","./node_modules/@base-ui/react/esm/utils/popups/index.d.ts","./node_modules/@base-ui/react/esm/accordion/root/accordionroot.d.ts","./node_modules/@base-ui/react/esm/collapsible/root/collapsibleroot.d.ts","./node_modules/@base-ui/react/esm/collapsible/root/usecollapsibleroot.d.ts","./node_modules/@base-ui/react/esm/accordion/item/accordionitem.d.ts","./node_modules/@base-ui/react/esm/accordion/header/accordionheader.d.ts","./node_modules/@base-ui/react/esm/accordion/trigger/accordiontrigger.d.ts","./node_modules/@base-ui/react/esm/accordion/panel/accordionpanel.d.ts","./node_modules/@base-ui/react/esm/accordion/index.parts.d.ts","./node_modules/@base-ui/react/esm/accordion/index.d.ts","./node_modules/@base-ui/react/esm/dialog/root/dialogroot.d.ts","./node_modules/@base-ui/react/esm/dialog/store/dialogstore.d.ts","./node_modules/@base-ui/react/esm/dialog/store/dialoghandle.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/root/alertdialogroot.d.ts","./node_modules/@base-ui/react/esm/dialog/backdrop/dialogbackdrop.d.ts","./node_modules/@base-ui/react/esm/dialog/close/dialogclose.d.ts","./node_modules/@base-ui/react/esm/dialog/description/dialogdescription.d.ts","./node_modules/@base-ui/react/esm/dialog/popup/dialogpopup.d.ts","./node_modules/@base-ui/react/esm/dialog/portal/dialogportal.d.ts","./node_modules/@base-ui/react/esm/dialog/title/dialogtitle.d.ts","./node_modules/@base-ui/react/esm/dialog/trigger/dialogtrigger.d.ts","./node_modules/@base-ui/react/esm/dialog/viewport/dialogviewport.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/handle.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/index.parts.d.ts","./node_modules/@base-ui/react/esm/alert-dialog/index.d.ts","./node_modules/@base-ui/react/esm/internals/resolvevaluelabel.d.ts","./node_modules/@base-ui/react/esm/combobox/root/ariacombobox.d.ts","./node_modules/@base-ui/react/esm/autocomplete/root/autocompleteroot.d.ts","./node_modules/@base-ui/react/esm/autocomplete/value/autocompletevalue.d.ts","./node_modules/@base-ui/react/esm/utils/useanchorpositioning.d.ts","./node_modules/@base-ui/react/esm/autocomplete/trigger/autocompletetrigger.d.ts","./node_modules/@base-ui/react/esm/combobox/input/comboboxinput.d.ts","./node_modules/@base-ui/react/esm/autocomplete/input-group/autocompleteinputgroup.d.ts","./node_modules/@base-ui/react/esm/combobox/icon/comboboxicon.d.ts","./node_modules/@base-ui/react/esm/combobox/clear/comboboxclear.d.ts","./node_modules/@base-ui/react/esm/combobox/list/comboboxlist.d.ts","./node_modules/@base-ui/react/esm/combobox/status/comboboxstatus.d.ts","./node_modules/@base-ui/react/esm/combobox/portal/comboboxportal.d.ts","./node_modules/@base-ui/react/esm/combobox/backdrop/comboboxbackdrop.d.ts","./node_modules/@base-ui/react/esm/combobox/positioner/comboboxpositioner.d.ts","./node_modules/@base-ui/react/esm/combobox/popup/comboboxpopup.d.ts","./node_modules/@base-ui/react/esm/combobox/arrow/comboboxarrow.d.ts","./node_modules/@base-ui/react/esm/combobox/group/comboboxgroup.d.ts","./node_modules/@base-ui/react/esm/combobox/group-label/comboboxgrouplabel.d.ts","./node_modules/@base-ui/react/esm/autocomplete/item/autocompleteitem.d.ts","./node_modules/@base-ui/react/esm/combobox/row/comboboxrow.d.ts","./node_modules/@base-ui/react/esm/combobox/collection/comboboxcollection.d.ts","./node_modules/@base-ui/react/esm/combobox/empty/comboboxempty.d.ts","./node_modules/@base-ui/react/esm/internals/filter.d.ts","./node_modules/@base-ui/react/esm/combobox/root/utils/usefilter.d.ts","./node_modules/@base-ui/react/esm/combobox/root/utils/usefiltereditems.d.ts","./node_modules/@base-ui/react/esm/autocomplete/index.parts.d.ts","./node_modules/@base-ui/react/esm/autocomplete/index.d.ts","./node_modules/@base-ui/react/esm/avatar/root/avatarroot.d.ts","./node_modules/@base-ui/react/esm/avatar/image/useimageloadingstatus.d.ts","./node_modules/@base-ui/react/esm/avatar/image/avatarimage.d.ts","./node_modules/@base-ui/react/esm/avatar/fallback/avatarfallback.d.ts","./node_modules/@base-ui/react/esm/avatar/index.parts.d.ts","./node_modules/@base-ui/react/esm/avatar/index.d.ts","./node_modules/@base-ui/react/esm/checkbox/root/checkboxroot.d.ts","./node_modules/@base-ui/react/esm/checkbox/indicator/checkboxindicator.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.parts.d.ts","./node_modules/@base-ui/react/esm/checkbox/index.d.ts","./node_modules/@base-ui/react/esm/checkbox-group/checkboxgroup.d.ts","./node_modules/@base-ui/react/esm/checkbox-group/index.d.ts","./node_modules/@base-ui/react/esm/collapsible/trigger/collapsibletrigger.d.ts","./node_modules/@base-ui/react/esm/collapsible/panel/collapsiblepanel.d.ts","./node_modules/@base-ui/react/esm/collapsible/index.parts.d.ts","./node_modules/@base-ui/react/esm/collapsible/index.d.ts","./node_modules/@base-ui/react/esm/combobox/root/comboboxroot.d.ts","./node_modules/@base-ui/react/esm/combobox/label/comboboxlabel.d.ts","./node_modules/@base-ui/react/esm/combobox/value/comboboxvalue.d.ts","./node_modules/@base-ui/react/esm/combobox/input-group/comboboxinputgroup.d.ts","./node_modules/@base-ui/react/esm/combobox/trigger/comboboxtrigger.d.ts","./node_modules/@base-ui/react/esm/combobox/item/comboboxitem.d.ts","./node_modules/@base-ui/react/esm/combobox/item-indicator/comboboxitemindicator.d.ts","./node_modules/@base-ui/react/esm/combobox/chips/comboboxchips.d.ts","./node_modules/@base-ui/react/esm/combobox/chip/comboboxchip.d.ts","./node_modules/@base-ui/react/esm/combobox/chip-remove/comboboxchipremove.d.ts","./node_modules/@base-ui/react/esm/combobox/index.parts.d.ts","./node_modules/@base-ui/react/esm/combobox/index.d.ts","./node_modules/@base-ui/react/esm/menu/arrow/menuarrow.d.ts","./node_modules/@base-ui/react/esm/menu/backdrop/menubackdrop.d.ts","./node_modules/@base-ui/react/esm/menu/store/menustore.d.ts","./node_modules/@base-ui/react/esm/menu/root/menurootcontext.d.ts","./node_modules/@base-ui/react/esm/menubar/menubarcontext.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/contextmenurootcontext.d.ts","./node_modules/@base-ui/react/esm/menu/store/menuhandle.d.ts","./node_modules/@base-ui/react/esm/menu/root/menuroot.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item/menucheckboxitem.d.ts","./node_modules/@base-ui/react/esm/menu/checkbox-item-indicator/menucheckboxitemindicator.d.ts","./node_modules/@base-ui/react/esm/menu/group/menugroup.d.ts","./node_modules/@base-ui/react/esm/menu/group-label/menugrouplabel.d.ts","./node_modules/@base-ui/react/esm/menu/item/menuitem.d.ts","./node_modules/@base-ui/react/esm/menu/link-item/menulinkitem.d.ts","./node_modules/@base-ui/react/esm/menu/popup/menupopup.d.ts","./node_modules/@base-ui/react/esm/menu/portal/menuportal.d.ts","./node_modules/@base-ui/react/esm/menu/positioner/menupositioner.d.ts","./node_modules/@base-ui/react/esm/menu/radio-group/menuradiogroup.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item/menuradioitem.d.ts","./node_modules/@base-ui/react/esm/menu/radio-item-indicator/menuradioitemindicator.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenurootcontext.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-root/menusubmenuroot.d.ts","./node_modules/@base-ui/react/esm/menu/trigger/menutrigger.d.ts","./node_modules/@base-ui/react/esm/menu/viewport/menuviewport.d.ts","./node_modules/@base-ui/react/esm/menu/submenu-trigger/menusubmenutrigger.d.ts","./node_modules/@base-ui/react/esm/menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/menu/index.d.ts","./node_modules/@base-ui/react/esm/context-menu/root/contextmenuroot.d.ts","./node_modules/@base-ui/react/esm/context-menu/trigger/contextmenutrigger.d.ts","./node_modules/@base-ui/react/esm/context-menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/context-menu/index.d.ts","./node_modules/@base-ui/react/esm/csp-provider/cspprovider.d.ts","./node_modules/@base-ui/react/esm/csp-provider/index.parts.d.ts","./node_modules/@base-ui/react/esm/csp-provider/index.d.ts","./node_modules/@base-ui/react/esm/dialog/index.parts.d.ts","./node_modules/@base-ui/react/esm/dialog/index.d.ts","./node_modules/@base-ui/react/esm/internals/direction-context/directioncontext.d.ts","./node_modules/@base-ui/react/esm/direction-provider/directionprovider.d.ts","./node_modules/@base-ui/react/esm/direction-provider/index.parts.d.ts","./node_modules/@base-ui/react/esm/direction-provider/index.d.ts","./node_modules/@base-ui/react/esm/drawer/backdrop/drawerbackdrop.d.ts","./node_modules/@base-ui/react/esm/drawer/close/drawerclose.d.ts","./node_modules/@base-ui/react/esm/drawer/content/drawercontent.d.ts","./node_modules/@base-ui/react/esm/drawer/description/drawerdescription.d.ts","./node_modules/@base-ui/react/esm/drawer/indent/drawerindent.d.ts","./node_modules/@base-ui/react/esm/drawer/indent-background/drawerindentbackground.d.ts","./node_modules/@base-ui/react/esm/utils/useswipedismiss.d.ts","./node_modules/@base-ui/react/esm/drawer/root/drawerroot.d.ts","./node_modules/@base-ui/react/esm/drawer/root/drawerrootcontext.d.ts","./node_modules/@base-ui/react/esm/drawer/popup/drawerpopup.d.ts","./node_modules/@base-ui/react/esm/drawer/portal/drawerportal.d.ts","./node_modules/@base-ui/react/esm/drawer/provider/drawerprovider.d.ts","./node_modules/@base-ui/react/esm/drawer/swipe-area/drawerswipearea.d.ts","./node_modules/@base-ui/react/esm/drawer/title/drawertitle.d.ts","./node_modules/@base-ui/react/esm/drawer/trigger/drawertrigger.d.ts","./node_modules/@base-ui/react/esm/drawer/viewport/drawerviewport.d.ts","./node_modules/@base-ui/react/esm/drawer/index.parts.d.ts","./node_modules/@base-ui/react/esm/drawer/index.d.ts","./node_modules/@base-ui/react/esm/fieldset/root/fieldsetroot.d.ts","./node_modules/@base-ui/react/esm/fieldset/legend/fieldsetlegend.d.ts","./node_modules/@base-ui/react/esm/fieldset/index.parts.d.ts","./node_modules/@base-ui/react/esm/fieldset/index.d.ts","./node_modules/@base-ui/react/esm/menubar/menubar.d.ts","./node_modules/@base-ui/react/esm/menubar/index.d.ts","./node_modules/@base-ui/react/esm/meter/root/meterroot.d.ts","./node_modules/@base-ui/react/esm/meter/track/metertrack.d.ts","./node_modules/@base-ui/react/esm/meter/indicator/meterindicator.d.ts","./node_modules/@base-ui/react/esm/meter/value/metervalue.d.ts","./node_modules/@base-ui/react/esm/meter/label/meterlabel.d.ts","./node_modules/@base-ui/react/esm/meter/index.parts.d.ts","./node_modules/@base-ui/react/esm/meter/index.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/root/navigationmenuroot.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/list/navigationmenulist.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/item/navigationmenuitem.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/content/navigationmenucontent.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/trigger/navigationmenutrigger.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/portal/navigationmenuportal.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/positioner/navigationmenupositioner.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/viewport/navigationmenuviewport.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/backdrop/navigationmenubackdrop.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/popup/navigationmenupopup.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/arrow/navigationmenuarrow.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/link/navigationmenulink.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/icon/navigationmenuicon.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/index.parts.d.ts","./node_modules/@base-ui/react/esm/navigation-menu/index.d.ts","./node_modules/@base-ui/react/esm/number-field/utils/types.d.ts","./node_modules/@base-ui/react/esm/number-field/root/numberfieldroot.d.ts","./node_modules/@base-ui/react/esm/number-field/group/numberfieldgroup.d.ts","./node_modules/@base-ui/react/esm/number-field/increment/numberfieldincrement.d.ts","./node_modules/@base-ui/react/esm/number-field/decrement/numberfielddecrement.d.ts","./node_modules/@base-ui/react/esm/number-field/input/numberfieldinput.d.ts","./node_modules/@base-ui/react/esm/number-field/scrub-area/numberfieldscrubarea.d.ts","./node_modules/@base-ui/react/esm/number-field/scrub-area-cursor/numberfieldscrubareacursor.d.ts","./node_modules/@base-ui/react/esm/number-field/index.parts.d.ts","./node_modules/@base-ui/react/esm/number-field/index.d.ts","./node_modules/@base-ui/react/esm/otp-field/utils/otp.d.ts","./node_modules/@base-ui/react/esm/otp-field/root/otpfieldroot.d.ts","./node_modules/@base-ui/react/esm/otp-field/input/otpfieldinput.d.ts","./node_modules/@base-ui/react/esm/otp-field/index.parts.d.ts","./node_modules/@base-ui/react/esm/otp-field/index.d.ts","./node_modules/@base-ui/react/esm/preview-card/store/previewcardstore.d.ts","./node_modules/@base-ui/react/esm/preview-card/store/previewcardhandle.d.ts","./node_modules/@base-ui/react/esm/preview-card/root/previewcardroot.d.ts","./node_modules/@base-ui/react/esm/utils/floatingportallite.d.ts","./node_modules/@base-ui/react/esm/preview-card/portal/previewcardportal.d.ts","./node_modules/@base-ui/react/esm/preview-card/trigger/previewcardtrigger.d.ts","./node_modules/@base-ui/react/esm/preview-card/positioner/previewcardpositioner.d.ts","./node_modules/@base-ui/react/esm/preview-card/popup/previewcardpopup.d.ts","./node_modules/@base-ui/react/esm/preview-card/arrow/previewcardarrow.d.ts","./node_modules/@base-ui/react/esm/preview-card/backdrop/previewcardbackdrop.d.ts","./node_modules/@base-ui/react/esm/preview-card/viewport/previewcardviewport.d.ts","./node_modules/@base-ui/react/esm/preview-card/index.parts.d.ts","./node_modules/@base-ui/react/esm/preview-card/index.d.ts","./node_modules/@base-ui/react/esm/progress/root/progressroot.d.ts","./node_modules/@base-ui/react/esm/progress/track/progresstrack.d.ts","./node_modules/@base-ui/react/esm/progress/indicator/progressindicator.d.ts","./node_modules/@base-ui/react/esm/progress/value/progressvalue.d.ts","./node_modules/@base-ui/react/esm/progress/label/progresslabel.d.ts","./node_modules/@base-ui/react/esm/progress/index.parts.d.ts","./node_modules/@base-ui/react/esm/progress/index.d.ts","./node_modules/@base-ui/react/esm/radio/root/radioroot.d.ts","./node_modules/@base-ui/react/esm/radio/indicator/radioindicator.d.ts","./node_modules/@base-ui/react/esm/radio/index.parts.d.ts","./node_modules/@base-ui/react/esm/radio/index.d.ts","./node_modules/@base-ui/react/esm/radio-group/radiogroup.d.ts","./node_modules/@base-ui/react/esm/radio-group/index.d.ts","./node_modules/@base-ui/react/esm/scroll-area/root/scrollarearoot.d.ts","./node_modules/@base-ui/react/esm/scroll-area/viewport/scrollareaviewport.d.ts","./node_modules/@base-ui/react/esm/scroll-area/scrollbar/scrollareascrollbar.d.ts","./node_modules/@base-ui/react/esm/scroll-area/content/scrollareacontent.d.ts","./node_modules/@base-ui/react/esm/scroll-area/thumb/scrollareathumb.d.ts","./node_modules/@base-ui/react/esm/scroll-area/corner/scrollareacorner.d.ts","./node_modules/@base-ui/react/esm/scroll-area/index.parts.d.ts","./node_modules/@base-ui/react/esm/scroll-area/index.d.ts","./node_modules/@base-ui/react/esm/select/root/selectroot.d.ts","./node_modules/@base-ui/react/esm/select/label/selectlabel.d.ts","./node_modules/@base-ui/react/esm/select/trigger/selecttrigger.d.ts","./node_modules/@base-ui/react/esm/select/value/selectvalue.d.ts","./node_modules/@base-ui/react/esm/select/icon/selecticon.d.ts","./node_modules/@base-ui/react/esm/select/portal/selectportal.d.ts","./node_modules/@base-ui/react/esm/select/backdrop/selectbackdrop.d.ts","./node_modules/@base-ui/react/esm/select/positioner/selectpositioner.d.ts","./node_modules/@base-ui/react/esm/select/popup/selectpopup.d.ts","./node_modules/@base-ui/react/esm/select/list/selectlist.d.ts","./node_modules/@base-ui/react/esm/select/item/selectitem.d.ts","./node_modules/@base-ui/react/esm/select/item-indicator/selectitemindicator.d.ts","./node_modules/@base-ui/react/esm/select/item-text/selectitemtext.d.ts","./node_modules/@base-ui/react/esm/select/arrow/selectarrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-down-arrow/selectscrolldownarrow.d.ts","./node_modules/@base-ui/react/esm/select/scroll-up-arrow/selectscrolluparrow.d.ts","./node_modules/@base-ui/react/esm/select/group/selectgroup.d.ts","./node_modules/@base-ui/react/esm/select/group-label/selectgrouplabel.d.ts","./node_modules/@base-ui/react/esm/select/index.parts.d.ts","./node_modules/@base-ui/react/esm/select/index.d.ts","./node_modules/@base-ui/react/esm/slider/root/sliderroot.d.ts","./node_modules/@base-ui/react/esm/slider/label/sliderlabel.d.ts","./node_modules/@base-ui/react/esm/slider/value/slidervalue.d.ts","./node_modules/@base-ui/react/esm/slider/control/slidercontrol.d.ts","./node_modules/@base-ui/react/esm/slider/track/slidertrack.d.ts","./node_modules/@base-ui/react/esm/internals/labelable-provider/labelablecontext.d.ts","./node_modules/@base-ui/react/esm/slider/thumb/sliderthumb.d.ts","./node_modules/@base-ui/react/esm/slider/indicator/sliderindicator.d.ts","./node_modules/@base-ui/react/esm/slider/index.parts.d.ts","./node_modules/@base-ui/react/esm/slider/index.d.ts","./node_modules/@base-ui/react/esm/tabs/tab/tabstab.d.ts","./node_modules/@base-ui/react/esm/tabs/root/tabsroot.d.ts","./node_modules/@base-ui/react/esm/tabs/indicator/tabsindicator.d.ts","./node_modules/@base-ui/react/esm/tabs/panel/tabspanel.d.ts","./node_modules/@base-ui/react/esm/tabs/list/tabslist.d.ts","./node_modules/@base-ui/react/esm/tabs/index.parts.d.ts","./node_modules/@base-ui/react/esm/tabs/index.d.ts","./node_modules/@base-ui/react/esm/toast/positioner/toastpositioner.d.ts","./node_modules/@base-ui/react/esm/toast/usetoastmanager.d.ts","./node_modules/@base-ui/react/esm/toast/createtoastmanager.d.ts","./node_modules/@base-ui/react/esm/toast/provider/toastprovider.d.ts","./node_modules/@base-ui/react/esm/toast/viewport/toastviewport.d.ts","./node_modules/@base-ui/react/esm/toast/root/toastroot.d.ts","./node_modules/@base-ui/react/esm/toast/content/toastcontent.d.ts","./node_modules/@base-ui/react/esm/toast/description/toastdescription.d.ts","./node_modules/@base-ui/react/esm/toast/title/toasttitle.d.ts","./node_modules/@base-ui/react/esm/toast/close/toastclose.d.ts","./node_modules/@base-ui/react/esm/toast/action/toastaction.d.ts","./node_modules/@base-ui/react/esm/toast/portal/toastportal.d.ts","./node_modules/@base-ui/react/esm/toast/arrow/toastarrow.d.ts","./node_modules/@base-ui/react/esm/toast/index.parts.d.ts","./node_modules/@base-ui/react/esm/toast/index.d.ts","./node_modules/@base-ui/react/esm/toggle/toggle.d.ts","./node_modules/@base-ui/react/esm/toggle/index.d.ts","./node_modules/@base-ui/react/esm/toggle-group/togglegroup.d.ts","./node_modules/@base-ui/react/esm/toggle-group/index.d.ts","./node_modules/@base-ui/react/esm/toolbar/separator/toolbarseparator.d.ts","./node_modules/@base-ui/react/esm/toolbar/root/toolbarroot.d.ts","./node_modules/@base-ui/react/esm/toolbar/group/toolbargroup.d.ts","./node_modules/@base-ui/react/esm/toolbar/button/toolbarbutton.d.ts","./node_modules/@base-ui/react/esm/toolbar/link/toolbarlink.d.ts","./node_modules/@base-ui/react/esm/toolbar/input/toolbarinput.d.ts","./node_modules/@base-ui/react/esm/toolbar/index.parts.d.ts","./node_modules/@base-ui/react/esm/toolbar/index.d.ts","./node_modules/@base-ui/react/esm/tooltip/store/tooltipstore.d.ts","./node_modules/@base-ui/react/esm/tooltip/store/tooltiphandle.d.ts","./node_modules/@base-ui/react/esm/tooltip/root/tooltiproot.d.ts","./node_modules/@base-ui/react/esm/tooltip/trigger/tooltiptrigger.d.ts","./node_modules/@base-ui/react/esm/tooltip/portal/tooltipportal.d.ts","./node_modules/@base-ui/react/esm/tooltip/positioner/tooltippositioner.d.ts","./node_modules/@base-ui/react/esm/tooltip/popup/tooltippopup.d.ts","./node_modules/@base-ui/react/esm/tooltip/arrow/tooltiparrow.d.ts","./node_modules/@base-ui/react/esm/tooltip/provider/tooltipprovider.d.ts","./node_modules/@base-ui/react/esm/tooltip/viewport/tooltipviewport.d.ts","./node_modules/@base-ui/react/esm/tooltip/index.parts.d.ts","./node_modules/@base-ui/react/esm/tooltip/index.d.ts","./node_modules/@base-ui/react/esm/index.d.ts","./node_modules/@base-ui/react/esm/popover/store/popoverstore.d.ts","./node_modules/@base-ui/react/esm/popover/store/popoverhandle.d.ts","./node_modules/@base-ui/react/esm/popover/root/popoverroot.d.ts","./node_modules/@base-ui/react/esm/popover/trigger/popovertrigger.d.ts","./node_modules/@base-ui/react/esm/popover/portal/popoverportal.d.ts","./node_modules/@base-ui/react/esm/popover/positioner/popoverpositioner.d.ts","./node_modules/@base-ui/react/esm/popover/popup/popoverpopup.d.ts","./node_modules/@base-ui/react/esm/popover/arrow/popoverarrow.d.ts","./node_modules/@base-ui/react/esm/popover/backdrop/popoverbackdrop.d.ts","./node_modules/@base-ui/react/esm/popover/title/popovertitle.d.ts","./node_modules/@base-ui/react/esm/popover/description/popoverdescription.d.ts","./node_modules/@base-ui/react/esm/popover/close/popoverclose.d.ts","./node_modules/@base-ui/react/esm/popover/viewport/popoverviewport.d.ts","./node_modules/@base-ui/react/esm/popover/index.parts.d.ts","./node_modules/@base-ui/react/esm/popover/index.d.ts","./components/ui/popover.tsx","./node_modules/lucide-react/dist/lucide-react.d.ts","./components/reui/data-grid/data-grid-column-filter.tsx","./components/ui/dropdown-menu.tsx","./components/reui/data-grid/data-grid-column-header.tsx","./components/reui/data-grid/data-grid-column-visibility.tsx","./components/ui/select.tsx","./components/ui/skeleton.tsx","./components/reui/data-grid/data-grid-pagination.tsx","./components/reui/data-grid/data-grid-scroll-area.tsx","./components/ui/checkbox.tsx","./components/ui/spinner.tsx","./components/reui/data-grid/data-grid-table.tsx","./node_modules/@dnd-kit/utilities/dist/hooks/usecombinedrefs.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useevent.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useisomorphiclayouteffect.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useinterval.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselatestvalue.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/uselazymemo.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/usenoderef.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useprevious.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/useuniqueid.d.ts","./node_modules/@dnd-kit/utilities/dist/hooks/index.d.ts","./node_modules/@dnd-kit/utilities/dist/adjustment.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/types.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/geteventcoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/coordinates/index.d.ts","./node_modules/@dnd-kit/utilities/dist/css.d.ts","./node_modules/@dnd-kit/utilities/dist/event/hasviewportrelativecoordinates.d.ts","./node_modules/@dnd-kit/utilities/dist/event/iskeyboardevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/istouchevent.d.ts","./node_modules/@dnd-kit/utilities/dist/event/index.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/canusedom.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getownerdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/getwindow.d.ts","./node_modules/@dnd-kit/utilities/dist/execution-context/index.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/findfirstfocusablenode.d.ts","./node_modules/@dnd-kit/utilities/dist/focus/index.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isdocument.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/ishtmlelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/isnode.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/issvgelement.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/iswindow.d.ts","./node_modules/@dnd-kit/utilities/dist/type-guards/index.d.ts","./node_modules/@dnd-kit/utilities/dist/types.d.ts","./node_modules/@dnd-kit/utilities/dist/index.d.ts","./node_modules/@dnd-kit/core/dist/types/coordinates.d.ts","./node_modules/@dnd-kit/core/dist/types/direction.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/types.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcenter.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/closestcorners.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/rectintersection.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/pointerwithin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/helpers.d.ts","./node_modules/@dnd-kit/core/dist/utilities/algorithms/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/abstractpointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/pointersensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/pointer/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/usesensors.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/mousesensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/mouse/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/touchsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/touch/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/types.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/keyboardsensor.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/defaults.d.ts","./node_modules/@dnd-kit/core/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/core/dist/sensors/index.d.ts","./node_modules/@dnd-kit/core/dist/types/events.d.ts","./node_modules/@dnd-kit/core/dist/types/other.d.ts","./node_modules/@dnd-kit/core/dist/types/react.d.ts","./node_modules/@dnd-kit/core/dist/types/rect.d.ts","./node_modules/@dnd-kit/core/dist/types/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useautoscroller.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecachednode.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesyntheticlisteners.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usecombineactivators.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedroppablemeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialvalue.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useinitialrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userectdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/useresizeobserver.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usescrolloffsetsdelta.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usesensorsetup.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/userects.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usewindowrect.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/usedragoverlaymeasuring.d.ts","./node_modules/@dnd-kit/core/dist/hooks/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/store/constructors.d.ts","./node_modules/@dnd-kit/core/dist/store/types.d.ts","./node_modules/@dnd-kit/core/dist/store/actions.d.ts","./node_modules/@dnd-kit/core/dist/store/context.d.ts","./node_modules/@dnd-kit/core/dist/store/reducer.d.ts","./node_modules/@dnd-kit/core/dist/store/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/types.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/accessibility.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/restorefocus.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/defaults.d.ts","./node_modules/@dnd-kit/core/dist/components/accessibility/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/constants.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/distancebetweenpoints.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/getrelativetransformorigin.d.ts","./node_modules/@dnd-kit/core/dist/utilities/coordinates/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/adjustscale.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrectdelta.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rectadjustment.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/getwindowclientrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/rect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/rect/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/noop.d.ts","./node_modules/@dnd-kit/core/dist/utilities/other/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableancestors.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollableelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollcoordinates.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolldirectionandspeed.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollelementrect.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrolloffsets.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/getscrollposition.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/documentscrollingelement.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/isscrollable.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/scrollintoviewifneeded.d.ts","./node_modules/@dnd-kit/core/dist/utilities/scroll/index.d.ts","./node_modules/@dnd-kit/core/dist/utilities/index.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/types.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/applymodifiers.d.ts","./node_modules/@dnd-kit/core/dist/modifiers/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/dndcontext.d.ts","./node_modules/@dnd-kit/core/dist/components/dndcontext/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/types.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/context.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitor.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/usedndmonitorprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dndmonitor/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/animationmanager.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/animationmanager/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/nullifiedcontextprovider.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/nullifiedcontextprovider/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/positionedoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/positionedoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/components/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usedropanimation.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/usekey.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/dragoverlay.d.ts","./node_modules/@dnd-kit/core/dist/components/dragoverlay/index.d.ts","./node_modules/@dnd-kit/core/dist/components/index.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedraggable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedndcontext.d.ts","./node_modules/@dnd-kit/core/dist/hooks/usedroppable.d.ts","./node_modules/@dnd-kit/core/dist/hooks/index.d.ts","./node_modules/@dnd-kit/core/dist/index.d.ts","./node_modules/@dnd-kit/modifiers/dist/createsnapmodifier.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttohorizontalaxis.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttoparentelement.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttofirstscrollableancestor.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttoverticalaxis.d.ts","./node_modules/@dnd-kit/modifiers/dist/restricttowindowedges.d.ts","./node_modules/@dnd-kit/modifiers/dist/snapcentertocursor.d.ts","./node_modules/@dnd-kit/modifiers/dist/index.d.ts","./node_modules/@dnd-kit/sortable/dist/types/disabled.d.ts","./node_modules/@dnd-kit/sortable/dist/types/data.d.ts","./node_modules/@dnd-kit/sortable/dist/types/strategies.d.ts","./node_modules/@dnd-kit/sortable/dist/types/type-guard.d.ts","./node_modules/@dnd-kit/sortable/dist/types/index.d.ts","./node_modules/@dnd-kit/sortable/dist/components/sortablecontext.d.ts","./node_modules/@dnd-kit/sortable/dist/components/index.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/types.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/usesortable.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/defaults.d.ts","./node_modules/@dnd-kit/sortable/dist/hooks/index.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/horizontallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/rectswapping.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/verticallistsorting.d.ts","./node_modules/@dnd-kit/sortable/dist/strategies/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/sortablekeyboardcoordinates.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/keyboard/index.d.ts","./node_modules/@dnd-kit/sortable/dist/sensors/index.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arraymove.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/arrayswap.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/getsortedrects.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/isvalidindex.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/itemsequal.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/normalizedisabled.d.ts","./node_modules/@dnd-kit/sortable/dist/utilities/index.d.ts","./node_modules/@dnd-kit/sortable/dist/index.d.ts","./components/reui/data-grid/data-grid-table-dnd-rows.tsx","./components/reui/data-grid/data-grid-table-dnd.tsx","./node_modules/@tanstack/virtual-core/dist/esm/utils.d.ts","./node_modules/@tanstack/virtual-core/dist/esm/index.d.ts","./node_modules/@tanstack/react-virtual/dist/esm/index.d.ts","./components/reui/data-grid/data-grid-table-virtual.tsx","./components/reui/data-grid/index.ts","./node_modules/zod/v4/core/json-schema.d.cts","./node_modules/zod/v4/core/standard-schema.d.cts","./node_modules/zod/v4/core/registries.d.cts","./node_modules/zod/v4/core/to-json-schema.d.cts","./node_modules/zod/v4/core/util.d.cts","./node_modules/zod/v4/core/versions.d.cts","./node_modules/zod/v4/core/schemas.d.cts","./node_modules/zod/v4/core/checks.d.cts","./node_modules/zod/v4/core/errors.d.cts","./node_modules/zod/v4/core/core.d.cts","./node_modules/zod/v4/core/parse.d.cts","./node_modules/zod/v4/core/regexes.d.cts","./node_modules/zod/v4/locales/ar.d.cts","./node_modules/zod/v4/locales/az.d.cts","./node_modules/zod/v4/locales/be.d.cts","./node_modules/zod/v4/locales/bg.d.cts","./node_modules/zod/v4/locales/ca.d.cts","./node_modules/zod/v4/locales/cs.d.cts","./node_modules/zod/v4/locales/da.d.cts","./node_modules/zod/v4/locales/de.d.cts","./node_modules/zod/v4/locales/el.d.cts","./node_modules/zod/v4/locales/en.d.cts","./node_modules/zod/v4/locales/eo.d.cts","./node_modules/zod/v4/locales/es.d.cts","./node_modules/zod/v4/locales/fa.d.cts","./node_modules/zod/v4/locales/fi.d.cts","./node_modules/zod/v4/locales/fr.d.cts","./node_modules/zod/v4/locales/fr-ca.d.cts","./node_modules/zod/v4/locales/he.d.cts","./node_modules/zod/v4/locales/hr.d.cts","./node_modules/zod/v4/locales/hu.d.cts","./node_modules/zod/v4/locales/hy.d.cts","./node_modules/zod/v4/locales/id.d.cts","./node_modules/zod/v4/locales/is.d.cts","./node_modules/zod/v4/locales/it.d.cts","./node_modules/zod/v4/locales/ja.d.cts","./node_modules/zod/v4/locales/ka.d.cts","./node_modules/zod/v4/locales/kh.d.cts","./node_modules/zod/v4/locales/km.d.cts","./node_modules/zod/v4/locales/ko.d.cts","./node_modules/zod/v4/locales/lt.d.cts","./node_modules/zod/v4/locales/mk.d.cts","./node_modules/zod/v4/locales/ms.d.cts","./node_modules/zod/v4/locales/nl.d.cts","./node_modules/zod/v4/locales/no.d.cts","./node_modules/zod/v4/locales/ota.d.cts","./node_modules/zod/v4/locales/ps.d.cts","./node_modules/zod/v4/locales/pl.d.cts","./node_modules/zod/v4/locales/pt.d.cts","./node_modules/zod/v4/locales/ro.d.cts","./node_modules/zod/v4/locales/ru.d.cts","./node_modules/zod/v4/locales/sl.d.cts","./node_modules/zod/v4/locales/sv.d.cts","./node_modules/zod/v4/locales/ta.d.cts","./node_modules/zod/v4/locales/th.d.cts","./node_modules/zod/v4/locales/tr.d.cts","./node_modules/zod/v4/locales/ua.d.cts","./node_modules/zod/v4/locales/uk.d.cts","./node_modules/zod/v4/locales/ur.d.cts","./node_modules/zod/v4/locales/uz.d.cts","./node_modules/zod/v4/locales/vi.d.cts","./node_modules/zod/v4/locales/zh-cn.d.cts","./node_modules/zod/v4/locales/zh-tw.d.cts","./node_modules/zod/v4/locales/yo.d.cts","./node_modules/zod/v4/locales/index.d.cts","./node_modules/zod/v4/core/doc.d.cts","./node_modules/zod/v4/core/api.d.cts","./node_modules/zod/v4/core/json-schema-processors.d.cts","./node_modules/zod/v4/core/json-schema-generator.d.cts","./node_modules/zod/v4/core/index.d.cts","./node_modules/zod/v4/classic/errors.d.cts","./node_modules/zod/v4/classic/parse.d.cts","./node_modules/zod/v4/classic/schemas.d.cts","./node_modules/zod/v4/classic/checks.d.cts","./node_modules/zod/v4/classic/compat.d.cts","./node_modules/zod/v4/classic/from-json-schema.d.cts","./node_modules/zod/v4/classic/iso.d.cts","./node_modules/zod/v4/classic/coerce.d.cts","./node_modules/zod/v4/classic/external.d.cts","./node_modules/zod/index.d.cts","./packages/contracts/dist/servers.d.ts","./lib/data.ts","./entities/server/model/mappers.ts","./hooks/use-file-upload.ts","./hooks/use-mobile.ts","./lib/api-mock.ts","./lib/api.ts","./package.json","./lib/app-version.ts","./lib/backend-url.ts","./lib/gre-endpoint-resolve.ts","./lib/network-map-layout.ts","./lib/map-gre-speed-probe.ts","./lib/route-optimizer-data.ts","./lib/dashboard-internet-path.ts","./lib/dashboard-latency.ts","./lib/ping-probe.ts","./lib/release-commits.ts","./lib/release-manifest.ts","./lib/release-modal-storage.ts","./lib/scheduler-run-snapshot.ts","./lib/scheduler-settings.ts","./lib/sidebar-badges.ts","./lib/bgp/types.ts","./lib/bgp/helpers.ts","./components/ui/button-group.tsx","./components/ui/textarea.tsx","./components/ui/input-group.tsx","./components/ui/kbd.tsx","./components/ui/scroll-area.tsx","./components/ui/tooltip.tsx","./components/reui/filters.tsx","./lib/data-filters/apply-reui-filters.ts","./lib/data-filters/bgp-filter-fields.ts","./lib/data-filters/server-filter-fields.ts","./shared/api/http-client.ts","./packages/contracts/dist/backups.d.ts","./shared/api/backups.ts","./packages/contracts/dist/certificates.d.ts","./shared/api/certificates.ts","./packages/contracts/dist/events.d.ts","./shared/api/events.ts","./shared/api/servers.ts","./shared/api/system-database.ts","./node_modules/next/dist/compiled/@next/font/dist/types.d.ts","./node_modules/next/dist/compiled/@next/font/dist/google/index.d.ts","./node_modules/next/font/google/index.d.ts","./components/theme-provider.tsx","./node_modules/sonner/dist/index.d.mts","./components/ui/sonner.tsx","./app/layout.tsx","./app/page.tsx","./components/ui/sheet.tsx","./components/ui/sidebar.tsx","./components/nav-main.tsx","./lib/data-source.tsx","./lib/evobgp-context.tsx","./components/app-sidebar.tsx","./components/command-palette.tsx","./components/ui/badge.tsx","./components/ui/dialog.tsx","./components/release-notes-modal.tsx","./app/(main)/layout.tsx","./app/(main)/loading.tsx","./components/ui/breadcrumb.tsx","./components/page-header.tsx","./components/ui/card.tsx","./components/ui/collapsible.tsx","./components/flag.tsx","./app/(main)/alerts/page.tsx","./components/data-page-card.tsx","./components/data-page-toolbar.tsx","./components/data-grids/shared/data-grid-shell.tsx","./components/data-grids/shared/data-grid-sort-header.tsx","./components/ui/empty.tsx","./components/empty-state.tsx","./components/data-grids/asns-data-grid.tsx","./components/file-import-dialog.tsx","./app/(main)/asns/page.tsx","./components/data-grids/backups-data-grid.tsx","./components/status-dot.tsx","./components/status-badge.tsx","./components/reui/stepper.tsx","./app/(main)/backups/page.tsx","./components/data-grids/bgp-session-detail.tsx","./components/data-grids/bgp-sessions-data-grid.tsx","./components/ui/alert.tsx","./app/(main)/bgp/page.tsx","./components/data-grids/certificate-expanded-detail.tsx","./components/data-grids/certificates-data-grid.tsx","./app/(main)/certificates/page.tsx","./components/data-grids/communities-data-grid.tsx","./app/(main)/communities/page.tsx","./app/(main)/containers/page.tsx","./components/sparkline.tsx","./components/dashboard/latency-chart.tsx","./components/dashboard/bandwidth-chart.tsx","./components/dashboard/internet-path-map.tsx","./components/data-grids/compact-data-grid.tsx","./components/data-grids/dashboard-active-probes-data-grid.tsx","./app/(main)/dashboard/page.tsx","./components/data-grids/snapshot-data-grid.tsx","./components/data-grids/data-collection-scheduler-data-grid.tsx","./app/(main)/data-collection/page.tsx","./components/data-grids/domains-data-grid.tsx","./app/(main)/domains/page.tsx","./components/data-grids/filters-data-grid.tsx","./components/ui/tabs.tsx","./app/(main)/filters/page.tsx","./components/data-grids/firewall-rules-data-grid.tsx","./components/data-grids/firewall-scenario-rules-data-grid.tsx","./app/(main)/firewall/page.tsx","./components/data-grids/gre-tunnels-data-grid.tsx","./components/data-grids/gre-pools-data-grid.tsx","./app/(main)/gre/page.tsx","./components/data-grids/ip-ranges-data-grid.tsx","./app/(main)/ip-ranges/page.tsx","./app/(main)/network-map/page.tsx","./components/data-grids/ospf-neighbors-data-grid.tsx","./components/data-grids/ospf-routes-data-grid.tsx","./components/data-grids/ospf-bfd-data-grid.tsx","./app/(main)/ospf/page.tsx","./components/data-grids/probes-schedule-data-grid.tsx","./components/data-grids/probes-speed-probes-data-grid.tsx","./app/(main)/probes/page.tsx","./components/data-grids/recursive-routes-data-grid.tsx","./app/(main)/recursive-routes/page.tsx","./app/(main)/releases/page.tsx","./components/data-grids/route-optimizer-wan-matrix-data-grid.tsx","./components/data-grids/route-optimizer-full-routes-data-grid.tsx","./components/data-grids/route-optimizer-comm-recs-data-grid.tsx","./components/data-grids/route-optimizer-ospf-preview-data-grid.tsx","./app/(main)/route-optimizer/page.tsx","./components/data-grids/server-expanded-detail.tsx","./components/data-grids/servers-data-grid.tsx","./app/(main)/servers/page.tsx","./components/data-grids/subusers-data-grid.tsx","./components/data-grids/settings-access-summary-data-grid.tsx","./app/(main)/settings/page.tsx","./app/(main)/terminal/page.tsx","./app/(main)/traffic/page.tsx","./components/data-grids/uptime-resources-data-grid.tsx","./components/data-grids/uptime-speed-history-data-grid.tsx","./app/(main)/uptime/page.tsx","./components/data-grids/vxlan-data-grid.tsx","./app/(main)/vxlan/page.tsx","./components/data-grids/wireguard-peers-detail.tsx","./components/data-grids/wireguard-data-grid.tsx","./app/(main)/wireguard/page.tsx","./components/data-table.tsx","./components/nav-projects.tsx","./components/ui/avatar.tsx","./components/nav-user.tsx","./components/placeholder-page.tsx","./components/team-switcher.tsx","./components/reui/alert.tsx","./components/reui/autocomplete.tsx","./components/reui/frame.tsx","./components/reui/number-field.tsx","./components/reui/sortable.tsx","./components/reui/timeline.tsx","./node_modules/@radix-ui/react-context/dist/index.d.mts","./node_modules/@radix-ui/react-primitive/dist/index.d.mts","./node_modules/@radix-ui/react-dismissable-layer/dist/index.d.mts","./node_modules/@radix-ui/react-focus-scope/dist/index.d.mts","./node_modules/@radix-ui/react-portal/dist/index.d.mts","./node_modules/@radix-ui/react-dialog/dist/index.d.mts","./node_modules/cmdk/dist/index.d.ts","./components/ui/command.tsx","./components/ui/table.tsx","./.next/types/cache-life.d.ts","./.next/types/validator.ts","./.next/dev/types/cache-life.d.ts","./.next/dev/types/routes.d.ts","./.next/dev/types/validator.ts","./node_modules/@types/better-sqlite3/index.d.ts","./node_modules/@types/estree/index.d.ts","./node_modules/@types/json-schema/index.d.ts","./node_modules/@types/json5/index.d.ts","./node_modules/@types/set-cookie-parser/index.d.ts","./node_modules/@types/statuses/index.d.ts","./node_modules/@types/validate-npm-package-name/index.d.ts"],"fileIdsList":[[97,144,484,485,486,487,1431],[97,144,1431,1433],[97,144,227,525,528,536,537,1311,1312,1323,1330,1339,1344,1348,1351,1353,1354,1361,1364,1366,1369,1372,1375,1377,1378,1382,1385,1387,1388,1393,1396,1399,1400,1401,1404,1406,1409,1431,1433,1434],[97,144,484,485,486,487,1433],[97,144,227,525,528,531,536,537,1311,1312,1323,1330,1339,1344,1348,1351,1353,1354,1361,1364,1366,1369,1372,1375,1377,1378,1382,1385,1387,1388,1393,1396,1399,1400,1401,1404,1406,1409,1431,1433],[85,97,144,227,576,589,604,613,625,980,1296,1309,1313,1316,1326,1327,1328,1329,1431,1433],[85,97,144,227,576,613,980,1262,1309,1316,1317,1326,1331,1332,1337,1338,1431,1433],[85,97,144,227,576,604,613,625,980,1262,1263,1298,1303,1309,1313,1316,1326,1327,1331,1332,1338,1340,1342,1343,1431,1433],[85,97,144,227,576,613,625,980,1284,1292,1293,1294,1316,1326,1327,1331,1332,1346,1347,1431,1433],[85,97,144,227,576,604,613,625,980,1262,1263,1299,1300,1303,1309,1313,1316,1326,1327,1331,1338,1343,1350,1431,1433],[85,97,144,227,576,613,625,980,1262,1316,1317,1326,1327,1331,1352,1431,1433],[85,97,144,227,576,613,980,982,1262,1313,1326,1327,1329,1431,1433],[85,97,144,227,508,518,576,613,980,1262,1274,1275,1276,1296,1301,1302,1316,1326,1327,1329,1331,1341,1342,1355,1356,1357,1358,1360,1431,1433],[85,97,144,227,508,576,589,604,613,625,980,1281,1282,1296,1316,1320,1326,1327,1328,1331,1347,1362,1363,1431,1433],[85,97,144,227,576,613,980,1262,1309,1316,1317,1326,1331,1332,1338,1365,1431,1433],[85,97,144,227,576,589,613,625,980,1262,1291,1296,1309,1313,1316,1317,1326,1327,1329,1331,1336,1341,1367,1368,1431,1433],[85,97,144,227,576,604,613,625,980,982,1262,1313,1326,1327,1331,1370,1371,1431,1433],[85,97,144,227,576,604,613,625,980,982,1262,1296,1309,1313,1316,1326,1327,1329,1331,1373,1374,1431,1433],[85,97,144,227,576,613,980,1262,1309,1316,1317,1326,1331,1332,1338,1376,1431,1433],[97,144,227,1314,1316,1317,1318,1319,1322,1431,1433],[97,144,227,986,1431,1433],[85,97,144,227,508,576,613,980,1262,1271,1272,1273,1296,1316,1326,1329,1341,1342,1431,1433],[85,97,144,227,576,589,613,980,1274,1309,1316,1326,1327,1329,1331,1379,1380,1381,1431,1433],[85,97,144,227,576,604,613,625,980,1262,1296,1316,1326,1327,1331,1383,1384,1431,1433],[85,97,144,227,576,604,613,625,980,1262,1296,1313,1316,1326,1327,1329,1341,1386,1431,1433],[97,144,227,508,576,613,980,1269,1278,1279,1326,1327,1431,1433],[85,97,144,227,508,576,604,613,625,980,1262,1274,1296,1316,1326,1327,1329,1331,1389,1390,1391,1392,1431,1433],[85,97,144,227,576,604,613,625,980,1261,1262,1263,1292,1293,1295,1303,1313,1316,1326,1327,1329,1331,1332,1343,1395,1431,1433],[85,97,144,227,508,576,589,604,613,625,980,1262,1274,1296,1304,1309,1313,1316,1317,1326,1327,1329,1331,1338,1341,1397,1398,1431,1433],[85,97,144,227,576,613,980,1262,1316,1326,1329,1431,1433],[85,97,144,227,576,613,980,1296,1316,1326,1327,1329,1341,1355,1431,1433],[85,97,144,227,576,604,613,625,980,1262,1277,1296,1313,1316,1326,1327,1328,1329,1331,1341,1347,1355,1402,1403,1431,1433],[85,97,144,227,576,613,980,1262,1313,1326,1327,1331,1332,1405,1431,1433],[85,97,144,227,576,613,980,1262,1313,1326,1327,1331,1332,1408,1431,1433],[97,144,227,525,535,1431,1433],[97,144,227,526,529,1291,1307,1308,1310,1431,1433],[97,144,227,518,1431,1433],[85,97,144,227,980,1269,1283,1308,1314,1315,1316,1317,1431,1433],[85,97,144,227,518,576,980,1431,1433],[97,144,227,1431,1433],[85,97,144,227,576,980,1275,1327,1329,1342,1431,1433],[85,97,144,227,573,577,578,980,1262,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,613,980,1262,1333,1334,1336,1431,1433],[85,97,144,227,576,980,1284,1285,1431,1433],[85,97,144,227,573,576,577,578,980,1284,1285,1333,1334,1336,1345,1431,1433],[97,144,227,576,1299,1431,1433],[85,97,144,227,573,576,577,578,980,1262,1299,1329,1333,1334,1336,1349,1431,1433],[85,97,144,227,573,576,577,578,980,1333,1334,1336,1431,1433],[85,97,144,227,573,577,578,980,1333,1334,1336,1431,1433],[85,97,144,227,576,980,1262,1329,1341,1342,1355,1359,1431,1433],[85,97,144,227,573,576,577,578,604,613,625,980,1282,1320,1333,1431,1433],[85,97,144,227,573,576,577,578,613,980,1262,1291,1329,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,604,613,980,982,1262,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,980,1333,1370,1431,1433],[85,97,144,227,573,576,577,578,613,980,982,1262,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,613,980,982,1262,1329,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,604,980,1262,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,613,980,1329,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,613,980,1274,1333,1334,1431,1433],[85,97,144,227,573,576,577,578,613,980,1274,1329,1333,1334,1431,1433],[85,97,144,227,573,576,577,578,980,1274,1329,1333,1431,1433],[97,144,227,576,613,980,1262,1395,1431,1433],[85,97,144,227,573,576,577,578,613,980,982,1262,1329,1333,1334,1336,1342,1394,1431,1433],[85,97,144,227,576,1262,1359,1431,1433],[97,144,227,577,1431,1433],[85,97,144,227,573,577,578,1180,1431,1433],[97,144,227,573,576,577,980,1431,1433],[97,144,227,576,1281,1320,1359,1431,1433],[85,97,144,227,573,576,577,578,604,980,1262,1329,1333,1334,1336,1431,1433],[85,97,144,227,573,576,577,578,980,1262,1329,1333,1334,1336,1341,1355,1431,1433],[85,97,144,227,573,576,577,578,980,1262,1329,1333,1334,1431,1433],[85,97,144,227,573,576,577,578,613,980,982,1262,1329,1333,1334,1336,1407,1431,1433],[97,144,227,576,980,1262,1431,1433],[85,97,144,227,576,1327,1431,1433],[85,97,144,227,576,604,625,980,1292,1431,1433],[85,97,144,227,573,577,578,980,1331,1332,1333,1334,1336,1431,1433],[97,144,227,576,1335,1431,1433],[85,97,144,227,576,613,980,1264,1309,1321,1431,1433],[97,144,227,590,1431,1433],[97,144,227,576,600,1431,1433],[97,144,227,591,601,602,603,1431,1433],[97,144,227,576,1431,1433],[97,144,227,508,518,1314,1431,1433],[97,144,227,980,982,1314,1431,1433],[97,144,227,980,982,1314,1412,1431,1433],[97,144,227,589,1314,1325,1431,1433],[97,144,227,980,1326,1327,1431,1433],[85,97,144,227,508,613,1269,1278,1279,1280,1320,1321,1431,1433],[97,144,227,576,580,1431,1433],[97,144,227,576,580,723,980,1290,1431,1433],[97,144,227,576,580,606,609,1431,1433],[85,97,144,227,573,576,577,589,610,613,625,979,980,1431,1433],[85,97,144,227,573,576,577,613,980,982,1431,1433],[85,97,144,227,573,577,982,1431,1433],[85,97,144,227,576,577,613,980,985,986,1431,1433],[85,97,144,227,576,577,886,1431,1433],[85,97,144,227,573,576,577,613,980,991,1024,1138,1146,1173,1431,1433],[85,97,144,227,573,577,613,980,991,1024,1138,1173,1431,1433],[85,97,144,227,573,576,577,990,991,1178,1431,1433],[85,97,144,227,573,576,577,580,989,990,1431,1433],[85,97,144,227,573,576,577,1431,1433],[97,144,227,577,981,983,984,987,988,991,1174,1175,1179,1431,1433],[85,97,144,227,576,580,609,613,625,980,982,1286,1288,1289,1290,1291,1431,1433],[85,97,144,227,576,580,581,847,980,1431,1433],[85,97,144,195,197,227,576,606,609,1024,1138,1173,1431,1433],[85,97,144,227,576,1431,1433],[85,97,144,227,576,606,609,1431,1433],[97,144,227,576,1262,1341,1431,1433],[97,144,227,576,1262,1431,1433],[85,97,144,227,980,982,1314,1431,1433],[85,97,144,227,518,1431,1433],[85,97,144,227,576,580,1431,1433],[85,97,144,227,576,729,1431,1433],[85,97,144,227,576,606,609,980,1431,1433],[97,144,227,576,580,589,606,609,1431,1433],[97,144,227,576,580,612,1431,1433],[97,144,227,576,733,980,1431,1433],[97,144,227,739,1431,1433],[85,97,144,227,576,980,1288,1321,1428,1431,1433],[85,97,144,227,576,613,787,980,1431,1433],[85,97,144,227,576,778,980,1431,1433],[85,97,144,227,576,580,581,589,1431,1433],[85,97,144,227,576,580,613,625,1287,1431,1433],[85,97,144,227,576,624,1431,1433],[85,97,144,227,576,978,1431,1433],[85,97,144,227,576,886,1431,1433],[85,97,144,227,576,906,980,1431,1433],[97,144,227,576,588,1431,1433],[85,97,144,227,576,580,589,606,609,613,625,980,986,1265,1291,1313,1431,1433],[97,144,227,1308,1309,1431,1433],[97,144,227,576,980,1431,1433],[85,97,144,227,576,599,1431,1433],[97,144,227,576,580,923,1431,1433],[97,144,227,576,962,1431,1433],[97,144,227,1261,1262,1431,1433],[85,97,144,227,1431,1433],[97,144,227,1268,1431,1433],[97,144,227,1284,1431,1433],[97,144,227,1262,1272,1273,1274,1431,1433],[97,144,227,1262,1431,1433],[97,144,227,1292,1431,1433],[97,144,227,1262,1292,1431,1433],[85,97,144,227,1270,1431,1433],[85,97,144,227,1262,1316,1431,1433],[97,144,227,1262,1271,1272,1431,1433],[97,144,227,1262,1271,1431,1433],[97,144,227,525,533,1431,1433],[97,144,156,165,227,1431,1433],[97,144,227,574,575,1431,1433],[97,144,529,530,531,1431,1433],[97,144,227,529,533,1431,1433],[85,97,144,586,675,1431,1433],[97,144,672,675,676,677,678,679,1431,1433],[97,144,672,675,676,677,678,1431,1433],[85,97,144,583,584,586,672,674,1431,1433],[85,97,144,586,615,672,675,1431,1433],[85,97,144,583,584,586,1431,1433],[97,144,683,1431,1433],[97,144,684,685,686,687,688,689,690,691,692,694,1431,1433],[97,144,683,684,685,686,687,688,689,690,691,692,693,1431,1433],[85,97,144,227,584,681,683,1431,1433],[97,144,698,699,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,720,722,1431,1433],[97,144,587,698,699,701,702,703,704,705,706,707,708,709,710,711,712,713,714,715,716,717,718,720,721,1431,1433],[85,97,144,586,595,700,1431,1433],[85,97,144,586,1431,1433],[85,97,144,697,1431,1433],[85,97,144,1431,1433],[85,97,144,586,724,1431,1433],[85,97,144,586,615,724,725,1431,1433],[97,144,724,726,727,728,1431,1433],[97,144,724,726,727,1431,1433],[97,144,611,1431,1433],[85,97,144,583,584,586,595,1431,1433],[97,144,734,1431,1433],[97,144,730,731,732,1431,1433],[97,144,730,731,1431,1433],[85,97,144,586,615,730,1431,1433],[97,144,673,736,737,738,1431,1433],[97,144,673,736,737,1431,1433],[85,97,144,586,615,673,1431,1433],[85,97,144,583,584,586,674,1431,1433],[85,97,144,615,673,1431,1433],[85,97,144,586,673,1431,1433],[85,97,144,586,700,1431,1433],[85,97,144,586,615,1431,1433],[97,144,702,704,705,706,707,708,709,710,711,712,713,714,716,717,718,720,740,741,742,743,744,745,746,747,748,749,750,1431,1433],[97,144,588,702,704,705,706,707,708,709,710,711,712,713,714,716,717,718,720,721,740,741,742,743,744,745,746,747,748,749,1431,1433],[85,97,144,586,595,1431,1433],[85,97,144,586,615,636,700,1431,1433],[85,97,144,667,1431,1433],[85,97,144,583,584,696,1431,1433],[97,144,719,1431,1433],[97,144,752,753,760,761,762,763,764,765,766,767,768,769,770,771,773,776,779,780,781,1431,1433],[97,144,587,752,753,760,761,762,763,764,765,766,767,768,769,770,771,773,776,779,780,1431,1433],[97,144,227,585,759,778,1431,1433],[85,97,144,779,1431,1433],[97,144,783,784,1431,1433],[97,144,783,1431,1433],[97,144,681,685,686,687,688,689,690,691,692,786,1431,1433],[97,144,681,683,685,686,687,688,689,690,691,692,1431,1433],[85,97,144,586,615,636,1431,1433],[85,97,144,227,583,584,671,683,1431,1433],[97,144,682,1431,1433],[85,97,144,615,634,636,645,667,671,681,963,1431,1433],[85,97,144,586,683,1431,1433],[85,97,144,788,1431,1433],[97,144,789,790,1431,1433],[97,144,788,789,1431,1433],[97,144,792,793,794,795,796,797,799,801,802,803,804,805,806,807,808,1431,1433],[97,144,683,792,793,794,795,796,797,799,801,802,803,804,805,806,807,1431,1433],[85,97,144,586,615,636,800,1431,1433],[85,97,144,227,583,584,671,683,800,1431,1433],[85,97,144,798,799,1431,1433],[85,97,144,586,798,800,1431,1433],[85,97,144,586,595,615,1431,1433],[97,144,595,614,616,617,618,619,620,621,1431,1433],[97,144,595,614,616,617,618,619,620,1431,1433],[85,97,144,586,594,1431,1433],[85,97,144,595,615,1431,1433],[97,144,810,811,812,1431,1433],[97,144,810,811,1431,1433],[85,97,144,662,1431,1433],[85,97,144,636,644,662,1431,1433],[85,97,144,586,647,1431,1433],[85,97,144,584,615,634,662,671,1431,1433],[85,97,144,644,662,1431,1433],[97,144,662,1431,1433],[97,144,583,662,1431,1433],[97,144,644,662,1431,1433],[97,144,584,645,662,1431,1433],[97,144,652,662,1431,1433],[85,97,144,586,644,652,662,1431,1433],[85,97,144,642,662,1431,1433],[97,144,585,634,645,671,1431,1433],[97,144,641,643,644,646,648,649,650,651,653,654,655,656,657,658,659,660,661,662,663,664,665,666,1431,1433],[97,144,652,1431,1433],[85,97,144,584,641,643,644,645,646,648,649,650,651,652,653,654,655,656,657,658,659,660,661,663,667,1431,1433],[85,97,144,583,584,586,592,1431,1433],[97,144,593,1431,1433],[97,144,585,588,594,599,606,609,612,622,624,680,695,723,729,733,735,739,751,778,782,785,787,791,809,813,815,822,837,847,852,865,872,876,878,886,906,916,923,938,940,942,950,962,978,1431,1433],[97,144,623,1431,1433],[85,97,144,586,622,1431,1433],[97,144,583,1431,1433],[85,97,144,593,595,1431,1433],[97,144,582,1431,1433],[85,97,144,585,1431,1433],[85,97,144,586,607,1431,1433],[85,97,144,586,759,1431,1433],[97,144,752,753,759,760,761,762,763,764,765,766,767,768,769,770,771,773,774,775,776,777,1431,1433],[97,144,587,752,753,758,759,760,761,762,763,764,765,766,767,768,769,770,771,773,774,775,776,1431,1433],[85,97,144,227,583,584,671,754,755,756,757,758,1431,1433],[85,97,144,754,759,1431,1433],[97,144,754,1431,1433],[85,97,144,586,615,634,636,644,645,667,671,759,778,1431,1433],[97,144,227,759,772,1431,1433],[85,97,144,754,1431,1433],[85,97,144,586,758,1431,1433],[97,144,814,1431,1433],[85,97,144,759,1431,1433],[97,144,605,1431,1433],[97,144,816,817,818,819,820,821,1431,1433],[97,144,816,817,818,819,820,1431,1433],[85,97,144,586,816,1431,1433],[97,144,823,824,825,826,827,828,829,830,831,832,833,834,835,836,1431,1433],[97,144,823,824,825,826,827,828,829,830,831,832,833,834,835,1431,1433],[85,97,144,586,615,700,1431,1433],[85,97,144,586,839,1431,1433],[97,144,839,840,841,842,843,844,845,846,1431,1433],[97,144,839,840,841,842,843,844,845,1431,1433],[85,97,144,583,584,586,595,838,1431,1433],[97,144,849,850,851,1431,1433],[97,144,587,849,850,1431,1433],[85,97,144,586,849,1431,1433],[85,97,144,583,584,586,595,848,1431,1433],[97,144,966,967,968,969,970,971,972,973,974,975,976,977,1431,1433],[97,144,965,966,967,968,969,970,971,972,973,974,975,976,1431,1433],[85,97,144,227,583,584,671,965,1431,1433],[97,144,964,1431,1433],[85,97,144,615,634,635,636,645,667,671,963,966,978,1431,1433],[85,97,144,586,965,1431,1433],[97,144,855,857,858,859,860,861,862,863,864,1431,1433],[97,144,854,855,857,858,859,860,861,862,863,1431,1433],[85,97,144,856,1431,1433],[85,97,144,227,583,584,671,854,1431,1433],[97,144,853,1431,1433],[85,97,144,615,634,645,667,671,855,963,1431,1433],[85,97,144,586,854,1431,1433],[97,144,866,867,868,869,870,871,1431,1433],[97,144,866,867,868,869,870,1431,1433],[85,97,144,586,866,1431,1433],[97,144,877,1431,1433],[97,144,873,874,875,1431,1433],[97,144,873,874,1431,1433],[85,97,144,586,879,1431,1433],[97,144,879,880,881,882,883,884,885,1431,1433],[97,144,879,880,881,882,883,884,1431,1433],[97,144,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,905,1431,1433],[97,144,587,887,888,889,890,891,892,893,894,895,896,897,898,899,900,901,902,903,904,1431,1433],[97,144,587,1431,1433],[85,97,144,586,907,1431,1433],[97,144,907,908,909,910,911,913,914,915,1431,1433],[97,144,907,908,909,910,911,913,914,1431,1433],[85,97,144,586,907,912,1431,1433],[97,144,596,597,598,1431,1433],[97,144,596,597,1431,1433],[85,97,144,583,585,586,595,1431,1433],[85,97,144,586,596,1431,1433],[97,144,917,918,919,920,921,922,1431,1433],[97,144,917,918,919,920,921,1431,1433],[85,97,144,586,917,918,1431,1433],[85,97,144,586,918,1431,1433],[85,97,144,586,615,917,918,1431,1433],[85,97,144,583,584,586,917,1431,1433],[97,144,925,1431,1433],[97,144,924,925,926,927,928,929,930,931,932,933,934,935,936,937,1431,1433],[97,144,924,925,926,927,928,929,930,931,932,933,934,935,936,1431,1433],[85,97,144,586,700,925,1431,1433],[85,97,144,926,1431,1433],[85,97,144,586,615,925,1431,1433],[85,97,144,924,1431,1433],[97,144,941,1431,1433],[97,144,939,1431,1433],[85,97,144,586,944,1431,1433],[97,144,943,944,945,946,947,948,949,1431,1433],[97,144,586,943,944,945,946,947,948,1431,1433],[85,97,144,586,588,1431,1433],[97,144,953,954,955,956,957,958,959,960,961,1431,1433],[97,144,952,953,954,955,956,957,958,959,960,1431,1433],[85,97,144,227,583,584,671,952,1431,1433],[97,144,951,1431,1433],[85,97,144,615,634,645,667,671,953,962,963,1431,1433],[85,97,144,586,952,1431,1433],[85,97,144,584,1431,1433],[97,144,586,608,1431,1433],[97,144,668,669,670,1431,1433],[85,97,144,615,634,669,1431,1433],[97,144,586,615,645,667,668,1431,1433],[85,97,144,637,667,1431,1433],[97,144,626,1431,1433],[97,144,627,1431,1433],[97,144,627,628,630,631,632,633,1431,1433],[97,144,630,1431,1433],[85,97,144,227,630,1431,1433],[97,144,629,630,1431,1433],[85,97,144,1079,1431,1433],[97,144,1081,1431,1433],[97,144,1079,1431,1433],[97,144,1079,1080,1082,1083,1431,1433],[97,144,1078,1431,1433],[85,97,144,1024,1048,1053,1072,1084,1109,1112,1113,1431,1433],[97,144,1113,1114,1431,1433],[97,144,1053,1072,1431,1433],[85,97,144,1116,1431,1433],[97,144,1116,1117,1118,1119,1431,1433],[97,144,1053,1431,1433],[97,144,1116,1431,1433],[85,97,144,1053,1431,1433],[97,144,1121,1431,1433],[97,144,1122,1124,1126,1431,1433],[97,144,1123,1431,1433],[97,144,1125,1431,1433],[85,97,144,1024,1053,1431,1433],[85,97,144,1112,1127,1130,1431,1433],[97,144,1128,1129,1431,1433],[97,144,1024,1053,1078,1115,1431,1433],[97,144,1130,1131,1431,1433],[97,144,1084,1115,1120,1132,1431,1433],[97,144,1072,1134,1135,1136,1431,1433],[85,97,144,1078,1431,1433],[85,97,144,1024,1053,1072,1078,1431,1433],[85,97,144,1053,1078,1431,1433],[97,144,1054,1055,1056,1057,1058,1059,1060,1061,1062,1063,1064,1065,1066,1067,1068,1069,1070,1071,1431,1433],[97,144,1053,1078,1431,1433],[97,144,1048,1056,1431,1433],[97,144,1053,1074,1431,1433],[97,144,1003,1053,1431,1433],[97,144,1024,1431,1433],[97,144,1048,1431,1433],[97,144,1138,1431,1433],[97,144,1048,1053,1078,1109,1112,1133,1137,1431,1433],[97,144,1024,1110,1431,1433],[97,144,1110,1111,1431,1433],[97,144,1024,1053,1078,1431,1433],[97,144,1036,1037,1038,1039,1041,1043,1047,1431,1433],[97,144,1044,1431,1433],[97,144,1044,1045,1046,1431,1433],[97,144,1037,1044,1431,1433],[97,144,1037,1053,1431,1433],[97,144,1040,1431,1433],[85,97,144,1036,1037,1431,1433],[97,144,1034,1035,1431,1433],[85,97,144,1034,1037,1431,1433],[97,144,1042,1431,1433],[85,97,144,1033,1036,1053,1078,1431,1433],[97,144,1037,1431,1433],[85,97,144,1074,1431,1433],[97,144,1074,1075,1076,1077,1431,1433],[97,144,1074,1075,1431,1433],[85,97,144,1024,1033,1053,1072,1073,1075,1133,1431,1433],[97,144,1025,1033,1048,1053,1078,1431,1433],[97,144,1025,1026,1049,1050,1051,1052,1431,1433],[85,97,144,1024,1431,1433],[97,144,1027,1431,1433],[97,144,1027,1053,1431,1433],[97,144,1027,1028,1029,1030,1031,1032,1431,1433],[97,144,1085,1086,1087,1431,1433],[97,144,1033,1088,1095,1097,1108,1431,1433],[97,144,1096,1431,1433],[97,144,1024,1053,1431,1433],[97,144,1089,1090,1091,1092,1093,1094,1431,1433],[97,144,1052,1431,1433],[97,144,1098,1099,1100,1101,1102,1103,1104,1105,1106,1107,1431,1433],[97,144,1139,1140,1141,1142,1143,1144,1145,1431,1433],[97,144,1152,1431,1433],[85,97,144,1138,1151,1431,1433],[97,144,1154,1431,1433],[97,144,1154,1155,1156,1431,1433],[97,144,1024,1138,1431,1433],[85,97,144,1024,1072,1138,1151,1154,1431,1433],[97,144,1151,1153,1157,1162,1165,1172,1431,1433],[97,144,1164,1431,1433],[97,144,1163,1431,1433],[97,144,1151,1431,1433],[97,144,1158,1159,1160,1161,1431,1433],[97,144,1147,1148,1149,1150,1431,1433],[97,144,1138,1148,1431,1433],[97,144,1166,1167,1168,1169,1170,1171,1431,1433],[97,144,1003,1431,1433],[97,144,1003,1004,1431,1433],[97,144,1007,1008,1009,1431,1433],[97,144,1011,1012,1013,1431,1433],[97,144,1015,1431,1433],[97,144,992,993,994,995,996,997,998,999,1000,1431,1433],[97,144,1001,1002,1005,1006,1010,1014,1016,1022,1023,1431,1433],[97,144,1017,1018,1019,1020,1021,1431,1433],[97,144,637,1431,1433],[97,144,638,639,1431,1433],[85,97,144,640,1431,1433],[85,97,144,1422,1423,1424,1425,1426,1431,1433],[85,97,144,1423,1431,1433],[85,89,97,144,193,194,195,196,197,479,524,1431,1433],[85,97,144,572,1431,1433],[97,144,1177,1431,1433],[97,144,553,1431,1433],[97,144,538,561,1431,1433],[97,144,561,1431,1433],[97,144,561,572,1431,1433],[97,144,547,561,572,1431,1433],[97,144,552,561,572,1431,1433],[97,144,542,561,1431,1433],[97,144,550,561,572,1431,1433],[97,144,548,1431,1433],[97,144,538,539,540,541,542,543,544,545,546,547,548,549,550,551,552,553,554,555,556,557,558,559,560,561,562,563,564,565,566,567,568,569,570,571,1431,1433],[97,144,551,1431,1433],[97,144,538,539,540,541,542,543,544,545,546,548,549,551,553,554,555,556,557,558,559,560,1431,1433],[97,144,1176,1431,1433],[97,144,192,1431,1433],[97,141,144,1431,1433],[97,143,144,1431,1433],[144,1431,1433],[97,144,149,177,1431,1433],[97,144,145,150,155,163,174,185,1431,1433],[97,144,145,146,155,163,1431,1433],[92,93,94,97,144,1431,1433],[97,144,147,186,1431,1433],[97,144,148,149,156,164,1431,1433],[97,144,149,174,182,1431,1433],[97,144,150,152,155,163,1431,1433],[97,143,144,151,1431,1433],[97,144,152,153,1431,1433],[97,144,154,155,1431,1433],[97,143,144,155,1431,1433],[97,144,155,156,157,174,185,1431,1433],[97,144,155,156,157,170,174,177,1431,1433],[97,144,152,155,158,163,174,185,1431,1433],[97,144,155,156,158,159,163,174,182,185,1431,1433],[97,144,158,160,174,182,185,1431,1433],[95,96,97,98,99,100,101,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,1431,1433],[97,144,155,161,1431,1433],[97,144,162,185,190,1431,1433],[97,144,152,155,163,174,1431,1433],[97,144,164,1431,1433],[97,144,165,1431,1433],[97,143,144,166,1431,1433],[97,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,1431,1433],[97,144,168,1431,1433],[97,144,169,1431,1433],[97,144,155,170,171,1431,1433],[97,144,170,172,186,188,1431,1433],[97,144,155,174,175,177,1431,1433],[97,144,176,177,1431,1433],[97,144,174,175,1431,1433],[97,144,177,1431,1433],[97,144,178,1431,1433],[97,141,144,174,179,1431,1433],[97,144,155,180,181,1431,1433],[97,144,180,181,1431,1433],[97,144,149,163,174,182,1431,1433],[97,144,183,1431,1433],[97,144,163,184,1431,1433],[97,144,158,169,185,1431,1433],[97,144,149,186,1431,1433],[97,144,174,187,1431,1433],[97,144,162,188,1431,1433],[97,144,189,1431,1433],[97,139,144,1431,1433],[97,139,144,155,157,166,174,177,185,188,190,1431,1433],[97,144,174,191,1431,1433],[85,89,97,144,193,194,195,197,479,524,1423,1431,1433],[85,89,97,144,193,194,195,196,460,479,524,1423,1431,1433],[85,89,97,144,193,194,196,197,479,524,1423,1431,1433],[85,97,144,197,460,461,1431,1433],[85,97,144,197,460,1431,1433],[85,89,97,144,194,195,196,197,479,524,1423,1431,1433],[85,89,97,144,193,195,196,197,479,524,1423,1431,1433],[83,84,97,144,1431,1433],[97,144,158,192,1431,1433],[97,144,574,579,1431,1433],[97,144,574,1431,1433],[85,97,144,1427,1431,1433],[97,144,482,1431,1433],[97,144,484,485,486,487,1431,1433],[97,144,430,493,494,1431,1433],[97,144,202,203,205,217,241,356,367,475,1431,1433],[97,144,205,236,237,238,240,475,1431,1433],[97,144,205,373,375,377,378,380,475,477,1431,1433],[97,144,205,239,276,475,1431,1433],[97,144,203,205,216,217,223,229,234,355,356,357,366,475,477,1431,1433],[97,144,475,1431,1433],[97,144,212,218,237,257,352,1431,1433],[97,144,205,1431,1433],[97,144,198,212,218,1431,1433],[97,144,384,1431,1433],[97,144,381,382,384,1431,1433],[97,144,381,383,475,1431,1433],[97,144,158,257,454,472,1431,1433],[97,144,158,328,331,347,352,472,1431,1433],[97,144,158,300,472,1431,1433],[97,144,360,1431,1433],[97,144,359,360,361,1431,1433],[97,144,359,1431,1433],[91,97,144,158,198,205,217,223,229,235,237,241,242,255,256,323,353,354,367,475,479,1431,1433],[97,144,202,205,239,276,373,374,379,475,527,1431,1433],[97,144,239,527,1431,1433],[97,144,202,256,425,475,527,1431,1433],[97,144,527,1431,1433],[97,144,205,239,240,527,1431,1433],[97,144,376,527,1431,1433],[97,144,242,355,358,365,1431,1433],[85,97,144,430,1431,1433],[97,144,169,212,227,1431,1433],[97,144,212,227,1431,1433],[85,97,144,297,1431,1433],[85,97,144,218,227,430,1431,1433],[97,144,212,283,297,298,509,516,1431,1433],[97,144,282,510,511,512,513,515,1431,1433],[97,144,333,1431,1433],[97,144,333,334,1431,1433],[97,144,216,218,285,286,1431,1433],[97,144,218,292,293,1431,1433],[97,144,218,287,295,1431,1433],[97,144,292,1431,1433],[97,144,210,218,285,286,287,288,289,290,291,292,295,1431,1433],[97,144,218,285,292,293,294,296,1431,1433],[97,144,218,286,288,289,1431,1433],[97,144,286,288,291,293,1431,1433],[97,144,514,1431,1433],[97,144,218,1431,1433],[85,97,144,206,503,1431,1433],[85,97,144,185,1431,1433],[85,97,144,239,274,1431,1433],[85,97,144,239,367,1431,1433],[97,144,272,277,1431,1433],[85,97,144,273,481,1431,1433],[97,144,1305,1431,1433],[85,89,97,144,158,193,194,195,196,197,479,523,1423,1431,1433],[97,144,158,218,1431,1433],[97,144,158,217,222,303,320,362,363,367,422,424,475,476,1431,1433],[97,144,255,364,1431,1433],[97,144,479,1431,1433],[97,144,204,1431,1433],[85,97,144,209,212,427,443,445,1431,1433],[97,144,169,212,427,442,443,444,526,1431,1433],[97,144,436,437,438,439,440,441,1431,1433],[97,144,438,1431,1433],[97,144,442,1431,1433],[97,144,227,391,392,394,1431,1433],[85,97,144,218,385,386,387,388,393,1431,1433],[97,144,391,393,1431,1433],[97,144,389,1431,1433],[97,144,390,1431,1433],[85,97,144,227,273,481,1431,1433],[85,97,144,227,480,481,1431,1433],[85,97,144,227,481,1431,1433],[97,144,320,321,1431,1433],[97,144,321,1431,1433],[97,144,158,476,481,1431,1433],[97,144,350,1431,1433],[97,143,144,349,1431,1433],[97,144,212,218,224,226,328,341,345,347,424,427,464,465,472,476,1431,1433],[97,144,218,267,289,1431,1433],[97,144,328,339,342,347,1431,1433],[85,97,144,209,212,328,331,347,350,384,431,432,433,434,435,446,447,448,449,450,451,452,453,527,1431,1433],[97,144,209,212,237,328,335,336,337,340,341,1431,1433],[97,144,174,218,237,339,346,427,428,472,1431,1433],[97,144,343,1431,1433],[97,144,158,169,206,218,222,232,264,265,268,320,323,388,422,423,464,475,476,477,479,527,1431,1433],[97,144,209,210,212,1431,1433],[97,144,328,1431,1433],[97,143,144,237,264,265,322,323,324,325,326,327,476,1431,1433],[97,144,347,1431,1433],[97,143,144,211,212,222,226,262,328,335,336,337,338,339,342,343,344,345,346,465,1431,1433],[97,144,158,262,263,335,476,477,1431,1433],[97,144,237,265,320,323,328,424,476,1431,1433],[97,144,158,475,477,1431,1433],[97,144,158,174,472,476,477,1431,1433],[97,144,158,169,198,212,217,224,226,229,232,239,259,264,265,266,267,268,303,304,306,309,311,314,315,316,317,319,367,422,424,472,475,476,477,1431,1433],[97,144,158,174,1431,1433],[97,144,205,206,207,235,472,473,474,479,481,527,1431,1433],[97,144,202,203,475,1431,1433],[97,144,396,1431,1433],[97,144,158,174,185,214,380,384,385,386,387,388,394,395,527,1431,1433],[97,144,169,185,198,212,214,226,229,265,304,309,319,320,373,400,401,402,408,411,412,422,424,472,475,1431,1433],[97,144,229,235,242,255,265,323,475,1431,1433],[97,144,158,185,206,217,226,265,406,472,475,1431,1433],[97,144,426,1431,1433],[97,144,158,396,409,410,419,1431,1433],[97,144,472,475,1431,1433],[97,144,325,465,1431,1433],[97,144,226,264,367,481,1431,1433],[97,144,158,169,204,309,369,373,402,408,411,414,472,1431,1433],[97,144,158,242,255,373,415,1431,1433],[97,144,205,266,367,417,475,477,1431,1433],[97,144,158,185,388,475,1431,1433],[97,144,158,239,266,367,368,369,378,396,416,418,475,1431,1433],[91,97,144,158,264,421,479,481,1431,1433],[97,144,318,422,1431,1433],[97,144,158,169,212,215,217,218,224,226,232,241,242,255,265,268,304,306,316,319,320,367,400,401,402,403,405,407,422,424,472,481,1431,1433],[97,144,158,174,242,408,413,419,472,1431,1433],[97,144,245,246,247,248,249,250,251,252,253,254,1431,1433],[97,144,259,310,1431,1433],[97,144,312,1431,1433],[97,144,310,1431,1433],[97,144,312,313,1431,1433],[97,144,158,216,217,218,222,223,476,1431,1433],[97,144,158,169,204,206,224,228,264,267,268,302,422,472,477,479,481,1431,1433],[97,144,158,169,185,208,215,216,226,228,265,420,465,471,476,1431,1433],[97,144,335,1431,1433],[97,144,336,1431,1433],[97,144,218,229,464,1431,1433],[97,144,337,1431,1433],[97,144,211,1431,1433],[97,144,213,225,1431,1433],[97,144,158,213,217,224,1431,1433],[97,144,220,225,1431,1433],[97,144,221,1431,1433],[97,144,213,214,1431,1433],[97,144,213,269,1431,1433],[97,144,213,1431,1433],[97,144,215,259,308,1431,1433],[97,144,307,1431,1433],[97,144,212,214,215,1431,1433],[97,144,215,305,1431,1433],[97,144,212,214,1431,1433],[97,144,264,367,1431,1433],[97,144,464,1431,1433],[97,144,158,185,224,226,230,264,367,421,424,427,428,429,455,456,459,463,465,472,476,1431,1433],[97,144,278,281,283,284,297,298,1431,1433],[85,97,144,195,197,227,457,458,1431,1433],[85,97,144,195,197,227,457,458,462,1431,1433],[97,144,351,1431,1433],[97,144,237,258,263,264,328,329,330,331,332,334,347,348,350,353,421,424,475,477,1431,1433],[97,144,297,1431,1433],[97,144,158,302,472,1431,1433],[97,144,302,1431,1433],[97,144,158,224,270,299,301,303,421,472,479,481,1431,1433],[97,144,278,279,280,281,283,284,297,298,480,1431,1433],[91,97,144,158,169,185,213,214,226,232,264,265,268,367,419,420,422,472,475,476,479,1431,1433],[97,144,209,212,219,1431,1433],[97,144,263,265,397,400,1431,1433],[97,144,263,398,466,467,468,469,470,1431,1433],[97,144,158,259,475,1431,1433],[97,144,158,1431,1433],[97,144,262,347,1431,1433],[97,144,261,1431,1433],[97,144,263,316,1431,1433],[97,144,260,262,475,1431,1433],[97,144,158,208,263,397,398,399,472,475,476,1431,1433],[85,97,144,212,218,296,1431,1433],[85,97,144,210,1431,1433],[97,144,200,201,1431,1433],[85,97,144,206,1431,1433],[85,97,144,212,282,1431,1433],[85,91,97,144,264,268,479,481,1431,1433],[97,144,206,503,504,1431,1433],[85,97,144,277,1431,1433],[85,97,144,169,185,204,271,273,275,276,481,1431,1433],[97,144,212,239,476,1431,1433],[97,144,212,404,1431,1433],[85,97,144,156,158,169,202,204,277,375,479,480,1431,1433],[85,97,144,193,194,195,196,197,479,524,1423,1431,1433],[85,86,87,88,89,97,144,1431,1433],[97,144,149,1431,1433],[97,144,370,371,372,1431,1433],[97,144,370,1431,1433],[85,89,97,144,158,160,169,192,193,194,195,196,197,198,204,232,237,414,442,477,478,481,524,1423,1431,1433],[97,144,489,1431,1433],[97,144,491,1431,1433],[97,144,495,1431,1433],[97,144,1306,1431,1433],[97,144,497,1431,1433],[97,144,499,500,501,1431,1433],[97,144,505,1431,1433],[90,97,144,483,488,490,492,496,498,502,506,508,518,519,521,525,526,527,528,1431,1433],[97,144,507,1431,1433],[97,144,517,1431,1433],[97,144,273,1431,1433],[97,144,520,1431,1433],[97,143,144,263,397,398,400,466,467,469,470,522,524,1431,1433],[97,144,174,192,1431,1433],[97,111,115,144,185,1431,1433],[97,111,144,174,185,1431,1433],[97,106,144,1431,1433],[97,108,111,144,182,185,1431,1433],[97,144,163,182,1431,1433],[97,106,144,192,1431,1433],[97,108,111,144,163,185,1431,1433],[97,103,104,107,110,144,155,174,185,1431,1433],[97,111,118,144,1431,1433],[97,103,109,144,1431,1433],[97,111,132,133,144,1431,1433],[97,107,111,144,177,185,192,1431,1433],[97,132,144,192,1431,1433],[97,105,106,144,192,1431,1433],[97,111,144,1431,1433],[97,105,106,107,108,109,110,111,112,113,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,133,134,135,136,137,138,144,1431,1433],[97,111,126,144,1431,1433],[97,111,118,119,144,1431,1433],[97,109,111,119,120,144,1431,1433],[97,110,144,1431,1433],[97,103,106,111,144,1431,1433],[97,111,115,119,120,144,1431,1433],[97,115,144,1431,1433],[97,109,111,114,144,185,1431,1433],[97,103,108,111,118,144,1431,1433],[97,144,174,1431,1433],[97,106,111,132,144,190,192,1431,1433],[97,144,1259,1431,1433],[97,144,1250,1431,1433],[97,144,1250,1253,1431,1433],[97,144,1185,1245,1248,1250,1251,1252,1253,1254,1255,1256,1257,1258,1431,1433],[97,144,1181,1183,1253,1431,1433],[97,144,1250,1251,1431,1433],[97,144,1182,1250,1252,1431,1433],[97,144,1183,1185,1187,1188,1189,1190,1431,1433],[97,144,1185,1187,1189,1190,1431,1433],[97,144,1185,1187,1189,1431,1433],[97,144,1182,1185,1187,1188,1190,1431,1433],[97,144,1181,1183,1184,1185,1186,1187,1188,1189,1190,1191,1192,1245,1246,1247,1248,1249,1431,1433],[97,144,1181,1183,1184,1187,1431,1433],[97,144,1183,1184,1187,1431,1433],[97,144,1187,1190,1431,1433],[97,144,1181,1182,1184,1185,1186,1188,1189,1190,1431,1433],[97,144,1181,1182,1183,1187,1250,1431,1433],[97,144,1187,1188,1189,1190,1431,1433],[97,144,1189,1431,1433],[97,144,1193,1194,1195,1196,1197,1198,1199,1200,1201,1202,1203,1204,1205,1206,1207,1208,1209,1210,1211,1212,1213,1214,1215,1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1431,1433],[97,144,1260,1431,1433],[97,144,227,1296,1297,1431,1433],[97,144,227,1296,1299,1431,1433],[97,144,227,1296,1301,1431,1433],[97,144,227,1270,1431,1433],[97,144,227,1261,1296,1431,1433],[97,144,227,1270,1296,1431,1433]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"27bdc30a0e32783366a5abeda841bc22757c1797de8681bbe81fbc735eeb1c10","impliedFormat":1},{"version":"8fd575e12870e9944c7e1d62e1f5a73fcf23dd8d3a321f2a2c74c20d022283fe","impliedFormat":1},{"version":"2ab096661c711e4a81cc464fa1e6feb929a54f5340b46b0a07ac6bbf857471f0","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"df83c2a6c73228b625b0beb6669c7ee2a09c914637e2d35170723ad49c0f5cd4","affectsGlobalScope":true,"impliedFormat":1},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e3c06ea092138bf9fa5e874a1fdbc9d54805d074bee1de31b99a11e2fec239d","affectsGlobalScope":true,"impliedFormat":1},{"version":"87dc0f382502f5bbce5129bdc0aea21e19a3abbc19259e0b43ae038a9fc4e326","affectsGlobalScope":true,"impliedFormat":1},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true,"impliedFormat":1},{"version":"56e4ed5aab5f5920980066a9409bfaf53e6d21d3f8d020c17e4de584d29600ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ece9f17b3866cc077099c73f4983bddbcb1dc7ddb943227f1ec070f529dedd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a6282c8827e4b9a95f4bf4f5c205673ada31b982f50572d27103df8ceb8013c","affectsGlobalScope":true,"impliedFormat":1},{"version":"1c9319a09485199c1f7b0498f2988d6d2249793ef67edda49d1e584746be9032","affectsGlobalScope":true,"impliedFormat":1},{"version":"e3a2a0cee0f03ffdde24d89660eba2685bfbdeae955a6c67e8c4c9fd28928eeb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811c71eee4aa0ac5f7adf713323a5c41b0cf6c4e17367a34fbce379e12bbf0a4","affectsGlobalScope":true,"impliedFormat":1},{"version":"51ad4c928303041605b4d7ae32e0c1ee387d43a24cd6f1ebf4a2699e1076d4fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"60037901da1a425516449b9a20073aa03386cce92f7a1fd902d7602be3a7c2e9","affectsGlobalScope":true,"impliedFormat":1},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true,"impliedFormat":1},{"version":"22adec94ef7047a6c9d1af3cb96be87a335908bf9ef386ae9fd50eeb37f44c47","affectsGlobalScope":true,"impliedFormat":1},{"version":"196cb558a13d4533a5163286f30b0509ce0210e4b316c56c38d4c0fd2fb38405","affectsGlobalScope":true,"impliedFormat":1},{"version":"73f78680d4c08509933daf80947902f6ff41b6230f94dd002ae372620adb0f60","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5239f5c01bcfa9cd32f37c496cf19c61d69d37e48be9de612b541aac915805b","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e29f41b158de217f94cb9676bf9cbd0cd9b5a46e1985141ed36e075c52bf6ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac51dd7d31333793807a6abaa5ae168512b6131bd41d9c5b98477fc3b7800f9f","impliedFormat":1},{"version":"dc0a7f107690ee5cd8afc8dbf05c4df78085471ce16bdd9881642ec738bc81fe","impliedFormat":1},{"version":"acd8fd5090ac73902278889c38336ff3f48af6ba03aa665eb34a75e7ba1dccc4","impliedFormat":1},{"version":"d6258883868fb2680d2ca96bc8b1352cab69874581493e6d52680c5ffecdb6cc","impliedFormat":1},{"version":"1b61d259de5350f8b1e5db06290d31eaebebc6baafd5f79d314b5af9256d7153","impliedFormat":1},{"version":"f258e3960f324a956fc76a3d3d9e964fff2244ff5859dcc6ce5951e5413ca826","impliedFormat":1},{"version":"643f7232d07bf75e15bd8f658f664d6183a0efaca5eb84b48201c7671a266979","impliedFormat":1},{"version":"21da358700a3893281ce0c517a7a30cbd46be020d9f0c3f2834d0a8ad1f5fc75","impliedFormat":1},{"version":"70521b6ab0dcba37539e5303104f29b721bfb2940b2776da4cc818c07e1fefc1","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"d153a11543fd884b596587ccd97aebbeed950b26933ee000f94009f1ab142848","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"ba481bca06f37d3f2c137ce343c7d5937029b2468f8e26111f3c9d9963d6568d","affectsGlobalScope":true,"impliedFormat":1},{"version":"6d9ef24f9a22a88e3e9b3b3d8c40ab1ddb0853f1bfbd5c843c37800138437b61","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e9c23ba78aabc2e0a27033f18737a6df754067731e69dc5f52823957d60a4b6","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"e2677634fe27e87348825bb041651e22d50a613e2fdf6a4a3ade971d71bac37e","impliedFormat":1},{"version":"7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","impliedFormat":1},{"version":"8c0bcd6c6b67b4b503c11e91a1fb91522ed585900eab2ab1f61bba7d7caa9d6f","impliedFormat":1},{"version":"8cd19276b6590b3ebbeeb030ac271871b9ed0afc3074ac88a94ed2449174b776","affectsGlobalScope":true,"impliedFormat":1},{"version":"696eb8d28f5949b87d894b26dc97318ef944c794a9a4e4f62360cd1d1958014b","impliedFormat":1},{"version":"3f8fa3061bd7402970b399300880d55257953ee6d3cd408722cb9ac20126460c","impliedFormat":1},{"version":"35ec8b6760fd7138bbf5809b84551e31028fb2ba7b6dc91d95d098bf212ca8b4","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"68bd56c92c2bd7d2339457eb84d63e7de3bd56a69b25f3576e1568d21a162398","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e93b123f7c2944969d291b35fed2af79a6e9e27fdd5faa99748a51c07c02d28","impliedFormat":1},{"version":"9d19808c8c291a9010a6c788e8532a2da70f811adb431c97520803e0ec649991","impliedFormat":1},{"version":"87aad3dd9752067dc875cfaa466fc44246451c0c560b820796bdd528e29bef40","impliedFormat":1},{"version":"4aacb0dd020eeaef65426153686cc639a78ec2885dc72ad220be1d25f1a439df","impliedFormat":1},{"version":"f0bd7e6d931657b59605c44112eaf8b980ba7f957a5051ed21cb93d978cf2f45","impliedFormat":1},{"version":"8db0ae9cb14d9955b14c214f34dae1b9ef2baee2fe4ce794a4cd3ac2531e3255","affectsGlobalScope":true,"impliedFormat":1},{"version":"15fc6f7512c86810273af28f224251a5a879e4261b4d4c7e532abfbfc3983134","impliedFormat":1},{"version":"58adba1a8ab2d10b54dc1dced4e41f4e7c9772cbbac40939c0dc8ce2cdb1d442","impliedFormat":1},{"version":"641942a78f9063caa5d6b777c99304b7d1dc7328076038c6d94d8a0b81fc95c1","impliedFormat":1},{"version":"714435130b9015fae551788df2a88038471a5a11eb471f27c4ede86552842bc9","impliedFormat":1},{"version":"855cd5f7eb396f5f1ab1bc0f8580339bff77b68a770f84c6b254e319bbfd1ac7","impliedFormat":1},{"version":"5650cf3dace09e7c25d384e3e6b818b938f68f4e8de96f52d9c5a1b3db068e86","impliedFormat":1},{"version":"1354ca5c38bd3fd3836a68e0f7c9f91f172582ba30ab15bb8c075891b91502b7","affectsGlobalScope":true,"impliedFormat":1},{"version":"7e20d899c28ca26a2a7afc98beaa69e63ff7fba0a8bc47b4e3bf3ede5e09e424","impliedFormat":1},{"version":"2d2fcaab481b31a5882065c7951255703ddbe1c0e507af56ea42d79ac3911201","impliedFormat":1},{"version":"a192fe8ec33f75edbc8d8f3ed79f768dfae11ff5735e7fe52bfa69956e46d78d","impliedFormat":1},{"version":"ca867399f7db82df981d6915bcbb2d81131d7d1ef683bc782b59f71dda59bc85","affectsGlobalScope":true,"impliedFormat":1},{"version":"372413016d17d804e1d139418aca0c68e47a83fb6669490857f4b318de8cccb3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e043a1bc8fbf2a255bccf9bf27e0f1caf916c3b0518ea34aa72357c0afd42ec","impliedFormat":1},{"version":"b4f70ec656a11d570e1a9edce07d118cd58d9760239e2ece99306ee9dfe61d02","impliedFormat":1},{"version":"3bc2f1e2c95c04048212c569ed38e338873f6a8593930cf5a7ef24ffb38fc3b6","impliedFormat":1},{"version":"6e70e9570e98aae2b825b533aa6292b6abd542e8d9f6e9475e88e1d7ba17c866","impliedFormat":1},{"version":"f9d9d753d430ed050dc1bf2667a1bab711ccbb1c1507183d794cc195a5b085cc","impliedFormat":1},{"version":"9eece5e586312581ccd106d4853e861aaaa1a39f8e3ea672b8c3847eedd12f6e","impliedFormat":1},{"version":"085f552d005479e2e6a7311cdbbe5d8c55c497b4d19274285df161ee9684cd9c","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"007faacc9268357caa21d24169f3f3f2497af3e9241308df2d89f6e6d9bb3f2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"74cf591a0f63db318651e0e04cb55f8791385f86e987a67fd4d2eaab8191f730","impliedFormat":1},{"version":"5eab9b3dc9b34f185417342436ec3f106898da5f4801992d8ff38ab3aff346b5","impliedFormat":1},{"version":"12ed4559eba17cd977aa0db658d25c4047067444b51acfdcbf38470630642b23","affectsGlobalScope":true,"impliedFormat":1},{"version":"f3ffabc95802521e1e4bcba4c88d8615176dc6e09111d920c7a213bdda6e1d65","impliedFormat":1},{"version":"809821b8a065e3234a55b3a9d7846231ed18d66dd749f2494c66288d890daf7f","impliedFormat":1},{"version":"ae56f65caf3be91108707bd8dfbccc2a57a91feb5daabf7165a06a945545ed26","impliedFormat":1},{"version":"a136d5de521da20f31631a0a96bf712370779d1c05b7015d7019a9b2a0446ca9","impliedFormat":1},{"version":"c3b41e74b9a84b88b1dca61ec39eee25c0dbc8e7d519ba11bb070918cfacf656","affectsGlobalScope":true,"impliedFormat":1},{"version":"4737a9dc24d0e68b734e6cfbcea0c15a2cfafeb493485e27905f7856988c6b29","affectsGlobalScope":true,"impliedFormat":1},{"version":"36d8d3e7506b631c9582c251a2c0b8a28855af3f76719b12b534c6edf952748d","impliedFormat":1},{"version":"1ca69210cc42729e7ca97d3a9ad48f2e9cb0042bada4075b588ae5387debd318","impliedFormat":1},{"version":"f5ebe66baaf7c552cfa59d75f2bfba679f329204847db3cec385acda245e574e","impliedFormat":1},{"version":"ed59add13139f84da271cafd32e2171876b0a0af2f798d0c663e8eeb867732cf","affectsGlobalScope":true,"impliedFormat":1},{"version":"b7c5e2ea4a9749097c347454805e933844ed207b6eefec6b7cfd418b5f5f7b28","impliedFormat":1},{"version":"b1810689b76fd473bd12cc9ee219f8e62f54a7d08019a235d07424afbf074d25","impliedFormat":1},{"version":"2beff543f6e9a9701df88daeee3cdd70a34b4a1c11cb4c734472195a5cb2af54","impliedFormat":1},{"version":"2e07abf27aa06353d46f4448c0bbac73431f6065eef7113128a5cd804d0c384d","impliedFormat":1},{"version":"be1cc4d94ea60cbe567bc29ed479d42587bf1e6cba490f123d329976b0fe4ee5","impliedFormat":1},{"version":"42bc0e1a903408137c3df2b06dfd7e402cdab5bbfa5fcfb871b22ebfdb30bd0b","impliedFormat":1},{"version":"9894dafe342b976d251aac58e616ac6df8db91fb9d98934ff9dd103e9e82578f","impliedFormat":1},{"version":"413df52d4ea14472c2fa5bee62f7a40abd1eb49be0b9722ee01ee4e52e63beb2","impliedFormat":1},{"version":"db6d2d9daad8a6d83f281af12ce4355a20b9a3e71b82b9f57cddcca0a8964a96","impliedFormat":1},{"version":"446a50749b24d14deac6f8843e057a6355dd6437d1fac4f9e5ce4a5071f34bff","impliedFormat":1},{"version":"182e9fcbe08ac7c012e0a6e2b5798b4352470be29a64fdc114d23c2bab7d5106","impliedFormat":1},{"version":"2f4e6b4d39426a1b85ecf4bdeb9dddbf4d9b3397d95d8555d46f925c9519ec7d","impliedFormat":1},{"version":"78a2869ad0cbf3f9045dda08c0d4562b7e1b2bfe07b19e0db072f5c3c56e9584","impliedFormat":1},{"version":"89d5d28d4f57e000b836ac273079be1b75710e28ce14750d081fb420d37e2ca5","impliedFormat":1},{"version":"fd4e24ccff3966390600d7f5d6aa1fed5a512e92ada735ea5fbc933d313ad3d3","impliedFormat":1},{"version":"b7cddfe1aa6b86b5fad3c9ccb30d05b3ccb165aebbf112f48d2d8a5f69dd98b1","impliedFormat":1},{"version":"a86f82d646a739041d6702101afa82dcb935c416dd93cbca7fd754fd0282ce1f","impliedFormat":1},{"version":"ad0d1d75d129b1c80f911be438d6b61bfa8703930a8ff2be2f0e1f8a91841c64","impliedFormat":1},{"version":"bd2c7ada3dee03653d3f601011d30072194bc3970cd93208f9588fbdc0c69347","impliedFormat":1},{"version":"e480da45d32313e7174b265674da504f075f59ef326852f0c5a5d863b438ae85","impliedFormat":1},{"version":"ad54850f61fcf5d014e11be80d2f46fea9265cfa7e77456da876f7833ef81769","impliedFormat":1},{"version":"6f7c9e8bd2b5b6a080b07080065f94900bd3c7e5ebbd3047bc33fcce2fab1dd8","impliedFormat":1},{"version":"3e7efde639c6a6c3edb9847b3f61e308bf7a69685b92f665048c45132f51c218","impliedFormat":1},{"version":"df45ca1176e6ac211eae7ddf51336dc075c5314bc5c253651bae639defd5eec5","impliedFormat":1},{"version":"8a0e762ceb20c7e72504feef83d709468a70af4abccb304f32d6b9bac1129b2c","impliedFormat":1},{"version":"da5950ee2a90721df6f3fba45f5d05308f7e4c35835392215dd2cd404505e2de","impliedFormat":1},{"version":"ce75b1aebb33d510ff28af960a9221410a3eaf7f18fc5f21f9404075fba77256","impliedFormat":1},{"version":"f42d5fed19610d485c646a0c430e768115567d078c7fc855c57b0c578b3d6cd3","impliedFormat":1},{"version":"ee8df1cb8d0faaca4013a1b442e99130769ce06f438d18d510fed95890067563","impliedFormat":1},{"version":"d5630f2ad9b4541e5ce891648121022f9412ecdca1820baa1f0104f70fd7eff7","impliedFormat":1},{"version":"4d15375ab13497104bc8fe56fdef2b5fd6853f29255737d23a33fa306ff7fd69","impliedFormat":1},{"version":"2cd3fc1d0d6a1e85baffd2d4f50f5efb192b5446eef567e97c94765402f0aad4","impliedFormat":1},{"version":"e4cbf2f1e89ecccaddd2c045e600ae41b732295953fb06247c7dcbc2d281ed30","impliedFormat":1},{"version":"6dcedaef57dff0d79a05ab0ab602cde74db803d1e765468bf91263786a383e1b","impliedFormat":1},{"version":"8c1697d90c394a6fd955b98eae01238eff628e129b987a68aea10f898a48e7da","impliedFormat":1},{"version":"7580e62139cb2b44a0270c8d01abcbfcba2819a02514a527342447fa69b34ef1","impliedFormat":1},{"version":"42c169fb8c2d42f4f668c624a9a11e719d5d07dacbebb63cbcf7ef365b0a75b3","impliedFormat":1},{"version":"f374cb24e93e7798c4d9e83ff872fa52d2cdb36306392b840a6ddf46cb925cb6","impliedFormat":1},{"version":"d10d63718e1646c2279e3b33831f82c60e31f622b2b7020f1196409ca4c09242","impliedFormat":1},{"version":"106c6025f1d99fd468fd8bf6e5bda724e11e5905a4076c5d29790b6c3745e50c","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"148679c6d0f449210a96e7d2e562d589e56fcde87f843a92808b3ff103f1a774","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"02436d7e9ead85e09a2f8e27d5f47d9464bced31738dec138ca735390815c9f0","impliedFormat":1},{"version":"f8d5ff8eafd37499f2b6a98659dd9b45a321de186b8db6b6142faed0fea3de77","impliedFormat":1},{"version":"c86fe861cf1b4c46a0fb7d74dffe596cf679a2e5e8b1456881313170f092e3fa","impliedFormat":1},{"version":"a22dd55aa4d39906252000ab8e8a1b83b195eef7f4274eb51e457c1f11cf6580","impliedFormat":1},{"version":"540cc83ab772a2c6bc509fe1354f314825b5dba3669efdfbe4693ecd3048e34f","impliedFormat":1},{"version":"121b0696021ab885c570bbeb331be8ad82c6efe2f3b93a6e63874901bebc13e3","impliedFormat":1},{"version":"612d9da66bb046a9c1e2e8d026245ded881fc4b9f98cbfae714415d57ee0ae0b","impliedFormat":1},{"version":"32c2ad9494dad5d11b0564a619fee18f388db6c1e9e2cd3c360b3122549691eb","impliedFormat":1},{"version":"6c301d40aec56a74ec7bd7324e31a728dadf9bfba3e96def02938d3d973534ec","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"aa14cee20aa0db79f8df101fc027d929aec10feb5b8a8da3b9af3895d05b7ba2","impliedFormat":1},{"version":"493c700ac3bd317177b2eb913805c87fe60d4e8af4fb39c41f04ba81fae7e170","impliedFormat":1},{"version":"aeb554d876c6b8c818da2e118d8b11e1e559adbe6bf606cc9a611c1b6c09f670","impliedFormat":1},{"version":"acf5a2ac47b59ca07afa9abbd2b31d001bf7448b041927befae2ea5b1951d9f9","impliedFormat":1},{"version":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881","impliedFormat":1},{"version":"d71291eff1e19d8762a908ba947e891af44749f3a2cbc5bd2ec4b72f72ea795f","impliedFormat":1},{"version":"c0480e03db4b816dff2682b347c95f2177699525c54e7e6f6aa8ded890b76be7","impliedFormat":1},{"version":"25a5f6fd3a2243c859eddc99ab5fba11d970af2fe7a5df9c32b7668f76f97b01","impliedFormat":1},{"version":"8d207e1f9d2c30d6f77dfa693f3827c3fbf0d89240297e10bdfe1041d433df68","impliedFormat":1},{"version":"b620391fe8060cf9bedc176a4d01366e6574d7a71e0ac0ab344a4e76576fcbb8","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"2652448ac55a2010a1f71dd141f828b682298d39728f9871e1cdf8696ef443fd","impliedFormat":1},{"version":"d682336018141807fb602709e2d95a192828fcb8d5ba06dda3833a8ea98f69e3","impliedFormat":1},{"version":"6124e973eab8c52cabf3c07575204efc1784aca6b0a30c79eb85fe240a857efa","impliedFormat":1},{"version":"0d891735a21edc75df51f3eb995e18149e119d1ce22fd40db2b260c5960b914e","impliedFormat":1},{"version":"3b414b99a73171e1c4b7b7714e26b87d6c5cb03d200352da5342ab4088a54c85","impliedFormat":1},{"version":"4fbd3116e00ed3a6410499924b6403cc9367fdca303e34838129b328058ede40","impliedFormat":1},{"version":"9c82171d836c47486074e4ca8e059735bf97b205e70b196535b5efd40cbe1bc5","impliedFormat":1},{"version":"8c70ddc0c22d85e56011d49fddfaae3405eb53d47b59327b9dd589e82df672e7","impliedFormat":1},{"version":"2f9c89cbb29d362290531b48880a4024f258c6033aaeb7e59fbc62db26819650","impliedFormat":1},{"version":"a365c4d3bed3be4e4e20793c999c51f5cd7e6792322f14650949d827fbcd170f","impliedFormat":1},{"version":"c5426dbfc1cf90532f66965a7aa8c1136a78d4d0f96d8180ecbfc11d7722f1a5","impliedFormat":1},{"version":"65a15fc47900787c0bd18b603afb98d33ede930bed1798fc984d5ebb78b26cf9","impliedFormat":1},{"version":"9d202701f6e0744adb6314d03d2eb8fc994798fc83d91b691b75b07626a69801","impliedFormat":1},{"version":"de9d2df7663e64e3a91bf495f315a7577e23ba088f2949d5ce9ec96f44fba37d","impliedFormat":1},{"version":"c7af78a2ea7cb1cd009cfb5bdb48cd0b03dad3b54f6da7aab615c2e9e9d570c5","impliedFormat":1},{"version":"1ee45496b5f8bdee6f7abc233355898e5bf9bd51255db65f5ff7ede617ca0027","impliedFormat":1},{"version":"273782b8454e78f6a8b30d2cfbf6860499c930595095fcc1689637115f0eddda","affectsGlobalScope":true,"impliedFormat":1},{"version":"3fbdd025f9d4d820414417eeb4107ffa0078d454a033b506e22d3a23bc3d9c41","affectsGlobalScope":true,"impliedFormat":1},{"version":"dba114fb6a32b355a9cfc26ca2276834d72fe0e94cd2c3494005547025015369","impliedFormat":1},{"version":"a8f8e6ab2fa07b45251f403548b78eaf2022f3c2254df3dc186cb2671fe4996d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fa6c12a7c0f6b84d512f200690bfc74819e99efae69e4c95c4cd30f6884c526e","impliedFormat":1},{"version":"f1c32f9ce9c497da4dc215c3bc84b722ea02497d35f9134db3bb40a8d918b92b","impliedFormat":1},{"version":"b73c319af2cc3ef8f6421308a250f328836531ea3761823b4cabbd133047aefa","affectsGlobalScope":true,"impliedFormat":1},{"version":"e433b0337b8106909e7953015e8fa3f2d30797cea27141d1c5b135365bb975a6","impliedFormat":1},{"version":"9f9bb6755a8ce32d656ffa4763a8144aa4f274d6b69b59d7c32811031467216e","impliedFormat":1},{"version":"5c32bdfbd2d65e8fffbb9fbda04d7165e9181b08dad61154961852366deb7540","impliedFormat":1},{"version":"ddff7fc6edbdc5163a09e22bf8df7bef75f75369ebd7ecea95ba55c4386e2441","impliedFormat":1},{"version":"0c05e9842ec4f8b7bfebfd3ca61604bb8c914ba8da9b5337c4f25da427a005f2","impliedFormat":1},{"version":"faed7a5153215dbd6ebe76dfdcc0af0cfe760f7362bed43284be544308b114cf","impliedFormat":1},{"version":"7029e566b8df176f703fb59fd437a38670c7a0e02c58b2d66dfb5b2e2b2defdb","impliedFormat":1},{"version":"7f2aa4d4989a82530aaac3f72b3dceca90e9c25bee0b1a327e8a08a1262435ad","impliedFormat":1},{"version":"d96b39301d0ded3f1a27b47759676a33a02f6f5049bfcbde81e533fd10f50dcb","impliedFormat":1},{"version":"e9f147ecca73d9346a4c073432843c159ccbe50bdcb678a78f6da10eae2cecf4","impliedFormat":1},{"version":"de061f7d72bd65c06fc1419f841dfdcb29a8e22fe6fa527d1e6eb20b897d4de0","impliedFormat":1},{"version":"663beafc2446079574570cba86e9b15f986f908ddb1b01274509970126fee945","impliedFormat":1},{"version":"a3102887d5058bf4cb5b37fa6964c09e9527c42053b3b5c642b89878620748de","impliedFormat":1},{"version":"0aaaa1727edd29673d85c9b26d7ca4d54e5407a48586903c51b48b7f7d196f61","impliedFormat":1},{"version":"d35bca0b261bff02635758c48e8ab99c61c420d0dfabbcf467e847171d876b7d","impliedFormat":1},{"version":"3bc12c40d90c342ff88a3d876996c555ed5cbee5fe8c3308a240b321f401ee46","impliedFormat":1},{"version":"ba130768aae855a5477e9e148e5c879548e6e7ccbcc56fd1934c8a18ea5b7569","impliedFormat":1},{"version":"2e4f37ffe8862b14d8e24ae8763daaa8340c0df0b859d9a9733def0eee7562d9","impliedFormat":1},{"version":"d38530db0601215d6d767f280e3a3c54b2a83b709e8d9001acb6f61c67e965fc","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"b499af2054a037a162b3b72cd886f48bbf32a3502c865c6e29fac7d2ab3ce0b5","impliedFormat":1},{"version":"b83cb14474fa60c5f3ec660146b97d122f0735627f80d82dd03e8caa39b4388c","impliedFormat":1},{"version":"48773ca557b0319c2ee62ae249cf52a81709e8be139920d6479a66274de7c4ed","impliedFormat":1},{"version":"7274fbffbd7c9589d8d0ffba68157237afd5cecff1e99881ea3399127e60572f","impliedFormat":1},{"version":"b73cbf0a72c8800cf8f96a9acfe94f3ad32ca71342a8908b8ae484d61113f647","impliedFormat":1},{"version":"bae6dd176832f6423966647382c0d7ba9e63f8c167522f09a982f086cd4e8b23","impliedFormat":1},{"version":"20865ac316b8893c1a0cc383ccfc1801443fbcc2a7255be166cf90d03fac88c9","impliedFormat":1},{"version":"c9958eb32126a3843deedda8c22fb97024aa5d6dd588b90af2d7f2bfac540f23","impliedFormat":1},{"version":"461d0ad8ae5f2ff981778af912ba71b37a8426a33301daa00f21c6ccb27f8156","impliedFormat":1},{"version":"e927c2c13c4eaf0a7f17e6022eee8519eb29ef42c4c13a31e81a611ab8c95577","impliedFormat":1},{"version":"fcafff163ca5e66d3b87126e756e1b6dfa8c526aa9cd2a2b0a9da837d81bbd72","impliedFormat":1},{"version":"70246ad95ad8a22bdfe806cb5d383a26c0c6e58e7207ab9c431f1cb175aca657","impliedFormat":1},{"version":"f00f3aa5d64ff46e600648b55a79dcd1333458f7a10da2ed594d9f0a44b76d0b","impliedFormat":1},{"version":"772d8d5eb158b6c92412c03228bd9902ccb1457d7a705b8129814a5d1a6308fc","impliedFormat":1},{"version":"802e797bcab5663b2c9f63f51bdf67eff7c41bc64c0fd65e6da3e7941359e2f7","impliedFormat":1},{"version":"b01bd582a6e41457bc56e6f0f9de4cb17f33f5f3843a7cf8210ac9c18472fb0f","impliedFormat":1},{"version":"8b4327413e5af38cd8cb97c59f48c3c866015d5d642f28518e3a891c469f240e","impliedFormat":1},{"version":"4cceef18d7f088e797a463e90b7a9dad10c6bc667724b7686e3e740ae00122be","impliedFormat":1},{"version":"7ee86fbb3754388e004de0ef9e6505485ddfb3be7640783d6d015711c03d302d","impliedFormat":1},{"version":"cc1954b539604b1e562319119ac7e888172208b32ca873f9a357a92c826bd046","impliedFormat":1},{"version":"a67b87d0281c97dfc1197ef28dfe397fc2c865ccd41f7e32b53f647184cc7307","impliedFormat":1},{"version":"771ffb773f1ddd562492a6b9aaca648192ac3f056f0e1d997678ff97dbb6bf9b","impliedFormat":1},{"version":"43e96a3d5d1411ab40ba2f61d6a3192e58177bcf3b133a80ad2a16591611726d","impliedFormat":1},{"version":"232f70c0cf2b432f3a6e56a8dc3417103eb162292a9fd376d51a3a9ea5fbbf6f","impliedFormat":1},{"version":"bb8f2dbc03533abca2066ce4655c119bff353dd4514375beb93c08590c03e023","impliedFormat":1},{"version":"706dd95827e7ebaabda91d5db2b755233e0952d98570e9c032b0f066a15c1177","affectsGlobalScope":true,"impliedFormat":1},{"version":"0b103e9abfe82d14c0ad06a55d9f91d6747154ef7cacc73cf27ecad2bfb3afcf","impliedFormat":1},{"version":"990b8fad2327b77e6920cc792af320e8867e68f02ce849b12c0a6ab9a1aebb09","impliedFormat":1},{"version":"5eb8cd1cb0c9143d74a8190b577c522720878c31aef67d866fcd29973f83e955","impliedFormat":1},{"version":"120599fd965257b1f4d0ff794bc696162832d9d8467224f4665f713a3119078b","impliedFormat":1},{"version":"43ba4f2fa8c698f5c304d21a3ef596741e8e85a810b7c1f9b692653791d8d97a","impliedFormat":1},{"version":"5433f33b0a20300cca35d2f229a7fc20b0e8477c44be2affeb21cb464af60c76","impliedFormat":1},{"version":"db036c56f79186da50af66511d37d9fe77fa6793381927292d17f81f787bb195","impliedFormat":1},{"version":"a6805fcafed712aea7759f8bc731014f9d22738c1d6ef9d43b8091d1d48346d5","impliedFormat":1},{"version":"c49469a5349b3cc1965710b5b0f98ed6c028686aa8450bcb3796728873eb923e","impliedFormat":1},{"version":"4a889f2c763edb4d55cb624257272ac10d04a1cad2ed2948b10ed4a7fda2a428","impliedFormat":1},{"version":"7bb79aa2fead87d9d56294ef71e056487e848d7b550c9a367523ee5416c44cfa","impliedFormat":1},{"version":"d88ea80a6447d7391f52352ec97e56b52ebec934a4a4af6e2464cfd8b39c3ba8","impliedFormat":1},{"version":"142617b3cdf902b69c6464c9fbd942b60ab3e733ca18c032b19e0f7e2adbefe8","impliedFormat":1},{"version":"0b603555f1881f87256ffd6344d3e3ed6d466c2e701eabf381f28be8c2125892","impliedFormat":1},{"version":"897e4f7662488e3ecc79e743bdd3b78f13bdb69a97851afa5b440c4211e32ea9","impliedFormat":1},{"version":"e2e1c6d3b2d93add5200bd7bc1a8cccb4e446836b2111ece45db8683a2c765de","impliedFormat":1},{"version":"251b03d5cd243854ce870d9a9a39f491faf69898c5d6b5eee28cc7649c57417b","impliedFormat":1},{"version":"27ff4196654e6373c9af16b6165120e2dd2169f9ad6abb5c935af5abd8c7938c","impliedFormat":1},{"version":"2c4de79f406d137390608e8c0a44fba2ff8e00bacfcae7c9d1781fef10e9440d","impliedFormat":1},{"version":"07ba23a10465791be5d22deaf5ef7de7658774ddff53721e5ea17fedea1bc721","impliedFormat":1},{"version":"dca8c645c5afeb03b1ecedbf16323f33e7d0afaa6256c8e047e6e38087a97f53","impliedFormat":1},{"version":"775f181bd4a533d6f8b5e55ec1d9f1624559720ae8a70e9432258da26b38d27c","impliedFormat":1},{"version":"796273b2edc72e78a04e86d7c58ae94d370ab93a0ddf40b1aa85a37a1c29ecd7","impliedFormat":1},{"version":"5df15a69187d737d6d8d066e189ae4f97e41f4d53712a46b2710ff9f8563ec9f","impliedFormat":1},{"version":"9109a1291dd4b9f1541bea81ee11c247a2ca9e1ea89f87f13aa1811c3c069616","impliedFormat":1},{"version":"6ac6715916fa75a1f7ebdfeacac09513b4d904b667d827b7535e84ff59679aff","impliedFormat":1},{"version":"622694a8522b46f6310c2a9b5d2530dde1e2854cb5829354e6d1ff8f371cf469","impliedFormat":1},{"version":"cd8ce8d68567f62dd580b3c3c37777ac3f5b81944c7417f5ea83030eab533385","impliedFormat":1},{"version":"e374d1eaa05b7dc38580062942ac8351ce79cbe11f6dbce4946a582a5680582d","impliedFormat":1},{"version":"9e2739b32f741859263fdba0244c194ca8e96da49b430377930b8f721d77c000","impliedFormat":1},{"version":"a9e6c0ff3f8186fccd05752cf75fc94e147c02645087ac6de5cc16403323d870","impliedFormat":1},{"version":"49af4b52f0d4d2304c5f2c6fe5fab3e153e0acc38830d0202821b877c097dd02","impliedFormat":1},{"version":"49c346823ba6d4b12278c12c977fb3a31c06b9ca719015978cb145eb86da1c61","impliedFormat":1},{"version":"bfac6e50eaa7e73bb66b7e052c38fdc8ccfc8dbde2777648642af33cf349f7f1","impliedFormat":1},{"version":"92f7c1a4da7fbfd67a2228d1687d5c2e1faa0ba865a94d3550a3941d7527a45d","impliedFormat":1},{"version":"f53b120213a9289d9a26f5af90c4c686dd71d91487a0aa5451a38366c70dc64b","impliedFormat":1},{"version":"e68b8e5a1df7c1be2bc105141456ecba70215806e1c28bfbc5c12bfce4be6e68","impliedFormat":1},{"version":"511c8f02329808d47d00b859c532ae9115590048b17325a946c74dac48428650","impliedFormat":1},{"version":"57d67b72e06059adc5e9454de26bbfe567d412b962a501d263c75c2db430f40e","impliedFormat":1},{"version":"b5f9e66625783eefcbe3d2da074b2e7ba2066d61ce3fc6ef4f22805ad946cab4","impliedFormat":1},{"version":"e37115962d284b9f7a37c2bdd2add50f88365dde41f5e0ff591ffc48a8ec7575","impliedFormat":1},{"version":"6459054aabb306821a043e02b89d54da508e3a6966601a41e71c166e4ea1474f","impliedFormat":1},{"version":"bb37588926aba35c9283fe8d46ebf4e79ffe976343105f5c6d45f282793352b2","impliedFormat":1},{"version":"f89488602bec98a142072fae7ea5ba99431a569ff580c64b7be39896474799d8","impliedFormat":1},{"version":"bbbc47961f39a57df103cf4ca3bb8f8732b4b6678a18225a0aa76d59c466956c","impliedFormat":1},{"version":"2e6114a7dd6feeef85b2c80120fdbfb59a5529c0dcc5bfa8447b6996c97a69f5","impliedFormat":1},{"version":"2ffb043dc5163458e473b7010859f86e01dc4edffcae0a93d885d028b426a546","impliedFormat":1},{"version":"c8f004e6036aa1c764ad4ec543cf89a5c1893a9535c80ef3f2b653e370de45e6","impliedFormat":1},{"version":"dd80b1e600d00f5c6a6ba23f455b84a7db121219e68f89f10552c54ba46e4dc9","impliedFormat":1},{"version":"b064c36f35de7387d71c599bfcf28875849a1dbc733e82bd26cae3d1cd060521","impliedFormat":1},{"version":"05c7280d72f3ed26f346cbe7cbbbb002fb7f15739197cbbee6ab3fd1a6cb9347","impliedFormat":1},{"version":"8de9fe97fa9e00ec00666fa77ab6e91b35d25af8ca75dabcb01e14ad3299b150","impliedFormat":1},{"version":"04b7b2e0832dfd3c31e81df3975e8d8fda28e7ff999b0aa2932608a8f6661d5c","impliedFormat":1},{"version":"ca2d34c6ed5cbd3070b8b6f32f42ae54adcc6499c1e4b99f0a5798b3f27cc653","impliedFormat":1},{"version":"9ec68995e66dd6b9dac834bf5ae85fde802714ea2e82151a5d1d53ef01b463ef","impliedFormat":1},{"version":"5c4d626b4902f2ef8a1cc146d761d276cef988016dc674e3b98fbad70e64bc9f","impliedFormat":1},{"version":"fdfaa0aad899524962e2955287b5b991ffe3be50f64e02eb60c933ca44644a94","impliedFormat":1},{"version":"53c972a0f9bc3a4ec70fff7314123ea8cfcf75b3703046f767d2dc1eea87b2fb","impliedFormat":1},{"version":"f974e4a06953682a2c15d5bd5114c0284d5abf8bc0fe4da25cb9159427b70072","impliedFormat":1},{"version":"50256e9c31318487f3752b7ac12ff365c8949953e04568009c8705db802776fb","impliedFormat":1},{"version":"7d73b24e7bf31dfb8a931ca6c4245f6bb0814dfae17e4b60c9e194a631fe5f7b","impliedFormat":1},{"version":"d130c5f73768de51402351d5dc7d1b36eaec980ca697846e53156e4ea9911476","impliedFormat":1},{"version":"413586add0cfe7369b64979d4ec2ed56c3f771c0667fbde1bf1f10063ede0b08","impliedFormat":1},{"version":"06472528e998d152375ad3bd8ebcb69ff4694fd8d2effaf60a9d9f25a37a097a","impliedFormat":1},{"version":"7303b45138d2511035056a5901a1490ebdcbf055cbb1276f8629c5121cbe733e","impliedFormat":1},{"version":"27f874cd5327507eeff699a74567f60c1215b94509f4308633a7b01922471ed2","impliedFormat":1},{"version":"a401617604fa1f6ce437b81689563dfdc377069e4c58465dbd8d16069aede0a5","impliedFormat":1},{"version":"2c6cf04bc525caf6546e859e8ef10bfb9573837ec0bc5ec7b53a7b1b8ca72781","impliedFormat":1},{"version":"8695dec09ad439b0ceef3776ea68a232e381135b516878f0901ed2ea114fd0fe","impliedFormat":1},{"version":"304b44b1e97dd4c94697c3313df89a578dca4930a104454c99863f1784a54357","impliedFormat":1},{"version":"0a437ae178f999b46b6153d79095b60c42c996bc0458c04955f1c996dc68b971","impliedFormat":1},{"version":"74b2a5e5197bd0f2e0077a1ea7c07455bbea67b87b0869d9786d55104006784f","impliedFormat":1},{"version":"4a7baeb6325920044f66c0f8e5e6f1f52e06e6d87588d837bdf44feb6f35c664","impliedFormat":1},{"version":"87cc05fe13108f02e12da7e3efd8e360fef78d96a0c9e11408ea1b1b9fb3e03d","impliedFormat":1},{"version":"1abbf67c218d23c2ce76887caac2df6c7dab3d97ba2b65348432b876f510002a","impliedFormat":1},{"version":"1a82deef4c1d39f6882f28d275cad4c01f907b9b39be9cbc472fcf2cf051e05b","impliedFormat":1},{"version":"4b20fcf10a5413680e39f5666464859fc56b1003e7dfe2405ced82371ebd49b6","impliedFormat":1},{"version":"c06ef3b2569b1c1ad99fcd7fe5fba8d466e2619da5375dfa940a94e0feea899b","impliedFormat":1},{"version":"f7d628893c9fa52ba3ab01bcb5e79191636c4331ee5667ecc6373cbccff8ae12","impliedFormat":1},{"version":"1d879125d1ec570bf04bc1f362fdbe0cb538315c7ac4bcfcdf0c1e9670846aa6","impliedFormat":1},{"version":"8bd496cf710d4873d15e4891a5dbf945673e3321ca74cf75187e347fd5ed295e","impliedFormat":1},{"version":"a6dba407fc287f1e25454e75028c91bbc00675f2d1c4e8b3edcc36c08611a486","impliedFormat":1},{"version":"d663134457d8d669ae0df34eabd57028bddc04fc444c4bc04bc5215afc91e1f4","impliedFormat":1},{"version":"e91f7b1344577a02f051b9b471f33044fef8334a76dc9e1de003d17595a5219b","impliedFormat":1},{"version":"c0723195c85e19656d6b5b9fdb81d3f3403c1ae4679e722c6ea058c516b38d12","impliedFormat":1},{"version":"186eea74805194f04e41038fc5eca653788b9dedbab7c2d7d17e10139622dd92","impliedFormat":1},{"version":"71d9eb4c4e99456b78ae182fb20a5dfc20eb1667f091dbb9335b3c017dd1c783","impliedFormat":1},{"version":"cfa846a7b7847a1d973605fbb8c91f47f3a0f0643c18ac05c47077ebc72e71c7","impliedFormat":1},{"version":"1594da19968752a22b2ac48c2d0e60575700e745c577a8a4a676b841238ad5bb","impliedFormat":1},{"version":"e0cee12109e0a10a4c3d6769fcc7644b7c1ea7f52365bea51728f5af29f8a137","impliedFormat":1},{"version":"7d4254b4c6c67a29d5e7f65e67d72540480ac2cfb041ca484847f5ae70480b62","impliedFormat":1},{"version":"3536968defef8a75514f547ead5e2e9c1e984820290ec9b00c5fdfb6ef786535","impliedFormat":1},{"version":"d83773870080c30a230e322ce13a9c6f3398e8dacea4ea8a83e26370f3bac23e","impliedFormat":1},{"version":"dcfeaf98d66314fec29a9076c4290e45d0b196a65827becc19138e9c7b855f37","impliedFormat":1},{"version":"6849fe9210fe4946d5f085bfed36758f33dc6ae15a751338d178dd4daa017c46","impliedFormat":1},{"version":"888cda0fa66d7f74e985a3f7b1af1f64b8ff03eb3d5e80d051c3cbdeb7f32ab7","impliedFormat":1},{"version":"60681e13f3545be5e9477acb752b741eae6eaf4cc01658a25ec05bff8b82a2ef","impliedFormat":1},{"version":"ffae4e1e06aa848a1e4bcef162cd1c48e5909b26223515981310af9c036bdfc7","impliedFormat":1},{"version":"a57b1802794433adec9ff3fed12aa79d671faed86c49b09e02e1ac41b4f1d33a","impliedFormat":1},{"version":"34e16eb7c31768a11a08aebcfb3d70d7b8f0b016197e98d8419e566ceae6d6c8","impliedFormat":1},{"version":"f94ec1f7e4b709d26960306c9082a7a1b728a6e13089346aa48ba57c74cbf47e","impliedFormat":1},{"version":"9a11cb4033405e96c247cd5aa29790212aaffdd127869e8a5219103f0b389fd5","impliedFormat":1},{"version":"01479d9d5a5dda16d529b91811375187f61a06e74be294a35ecce77e0b9e8d6c","impliedFormat":1},{"version":"aff5213585cb72e94054dfe17250ff315f3569b3919d1ef1ad235f37c4ee894e","impliedFormat":1},{"version":"fb2ea35e1be6388d722d7725e2b49c697d34d9c890c3b96758faaeb86d35cef8","impliedFormat":1},{"version":"ce0df82a9ae6f914ba08409d4d883983cc08e6d59eb2df02d8e4d68309e7848b","impliedFormat":1},{"version":"1a4dc28334a926d90ba6a2d811ba0ff6c22775fcc13679521f034c124269fd40","impliedFormat":1},{"version":"f05315ff85714f0b87cc0b54bcd3dde2716e5a6b99aedcc19cad02bf2403e08c","impliedFormat":1},{"version":"5fad3b31fc17a5bc58095118a8b160f5260964787c52e7eb51e3d4fcf5d4a6f0","impliedFormat":1},{"version":"72105519d0390262cf0abe84cf41c926ade0ff475d35eb21307b2f94de985778","impliedFormat":1},{"version":"456006a6975b26c0a1785feddae165f6d307e2d601ffde27e21fc4a790e448a4","impliedFormat":1},{"version":"c857e0aae3f5f444abd791ec81206020fbcc1223e187316677e026d1c1d6fe08","impliedFormat":1},{"version":"ccf6dd45b708fb74ba9ed0f2478d4eb9195c9dfef0ff83a6092fa3cf2ff53b4f","impliedFormat":1},{"version":"1fe0d18b111e1145a7e7601855bccd4ca20f24e3b9a5aba6bb1fa9d1a7059170","impliedFormat":1},{"version":"5632c3c26d420c063eebe64c45b1248b9492a67bf44f1d0c57e9dc8f6cf449bb","impliedFormat":1},{"version":"0df5aa619ab12993a39ea6dae062ee46eadbb4d738916460e636ada52bced75b","impliedFormat":1},{"version":"8fca3039857709484e5893c05c1f9126ab7451fa6c29e19bb8c2411a2e937345","impliedFormat":1},{"version":"35069c2c417bd7443ae7c7cafd1de02f665bf015479fec998985ffbbf500628c","impliedFormat":1},{"version":"10ab7be91f87ebe8916b62cf28af2e45b5601fc7b0e311adf838f912c6b31dd8","impliedFormat":1},{"version":"bc636fbc08e0979ceb7eb0731a33000283d77a33b62e1f71ee65be50394e40ba","impliedFormat":1},{"version":"7e0b7f91c5ab6e33f511efc640d36e6f933510b11be24f98836a20a2dc914c2d","impliedFormat":1},{"version":"045b752f44bf9bbdcaffd882424ab0e15cb8d11fa94e1448942e338c8ef19fba","impliedFormat":1},{"version":"2894c56cad581928bb37607810af011764a2f511f575d28c9f4af0f2ef02d1ab","impliedFormat":1},{"version":"0a72186f94215d020cb386f7dca81d7495ab6c17066eb07d0f44a5bf33c1b21a","impliedFormat":1},{"version":"75bbd3be047d539988a0ff0b56384ef7a6a25f3b676ad96bee547d44c31622a7","impliedFormat":1},{"version":"42960001a776b089ade681ab5cfddc936e0afb0615133ec1841f3dee89d3e1bf","impliedFormat":1},{"version":"0aedb02516baf3e66b2c1db9fef50666d6ed257edac0f866ea32f1aa05aa474f","impliedFormat":1},{"version":"da47712b394d944328245482603bc6f416d3949b67c9392279caab595076b510","affectsGlobalScope":true,"impliedFormat":1},{"version":"37d0071d8f0a06dc55c2c5e0ec3391affd4fd107c53410bf358196ec0bf3923f","impliedFormat":1},{"version":"b213dad76ca37fd552274c9499056e1c0d9c1bd38a55bb7f68b22ba6b84c3ad7","impliedFormat":1},{"version":"56ccb49443bfb72e5952f7012f0de1a8679f9f75fc93a5c1ac0bafb28725fc5f","impliedFormat":1},{"version":"20fa37b636fdcc1746ea0738f733d0aed17890d1cd7cb1b2f37010222c23f13e","impliedFormat":1},{"version":"d90b9f1520366d713a73bd30c5a9eb0040d0fb6076aff370796bc776fd705943","impliedFormat":1},{"version":"bc03c3c352f689e38c0ddd50c39b1e65d59273991bfc8858a9e3c0ebb79c023b","impliedFormat":1},{"version":"19df3488557c2fc9b4d8f0bac0fd20fb59aa19dec67c81f93813951a81a867f8","affectsGlobalScope":true,"impliedFormat":1},{"version":"b25350193e103ae90423c5418ddb0ad1168dc9c393c9295ef34980b990030617","affectsGlobalScope":true,"impliedFormat":1},{"version":"bef86adb77316505c6b471da1d9b8c9e428867c2566270e8894d4d773a1c4dc2","impliedFormat":1},{"version":"5a49adaef698b7ad7e6127949fa1b0bbd3d46b7cbd11c54e392a4dcdd51f5190","impliedFormat":1},{"version":"96171c03c2e7f314d66d38acd581f9667439845865b7f85da8df598ff9617476","impliedFormat":1},{"version":"27be6622e2922a1b412eb057faa854831b95db9db5035c3f6d4b677b902ab3b7","impliedFormat":1},{"version":"5c634644d45a1b6bc7b05e71e05e52ec04f3d73d9ac85d5927f647a5f965181a","impliedFormat":1},{"version":"2489bf04d77dc025ba67f49f1a56eb24b9db477d5ff88123d887e163ed1776aa","impliedFormat":1},{"version":"63a7595a5015e65262557f883463f934904959da563b4f788306f699411e9bac","impliedFormat":1},{"version":"4ba137d6553965703b6b55fd2000b4e07ba365f8caeb0359162ad7247f9707a6","impliedFormat":1},{"version":"0b77b819b5417775fccb20c678293cf614c054a5b1a65421a5b933a9124ba998","impliedFormat":1},{"version":"e1f6076688a95bd82deaac740fccbe3cdea0d8a22057cccc9c5bce4398bdd33b","impliedFormat":1},{"version":"9252d498a77517aab5d8d4b5eb9d71e4b225bbc7123df9713e08181de63180f6","impliedFormat":1},{"version":"b1f1d57fde8247599731b24a733395c880a6561ec0c882efaaf20d7df968c5af","impliedFormat":1},{"version":"6715dc4eb59c8ea9abe2b78c235ed331dc710a06fe56798868dbc4d40cd1b707","impliedFormat":1},{"version":"35e6379c3f7cb27b111ad4c1aa69538fd8e788ab737b8ff7596a1b40e96f4f90","impliedFormat":1},{"version":"1fffe726740f9787f15b532e1dc870af3cd964dbe29e191e76121aa3dd8693f2","impliedFormat":1},{"version":"5a3ea721d03a361ccbdd7390ccd75f6e84cbca3a3f01f4b331ecc9af31890c49","impliedFormat":1},{"version":"e7dfaee4af38d45b1cab8a1ee0b3bc1f85ddcf64545ed391d675d78ae6526274","affectsGlobalScope":true,"impliedFormat":1},{"version":"e8daa443eaf9a27fd382cc1f8ebe30330c0f4d89511cfb469166874806751d35","impliedFormat":1},{"version":"af48e58339188d5737b608d41411a9c054685413d8ae88b8c1d0d9bfabdf6e7e","impliedFormat":1},{"version":"616775f16134fa9d01fc677ad3f76e68c051a056c22ab552c64cc281a9686790","impliedFormat":1},{"version":"65c24a8baa2cca1de069a0ba9fba82a173690f52d7e2d0f1f7542d59d5eb4db0","impliedFormat":1},{"version":"f9fe6af238339a0e5f7563acee3178f51db37f32a2e7c09f85273098cee7ec49","impliedFormat":1},{"version":"1de8c302fd35220d8f29dea378a4ae45199dc8ff83ca9923aca1400f2b28848a","impliedFormat":1},{"version":"77e71242e71ebf8528c5802993697878f0533db8f2299b4d36aa015bae08a79c","impliedFormat":1},{"version":"98a787be42bd92f8c2a37d7df5f13e5992da0d967fab794adbb7ee18370f9849","impliedFormat":1},{"version":"332248ee37cca52903572e66c11bef755ccc6e235835e63d3c3e60ddda3e9b93","impliedFormat":1},{"version":"94e8cc88ae2ef3d920bb3bdc369f48436db123aa2dc07f683309ad8c9968a1e1","impliedFormat":1},{"version":"4545c1a1ceca170d5d83452dd7c4994644c35cf676a671412601689d9a62da35","impliedFormat":1},{"version":"320f4091e33548b554d2214ce5fc31c96631b513dffa806e2e3a60766c8c49d9","impliedFormat":1},{"version":"a2d648d333cf67b9aeac5d81a1a379d563a8ffa91ddd61c6179f68de724260ff","impliedFormat":1},{"version":"d90d5f524de38889d1e1dbc2aeef00060d779f8688c02766ddb9ca195e4a713d","impliedFormat":1},{"version":"07ed3ddab975995eea41b22f3010506fb9f5fb301d04820b07d7a1aee5477d7c","impliedFormat":1},{"version":"969d8b0965849f4bae7cab0ba90bd1e1220e95999c2c6f01117fa7500901c017","impliedFormat":1},{"version":"6ec840ee5e2bc103f557fe38b1d585ee250540468713d7634ee066de372bf332","impliedFormat":1},{"version":"b0309e1eda99a9e76f87c18992d9c3689b0938266242835dd4611f2b69efe456","impliedFormat":1},{"version":"47699512e6d8bebf7be488182427189f999affe3addc1c87c882d36b7f2d0b0e","impliedFormat":1},{"version":"6ceb10ca57943be87ff9debe978f4ab73593c0c85ee802c051a93fc96aaf7a20","impliedFormat":1},{"version":"1de3ffe0cc28a9fe2ac761ece075826836b5a02f340b412510a59ba1d41a505a","impliedFormat":1},{"version":"e46d6cc08d243d8d0d83986f609d830991f00450fb234f5b2f861648c42dc0d8","impliedFormat":1},{"version":"1c0a98de1323051010ce5b958ad47bc1c007f7921973123c999300e2b7b0ecc0","impliedFormat":1},{"version":"ff863d17c6c659440f7c5c536e4db7762d8c2565547b2608f36b798a743606ca","impliedFormat":1},{"version":"5412ad0043cd60d1f1406fc12cb4fb987e9a734decbdd4db6f6acf71791e36fe","impliedFormat":1},{"version":"ad036a85efcd9e5b4f7dd5c1a7362c8478f9a3b6c3554654ca24a29aa850a9c5","impliedFormat":1},{"version":"fedebeae32c5cdd1a85b4e0504a01996e4a8adf3dfa72876920d3dd6e42978e7","impliedFormat":1},{"version":"e297c0a524edee7677939122f90027bfbe5f2698939d9a85728e5044b39c7124","impliedFormat":1},{"version":"cdf21eee8007e339b1b9945abf4a7b44930b1d695cc528459e68a3adc39a622e","impliedFormat":1},{"version":"bc9ee0192f056b3d5527bcd78dc3f9e527a9ba2bdc0a2c296fbc9027147df4b2","impliedFormat":1},{"version":"b62381cae176db34f003cc6172ee8f3e0122014889d66391aa73698105cf4934","impliedFormat":1},{"version":"1d9c0a9a6df4e8f29dc84c25c5aa0bb1da5456ebede7a03e03df08bb8b27bae6","impliedFormat":1},{"version":"84380af21da938a567c65ef95aefb5354f676368ee1a1cbb4cae81604a4c7d17","impliedFormat":1},{"version":"1af3e1f2a5d1332e136f8b0b95c0e6c0a02aaabd5092b36b64f3042a03debf28","impliedFormat":1},{"version":"30d8da250766efa99490fc02801047c2c6d72dd0da1bba6581c7e80d1d8842a4","impliedFormat":1},{"version":"03566202f5553bd2d9de22dfab0c61aa163cabb64f0223c08431fb3fc8f70280","impliedFormat":1},{"version":"41eb514d9ce0a6e87957f08a4b7af70d93f87637f37dee706e2d92a6601c25a9","impliedFormat":1},{"version":"e7765aa8bcb74a38b3230d212b4547686eb9796621ffb4367a104451c3f9614f","impliedFormat":1},{"version":"1de80059b8078ea5749941c9f863aa970b4735bdbb003be4925c853a8b6b4450","impliedFormat":1},{"version":"1d079c37fa53e3c21ed3fa214a27507bda9991f2a41458705b19ed8c2b61173d","impliedFormat":1},{"version":"5bf5c7a44e779790d1eb54c234b668b15e34affa95e78eada73e5757f61ed76a","impliedFormat":1},{"version":"5835a6e0d7cd2738e56b671af0e561e7c1b4fb77751383672f4b009f4e161d70","impliedFormat":1},{"version":"4b7f74b772140395e7af67c4841be1ab867c11b3b82a51b1aeb692822b76c872","impliedFormat":1},{"version":"7bd01f0f28cd3aeb2046274d85208e245965f6f2948edf4f7b2057bcf9f22ccc","impliedFormat":99},{"version":"d2f2cf2b8cc92bea913cda4a076e0f790b23a21e84f989d12f0116a7fe3906e0","impliedFormat":99},{"version":"6de125ea94866c736c6d58d68eb15272cf7d1020a5b459fea1c660027eca9a90","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5b20bc288ee49989c95b20847fc93b96bf61cc0845598897a6a53a967dd7d07","affectsGlobalScope":true,"impliedFormat":1},{"version":"064ac1c2ac4b2867c2ceaa74bbdce0cb6a4c16e7c31a6497097159c18f74aa7c","impliedFormat":1},{"version":"3dc14e1ab45e497e5d5e4295271d54ff689aeae00b4277979fdd10fa563540ae","impliedFormat":1},{"version":"d3b315763d91265d6b0e7e7fa93cfdb8a80ce7cdd2d9f55ba0f37a22db00bdb8","impliedFormat":1},{"version":"b789bf89eb19c777ed1e956dbad0925ca795701552d22e68fd130a032008b9f9","impliedFormat":1},{"version":"75421a9c0088dac67b8d07519590a4fab4e8360644e7dbb476d2509957377711","affectsGlobalScope":true},"4e4da12aa061aac172fb1bcb48e9b6e4b293080d2f494327925fdba8f39632ac",{"version":"a3c887d1dae8a305a9dca648b0b07779893c841098e0d03ab79cd0a407f77645","signature":"47669eccc47a97d505251c42b9d296b4042fc931500729e9c6d860181d726cbf"},{"version":"332f508ab6c1704bb05d6bf8133c208f2f525c49da1f5a3e593c4b8edbd6b76c","signature":"435a1e418e8338be3f39614b96b81a9aa2700bc8c27bc6b98f064ff9ce17c363"},{"version":"169dfa4a4d242be0a1a5df09ca38cfc4ba495a252bd2d78b893de232f5e6071f","signature":"f153ee3a86a947cafd8ad8b130de1576fd6b2c7bdcfaf7ecd00c7ed9dbcee5b5"},{"version":"0737535586da181159a0f73f0ac5a2043e16d414f9e75aaf8e583997e2ba4b9f","signature":"1fc3c0fe9ee115c7f6a9f61887e962566e54cef41e93df1b3d8aa838d60cf99c"},{"version":"cea90e20ada094fbbea884ffa7775f7dc95a7683d6db6b48591defc207a3f9bd","signature":"10a04fb13354a619e3f38df790af9f4bcd9f35986abc4d34f1ce138754b06b97"},{"version":"e7c2f40dc99121500ad108a4f86541d29cac105ed018f994c7c5a2836e77b257","impliedFormat":1},{"version":"90e930283286ab117ab89f00589cf89ab5e9992bc57e79f303b36ee14649bdd9","impliedFormat":1},{"version":"6d48a6c907c668a6d6eda66acec4242e367c983e073100e35c1e234c424ad1a4","impliedFormat":1},{"version":"68a0e898d6c39160f1326ef922508914498c7a2d0b5a0d9222b7928d343214eb","impliedFormat":1},{"version":"69d96a8522b301a9e923ac4e42dd37fc942763740b183dffa3d51aca87f978d5","impliedFormat":1},{"version":"ff2fadad64868f1542a69edeadf5c5519e9c89e33bec267605298f8d172417c7","impliedFormat":1},{"version":"2866ae69517d6605a28d0c8d5dff4f15a0b876eeb8e5a1cbc51631d9c6793d3f","impliedFormat":1},{"version":"f8c4434aa8cbd4ede2a75cbc5532b6a12c9cac67c3095ed907e54f3f89d2e628","impliedFormat":1},{"version":"0b8adc0ae60a47acf65575952eee568b3d497f9975e3162f408052a99e65f488","impliedFormat":1},{"version":"ede9879d22f7ce68a8c99e455acab32fc45091c6eed9625549742b03e1f1ac1a","impliedFormat":1},{"version":"0e8c007c6e404da951c3d98a489ac0a3e9b6567648b997c03445ac69d7938c1c","impliedFormat":1},{"version":"f2a4866bed198a7c804b58ee39efe74c66ecdcf2dfebef0b9895d534a50790c4","impliedFormat":1},{"version":"ad72538d0c5e417ee6621e1b54691c274bcacaa1807c9895c5fa6d40b45fb631","impliedFormat":1},{"version":"4f851c59f3112702f6178e76204f839e3156daa98b5b7d7e3fc407a6c5764118","impliedFormat":1},{"version":"57511f723968d2f41dd2d55b9fbc5d0f3107af4e4227db0fb357c904bd34e690","impliedFormat":1},{"version":"9585df69c074d82dda33eadd6e5dccd164659f59b09bd5a0d25874770cf6042d","impliedFormat":1},{"version":"f6f6ce3e3718c2e7592e09d91c43b44318d47bca8ee353426252c694127f2dcb","impliedFormat":1},{"version":"4f70076586b8e194ef3d1b9679d626a9a61d449ba7e91dfc73cbe3904b538aa0","impliedFormat":1},{"version":"6d5838c172ff503ef37765b86019b80e3abe370105b2e1c4510d6098b0e84414","impliedFormat":1},{"version":"1876dac2baa902e2b7ebed5e03b95f338192dc03a6e4b0731733d675ba4048f3","impliedFormat":1},{"version":"8086407dd2a53ce700125037abf419bddcce43c14b3cf5ea3ac1ebded5cad011","impliedFormat":1},{"version":"c2501eb4c4e05c2d4de551a4bace9c28d06a0d89b228443f69eb3d7f9049fbd6","impliedFormat":1},{"version":"1829f790849d54ea3d736c61fdefd3237bede9c5784f4c15dfdafb7e0a9b8f63","impliedFormat":1},{"version":"5392feeda1bf0a1cc755f7339ea486b7a4d0d019774da8057ddc85347359ed63","impliedFormat":1},{"version":"c998117afca3af8432598c7e8d530d8376d0ca4871a34137db8caa1e94d94818","impliedFormat":1},{"version":"4e465f7e9a161a5a5248a18af79dbfbf06e8e1255bfdc8f63ab15475a2ba48bd","impliedFormat":1},{"version":"e0353c5070349846fe9835d782a8ce338d6d4172c603d14a6b364d6354957a4e","impliedFormat":1},{"version":"323133630008263f857a6d8350e36fb7f6e8d221ec0a425b075c20290570c020","impliedFormat":1},{"version":"c04e691d64b97e264ca4d000c287a53f2a75527556962cdbe3e8e2b301dac906","impliedFormat":1},{"version":"3733dba5107de9152f98da9bcb21bf6c91ac385f3b22f30ed08d0dc5e74c966f","impliedFormat":1},{"version":"d3ec922ddd9677696ee0552f10e95c4e59f85bb8c93fd76cd41b2dd93988ff39","impliedFormat":1},{"version":"0492c0d35e05c0fdd638980e02f3a7cdec18b311959fc730d85ed7e1d4ff38a7","impliedFormat":1},{"version":"c7122ba860d3497fa04a112d424ee88b50c482360042972bcf0917c5b82f4484","impliedFormat":1},{"version":"838f52090a0d39dce3c42e0ccb0db8db250c712c1fa2cd36799910c8f8a7f7bf","impliedFormat":1},{"version":"116ec624095373939de9edb03619916226f5e5b6e93cd761c4bda4efecb104fc","impliedFormat":1},{"version":"8e6b8259bfd8c8c3d6ed79349b7f2f69476d255aede2cd6c0acb0869ad8c6fdd","impliedFormat":1},{"version":"c57b441e0c0a9cbdfa7d850dae1f8a387d6f81cbffbc3cd0465d530084c2417d","impliedFormat":99},{"version":"8658354b90861a76abc7b3c04ece2124295c7da0cc4c4d31c2c78d8607188d03","impliedFormat":1},{"version":"7c8c3dfc0cdd370d44932828eb067ef771c8fe7996693221d5d4b90af6d54f2d","signature":"512960c0e955a2324b34354dac25e3e4d431a1af4cd33077935eda5e95c8b7e1"},{"version":"fca9e5ad75c873f8db5e22fae7b23c6715b1b5b1cdac923a4b3e7ed6ba7143cf","signature":"2bff91fa80b7741572913c9f281fb74fead6552886776b70d62321867c2c8d5e"},{"version":"239a2ae6277ba87bff2cad7c00be82eda7fc4cc3497c3309d6964b89c2caa222","signature":"898865fc8391aff15e395d783264f3896dd869178bddefb2ed27e6449da7d734"},{"version":"2fbe402f0ee5aa8ab55367f88030f79d46211c0a0f342becaa9f648bf8534e9d","impliedFormat":1},{"version":"b94258ef37e67474ac5522e9c519489a55dcb3d4a8f645e335fc68ea2215fe88","impliedFormat":1},{"version":"7f19b8476658d25ff197c84030e58cd7395059d876a54630e025951e474ebdae","signature":"cbb6e618cfae37c1feb246b78260428cf2bcba79a0c9bf1ac60d511a4158692d"},{"version":"7459d85c80f2971be954b562724106b13d5a2a57e8bfde51723e94e838f6fcbf","impliedFormat":99},{"version":"c24ab9ac84d65b417a807ada25456697bb2adf1189fa80cb240625dfb3e61c42","impliedFormat":99},{"version":"03952163760a479246853f7ee56fd231d703e8d6f78deb353c7892efeef3db3e","impliedFormat":99},{"version":"0d121799b2cbac398e84a4708fcd82f980f33bf3ac7721a3cf9db9f28d9eb2b2","impliedFormat":99},{"version":"b45c2c7da9952665f78397fccb03f67535535939497b11308c9409c8505eb32a","impliedFormat":99},{"version":"c23b9684ab48ea6956f0a510c3cf724277fa457efa7ff85d5907f4e4290ba0aa","impliedFormat":99},{"version":"15abcaa279117eb516a90c09c4b60c53fb29c1242c7f67bb1003e0cce06f7d19","impliedFormat":99},{"version":"75085bd84ff6965e4a356c53a4689799cabf65caa93c0bba064d5a0c6fa78f13","signature":"bb4b02b4dd58d4e434c952da55797cf052d30d36b09bd14aadfbc70a037c84ce"},{"version":"76e008459f847a96bb1140c11a38d247e69392432a1e690aa660fdb4844f5c74","signature":"013bc41103a767903cfe9896a9b770744ef6b23a2218214d35f5e1bb8ce5245f"},{"version":"94ab156f290eec0f9a4afd7e037f1875adb19647501a59c77fdd7df75ade90f8","signature":"dac7ff6a235973df4609cd0eeabf1cf8b6f14947d15ca41b0423646e0118c886"},{"version":"b2e5691a1a795e58a63d10b907248299ca96bb3433b7fb252279b4f00cc3a5d0","impliedFormat":99},{"version":"4244c6a12dc14768ddc3ee2737ccf1c6c0d07353785d5979df7d250eda461a61","impliedFormat":99},{"version":"cce820aba9ba9d1984461c67d0d543d8eba7ea25c6a1be7a47c31cc18907a631","impliedFormat":99},{"version":"3e7e929f14bc384ed6da8ef0c7dc3aae5ea191494c9554e4327186ef40db2573","impliedFormat":99},{"version":"082062d5e676f7049e4a684dc6726c631fe153cb457e494cc240bbe3be5650a4","impliedFormat":99},{"version":"ab2e38bc6b61891361655b5d2e45c4cbc95c9db4920453fd5329cac7fd4e1385","impliedFormat":99},{"version":"9bb8a03e0015254999c1e96830242fa3764856fd14958d3b097149f4491b1fa6","impliedFormat":99},{"version":"21655de6cf9d8df920b2dd8aaa5d6b4f88630c5c6f4df66947f4a2c4e59f7c79","impliedFormat":99},{"version":"14d276113e85e9c32c086e1084b08a27c2b482ad8dad94bea59a958b55c79593","signature":"40af0fd10141b32fbf06d86d0013777b04e7b15869b53373cdf208a6ab1767ef"},{"version":"678ad513991c4aa409f06946fe76523b83319829e08864262fde3d484fbfe165","signature":"f42cb0804d7f725acee9f5ff68d73d11efe829a138ff42c30842a62c459e3f31"},{"version":"00ef3f8f9711497a58fc5e3e20bde2c6f56be2cb3eafd85c9eadfcd005f116fa","signature":"91ade9247d89a06b8671db5f431f5d0c5fc7fbd571f7d3e3fb7e1e9cf54eb021"},{"version":"7f39b865d511b44c8132a1fa5e9e0efa14ad1f16173da55fcb8fe2fbfbe62703","signature":"5ad36bc62b301bc0219662774972cb1a0fb85752697f204343f63db85ea2565d"},{"version":"b4802b5709ff456f81f9c429f697d8345bf2a364a6f97bdf638012d1ca7cb245","signature":"fae6f054db257082fa32971e00ba4971bbb77361deb6bf6b70d9becf52989f55"},{"version":"c840e12da509f2c771dbc356a23750227a43d1864640c7e6404b8f9ec86b3871","impliedFormat":99},{"version":"6ae92eaaaef30fae975de604d3af31d5b00eca7f02d89fab589152df926685fd","impliedFormat":99},{"version":"26cfaec143443411bc7d5363f274f885ced430b8f4bee25a81f7827248848d7b","impliedFormat":99},{"version":"e3b3780b68c70ff42894b68ee8f49186ef3335fc86a9106dd07e11580b460cc1","impliedFormat":99},{"version":"459fda119c27213d3defde220c051414020029abd52fb6fb9aea0beedc512c6b","impliedFormat":99},{"version":"f886d17af7cb7bb1bc44bfa22f1759ea7824c9e758e956808b6888d746ec31c4","signature":"00024b3de4f1de76ac8b2b9db3cc5f0e24be67df993b98a3e64780fa30cfaae6"},{"version":"9c3663fa36fb976609d8fc43372ae38dc2e066dab014a955f40ae6430733fb71","impliedFormat":99},{"version":"e38a172f8912eebc79671e07b81687a304a9d366a47933fde9f97ad79f8ac08a","impliedFormat":99},{"version":"d14549ab3ba7a9d5d1f424c2599233bffa0b317121abf3b6efa2fb902d5e2781","signature":"d64f992b732408304b00a23ea0c77762d738a82991923d2ace56e848597851bf"},{"version":"9d28b54569f4cd1c0c21d95d0e70f6fdbfd792121604b95d7c2d067ee0f0fd11","impliedFormat":99},{"version":"4d857105510df8011cfb5b3769dec55624a1df92e85d399cd03bc82bb89d090c","impliedFormat":99},{"version":"b92dbe495c1dee9f3cd7c1466fdf02476f19ae18a7ecc829e3ed8a380b2d597f","impliedFormat":99},{"version":"bd3e3a447a34cf3dd875ed550ea349589b2dfcd6b3a14abebdc946366bd812a4","impliedFormat":99},{"version":"6b100282ebfd5bfa4d8c72ad5dd3e9d325aa32d0a53623d6171fc2cc2899fbc4","impliedFormat":99},{"version":"29297b3a1e4b3503eef0ec9f601f2a8da149c8074a0813624be8ad4889038ba3","impliedFormat":99},{"version":"5cf87865e3a8b12bb8ddfb311846ff2eae24983faa365f53d9224fb182cd0269","impliedFormat":99},{"version":"98ef9c3f5f15c18abcd6fa9f12e93e1bbd608225501151603cce97642dbc961d","impliedFormat":99},{"version":"c80a56a10f1a8e01c4b7f08df6e9260ae076c910402dae8173fa6c7dcacc51fe","impliedFormat":99},{"version":"becca0fa1bbcc55ad69918f65f771b76904ac98b2563cb34f26fbe240c3d4db3","impliedFormat":99},{"version":"32b344c3765dc7c383516f3326c108ca84c33df44ece8ac789fce47d47ba8810","impliedFormat":99},{"version":"f7d6ecff9a4d631feeaf401c02bb87e26ddb38131c55d15a43b9290747390847","signature":"f774a7e8875649db68f5952801f001f3c316560ede472e5663af7a8c9c18f938"},{"version":"37f96daaddc2dd96712b2e86f3901f477ac01a5c2539b1bc07fd609d62039ee1","impliedFormat":1},{"version":"4faca872dbd194a17b3ee267bd8ddc3daf3d16df96f4e43a02c7d9a862022c4f","impliedFormat":99},{"version":"f89aeba83b1744a0d697c1b7fb8a06d8dc4cf7c0d469d2419772121f499efa8e","impliedFormat":99},{"version":"144a4e5780b800c0553949169f50be285eccbdb0298afd83ef2ae03fef77e2d2","impliedFormat":99},{"version":"66aeb47bf8638d6767f7b4ff684c2d794391c981590073025e98f98e1afed499","impliedFormat":99},{"version":"26748898fec8579096c776866e8e6f07754845b3d08f5ae98c3a59baa9e85c2e","impliedFormat":99},{"version":"6d805abd62920edbd9ed4b20be26d040d01529f3ce53fdab9ca4d0fa9b589f02","impliedFormat":99},{"version":"edbeff52e73b0ff82898142aaf8ffb336910a8ccdfc31b79960ea4ad4c9f407b","impliedFormat":99},{"version":"b64a8c7a27133db3f181199d21c0c582e86f38ba57a031a126b77229526b4916","impliedFormat":99},{"version":"f8d6e2784bb518d523898f614b8c0ae55341968c982d4617f08867b5d11cf354","impliedFormat":99},{"version":"97b02501eb45f487174d5a0ff89b6a95690d50e9eae242e2162118edd5f2705c","impliedFormat":99},{"version":"2b4276dde46aa2faf0dd86119999c76b81e6488cd6b0d0fcf9fb985769cd11c0","impliedFormat":99},{"version":"38d4cff03e87dc58bfd50ffe5a3fb25e6e6d4136a1282883285baf71d35967c5","impliedFormat":99},{"version":"5ecea63968444d55f7c3cf677cbec9525db9229953b34f06be0386a24b0fffd2","impliedFormat":99},{"version":"6ea9c8bf2ae4d47a0dbc2a1f9ac1e36c639b2ac9225c4d271c2f63a2faf24831","impliedFormat":99},{"version":"a3d603c46b55d51493799241b8a456169d36301cc926ff72c75f5480e7eb25bf","impliedFormat":99},{"version":"ad98c359284db8c984e88949b2c3394e4a35158880767b772491489788a6c5a0","impliedFormat":99},{"version":"5c117cca0b75ed634fe3085142a931df2e2214e26f2bbcb34c592b767f13c1e8","impliedFormat":99},{"version":"773c18e2bcc18598df8f8b2be930eb26b22608edf368e42e9ca3484828ec4122","impliedFormat":99},{"version":"f68896096cba0f06ffbf39a67c2280f6f2e5b90c75db56a3f9ae5f7f3bb54460","impliedFormat":99},{"version":"425a03d68f43164e0214b1c333cd58e777d4186f412b530467c18ef0d2b37a80","impliedFormat":99},{"version":"f9a591e5fe0be6728cc84e70325aacafffcf203b051ddef37d65651b43c05056","impliedFormat":99},{"version":"293c0a3e323608f4e20667acc74d7bdba727db954b840ee1db03f2fd5807c761","impliedFormat":99},{"version":"de8b4c367880fe92a0a740b706f08a46d1cf9e3981d55c2701e82423e81ef0ef","impliedFormat":99},{"version":"4a056a71ffda9ff3f2adec60c0189c906f7e46976a0c6650fa196674ff8c4dff","impliedFormat":99},{"version":"3a3fd6f5ca85ceeb293f2a010125f9455404958122b6dd0ba0b34f7dab74feb5","impliedFormat":99},{"version":"42b58bc8da11e9181ecf4ac498d41c74930c73c8ebef091474d0f8cf971b50ac","impliedFormat":99},{"version":"9e003336714371c98108af3dc53342829039327f8b1db97d826ca81805746b7f","impliedFormat":99},{"version":"d8954254110123f6f5c9fda6280674f6b853d47df7fc41c2090e741dc8b6b627","impliedFormat":99},{"version":"cc141bc69488825723b0d638491da8779c4c3e515712d5e1e63709e0136dfb2b","impliedFormat":99},{"version":"df600fddb7f36e4c4b3cc4e36073d0099a5b6352b88be02decf63869c8886313","impliedFormat":99},{"version":"9fe94c8f6b36cb41acd30d89567761a52246932dece21e1ce104baa2e84b07ac","impliedFormat":99},{"version":"5560b9471d610c2543dfaa66a88f7b7cf05cdac61a698d4106b3845b7b7b3b29","impliedFormat":99},{"version":"e80a0ca19ba1ea6d815b5017ce248fc817c076522d1b0f42f062a784897a30a7","impliedFormat":99},{"version":"e96bd939a55117abe6ccbc02839f2f4d9ce3893368fea528ca91c59ebddf496f","impliedFormat":99},{"version":"81f6bf27eedb1ed92466abfcee33795a6b2304691ae01f42e60f8c76894fade7","impliedFormat":99},{"version":"8ae2e6733fc535c43c514f871d28cb0fe5926238dbc3d64c978a1f6f00d73296","impliedFormat":99},{"version":"26a0c2d883e1ed55ba00810d957dedcde5d16d637e33063686e2bc3f58a5c64a","impliedFormat":99},{"version":"68099697ac4e919f6f1832389f32eb67d3d94fae744967f33e0cbc049a222a3a","impliedFormat":99},{"version":"bfb900f7de2066a4be644c269285fda8ccca40b065476a27b082173014d00467","impliedFormat":99},{"version":"fea750ade335a63f707e7fd7410cc11b81805f6b454880e1ed0e178c08fae8ee","impliedFormat":99},{"version":"7e2b8299e85423435784cc6244e2d559ea862d226e7b0ec871c6a53f88e5139f","impliedFormat":99},{"version":"8eca47167dadd486582ecd4e41f7fba6ae66cc4a4c5202f1f7acf34129a0dadf","impliedFormat":99},{"version":"755fc4f6a7aca9da7b38e1f7a39abd36538a72711763c741f1bbbf36f999b654","impliedFormat":99},{"version":"c4e79e849fd94553e07d7386552c472ea4f4fbfc9d280c012018fe7a6c50e598","impliedFormat":99},{"version":"062c0cf9641ca90ff3ad8edc61c2e06299fe6585fb9a4014a8acdf7f11810d51","impliedFormat":99},{"version":"c6f1c0398ad0faa03c5233d82177f636eb9fffd57744651af99b58f8f7915b8f","impliedFormat":99},{"version":"a06e692360fe0d1634250402c3b49a702f067f14c8ba8bcbd33904185e5d5499","impliedFormat":99},{"version":"6047c429574e9ceb94869ce7ab00072238e510f564ee4ae6ec3814b76cdce529","impliedFormat":99},{"version":"ffd2755493fc2319484fb7ac5cc05495cce0f78d1e2d552bc4422f329b73f4de","impliedFormat":99},{"version":"546d955d02e97715e6695474786af5a06c19229adc5fe8fdfe514771ae213211","impliedFormat":99},{"version":"634c90cb73a14987ce89baf22d1096812058737f62ddfd58ea48a29284e57927","impliedFormat":99},{"version":"c450c0dd1017947e3cded19df31cc2b63df4d4c94af45b58e8fba009364af2f9","impliedFormat":99},{"version":"00ec6732d15b24c301e967de238c4a75cf7b8b87d5b0e9924052d0bc97978193","impliedFormat":99},{"version":"eb7f907ec09c730f66cfaef2aee237c86e43eed68bcb794db7f81fcecb01c577","impliedFormat":99},{"version":"2f00cb77390cae0ce2c09d3a2d9a68da5776a70c771373e402d6a6810a360158","impliedFormat":99},{"version":"28c9a13154b55a80df9262638c51da112c6e3f4aaec8dc1677d050d1a1932ae4","impliedFormat":99},{"version":"0eb30dfdea5fb0bc646ece93f7e368e39f63a846c28728eaa3714ae67ebf4a4b","impliedFormat":99},{"version":"acaec9f749a5b8a1f5e0cdc476ee3ea7b6098571799d0a70d47968de441f80d5","impliedFormat":99},{"version":"ed79b8c359c9a83c2d1060bf25695544717177fe01df12b122f9a2241e9b7f08","impliedFormat":99},{"version":"db3e3d27b585f5b9d9b04a2a763e92a22e765ee3e22f02c43689f5e65c5c687b","impliedFormat":99},{"version":"2147d73f1aa38755442b0adbf444a75bb491980a494a95ad972fd953a08ea1d5","impliedFormat":99},{"version":"b12c24f2cd76dbd7e55c5019013d8e8feaad967fbcde4a1760abda4805e43572","impliedFormat":99},{"version":"62d30429d222ea6faafe408fe136c3a1e9df0cde180b0dba5fa4ebd77c0807ee","impliedFormat":99},{"version":"1bdf6a7ba0426bb182fc554488c456a7fe30beedfd15889feddac3581f37dbd4","impliedFormat":99},{"version":"cc3ad501f0214a90cea0e9836890e53f6c3fe0eb1c592862433c80a47989a75c","impliedFormat":99},{"version":"8d85753422eb5125948ea3559874709179eeaf56a58aebaa70b68923de0d6039","impliedFormat":99},{"version":"3bbde357e5d8d70cd29460e158586f4ff7c57e12d4ae997ad5368d6431a5e892","impliedFormat":99},{"version":"d2000199162496a4e85e7ddc9ea0ab05286737b6acb6b8390100fac220e8cb77","impliedFormat":99},{"version":"abc7596044b80fde671f7b0840b09be06525e50917557828cd3430785abe7927","impliedFormat":99},{"version":"faf9a217d8d237b02ab6d95508d8736ae431bbeb38d98885eb5b8fb6dbe48cec","impliedFormat":99},{"version":"1bc8fe760358bb78c737ae2505ab76e78da94a7c6c5e3614fd85f5e736ae7b4d","impliedFormat":99},{"version":"838c1878bc1ec773ca2b72ecc544d0f5b8913711fa8cb2b7f14cef8259743669","impliedFormat":99},{"version":"74b564cd3da8f83d5e472a5b0cc53bf7e276b25576097cb89e6f67caf95b12dc","impliedFormat":99},{"version":"51b6335f5a8e177306647558a3eefa1f6abe259b283c6462223be3d7d0f33300","impliedFormat":99},{"version":"6c26ff3196da213d6fd1e7a73ea96d2c2e52d619284f7c4cea38c441648d4237","impliedFormat":99},{"version":"d0db671cc543e88f9759c1bb7c3d7434e3db899644b20058125635fdd0310573","impliedFormat":99},{"version":"5c43e8a614e16623ed2186c9c7975ca6721f1de9998a2f2b0bd1d9f7938ff16b","impliedFormat":99},{"version":"7845eadb13706afd8d13785b4394674f9150b0ddb77685ed3f5208db6e565fcf","impliedFormat":99},{"version":"2416f55bd1a6bdce90be79529d96a9744c6f803b69df4a8ad9e03b49c0d00b2e","impliedFormat":99},{"version":"98ef8272d45209f1b35eca26902e5f89ba9c4d9fa3ff517affad5289939d8000","impliedFormat":99},{"version":"fc1d2ee8ab07469899ab4434aa246616206876224f23482664c7e5712a9fdf89","impliedFormat":99},{"version":"fbaa490957118d790241f9a8a461fe2747f958e9e9b9997464627bcb006e5590","impliedFormat":99},{"version":"4dbfab1cb3f916f04757d5eefa0b36f038df9aa5922422aa125c9a98a55c0596","impliedFormat":99},{"version":"7c8f26df5230a0dfb5f0bef1a71c8e47c1498a0352a24fecfda35582c6acbebc","impliedFormat":99},{"version":"42447d5ee4c8a43ea24fae30f3aacbb78c5e41a97a8d61f17b119c1fd87d957a","impliedFormat":99},{"version":"6e01fa85be38220b758b349cfaa4153ea23a46100c0ccf7269909b49dd35630f","impliedFormat":99},{"version":"cb0803aafc70fb621d956cec2e48336dca19765d6426a9f8e7544fbb60ca1a8c","impliedFormat":99},{"version":"f0a6673466cf44bdcbd6ef97f40621724849bdfe1a0a4df022f0f7d3e96305bb","impliedFormat":99},{"version":"bfca46214cd7281a43728729cf88b3514ed18fcf3b29213c723920b3111449f1","impliedFormat":99},{"version":"572ae28827f722eaad5435b0f81b819d55cffd12ad4b068dd28579135fb44576","impliedFormat":99},{"version":"fd413d87e8bf7a8e523c70d194b2c3279016d1ec733a9db43640cc1e0cabde6f","impliedFormat":99},{"version":"ef11d500b473d6757129c0d87610d42d3785ef8a2a3989b426d00980b981cc1e","impliedFormat":99},{"version":"25ada8b073df8f9b669aa007ee66298095904b83236652ee940d827c2ed5fe9b","impliedFormat":99},{"version":"017f64eb742469714e498c1c6ef15fbed70fc3345ce6ee5a35e7ff01a3322436","impliedFormat":99},{"version":"b62d96002ec0c8710d0e99aa3175434e1df0f22f5a09291b19e5ec05e8a877e6","impliedFormat":99},{"version":"95811af86fde4fa3e455b3c89e55e545068c4c2ef8aaf9dc1b46fc54d88ce096","impliedFormat":99},{"version":"6a8c18802b20e90d8fcd349e3358bc998f51fd481c6ae7c6449344cf783e1906","impliedFormat":99},{"version":"47039aa29dad4b33704e9ab56ca4ea4c918aaf86afdcd4e059f9dc6045850b6d","impliedFormat":99},{"version":"433839016857a5a785134d2d5e760fdcc9819d241a3ffb5cb76985e666a34a8c","impliedFormat":99},{"version":"ef23a7b386401847e3b4c3ed1b087c32d56e7307b2782aa2f0d0ff4f02d70473","impliedFormat":99},{"version":"2dfa6d1aea770ef46bd51a79cfb7aa10b9ae90c9971eb53b4f5def028425c800","impliedFormat":99},{"version":"66cd137411911fea6db4b352a98279470e386eb3b1cac5db3de1efad678a9015","impliedFormat":99},{"version":"f8d95db2d66d268765d447b554dffdb3f1cd2a22e8da7f6f57dfdcad6a19a1e8","impliedFormat":99},{"version":"b9039512a27d6a5a687011f0af8ccb0adcc07218a8ddbb4b5ae02d62fece2742","impliedFormat":99},{"version":"d11ebedbe79c2e165456a142132ab453b2572938ed76a6fe9324914363b7d6ac","impliedFormat":99},{"version":"f6ba66f3f6c4409e878f48161529c585b3c0e687c8917dd8f6c6464fc5cd4f8e","impliedFormat":99},{"version":"0366e97d9c966d748ad91b782e8ce843ebb692d93a1d211ef5b84cccbe8f53a8","impliedFormat":99},{"version":"b6df34a835cf5bed07333f5e8880e691c9115f1695c61e7dfcf58aa4310db48d","impliedFormat":99},{"version":"b86777df5a816b1b1a2b12a017a8ef8f14ea2fb1a533d1e18e956ced70ac9d28","impliedFormat":99},{"version":"7c309d060d5df0f4c847ff2bce0bd86e33f1ac296194bb4255a66fd13688a9f5","impliedFormat":99},{"version":"f62b4345a66966ceed899441fcec00347daf8c48fc106ac1ff199c84b2738050","impliedFormat":99},{"version":"ab95baa99c5dc2a49bd1d1c00d90955088463e675f4eb869008a357b5b02d6fe","impliedFormat":99},{"version":"7980ab0dad3e7e1eb6e9873231d45f3860864c84c48608267864e4774c4bf39d","impliedFormat":99},{"version":"845b523a3ca13e3fbd496a579aaf51875d60e15ee56f4be60a358dfd87699afe","impliedFormat":99},{"version":"8795c42880ebe333462fb815ecceb525fef2dcdc7b5df056fc67c1cb78199d9a","impliedFormat":99},{"version":"32c98d5e98a05f108f4e405c853db481f83c5a1a9cd6c53870501d8248f9afad","impliedFormat":99},{"version":"bd678ad316e38a4af6e118fb523405ad251ac1bf60479e0e3a10cbadcca69b1a","impliedFormat":99},{"version":"60119e79d11114ef39c8659d9f83c1be11a90cbb2c7e871f540db587d77927bc","impliedFormat":99},{"version":"09e800ec9676338e9462d95f0fb29afbdcc06e69e2676308589c177a5310a15b","impliedFormat":99},{"version":"77f80829050d1e46e800e778653292bdf1242e23c1a0107bb5531c9a8511cc62","impliedFormat":99},{"version":"17939fd2919b3a627774a91326526584824b5a1561e272b971d5a4ee53045b2c","impliedFormat":99},{"version":"569c96350d1f50807ca9142ca0f0071fe99d54b8d273decb0494a53d24acc7be","impliedFormat":99},{"version":"9f2a1b2d492d696451cf36e9b937957ab636d579973a303ba7868bd3926dca90","impliedFormat":99},{"version":"df506f8ab6bcab64cd24be5e65bcf12b959d1d00cd9127d73afc59ba4062867c","impliedFormat":99},{"version":"ecb5aeb3771bea2795b5f4c0f79036c061c3a2bfe0b1d5a83d9183a43e38cd9c","impliedFormat":99},{"version":"31a63b6b49338cc6ddb1a318beda72d3d8fd523e50f8dd5d5ff3accd39a490d7","impliedFormat":99},{"version":"8fc7615fb8fa095406f5a58b1b817b9a685c516058877a3d2c06d4545fdf5dbe","impliedFormat":99},{"version":"f70e9fcb8172de822a729503eefece37f169e063cd7f97a978e3913dc872a82f","impliedFormat":99},{"version":"d5da26af31358a4883edb6112879018b14c7c1fbcc457aa36961b03ee17bedea","impliedFormat":99},{"version":"4e93fb2d2c59bbc1f1a5211b36c447efe4d0af568d682ef1e5eb5f84ca6ccc2e","impliedFormat":99},{"version":"3d13fe973e92e708ad3dbbf1b2385bb799f8e70c8da71a1ac72fcb5521c8a5e9","impliedFormat":99},{"version":"16f3f66b5182e57c554d0e374e29fdc0a899c1321b3f94fa997d19abf9faf931","impliedFormat":99},{"version":"df459c67b9eef71318851331b23926961f0476b4b9d1674addcb627eabe583b2","impliedFormat":99},{"version":"b93915733f1802a8d9093116a5e660385afda0f72a5bab9c9bd356549a61f1cd","impliedFormat":99},{"version":"1dfb1491b28cf3734f3c07745a56d7758a12d546f81a70fbfe8ee9faeb528c54","impliedFormat":99},{"version":"42b00a511331c7f79039ae3be83fd5941b212ce193654c3ac5d82157227b69ad","impliedFormat":99},{"version":"1a5914065c7c6e2b6e98437c4ba6059bfeda3441f0f55cb07189df1e78698922","impliedFormat":99},{"version":"66d3f42196f32c639d8240bbd520852abc024d673c713bc5ab26b4bdde750a74","impliedFormat":99},{"version":"18ce9175445b3edec11bbca1c682a8f3919e74fb3504abd883ac462ea8089a0d","impliedFormat":99},{"version":"aec96f94a27fc61d5f4ead202628e811199f887d48bb7614b7e1706b629cd1ba","impliedFormat":99},{"version":"2ab01a0368f65b3b891e25416ae785dca54808f70d8f6204b99589ed4f7f1d2f","impliedFormat":99},{"version":"efd87ca2190e2d0f905e30343443c8d2f0d32cb2b1c9e05b2cb97b0061abec08","impliedFormat":99},{"version":"3323edd649d2c85d3528912cdf6fb770258d59d75241575fcf25c7850837de79","impliedFormat":99},{"version":"e0c8deca5262879f11ee84fe6664dcd197a60f546930363bf2d78d37c3138c69","impliedFormat":99},{"version":"3b8ba0456ce7763676505d103eb336a6b97659d6fc8a7d7d186558ea0b8c7ea5","impliedFormat":99},{"version":"7bae4a3f50a844fcbdc504d717f5f13dd7178ca99f131b230305db6b55e1dbc3","impliedFormat":99},{"version":"f3a4668046e42e9f5ebfdc8b79238eb27c399443dd1dcfcd4c4c3652692ed031","impliedFormat":99},{"version":"07160ad59d49c6f2999f9703542918df3eb1ef93857bc560b4baa7c6775d22ce","impliedFormat":99},{"version":"642d33e1e66ab109cdcc5a5b5535535768c8b642fd5ef75de4d77de3a5632601","impliedFormat":99},{"version":"3859635347ecc10d4ff5dd68bde66420f5a8539b7313dd62020aa025208d2222","impliedFormat":99},{"version":"f49e8feb6d7473579a5ceb5872598bbc1be3723da653993472720629c72fa0ba","impliedFormat":99},{"version":"14c727434cfe6a078b51a88d005033ad01a76bec36292d7b47369d82e48e1cb0","impliedFormat":99},{"version":"b6cc07bc56c7418ab500421d2629c26acdb6ec2e9af85c5e2c5d7e8c9f92566d","impliedFormat":99},{"version":"d9c1075a7b3547a76f0e4bb8e8c91b7f084b561bb929d437a320fe30dd5a5403","impliedFormat":99},{"version":"53adb1224146150628fd59d35c5a3f3f69629a649052c34ef6ee5186cc911c81","impliedFormat":99},{"version":"7bd99bb2dd0c498dc77015c34771b76d5e5751f52a19124fa0a166d915b5d9e3","impliedFormat":99},{"version":"b03aa91aef645f9856216a2223a47001a84954caf37b7ffb1d63d1327b4231fe","impliedFormat":99},{"version":"2d982c7dba93b9bcabb045898b00e62dd09919b2b35ee63c42880b22494a7ad8","impliedFormat":99},{"version":"cfcb85724714ed6320c09fddcffed5ac71069125cd5b9957406c920dfd4c16ec","impliedFormat":99},{"version":"7142177cf3158dad7b42726ea15c78512dbad6370117509c8eadefcedae72534","impliedFormat":99},{"version":"9322da0c85b107feebedf3005249cb863f4e03736c4b8ab3edcbfcc29981d13b","impliedFormat":99},{"version":"54a730e06094b37f96436ccc8e736bb65b74d256439bf1663344e3fab16d2246","impliedFormat":99},{"version":"bf7e54566eca40b272b32db46261a7ed9bed3e57c7f763d27938a50ddde39411","impliedFormat":99},{"version":"275f0d7153ec08e13d76f1b3e2bb14cadae3b9cf4584db736873d26385a39c43","impliedFormat":99},{"version":"4e8b929462a5c46c53151f6e7519a06e31ea6754a735c942d9ac5d8b535a46fd","impliedFormat":99},{"version":"9feba204a816a0bd46302bf79a40d24a07ce2e112fbc9e471fe78a0e6270cafe","impliedFormat":99},{"version":"71f9aa0443d5bae1667ddbaed2643fb4ccb6f186d5817cc4000360680d329e36","impliedFormat":99},{"version":"b49cc39cc4756d9b5eccd9fbcf800f7c2ac106b5f347ab8f62ea1fe6b91730f0","impliedFormat":99},{"version":"fb86482b9281432d3f09e37234d11e168ac12726c3780e37ca528b9655f121d6","impliedFormat":99},{"version":"5507eba2168bc01b2dbb87374571971b7df7578bb964024f7de2efb110e31d8c","impliedFormat":99},{"version":"0fc6e179087e933a1cbbc89ba26a3747bf87f6021cc9964098af940bc5da04bf","impliedFormat":99},{"version":"488ca0f6d7534a445f6b436a5dd947e3b9059b8f923eeceb0003b14bc8ba2327","impliedFormat":99},{"version":"542d54e6e9763fdc10c02275a0efde153ff4cf9a3bd4d862653a9344b1ca4e75","impliedFormat":99},{"version":"9ef7caf52e244889adfe4f675c36a82adfdc8a7016aeefe333dc10f930e77722","impliedFormat":99},{"version":"c41d4fe5ea1bc9866b9a65949e4467e7164d2ec57b542fc1bd2ccf917a333629","impliedFormat":99},{"version":"a93626ded4c88421ac4e27150b0e11a514683a25f54d6639347a66652e118c9a","impliedFormat":99},{"version":"5804ffbc65b78751fd510218b90827a7ca677ca34a45b4709a00783b658cbaba","impliedFormat":99},{"version":"f9ddadd89c92a88bcf73068883035f3995a1cf7f9c850704c48df35d632e2c67","impliedFormat":99},{"version":"e2e4e22df9eb40e9018e5be0b7c304c53311fb812c3976bff4bddb263c7c5c06","impliedFormat":99},{"version":"88415d6dff3766b93b1f7d98d80778319f71338b85c6b976c220af1ad6a87e62","impliedFormat":99},{"version":"96075eb4d7f8921875074b980853e23a28b616644be6cf2f67d1e8ef83b1e282","impliedFormat":99},{"version":"c29921af69f3db7348ed27915972a51cddde446ac029fface772271c085eacbb","impliedFormat":99},{"version":"e4a58769bce747f03a3606f55e84690c2003f754ab4354a27ac6aba30eef01bb","impliedFormat":99},{"version":"f75aafc4e058d8f8086fcd7ca4e5e66f1b03a9d1a34c8ae2199b2b6e93292529","impliedFormat":99},{"version":"c179c095d5ea3dc914e3c4b2a1b2d79913623ae32480fda7c3517b35aaa4f459","impliedFormat":99},{"version":"7dfcc5f32fd73d26d849530d15ab3459a60d296c13dee963fb2cbc5b78052d0f","impliedFormat":99},{"version":"930c6bd33500b62b1338a60a9a5bc3a2d57267ac49ba66d75917cb1fda319238","impliedFormat":99},{"version":"f1dee245bac4860d8eeea5d5e7c8d7840cd3b2938e2a22f1a6b98c76617b2460","impliedFormat":99},{"version":"ae8a68cf0adad59ea1b6e86f51588d809fca647b917bb0f92c155b6023b09e4d","impliedFormat":99},{"version":"ac0dcf28e390ac8d64abe3a5360ed528a1e4e71eee1fbe5ddf091252c77cddbb","impliedFormat":99},{"version":"6f991230de1286498f9255a25e2d2775622b2a4a01c0e11f28420b8406939da9","impliedFormat":99},{"version":"a870f299693c05120fc13dee17732dc3ed944a71f3dd3c6d65207e6a438b5ad7","impliedFormat":99},{"version":"094cb87fd48e70fcad081ba6ae1f74f9edab2d1329115036fb9c3a389ce3eacd","impliedFormat":99},{"version":"2f3bd6cfa61545179b57e57477fcc3730eb4330329b02bc92d4047ef5cb297a3","impliedFormat":99},{"version":"4a0be6234a190079827c8909b3ec1949d44434ada4d898450b5fb330cc64551d","impliedFormat":99},{"version":"28bdaf936bc3792e20a906ce59550aa56fbe62ec1a575421202cca5bb347941c","impliedFormat":99},{"version":"a1b2194fa0e559036a7a20b3aa5e2f1b9223e2e0970749f86b2b986a5e7fb7f4","impliedFormat":99},{"version":"312211490ce881af3f933b44112667553d75a47d1d1535a32b6d670acec5526c","impliedFormat":99},{"version":"bdd28704a9d5e5f01335c82fab4079572961d9b757b91e3c491def418641db0c","impliedFormat":99},{"version":"688f9a3d70471ece7275fea4b51deff241ea6525394fbbcad89829b211b004a4","impliedFormat":99},{"version":"b44446c5aec3087ea1187db157e783d53e1705fecf7464340486668bac89be80","impliedFormat":99},{"version":"8e551cda9ceaeac0ed69fa73b16de6ec53b41a07309b2af1922425132e90ca8f","impliedFormat":99},{"version":"1f357a80231861ee269346567026801dadb832b62b2c1daf4c66afe8628e9a7c","impliedFormat":99},{"version":"697caf9cc3248e52a45104109102bdbd918c83a8a8cf949d0c1ff18591819a75","impliedFormat":99},{"version":"3d7ed7f00bb47182b1436fde7e6262147ce38c6678d911077363f58b6a9032e0","impliedFormat":99},{"version":"494e42e7469a396cb0bfba116983ad5a571b4496e3ea3fe171893b95f31c6e32","impliedFormat":99},{"version":"edf5814e0546be709b86305581266cbd8609a4cb5e3d416a2cf8290927d3feb0","impliedFormat":99},{"version":"bf640b4000df55cec22005e8888c34661605d15d37fbc6fa52e34b8c5ad248de","impliedFormat":99},{"version":"7fc0767a36586b5ec2307e6d3926b047066d9b1cc5e3be12efec83af5822173e","impliedFormat":99},{"version":"2b5177892e7b27a3597ecb4769c9e048dff0610ac1a5312202f2ba595f2b09d2","impliedFormat":99},{"version":"dffbd270006e6d1eb7e54019953f568f745fbad1f286e6b6f9700c713dd9d71d","impliedFormat":99},{"version":"3209d42dcb86b35a13c127fc39981a644b61a1fb0e59524038d0f3bd7fe25768","impliedFormat":99},{"version":"04066614e03bc94d4d8d93f01375a63412edbc8a544951c30038383cde3cdeb0","impliedFormat":99},{"version":"00861cf1f6f2a140acc65df08e5f6b8271501996a1e216307e2f9a6c76424a80","impliedFormat":99},{"version":"599ea73f6d3589a31f85b81b0eadc24d084d17d78907a5836695deb2cc5146d7","impliedFormat":99},{"version":"d9bcc03f7bda0519079ad03e578ad4b0d141f3e46592373d26bb45dc0ff555d6","impliedFormat":99},{"version":"fb28aed3ac7d66b3aa9ffc1ee1b32cca95f6534efbbe17dd03f161f2a5c9d138","impliedFormat":99},{"version":"1ff2c4fdb6195074f0579878fdb436a371cf6c899bbd02fe19b8e115ed33c3b2","impliedFormat":99},{"version":"9fe651fc8a5eeae070c48667be2c4321013dbf5e201a5a9e0aa7937ad9cd86e9","impliedFormat":99},{"version":"fa6df0af2818d39dcccafa76a485baf0944292ecaf7acc623acdc5832149f796","impliedFormat":99},{"version":"bf2f4914e8b356a9907f7b347f984d4cb8efd2fd359d443793c52d55d9f2abb6","impliedFormat":99},{"version":"4d372ab48ae91c4107d54d66a62aed755d61b56cf5b518b643f1e8e9df3eea21","impliedFormat":99},{"version":"23b3087d67996b84f57f97e8ef2f616544f696eaa38f5c801e29b91409845b41","impliedFormat":99},{"version":"ebf7cac1e696dda90c2be13c4326ff63fb38f6cacf27cc49d8f0ba2abb6a6537","impliedFormat":99},{"version":"74abab6e2be2eb926eee4b60991d5001dd6efd54b762b91e00d6e58c05b042e1","impliedFormat":99},{"version":"a500d403b4be304df9543550d1ba58af869359149599ae64f5d8bfa3112d328c","impliedFormat":99},{"version":"97195a565be7b72d62c4e392be924e5092f0f2e09246bc43f072ba428cd9d6ee","impliedFormat":99},{"version":"5bb81a9aa2387411321b9f1f5c021b6303428634bee563c9a8f1cd388b1be443","impliedFormat":99},{"version":"312296fbd80241ad8f985580f10db0d2f721a1c8f2fd8cbfeccd809bd33e97b6","impliedFormat":99},{"version":"9c160cf18020aec7bd1deac84fb3bda1a03c590ceae2bc5c150ab037dd226886","impliedFormat":99},{"version":"4b966b4f48c930b166a0058b0d8aadcf0b111135b99a6297aaaad1528c42ed97","impliedFormat":99},{"version":"34391457fcd53de5686ceb29e1c809717918358d78f2832ffe1520edddcda564","impliedFormat":99},{"version":"49434614b9d3e50020be6fdd4fe414c7188e230f397d00a6f6228c400f420860","impliedFormat":99},{"version":"6630339cff93a7090d4d4853453fb6e8ae3eb5de8b4097ec20307da179cd01b5","impliedFormat":99},{"version":"bb5091e3d36c153395ee8a8fd0251e5210a861f3c32a2a277a7380fd2c963762","impliedFormat":99},{"version":"f72a16c4d1741836fe27671daff9ca81d89335e7576308a800bd90f8ef3c57a1","impliedFormat":99},{"version":"9ab1a6e40ea9c023fdf1acd3dac4c78ded74107266da619b72c7eff7af366463","impliedFormat":99},{"version":"db17327ad596824321aefdfa22cc1d45d9fe3192fc8fefe4ad17dafe93c739c3","impliedFormat":99},{"version":"65adf40b48468731c55ca36c7c16fbc841bcebcf0285f8cac3b64c16043bff6b","impliedFormat":99},{"version":"b3850b32553f1be8a58b73a50c962d08b804a1aa629b381d599bf1dea1a16dcb","impliedFormat":99},{"version":"3e0cdc2b81450f206bebc0ec846fd23287f5d0877207a357e995a48e57a817c2","impliedFormat":99},{"version":"843970d8488c7d852f90823c88f3fb5925fec0d649c35be1a8be1b9b8884d19d","impliedFormat":99},{"version":"d10c2f3cd86ee5701260d77dfef2365a166b4d5549e0995c71ac8afc732be06b","impliedFormat":99},{"version":"ab483ea9b43ff8d5c1a1d15f25a425edcdd2d56f93fcd14ff1f457fc914f87d0","impliedFormat":99},{"version":"7b928049f4bb3f15bca40fc7d57ff661cdb6c24a7b235fc8fa083f4dc863ede3","impliedFormat":99},{"version":"2693d3e219283d2bb133924f0bdfd8aed628ff62b3857a6de107282a4c145dd9","impliedFormat":99},{"version":"28c2416835913e9fff8766e5dfb8281f7dcec21e5aa530e84f82be8bfce7c319","impliedFormat":99},{"version":"b0d7aad2d62dae4bee5d5ede4ad4771cdbd5a5da17469da06063d3c3e9309dc7","impliedFormat":99},{"version":"2e73ce1cc735fa0c03af07b0dd40b90bfc7bd5cc11d6271a9a965f0403cf69d9","impliedFormat":99},{"version":"753b3efbdc07a3d9993a8fff8295f7b4f95663e308ea85efc7a0c1ffd2ef116f","impliedFormat":99},{"version":"663dcda40cdeda059c58edc42c267f8cd43d0ea7b654479db13698225c9194cf","impliedFormat":99},{"version":"e9e0b502312db594634de99abc4a0becaa67c69faf5531f66d7495e0bd5f5e0b","impliedFormat":99},{"version":"dd8ace76e65e7f7928d2fa8dd862005ca0956704bfd784c8b17240db7e2b6285","impliedFormat":99},{"version":"32fef2013b3ba81f37989a4dc53980b4ec9e99f8b72eb56a1d3014a8023dbdfe","impliedFormat":99},{"version":"b0aa5026e072714b47dc6e37c0fccfa920f0d34ce3a23e4e6c1de14fa43bb5cb","impliedFormat":99},{"version":"ccca7c55f7360afd3cc343bb2ea943e399c3939df2eff5c7da541110a187de5e","impliedFormat":99},{"version":"5e12805b0500eb4a9f6a8bce9db8c65e5e182fa993d2b8fa65a003f3ceba5ff2","impliedFormat":99},{"version":"5c92b3772bdbd60cd5cec1f2a8c0ff75425efd527a315b9d98b38b9bc6aedc84","impliedFormat":99},{"version":"c79752b70dcb13137ee7bf01e6add89298c15e0d773d4c6faf56c1caa5d997bb","impliedFormat":99},{"version":"7e44cb4862e072b762134c46b95bc3e86124439931ae85159e845d0ca2166bb0","impliedFormat":99},{"version":"da08c6b6a9bce701e6d2775ac410ddb2a7189e19b020abea06c1932226248ae9","impliedFormat":99},{"version":"2abf45177ecaca091e103f4d9557a7e8524d160b28a8dd457dcb7defca65245c","impliedFormat":99},{"version":"bb2b81bc35df3045d588a60ac6649c7b45f539c855660642ff1c12e9b83fbf1e","impliedFormat":99},{"version":"acd4a1daff6df3526b17094f8f30ef3c9c19c9bd5bb95c3fa46a1b8037290778","impliedFormat":99},{"version":"b719a8ea8321a8d636c2765f8b5f8efd20a43f8f7922dac4f2f7ce7e361ce233","impliedFormat":99},{"version":"2673620ee9cb5e62777ceeea4e84f0c53a2bea44d74f103ece49bfb7efe95aec","impliedFormat":99},{"version":"77d542e6871aea7774c7482cdedd9ca20cb03145ab9112e6845a1cc77b7b6c00","impliedFormat":99},{"version":"ab2a3d386e021bf5619d581692f14aac01bef911457d9960ef6c21d9b97c1c06","impliedFormat":99},{"version":"0f2d99aaa9d3574828b6f8c1912208e370a041d640497679ccf4a4f5e073efb3","impliedFormat":99},{"version":"466e0183c786efd5a3e1b69d6e0e445c77d771598871c9929137184206362b80","impliedFormat":99},{"version":"49149ce82e10dfa69eb4fb250755ffe74107279286aaf8305ffeb201a0a96658","impliedFormat":99},{"version":"ad06dc58b3a23a89eecc369690d5cf5ec2d141009fff32cdd68b94ad8de375c3","impliedFormat":99},{"version":"f2b23f711dc15c9ba970626eb5e654d4e7401177b13d16085751f40dd1d77d17","impliedFormat":99},{"version":"b958c46e432e3a260af58b20ed0fdc4f3ca0c02bbdcbf12f63113c1a1932b57c","impliedFormat":99},{"version":"7e560e86bc8f0793454de297413f0ee411418d71b0f002563ddffb26b2f8a438","impliedFormat":99},{"version":"808a1b31fb436c3f1c3bc9307623234442cdb742fac3cd39bd0e8cf4797f86a4","impliedFormat":99},{"version":"ec8657eae496906e9c2bf18ddf1f276d6472cd7b42975c609fe49db7d10c4716","impliedFormat":99},{"version":"8834848635faaf4a4c1b77936a3790515df4989872d12e1f586a903ba8a96d32","impliedFormat":99},{"version":"3c9e08a6171b77f9409f6fbeee92cc7cec90295165305f4749c15b66984094b7","impliedFormat":99},{"version":"d5f52fef25eebd772b28fe3acd0ef103cb3d338c73fd23dae81235aa3d3216f3","impliedFormat":99},{"version":"f911612fe6fbb59498bd042d845e42091b622ff60d62f62899ae9c9061da04db","impliedFormat":99},{"version":"df8d828dcc7036d38beba1b517c8bb7cbe632e23cd13819aac0b7454714d7ea5","impliedFormat":99},{"version":"6b97572b898559bde5ead60c3df72bea74dee67a9497f40ca2063af7cdf84bcf","impliedFormat":99},{"version":"d4c1d20b42f4c4b6710aae2ea61f16b05688871fc88c50164be241001c2ed2fb","impliedFormat":99},{"version":"4e93f1e1aed54628991b8092a5eff614ebd874ab3ff1f18903fb1ddd7543a45b","impliedFormat":99},{"version":"3758c87b27039448554b38154244bcc524735bee89342626ff9eb05b8834d05d","impliedFormat":99},{"version":"17e94aa1431a293fbb231edc284dc251555908f46e40b7648574725bd7acfbc6","impliedFormat":99},{"version":"0e1cab758e8f8c92c6d1b8b2a51fe46c31db41c462aaa21bd05929e3facd8b1e","impliedFormat":99},{"version":"6d37cb963c5288b5225af7fa9d072c429920718fa87d8352f72b5b80978aaf0b","impliedFormat":99},{"version":"e429692aefa26a42888b1e63959688bc0c75ef34fd3eb7c246f32b8872aeeb31","impliedFormat":99},{"version":"ad7c8d67cb12d757804393e00b2b8d239667baf6f2fc576fb1c5daf59b288e7c","impliedFormat":99},{"version":"67553438922bac8ec79650768845ef88fca14983aae0ba1cadbfe543d56553a8","impliedFormat":99},{"version":"a4c6df9b9e7bbbc62cb768cb720bdbdc64567fb119d96f55c6ef19a080714246","impliedFormat":99},{"version":"3b7ae137c1c123a48201c848bd32cd6c2d97ed379761428628e76c4ccfa23076","impliedFormat":99},{"version":"f539686c6416fe847b45817a61a19444bc651cc0ed15fb98533916d19f02153c","impliedFormat":99},{"version":"111346e95c27db969bebdf620d68008685571fb01e07c4f9c722f600f5fdda3e","impliedFormat":99},{"version":"a482905e0aed325e2f3cfd61de96fbf7c11e068e79c65f1974948d8962b85c2e","impliedFormat":99},{"version":"e42b4dcb146a1b8dc938bde576005cdf7ec5c98312d2b992ae21a2858765ff21","impliedFormat":99},{"version":"caa109210ba4d1e129e84c3f8d1ef650ea49fe3bf1e6e350083970556c5a0cf4","impliedFormat":99},{"version":"4b3035f436869dc5da9815cb51a371a972fe31e2515c5dc594b3d74ddb701bee","impliedFormat":99},{"version":"13e18664181a3e017dcd8d6da49baf9d039092717810b0c7ca28fa50e3c8734f","impliedFormat":99},{"version":"4c5e59edd69c043995739483a5a88f7bf766c74fdfaf774ce452d772bc45d2ee","impliedFormat":99},{"version":"a3e732e8dbd82dc42bcc233174115bcfc46c8a38b8f242c3805ca813e50ca65c","impliedFormat":99},{"version":"5b848c83ced5eed8cd86a1d6423fdb049c4d30c40399962e95cc4349e3d14387","impliedFormat":99},{"version":"13b1bb5f1ef16e4158d4797082c1bb3aa64f94770ef09913042115c7a16448b2","impliedFormat":99},{"version":"6a6b525b0b5eeed4f13df317533ac5c652d2881b77007889c55d8200cfe52ab1","impliedFormat":99},{"version":"31aa6ac8e6ea18d4826f74d784e8c67e21f7e3002a4a91f88249f9029a0c5655","impliedFormat":99},{"version":"182684b05cb83f74f1789cc9a21752b7638ee64e3a8bab11dcd0debe5cdc7056","impliedFormat":99},{"version":"ec455fb31d11dc3782f7c7bc81bc1ffee91e360b66ee6a55ee8135c896a9b0cd","impliedFormat":99},{"version":"2be8a2b3e409b62c796ee7589d488afedcffc57b4f3a403abc8c1ae9ba568995","impliedFormat":99},{"version":"7022da6a9c58eee4317bc9ed61af467e92ade72a59f9e3785ab7fe8badcb9a35","impliedFormat":99},{"version":"5692c147dca7d616c0c8f2e8c533515c94457b7232fa255970102aebebaf3fc2","impliedFormat":99},{"version":"f2c6f9d179a757baad9dd06349a3a9ccba653aa23b562f78edd67f8b1aaf3e6b","impliedFormat":99},{"version":"a97e0fea0ab50bceccc582e21eab30bdcfb4336df84ba51ac633fc1331ad6e90","impliedFormat":99},{"version":"3c6404057e4070bd93fd138898709d4319d89d35ee589cc46e2fa6996ed5564d","impliedFormat":99},{"version":"59ec53aae4cb5a602660390aab1cbddfc30a8ade8827395ee2e3b30e579377a5","impliedFormat":99},{"version":"1a6bede7c2fdcf397e002644aabbd42b96af4192d72d15ffd90710b288049683","impliedFormat":99},{"version":"199e7d81a0c106da265c07d3e18766f32e4901d7051c46a724a4069d2915d9e5","impliedFormat":99},{"version":"7c9ede5570eb247348c890cbe6010603d9b557386fd357f15118bf38b3ce77ae","impliedFormat":99},{"version":"9b1fbe127225f3450179df062eff4c9c40bc5fd558e1c6a0347b640d83adb980","impliedFormat":99},{"version":"0651f3116ffe2443f5708b6bb467108fa2dd802f5b5f56c96d536fe5886f6651","impliedFormat":99},{"version":"a6b16347eca8b0031b29efe3b5d2f713053914be731c83ba40a658917e627839","impliedFormat":99},{"version":"160d8a163efd2706f63f3e3e25d0ca8685a1ec37c4458b6a005d5e6f9b2e1e59","impliedFormat":99},{"version":"8fc9c4434476710427388af587998bac7a347cc68329b7da3a57fb11b72d12f3","impliedFormat":99},{"version":"5bca5f1300006daa7c26bdd044b319fd43221cb54310bea9a35b808e99463e88","impliedFormat":99},{"version":"016e62f3268bdd7223c7ae9b9dc48acad3703ab46d83551b40c448bf24988426","impliedFormat":99},{"version":"c3c93270e5b1e9da7c9df3d4c29100e6ff601151e5466a247273572fee9b6c79","impliedFormat":99},{"version":"f67d01c40a50fb5fb4f49a94b26380a516e60549a5f525c9d40da370f0c006f5","impliedFormat":99},{"version":"d14328f8d67ccb14c3cff684f2232433977c7eea206444561fa2f379702408eb","impliedFormat":99},{"version":"a601e8a3922b3ae8da17e0c8589f5039a673ac85fed5d99bc27317a6e3d6b217","impliedFormat":99},{"version":"65c925f741aa701668c4342bb02dbc431bca41987d22f1e4e59c2b543c51d38e","impliedFormat":99},{"version":"a66ecd5048fc481ffa36e22fbbe1c21c0c0e3a7c7aa55d8a558379e29d607638","impliedFormat":99},{"version":"164af37e5cde8d2d830b5a5f2aaa6be547b8004e4e98b33fd6977581f8be4d4a","impliedFormat":99},{"version":"63c39bc22c25673c8ec2394d3d01dc7f03c1e38bb29ce1778a891387de2f8ab6","impliedFormat":99},{"version":"e0ace1698102560c3b8090c2dd1f63ecd0a2b8601b4cb4b16df8642793fd036f","impliedFormat":99},{"version":"2dde5815873618121ef4a1aca528467d670bf21d57ac400f4eb5d1aad3632057","impliedFormat":99},{"version":"4ce379e768b6cf2668f18e690ce46d6275990aff9b48ffa901afd09a71da0034","impliedFormat":99},{"version":"ea10ecbebe8831e4e4b5343cb4c67ac7a690ab0cca495a181dcebee808cca284","impliedFormat":99},{"version":"7b75a17e8586b0d83e4d3732ffe41a10812873a89eafec329b879988537fa83e","impliedFormat":99},{"version":"a1f2d957d1ad742c213ebd9469fa939d7ebd30f9b813bbcab4e78ed11fd861ff","impliedFormat":99},{"version":"2406b086d68af6875c2729678c30d9d04a8a07ad5b40b042d4f86adfb1d32f68","impliedFormat":99},{"version":"a2c7210b0f2be82aed4cdfc51ca084b3ac017a2d2e9baf5b519732fafb6feff7","impliedFormat":99},{"version":"ea5eb451f39b58c15b31a4b3fb9edecd2b0f36b362ea3d05f35af19316b6a3be","impliedFormat":99},{"version":"b823dd6b087e807ee23a64e0111190748b8e17c8ae2279615cb00bd30cb6210c","impliedFormat":99},{"version":"d282b807d67808091c07a6803b11f0fd90640647b555bd492b1ef907edcc06ff","impliedFormat":99},{"version":"7a24b1382adc788e18da793742cd4804f4dc1b8cfc14f203684b8a34f507c6f9","impliedFormat":99},{"version":"3ae8914ddfebaad32d5677ad5a8828385b9581a2ea8cf5ea6ae70e0a054dc49f","impliedFormat":99},{"version":"616f1e3b7a9f245abe5a75fd5338ad0130f9ee123cda077040603702a73d0012","impliedFormat":99},{"version":"d3a30a653e4f926e1ee0eb59f8c4e5db595064aad3f2ff9af6c840a8be0ce513","impliedFormat":99},{"version":"698da301c7eac249e909e0bc259ce2f17d44ddb10258e3afec4efe21f47e49cc","impliedFormat":99},{"version":"edf1398a29effd40893b4e850271ea22bdeb0d3d6a901eb08ad2516f13b8bd05","impliedFormat":99},{"version":"73421be7cc17957418f22a7be68c4e6b8d818f1597585bb3020aeb6ef7006f9c","impliedFormat":99},{"version":"67aa5f28d07c6b149d9d30d173af78d6640f9bca18138bfb16b98e66973974b9","signature":"1dc21bc6cb4b1c9e865cda17460990800bff0bdc74b87e89f348cf1ddd9b85db"},{"version":"e2e3eaf9705313f5e3ba3e2ffdb4cb82422b42f0add65f68025f61ad7c64de92","impliedFormat":1},{"version":"b9832fbf3c8179eb1ed49dbb33dd8f4687e25b8afa0d2afe59c5c0444318a1d5","signature":"b569739c3ab8c3e9e6cb0d50980463613530c924a87c7873ac32c774ec057991"},{"version":"e8371bdb342c7d23f6c2d6a38456852c787d80b17be0e930bdabb99545dce854","signature":"6d6449b80881e70de3f27d314c1e8a6353071f30442df504dc00e429b4f2252f"},{"version":"b5758563682bf0f4559fe3952bd541a91be70bb75267609f7f41e0e7c3dcb57a","signature":"e67ad52ddef646359a0a68869085eeb1e76555c2842b7f8c112abbbd02336fc4"},{"version":"4fcf87afaa5c3b6915b8dbab995cd86e6c8d6137516bce19f39efd4cab196d11","signature":"5bfc795a51033dfc336b879b664154b25c5bd4f9c6aaef7b11f1eef426d6f90c"},{"version":"ca3bd1b370ea67b84632d435c22d8270752fa6013c06c365162af265e4a0e87e","signature":"c7776f62c5f67aa3a5144ab2bad806ca330e226fe19dbbc46a3de2ef004fda1f"},{"version":"8110bba70d0cb9fe968c0b7bd092ad12258caef40b028b4a87f402bdab907faf","signature":"b3ee5184dbf154ca01ff12e4703e5dc467ad7c79d8b16c98b8361118de54cea4"},{"version":"8a43673bbe358714ac758e0476ee67346325886db2e77e80c374837f485fdfa4","signature":"40c7d5d8943e781cb3fa3a84a2c63aa80ee9ce94f9e7e42353b37fcfe301ccc1"},{"version":"e6ce1d43fecd03e47c3353d2db898bc18228d8f1d8e097b0df2ca0ee53683ec4","signature":"53a0f11a4033c0a93e4c0b0995f35cf8fbc4171d20259d56b6f25cb1499de2f6"},{"version":"3d2d0b3d87a19aad65821e4cdb1c4bb149209778bea271b1f98265383cddd6d5","signature":"308695a8fda6f510e51efb0430009a61897fb5067344c8d84a84496de1274a3a"},{"version":"900f722c961fa6e1c28104809d56831c9056dc69599e49d364cc13a6f33966a3","signature":"3e2cf4dab2991bf28f1472678a49a0b7c75c097fed6c2683c2a9834b1d4e48ec"},{"version":"09c52eea7f91c248234e5c3307f967b7b4152d07fcf6fd437824bbf468a48beb","signature":"21657dabbb10f3f461fba1f32db7549ab762a33b29bfe99e174c6837259fc395"},{"version":"dd332252bb45677533cd5553e0c35340cee4c485c90c63360f8e653901286a4f","impliedFormat":1},{"version":"dddde95f3dea44dc49c9095a861298e829122a54a3f56b3b815e615501e2ed16","impliedFormat":1},{"version":"794a88237c94d74302df12ebb02f521cf5389a5bf046a3fdbdd3afb21dc02511","impliedFormat":1},{"version":"66a08d30c55a7aefa847c1f5958924a3ef9bea6cd1c962a8ff1b2548f66a6ce0","impliedFormat":1},{"version":"0790ae78f92ab08c9d7e66b59733a185a9681be5d0dc90bd20ab5d84e54dcb86","impliedFormat":1},{"version":"1046cd42ec19e4fd038c803b4fc1aff31e51e6e48a6b8237a0240a11c1c27792","impliedFormat":1},{"version":"8f93c7e1084de38a142085c7f664b0eb463428601308fb51c68b25cb687e0887","impliedFormat":1},{"version":"83f69c968d32101f8690845f47bcae016cbea049e222a5946889eb3ae37e7582","impliedFormat":1},{"version":"59c3f3ed18de1c7f5927e0eafcdc0e545db88bfae4168695a89e38a85943a86d","impliedFormat":1},{"version":"32e6c27fd3ef2b1ddbf2bf833b2962d282eb07d9d9d3831ca7f4ff63937268e1","impliedFormat":1},{"version":"406ebb72aa8fdd9227bfce7a1b3e390e2c15b27f5da37ea9e3ed19c7fb78d298","impliedFormat":1},{"version":"197109f63a34b5f9379b2d7ba82fc091659d6878db859bd428ea64740cb06669","impliedFormat":1},{"version":"059871a743c0ca4ae511cbd1e356548b4f12e82bc805ab2e1197e15b5588d1c4","impliedFormat":1},{"version":"8ccefe3940a2fcb6fef502cdbc7417bb92a19620a848f81abc6caa146ab963e9","impliedFormat":1},{"version":"44d8ec73d503ae1cb1fd7c64252ffa700243b1b2cc0afe0674cd52fe37104d60","impliedFormat":1},{"version":"67ea5a827a2de267847bb6f1071a56431aa58a4c28f8af9b60d27d5dc87b7289","impliedFormat":1},{"version":"e33bb784508856827448a22947f2cac69e19bc6e9d6ef1c4f42295f7bd4ce293","impliedFormat":1},{"version":"383bb09bfeb8c6ef424c7fbce69ec7dc59b904446f8cfec838b045f0143ce917","impliedFormat":1},{"version":"83508492e3fc5977bc73e63541e92c5a137db076aafc59dcf63e9c6ad34061c7","impliedFormat":1},{"version":"ef064b9a331b7fc9fe0b368499c52623fb85d37d8972d5758edc26064189d14d","impliedFormat":1},{"version":"d64457d06ab06ad5e5f693123ee2f17594f00e6d5481517058569deac326fea0","impliedFormat":1},{"version":"e92ea29d716c5fe1977a34e447866d5cfbd94b3f648e3b9c550603fdae0e94fb","impliedFormat":1},{"version":"3d10f47c6b1e9225c68c140235657a0cdd4fc590c18faf87dcd003fd4e22c67f","impliedFormat":1},{"version":"13989f79ff8749a8756cac50f762f87f153e3fb1c35768cc6df15968ec1adb1a","impliedFormat":1},{"version":"e014c2f91e94855a52dd9fc88867ee641a7d795cfe37e6045840ecf93dab2e6b","impliedFormat":1},{"version":"74b9f867d1cc9f4e6122f81b59c77cbd6ff39f482fb16cffdc96e4cda1b5fdb1","impliedFormat":1},{"version":"7c8574cfc7cb15a86db9bf71a7dc7669593d7f62a68470adc01b05f246bd20ff","impliedFormat":1},{"version":"c8f49d91b2669bf9414dfc47089722168602e5f64e9488dbc2b6fe1a0f6688da","impliedFormat":1},{"version":"3abee758d3d415b3b7b03551f200766c3e5dd98bb1e4ff2c696dc6f0c5f93191","impliedFormat":1},{"version":"79bd7f60a080e7565186cfdfd84eac7781fc4e7b212ab4cd315b9288c93b7dc7","impliedFormat":1},{"version":"4a2f281330a7b5ed71ebc4624111a832cd6835f3f92ad619037d06b944398cf4","impliedFormat":1},{"version":"ea8130014cb8ee30621bf521f58d036bff3b9753b2f6bd090cc88ac15836d33c","impliedFormat":1},{"version":"c740d49c5a0ecc553ddfc14b7c550e6f5a2971be9ed6e4f2280b1f1fa441551d","impliedFormat":1},{"version":"886a56c6252e130f3e4386a6d3340cf543495b54c67522d21384ed6fb80b7241","impliedFormat":1},{"version":"4b7424620432be60792ede80e0763d4b7aab9fe857efc7bbdb374e8180f4092a","impliedFormat":1},{"version":"e407db365f801ee8a693eca5c21b50fefd40acafda5a1fa67f223800319f98a8","impliedFormat":1},{"version":"529660b3de2b5246c257e288557b2cfa5d5b3c8d2240fa55a4f36ba272b57d18","impliedFormat":1},{"version":"0f6646f9aba018d0a48b8df906cb05fa4881dc7f026f27ab21d26118e5aa15de","impliedFormat":1},{"version":"b3620fcf3dd90a0e6a07268553196b65df59a258fe0ec860dfac0169e0f77c52","impliedFormat":1},{"version":"08135e83e8d9e34bab71d0cf35b015c21d0fd930091b09706c6c9c0e766aca28","impliedFormat":1},{"version":"96e14f2fdc1e3a558462ada79368ed49b004efce399f76f084059d50121bb9a9","impliedFormat":1},{"version":"56f2ade178345811f0c6c4e63584696071b1bd207536dc12384494254bc1c386","impliedFormat":1},{"version":"e484786ef14e10d044e4b16b6214179c95741e89122ba80a7c93a7e00bf624b1","impliedFormat":1},{"version":"4763ce202300b838eb045923eaeb32d9cf86092eee956ca2d4e223cef6669b13","impliedFormat":1},{"version":"7cff5fff5d1a92ae954bf587e5c35987f88cacaa006e45331b3164c4e26369de","impliedFormat":1},{"version":"c276acedaadc846336bb51dd6f2031fdf7f299d0fae1ee5936ccba222e1470ef","impliedFormat":1},{"version":"426c3234f768c89ba4810896c1ee4f97708692727cfecba85712c25982e7232b","impliedFormat":1},{"version":"ee12dd75feac91bb075e2cb0760279992a7a8f5cf513b1cffaa935825e3c58be","impliedFormat":1},{"version":"3e51868ea728ceb899bbfd7a4c7b7ad6dd24896b66812ea35893e2301fd3b23f","impliedFormat":1},{"version":"781e8669b80a9de58083ca1f1c6245ef9fb04d98add79667e3ed70bde034dfd5","impliedFormat":1},{"version":"cfd35b460a1e77a73f218ebf7c4cd1e2eeeaf3fa8d0d78a0a314c6514292e626","impliedFormat":1},{"version":"452d635c0302a0e1c5108edebcca06fc704b2f8132123b1e98a5220afa61a965","impliedFormat":1},{"version":"bbe64c26d806764999b94fcd47c69729ba7b8cb0ca839796b9bb4d887f89b367","impliedFormat":1},{"version":"b87d65da85871e6d8c27038146044cffe40defd53e5113dbd198b8bce62c32db","impliedFormat":1},{"version":"c37712451f6a80cbf8abec586510e5ac5911cb168427b08bc276f10480667338","impliedFormat":1},{"version":"ecf02c182eec24a9a449997ccc30b5f1b65da55fd48cbfc2283bcfa8edc19091","impliedFormat":1},{"version":"0b2c6075fc8139b54e8de7bcb0bed655f1f6b4bf552c94c3ee0c1771a78dea73","impliedFormat":1},{"version":"49707726c5b9248c9bac86943fc48326f6ec44fe7895993a82c3e58fb6798751","impliedFormat":1},{"version":"a9679a2147c073267943d90a0a736f271e9171de8fbc9c378803dd4b921f5ed3","impliedFormat":1},{"version":"a8a2529eec61b7639cce291bfaa2dd751cac87a106050c3c599fccb86cc8cf7f","impliedFormat":1},{"version":"bfc46b597ca6b1f6ece27df3004985c84807254753aaebf8afabd6a1a28ed506","impliedFormat":1},{"version":"7fdee9e89b5a38958c6da5a5e03f912ac25b9451dc95d9c5e87a7e1752937f14","impliedFormat":1},{"version":"b8f3eafeaf04ba3057f574a568af391ca808bdcb7b031e35505dd857db13e951","impliedFormat":1},{"version":"30b38ae72b1169c4b0d6d84c91016a7f4c8b817bfe77539817eac099081ce05c","impliedFormat":1},{"version":"c9f17e24cb01635d6969577113be7d5307f7944209205cb7e5ffc000d27a8362","impliedFormat":1},{"version":"685ead6d773e6c63db1df41239c29971a8d053f2524bfabdef49b829ae014b9a","impliedFormat":1},{"version":"b7bdabcd93148ae1aecdc239b6459dfbe35beb86d96c4bd0aca3e63a10680991","impliedFormat":1},{"version":"e83cfc51d3a6d3f4367101bfdb81283222a2a1913b3521108dbaf33e0baf764a","impliedFormat":1},{"version":"95f397d5a1d9946ca89598e67d44a214408e8d88e76cf9e5aecbbd4956802070","impliedFormat":1},{"version":"74042eac50bc369a2ed46afdd7665baf48379cf1a659c080baec52cc4e7c3f13","impliedFormat":1},{"version":"1541765ce91d2d80d16146ca7c7b3978bd696dc790300a4c2a5d48e8f72e4a64","impliedFormat":1},{"version":"ec6acc4492c770e1245ade5d4b6822b3df3ba70cf36263770230eac5927cf479","impliedFormat":1},{"version":"4c39ee6ae1d2aeda104826dd4ce1707d3d54ac34549d6257bea5d55ace844c29","impliedFormat":1},{"version":"deb099454aabad024656e1fc033696d49a9e0994fc3210b56be64c81b59c2b20","impliedFormat":1},{"version":"80eec3c0a549b541de29d3e46f50a3857b0b90552efeeed90c7179aba7215e2f","impliedFormat":1},{"version":"a4153fbd5c9c2f03925575887c4ce96fc2b3d2366a2d80fad5efdb75056e5076","impliedFormat":1},{"version":"6f7c70ca6fa1a224e3407eb308ec7b894cfc58042159168675ccbe8c8d4b3c80","impliedFormat":1},{"version":"4b56181b844219895f36cfb19100c202e4c7322569dcda9d52f5c8e0490583c9","impliedFormat":1},{"version":"5609530206981af90de95236ce25ddb81f10c5a6a346bf347a86e2f5c40ae29b","impliedFormat":1},{"version":"632ce3ee4a6b320a61076aeca3da8432fb2771280719fde0936e077296c988a9","impliedFormat":1},{"version":"8b293d772aff6db4985bd6b33b364d971399993abb7dc3f19ceed0f331262f04","impliedFormat":1},{"version":"4eb7bad32782df05db4ba1c38c6097d029bed58f0cb9cda791b8c104ccfdaa1f","impliedFormat":1},{"version":"c6a8aa80d3dde8461b2d8d03711dbdf40426382923608aac52f1818a3cead189","impliedFormat":1},{"version":"bf5e79170aa7fc005b5bf87f2fe3c28ca8b22a1f7ff970aa2b1103d690593c92","impliedFormat":1},{"version":"ba3c92c785543eba69fbd333642f5f7da0e8bce146dec55f06cfe93b41e7e12f","impliedFormat":1},{"version":"c6d72ececae6067e65c78076a5d4a508f16c806577a3d206259a0d0bfeedc8d1","impliedFormat":1},{"version":"b6429631df099addfcd4a5f33a046cbbde1087e3fc31f75bfbbd7254ef98ea3c","impliedFormat":1},{"version":"4e9cf1b70c0faf6d02f1849c4044368dc734ad005c875fe7957b7df5afe867c9","impliedFormat":1},{"version":"7498b7d83674a020bd6be46aeed3f0717610cb2ae76d8323e560e964eb122d0c","impliedFormat":1},{"version":"b80405e0473b879d933703a335575858b047e38286771609721c6ab1ea242741","impliedFormat":1},{"version":"7193dfd01986cd2da9950af33229f3b7c5f7b1bee0be9743ad2f38ec3042305e","impliedFormat":1},{"version":"1ccb40a5b22a6fb32e28ffb3003dea3656a106dd3ed42f955881858563776d2c","impliedFormat":1},{"version":"8d97d5527f858ae794548d30d7fc78b8b9f6574892717cc7bc06307cc3f19c83","impliedFormat":1},{"version":"ccb4ecdc8f28a4f6644aa4b5ab7337f9d93ff99c120b82b1c109df12915292ac","impliedFormat":1},{"version":"8bbcf9cecabe7a70dcb4555164970cb48ba814945cb186493d38c496f864058f","impliedFormat":1},{"version":"7d57bdfb9d227f8a388524a749f5735910b3f42adfe01bfccca9999dc8cf594c","impliedFormat":1},{"version":"3508810388ea7c6585496ee8d8af3479880aba4f19c6bbd61297b17eb30428f4","impliedFormat":1},{"version":"56931daef761e6bdd586358664ccd37389baabeb5d20fe39025b9af90ea169a5","impliedFormat":1},{"version":"abb48247ab33e8b8f188ef2754dfa578129338c0f2e277bfc5250b14ef1ab7c5","impliedFormat":1},{"version":"beaba1487671ed029cf169a03e6d680540ea9fa8b810050bc94cb95d5e462db2","impliedFormat":1},{"version":"1418ef0ba0a978a148042bc460cf70930cd015f7e6d41e4eb9348c4909f0e16d","impliedFormat":1},{"version":"56be4f89812518a2e4f0551f6ef403ffdeb8158a7c271b681096a946a25227e9","impliedFormat":1},{"version":"bbb0937150b7ab2963a8bc260e86a8f7d2f10dc5ee7ddb1b4976095a678fdaa4","impliedFormat":1},{"version":"862301d178172dc3c6f294a9a04276b30b6a44d5f44302a6e9d7dc1b4145b20b","impliedFormat":1},{"version":"cbf20c7e913c08cb08c4c3f60dae4f190abbabaa3a84506e75e89363459952f0","impliedFormat":1},{"version":"0f3333443f1fea36c7815601af61cb3184842c06116e0426d81436fc23479cb8","impliedFormat":1},{"version":"421d3e78ed21efcbfa86a18e08d5b6b9df5db65340ef618a9948c1f240859cc1","impliedFormat":1},{"version":"b1225bc77c7d2bc3bad15174c4fd1268896a90b9ab3b306c99b1ade2f88cddcc","impliedFormat":1},{"version":"ca46e113e95e7c8d2c659d538b25423eac6348c96e94af3b39382330b3929f2a","impliedFormat":1},{"version":"03ca07dbb8387537b242b3add5deed42c5143b90b5a10a3c51f7135ca645bd63","impliedFormat":1},{"version":"ca936efd902039fda8a9fc3c7e7287801e7e3d5f58dd16bf11523dc848a247d7","impliedFormat":1},{"version":"2c7b3bfa8b39ed4d712a31e24a8f4526b82eeca82abb3828f0e191541f17004c","impliedFormat":1},{"version":"5ffaae8742b1abbe41361441aa9b55a4e42aee109f374f9c710a66835f14a198","impliedFormat":1},{"version":"ecab0f43679211efc9284507075e0b109c5ad024e49b190bb28da4adfe791e49","impliedFormat":1},{"version":"967109d5bc55face1aaa67278fc762ac69c02f57277ab12e5d16b65b9023b04f","impliedFormat":1},{"version":"36d25571c5c35f4ce81c9dcae2bdd6bbaf12e8348d57f75b3ef4e0a92175cd41","impliedFormat":1},{"version":"fde94639a29e3d16b84ea50d5956ee76263f838fa70fe793c04d9fce2e7c85b9","impliedFormat":1},{"version":"5f4c286fea005e44653b760ebfc81162f64aabc3d1712fd4a8b70a982b8a5458","impliedFormat":1},{"version":"e02dabe428d1ffd638eccf04a6b5fba7b2e8fccee984e4ef2437afc4e26f91c2","impliedFormat":1},{"version":"60dc0180bd223aa476f2e6329dca42fb0acaa71b744a39eb3f487ab0f3472e1c","impliedFormat":1},{"version":"b6fdbecf77dcbf1b010e890d1a8d8bfa472aa9396e6c559e0fceee05a3ef572f","impliedFormat":1},{"version":"e1bf9d73576e77e3ae62695273909089dbbb9c44fb52a1471df39262fe518344","impliedFormat":1},{"version":"d2d57df33a7a5ea6db5f393df864e3f8f8b8ee1dfdfe58180fb5d534d617470f","impliedFormat":1},{"version":"fdcd692f0ac95e72a0c6d1e454e13d42349086649828386fe7368ac08c989288","impliedFormat":1},{"version":"5583eef89a59daa4f62dd00179a3aeff4e024db82e1deff2c7ec3014162ea9a2","impliedFormat":1},{"version":"b0641d9de5eaa90bff6645d754517260c3536c925b71c15cb0f189b68c5386b4","impliedFormat":1},{"version":"9899a0434bd02881d19cb08b98ddd0432eb0dafbfe5566fa4226bdd15624b56f","impliedFormat":1},{"version":"4496c81ce10a0a9a2b9cb1dd0e0ddf63169404a3fb116eb65c52b4892a2c91b9","impliedFormat":1},{"version":"ecdb4312822f5595349ec7696136e92ecc7de4c42f1ea61da947807e3f11ebfc","impliedFormat":1},{"version":"42edbfb7198317dd7359ce3e52598815b5dc5ca38af5678be15a4086cccd7744","impliedFormat":1},{"version":"8105321e64143a22ed5411258894fb0ba3ec53816dad6be213571d974542feeb","impliedFormat":1},{"version":"d1b34c4f74d3da4bdf5b29bb930850f79fd5a871f498adafb19691e001c4ea42","impliedFormat":1},{"version":"9a1caf586e868bf47784176a62bf71d4c469ca24734365629d3198ebc80858d7","impliedFormat":1},{"version":"35a443f013255b33d6b5004d6d7e500548536697d3b6ba1937fd788ca4d5d37b","impliedFormat":1},{"version":"b591c69f31d30e46bc0a2b383b713f4b10e63e833ec42ee352531bbad2aadfaa","impliedFormat":1},{"version":"31e686a96831365667cbd0d56e771b19707bad21247d6759f931e43e8d2c797d","impliedFormat":1},{"version":"dfc3b8616bece248bf6cd991987f723f19c0b9484416835a67a8c5055c5960e0","impliedFormat":1},{"version":"03b64b13ecf5eb4e015a48a01bc1e70858565ec105a5639cfb2a9b63db59b8b1","impliedFormat":1},{"version":"c56cc01d91799d39a8c2d61422f4d5df44fab62c584d86c8a4469a5c0675f7c6","impliedFormat":1},{"version":"5205951312e055bc551ed816cbb07e869793e97498ef0f2277f83f1b13e50e03","impliedFormat":1},{"version":"50b1aeef3e7863719038560b323119f9a21f5bd075bb97efe03ee7dec23e9f1b","impliedFormat":1},{"version":"0cc13970d688626da6dce92ae5d32edd7f9eabb926bb336668e5095031833b7c","impliedFormat":1},{"version":"3be9c1368c34165ba541027585f438ed3e12ddc51cdc49af018e4646d175e6a1","impliedFormat":1},{"version":"7d617141eb3f89973b1e58202cdc4ba746ea086ef35cdedf78fb04a8bb9b8236","impliedFormat":1},{"version":"ea6d9d94247fd6d72d146467070fe7fc45e4af6e0f6e046b54438fd20d3bd6a2","impliedFormat":1},{"version":"d584e4046091cdef5df0cb4de600d46ba83ff3a683c64c4d30f5c5a91edc6c6c","impliedFormat":1},{"version":"ce68902c1612e8662a8edde462dff6ee32877ed035f89c2d5e79f8072f96aed0","impliedFormat":1},{"version":"0fdcf43fd0f1d8cacc83da11ba56bda5697fd2be7d3f282141903212169dad34","impliedFormat":1},{"version":"015ba7d990cac24d4ff045d75e5b1e74edd306223bae571e3862c92cec7e6515","impliedFormat":1},{"version":"59cd834d4204f5467061c56e16cd3c68eb2d5ce15e27d2b4c0a30a68a9bbb870","impliedFormat":1},{"version":"a8761b5c12f6b4fdfb6bb5698935397e81df493e15c067752f1193b28ca1aa01","impliedFormat":1},{"version":"760a3050427dc1e3d3228fbcfb17f5e9f9c62b7a21af098da05e5d7f1c110fd6","impliedFormat":1},{"version":"cac3a87600ffc325e1e2bff3830e3e9977de05b66e4384f3625e1378222575bb","impliedFormat":1},{"version":"14826ddd521dfed918eead9e6f65fd33f1d37a1f5723a647c0fcebde5fb2680b","impliedFormat":1},{"version":"5da3fd402befb210af1893188bd9199d8193bbf24cceeb7bb0c5262eae410ab4","impliedFormat":1},{"version":"d48ac7569126b1bc3cd899c3930ef9cf22a72d51cf45b60fc129380ae840c2f2","impliedFormat":1},{"version":"e4f0d7556fda4b2288e19465aa787a57174b93659542e3516fd355d965259712","impliedFormat":1},{"version":"756b471ce6ec8250f0682e4ad9e79c2fddbe40618ba42e84931dbb65d7ac9ab0","impliedFormat":1},{"version":"ce9635a3551490c9acdbcb9a0491991c3d9cd472e04d4847c94099252def0c94","impliedFormat":1},{"version":"b70ee10430cc9081d60eb2dc3bee49c1db48619d1269680e05843fdaba4b2f7a","impliedFormat":1},{"version":"9b78500996870179ab99cbbc02dffbb35e973d90ab22c1fb343ed8958598a36c","impliedFormat":1},{"version":"c6ee8f32bb16015c07b17b397e1054d6906bc916ab6f9cd53a1f9026b7080dbf","impliedFormat":1},{"version":"67e913fa79af629ee2805237c335ea5768ea09b0b541403e8a7eaef253e014d9","impliedFormat":1},{"version":"0b8a688a89097bd4487a78c33e45ca2776f5aedaa855a5ba9bc234612303c40e","impliedFormat":1},{"version":"188e5381ed8c466256937791eab2cc2b08ddcc5e4aaf6b4b43b8786ed1ab5edd","impliedFormat":1},{"version":"8559f8d381f1e801133c61d329df80f7fdab1cbad5c69ebe448b6d3c104a65bd","impliedFormat":1},{"version":"00a271352b854c5d07123587d0bb1e18b54bf2b45918ab0e777d95167fd0cb0b","impliedFormat":1},{"version":"10c4be0feeac95619c52d82e31a24f102b593b4a9eba92088c6d40606f95b85d","impliedFormat":1},{"version":"e1385f59b1421fceba87398c3eb16064544a0ce7a01b3a3f21fa06601dc415dc","impliedFormat":1},{"version":"bacf2c0f8cbfc5537b3c64fc79d3636a228ccbb00d769fb1426b542efe273585","impliedFormat":1},{"version":"3103c479ff634c3fbd7f97a1ccbfb645a82742838cb949fdbcf30dd941aa7c85","impliedFormat":1},{"version":"4b37b3fab0318aaa1d73a6fde1e3d886398345cff4604fe3c49e19e7edd8a50d","impliedFormat":1},{"version":"bf429e19e155685bda115cc7ea394868f02dec99ee51cfad8340521a37a5867a","impliedFormat":1},{"version":"72116c0e0042fd5aa020c2c121e6decfa5414cf35d979f7db939f15bb50d2943","impliedFormat":1},{"version":"20510f581b0ee148a80809122f9bcaa38e4691d3183a4ed585d6d02ffe95a606","impliedFormat":1},{"version":"71f4b56ed57bbdea38e1b12ad6455653a1fbf5b1f1f961d75d182bff544a9723","impliedFormat":1},{"version":"b3e1c5db2737b0b8357981082b7c72fe340edf147b68f949413fee503a5e2408","impliedFormat":1},{"version":"396e64a647f4442a770b08ed23df3c559a3fa7e35ffe2ae0bbb1f000791bda51","impliedFormat":1},{"version":"698551f7709eb21c3ddec78b4b7592531c3e72e22e0312a128c40bb68692a03f","impliedFormat":1},{"version":"662b28f09a4f60e802023b3a00bdd52d09571bc90bf2e5bfbdbc04564731a25e","impliedFormat":1},{"version":"e6b8fb8773eda2c898e414658884c25ff9807d2fce8f3bdb637ab09415c08c3c","impliedFormat":1},{"version":"528288d7682e2383242090f09afe55f1a558e2798ceb34dc92ae8d6381e3504a","impliedFormat":1},{"version":"fb7769b384f84612315ad7c6e2bdd2da7336e8033ea5ad589b984984401d19d0","signature":"9bd7d6390348a0c304e2c493b217754f91bb8aa61e897c274a810579a2cf3bb9"},{"version":"d65cba20127fdf9e57a98a7a908a5bb81271425c4c53aec9749b4152ea1b8c35","signature":"f616afe58bbeedd9ebc23117be69c798bd47ffc69288116c3e98f92396484deb"},{"version":"04ab252427e951ddd506f29c20148dcc4917c678f357dc765f79705ceb5c0a78","impliedFormat":99},{"version":"39cc0cb7e3f996b90da21bcd27e706cb8f83e4a5d54af2e204187559b9e9afad","impliedFormat":99},{"version":"826b787ebe74dd7475fd837c31768e266ad2a6cbdf2c70262f40a306b40ae7f5","impliedFormat":99},{"version":"812183419c579572a32327fc3f8897dd32d6b809d81533c7d8b98028c7f19015","signature":"89c15d46f9eca631eaae87debbfd4db8a19ea7d0f16c02ce683185ac8b301d7a"},{"version":"1f50bb5b601e2e1e4722958f23450925320d67701bd02e8546f9d7f401a4fae3","signature":"b4e05ce3e8d7ea34f44dd634d4b2bbb5490c0b77c67a8969092054e9c0ae29fb"},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},"e2d5f0d53d0bb2e8c4f3b9b6cd155b3e838965b6356e32ffade216e7121b1243",{"version":"4facfac89df9c135e45876cae99cf4817d5085e954418ca332a9374517b3cc54","signature":"cb299c653e5a9fbbedfe1e58254d2ab7832b705a75ed54d60ace691859251d70"},{"version":"f3cf9d0fc8b5c27c4a7f6d8ea19b11beca28002b3a9b7634c1be6c95f4a61b27","signature":"8929e2d3b4b8873fd95ede0b475d2bc02a6ce068f65588b53b4f9911626e8f40"},{"version":"0ea2e6969077bffde3adeddbf5e73dc13b27406574cf271c1f082d76bea4deb3","signature":"75ca731c549d86a476e859996acf5fb6cbff46ae122c254684048faba3e072ba"},{"version":"8f49ab68fb2003ac5974ee08d1c8dc6e6d8f1ee080630ffb2cee4f6b2745f4e0","signature":"32f7c168ee545e9b432d2a861f4fb0bc645e21e88c774cedf54e72d1e3ccc049"},{"version":"a33d4acc3bddb705b5a6adaa52091b1b58d8d2158b3a7691374ba96710aea33b","signature":"862830fce887804f3806cb57db306866ba1696c9baf067cf2417a4ca63f7901a"},{"version":"9c07aac2f2a1dbb7298dbf544daf7025a76df908aaa296ff6bf132e7289e75c3","signature":"a462b50ac9b80a668d3131bf2e549be9e4b939fcdef5c3336dabcb3a6593f898"},{"version":"8fa9d84f057ee2dc61f635349fcfe24fb39e445bc5c4ea8009fa61ad923d58f9","signature":"aa1e1d3f59faedc025b65e84f309e74d01aa278491d1d334e28d2beae6be296d"},{"version":"69a3cfbdf9e76ed5a3ec4424ea6604568b438e2fa66d2eccd8ea77ea85aad616","signature":"add6dd8bbe6a647a0e36670fa24db751b78d97ba3c0512a2cc27849c28fd56e9"},{"version":"044c5518a08bc16da5ef6beafb6635c6cff0c1b4576a2f21591a09633e1dab36","signature":"79c029ebb0ff75ca7dd545d3ec1fe3679057b1eb6a59438f51583f75db8ad9e5"},{"version":"fcaf6a25742255f1726196a53c1e327e065d414980c7e1bab4307ec080aac53e","signature":"5df3de0664802d5d4c6f9b81e37caf86013cb4867d726000d86972c6aae4ffa3"},{"version":"54eb94ecb5044480a71e11209f433c6c9c0a82a950921af23933229d97147f43","signature":"96422c767c19742d0276994e8b5b5cbf36a22d1be20f11e3e13734aaeca7d5a0"},{"version":"97e3f2a87e75b1929c52c0e46e5af366a95ffc76fb7cf4411879fcc5d98f5f4c","signature":"5b1e0f2c3a205df986042dc8dd1801be0e4bbcddc4be1f752dfef8384361cd21"},{"version":"a46b77de8c22658e66e9a5f7aeeb91178a9db74a8d878892ba9195f2ab09d5c9","signature":"f39b3c755089070c837c27b2e16b8aa0b9bbc6ecc530eff8716ede3d812c005a"},{"version":"69484422d414c37f8087102e6622d7d697cccc265334cd997ae7cbb185f1febf","signature":"e53c0e0168c97b547ab480666a1bb48c1a7b7cf8cc9cb633cb86ae0a7c1574ab"},{"version":"9b999764c7f4afc9c4760811307a48bdc52cbc15c4e7e3ba24bf7d7bbdd0575a","signature":"9fbd21dc7996da2a1223f159032344ed5d69061536ed612fef1042af7cfb6205"},{"version":"f1aa7f60c6f9776b86cb9f20bd43ec57cb78da14482c704ab381e20b069ec27f","signature":"62caa5731798879929a350c4fda388735edb3c1d32c284cf4f480ee8b1a95084"},{"version":"195568540174f7fca779adce49f6f3b0b7d0f7044b06cf53176e9934d2852903","signature":"eb6e2a33ef262ac0998915eb79bcc7287b97918a67d8751f9487897a5ab1e5d6"},{"version":"6f4a521428c3b50da02daf9978b78798a02767dd402c0057f05f92d41f271929","signature":"998da863117f06a38261ae0ad457627c28d8bb489437091b05f8056eca9b75d5"},{"version":"1ac55aa9cd3dd79360907718de64c1261b188c9efacc6c764f4e6250da56e5da","signature":"842ade20f5857aa8d432fdca645cab72b6e4cb0536c495f7f2f10ece311d22a2"},{"version":"bf89084e094e417e369210937d30e94931a13726ed68a453ca513e7c53c07ab3","signature":"2373ed842870d89bc8757939ca75ba88ebebb967ed732754af81674a538db118"},{"version":"cef6df435d0f1b28edf96596e0830ab798aa6aef167bfc5f3dfaa1f5aa04da1f","signature":"e23ef60c556b07d3805ba5b8296260c43c840dd2c09dd85b1c34db04ac4c02e8"},{"version":"7466a0f32695bad17b42bdd9158eb38954eb45bfc9fa4da7f0d114a021c88f4a","signature":"37f1cd1e8a57e3123f3a65c7948dfb9f1b1c8acaac72480bf91447104fc99e38"},{"version":"875d0b6a02e42d431eb49f5301af99ece457192a706a31373aa7da581f931d63","signature":"2a9ccc4cd062b3bfdfd037a26c3066874ae79e57c968fea667c31beff34b5820"},{"version":"e5c65583b94bf2ff5ef475e90e4d5de5c79d32dc33a25bef4a1f2f05275ba1f2","signature":"2d3a77d3859567d5f5b33b4864149fccb2ec4b9015432dec78c4d40c73a2799f"},{"version":"fe97631e1a07bc0add09503c5032002e37f4c71ef5dd3c7475b856a29848583d","signature":"0548ee14daf1c9e1eac11d80f9afc06b144d14009f4c0ba35c0cad16b57024c6"},{"version":"58b58d84fc54ba5f4ca46937870c619349fd9eccc4d494250ac7bc73a94e05e9","signature":"aa333ffa319c18796c9104d75082dfd218334109f702eb6e9ad369beac518833"},{"version":"17e76f6e6093754756dd10182f833abf35f1020dc4a8a7ead8c0f9703576870b","signature":"74563c6f0fec0e4fb8f3e103e3d80351af1229a035137fbebcc4b3238fcf5763"},{"version":"1e477363fca474e23b9a1f0e5d2920cd7319e076eaa5156ba29ea4722b96bba5","signature":"ea6e4d0c7d2e0f9d19447f890dd7f4b5d8b5e4aaa7221da056608c535193eaee"},{"version":"42de3962daca60255bf1d3cd90bd3c038db73a3ed61ecaac6cffc6a153181e4a","signature":"a5a69817f699d0a399feba1ffd1de3b257911352ff7eb6ba5e91ef538af838a1"},{"version":"2cea2294d4947b88d815860f64e0b5e0eb47a59bde47cfd194aac2230c923865","signature":"3fd2cca637c19e2dd3f641f9029c5a55176f4605009eab8fba3807d102a0e34b"},{"version":"642f750ac24f307c937445bffecb251d0b54e389a1b384a49b9901c0d87ad755","signature":"c2bcdff465ce655b5a4db8b5c853037c0ffcbf934db8d5d68d30b18236ef7f7d"},{"version":"dc5a1c66d313ce3348088e88f15db9e6fa6cce08a209de937d58a0e5d7d90b34","signature":"221403255ef252fee666e90ec28fb66309bc80233391be0eb75bc0572ca207dd"},{"version":"8e25cff9a908f9b427ab0a9d4d45bc5ec508fcb34c56620a6d98b979fea6bc04","signature":"5d0fb663abddfee112eaadf32b6f372364e6d4d9f07d4fdbf44ac79f41f07db5"},{"version":"c9d125ce1243579956154cf4693943e1648be1da1de183806321b218ff2aa58b","signature":"dfbbdbda6cecd1ebd68904567a73f7879883837ffdf090289134f36cd6281603"},{"version":"3c6b1104b3073968b125e48f373c61e7ea5d0fc04ebe5ec9b7a2532157c68a97","signature":"1a04478ef720ea08c755d1883861e7c5198eabb718d7c9df89f5a905f4c96211"},"55bedd45e4d9628aa01295c97efd31e873574e5caa2b8a8d7e7107d67b441721",{"version":"e0fafe6b5b9984f5361fd5cfcbaa1d437944add84475411bef7687eac2049b2b","signature":"025a9a7fa75140877de9a88739a098e98fa6fcba700be6929794899f5721af2c"},"fc5ba84360bbd75c1d115e13e9c869b6ca0f8bf4aba0e35bcd9a0e3a0911d688",{"version":"285f575788bdc6cd4491306df9db0b7dfe2f53793c2cea2fbf56879e945f05fb","signature":"234049e8cd58b85b6c661fb5e291daf0a110c217d0d1036b4954fd905e7e8986"},"dd3dc6bd52ce93ac0d02f602a529a3dd21077b6c4e8ec463d3fcc4c24635b6b7",{"version":"20b755689e6ddb474b394ba8eb85855871a16becfdf019d93925c5d1a406b506","signature":"821ba89832001f42a5f9bc9dd8f6e273a2b6b306409ee164bfdc8ad00d6efa49"},{"version":"741adee423c998f2d70924e3e019eb59319a4251d19e9f00907ff71d6d10eeef","signature":"afc42f37731b5c230622a00182fc41026c6161b20732715e6766805220254583"},{"version":"9804d06f8fc62aa52cf3f5373745a4ab0c4cc1dac16d9c345ed7594653a115e1","signature":"ab274c4352f4a52f04767fe95c0b2856af9b28fd28ab0337060a78ea084b91e0"},{"version":"fe93c474ab38ac02e30e3af073412b4f92b740152cf3a751fdaee8cbea982341","impliedFormat":1},{"version":"3255b97f3f24af29c79cc1aa88004efb13b6285ebdde0a567bf32e19bb65250d","impliedFormat":1},{"version":"1e00b8bf9e3766c958218cd6144ffe08418286f89ff44ba5a2cc830c03dd22c7","impliedFormat":1},{"version":"12c06899aef359437b9f8e00efea73cf5af03ef598d1f78ed05d146c0c2a4aab","signature":"9dc7d1bfde02824f587fa95384a2adedc6d721a80c73bd1c982d2acb3c63c7e9"},{"version":"6aa2859da46f726a22040725e684ea964d7469a6b26f1c0a6634bb65e79062b0","impliedFormat":99},{"version":"748e4491c9efe3720e185f17d22033c7246341b68710b2e5d7500cac07415059","signature":"933fa1ee8f2a4d203589011944fc76d755d90af71b43ae3c1a174bbe7cac4cfa"},{"version":"7a33e0b083417a529702a065e7a3508b825628fe2188769d028962d61f4e67d7","signature":"0c6f146bf5402327aa93d97c9e263e92bb63b4d87f2af155416cc7d0490a8224"},{"version":"832b647cd752da7f0ad0313ca426a04bfd851d972467bb003294a99b4caefde7","signature":"f5b5d4d2565e15fa4ea35249f6dfac49afe8d18383b09d6f2732010ea11ff387"},{"version":"9cc856f177994fae623b710c68fdcfa461d6896e4a32e258db603a47eb77ffdc","signature":"1c58f4859d3d295aa528f4a7454cc8147e2a057303ddc5a4c635207e43960a39"},{"version":"68d95cb718067fe00d5124879fc384031680ea7cdb1e210233519612e119e8e3","signature":"ffc5ba7899cd510102a414a091cfaa96e12ddfa830ed29546385d81460a86781"},{"version":"354296e0266623cef602569a48cc095d3ed44c98d27b3a4cfa51d83e29a348c8","signature":"fd132caa638c00c50386d713510b365c04904786101a7781c4bdf51e08cb883c"},{"version":"4343097c50adde754b620170594ff8271568a0971315950dce2f44607df9dd80","signature":"2e424c3408a29c0ed051977e191e9d23f4deb33ed3609baee954a6fad99c5191"},{"version":"6ef7eac1e104c49abfc40ca3b027f55b279bb37633dc877fab54aa56f013b8e8","signature":"bab3efbacbeed2211b0d7c61b0d37806d1f6899081a608fa7979f6794868375c"},{"version":"4002026890e795d2ada82c8ffc4da7d0656fbfc0f4b3fbcf239616ba92379430","signature":"93e6d5d02433b7238be2c78ec0eadc8d0179be1cceb86db475f08fa5a8ee52a6"},{"version":"59b6c48fd8c6bd6126f9eb849b0a6f79acc69be4b09534bacbf2ea0cf89ebf58","signature":"df8b3ea676192262d9c2da41910477f146875bd900444cb5de496dd74f92422c"},{"version":"7c449c9a6643890bcc0249ec85867801e47f2e28381ccff64a1256f82a01be96","signature":"d10487882d054ca3cf9a2a27349e4dbf294f26dfc5c504d38067649eee020d47"},{"version":"ccabf6cc674a68b09d9168904bb46b7c1075a67312cf6f51f3e38b8eeacd2fdb","signature":"38df43baf0855698792e9af6ab80eb4bdf4f3ca3131ca06931b6e6b8a218eb20"},{"version":"d6bbe2fbc333d7337dbbc86b70871c39a7fbeeedc4ce3ac9f45a6da9476d581c","signature":"a5b6b71a52f389b7d115fc6b8bced82e8cf37df28240c4851c772ffa01cfe7f8"},{"version":"56e103156654d67277b57ad175dec9dec1cf591fffe83604cde9c164cb65b697","signature":"0c9125307dc3298cfa1a9e3f1dcec660c0e3b42a4d8f5e814927c82dcc0f3f8b"},{"version":"1e15359b2d33097e3a7571c7960125023c425b5d58b7750313d10086abfa867b","signature":"259725002e3502ea9ed78385814c8fa86ade362c5904e23bbb6ddba043f60d46"},{"version":"87481f277297e016acb703d854e09c4676572e332efb8b05f65f26a6443bbd6a","signature":"dc0612d3e5570bee3c4bc032deb54b3828f1d4ed7f1c6b257adcd110a0b05d8f"},{"version":"7c0709aed6d7c857caaf860a4e1db6dc4756797f0c26f3f7f374615edcd91a45","signature":"72061a66546ce2848222cbf23198173eafaff69f20119cf7f9a5b36eb032e4e6"},{"version":"a41b4d3d618416128d0093af2575048a2de8ef25c0926bcea4f19a24a59de476","signature":"0b8fd7aa2222d31c2de139a76ef2aa14dc86717c45b9ef30e2c733be1fa2707e"},{"version":"ead4349ff7b01d696ef89294a81d18ee1d3f732321398896462c834ab9b9e065","signature":"436462fa5201a375c9dbac742a2f3e0b71d98b4760239af217ce75e0f7a87868"},{"version":"2743d9d5de30981b01cda43d6f6d5a8d3aadb85a99d6e80de49c2a7d5941bc8e","signature":"146acc1e5b0bcdb16ba317e118b073e8a604c7ff382b8933fe04b20b76de3efd"},{"version":"1318ca1c9ad8f83a92c373f400c2482137695236a4f937eb442c5d35f63a932d","signature":"2ab438ddf1dffd90b2c967ad6dc247f2d3aae94ae8ddcfe0223dd8692fabfdaa"},{"version":"7580f21967d3e4172d32b1e1a557b8122cbbd63000802c30cb03908ca0d98414","signature":"adc26c515e8a90f4a6571d3c3b1b899589908892f6429605259949f887413db9"},{"version":"00bc9c0550e1c29e46c84290d7ba21a5d003baefbd68a236b6ad8c6f38793561","signature":"0affdaaa123e2a660fef3e10e66a66a010f52485b84a3a561451ec83c345cf16"},{"version":"861b78fc2c03c59ddbb966f8a8b0176e4ba0dfd14b6743a35d76be30f284bc3c","signature":"f457400dc07fcbc57da37be72e64051a79ae76bc32ee45aa4283fcdee0e7184e"},{"version":"208922a66b39638d878511969c99223fec0dac633f97fae8994e21e7a30b7aa6","signature":"3729ecc7bcda34452795d388e8213ce4e3c0c4a04a050c8fda4a73667e5cc461"},{"version":"e65ee3ba54a21ed61e3c50041bb12a6a3fcb215c56611cda6795c23a7bd89f61","signature":"50d02be96e1cb8e6cd0c0152732e2feb23e7d2125d1284f3feffcd49d0f11781"},{"version":"fbd613e0ccdf442e73262fec677630056486f63c0e03b027aa94e6fb0639a045","signature":"cce46fb956fd9ac6dacd24459a95d598239eec6c8cc9538c41fd728b9ff7fc19"},"7d8e2bcc917c7eab66773d8ec739854ca9f7c38eebd7221b3f68f17b5434c5c6",{"version":"8a057e7c0f0c1503ada06b2320ba3d54da5b35289a31054a81a58d486df1a19e","signature":"e542c24cae57d92fa096bf2f6a4e66aa438f681a6ee7a45536f2fab7cc121d0c"},"12afa56ac4215ac53e3ef06e80adbb1596bff219e41f9b849d7aea818309b734","f9902078c11479984eb93a57af34456c11f3a6fc0937a75eb5f5853a040ead12",{"version":"7e8cd5973fe879e2ec46c622e7ce9dba24066eca02ba6a78764880811c770b49","signature":"0ee491f9ca866e038594facba0f13cdba5d33ed77ea75720fb59901575ef553d"},{"version":"99e25cb89abede9c8371f612f936bdab0636f02f6220d5cf29effb952e2f75cc","signature":"127b5e8dedc0446ebf3921fd7f9578408ea0e19d93aa3d0b5354b8e245c1e54e"},{"version":"a823475f934d7ff044aaf807996770be46ebc6514a0901af000471b819ebd5f8","signature":"5c0cb27ce475d5d7437f65c9211639ca02c7114d4cb11d07288c89ed9067a30e"},"5af58e87e64b60b56728466a3125dd5e46b08e8e937c77c84cccc8eeb09a0429",{"version":"53f1a32689a6f14e4abc4f473e7b486be24ab81b2922365e2274c79e84d549f4","signature":"9a028ea6099fa67cf8c1dfb3a0bc6da33fb2cefab74a61be707f012007c01c19"},"597cc9ad88ab8aa828dc2c480f54e12c10c7be75d4b277671ef591cd9de56d7f",{"version":"fb5a20f0012821803529d1873db567a355feec51cf1c43246185418180558a50","signature":"510dd4f1641c5c4f4ec24a6944fb50070005ae438918bcaed5e4c240cb02cd88"},"e5c84d33318bce9170d57d2ba967c81bbc2f140e937e78c9ef1a10900626271c",{"version":"48dd43930725fce709771e4d0c0c86be7d317941e326cc4fcc4289fb8053262a","signature":"75caae122bbdeb0360493e9223052857ae2c8c59540e95765bf4e2c5df5603ef"},"a3cb909c8886efbb315505b149759a714036eb0f24ced8038cddafa257519060",{"version":"8374e9e9188eb62dc1717a33c088d4db188a6a3e971e50e492654e389cb9160f","signature":"fbabb19565451611a4606929f4800e24c181289301f12b8bb220d669f9c9705b"},"ba52f652eabdb6a4705834058706e0311eb1f2acf5f8b1ef99649664a515fbdd","f2a909f4592a886cc4d831f1a0110ab809a4803c8b77570aeba493ede106baa0",{"version":"b3cc3302fcd3b4c8dd1b5f29d372069c8f87e69fb65fc6b4d082c0149c64ed25","signature":"eb904f47da1cdf4ced4f809f9395e902c4ce9e836096b75ef01f5cee9ff31dd9"},{"version":"8080b1ee5ae900523b4861dc6db83bd6816a939f54cec05ebb26d33de81c3ef1","signature":"a480b296d50a6813e2377399df9af2bdb1cd5ba93a7d88d84246b4f2d657caec"},{"version":"cb3447302e4aeabacbed21aa47a3126b73cf63a85f1fb9236fca0fbc74fc6fa0","signature":"9f71c319a721a344952d19efa4be2923bed66257c555987934729f7eed22ecc2"},{"version":"a44614f1169502955b8ec789b7300cf423ffa6f5510fce1f7c9372f1302eb17e","signature":"985875e9dc2e64f4d2590c446a9680d3b9962250d6de1bf5559b3c0862b7661c"},{"version":"7676dff324a6a719eda70a4cae36c9caa060b9c3d6ad3f4639647b08ff633d16","signature":"dad52412d59a05a36d09d491d46924e88a834d19106e63153ed52c9c87b3c38a"},"7fbeae8974e10b2a0eed0ecc0556a7cde432109502e7b2b5d94ec63c69c25912","3d25095de99f04919172825fdc81ad4fd28c283c03795f8bd69e39b6d404e69f","031126a812f418e05d0de1f958b386ea1f7bd29bf1b1f5b02b84ba7c2782c704","8e8b6ee0083566fd99a6a6cd1cd12e9494e90e0a25180b1f648fbe1d19849549",{"version":"0e1e7ce1e371ddc58c6f6ecd4daf743192b26266349cc152179e867e9f51c291","signature":"69dfcf342c9e8891f59ef732c980ff4a0f780c97636e18b5ef5f821fe5e43f6b"},{"version":"5a0b0c1d3a26581868854e9017cf34b4678bd29dc9894fc86316ded66a0ff8be","signature":"430ee4affbe781e7df0fb141d542913f07e1ebb9faa7527c09a9c10500a04bfe"},"9a53906d9a50d6ac6374c2c111b9ddaaf24e5a396376dfe9749ddc6aea0cd9df","a65c336c812f097139e5864376b827267aebca3f392f07e689a9bb80d4bb27e7","5be36860e4c4997766f91c0870af4c3fd0823ce2a6d2c03f7323f672bc63bba8",{"version":"8bf9ee3935ab86c268a2a71cb5b4b67d3d5587ca9f2e0bf25f37ffdb1980434c","signature":"f9cdbab48e5d956dc3fa248cc214c2592a7fb4e38f7e4960981ff8b3a6d066b7"},{"version":"ab9b6500ba6b6e5e8fb5b63ac400279838c45b3006c7a039dd532af3b6947f5c","signature":"9a0f929ed7751273653bf241f4216eb40b6ae9a201d7b22220e40f9c41d32592"},"eb99c0954b1f860beda85890e02c7bd89a79304bf542725f2bd3b7b675a767d0",{"version":"9b06399300da901166ffa17a6244e20159a80ab79238e5b0c460ac1713a489ca","signature":"cea97004d3c14ce4595ac6fc52e0d729bf91ba9ee0899b2cc5c7053167c30499"},{"version":"b7c92bc0443e3817d7ab9e236366cce5da201c28ce70d1a7f731544ccee9e064","signature":"f807737a6be4499fe6b5616bca83bb0be97951a7ba5b43ecebc04ef674a34b5a"},"47b1753eb833a46f05af1df14b708ed49cfe559dd03e86b2d38aefa2ae65db0f","9148f91be5b3a1019deb18f3051efa290cb0fbba0e2ffe74476a1a421c40a86b","06e0e209975dc0a483ccd0e18f7c776e7d0e0c6b49813c7b7afd119953b1ebd1","399980676c8892b3220beb4f69abcba3381a27ec64460b0861e473534ebea817","e2fc96d805ebcc857be58859cbc486a467f6cc5981194937f37e7ab260794e1a",{"version":"7dcf6d96042be82551cbb864d7834895d9abe49663bf5321546c48d0b9b2bf18","signature":"71448f2cfbe1028d701b76ca01f0ba0feb8914a64327c7fe1ce7d5d655ab2762"},"57407963d9d4be0b179beab4af682dd92270b183fa34d1e43959a0e49fe32112","753887c0163c600a0a6a08c2dcf713f3d76bba70438c1024425f2f77a0e9c3f6","85ed71a3cad3a51e8da7f5fe4afe32b22613a0112ca0c87a7b5339851de01995","06564a7b633b4e45e50ae1a8abbe1ab56279f4b57a8c8c7cf4f45654df1d9ee1","e3ee1ce07d181908f1cc71784d755047acb3bfe6c92f41c779cd4019dcb35784","8016e74e093418423ed166ae98ae96d8e2a36ab4c0d8e33377c4e8f9b1b0be5a","491e487ac5a1f5da5fb1859d101b964f1a662853d2581cc67c90a65b8776d741","0da11d09e49a582903533ce96a7380a68fc60c8f19839d505e8c1902c3481c19",{"version":"321073e664692e3fed12a3f326afb55448779171ecbfd9e3fa4fabed3220e6b7","signature":"621b6db63cfe465afbfc31b5437ce2785b399050b53f94cbf5dcb51c16235237"},{"version":"94b7dcf73d8350030b6a643254933522c8466c5fe7c8c8d4a716b427de9d0e6a","signature":"096a133c938ec5f61c2f410650e7d5ed1c19c1d9daf1a02f0bf678895748c879"},"ebb442fdb675555dcbe8c45c7061f2aa31b83f613f07f929da0e06f7a3bf3251","a86936d466403c1f99f7580a76e7c466b78b239971854a324288f3c9f26dc01a","cad5342aa95d8929012995357b3c787dde0dcbfdde7e42be1f926e6d210a7d07","16d68ca0412b2db3ad8e6149552f085008121d4958b04bfb9c9693db47b892db","6756ccd87b3efc5f3213df2b5c29ebc757198560ad39f72258b188f863b922b2","b245c2c31def3c707248c7b039963a1e75bcd70b5da1655f0e0b483b7aa9fddd","598aa13012a8dc3b9634d5598e05526e852eb5e1c25953824c556a76c8ae0c69","c01f5ee92a77b1ff90c0e982e5cd9aae20f5b94e3967c64ed083d2df8252f32d","632d10cf51ca6eda84ade4cb8044c084b3872142acc3d0bc07b0a27e086895c8","eb0712a14313ff5f23e09f9f6da76c6da846daeabc2219db58bea1906711e541","3cb28ba0b89c15b0d5d83a1193c11843dc5a77ba2a9948fd438d720b23fa6787",{"version":"4043859aff681dfee15b927537d23c2b432b88768d1c2ca87cd5641904d5094c","signature":"86f7fe134a8f7b19a5d8455e5beeacf98be1a051c56ee446556ba11cdd764b30"},{"version":"d400a2faf81a780339fcbb94c36107a71165698c9ed573264fa7ed4306041e4f","signature":"d58abe97c451055480e2c78c29bde24dd6e7460195b75139e406cdbf08a21929"},{"version":"ee614ee3873f6acdd9939ffa852aa4b8c22bc085434add2a569b61afa335f5ee","signature":"d5876bdcd850145c4be67cd92ce2a6079bda187c7c02b4907b0b813d9b0ef7da"},{"version":"4edef20b15e0fb1e655958815b30cad330ef09d27391cca66d362854c8fb16b5","signature":"496e640800b304c0bb89c019a850c3c2c1b6217e4d2c85c60d41c25a8595dc6b"},{"version":"d2c5ec05ca72b4f2fe1fde2d950f3e4be112f64fa888a272c2abb3f4bfbf91b9","signature":"02249608632de4dba625c09efeb32c5cb3fb5559f4474244cf87811fce8553c8"},"d5dc0f935a57204244a2f4f72d3345a85c23e4062def1f88c74350e6047cb4ae","d53cdfef1235305dafb0addc0d190f7bb4807bd53682072b2dc9d4dc357ba774",{"version":"0935c4b1867743d097a7addfb6bc0b2cd5d2bb840289bcf8e7b097c36acafdac","signature":"6541aaeec84de0a8ba470d15b6a4cff19f10ad7bce12ad59e7c6af1c6755c857"},"368698efbb39bfc7c9a37940914b48f1e3ab8d6323490d2b45b16efbbb0f8f23","24a85f5dcc88492ef4b71d13a7ac1e8949b3daa319e63601bc51fe6f10eea17c","90cdc221171b2db868b768f01cc0b0c6ec0e817b6760cf5875e07f43818b7d7f",{"version":"4076270e44f5e425c30e1e5ffdf16273acf4c03937d0b8ffe6edcdf35d00e014","signature":"f78a41fe58d09bb931f375caaa5adaa1593a1f705744cd645cdc60e75dd6df0d"},{"version":"357b2f9aac0192c071cb2ed65cb6e4c8ec01fa02fc15cf50d889b85731b75666","signature":"11d6efbf31b21592f4572cc36e2c30d3c0f6ec6fee6a6775e80ca363604a97df"},{"version":"425b94e5b4d7846d543d1ab74ac743a70c81c2619fc9e370c59b2f2c422bfe7c","signature":"3c99ffebe7fbe6f0f21b277f64af92c807c127204e7471fb7e6eea65245eb96b"},{"version":"e0b67fd2877af4f79e7126a8e25b8a912b4c6d928c1c1f1ca9bb546fd6d5ad09","signature":"24795bf5608837e72f03c49d1eaaea700cb27e139a73c1cb7434f3ac08a5446b"},{"version":"23c51de5b43004d8a78d7b38d3e293117a296d10830e22db1ff1586a355a902e","signature":"b39c9c69c637158afe2cda5c4fccc7c8106c64eef0762fa118405e419ab7e0ad"},{"version":"10a3e0bf17d8abe6dd96f08f4a635629e047d0533cd02071d6b86c8419c862e9","signature":"44e4a3a036b6fa3bc6df7d3358578c0925936f4e2075ac16fcd45dbd90857996"},{"version":"3678009606f08dc405f9f705589bd330ee83abbb8b1318559c932bbd69d87800","signature":"d6a7287c21fa2c43e0bf3593586ffdcf62171b160c1635211b05e75196ad72ff"},{"version":"8482603c8d1521b372314b36a278376dad9f91e89480b15489d3ac3a074b9680","signature":"5e132ff0a8ac5d4147629fa485ec2056ffc9c2d2d22f63451a3fd233a883d4f4"},{"version":"351e06dfcfe1832ec5b6c4b50a095e2b3a876459833123c272a2fe9bacec5cb3","signature":"21b540e285003d88606668c01c8de02f6fb176e9198c98328a2da46564bc46c8"},{"version":"df5152855c00858c82aaea1d22e729a853e833f15bc057750353e139feb337ae","signature":"df0070e545c9c8df44849927a91035c6983e40d8bf3554bebeb02008fb6c37d4"},{"version":"45bb02a28810375147c6aefd646a4a55ef34a628000f6b2fbc77629ddd15c233","signature":"17bfbc93edab8c8b853b61cd382e2dac843a62376dd712c18ed6db720f04772d"},{"version":"a9373d52584b48809ffd61d74f5b3dfd127da846e3c4ee3c415560386df3994b","impliedFormat":99},{"version":"68c01eac9087e3e9557c8cc6bf697b5a300895f59ffd748b26dfe160647463d9","impliedFormat":99},{"version":"0a60daa545b41003e922202c01e47d0cea514b09ba0af1e4684222f5b332841e","impliedFormat":99},{"version":"8dd450de6d756cee0761f277c6dc58b0b5a66b8c274b980949318b8cad26d712","impliedFormat":99},{"version":"904d6ad970b6bd825449480488a73d9b98432357ab38cf8d31ffd651ae376ff5","impliedFormat":99},{"version":"2059b04988eece7f6e992a5c218e9c5361b8fed24cb04caddb7e1cb4339e236b","impliedFormat":99},{"version":"bb703864a1bc9ca5ac3589ffd83785f6dc86f7f6c485c97d7ffd53438777cb9e","impliedFormat":1},{"version":"b80b0f0356add12993366cd4571ceae1416f50035ac189876373d0e5050308c5","signature":"6a8a61a167f2c837aec2d0ddcfd6239a0c0eec8201bf0658ee1ae774f4b67422"},{"version":"a13f55a7c1406197608f223006cf16f211a257b213362caaef0d2abf3a389c8f","signature":"4700c4aaa2f5711d21a8cd9a22eef223fe7b80bd96a12d3467cb6f84c81a3f25"},"d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7","84178cb862a3b37f8102cec17af4c66b166a22cb0a5cd5428dc4c8656d794327","d1986184a09a52db8228cb2bb2a61a8c05c9354e5b93cec8e2628d8579c892d7",{"version":"75421a9c0088dac67b8d07519590a4fab4e8360644e7dbb476d2509957377711","affectsGlobalScope":true},"41f7ddd7cccdaf7f4e35fbc875c38e1f29d63e770cdd918e3a192804c723c7fa",{"version":"c2a6a737189ced24ffe0634e9239b087e4c26378d0490f95141b9b9b042b746c","impliedFormat":1},{"version":"151ff381ef9ff8da2da9b9663ebf657eac35c4c9a19183420c05728f31a6761d","impliedFormat":1},{"version":"f3d8c757e148ad968f0d98697987db363070abada5f503da3c06aefd9d4248c1","impliedFormat":1},{"version":"96d14f21b7652903852eef49379d04dbda28c16ed36468f8c9fa08f7c14c9538","impliedFormat":1},{"version":"11a3a97b6f4ebeb1464f05e932538532efaf939094a2df2bb8ba5c7013b2c299","impliedFormat":1},{"version":"1f4ae755492a669b317903a6b1664cb7af3fe0c3d1eec6447f4e95a80616d15a","impliedFormat":1},{"version":"0b301e46295e7dee8bcead624b4a0f94ab8ba1cb3f572b726977322293be2196","impliedFormat":1}],"root":[[531,537],[576,578],581,[589,591],[600,604],610,613,625,979,[981,991],1174,1175,1179,1180,[1262,1267],[1269,1296],1298,1300,[1302,1304],1308,[1310,1421],[1429,1435]],"options":{"allowJs":true,"esModuleInterop":true,"jsx":4,"module":99,"skipLibCheck":true,"strict":true,"target":4},"referencedMap":[[1433,1],[1434,2],[1435,3],[1431,4],[531,2],[1432,5],[1330,6],[1339,7],[1344,8],[1348,9],[1351,10],[1353,11],[1354,12],[1361,13],[1364,14],[1366,15],[1369,16],[1372,17],[1375,18],[1377,19],[1323,20],[1324,21],[1378,22],[1382,23],[1385,24],[1387,25],[1388,26],[1393,27],[1396,28],[1399,29],[1400,30],[1401,31],[1404,32],[1406,33],[1409,34],[536,35],[537,35],[1311,36],[1312,37],[1318,38],[1319,39],[1357,40],[1358,41],[1356,40],[1337,42],[1340,43],[1345,44],[1346,45],[1349,46],[1350,47],[1352,48],[1359,49],[1360,50],[1363,51],[1365,42],[1367,52],[1370,53],[1371,54],[1374,55],[1373,56],[1376,42],[1381,48],[1379,48],[1380,48],[1383,57],[1384,48],[1386,58],[1391,59],[1390,60],[1392,48],[1389,61],[1394,62],[1395,63],[1398,64],[578,65],[1333,66],[1334,67],[1362,68],[1397,69],[1402,70],[1403,71],[1405,56],[1408,72],[1407,73],[1331,74],[1332,75],[1410,76],[1336,77],[1338,78],[1329,40],[591,79],[601,80],[604,81],[602,82],[603,82],[1315,83],[1411,84],[1413,85],[1326,86],[1414,87],[1322,88],[1416,89],[1417,90],[610,91],[981,92],[983,93],[984,94],[987,95],[988,96],[1174,97],[1175,98],[1179,99],[991,100],[577,101],[1180,102],[1292,103],[1418,89],[1419,104],[1420,105],[1343,106],[1421,107],[1355,40],[1342,108],[1341,109],[1415,110],[1308,111],[1347,112],[1412,113],[1320,112],[1325,114],[1286,115],[613,116],[1327,106],[989,117],[1328,118],[1429,119],[1321,120],[982,121],[1335,89],[590,122],[1288,123],[625,124],[1289,82],[581,106],[979,125],[1290,126],[985,127],[589,128],[1313,120],[1314,129],[986,82],[1310,130],[990,131],[600,132],[1430,106],[1368,133],[1287,106],[1291,134],[1263,135],[1264,136],[1265,136],[1266,40],[1267,40],[1269,137],[533,40],[1270,40],[1285,138],[1284,40],[1275,139],[1276,140],[1293,141],[1294,141],[1295,142],[1316,143],[1262,40],[1317,144],[1271,40],[1273,145],[1272,146],[1277,40],[535,147],[1278,40],[1279,148],[1280,40],[1274,140],[1281,40],[1282,40],[1283,140],[576,149],[532,150],[534,151],[676,152],[680,153],[679,154],[675,155],[678,156],[672,157],[677,152],[693,158],[695,159],[694,160],[684,161],[723,162],[722,163],[703,164],[715,165],[698,166],[701,164],[699,167],[727,168],[726,169],[725,167],[729,170],[728,171],[724,165],[611,165],[612,172],[734,173],[735,174],[733,175],[732,176],[731,177],[730,173],[739,178],[738,179],[737,180],[673,181],[674,182],[736,183],[712,184],[709,185],[749,165],[748,165],[747,165],[705,185],[717,167],[718,165],[714,165],[713,165],[704,165],[751,186],[750,187],[743,164],[702,164],[746,185],[745,165],[741,188],[706,165],[711,189],[708,190],[710,184],[697,191],[740,166],[720,192],[721,2],[716,165],[707,165],[744,164],[742,167],[782,193],[781,194],[779,195],[757,196],[780,165],[783,136],[785,197],[784,198],[685,185],[686,165],[687,165],[787,199],[786,200],[688,201],[689,190],[681,202],[683,203],[682,204],[690,165],[691,205],[692,185],[789,206],[791,207],[790,208],[792,185],[793,165],[794,165],[795,165],[797,165],[796,165],[809,209],[808,210],[801,211],[802,190],[803,136],[799,212],[800,213],[804,214],[805,165],[806,205],[807,185],[618,173],[617,188],[616,215],[622,216],[621,217],[620,188],[614,188],[595,218],[619,219],[813,220],[812,221],[811,165],[810,165],[663,222],[646,223],[648,224],[645,225],[661,226],[644,227],[664,228],[649,227],[650,229],[665,227],[659,230],[651,227],[653,231],[654,227],[655,232],[652,227],[643,233],[656,226],[657,227],[666,234],[658,222],[667,235],[660,236],[662,237],[642,2],[593,238],[594,239],[963,240],[624,241],[623,242],[584,243],[788,167],[719,2],[592,244],[607,2],[912,165],[582,2],[583,245],[696,167],[586,246],[647,247],[615,167],[752,184],[753,185],[761,185],[760,248],[763,165],[762,165],[778,249],[777,250],[764,165],[765,165],[766,189],[767,190],[768,184],[769,248],[771,185],[770,165],[759,251],[755,252],[758,253],[754,254],[773,255],[772,256],[776,165],[774,257],[775,165],[815,258],[814,248],[756,259],[606,260],[605,165],[822,261],[821,262],[818,263],[820,263],[816,165],[817,263],[819,263],[833,184],[831,185],[826,185],[835,165],[837,264],[836,265],[825,165],[834,165],[824,165],[832,266],[828,190],[829,184],[823,157],[827,165],[830,165],[842,267],[840,267],[841,267],[847,268],[846,269],[843,267],[839,270],[845,267],[844,267],[838,2],[852,271],[851,272],[850,273],[849,274],[848,2],[971,184],[972,185],[975,165],[974,165],[978,275],[977,276],[970,189],[968,190],[969,184],[966,277],[965,278],[964,279],[973,165],[967,280],[976,165],[861,184],[862,185],[865,281],[864,282],[860,266],[857,283],[859,184],[855,284],[854,285],[853,286],[858,287],[863,165],[872,288],[871,289],[868,290],[870,290],[866,165],[867,290],[869,290],[878,291],[877,173],[876,292],[875,293],[874,185],[873,188],[882,294],[884,165],[886,295],[885,296],[879,165],[881,294],[883,165],[880,294],[900,184],[893,185],[904,165],[903,165],[891,165],[906,297],[905,298],[898,185],[899,165],[897,165],[888,188],[896,165],[895,189],[892,190],[894,184],[887,191],[901,165],[902,165],[889,188],[890,165],[588,299],[587,165],[910,300],[916,301],[915,302],[914,300],[908,300],[907,173],[913,303],[911,300],[909,300],[599,304],[598,305],[596,306],[597,307],[923,308],[922,309],[919,310],[921,311],[920,312],[918,313],[917,311],[934,165],[936,184],[933,165],[930,165],[926,314],[931,165],[938,315],[937,316],[935,283],[924,317],[927,318],[929,319],[932,165],[925,320],[928,165],[942,321],[941,157],[940,322],[939,157],[946,323],[945,323],[950,324],[949,325],[948,323],[947,323],[944,165],[943,326],[958,184],[962,327],[961,328],[957,266],[955,283],[956,184],[959,167],[953,329],[952,330],[951,331],[954,332],[960,165],[585,333],[609,334],[608,247],[856,190],[671,335],[670,336],[668,2],[669,337],[700,338],[798,167],[629,167],[627,339],[628,340],[634,341],[632,342],[630,2],[633,343],[631,344],[636,167],[635,2],[1080,345],[1082,346],[1081,2],[1083,347],[1084,348],[1079,349],[1114,350],[1115,351],[1113,352],[1117,353],[1120,354],[1116,355],[1118,356],[1119,356],[1121,357],[1122,358],[1127,359],[1124,360],[1123,167],[1126,361],[1125,362],[1131,363],[1130,364],[1128,365],[1129,355],[1132,366],[1133,367],[1137,368],[1135,369],[1134,370],[1136,371],[1072,372],[1054,355],[1055,373],[1057,374],[1071,373],[1058,375],[1060,355],[1059,2],[1061,355],[1062,376],[1069,355],[1063,2],[1064,2],[1065,2],[1066,355],[1067,377],[1068,378],[1056,357],[1070,379],[1138,380],[1111,381],[1112,382],[1110,383],[1048,384],[1046,385],[1047,386],[1045,387],[1044,388],[1041,389],[1040,390],[1034,388],[1036,391],[1035,392],[1043,393],[1042,390],[1037,394],[1038,395],[1039,395],[1075,375],[1073,375],[1076,396],[1078,397],[1077,398],[1074,399],[1025,377],[1026,2],[1049,400],[1053,401],[1050,2],[1051,402],[1052,2],[1028,403],[1029,403],[1032,404],[1033,405],[1031,403],[1030,404],[1027,373],[1085,355],[1086,355],[1087,355],[1088,406],[1109,407],[1097,408],[1096,2],[1089,409],[1092,355],[1090,355],[1093,355],[1095,410],[1094,411],[1091,355],[1105,2],[1098,2],[1099,2],[1100,355],[1101,355],[1102,2],[1103,355],[1104,2],[1108,412],[1106,2],[1107,355],[1139,379],[1146,413],[1142,379],[1140,379],[1141,379],[1143,379],[1144,379],[1145,379],[1153,414],[1152,415],[1156,416],[1157,417],[1154,418],[1155,419],[1173,420],[1165,421],[1164,422],[1163,379],[1158,423],[1162,424],[1159,423],[1160,423],[1161,423],[1148,379],[1147,2],[1151,425],[1149,418],[1150,426],[1166,2],[1167,2],[1168,379],[1172,427],[1169,2],[1170,379],[1171,423],[1002,2],[1004,428],[1005,429],[1003,2],[1006,2],[1007,2],[1010,430],[1008,2],[1009,2],[1011,2],[1012,2],[1013,2],[1014,431],[1015,2],[1016,432],[1001,433],[992,2],[993,2],[995,2],[994,167],[996,167],[997,2],[998,167],[999,2],[1000,2],[1024,434],[1022,435],[1017,2],[1018,2],[1019,2],[1020,2],[1021,2],[1023,2],[638,436],[640,437],[641,438],[637,2],[639,2],[375,2],[1422,167],[1427,439],[1424,440],[1425,440],[1426,440],[1423,441],[573,442],[1178,443],[552,444],[562,445],[559,445],[560,446],[544,446],[558,446],[539,445],[545,447],[548,448],[553,449],[541,447],[542,446],[555,450],[540,447],[546,447],[549,447],[554,447],[556,446],[543,446],[557,446],[551,451],[547,452],[572,453],[550,454],[561,455],[538,446],[563,446],[564,446],[565,446],[566,446],[567,446],[568,446],[569,446],[570,446],[571,446],[1177,456],[1176,2],[1436,457],[1437,2],[1438,2],[1439,2],[141,458],[142,458],[143,459],[97,460],[144,461],[145,462],[146,463],[92,2],[95,464],[93,2],[94,2],[147,465],[148,466],[149,467],[150,468],[151,469],[152,470],[153,470],[154,471],[155,472],[156,473],[157,474],[98,2],[96,2],[158,475],[159,476],[160,477],[192,478],[161,479],[162,480],[163,481],[164,482],[165,483],[166,484],[167,485],[168,486],[169,487],[170,488],[171,488],[172,489],[173,2],[174,490],[176,491],[175,492],[177,493],[178,494],[179,495],[180,496],[181,497],[182,498],[183,499],[184,500],[185,501],[186,502],[187,503],[188,504],[189,505],[99,2],[100,2],[101,2],[140,506],[190,507],[191,508],[196,509],[460,167],[197,510],[195,511],[462,512],[461,513],[193,514],[458,2],[194,515],[83,2],[85,516],[457,167],[227,167],[1440,517],[1441,2],[1442,2],[102,2],[580,518],[579,519],[574,2],[1428,520],[84,2],[980,167],[483,521],[488,522],[495,523],[478,524],[231,2],[239,525],[379,526],[382,527],[354,2],[367,528],[374,529],[256,2],[356,2],[237,2],[353,530],[399,531],[238,2],[229,532],[381,533],[383,534],[384,535],[455,536],[348,537],[301,538],[361,539],[362,540],[360,541],[359,2],[355,542],[380,543],[240,544],[425,2],[426,545],[267,546],[241,547],[268,546],[304,546],[207,546],[377,548],[376,2],[366,549],[473,2],[216,2],[494,550],[433,551],[434,552],[430,553],[512,2],[331,2],[435,136],[431,554],[517,555],[516,556],[511,2],[282,2],[334,557],[333,2],[510,558],[432,167],[287,559],[294,560],[296,561],[286,2],[291,562],[293,563],[295,564],[290,565],[288,2],[292,566],[513,2],[509,2],[515,567],[514,2],[285,568],[504,569],[507,570],[275,571],[274,572],[273,573],[520,167],[272,574],[261,2],[522,2],[1306,575],[1305,2],[523,167],[524,576],[199,2],[363,577],[364,578],[365,579],[203,2],[368,2],[223,580],[198,2],[447,167],[205,581],[446,582],[445,583],[436,2],[437,2],[444,2],[439,2],[442,584],[438,2],[440,585],[443,586],[441,585],[236,2],[233,2],[234,546],[388,2],[393,587],[394,588],[392,589],[390,590],[391,591],[386,2],[453,136],[228,136],[482,592],[489,593],[493,594],[322,595],[321,2],[316,2],[469,596],[477,597],[349,598],[350,599],[428,600],[338,2],[451,601],[326,167],[343,602],[454,603],[339,2],[342,604],[340,2],[452,605],[449,606],[448,2],[450,2],[346,2],[424,607],[211,608],[324,609],[328,610],[344,611],[347,612],[336,613],[329,614],[476,615],[402,616],[320,617],[208,618],[475,619],[204,620],[395,621],[387,2],[396,622],[413,623],[385,2],[412,624],[91,2],[407,625],[232,2],[427,626],[403,2],[217,2],[219,2],[358,2],[411,627],[235,2],[259,628],[345,629],[265,630],[325,2],[410,2],[389,2],[415,631],[416,632],[357,2],[418,633],[420,634],[419,635],[369,2],[409,618],[422,636],[319,637],[408,638],[414,639],[244,2],[248,2],[247,2],[246,2],[251,2],[245,2],[254,2],[253,2],[250,2],[249,2],[252,2],[255,640],[243,2],[311,641],[310,2],[315,642],[312,643],[314,644],[317,642],[313,643],[224,645],[303,646],[472,647],[470,2],[499,648],[501,649],[465,650],[500,651],[212,652],[209,652],[242,2],[226,653],[225,654],[221,655],[222,656],[230,657],[258,657],[269,657],[305,658],[270,658],[214,659],[213,2],[309,660],[308,661],[307,662],[306,663],[215,664],[456,665],[257,666],[464,667],[429,668],[459,669],[463,670],[352,671],[351,672],[332,673],[318,674],[300,675],[302,676],[299,677],[421,678],[323,2],[487,2],[220,679],[423,680],[471,681],[330,2],[260,682],[337,683],[335,684],[262,685],[397,686],[466,2],[263,687],[398,687],[485,2],[484,2],[486,2],[468,2],[467,2],[400,688],[327,2],[297,689],[218,690],[276,2],[202,691],[264,2],[491,167],[201,2],[503,692],[284,167],[497,136],[283,693],[480,694],[281,692],[206,2],[505,695],[279,167],[280,167],[271,2],[200,2],[278,696],[277,697],[266,698],[341,487],[401,487],[417,2],[405,699],[404,2],[289,568],[210,2],[298,167],[474,580],[481,700],[86,167],[89,701],[90,702],[87,167],[88,2],[378,703],[373,704],[372,2],[371,705],[370,2],[479,706],[490,707],[492,708],[496,709],[1307,710],[498,711],[502,712],[530,713],[506,713],[529,714],[508,715],[518,716],[519,717],[521,718],[525,719],[528,580],[527,2],[526,457],[626,2],[406,720],[1309,167],[575,2],[81,2],[82,2],[13,2],[14,2],[16,2],[15,2],[2,2],[17,2],[18,2],[19,2],[20,2],[21,2],[22,2],[23,2],[24,2],[3,2],[25,2],[26,2],[4,2],[27,2],[31,2],[28,2],[29,2],[30,2],[32,2],[33,2],[34,2],[5,2],[35,2],[36,2],[37,2],[38,2],[6,2],[42,2],[39,2],[40,2],[41,2],[43,2],[7,2],[44,2],[49,2],[50,2],[45,2],[46,2],[47,2],[48,2],[8,2],[54,2],[51,2],[52,2],[53,2],[55,2],[9,2],[56,2],[57,2],[58,2],[60,2],[59,2],[61,2],[62,2],[10,2],[63,2],[64,2],[65,2],[11,2],[66,2],[67,2],[68,2],[69,2],[70,2],[1,2],[71,2],[72,2],[12,2],[76,2],[74,2],[79,2],[78,2],[73,2],[77,2],[75,2],[80,2],[118,721],[128,722],[117,721],[138,723],[109,724],[108,725],[137,457],[131,726],[136,727],[111,728],[125,729],[110,730],[134,731],[106,732],[105,457],[135,733],[107,734],[112,735],[113,2],[116,735],[103,2],[139,736],[129,737],[120,738],[121,739],[123,740],[119,741],[122,742],[132,457],[114,743],[115,744],[124,745],[104,746],[127,737],[126,735],[130,2],[133,747],[1260,748],[1254,749],[1258,750],[1255,750],[1251,749],[1259,751],[1256,752],[1257,750],[1252,753],[1253,754],[1247,755],[1188,756],[1190,757],[1246,2],[1189,758],[1250,759],[1249,760],[1248,761],[1181,2],[1191,756],[1192,2],[1183,762],[1187,763],[1182,2],[1184,764],[1185,765],[1186,2],[1193,766],[1194,766],[1195,766],[1196,766],[1197,766],[1198,766],[1199,766],[1200,766],[1201,766],[1202,766],[1203,766],[1204,766],[1205,766],[1206,766],[1208,766],[1207,766],[1209,766],[1210,766],[1211,766],[1212,766],[1213,766],[1245,767],[1214,766],[1215,766],[1216,766],[1217,766],[1218,766],[1219,766],[1220,766],[1221,766],[1222,766],[1223,766],[1224,766],[1225,766],[1226,766],[1228,766],[1227,766],[1229,766],[1230,766],[1231,766],[1232,766],[1233,766],[1234,766],[1235,766],[1236,766],[1237,766],[1238,766],[1239,766],[1240,766],[1241,766],[1244,766],[1242,766],[1243,766],[1268,40],[1297,768],[1299,768],[1301,768],[1261,768],[1298,769],[1300,770],[1302,771],[1296,772],[1303,773],[1304,774]],"affectedFilesPendingEmit":[1435,1432,1330,1339,1344,1348,1351,1353,1354,1361,1364,1366,1369,1372,1375,1377,1323,1324,1378,1382,1385,1387,1388,1393,1396,1399,1400,1401,1404,1406,1409,536,537,1311,1312,1318,1319,1357,1358,1356,1337,1340,1345,1346,1349,1350,1352,1359,1360,1363,1365,1367,1370,1371,1374,1373,1376,1381,1379,1380,1383,1384,1386,1391,1390,1392,1389,1394,1395,1398,578,1333,1334,1362,1397,1402,1403,1405,1408,1407,1331,1332,1410,1336,1338,1329,591,601,604,602,603,1315,1411,1413,1326,1414,1322,1416,1417,610,981,983,984,987,988,1174,1175,1179,991,577,1180,1292,1418,1419,1420,1343,1421,1355,1342,1341,1415,1308,1347,1412,1320,1325,1286,613,1327,989,1328,1429,1321,982,1335,590,1288,625,1289,581,979,1290,985,589,1313,1314,986,1310,990,600,1430,1368,1287,1291,1263,1264,1265,1266,1267,1269,533,1270,1285,1284,1275,1276,1293,1294,1295,1316,1262,1317,1271,1273,1272,1277,535,1278,1279,1280,1274,1281,1282,1283,576,534,1298,1300,1302,1296,1303,1304],"version":"5.9.3"} \ No newline at end of file