bitsnap-react 1.15.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +8 -0
- package/README.md +132 -2
- package/dist/CartProvider-DGRZDTYC.mjs +2 -0
- package/dist/CartProvider-YVOHSMPE.js +2 -0
- package/dist/CartProvider-YVOHSMPE.js.map +1 -0
- package/dist/PanelModelFiles-NYCOFPLY.js +2 -0
- package/dist/PanelModelFiles-NYCOFPLY.js.map +1 -0
- package/dist/PanelModelFiles-RV7OHUUZ.mjs +2 -0
- package/dist/PanelModelFiles-RV7OHUUZ.mjs.map +1 -0
- package/dist/Viewer3D-2IDEH6W3.mjs +2 -0
- package/dist/Viewer3D-2IDEH6W3.mjs.map +1 -0
- package/dist/analytics.d.mts +2 -2
- package/dist/analytics.d.ts +2 -2
- package/dist/analytics.js +1 -1
- package/dist/analytics.js.map +1 -1
- package/dist/analytics.mjs +1 -1
- package/dist/catalog.d.mts +6 -2
- package/dist/catalog.d.ts +6 -2
- package/dist/catalog.js +1 -1
- package/dist/catalog.js.map +1 -1
- package/dist/catalog.mjs +1 -1
- package/dist/chunk-2NL5FCXC.mjs +4 -0
- package/dist/chunk-2NL5FCXC.mjs.map +1 -0
- package/dist/{chunk-PEVB3VL4.mjs → chunk-2UDAB2C5.mjs} +2 -2
- package/dist/{chunk-PEVB3VL4.mjs.map → chunk-2UDAB2C5.mjs.map} +1 -1
- package/dist/{chunk-7DG4UPWE.js → chunk-4BL7TLK3.js} +2 -2
- package/dist/chunk-4BL7TLK3.js.map +1 -0
- package/dist/chunk-4ETIDGYZ.mjs +2 -0
- package/dist/chunk-4ETIDGYZ.mjs.map +1 -0
- package/dist/chunk-555KFWGY.js +4 -0
- package/dist/chunk-555KFWGY.js.map +1 -0
- package/dist/chunk-5ED7FWNY.mjs +2 -0
- package/dist/chunk-5ED7FWNY.mjs.map +1 -0
- package/dist/chunk-5FZAROP6.js +2 -0
- package/dist/chunk-5FZAROP6.js.map +1 -0
- package/dist/chunk-5R6AGO3Z.mjs +2 -0
- package/dist/chunk-5R6AGO3Z.mjs.map +1 -0
- package/dist/chunk-6GCCNBEU.js +2 -0
- package/dist/chunk-6GCCNBEU.js.map +1 -0
- package/dist/chunk-6Q3VGPSF.js +2 -0
- package/dist/chunk-6Q3VGPSF.js.map +1 -0
- package/dist/chunk-6YIRRDCL.mjs +2 -0
- package/dist/chunk-6YIRRDCL.mjs.map +1 -0
- package/dist/chunk-7RXW6XFY.js +2 -0
- package/dist/chunk-7RXW6XFY.js.map +1 -0
- package/dist/chunk-A6VCP3A4.mjs +2 -0
- package/dist/chunk-A6VCP3A4.mjs.map +1 -0
- package/dist/chunk-BZXV77PT.mjs +2 -0
- package/dist/chunk-BZXV77PT.mjs.map +1 -0
- package/dist/{chunk-MG6VV5J2.js → chunk-C3BBJOVV.js} +2 -2
- package/dist/chunk-C3BBJOVV.js.map +1 -0
- package/dist/chunk-CUPG4B5W.mjs +2 -0
- package/dist/chunk-CUPG4B5W.mjs.map +1 -0
- package/dist/chunk-ESF5ZVVF.js +2 -0
- package/dist/chunk-ESF5ZVVF.js.map +1 -0
- package/dist/chunk-HKNWW37T.mjs +2 -0
- package/dist/chunk-HKNWW37T.mjs.map +1 -0
- package/dist/chunk-JSDGZ4NY.js.map +1 -1
- package/dist/chunk-KOYBZORL.js.map +1 -1
- package/dist/chunk-L7Q7OKM5.mjs +2 -0
- package/dist/chunk-L7Q7OKM5.mjs.map +1 -0
- package/dist/chunk-M2G74N43.mjs +2 -0
- package/dist/chunk-M2G74N43.mjs.map +1 -0
- package/dist/chunk-MIMQTH2G.js +2 -0
- package/dist/chunk-MIMQTH2G.js.map +1 -0
- package/dist/chunk-SYN5KU3O.js +2 -0
- package/dist/chunk-SYN5KU3O.js.map +1 -0
- package/dist/chunk-VNYHJT6V.mjs +2 -0
- package/dist/chunk-VNYHJT6V.mjs.map +1 -0
- package/dist/chunk-W3RGQYPD.js.map +1 -1
- package/dist/chunk-X3LVYIJR.mjs +2 -0
- package/dist/chunk-X3LVYIJR.mjs.map +1 -0
- package/dist/consent.js.map +1 -1
- package/dist/course.d.mts +3 -3
- package/dist/course.d.ts +3 -3
- package/dist/course.js +1 -1
- package/dist/course.js.map +1 -1
- package/dist/course.mjs +1 -1
- package/dist/course.mjs.map +1 -1
- package/dist/embed/analytics.js +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.css +1 -1
- package/dist/index.css.map +1 -1
- package/dist/index.d.mts +41 -12
- package/dist/index.d.ts +41 -12
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +1 -1
- package/dist/index.mjs.map +1 -1
- package/dist/{instrument-BE8ktMUv.d.mts → instrument-eXaC8hc2.d.mts} +1 -1
- package/dist/{instrument-BE8ktMUv.d.ts → instrument-eXaC8hc2.d.ts} +1 -1
- package/dist/internal.js.map +1 -1
- package/dist/methods-3W34GRYL.js +2 -0
- package/dist/methods-3W34GRYL.js.map +1 -0
- package/dist/methods-LUJSKSQ4.mjs +2 -0
- package/dist/model-files-client-HHDXJDTS.mjs +2 -0
- package/dist/model-files-client-HHDXJDTS.mjs.map +1 -0
- package/dist/model-files-client-P4PORZJ6.js +2 -0
- package/dist/model-files-client-P4PORZJ6.js.map +1 -0
- package/dist/models.d.mts +2 -0
- package/dist/models.d.ts +2 -0
- package/dist/models.js +1 -1
- package/dist/models.js.map +1 -1
- package/dist/models.mjs +1 -1
- package/dist/models.mjs.map +1 -1
- package/dist/returns.d.mts +19 -10
- package/dist/returns.d.ts +19 -10
- package/dist/returns.js +1 -1
- package/dist/returns.js.map +1 -1
- package/dist/returns.mjs +1 -1
- package/dist/{texts-tQtAGJCT.d.mts → texts-LGhuQfA9.d.mts} +28 -3
- package/dist/{texts-CIEFbJTN.d.ts → texts-m6XQGZ6w.d.ts} +28 -3
- package/dist/types-ClFCVzk_.d.ts +121 -0
- package/dist/types-D6LsoycW.d.mts +121 -0
- package/dist/viewer3d.css +2 -0
- package/dist/viewer3d.css.map +1 -0
- package/dist/viewer3d.d.mts +318 -0
- package/dist/viewer3d.d.ts +318 -0
- package/dist/viewer3d.js +2 -0
- package/dist/viewer3d.js.map +1 -0
- package/dist/viewer3d.mjs +63 -0
- package/dist/viewer3d.mjs.map +1 -0
- package/package.json +43 -16
- package/dist/CartProvider-64QEJ7A7.js +0 -2
- package/dist/CartProvider-64QEJ7A7.js.map +0 -1
- package/dist/CartProvider-XKK7A3C2.mjs +0 -2
- package/dist/chunk-2TLWMYXW.mjs +0 -2
- package/dist/chunk-2TLWMYXW.mjs.map +0 -1
- package/dist/chunk-7DG4UPWE.js.map +0 -1
- package/dist/chunk-7TLJKYZD.mjs +0 -2
- package/dist/chunk-7TLJKYZD.mjs.map +0 -1
- package/dist/chunk-AZQOW73L.mjs +0 -4
- package/dist/chunk-AZQOW73L.mjs.map +0 -1
- package/dist/chunk-DY2S42Q6.js +0 -2
- package/dist/chunk-DY2S42Q6.js.map +0 -1
- package/dist/chunk-FGB5FJCI.js +0 -2
- package/dist/chunk-FGB5FJCI.js.map +0 -1
- package/dist/chunk-GLAJPUMA.js +0 -2
- package/dist/chunk-GLAJPUMA.js.map +0 -1
- package/dist/chunk-H4WAQQVO.js +0 -2
- package/dist/chunk-H4WAQQVO.js.map +0 -1
- package/dist/chunk-MG6VV5J2.js.map +0 -1
- package/dist/chunk-Q3DSK66F.mjs +0 -2
- package/dist/chunk-Q3DSK66F.mjs.map +0 -1
- package/dist/chunk-RWEP6IUC.mjs +0 -2
- package/dist/chunk-RWEP6IUC.mjs.map +0 -1
- package/dist/chunk-S4Z4O46O.mjs +0 -2
- package/dist/chunk-S4Z4O46O.mjs.map +0 -1
- package/dist/chunk-VY6CZVVA.js +0 -4
- package/dist/chunk-VY6CZVVA.js.map +0 -1
- package/dist/chunk-XZYCQ655.js +0 -2
- package/dist/chunk-XZYCQ655.js.map +0 -1
- package/dist/chunk-ZIWQ57GY.mjs +0 -2
- package/dist/chunk-ZIWQ57GY.mjs.map +0 -1
- package/dist/methods-NUMVR53L.js +0 -2
- package/dist/methods-NUMVR53L.js.map +0 -1
- package/dist/methods-YKZZ6OVT.mjs +0 -2
- package/dist/types-DP1vxo5E.d.mts +0 -53
- package/dist/types-u8VwmC3j.d.ts +0 -53
- /package/dist/{CartProvider-XKK7A3C2.mjs.map → CartProvider-DGRZDTYC.mjs.map} +0 -0
- /package/dist/{methods-YKZZ6OVT.mjs.map → methods-LUJSKSQ4.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/viewer3d/Product3DViewer.tsx","../src/viewer3d/copy.ts","../src/viewer3d/Model3DShell.tsx","../src/viewer3d/facts.ts","../src/viewer3d/fullscreen.ts","../src/viewer3d/gesture-hint.ts","../src/viewer3d/shell.machine.ts","../src/viewer3d/styles.ts","../src/viewer3d/useProduct3DModel.ts","../src/viewer3d/model.ts"],"sourcesContent":["import { useState, type ReactNode } from \"react\";\n\nimport { addProductToCart } from \"../components/products/add-to-cart\";\nimport { formatProductPrice } from \"../components/products/format\";\nimport { HOST } from \"../components/checkout/constants\";\nimport { getPanelConfig } from \"../panel/config\";\nimport { viewer3DCopy, type Viewer3DCopy } from \"./copy\";\nimport type { Product3DProduct, Product3DVariant } from \"./model\";\nimport { Model3DViewer, type Model3DViewerProps } from \"./Model3DShell\";\nimport {\n useProduct3DModel,\n type UseProduct3DModelOptions,\n type UseProduct3DModelResult,\n} from \"./useProduct3DModel\";\n\nexport type Product3DBuyBarArgs = {\n product: Product3DProduct;\n variant?: Product3DVariant;\n /** Leaves full screen (e.g. before the page shows its own error or dialog). */\n close: () => void;\n};\n\nexport type Product3DViewerProps = UseProduct3DModelOptions &\n Omit<\n Model3DViewerProps,\n \"model\" | \"productName\" | \"renderFullscreenBar\" | \"loadViewer\"\n > & {\n /** Bitsnap product ID (`prodv2_…`), or a variant ID. */\n productId: string;\n /** The variant the page shows; switching it swaps the model in place. */\n variantId?: string;\n /**\n * The bar of the full screen view. Default: name, price and an\n * \"Add to cart\" button that uses the Bitsnap cart (loaded on the first\n * click). Return `null` for no bar.\n */\n renderBuyBar?: (args: Product3DBuyBarArgs) => ReactNode;\n /** Rendered while loading, when there is no model, and on error. Default: nothing. */\n fallback?: ReactNode;\n /** Product page URL stored with the cart item (default buy bar). */\n productUrl?: string;\n /** Called after the default buy bar added the product. */\n onAddedToCart?: (args: { product: Product3DProduct; variant?: Product3DVariant }) => void;\n /** @internal Tests replace the three viewer. */\n loadViewer?: Model3DViewerProps[\"loadViewer\"];\n };\n\n/**\n * The 3D viewer of a Bitsnap product: loads the product's public model and\n * shows it (auto-rotate, click-to-load over 10 MB, reduced motion, full screen\n * with a buy bar, gesture hint). Renders `fallback` (nothing by default) when\n * the product has no ready model or the server has no 3D support.\n *\n * Needs the optional peer dependencies `three`, `@react-three/fiber` and\n * `@react-three/drei`; they load only once the model may be shown.\n */\nexport function Product3DViewer({\n productId,\n variantId,\n projectID,\n host,\n locale,\n renderBuyBar,\n fallback = null,\n productUrl,\n onAddedToCart,\n ...viewer\n}: Product3DViewerProps) {\n const result = useProduct3DModel(productId, variantId, {\n projectID,\n host,\n locale,\n });\n if (result.status !== \"ready\" || result.model == null || result.product == null) {\n return <>{fallback}</>;\n }\n const product = result.product;\n const copy = viewer3DCopy(locale, viewer.texts);\n return (\n <Model3DViewer\n {...viewer}\n locale={locale}\n model={result.model}\n productName={result.variant?.name ? `${product.name} – ${result.variant.name}` : product.name}\n renderFullscreenBar={({ close }) =>\n renderBuyBar != null\n ? renderBuyBar({ product, variant: result.variant, close })\n : (\n <DefaultBuyBar\n product={product}\n variant={result.variant}\n copy={copy}\n locale={locale}\n projectID={projectID ?? getPanelConfig().projectID}\n host={host}\n productUrl={productUrl}\n onAdded={onAddedToCart}\n />\n )\n }\n />\n );\n}\n\n/** Whether the default bar may add the item straight to the cart. */\nexport function isCartable(\n product: Product3DProduct,\n variant: Product3DVariant | undefined,\n): boolean {\n if (product.recurring != null) return false;\n const priceType = variant?.priceType ?? product.priceType;\n if (priceType != null && priceType !== \"one_time\") return false;\n const quantity = variant?.availableQuantity ?? product.availableQuantity;\n return quantity == null || quantity > 0;\n}\n\n/** The cart id: the chosen variant, else the first (default) variant, else the product. */\nexport function cartItemIdFor(\n product: Product3DProduct,\n variant: Product3DVariant | undefined,\n): string {\n return variant?.id ?? product.variants?.[0]?.id ?? product.id;\n}\n\nfunction DefaultBuyBar({\n product,\n variant,\n copy,\n locale,\n projectID,\n host,\n productUrl,\n onAdded,\n}: {\n product: Product3DProduct;\n variant?: Product3DVariant;\n copy: Viewer3DCopy;\n locale?: string;\n projectID?: string;\n host?: string;\n productUrl?: string;\n onAdded?: Product3DViewerProps[\"onAddedToCart\"];\n}) {\n const [state, setState] = useState<\"idle\" | \"adding\" | \"added\" | \"error\">(\"idle\");\n const price = variant?.price ?? product.price;\n const currency = variant?.currency ?? product.currency;\n const canAdd = projectID != null && isCartable(product, variant);\n\n return (\n <div>\n <div className=\"bsv3d-buybar-row\">\n <div>\n <p className=\"bsv3d-buybar-name\">\n {product.name}\n {variant?.name ? ` – ${variant.name}` : \"\"}\n </p>\n <p className=\"bsv3d-buybar-price\">\n {formatProductPrice(price, currency, locale)}\n </p>\n </div>\n {canAdd && (\n <button\n type=\"button\"\n className=\"bsv3d-button\"\n data-viewer3d-add=\"\"\n disabled={state === \"adding\"}\n aria-live=\"polite\"\n onClick={async () => {\n setState(\"adding\");\n try {\n await addProductToCart(\n {\n id: product.id,\n cartItemId: cartItemIdFor(product, variant),\n name: variant?.name ? `${product.name} – ${variant.name}` : product.name,\n price,\n currency,\n },\n {\n projectID: projectID!,\n host: host ?? HOST,\n showCart: false,\n url:\n productUrl ??\n (typeof window !== \"undefined\" ? window.location.href : undefined),\n },\n );\n setState(\"added\");\n onAdded?.({ product, variant });\n } catch {\n setState(\"error\");\n }\n }}\n >\n {state === \"adding\"\n ? copy.addingToCart\n : state === \"added\"\n ? copy.addedToCart\n : copy.addToCart}\n </button>\n )}\n </div>\n {state === \"error\" && (\n <p className=\"bsv3d-buybar-error\" role=\"alert\">\n {copy.addToCartError}\n </p>\n )}\n </div>\n );\n}\n\nexport type { UseProduct3DModelResult };\n","import type { Model3DUnit } from \"./types\";\n\n/**\n * Every string of the 3D viewer. Polish is the default, English for `en*`\n * locales; pass `texts` to `Product3DViewer` to override any of them.\n */\nexport type Viewer3DCopy = {\n sectionLabel: string;\n show: (size: string) => string;\n heroPill: string;\n heroPillWithSize: (size: string) => string;\n loading: string;\n loadingProgress: (percent: number) => string;\n error: string;\n retry: string;\n unsupported: string;\n hintDrag: string;\n hintTap: string;\n touchDone: string;\n reset: string;\n fullscreen: string;\n closeFullscreen: string;\n disclaimer: string;\n report: string;\n factsTitle: string;\n factsFormat: string;\n factsFileSize: string;\n factsTriangles: string;\n factsDimensions: string;\n triangles: (count: string) => string;\n licence: string;\n licenceShow: string;\n licenceOpen: string;\n licenceClose: string;\n licenceDefaultName: string;\n units: Record<Model3DUnit, string>;\n /** Fullscreen bar: add to the cart. */\n addToCart: string;\n addingToCart: string;\n addedToCart: string;\n addToCartError: string;\n};\n\nexport const VIEWER3D_COPY_PL: Viewer3DCopy = {\n sectionLabel: \"Model 3D\",\n show: (size) => `Pokaż model 3D (${size})`,\n heroPill: \"Zobacz w 3D\",\n heroPillWithSize: (size) => `Zobacz w 3D (${size})`,\n loading: \"Wczytywanie modelu 3D…\",\n loadingProgress: (percent) => `Wczytywanie modelu 3D: ${percent}%`,\n error: \"Nie udało się wczytać modelu 3D\",\n retry: \"Spróbuj ponownie\",\n unsupported: \"Ta przeglądarka nie wyświetli modelu 3D.\",\n hintDrag: \"Przeciągnij, aby obrócić\",\n hintTap: \"Dotknij, aby obracać\",\n touchDone: \"Gotowe\",\n reset: \"Reset widoku\",\n fullscreen: \"Pełny ekran\",\n closeFullscreen: \"Zamknij pełny ekran\",\n disclaimer:\n \"Model 3D jest poglądowy; kolory i detale mogą się różnić od produktu.\",\n report: \"Zgłoś ten model\",\n factsTitle: \"Szczegóły modelu\",\n factsFormat: \"Format\",\n factsFileSize: \"Rozmiar pliku\",\n factsTriangles: \"Trójkąty\",\n factsDimensions: \"Wymiary\",\n triangles: (count) => count,\n licence: \"Licencja\",\n licenceShow: \"Warunki licencji\",\n licenceOpen: \"Otwórz licencję\",\n licenceClose: \"Zamknij\",\n licenceDefaultName: \"Licencja sprzedawcy\",\n units: { meters: \"m\", centimeters: \"cm\", millimeters: \"mm\", inches: \"in\" },\n addToCart: \"Dodaj do koszyka\",\n addingToCart: \"Dodawanie…\",\n addedToCart: \"Dodano do koszyka\",\n addToCartError: \"Nie udało się dodać do koszyka. Spróbuj ponownie.\",\n};\n\nexport const VIEWER3D_COPY_EN: Viewer3DCopy = {\n sectionLabel: \"3D model\",\n show: (size) => `Show 3D model (${size})`,\n heroPill: \"View in 3D\",\n heroPillWithSize: (size) => `View in 3D (${size})`,\n loading: \"Loading the 3D model…\",\n loadingProgress: (percent) => `Loading the 3D model: ${percent}%`,\n error: \"The 3D model could not be loaded\",\n retry: \"Try again\",\n unsupported: \"This browser cannot show the 3D model.\",\n hintDrag: \"Drag to rotate\",\n hintTap: \"Tap to rotate\",\n touchDone: \"Done\",\n reset: \"Reset view\",\n fullscreen: \"Full screen\",\n closeFullscreen: \"Close full screen\",\n disclaimer:\n \"The 3D model is illustrative; colours and details may differ from the product.\",\n report: \"Report this model\",\n factsTitle: \"Model details\",\n factsFormat: \"Format\",\n factsFileSize: \"File size\",\n factsTriangles: \"Triangles\",\n factsDimensions: \"Dimensions\",\n triangles: (count) => count,\n licence: \"Licence\",\n licenceShow: \"Licence terms\",\n licenceOpen: \"Open the licence\",\n licenceClose: \"Close\",\n licenceDefaultName: \"Seller's licence\",\n units: { meters: \"m\", centimeters: \"cm\", millimeters: \"mm\", inches: \"in\" },\n addToCart: \"Add to cart\",\n addingToCart: \"Adding…\",\n addedToCart: \"Added to cart\",\n addToCartError: \"Could not add to the cart. Try again.\",\n};\n\nexport function viewer3DCopy(\n locale?: string,\n overrides?: Partial<Viewer3DCopy>,\n): Viewer3DCopy {\n const base = locale?.toLowerCase().startsWith(\"en\")\n ? VIEWER3D_COPY_EN\n : VIEWER3D_COPY_PL;\n return overrides ? { ...base, ...overrides } : base;\n}\n\nexport function numberLocale(locale?: string): string {\n return locale?.toLowerCase().startsWith(\"en\") ? \"en-GB\" : \"pl-PL\";\n}\n","import { Box, Hand, Maximize2, Rotate3d, RotateCcw, X } from \"lucide-react\";\nimport {\n useCallback,\n useEffect,\n useId,\n useReducer,\n useRef,\n useState,\n type ComponentType,\n type CSSProperties,\n type ReactNode,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\nimport { formatModelSize, GESTURE_HINT_MS } from \"./constants\";\nimport { numberLocale, viewer3DCopy, type Viewer3DCopy } from \"./copy\";\nimport { modelFactRows } from \"./facts\";\nimport { useViewerFullscreen } from \"./fullscreen\";\nimport { hasSeenGestureHint, markGestureHintSeen } from \"./gesture-hint\";\nimport {\n initialShellState,\n isViewerMounted,\n shellReducer,\n type ShellModel,\n} from \"./shell.machine\";\nimport { VIEWER3D_CSS, VIEWER3D_STYLE_HREF } from \"./styles\";\nimport type { Model3DView } from \"./types\";\nimport type { Viewer3DProps } from \"./Viewer3D\";\n\n/** Theme of the viewer; each value sets one `--bitsnap-viewer3d-*` property. */\nexport type Viewer3DAppearance = {\n background?: string;\n foreground?: string;\n muted?: string;\n border?: string;\n accent?: string;\n radius?: string;\n};\n\nexport type Model3DViewerProps = {\n model: Model3DView;\n /** The product name: the alt text of the poster. */\n productName: string;\n /** `pl-PL` (default) or an `en*` locale. */\n locale?: string;\n /** Overrides of any viewer string. */\n texts?: Partial<Viewer3DCopy>;\n appearance?: Viewer3DAppearance;\n /**\n * Draco decoder folder (trailing slash). Default: three's decoder files on\n * jsDelivr for the installed `three` revision.\n */\n decoderPath?: string;\n /**\n * \"Report this model\" link (DSA notice form); the viewer adds the page URL\n * as `url`. Absent = no link.\n */\n reportHref?: string;\n /** Bump to start loading now, whatever the size (e.g. from a \"View in 3D\" button). */\n startSignal?: number;\n /**\n * The bar at the bottom of the full screen view (name, price, buy button).\n * `close` leaves full screen. Absent = no bar.\n */\n renderFullscreenBar?: (args: { close: () => void }) => ReactNode;\n /** Hide the notes under the viewer (disclaimer, report link, model facts). */\n hideNotes?: boolean;\n id?: string;\n className?: string;\n style?: CSSProperties;\n /** @internal Tests replace the three viewer. */\n loadViewer?: () => Promise<{ default: ComponentType<Viewer3DProps> }>;\n};\n\nconst loadDefaultViewer = () => import(\"./Viewer3D\");\n\nfunction appearanceStyle(appearance?: Viewer3DAppearance): CSSProperties {\n const style: Record<string, string> = {};\n if (appearance == null) return style;\n for (const [key, value] of Object.entries(appearance)) {\n if (value) style[`--bitsnap-viewer3d-${key}`] = value;\n }\n return style as CSSProperties;\n}\n\nfunction hasWebGL(): boolean {\n try {\n const canvas = document.createElement(\"canvas\");\n return (canvas.getContext(\"webgl2\") ?? canvas.getContext(\"webgl\")) != null;\n } catch {\n return false;\n }\n}\n\nfunction useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(false);\n useEffect(() => {\n if (typeof window.matchMedia !== \"function\") return;\n const media = window.matchMedia(query);\n const update = () => setMatches(media.matches);\n update();\n media.addEventListener?.(\"change\", update);\n return () => media.removeEventListener?.(\"change\", update);\n }, [query]);\n return matches;\n}\n\nfunction usePageVisible(): boolean {\n const [visible, setVisible] = useState(true);\n useEffect(() => {\n const update = () => setVisible(document.visibilityState !== \"hidden\");\n update();\n document.addEventListener(\"visibilitychange\", update);\n return () => document.removeEventListener(\"visibilitychange\", update);\n }, []);\n return visible;\n}\n\n/**\n * The 3D viewer of one model, without data fetching (see `Product3DViewer`\n * for the product-id version). No three import: the poster, the states and\n * the controls live here; `Viewer3D` is loaded with `import()` in an effect\n * once the model may load, so the server render and the page's main chunk\n * never touch three.\n */\nexport function Model3DViewer({\n model,\n productName,\n locale,\n texts,\n appearance,\n decoderPath,\n reportHref,\n startSignal,\n renderFullscreenBar,\n hideNotes,\n id,\n className,\n style,\n loadViewer = loadDefaultViewer,\n}: Model3DViewerProps) {\n const copy = viewer3DCopy(locale, texts);\n const shellModel: ShellModel = {\n key: model.previewUrl,\n size: model.previewSize,\n };\n const [state, dispatch] = useReducer(\n shellReducer,\n shellModel,\n initialShellState,\n );\n const [Viewer, setViewer] = useState<ComponentType<Viewer3DProps> | null>(\n null,\n );\n const frameRef = useRef<HTMLDivElement>(null);\n const stageRef = useRef<HTMLDivElement>(null);\n const [near, setNear] = useState(false);\n const [onScreen, setOnScreen] = useState(false);\n const pageVisible = usePageVisible();\n const reducedMotion = useMediaQuery(\"(prefers-reduced-motion: reduce)\");\n const coarsePointer = useMediaQuery(\"(pointer: coarse)\");\n const [touchActive, setTouchActive] = useState(false);\n const [hint, setHint] = useState(false);\n const [resetSignal, setResetSignal] = useState(0);\n const fullscreen = useViewerFullscreen(frameRef);\n const titleID = useId();\n const themeStyle = appearanceStyle(appearance);\n\n // WebGL is checked once, in the browser.\n useEffect(() => {\n if (!hasWebGL()) dispatch({ type: \"NO_WEBGL\" });\n }, []);\n\n // Near the viewport → may load; on screen → may draw.\n useEffect(() => {\n const element = stageRef.current;\n if (element == null || typeof IntersectionObserver === \"undefined\") {\n setNear(true);\n setOnScreen(true);\n return;\n }\n const nearObserver = new IntersectionObserver(\n ([entry]) => setNear(entry?.isIntersecting ?? false),\n { rootMargin: \"200px 0px\" },\n );\n const screenObserver = new IntersectionObserver(\n ([entry]) => setOnScreen(entry?.isIntersecting ?? false),\n { threshold: 0.05 },\n );\n nearObserver.observe(element);\n screenObserver.observe(element);\n return () => {\n nearObserver.disconnect();\n screenObserver.disconnect();\n };\n }, []);\n\n useEffect(() => {\n if (near) dispatch({ type: \"VISIBLE\" });\n }, [near, state.status]);\n\n // Another variant: the size rule is checked again for its model.\n useEffect(() => {\n dispatch({ type: \"MODEL_CHANGED\", model: shellModel, visible: near });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [shellModel.key, shellModel.size]);\n\n // An outside \"View in 3D\" button: start now, a big model included.\n const firstStart = useRef(startSignal);\n useEffect(() => {\n if (startSignal == null || startSignal === firstStart.current) return;\n dispatch({ type: \"REQUEST\" });\n }, [startSignal]);\n\n // The viewer code, only once the model may load.\n const mounted = isViewerMounted(state.status);\n useEffect(() => {\n if (!mounted || Viewer != null) return;\n let cancelled = false;\n loadViewer().then(\n (module) => {\n if (!cancelled) setViewer(() => module.default);\n },\n (error) => {\n console.warn(\n \"[bitsnap-react/viewer3d] the viewer could not be loaded; are three, @react-three/fiber and @react-three/drei installed?\",\n error,\n );\n if (!cancelled) dispatch({ type: \"FAILED\", key: state.model.key });\n },\n );\n return () => {\n cancelled = true;\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [mounted, Viewer, state.model.key, state.attempt]);\n\n // Gesture hint: once per browser, the first time the model is interactive.\n const ready = state.status === \"ready\";\n useEffect(() => {\n if (!ready || hasSeenGestureHint()) return;\n markGestureHintSeen();\n setHint(true);\n const timer = setTimeout(() => setHint(false), GESTURE_HINT_MS);\n return () => clearTimeout(timer);\n }, [ready]);\n\n // Phones: rotating needs a tap first; a tap elsewhere or scrolling away gives the page back.\n useEffect(() => {\n if (!touchActive) return;\n const onPointerDown = (event: PointerEvent) => {\n if (!frameRef.current?.contains(event.target as Node))\n setTouchActive(false);\n };\n document.addEventListener(\"pointerdown\", onPointerDown);\n return () => document.removeEventListener(\"pointerdown\", onPointerDown);\n }, [touchActive]);\n useEffect(() => {\n if (!onScreen && !fullscreen.isFullscreen) setTouchActive(false);\n }, [onScreen, fullscreen.isFullscreen]);\n\n const interactive = !coarsePointer || touchActive || fullscreen.isFullscreen;\n const onInteract = useCallback(() => setHint(false), []);\n\n const key = state.model.key;\n const onProgress = useCallback(\n (loaded: number, total: number) =>\n dispatch({ type: \"PROGRESS\", key, loaded, total }),\n [key],\n );\n const onLoaded = useCallback(() => dispatch({ type: \"LOADED\", key }), [key]);\n const onError = useCallback(\n (error: unknown) => {\n console.warn(\"[bitsnap-react/viewer3d] model failed\", error);\n dispatch({ type: \"FAILED\", key });\n },\n [key],\n );\n\n const sizeLabel = formatModelSize(model.previewSize, numberLocale(locale));\n const percent = Math.round(state.progress * 100);\n const isFullscreen = fullscreen.isFullscreen;\n const motionAllowed =\n !reducedMotion && pageVisible && (onScreen || isFullscreen);\n\n // The overlay (no element fullscreen, e.g. iPhone) goes to <body>, so no\n // transformed or contained ancestor traps the fixed element.\n const portal = (node: ReactNode) =>\n fullscreen.mode === \"overlay\" ? createPortal(node, document.body) : node;\n\n return (\n <section\n id={id}\n aria-labelledby={titleID}\n data-bitsnap-viewer3d=\"\"\n className={className}\n style={{ ...themeStyle, ...style }}\n >\n <style href={VIEWER3D_STYLE_HREF} precedence=\"default\">\n {VIEWER3D_CSS}\n </style>\n <h2 id={titleID} className=\"bsv3d-sr\">\n {copy.sectionLabel}\n </h2>\n {fullscreen.mode === \"overlay\" && (\n // Keeps the place of the frame while it is shown over the page.\n <div aria-hidden=\"true\" className=\"bsv3d-placeholder\" />\n )}\n {portal(\n <div\n ref={frameRef}\n data-viewer3d-frame=\"\"\n data-state={state.status}\n data-motion={motionAllowed ? \"on\" : \"off\"}\n data-fullscreen={isFullscreen ? \"\" : undefined}\n className=\"bsv3d-frame\"\n style={themeStyle}\n onClick={() => {\n if (ready && coarsePointer && !touchActive) {\n setTouchActive(true);\n setHint(false);\n }\n }}\n >\n <div ref={stageRef} className=\"bsv3d-stage\">\n {mounted && Viewer != null && (\n <Viewer\n key={`${state.model.key}#${state.attempt}`}\n className=\"bsv3d-canvas\"\n url={state.model.key}\n decoderPath={decoderPath}\n expectedSize={state.model.size}\n attempt={state.attempt}\n motionAllowed={motionAllowed}\n interactive={interactive}\n allowZoom={isFullscreen || (coarsePointer && touchActive)}\n resetSignal={resetSignal}\n onProgress={onProgress}\n onLoaded={onLoaded}\n onError={onError}\n onInteract={onInteract}\n />\n )}\n\n <Poster src={model.thumbnailUrl} alt={productName} hidden={ready} />\n\n {state.status === \"loading\" && (\n <div className=\"bsv3d-loading\">\n <span className=\"bsv3d-chip\" data-small=\"\" aria-hidden=\"true\">\n {percent > 0 ? copy.loadingProgress(percent) : copy.loading}\n </span>\n <div className=\"bsv3d-bar\">\n <div style={{ width: `${Math.max(percent, 3)}%` }} />\n </div>\n </div>\n )}\n\n {state.status === \"awaiting-click\" && (\n <div className=\"bsv3d-center\">\n <button\n type=\"button\"\n className=\"bsv3d-button\"\n data-viewer3d-show=\"\"\n onClick={(event) => {\n event.stopPropagation();\n dispatch({ type: \"REQUEST\" });\n }}\n >\n <Box aria-hidden=\"true\" />\n {copy.show(sizeLabel)}\n </button>\n </div>\n )}\n\n {state.status === \"error\" && (\n <div className=\"bsv3d-center\">\n <div role=\"alert\" className=\"bsv3d-alert\">\n <p>{copy.error}</p>\n <button\n type=\"button\"\n className=\"bsv3d-button\"\n data-viewer3d-retry=\"\"\n onClick={(event) => {\n event.stopPropagation();\n dispatch({ type: \"RETRY\" });\n }}\n >\n <RotateCcw aria-hidden=\"true\" />\n {copy.retry}\n </button>\n </div>\n </div>\n )}\n\n {state.status === \"unsupported\" && (\n <p className=\"bsv3d-chip bsv3d-unsupported\" data-small=\"\">\n {copy.unsupported}\n </p>\n )}\n\n {/* The gesture hint, once per browser. */}\n {ready && (\n <div\n aria-hidden={!hint}\n className=\"bsv3d-hint\"\n data-visible={hint ? \"\" : undefined}\n >\n <span className=\"bsv3d-chip\">\n {coarsePointer ? (\n <Hand aria-hidden=\"true\" />\n ) : (\n <Rotate3d aria-hidden=\"true\" />\n )}\n {coarsePointer && !isFullscreen\n ? copy.hintTap\n : copy.hintDrag}\n </span>\n </div>\n )}\n\n {ready && (\n <div className=\"bsv3d-controls\">\n <div>\n {coarsePointer &&\n !isFullscreen &&\n (touchActive ? (\n <button\n type=\"button\"\n className=\"bsv3d-icon\"\n data-wide=\"\"\n onClick={(event) => {\n event.stopPropagation();\n setTouchActive(false);\n }}\n >\n {copy.touchDone}\n </button>\n ) : (\n !hint && (\n <span className=\"bsv3d-chip\" data-small=\"\">\n <Hand aria-hidden=\"true\" />\n {copy.hintTap}\n </span>\n )\n ))}\n </div>\n <div>\n <button\n type=\"button\"\n aria-label={copy.reset}\n title={copy.reset}\n className=\"bsv3d-icon\"\n onClick={(event) => {\n event.stopPropagation();\n setResetSignal((value) => value + 1);\n }}\n >\n <RotateCcw aria-hidden=\"true\" />\n </button>\n {!isFullscreen && (\n <button\n type=\"button\"\n aria-label={copy.fullscreen}\n title={copy.fullscreen}\n className=\"bsv3d-icon\"\n data-viewer3d-fullscreen=\"\"\n onClick={(event) => {\n event.stopPropagation();\n fullscreen.enter();\n }}\n >\n <Maximize2 aria-hidden=\"true\" />\n </button>\n )}\n </div>\n </div>\n )}\n\n {isFullscreen && (\n <button\n type=\"button\"\n aria-label={copy.closeFullscreen}\n title={copy.closeFullscreen}\n className=\"bsv3d-icon bsv3d-close\"\n onClick={(event) => {\n event.stopPropagation();\n fullscreen.exit();\n }}\n >\n <X aria-hidden=\"true\" />\n </button>\n )}\n\n <p className=\"bsv3d-sr\" aria-live=\"polite\">\n {state.status === \"loading\"\n ? percent > 0\n ? copy.loadingProgress(percent)\n : copy.loading\n : state.status === \"error\"\n ? copy.error\n : \"\"}\n </p>\n </div>\n\n {isFullscreen && renderFullscreenBar != null && (\n <div\n className=\"bsv3d-buybar\"\n onClick={(event) => event.stopPropagation()}\n >\n {renderFullscreenBar({ close: fullscreen.exit })}\n </div>\n )}\n </div>,\n )}\n\n {!hideNotes && (\n <ModelNotes\n model={model}\n copy={copy}\n locale={locale}\n reportHref={reportHref}\n />\n )}\n </section>\n );\n}\n\nfunction Poster({\n src,\n alt,\n hidden,\n}: {\n src?: string;\n alt: string;\n hidden: boolean;\n}) {\n const [broken, setBroken] = useState(false);\n return (\n <div\n aria-hidden={hidden}\n className=\"bsv3d-poster\"\n data-hidden={hidden ? \"\" : undefined}\n >\n {src != null && !broken ? (\n <img\n src={src}\n alt={alt}\n decoding=\"async\"\n loading=\"lazy\"\n onError={() => setBroken(true)}\n />\n ) : (\n <Box aria-hidden=\"true\" strokeWidth={1.25} />\n )}\n </div>\n );\n}\n\nfunction ModelNotes({\n model,\n copy,\n locale,\n reportHref,\n}: {\n model: Model3DView;\n copy: Viewer3DCopy;\n locale?: string;\n reportHref?: string;\n}) {\n const [href, setHref] = useState(reportHref);\n // The notice form gets the page that is reported.\n useEffect(() => {\n if (reportHref == null) {\n setHref(undefined);\n return;\n }\n try {\n const url = new URL(reportHref, window.location.href);\n if (!url.searchParams.has(\"url\"))\n url.searchParams.set(\"url\", window.location.href);\n setHref(url.toString());\n } catch {\n setHref(reportHref);\n }\n }, [reportHref]);\n const facts =\n model.facts != null ? modelFactRows(model.facts, copy, locale) : [];\n\n if (!model.illustrative && href == null && facts.length === 0) return null;\n return (\n <div className=\"bsv3d-notes\">\n {facts.length > 0 && (\n <div>\n <p className=\"bsv3d-facts-title\">{copy.factsTitle}</p>\n <dl>\n {facts.map((row) => (\n <div key={row.label}>\n <dt>{row.label}</dt>\n <dd>{row.value}</dd>\n </div>\n ))}\n </dl>\n </div>\n )}\n {(model.illustrative || href != null) && (\n <p className=\"bsv3d-links\">\n {model.illustrative && <span>{copy.disclaimer}</span>}\n {href != null && <a href={href}>{copy.report}</a>}\n </p>\n )}\n </div>\n );\n}\n","import type { Model3DFacts, Model3DUnit } from \"./types\";\n\nimport { formatModelSize } from \"./constants\";\nimport { numberLocale, type Viewer3DCopy } from \"./copy\";\n\nconst MM_PER_UNIT: Record<Model3DUnit, number> = {\n meters: 1000,\n centimeters: 10,\n millimeters: 1,\n inches: 25.4,\n};\n\n/** \"32 × 18 × 12 cm\": the dimensions in the unit the merchant made the model in. */\nexport function formatDimensions(\n dimensionsMm: readonly number[],\n unit: Model3DUnit,\n copy: Viewer3DCopy,\n locale?: string,\n): string | undefined {\n if (dimensionsMm.length !== 3) return undefined;\n const format = new Intl.NumberFormat(numberLocale(locale), {\n maximumFractionDigits: unit === \"millimeters\" ? 0 : 2,\n });\n const scale = MM_PER_UNIT[unit] ?? 1000;\n return `${dimensionsMm.map((mm) => format.format(mm / scale)).join(\" × \")} ${copy.units[unit]}`;\n}\n\n/** The rows of \"Szczegóły modelu\" (D12), in display order. */\nexport function modelFactRows(\n facts: Model3DFacts,\n copy: Viewer3DCopy,\n locale?: string,\n): { label: string; value: string }[] {\n const rows = [{ label: copy.factsFormat, value: \"GLB\" }];\n if (facts.fileSize > 0) {\n rows.push({\n label: copy.factsFileSize,\n value: formatModelSize(facts.fileSize, numberLocale(locale)),\n });\n }\n if (facts.triangleCount > 0) {\n rows.push({\n label: copy.factsTriangles,\n value: copy.triangles(\n new Intl.NumberFormat(numberLocale(locale)).format(facts.triangleCount),\n ),\n });\n }\n const dimensions = formatDimensions(\n facts.dimensionsMm,\n facts.unit,\n copy,\n locale,\n );\n if (dimensions) rows.push({ label: copy.factsDimensions, value: dimensions });\n return rows;\n}\n\n/** A licence \"text\" that is just a link opens in a new tab instead of a dialog. */\nexport function licenceLink(text: string | undefined): string | undefined {\n const trimmed = text?.trim();\n if (!trimmed || /\\s/.test(trimmed)) return undefined;\n try {\n const url = new URL(trimmed);\n return url.protocol === \"https:\" || url.protocol === \"http:\"\n ? url.toString()\n : undefined;\n } catch {\n return undefined;\n }\n}\n","import {\n useCallback,\n useEffect,\n useRef,\n useState,\n type RefObject,\n} from \"react\";\n\n/**\n * Full screen for the viewer section: the Fullscreen API where an element can\n * go full screen, else a fixed CSS overlay (iPhone Safari has no element\n * fullscreen). Escape or close returns to the page at the same scroll position.\n */\nexport type FullscreenMode = \"native\" | \"overlay\";\n\nfunction canUseNativeFullscreen(element: HTMLElement | null): boolean {\n return (\n element != null &&\n typeof element.requestFullscreen === \"function\" &&\n document.fullscreenEnabled === true\n );\n}\n\nexport function useViewerFullscreen(ref: RefObject<HTMLElement | null>) {\n const [mode, setMode] = useState<FullscreenMode | null>(null);\n const scrollRef = useRef(0);\n\n const exit = useCallback(() => {\n if (document.fullscreenElement != null) {\n void document.exitFullscreen().catch(() => setMode(null));\n return;\n }\n setMode(null);\n }, []);\n\n const enter = useCallback(() => {\n const element = ref.current;\n scrollRef.current = window.scrollY;\n if (canUseNativeFullscreen(element)) {\n element!\n .requestFullscreen({ navigationUI: \"hide\" })\n .then(() => setMode(\"native\"))\n .catch(() => setMode(\"overlay\"));\n return;\n }\n setMode(\"overlay\");\n }, [ref]);\n\n // Native: leaving with Escape or the browser's own control.\n useEffect(() => {\n const onChange = () => {\n if (document.fullscreenElement == null) {\n setMode((current) => (current === \"native\" ? null : current));\n }\n };\n document.addEventListener(\"fullscreenchange\", onChange);\n return () => document.removeEventListener(\"fullscreenchange\", onChange);\n }, []);\n\n // Native: browsers handle Escape themselves; this covers the ones that pass\n // the key to the page instead.\n useEffect(() => {\n if (mode !== \"native\") return;\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\" && document.fullscreenElement != null) {\n void document.exitFullscreen().catch(() => setMode(null));\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [mode]);\n\n // Overlay: lock the page behind it and close it with Escape.\n useEffect(() => {\n if (mode !== \"overlay\") return;\n const { body, documentElement } = document;\n const previous = {\n overflow: body.style.overflow,\n rootOverflow: documentElement.style.overflow,\n };\n body.style.overflow = \"hidden\";\n documentElement.style.overflow = \"hidden\";\n const onKey = (event: KeyboardEvent) => {\n if (event.key === \"Escape\") setMode(null);\n };\n window.addEventListener(\"keydown\", onKey);\n return () => {\n window.removeEventListener(\"keydown\", onKey);\n body.style.overflow = previous.overflow;\n documentElement.style.overflow = previous.rootOverflow;\n };\n }, [mode]);\n\n // Back on the page where the buyer left it.\n useEffect(() => {\n if (mode == null && scrollRef.current > 0) {\n const y = scrollRef.current;\n scrollRef.current = 0;\n requestAnimationFrame(() =>\n window.scrollTo({ top: y, behavior: \"instant\" }),\n );\n }\n }, [mode]);\n\n return { mode, isFullscreen: mode != null, enter, exit };\n}\n","/**\n * The gesture hint (\"Przeciągnij, aby obrócić\") shows once per browser: the\n * first time a viewer becomes interactive (plan: gap 9). Storage may be absent\n * or throw (private mode, blocked cookies); then the hint just shows again.\n */\nexport const GESTURE_HINT_STORAGE_KEY = \"bitsnap:viewer3d:gesture-hint-seen\";\n\ntype HintStorage = Pick<Storage, \"getItem\" | \"setItem\">;\n\nfunction defaultStorage(): HintStorage | undefined {\n try {\n return typeof window === \"undefined\" ? undefined : window.localStorage;\n } catch {\n return undefined;\n }\n}\n\nexport function hasSeenGestureHint(\n storage: HintStorage | undefined = defaultStorage(),\n): boolean {\n try {\n return storage?.getItem(GESTURE_HINT_STORAGE_KEY) === \"1\";\n } catch {\n return false;\n }\n}\n\nexport function markGestureHintSeen(\n storage: HintStorage | undefined = defaultStorage(),\n): void {\n try {\n storage?.setItem(GESTURE_HINT_STORAGE_KEY, \"1\");\n } catch {\n // Not remembered; the hint shows again next time.\n }\n}\n","import { needsClickToLoad } from \"./constants\";\n\n/**\n * The states of `Model3DShell` (plan: \"Buyer viewer\" → Module). Pure, so the\n * click-to-load rule, the per-variant re-check and the error path are tested\n * without a browser.\n *\n * - `poster`: the thumbnail; the model loads once the section is visible.\n * - `awaiting-click`: a display copy over 10 MB; nothing is downloaded until\n * the buyer asks (\"Pokaż model 3D (24 MB)\" or the hero pill).\n * - `loading`: the viewer is mounted and downloads; the poster stays with a\n * progress bar until the first frame.\n * - `ready`: the model is on screen.\n * - `error`: the poster stays with \"Spróbuj ponownie\".\n * - `unsupported`: no WebGL; the poster stays.\n */\nexport type ShellStatus =\n \"poster\" | \"awaiting-click\" | \"loading\" | \"ready\" | \"error\" | \"unsupported\";\n\nexport type ShellModel = {\n /** Identifies the model (its preview URL). */\n key: string;\n /** Bytes of the display copy. */\n size: number;\n};\n\nexport type ShellState = {\n status: ShellStatus;\n model: ShellModel;\n /** 0..1 of the download; 0 while unknown. */\n progress: number;\n /** Bumped on every retry, so the viewer remounts and loads again. */\n attempt: number;\n};\n\nexport type ShellEvent =\n /** The section came near the viewport (and WebGL works). */\n | { type: \"VISIBLE\" }\n /** The buyer asked: the button, the hero pill. Loads whatever the size. */\n | { type: \"REQUEST\" }\n | { type: \"PROGRESS\"; key: string; loaded: number; total: number }\n | { type: \"LOADED\"; key: string }\n | { type: \"FAILED\"; key: string }\n | { type: \"RETRY\" }\n | { type: \"NO_WEBGL\" }\n /** Another variant: another model, or the same one again. */\n | { type: \"MODEL_CHANGED\"; model: ShellModel; visible: boolean };\n\nfunction statusFor(model: ShellModel, visible: boolean): ShellStatus {\n if (needsClickToLoad(model.size)) return \"awaiting-click\";\n return visible ? \"loading\" : \"poster\";\n}\n\nexport function initialShellState(model: ShellModel): ShellState {\n return { status: statusFor(model, false), model, progress: 0, attempt: 0 };\n}\n\nexport function shellReducer(state: ShellState, event: ShellEvent): ShellState {\n switch (event.type) {\n case \"NO_WEBGL\":\n return state.status === \"ready\"\n ? state\n : { ...state, status: \"unsupported\" };\n\n case \"VISIBLE\":\n return state.status === \"poster\"\n ? { ...state, status: \"loading\", progress: 0 }\n : state;\n\n case \"REQUEST\":\n if (state.status === \"poster\" || state.status === \"awaiting-click\") {\n return { ...state, status: \"loading\", progress: 0 };\n }\n if (state.status === \"error\") {\n return {\n ...state,\n status: \"loading\",\n progress: 0,\n attempt: state.attempt + 1,\n };\n }\n return state;\n\n case \"RETRY\":\n return state.status === \"error\"\n ? {\n ...state,\n status: \"loading\",\n progress: 0,\n attempt: state.attempt + 1,\n }\n : state;\n\n case \"PROGRESS\": {\n if (state.status !== \"loading\" || event.key !== state.model.key)\n return state;\n const progress =\n event.total > 0\n ? Math.min(1, Math.max(0, event.loaded / event.total))\n : 0;\n return progress === state.progress ? state : { ...state, progress };\n }\n\n case \"LOADED\":\n if (state.status !== \"loading\" || event.key !== state.model.key)\n return state;\n return { ...state, status: \"ready\", progress: 1 };\n\n case \"FAILED\":\n if (state.status !== \"loading\" || event.key !== state.model.key)\n return state;\n return { ...state, status: \"error\" };\n\n case \"MODEL_CHANGED\": {\n if (event.model.key === state.model.key) {\n return event.model.size === state.model.size\n ? state\n : { ...state, model: event.model };\n }\n if (state.status === \"unsupported\")\n return { ...state, model: event.model };\n // The rule applies per variant: a big model asks again, whatever came before.\n return {\n status: statusFor(event.model, event.visible),\n model: event.model,\n progress: 0,\n attempt: 0,\n };\n }\n }\n}\n\n/** The viewer (and its download) exists only in these states. */\nexport function isViewerMounted(status: ShellStatus): boolean {\n return status === \"loading\" || status === \"ready\";\n}\n","/**\n * Styles of the 3D viewer, rendered as one React 19 `<style href precedence>`\n * element: hoisted to `<head>`, deduplicated, and part of the server render,\n * so the poster keeps its size before hydration and the subpath needs no CSS\n * import. Every rule is scoped to `[data-bitsnap-viewer3d]`.\n *\n * Theme: set the custom properties below on the viewer or an ancestor, or pass\n * `appearance` to `Product3DViewer`.\n * --bitsnap-viewer3d-background (#ffffff) frame and buttons\n * --bitsnap-viewer3d-foreground (#171717) text and icons\n * --bitsnap-viewer3d-muted (foreground at 70%) notes under the viewer\n * --bitsnap-viewer3d-border (#e5e5e5)\n * --bitsnap-viewer3d-accent (#0a7ea5) progress bar\n * --bitsnap-viewer3d-radius (0.75rem)\n */\nexport const VIEWER3D_STYLE_HREF = \"bitsnap-react-viewer3d\";\n\nconst S = \"[data-bitsnap-viewer3d]\";\nconst BG = \"var(--bitsnap-viewer3d-background,#ffffff)\";\nconst FG = \"var(--bitsnap-viewer3d-foreground,#171717)\";\nconst BORDER = \"var(--bitsnap-viewer3d-border,#e5e5e5)\";\nconst RADIUS = \"var(--bitsnap-viewer3d-radius,0.75rem)\";\n\nexport const VIEWER3D_CSS = `\n${S}{container-type:inline-size;display:flex;flex-direction:column;gap:.75rem;font-family:inherit;color:${FG}}\n${S} *{box-sizing:border-box}\n${S} .bsv3d-sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}\n.bsv3d-frame{position:relative;display:flex;flex-direction:column;overflow:hidden;background:${BG};color:${FG};border:1px solid ${BORDER};border-radius:${RADIUS}}\n.bsv3d-frame[data-fullscreen]{position:fixed;inset:0;z-index:2147483000;width:100vw;height:100dvh;border:0;border-radius:0}\n.bsv3d-stage{position:relative;width:100%;aspect-ratio:4/3}\n.bsv3d-placeholder{width:100%;aspect-ratio:4/3}\n@container (min-width:48rem){${S} .bsv3d-stage,${S} .bsv3d-placeholder{aspect-ratio:16/11}}\n.bsv3d-frame[data-fullscreen] .bsv3d-stage{aspect-ratio:auto;flex:1;min-height:0}\n.bsv3d-canvas{position:absolute!important;inset:0}\n.bsv3d-poster{pointer-events:none;position:absolute;inset:0;display:grid;place-items:center;opacity:1}\n.bsv3d-poster[data-hidden]{opacity:0}\n.bsv3d-poster img{width:100%;height:100%;object-fit:contain;padding:6%;display:block}\n.bsv3d-poster svg{width:4rem;height:4rem;color:color-mix(in srgb,${FG} 30%,transparent)}\n.bsv3d-chip{pointer-events:none;display:inline-flex;align-items:center;gap:.5rem;border-radius:999px;padding:.5rem .875rem;font-size:.875rem;line-height:1.25rem;font-weight:500;background:color-mix(in srgb,${FG} 82%,transparent);color:${BG}}\n.bsv3d-chip svg{width:1rem;height:1rem;flex:none}\n.bsv3d-chip[data-small]{font-size:.75rem;line-height:1rem;padding:.375rem .75rem}\n.bsv3d-loading{pointer-events:none;position:absolute;inset:auto 0 0 0;display:flex;flex-direction:column;align-items:flex-start;gap:.5rem}\n.bsv3d-loading .bsv3d-chip{margin:0 .75rem}\n.bsv3d-bar{height:4px;width:100%;background:color-mix(in srgb,${FG} 10%,transparent)}\n.bsv3d-bar>div{height:100%;background:var(--bitsnap-viewer3d-accent,#0a7ea5)}\n.bsv3d-center{position:absolute;inset:0;display:grid;place-items:center;padding:1rem}\n.bsv3d-button{display:inline-flex;align-items:center;justify-content:center;gap:.5rem;height:2.75rem;padding:0 1.25rem;border:1px solid ${BORDER};border-radius:${RADIUS};background:${BG};color:${FG};font:inherit;font-size:.875rem;font-weight:600;font-variant-numeric:tabular-nums;cursor:pointer;box-shadow:0 8px 20px -10px rgb(15 23 42/.45)}\n.bsv3d-button:hover{border-color:color-mix(in srgb,${FG} 40%,transparent)}\n.bsv3d-button svg{width:1rem;height:1rem}\n.bsv3d-button:disabled{opacity:.6;cursor:default}\n.bsv3d-alert{display:flex;max-width:20rem;flex-direction:column;align-items:center;gap:.75rem;border-radius:${RADIUS};background:${BG};padding:1rem 1.25rem;text-align:center;box-shadow:0 8px 20px -10px rgb(15 23 42/.45)}\n.bsv3d-alert p{margin:0;font-size:.875rem;font-weight:600}\n.bsv3d-alert .bsv3d-button{height:2.5rem;box-shadow:none}\n.bsv3d-unsupported{position:absolute;left:.75rem;bottom:.75rem}\n.bsv3d-hint{pointer-events:none;position:absolute;inset:auto 0 4rem 0;display:flex;justify-content:center;opacity:0}\n.bsv3d-hint[data-visible]{opacity:1}\n.bsv3d-controls{position:absolute;left:.75rem;right:.75rem;bottom:.75rem;display:flex;align-items:flex-end;justify-content:space-between;gap:.5rem}\n.bsv3d-controls>div:last-child{display:flex;flex:none;gap:.5rem}\n.bsv3d-icon{display:grid;place-items:center;width:2.5rem;height:2.5rem;padding:0;border-radius:999px;border:1px solid ${BORDER};background:color-mix(in srgb,${BG} 88%,transparent);color:${FG};cursor:pointer;font:inherit}\n.bsv3d-icon:hover{background:${BG};border-color:color-mix(in srgb,${FG} 35%,transparent)}\n.bsv3d-icon svg{width:1rem;height:1rem}\n.bsv3d-icon[data-wide]{width:auto;padding:0 1rem;font-size:.875rem;font-weight:600}\n.bsv3d-close{position:absolute;top:max(.75rem,env(safe-area-inset-top));right:.75rem}\n.bsv3d-close svg{width:1.25rem;height:1.25rem}\n${S} button:focus-visible,${S} a:focus-visible,.bsv3d-frame button:focus-visible{outline:2px solid ${FG};outline-offset:2px}\n.bsv3d-buybar{flex:none;border-top:1px solid ${BORDER};background:${BG};padding:.75rem 1rem max(.75rem,env(safe-area-inset-bottom))}\n.bsv3d-buybar-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}\n.bsv3d-buybar-name{margin:0;font-weight:600;font-size:1rem}\n.bsv3d-buybar-price{margin:0;font-size:.875rem;font-variant-numeric:tabular-nums}\n.bsv3d-buybar .bsv3d-button{box-shadow:none;background:${FG};color:${BG};border-color:${FG}}\n.bsv3d-buybar-error{margin:.25rem 0 0;font-size:.875rem;color:#b91c1c}\n.bsv3d-notes{display:flex;flex-direction:column;gap:.75rem;font-size:.75rem;line-height:1.6;color:var(--bitsnap-viewer3d-muted,color-mix(in srgb,${FG} 70%,transparent))}\n.bsv3d-notes p{margin:0}\n.bsv3d-notes .bsv3d-facts-title{font-size:.875rem;font-weight:600;color:${FG}}\n.bsv3d-notes dl{display:flex;flex-wrap:wrap;gap:.5rem 1.5rem;margin:.375rem 0 0}\n.bsv3d-notes dl>div{display:flex;flex-direction:column}\n.bsv3d-notes dd{margin:0;font-size:.875rem;font-weight:500;color:${FG};font-variant-numeric:tabular-nums}\n.bsv3d-notes .bsv3d-links{display:flex;flex-wrap:wrap;align-items:baseline;gap:.25rem .75rem}\n.bsv3d-notes a{color:inherit;font-weight:500;text-decoration:underline;text-underline-offset:2px}\n@media (prefers-reduced-motion:no-preference){\n.bsv3d-poster{transition:opacity .5s cubic-bezier(.16,1,.3,1)}\n.bsv3d-hint{transition:opacity .3s}\n.bsv3d-bar>div{transition:width .2s}\n}\n`;\n","import { useCallback, useEffect, useState } from \"react\";\nimport { HOST } from \"../components/checkout/constants\";\nimport { getLocale } from \"../components/checkout/locale\";\nimport { getPanelConfig } from \"../panel/config\";\nimport {\n fetchProduct3D,\n pickProduct,\n pickVariant,\n resolveModel,\n type Product3DProduct,\n type Product3DVariant,\n} from \"./model\";\nimport type { Model3DView } from \"./types\";\n\nexport type UseProduct3DModelOptions = {\n /**\n * Project (shop) ID. Defaults to the one set with `setProjectID` from\n * `bitsnap-react`.\n */\n projectID?: string;\n /**\n * Origin of the Bitsnap backend. Defaults to the library host\n * (`https://bitsnap.pl`, or what `setCustomHost` had set). On a custom\n * domain pass the domain itself, or `\"\"` for same-origin requests.\n */\n host?: string;\n /** Locale of the product name. Defaults to the library locale. */\n locale?: string;\n};\n\nexport type Product3DStatus =\n /** Waiting for the product (also on the server and the first render). */\n | \"loading\"\n /** `model` is set. */\n | \"ready\"\n /** The product (or the chosen variant) has no 3D model, or the server has no 3D support. */\n | \"none\"\n /** The product could not be loaded; `retry()` asks again. */\n | \"error\";\n\nexport type UseProduct3DModelResult = {\n status: Product3DStatus;\n model?: Model3DView;\n /** The product as the public endpoint sent it (name, price, variants). */\n product?: Product3DProduct;\n /** The chosen variant, when `variantId` matches one. */\n variant?: Product3DVariant;\n error?: Error;\n retry: () => void;\n};\n\ntype Loaded =\n | { key: string; products: Product3DProduct[]; error?: undefined }\n | { key: string; products?: undefined; error: Error };\n\n/**\n * The public 3D model of a product (and variant). Fetches in the browser\n * only; switching `variantId` does not fetch again.\n */\nexport function useProduct3DModel(\n productId: string,\n variantId?: string,\n options: UseProduct3DModelOptions = {},\n): UseProduct3DModelResult {\n const projectID = options.projectID ?? getPanelConfig().projectID;\n const [host] = useState(() => options.host ?? HOST);\n const effectiveHost = options.host ?? host;\n const [locale] = useState(() => options.locale ?? getLocale());\n const effectiveLocale = options.locale ?? locale;\n const key = `${effectiveHost}|${projectID}|${productId}|${effectiveLocale}`;\n const [loaded, setLoaded] = useState<Loaded>();\n const [attempt, setAttempt] = useState(0);\n\n useEffect(() => {\n if (!productId) return;\n if (!projectID) {\n setLoaded({\n key,\n error: new Error(\n \"bitsnap-react/viewer3d: no project ID (pass projectID or call setProjectID)\",\n ),\n });\n return;\n }\n let cancelled = false;\n fetchProduct3D({\n projectID,\n host: effectiveHost,\n productId,\n locale: effectiveLocale,\n }).then(\n (products) => {\n if (!cancelled) setLoaded({ key, products });\n },\n (error: unknown) => {\n if (!cancelled)\n setLoaded({\n key,\n error: error instanceof Error ? error : new Error(String(error)),\n });\n },\n );\n return () => {\n cancelled = true;\n };\n }, [key, attempt]);\n\n const retry = useCallback(() => setAttempt((value) => value + 1), []);\n\n if (!productId) return { status: \"none\", retry };\n if (loaded == null || loaded.key !== key) return { status: \"loading\", retry };\n if (loaded.error != null) return { status: \"error\", error: loaded.error, retry };\n const product = pickProduct(loaded.products, productId);\n if (product == null) return { status: \"none\", retry };\n // A variant id passed as `productId` chooses that variant.\n const chosen =\n variantId ?? (pickVariant(product, productId) != null ? productId : undefined);\n const variant = pickVariant(product, chosen);\n const model = resolveModel(product, chosen);\n return {\n status: model != null ? \"ready\" : \"none\",\n model,\n product,\n variant,\n retry,\n };\n}\n","import { withClientParam } from \"@/src/lib/client-header\";\nimport type { Model3DView } from \"./types\";\n\n/**\n * The public product data the 3D viewer reads:\n * `GET {host}/api/integrations/{projectID}/public-commerce/products?ids=…&include=model3d`,\n * the endpoint the cart already uses. Servers without 3D support ignore\n * `include` and send no `model3d`: the viewer then shows nothing.\n */\nexport type Product3DVariant = {\n id: string;\n name: string;\n /** Minor units (grosze, cents). */\n price: number;\n currency: string;\n availableQuantity?: number;\n priceType?: string;\n model3d?: Model3DView;\n};\n\nexport type Product3DProduct = {\n id: string;\n name: string;\n price: number;\n currency: string;\n availableQuantity?: number;\n priceType?: string;\n recurring?: unknown;\n model3d?: Model3DView;\n variants?: Product3DVariant[];\n};\n\nexport type Product3DQuery = {\n projectID: string;\n /** Origin of the Bitsnap backend (or of a custom domain), without a path. */\n host: string;\n productId: string;\n locale?: string;\n};\n\nexport class Product3DError extends Error {\n readonly status: number | undefined;\n\n constructor(message: string, status?: number) {\n super(message);\n this.name = \"Product3DError\";\n this.status = status;\n }\n}\n\nexport function buildProduct3DURL(query: Product3DQuery): string {\n const params = new URLSearchParams();\n params.set(\"ids\", query.productId);\n if (query.locale) params.set(\"locale\", query.locale);\n params.set(\"include\", \"model3d\");\n const host = query.host.replace(/\\/+$/, \"\");\n return `${host}/api/integrations/${encodeURIComponent(\n query.projectID,\n )}/public-commerce/products?${params.toString()}`;\n}\n\nfunction isModel(value: unknown): value is Model3DView {\n return (\n typeof value === \"object\" &&\n value != null &&\n typeof (value as Model3DView).previewUrl === \"string\" &&\n (value as Model3DView).previewUrl.length > 0 &&\n typeof (value as Model3DView).previewSize === \"number\"\n );\n}\n\n/** The product a request answered with: the exact id, else the one holding it as a variant. */\nexport function pickProduct(\n products: readonly Product3DProduct[],\n productId: string,\n): Product3DProduct | undefined {\n return (\n products.find((product) => product.id === productId) ??\n products.find((product) =>\n product.variants?.some((variant) => variant.id === productId),\n ) ??\n (products.length === 1 ? products[0] : undefined)\n );\n}\n\n/** `prodv2_<hash>` of a product or variant id (`prodv2_<hash>_<variant>`). */\nfunction baseProductID(id: string): string {\n return /^(prodv2_[^_]+)/.exec(id)?.[1] ?? id;\n}\n\n/**\n * The variant of `variantId`: its full id (`prodv2_X_red`), or the part after\n * `prodv2_X_` (`red`). The server may answer `prodv2_X` with an item whose id\n * is `prodv2_X_default`, so the base comes from the id itself.\n */\nexport function pickVariant(\n product: Product3DProduct,\n variantId: string | undefined,\n): Product3DVariant | undefined {\n if (!variantId) return undefined;\n const variants = product.variants ?? [];\n const full = `${baseProductID(product.id)}_${variantId}`;\n return (\n variants.find((variant) => variant.id === variantId) ??\n variants.find((variant) => variant.id === full)\n );\n}\n\n/**\n * The model to show: the chosen variant's (the server already gives a variant\n * the product's model when it has none of its own), else the product's, else\n * the first variant with one. A chosen variant without a model shows none.\n */\nexport function resolveModel(\n product: Product3DProduct,\n variantId?: string,\n): Model3DView | undefined {\n const variant = pickVariant(product, variantId);\n if (variant != null) return isModel(variant.model3d) ? variant.model3d : undefined;\n if (isModel(product.model3d)) return product.model3d;\n return product.variants?.map((item) => item.model3d).find(isModel);\n}\n\n/** Whether any variant or the product has a model (for a variant picker). */\nexport function hasAnyModel(product: Product3DProduct): boolean {\n return resolveModel(product) != null;\n}\n\nconst cache = new Map<string, Promise<Product3DProduct[]>>();\n\n/**\n * Loads the product with a credential-less `fetch`, once per URL per page\n * (several viewers of one product share the request). A failed request is\n * forgotten so a retry asks again.\n */\nexport function fetchProduct3D(query: Product3DQuery): Promise<Product3DProduct[]> {\n const url = withClientParam(buildProduct3DURL(query));\n let pending = cache.get(url);\n if (pending == null) {\n pending = (async () => {\n const response = await fetch(url, {\n method: \"GET\",\n credentials: \"omit\",\n headers: { Accept: \"application/json\" },\n });\n if (!response.ok) {\n throw new Product3DError(\n `Could not load the product (${response.status})`,\n response.status,\n );\n }\n const payload = (await response.json()) as { result?: unknown };\n return Array.isArray(payload?.result)\n ? (payload.result as Product3DProduct[])\n : [];\n })();\n cache.set(url, pending);\n pending.catch(() => cache.delete(url));\n }\n return pending;\n}\n\n/** @internal Tests start from an empty cache. */\nexport function clearProduct3DCache(): void {\n cache.clear();\n}\n"],"mappings":"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","names":["useState","VIEWER3D_COPY_PL","size","percent","count","VIEWER3D_COPY_EN","viewer3DCopy","locale","overrides","base","numberLocale","Box","Hand","Maximize2","Rotate3d","RotateCcw","X","useCallback","useEffect","useId","useReducer","useRef","useState","createPortal","MM_PER_UNIT","formatDimensions","dimensionsMm","unit","copy","locale","format","numberLocale","scale","mm","modelFactRows","facts","rows","formatModelSize","dimensions","useCallback","useEffect","useRef","useState","canUseNativeFullscreen","element","useViewerFullscreen","ref","mode","setMode","scrollRef","exit","enter","onChange","current","onKey","event","body","documentElement","previous","y","GESTURE_HINT_STORAGE_KEY","defaultStorage","hasSeenGestureHint","storage","markGestureHintSeen","statusFor","model","visible","needsClickToLoad","initialShellState","shellReducer","state","event","progress","isViewerMounted","status","VIEWER3D_STYLE_HREF","S","BG","FG","BORDER","RADIUS","VIEWER3D_CSS","jsx","jsxs","loadDefaultViewer","appearanceStyle","appearance","style","key","value","hasWebGL","canvas","useMediaQuery","query","matches","setMatches","useState","useEffect","media","update","usePageVisible","visible","setVisible","Model3DViewer","model","productName","locale","texts","decoderPath","reportHref","startSignal","renderFullscreenBar","hideNotes","id","className","loadViewer","copy","viewer3DCopy","shellModel","state","dispatch","useReducer","shellReducer","initialShellState","Viewer","setViewer","frameRef","useRef","stageRef","near","setNear","onScreen","setOnScreen","pageVisible","reducedMotion","coarsePointer","touchActive","setTouchActive","hint","setHint","resetSignal","setResetSignal","fullscreen","useViewerFullscreen","titleID","useId","themeStyle","element","nearObserver","entry","screenObserver","firstStart","mounted","isViewerMounted","cancelled","module","error","ready","hasSeenGestureHint","markGestureHintSeen","timer","GESTURE_HINT_MS","onPointerDown","event","interactive","onInteract","useCallback","onProgress","loaded","total","onLoaded","onError","sizeLabel","formatModelSize","numberLocale","percent","isFullscreen","motionAllowed","portal","node","createPortal","VIEWER3D_STYLE_HREF","VIEWER3D_CSS","Poster","Box","RotateCcw","Hand","Rotate3d","Maximize2","X","ModelNotes","src","alt","hidden","broken","setBroken","href","setHref","url","facts","modelFactRows","row","useCallback","useEffect","useState","Product3DError","message","status","buildProduct3DURL","query","params","isModel","value","pickProduct","products","productId","product","variant","baseProductID","id","pickVariant","variantId","variants","full","resolveModel","item","cache","fetchProduct3D","query","url","withClientParam","buildProduct3DURL","pending","response","Product3DError","payload","useProduct3DModel","productId","variantId","options","projectID","getPanelConfig","host","useState","HOST","effectiveHost","locale","getLocale","effectiveLocale","key","loaded","setLoaded","attempt","setAttempt","useEffect","cancelled","fetchProduct3D","products","error","retry","useCallback","value","product","pickProduct","chosen","pickVariant","variant","model","resolveModel","Fragment","jsx","jsxs","Product3DViewer","productId","variantId","projectID","host","locale","renderBuyBar","fallback","productUrl","onAddedToCart","viewer","result","useProduct3DModel","product","copy","viewer3DCopy","Model3DViewer","close","DefaultBuyBar","getPanelConfig","isCartable","variant","priceType","quantity","cartItemIdFor","onAdded","state","setState","useState","price","currency","canAdd","formatProductPrice","addProductToCart","HOST"]}
|
package/package.json
CHANGED
|
@@ -1,10 +1,23 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bitsnap-react",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.17.0",
|
|
4
4
|
"description": "This is Bitsnap React library for easy integration with any website which is using React framework",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
7
7
|
"type": "commonjs",
|
|
8
|
+
"scripts": {
|
|
9
|
+
"build": "node scripts/write-version.mjs && tsup",
|
|
10
|
+
"test:returns-ssr": "pnpm build && node --test test/returns-widget.ssr.test.cjs",
|
|
11
|
+
"test:catalog-ssr": "pnpm build && node --test test/catalog.ssr.test.cjs",
|
|
12
|
+
"test:course-ssr": "pnpm build && node --test test/course.ssr.test.cjs",
|
|
13
|
+
"build:publish": "pnpm build --env.publish",
|
|
14
|
+
"clean": "rimraf ./dist",
|
|
15
|
+
"dev": "node scripts/write-version.mjs && tsup --watch",
|
|
16
|
+
"dev:publish": "pnpm dev --env.publish",
|
|
17
|
+
"test": "tsup src/components/checkout/appearance.test.ts src/components/checkout/texts.test.ts src/components/checkout/buy-error.test.ts src/components/checkout/cart-buy-error.test.tsx src/lib/appearance-core.test.ts src/lib/texts.test.ts src/components/returns/appearance.test.ts src/components/returns/texts.test.ts src/components/returns/errors.test.ts src/components/returns/money.test.ts src/components/returns/session-storage.test.ts src/components/returns/state-machine.test.ts src/components/returns/selection.test.ts src/components/returns/legacy.test.ts src/panel/returns-appearance.test.ts src/components/products/appearance.test.ts src/components/products/texts.test.ts src/components/products/format.test.ts src/components/products/fetch.test.ts src/components/products/useProducts.test.ts src/components/products/cart-target.test.ts src/components/checkout/cart-items.test.ts src/components/checkout/pending-order.test.ts src/components/checkout/quantity.test.ts src/components/checkout/cart-a11y.test.tsx src/components/checkout/payment-method.test.ts src/components/checkout/cart-payment-method.test.tsx src/course/logic.test.ts src/course/accent.test.ts src/course/texts.test.ts src/course/datasource.test.ts src/course/sanitize.test.ts src/course/VideoPlayer.test.tsx src/course/PanelCourse.test.tsx src/consent/core/cookie.test.ts src/consent/core/texts.test.ts src/consent/core/activate.test.ts src/consent/core/gcm.test.ts src/consent/core/contrast.test.ts src/consent/core/controller.test.ts src/consent/embed.test.ts src/consent/react.test.tsx src/consent/react-shown.test.tsx src/analytics/core.test.ts src/analytics/embed.test.ts src/analytics/instrument.test.tsx src/analytics/page-views.test.tsx src/analytics/visitor.test.ts src/components/checkout/visitor-header.test.ts src/components/products/impressions.test.ts src/components/products/ProductList.analytics.test.tsx src/components/checkout/cart-analytics.test.tsx src/components/checkout/apple-pay-analytics.test.tsx src/components/notifications/notifications-analytics.test.tsx src/components/returns/returns-analytics.test.tsx src/panel/panel-analytics.test.tsx src/course/course-analytics.test.tsx src/viewer3d/viewer3d.test.ts src/viewer3d/Model3DViewer.test.tsx src/panel/panel-products.test.tsx src/ui/email-code-login/email-code-login.test.tsx src/ui/email-code-login/login-brand-logo.test.tsx src/panel/panel-login.test.tsx src/components/returns/returns-login.test.tsx src/components/notifications/notifications-login.test.tsx --format esm --out-dir .test-dist --no-config --external jsdom --silent && node --test --test-force-exit \".test-dist/**/*.test.mjs\"",
|
|
18
|
+
"test:types": "tsc -p test/consumer/tsconfig.json",
|
|
19
|
+
"test:package": "node test/consumer/verify-package.mjs"
|
|
20
|
+
},
|
|
8
21
|
"repository": {
|
|
9
22
|
"type": "git",
|
|
10
23
|
"url": "git+https://github.com/emmems/bitsnap-react.git"
|
|
@@ -31,11 +44,15 @@
|
|
|
31
44
|
"homepage": "https://github.com/emmems/bitsnap-react#readme",
|
|
32
45
|
"devDependencies": {
|
|
33
46
|
"@bufbuild/protoc-gen-es": "^2.10.0",
|
|
47
|
+
"@react-three/drei": "10.7.9",
|
|
48
|
+
"@react-three/fiber": "9.8.2",
|
|
34
49
|
"@types/react": "^19.2.0",
|
|
35
50
|
"@types/react-dom": "^19.2.0",
|
|
51
|
+
"@types/three": "0.187.0",
|
|
36
52
|
"autoprefixer": "^10.4.20",
|
|
37
53
|
"jsdom": "^30.1.3",
|
|
38
54
|
"postcss": "^8.5.3",
|
|
55
|
+
"three": "0.187.0",
|
|
39
56
|
"tsup": "^8.3.5",
|
|
40
57
|
"typescript": "^5.6.3"
|
|
41
58
|
},
|
|
@@ -88,7 +105,21 @@
|
|
|
88
105
|
},
|
|
89
106
|
"peerDependencies": {
|
|
90
107
|
"react": "^19.2.0",
|
|
91
|
-
"react-dom": "^19.2.0"
|
|
108
|
+
"react-dom": "^19.2.0",
|
|
109
|
+
"three": ">=0.160.0",
|
|
110
|
+
"@react-three/fiber": "^9.0.0",
|
|
111
|
+
"@react-three/drei": "^10.0.0"
|
|
112
|
+
},
|
|
113
|
+
"peerDependenciesMeta": {
|
|
114
|
+
"three": {
|
|
115
|
+
"optional": true
|
|
116
|
+
},
|
|
117
|
+
"@react-three/fiber": {
|
|
118
|
+
"optional": true
|
|
119
|
+
},
|
|
120
|
+
"@react-three/drei": {
|
|
121
|
+
"optional": true
|
|
122
|
+
}
|
|
92
123
|
},
|
|
93
124
|
"exports": {
|
|
94
125
|
".": {
|
|
@@ -185,6 +216,12 @@
|
|
|
185
216
|
"default": "./dist/analytics.js"
|
|
186
217
|
}
|
|
187
218
|
},
|
|
219
|
+
"./viewer3d": {
|
|
220
|
+
"import": {
|
|
221
|
+
"types": "./dist/viewer3d.d.mts",
|
|
222
|
+
"default": "./dist/viewer3d.mjs"
|
|
223
|
+
}
|
|
224
|
+
},
|
|
188
225
|
"./package.json": "./package.json"
|
|
189
226
|
},
|
|
190
227
|
"typesVersions": {
|
|
@@ -212,20 +249,10 @@
|
|
|
212
249
|
],
|
|
213
250
|
"analytics": [
|
|
214
251
|
"./dist/analytics.d.ts"
|
|
252
|
+
],
|
|
253
|
+
"viewer3d": [
|
|
254
|
+
"./dist/viewer3d.d.mts"
|
|
215
255
|
]
|
|
216
256
|
}
|
|
217
|
-
},
|
|
218
|
-
"scripts": {
|
|
219
|
-
"build": "node scripts/write-version.mjs && tsup",
|
|
220
|
-
"test:returns-ssr": "pnpm build && node --test test/returns-widget.ssr.test.cjs",
|
|
221
|
-
"test:catalog-ssr": "pnpm build && node --test test/catalog.ssr.test.cjs",
|
|
222
|
-
"test:course-ssr": "pnpm build && node --test test/course.ssr.test.cjs",
|
|
223
|
-
"build:publish": "pnpm build --env.publish",
|
|
224
|
-
"clean": "rimraf ./dist",
|
|
225
|
-
"dev": "node scripts/write-version.mjs && tsup --watch",
|
|
226
|
-
"dev:publish": "pnpm dev --env.publish",
|
|
227
|
-
"test": "tsup src/components/checkout/appearance.test.ts src/components/checkout/texts.test.ts src/components/checkout/buy-error.test.ts src/components/checkout/cart-buy-error.test.tsx src/lib/appearance-core.test.ts src/lib/texts.test.ts src/components/returns/appearance.test.ts src/components/returns/texts.test.ts src/components/returns/errors.test.ts src/components/returns/money.test.ts src/components/returns/session-storage.test.ts src/components/returns/state-machine.test.ts src/components/returns/selection.test.ts src/components/returns/legacy.test.ts src/panel/returns-appearance.test.ts src/components/products/appearance.test.ts src/components/products/texts.test.ts src/components/products/format.test.ts src/components/products/fetch.test.ts src/components/products/useProducts.test.ts src/components/products/cart-target.test.ts src/components/checkout/cart-items.test.ts src/components/checkout/pending-order.test.ts src/components/checkout/quantity.test.ts src/components/checkout/cart-a11y.test.tsx src/components/checkout/payment-method.test.ts src/components/checkout/cart-payment-method.test.tsx src/course/logic.test.ts src/course/accent.test.ts src/course/texts.test.ts src/course/datasource.test.ts src/course/sanitize.test.ts src/course/VideoPlayer.test.tsx src/course/PanelCourse.test.tsx src/consent/core/cookie.test.ts src/consent/core/texts.test.ts src/consent/core/activate.test.ts src/consent/core/gcm.test.ts src/consent/core/contrast.test.ts src/consent/core/controller.test.ts src/consent/embed.test.ts src/consent/react.test.tsx src/consent/react-shown.test.tsx src/analytics/core.test.ts src/analytics/embed.test.ts src/analytics/instrument.test.tsx src/analytics/page-views.test.tsx src/analytics/visitor.test.ts src/components/checkout/visitor-header.test.ts src/components/products/impressions.test.ts src/components/products/ProductList.analytics.test.tsx src/components/checkout/cart-analytics.test.tsx src/components/checkout/apple-pay-analytics.test.tsx src/components/notifications/notifications-analytics.test.tsx src/components/returns/returns-analytics.test.tsx src/panel/panel-analytics.test.tsx src/course/course-analytics.test.tsx --format esm --out-dir .test-dist --no-config --external jsdom --silent && node --test --test-force-exit \".test-dist/**/*.test.mjs\"",
|
|
228
|
-
"test:types": "tsc -p test/consumer/tsconfig.json",
|
|
229
|
-
"test:package": "node test/consumer/verify-package.mjs"
|
|
230
257
|
}
|
|
231
|
-
}
|
|
258
|
+
}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var _chunkVY6CZVVAjs = require('./chunk-VY6CZVVA.js');require('./chunk-H4WAQQVO.js');require('./chunk-KOYBZORL.js');require('./chunk-7DG4UPWE.js');require('./chunk-FGB5FJCI.js');var _chunkDY2S42Q6js = require('./chunk-DY2S42Q6.js');require('./chunk-MG6VV5J2.js');require('./chunk-W3RGQYPD.js');require('./chunk-JSDGZ4NY.js');exports.MARKETING_AGREEMENT_ID = _chunkVY6CZVVAjs.L; exports.bitsnapProjectID = _chunkVY6CZVVAjs.M; exports.default = _chunkVY6CZVVAjs.T; exports.getCartLines = _chunkVY6CZVVAjs.Q; exports.getCheckoutMethods = _chunkVY6CZVVAjs.U; exports.getCheckoutSelection = _chunkVY6CZVVAjs.P; exports.getLocale = _chunkDY2S42Q6js.m; exports.getProjectID = _chunkVY6CZVVAjs.O; exports.reconcileOrderOfLastPayment = _chunkVY6CZVVAjs.R; exports.setLocale = _chunkDY2S42Q6js.l; exports.setProjectID = _chunkVY6CZVVAjs.N; exports.useCartProvider = _chunkVY6CZVVAjs.S;
|
|
2
|
-
//# sourceMappingURL=CartProvider-64QEJ7A7.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["/private/tmp/bsr-src/dist/CartProvider-64QEJ7A7.js"],"names":[],"mappings":"AAAA,+HAAsG,+BAA4B,+BAA4B,+BAA4B,+BAA4B,sDAA+C,+BAA4B,+BAA4B,+BAA4B,siBAAmQ","file":"/private/tmp/bsr-src/dist/CartProvider-64QEJ7A7.js"}
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{L as c,M as d,N as e,O as f,P as g,Q as h,R as i,S as j,T as k,U as l}from"./chunk-AZQOW73L.mjs";import"./chunk-Q3DSK66F.mjs";import"./chunk-KOVKUJAW.mjs";import"./chunk-RWEP6IUC.mjs";import"./chunk-2TLWMYXW.mjs";import{l as a,m as b}from"./chunk-S4Z4O46O.mjs";import"./chunk-PEVB3VL4.mjs";import"./chunk-MDCP5JNP.mjs";import"./chunk-U6FLIRIV.mjs";export{c as MARKETING_AGREEMENT_ID,d as bitsnapProjectID,k as default,h as getCartLines,l as getCheckoutMethods,g as getCheckoutSelection,b as getLocale,f as getProjectID,i as reconcileOrderOfLastPayment,a as setLocale,e as setProjectID,j as useCartProvider};
|
|
2
|
-
//# sourceMappingURL=CartProvider-XKK7A3C2.mjs.map
|
package/dist/chunk-2TLWMYXW.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
import{b as S,d,f as Z}from"./chunk-S4Z4O46O.mjs";import{b as g}from"./chunk-U6FLIRIV.mjs";import{fileDesc as C,messageDesc as N}from"@bufbuild/protobuf/codegenv2";var l=C("Chdjb21tb24vdjEvYWRkcmVzcy5wcm90bxIJY29tbW9uLnYxIocBCgdBZGRyZXNzEgwKBG5hbWUYASABKAkSDQoFbGluZTEYAiABKAkSEgoFbGluZTIYAyABKAlIAIgBARIMCgRjaXR5GAQgASgJEg8KB2NvdW50cnkYBSABKAkSFQoIemlwX2NvZGUYBiABKAlIAYgBAUIICgZfbGluZTJCCwoJX3ppcF9jb2RlIq4BCg5CaWxsaW5nQWRkcmVzcxIMCgRuYW1lGAEgASgJEg0KBWxpbmUxGAIgASgJEhIKBWxpbmUyGAMgASgJSACIAQESDAoEY2l0eRgEIAEoCRIPCgdjb3VudHJ5GAUgASgJEhUKCHppcF9jb2RlGAYgASgJSAGIAQESEwoGdGF4X2lkGAcgASgJSAKIAQFCCAoGX2xpbmUyQgsKCV96aXBfY29kZUIJCgdfdGF4X2lkQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw"),as=N(l,0),ns=N(l,1);import{enumDesc as Zs,fileDesc as K,messageDesc as m,serviceDesc as z}from"@bufbuild/protobuf/codegenv2";import{enumDesc as ds,fileDesc as v}from"@bufbuild/protobuf/codegenv2";var W=v("Chdjb21tb24vdjEvZ2F0ZXdheS5wcm90bxIJY29tbW9uLnYxKs8BCgdHYXRld2F5Eg8KC0dBVEVXQVlfQUxMEAASFwoTR0FURVdBWV9QUlpFTEVXWV8yNBABEhIKDkdBVEVXQVlfU1RSSVBFEAISEAoMR0FURVdBWV9UUEFZEAMSHAoYR0FURVdBWV9DQVNIX09OX0RFTElWRVJZEAQSEAoMR0FURVdBWV9GUkVFEAUSFgoSR0FURVdBWV9JTlBPU1RfUEFZEAYSEAoMR0FURVdBWV9QQVlVEAcSGgoWR0FURVdBWV9NQU5VQUxfUEFZTUVOVBAIQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw");import{enumDesc as us,fileDesc as k,messageDesc as ps}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as x}from"@bufbuild/protobuf/wkt";var r=k("CiJjb21tb24vdjEvcHVzaF9ub3RpZmljYXRpb25zLnByb3RvEgljb21tb24udjEi9gEKG1B1c2hOb3RpZmljYXRpb25EZXZpY2VUb2tlbhIXCgpwdXNoX3Rva2VuGAIgASgJSACIAQESNAoLZXhwaXJlX3RpbWUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAGIAQESEwoGcDI1NmRoGAQgASgJSAKIAQESFQoIZW5kcG9pbnQYBSABKAlIA4gBARIlCghwbGF0Zm9ybRgGIAEoDjITLmNvbW1vbi52MS5QbGF0Zm9ybUINCgtfcHVzaF90b2tlbkIOCgxfZXhwaXJlX3RpbWVCCQoHX3AyNTZkaEILCglfZW5kcG9pbnQi0AEKF1B1c2hOb3RpZmljYXRpb25QYXlsb2FkEg0KBXRpdGxlGAIgASgJEhUKCG9wZW5fdXJsGAMgASgJSAGIAQESDgoEYm9keRgEIAEoCUgAEjoKBGRhdGEYBSADKAsyLC5jb21tb24udjEuUHVzaE5vdGlmaWNhdGlvblBheWxvYWQuRGF0YUVudHJ5GisKCURhdGFFbnRyeRILCgNrZXkYASABKAkSDQoFdmFsdWUYAiABKAk6AjgBQgkKB21lc3NhZ2VCCwoJX29wZW5fdXJsKngKCFBsYXRmb3JtEhgKFFBMQVRGT1JNX1VOU1BFQ0lGSUVEEAASEAoMUExBVEZPUk1fV0VCEAESGAoUUExBVEZPUk1fSU9TX1NBTkRCT1gQAhIQCgxQTEFURk9STV9JT1MQAxIUChBQTEFURk9STV9BTkRST0lEEAQqdAoRTm90aWZpY2F0aW9uRXZlbnQSEQoNRVZFTlRfVU5LTk9XThAAEhIKDkVWRU5UX1JFQ0VJVkVEEAESEAoMRVZFTlRfT1BFTkVEEAISEQoNRVZFTlRfQ0xJQ0tFRBADEhMKD0VWRU5UX0RJU01JU1NFRBAEKpkBChlOb3RpZmljYXRpb25Hcm91cEhvd09mdGVuEicKI05PVElGSUNBVElPTl9HUk9VUF9IT1dfT0ZURU5fUkFSRUxZEAASJgoiTk9USUZJQ0FUSU9OX0dST1VQX0hPV19PRlRFTl9PRlRFThABEisKJ05PVElGSUNBVElPTl9HUk9VUF9IT1dfT0ZURU5fVkVSWV9PRlRFThACQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw",[x]);import{enumDesc as bs,fileDesc as M,messageDesc as Gs,serviceDesc as As}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_empty as Q,file_google_protobuf_timestamp as P}from"@bufbuild/protobuf/wkt";var X=M("Ch1kYXNoYm9hcmQvdjEvYXVkaW9ib29rcy5wcm90bxIXZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEiFgoUR2V0QXVkaW9ib29rc1JlcXVlc3QiIQoTR2V0QXVkaW9ib29rUmVxdWVzdBIKCgJpZBgBIAEoCSKrAQoHQ2hhcHRlchIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESGgoNbXVsdGltZWRpYV9pZBgEIAEoCUgBiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9kZXNjcmlwdGlvbkIQCg5fbXVsdGltZWRpYV9pZCLzAgoJQXVkaW9ib29rEg8KAmlkGAEgASgJSACIAQESEgoKcHJvamVjdF9pZBgCIAEoCRIMCgRuYW1lGAMgASgJEhMKC2Rlc2NyaXB0aW9uGAQgASgJEhMKC2NvdmVyX2ltYWdlGAUgASgJEhcKD3RodW1ibmFpbF9pbWFnZRgGIAEoCRIyCghjaGFwdGVycxgHIAMoCzIgLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkNoYXB0ZXISFwoPaXNfZG93bmxvYWRhYmxlGAggASgIEi4KCmNyZWF0ZWRfYXQYCSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEiQKF2lzX2Jyb3dzZXJfZG93bmxvYWRhYmxlGAogASgISAGIAQESGQoMYWNjZW50X2NvbG9yGAsgASgJSAKIAQFCBQoDX2lkQhoKGF9pc19icm93c2VyX2Rvd25sb2FkYWJsZUIPCg1fYWNjZW50X2NvbG9yIk8KFUdldEF1ZGlvYm9va3NSZXNwb25zZRI2CgphdWRpb2Jvb2tzGAEgAygLMiIuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQXVkaW9ib29rImAKFEdldEF1ZGlvYm9va1Jlc3BvbnNlEjoKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9va0gAiAEBQgwKCl9hdWRpb2Jvb2siVwoeQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXF1ZXN0EjUKCWF1ZGlvYm9vaxgBIAEoCzIiLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkF1ZGlvYm9vayLRAQofQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZRJSCgdzdWNjZXNzGAEgASgLMj8uZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZS5SZXN1bHRIABI6CgdmYWlsdXJlGAIgASgOMicuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuRmFpbHVyZU1lc3NhZ2VIABoUCgZSZXN1bHQSCgoCaWQYASABKAlCCAoGcmVzdWx0IiQKFkRlbGV0ZUF1ZGlvYm9va1JlcXVlc3QSCgoCaWQYASABKAkiVQofR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVxdWVzdBIUCgxhdWRpb2Jvb2tfaWQYASABKAkSEgoFZW1haWwYAiABKAlIAIgBAUIICgZfZW1haWwi+AIKIEdldEF1ZGlvYm9va0FjY2Vzc0VtYWlsc1Jlc3BvbnNlElMKB3N1Y2Nlc3MYASABKAsyQC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHNSZXNwb25zZS5SZXN1bHRIABI6CgdmYWlsdXJlGAIgASgOMicuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuRmFpbHVyZU1lc3NhZ2VIABpYCgtBY2Nlc3NFbWFpbBIKCgJpZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIuCgpjcmVhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBpfCgZSZXN1bHQSVQoGZW1haWxzGAEgAygLMkUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVzcG9uc2UuQWNjZXNzRW1haWxCCAoGcmVzdWx0IkMKHENyZWF0ZUF1ZGlvYm9va0FjY2Vzc1JlcXVlc3QSFAoMYXVkaW9ib29rX2lkGAEgASgJEg0KBWVtYWlsGAIgASgJIjgKHERlbGV0ZUF1ZGlvYm9va0FjY2Vzc1JlcXVlc3QSGAoQc3lzdGVtX2FjY2Vzc19pZBgBIAEoCSJ/CgxCb29sUmVzcG9uc2USKQoHc3VjY2VzcxgBIAEoCzIWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eUgAEjoKB2ZhaWx1cmUYAiABKA4yJy5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCqpAQoORmFpbHVyZU1lc3NhZ2USGwoXRkFJTFVSRV9NRVNTQUdFX1VOS05PV04QABIlCiFGQUlMVVJFX01FU1NBR0VfUFJPSkVDVF9OT1RfRk9VTkQQARIlCiFGQUlMVVJFX01FU1NBR0VfQ0hBUFRFUl9OT1RfRk9VTkQQAhIsCihGQUlMVVJFX01FU1NBR0VfSU5DT1JSRUNUX0NIQVBURVJfRk9STUFUEAMy6gYKEUF1ZGlvYm9va3NTZXJ2aWNlEm4KDUdldEF1ZGlvYm9va3MSLS5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tzUmVxdWVzdBouLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkdldEF1ZGlvYm9va3NSZXNwb25zZRJrCgxHZXRBdWRpb2Jvb2sSLC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tSZXF1ZXN0Gi0uZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rUmVzcG9uc2USjAEKF0NyZWF0ZU9yVXBkYXRlQXVkaW9ib29rEjcuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXF1ZXN0GjguZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlT3JVcGRhdGVBdWRpb2Jvb2tSZXNwb25zZRJpCg9EZWxldGVBdWRpb2Jvb2sSLy5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5EZWxldGVBdWRpb2Jvb2tSZXF1ZXN0GiUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQm9vbFJlc3BvbnNlEo8BChhHZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHMSOC5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5HZXRBdWRpb2Jvb2tBY2Nlc3NFbWFpbHNSZXF1ZXN0GjkuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuR2V0QXVkaW9ib29rQWNjZXNzRW1haWxzUmVzcG9uc2USdQoVQ3JlYXRlQXVkaW9ib29rQWNjZXNzEjUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQ3JlYXRlQXVkaW9ib29rQWNjZXNzUmVxdWVzdBolLmRhc2hib2FyZC5hdWRpb2Jvb2tzLnYxLkJvb2xSZXNwb25zZRJ1ChVEZWxldGVBdWRpb2Jvb2tBY2Nlc3MSNS5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5EZWxldGVBdWRpb2Jvb2tBY2Nlc3NSZXF1ZXN0GiUuZGFzaGJvYXJkLmF1ZGlvYm9va3MudjEuQm9vbFJlc3BvbnNlYgZwcm90bzM",[P,Q]);import{file_google_protobuf_empty as T,file_google_protobuf_timestamp as H}from"@bufbuild/protobuf/wkt";var u=K("ChpwdWJsaWMvdjEvcHVibGljX2FwaS5wcm90bxINcHVibGljX2FwaS52MSI2Ch5HZXRBcHBTdG9yZUFjY291bnRUb2tlblJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJIjwKH0dldEFwcFN0b3JlQWNjb3VudFRva2VuUmVzcG9uc2USGQoRYXBwX2FjY291bnRfdG9rZW4YASABKAkiaQodVmVyaWZ5QXBwU3RvcmVQdXJjaGFzZVJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhoKEnNpZ25lZF90cmFuc2FjdGlvbhgCIAEoCRIWCg50cmFuc2FjdGlvbl9pZBgDIAEoCSJcCh5WZXJpZnlBcHBTdG9yZVB1cmNoYXNlUmVzcG9uc2USEQoJZnVsZmlsbGVkGAEgASgIEhIKCnByb2R1Y3RfaWQYAiABKAkSEwoLZW52aXJvbm1lbnQYAyABKAkiNgoeR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCSL5AQofR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXNwb25zZRJQCgxlbnRpdGxlbWVudHMYASADKAsyOi5wdWJsaWNfYXBpLnYxLkdldEFwcFN0b3JlRW50aXRsZW1lbnRzUmVzcG9uc2UuRW50aXRsZW1lbnQagwEKC0VudGl0bGVtZW50EhIKCnByb2R1Y3RfaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEhMKC2Vudmlyb25tZW50GAMgASgJEhoKEmZ1bGZpbGxtZW50X3N0YXR1cxgEIAEoCRIfChdvcmlnaW5hbF90cmFuc2FjdGlvbl9pZBgFIAEoCSJUCh9SZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXNSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIbChNzaWduZWRfdHJhbnNhY3Rpb25zGAIgAygJIpgCCiBSZXN0b3JlQXBwU3RvcmVQdXJjaGFzZXNSZXNwb25zZRJRCghwcm9kdWN0cxgBIAMoCzI/LnB1YmxpY19hcGkudjEuUmVzdG9yZUFwcFN0b3JlUHVyY2hhc2VzUmVzcG9uc2UuUmVzdG9yZWRQcm9kdWN0EiYKHmZhbWlseV9zaGFyaW5nX3Jldmlld19yZXF1aXJlZBgCIAEoCBp5Cg9SZXN0b3JlZFByb2R1Y3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIfChdvcmlnaW5hbF90cmFuc2FjdGlvbl9pZBgCIAEoCRIOCgZzdGF0dXMYAyABKAkSDgoGcmVhc29uGAQgASgJEhEKCWZ1bGZpbGxlZBgFIAEoCCI4CiBDbGVhckFwcFN0b3JlQWNjb3VudFRva2VuUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkiMQoZR2V0U3RvcmVLaXRDYXRhbG9nUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAki9QEKGkdldFN0b3JlS2l0Q2F0YWxvZ1Jlc3BvbnNlEhcKD3BheXdhbGxfZW5hYmxlZBgBIAEoCBJDCghwcm9kdWN0cxgCIAMoCzIxLnB1YmxpY19hcGkudjEuR2V0U3RvcmVLaXRDYXRhbG9nUmVzcG9uc2UuUHJvZHVjdBp5CgdQcm9kdWN0EhgKEHN0b3JlX3Byb2R1Y3RfaWQYASABKAkSGwoTaW50ZXJuYWxfcHJvZHVjdF9pZBgCIAEoCRIMCgRraW5kGAMgASgJEhQKDGRpc3BsYXlfbmFtZRgEIAEoCRITCgtkZXNjcmlwdGlvbhgFIAEoCSJLCiBVc2VyUGFuZWxHZXRDb3Vyc2VEZXRhaWxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIncKIVVzZXJQYW5lbEdldENvdXJzZURldGFpbHNSZXNwb25zZRIWCgxyZWRpcmVjdF91cmwYASABKAlIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCJ6ChBHZXRPcmRlcnNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSFAoMYWNjZXNzX3Rva2VuGAIgASgJEhIKBWxpbWl0GAMgASgFSACIAQESEwoGb2Zmc2V0GAQgASgFSAGIAQFCCAoGX2xpbWl0QgkKB19vZmZzZXQigwIKEUdldE9yZGVyc1Jlc3BvbnNlEj0KBm9yZGVycxgBIAMoCzItLnB1YmxpY19hcGkudjEuR2V0T3JkZXJzUmVzcG9uc2UuT3JkZXJTdW1tYXJ5EhMKC3RvdGFsX2NvdW50GAIgASgFGpkBCgxPcmRlclN1bW1hcnkSCgoCaWQYASABKAkSDgoGc3RhdHVzGAIgASgJEhQKDHRvdGFsX2Ftb3VudBgDIAEoBRIQCghjdXJyZW5jeRgEIAEoCRIuCgpjcmVhdGVkX2F0GAUgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIVCg1jdXN0b21lcl9uYW1lGAYgASgJIjcKIUlzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJIsUCCiJJc09uZUNsaWNrUGF5bWVudEF2YWlsYWJsZVJlc3BvbnNlEhIKCmlucG9zdF9wYXkYASABKAgSEQoJYXBwbGVfcGF5GAIgASgIEhIKCmdvb2dsZV9wYXkYAyABKAgSYQoRZ29vZ2xlX3BheV9jb25maWcYBCABKAsyQS5wdWJsaWNfYXBpLnYxLklzT25lQ2xpY2tQYXltZW50QXZhaWxhYmxlUmVzcG9uc2UuR29vZ2xlUGF5Q29uZmlnSACIAQEaawoPR29vZ2xlUGF5Q29uZmlnEhMKC21lcmNoYW50X2lkGAEgASgJEhUKDW1lcmNoYW50X25hbWUYAiABKAkSDwoHZ2F0ZXdheRgDIAEoCRIbChNnYXRld2F5X21lcmNoYW50X2lkGAQgASgJQhQKEl9nb29nbGVfcGF5X2NvbmZpZyLRAwofT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVxdWVzdBJHCgdnYXRld2F5GAEgASgOMjYucHVibGljX2FwaS52MS5PbmVDbGlja0F1dGhvcml6ZVBheW1lbnRSZXF1ZXN0LkdhdGV3YXkSEwoLcGF5bWVudERhdGEYAiABKAkSFQoNcGF5bWVudE1ldGhvZBgDIAEoCRIdChV0cmFuc2FjdGlvbklkZW50aWZpZXIYBCABKAkSNwoFb3JkZXIYBSABKAsyKC5wdWJsaWNfYXBpLnYxLkdldFByZU9yZGVyRGV0YWlsc1JlcXVlc3QSMQoQc2hpcHBpbmdfYWRkcmVzcxgGIAEoCzISLmNvbW1vbi52MS5BZGRyZXNzSACIAQESNwoPYmlsbGluZ19hZGRyZXNzGAcgASgLMhkuY29tbW9uLnYxLkJpbGxpbmdBZGRyZXNzSAGIAQESFQoIbWV0YWRhdGEYCCABKAlIAogBASIoCgdHYXRld2F5Eg0KCUFQUExFX1BBWRAAEg4KCkdPT0dMRV9QQVkQAUITChFfc2hpcHBpbmdfYWRkcmVzc0ISChBfYmlsbGluZ19hZGRyZXNzQgsKCV9tZXRhZGF0YSKkAQogT25lQ2xpY2tBdXRob3JpemVQYXltZW50UmVzcG9uc2USEgoKaXNfc3VjY2VzcxgBIAEoCBIUCgxyZWRpcmVjdF91cmwYAiABKAkSFgoOdHJhbnNhY3Rpb25faWQYAyABKAkSIwoWYXBwbGVfcGF5X3RyYWNraW5nX3VybBgEIAEoCUgAiAEBQhkKF19hcHBsZV9wYXlfdHJhY2tpbmdfdXJsIiwKDFByZU9yZGVySXRlbRIKCgJpZBgBIAEoCRIQCghxdWFudGl0eRgCIAEoBSLVAgoZR2V0UHJlT3JkZXJEZXRhaWxzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEioKBWl0ZW1zGAIgAygLMhsucHVibGljX2FwaS52MS5QcmVPcmRlckl0ZW0SGQoMY291bnRyeV9jb2RlGAMgASgJSACIAQESFgoJcG9zdF9jb2RlGAQgASgJSAGIAQESFwoKY291cG9uQ29kZRgFIAEoCUgCiAEBEhIKBWVtYWlsGAYgASgJSAOIAQESJQoYc2VsZWN0ZWRfZGVsaXZlcnlfbWV0aG9kGAcgASgJSASIAQESEgoFcGhvbmUYCCABKAlIBYgBAUIPCg1fY291bnRyeV9jb2RlQgwKCl9wb3N0X2NvZGVCDQoLX2NvdXBvbkNvZGVCCAoGX2VtYWlsQhsKGV9zZWxlY3RlZF9kZWxpdmVyeV9tZXRob2RCCAoGX3Bob25lIqwBCg5EZWxpdmVyeU1ldGhvZBIKCgJpZBgBIAEoCRIOCgZhbW91bnQYAiABKAUSDAoEbmFtZRgDIAEoCRIYCgtkZXNjcmlwdGlvbhgEIAEoCUgAiAEBEhUKCG1pbl9kYXlzGAUgASgFSAGIAQESFQoIbWF4X2RheXMYBiABKAVIAogBAUIOCgxfZGVzY3JpcHRpb25CCwoJX21pbl9kYXlzQgsKCV9tYXhfZGF5cyKzAgoaR2V0UHJlT3JkZXJEZXRhaWxzUmVzcG9uc2USLgoHbWV0aG9kcxgBIAMoCzIdLnB1YmxpY19hcGkudjEuRGVsaXZlcnlNZXRob2QSFwoKY291cG9uQ29kZRgCIAEoCUgAiAEBEiUKGHNlbGVjdGVkX2RlbGl2ZXJ5X21ldGhvZBgDIAEoCUgBiAEBEhkKDHRvdGFsX2Ftb3VudBgEIAEoBUgCiAEBEhkKDGNvdXBvbl92YWx1ZRgFIAEoBUgDiAEBEhAKCGN1cnJlbmN5GAYgASgJEg8KB2NvdW50cnkYByABKAlCDQoLX2NvdXBvbkNvZGVCGwoZX3NlbGVjdGVkX2RlbGl2ZXJ5X21ldGhvZEIPCg1fdG90YWxfYW1vdW50Qg8KDV9jb3Vwb25fdmFsdWUiYgopTm90aWZ5VXNlckFib3V0UHJvZHVjdEF2YWlsYWJpbGl0eVJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRISCgpwcm9kdWN0X2lkGAIgASgJEg0KBWVtYWlsGAMgASgJIk0KH0FwcGxlUGF5VmFsaWRhdGVNZXJjaGFudFJlcXVlc3QSFgoOdmFsaWRhdGlvbl91cmwYASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCSI8CiBBcHBsZVBheVZhbGlkYXRlTWVyY2hhbnRSZXNwb25zZRIYChBtZXJjaGFudF9zZXNzaW9uGAEgASgJIk4KIkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxhbGxfdmFyaWFudHMYAiADKAkiwgQKI0dldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlc3BvbnNlEmEKEGF2YWlsYWJsZV9jb3VudHMYASADKAsyRy5wdWJsaWNfYXBpLnYxLkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlc3BvbnNlLkF2YWlsYWJsZUNvdW50c0VudHJ5EkwKBWVycm9yGAIgASgOMjgucHVibGljX2FwaS52MS5HZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3RSZXNwb25zZS5FcnJvckgAiAEBGlEKGEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdBIjChthdmFpbGFibGVfcXVhbnRpdHlfdG9fb3JkZXIYASABKAUSEAoIY2FuX2JhY2sYAiABKAgagwEKFEF2YWlsYWJsZUNvdW50c0VudHJ5EgsKA2tleRgBIAEoCRJaCgV2YWx1ZRgCIAEoCzJLLnB1YmxpY19hcGkudjEuR2V0QXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0UmVzcG9uc2UuQXZhaWxhYmxlQ291bnRGb3JQcm9kdWN0OgI4ASKGAQoFRXJyb3ISEQoNRVJST1JfVU5LTk9XThAAEhsKF0VSUk9SX1BST0pFQ1RfTk9UX0ZPVU5EEAESHwobRVJST1JfUFJPRFVDVF9OT1RfQVZBSUxBQkxFEAISLAooRVJST1JfUFJPRFVDVF9OT1RfQVZBSUxBQkxFX0JVVF9DQU5fQkFDSxADQggKBl9lcnJvciI1Ch1Vc2VyUGFuZWxEZWxldGVBY2NvdW50UmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkiQAoURGlkQnV5UHJvZHVjdFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhIKCnByb2R1Y3RfaWQYAiABKAki/gEKIVVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEgoKcHJvamVjdF9pZBgCIAEoCRJNCg1tb2RpZmljYXRpb25zGAMgAygLMjYucHVibGljX2FwaS52MS5VcGRhdGVOb3RpZmljYXRpb25TZXR0aW5nc1JlcXVlc3QuR3JvdXASOgoPZW5hYmxlZF9tZXRob2RzGAQgAygOMiEucHVibGljX2FwaS52MS5Ob3RpZmljYXRpb25NZXRob2QaJAoFR3JvdXASCgoCaWQYASABKAkSDwoHZW5hYmxlZBgCIAEoCCJRCidVcGRhdGVHbG9iYWxOb3RpZmljYXRpb25TZXR0aW5nc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhAKCGlzX211dGVkGAIgASgIIlEKJUdldE5vdGlmaWNhdGlvblNldHRpbmdzRGV0YWlsc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkioQEKEU5vdGlmaWNhdGlvbkdyb3VwEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARIPCgdlbmFibGVkGAQgASgIEjcKCWhvd19vZnRlbhgFIAEoDjIkLmNvbW1vbi52MS5Ob3RpZmljYXRpb25Hcm91cEhvd09mdGVuQg4KDF9kZXNjcmlwdGlvbiKxAgomR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NEZXRhaWxzUmVzcG9uc2USEgoKcHJvamVjdF9pZBgBIAEoCRIMCgRuYW1lGAIgASgJEi8KBXRoZW1lGAMgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIAIgBARI8ChFhdmFpbGFibGVfbWV0aG9kcxgEIAMoDjIhLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uTWV0aG9kEjoKD2VuYWJsZWRfbWV0aG9kcxgFIAMoDjIhLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uTWV0aG9kEjAKBmdyb3VwcxgGIAMoCzIgLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uR3JvdXBCCAoGX3RoZW1lIkMKHkdldE5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSCwoDYWxsGAIgASgIIvACCh9HZXROb3RpZmljYXRpb25TZXR0aW5nc1Jlc3BvbnNlEkgKCHByb2plY3RzGAEgAygLMjYucHVibGljX2FwaS52MS5HZXROb3RpZmljYXRpb25TZXR0aW5nc1Jlc3BvbnNlLlByb2plY3QSEAoIaXNfbXV0ZWQYAiABKAgapQEKB1Byb2plY3QSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRJFCgZzdGF0dXMYAyABKA4yNS5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvblNldHRpbmdzUmVzcG9uc2UuU3RhdHVzEi8KBXRoZW1lGAQgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIAIgBAUIICgZfdGhlbWUiSQoGU3RhdHVzEhYKElNUQVRVU19VTlNQRUNJRklFRBAAEhIKDlNUQVRVU19FTkFCTEVEEAESEwoPU1RBVFVTX0RJU0FCTEVEEAIizAEKHUdldE5vdGlmaWNhdGlvbkhpc3RvcnlSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIXCgpwcm9qZWN0X2lkGAIgASgJSACIAQESMgoHbWV0aG9kcxgDIAMoDjIhLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uTWV0aG9kEhEKCXBhZ2Vfc2l6ZRgEIAEoBRIXCgpwYWdlX3Rva2VuGAUgASgJSAGIAQFCDQoLX3Byb2plY3RfaWRCDQoLX3BhZ2VfdG9rZW4i6wMKF05vdGlmaWNhdGlvbkhpc3RvcnlJdGVtEgoKAmlkGAEgASgJEhcKD25vdGlmaWNhdGlvbl9pZBgCIAEoCRIxCgZtZXRob2QYAyABKA4yIS5wdWJsaWNfYXBpLnYxLk5vdGlmaWNhdGlvbk1ldGhvZBIrCgdzZW50X2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBINCgV0aXRsZRgFIAEoCRIVCghzdWJ0aXRsZRgGIAEoCUgAiAEBEhQKB2NvbnRlbnQYByABKAlIAYgBARIWCglpbWFnZV91cmwYCCABKAlIAogBARIVCghvcGVuX3VybBgKIAEoCUgDiAEBEj0KBnNlbmRlchgJIAEoCzItLnB1YmxpY19hcGkudjEuTm90aWZpY2F0aW9uSGlzdG9yeUl0ZW0uU2VuZGVyGm0KBlNlbmRlchISCgpwcm9qZWN0X2lkGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRIvCgV0aGVtZRgDIAEoCzIbLnB1YmxpY19hcGkudjEuUHJvamVjdFRoZW1lSACIAQFCCAoGX3RoZW1lQgsKCV9zdWJ0aXRsZUIKCghfY29udGVudEIMCgpfaW1hZ2VfdXJsQgsKCV9vcGVuX3VybCKRAQoeR2V0Tm90aWZpY2F0aW9uSGlzdG9yeVJlc3BvbnNlEj0KDW5vdGlmaWNhdGlvbnMYASADKAsyJi5wdWJsaWNfYXBpLnYxLk5vdGlmaWNhdGlvbkhpc3RvcnlJdGVtEhwKD25leHRfcGFnZV90b2tlbhgCIAEoCUgAiAEBQhIKEF9uZXh0X3BhZ2VfdG9rZW4iQQopVXNlclBhbmVsUHVzaEdldEF2YWlsYWJsZUNvbXBhbmllc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJIusCCipVc2VyUGFuZWxQdXNoR2V0QXZhaWxhYmxlQ29tcGFuaWVzUmVzcG9uc2USVAoJY29tcGFuaWVzGAEgAygLMkEucHVibGljX2FwaS52MS5Vc2VyUGFuZWxQdXNoR2V0QXZhaWxhYmxlQ29tcGFuaWVzUmVzcG9uc2UuQ29tcGFueRpxCgVHcm91cBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhgKC2Rlc2NyaXB0aW9uGAMgASgJSACIAQESFgoJaG93X29mdGVuGAQgASgJSAGIAQFCDgoMX2Rlc2NyaXB0aW9uQgwKCl9ob3dfb2Z0ZW4adAoHQ29tcGFueRIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEk8KBmdyb3VwcxgDIAMoCzI/LnB1YmxpY19hcGkudjEuVXNlclBhbmVsUHVzaEdldEF2YWlsYWJsZUNvbXBhbmllc1Jlc3BvbnNlLkdyb3VwIjAKGlNob3VsZFNob3BQcm9kdWN0c1Jlc3BvbnNlEhIKCmlzX3Zpc2libGUYASABKAgiNAoeU2hvdWxkU2hvd0d1ZXN0Q2F0YWxvZ1Jlc3BvbnNlEhIKCmlzX3Zpc2libGUYASABKAgihgEKE0d1ZXN0Q2F0YWxvZ1Byb2R1Y3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD2NvdmVyX2ltYWdlX3VybBgDIAEoCRI0Cgxwcm9kdWN0X3R5cGUYBCABKA4yHi5wdWJsaWNfYXBpLnYxLlVzZXJQcm9kdWN0VHlwZSJPChdHZXRHdWVzdENhdGFsb2dSZXNwb25zZRI0Cghwcm9kdWN0cxgBIAMoCzIiLnB1YmxpY19hcGkudjEuR3Vlc3RDYXRhbG9nUHJvZHVjdCKGAQokVXNlclBhbmVsUmVzb2x2ZVByb2R1Y3RBY2Nlc3NSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRISCgpwcm9kdWN0X2lkGAIgASgJEjQKDHByb2R1Y3RfdHlwZRgDIAEoDjIeLnB1YmxpY19hcGkudjEuVXNlclByb2R1Y3RUeXBlIucBCiVVc2VyUGFuZWxSZXNvbHZlUHJvZHVjdEFjY2Vzc1Jlc3BvbnNlEksKBnN0YXR1cxgBIAEoDjI7LnB1YmxpY19hcGkudjEuVXNlclBhbmVsUmVzb2x2ZVByb2R1Y3RBY2Nlc3NSZXNwb25zZS5TdGF0dXMSFgoJYWNjZXNzX2lkGAIgASgJSACIAQEiSwoGU3RhdHVzEhYKElNUQVRVU19VTlNQRUNJRklFRBAAEgkKBU9XTkVEEAESDQoJTk9UX09XTkVEEAISDwoLVU5BVkFJTEFCTEUQA0IMCgpfYWNjZXNzX2lkIkQKFkdldFNob3BQcm9kdWN0c1JlcXVlc3QSGQoMYWNjZXNzX3Rva2VuGAEgASgJSACIAQFCDwoNX2FjY2Vzc190b2tlbiLYAQoXR2V0U2hvcFByb2R1Y3RzUmVzcG9uc2USQAoIcHJvZHVjdHMYBSADKAsyLi5wdWJsaWNfYXBpLnYxLkdldFNob3BQcm9kdWN0c1Jlc3BvbnNlLlByb2R1Y3QaewoHUHJvZHVjdBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhEKCWltYWdlX3VybBgDIAEoCRINCgVwcmljZRgEIAEoCRIeChFpc19hbHJlYWR5X2JvdWdodBgFIAEoCEgAiAEBQhQKEl9pc19hbHJlYWR5X2JvdWdodCLUAQofVXNlclBhbmVsR2V0RmlsZURldGFpbHNSZXNwb25zZRJICgdzdWNjZXNzGAEgASgLMjUucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRGaWxlRGV0YWlsc1Jlc3BvbnNlLlJlc3VsdEgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAAaKwoGUmVzdWx0EhIKCnByb2plY3RfaWQYASABKAkSDQoFZmlsZXMYAiADKAlCCAoGcmVzdWx0IkkKHlVzZXJQYW5lbEdldEZpbGVEZXRhaWxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIvkCCiFVc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVzcG9uc2USSgoHc3VjY2VzcxgBIAEoCzI3LnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0VGlja2V0RGV0YWlsc1Jlc3BvbnNlLlJlc3VsdEgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSAAaywEKBlJlc3VsdBISCgpwcm9qZWN0X2lkGAEgASgJEhIKCnRpY2tldF91cmwYAiABKAkSFAoMcHJvZHVjdF9uYW1lGAMgASgJEhkKEXByb2R1Y3RfaW1hZ2VfdXJsGAQgASgJEh4KEWdvb2dsZV93YWxsZXRfdXJsGAUgASgJSACIAQESHQoQYXBwbGVfd2FsbGV0X3VybBgGIAEoCUgBiAEBQhQKEl9nb29nbGVfd2FsbGV0X3VybEITChFfYXBwbGVfd2FsbGV0X3VybEIICgZyZXN1bHQiSwogVXNlclBhbmVsR2V0VGlja2V0RGV0YWlsc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCSLPBAowVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMc1Jlc3BvbnNlElkKB3N1Y2Nlc3MYASABKAsyRi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNEb3dubG9hZFVSTHNSZXNwb25zZS5SZXN1bHRIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAGpoBChhBdWRpb2Jvb2tEb3dubG9hZERldGFpbHMSEgoKY2hhcHRlcl9pZBgBIAEoCRISCgpwdWJsaWNfdXJsGAIgASgJEh0KEGRvd25sb2FkYWJsZV91cmwYAyABKAlIAIgBARIVCghkdXJhdGlvbhgEIAEoBUgBiAEBQhMKEV9kb3dubG9hZGFibGVfdXJsQgsKCV9kdXJhdGlvbhrmAQoGUmVzdWx0EnwKGmF1ZGlvYm9va19kb3dubG9hZF9kZXRhaWxzGAEgAygLMlgucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRBdWRpb2Jvb2tEZXRhaWxzRG93bmxvYWRVUkxzUmVzcG9uc2UuQXVkaW9ib29rRG93bmxvYWREZXRhaWxzEjMKJmlzX2F2YWlsYWJsZV90b19kb3dubG9hZF9pbl9tb2JpbGVfYXBwGAIgASgISACIAQFCKQonX2lzX2F2YWlsYWJsZV90b19kb3dubG9hZF9pbl9tb2JpbGVfYXBwQggKBnJlc3VsdCKCAQovVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMc1JlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJEhEKCWFjY2Vzc19pZBgCIAEoCRIXCgppc19icm93c2VyGAMgASgISACIAQFCDQoLX2lzX2Jyb3dzZXIimwEKJFVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNSZXNwb25zZRI3CglhdWRpb2Jvb2sYASABKAsyIi5kYXNoYm9hcmQuYXVkaW9ib29rcy52MS5BdWRpb2Jvb2tIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCJOCiNVc2VyUGFuZWxHZXRBdWRpb2Jvb2tEZXRhaWxzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAkSEQoJYWNjZXNzX2lkGAIgASgJIjMKG1VzZXJQYW5lbEdldFByb2R1Y3RzUmVxdWVzdBIUCgxhY2Nlc3NfdG9rZW4YASABKAki2QEKHFVzZXJQYW5lbEdldFByb2R1Y3RzUmVzcG9uc2USRQoHc3VjY2VzcxgBIAEoCzIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0UHJvZHVjdHNSZXNwb25zZS5SZXN1bHRIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAGjYKBlJlc3VsdBIsCghwcm9kdWN0cxgBIAMoCzIaLnB1YmxpY19hcGkudjEuVXNlclByb2R1Y3RCCAoGcmVzdWx0Ii4KFlVzZXJQYW5lbExvZ291dFJlcXVlc3QSFAoMYWNjZXNzX3Rva2VuGAEgASgJIrQBCh5Vc2VyUGFuZWxMb2dpbldpdGhDb2RlUmVzcG9uc2USFgoMYWNjZXNzX3Rva2VuGAEgASgJSAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIABISCgVlbWFpbBgDIAEoCUgBiAEBEhQKB3VzZXJfaWQYBCABKAlIAogBAUIICgZyZXN1bHRCCAoGX2VtYWlsQgoKCF91c2VyX2lkIi0KHVVzZXJQYW5lbExvZ2luV2l0aENvZGVSZXF1ZXN0EgwKBGNvZGUYASABKAUi8gEKFlVzZXJQYW5lbExvZ2luUmVzcG9uc2USPwoHc3VjY2VzcxgBIAEoCzIsLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5SZXNwb25zZS5SZXN1bHRIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAGlsKBlJlc3VsdBIQCghyZXRyeV9pbhgBIAEoBRI/Cg9kZWxpdmVyeV9tZXRob2QYAiABKA4yJi5wdWJsaWNfYXBpLnYxLkxvZ2luQ29kZURlbGl2ZXJ5TWV0aG9kQggKBnJlc3VsdCKfAQoVVXNlclBhbmVsTG9naW5SZXF1ZXN0Eg0KBWVtYWlsGAEgASgJEh8KEnJlZ3VsYXRpb25zX2FjY2VwdBgCIAEoCEgAiAEBEj8KD2RlbGl2ZXJ5X21ldGhvZBgDIAEoDjImLnB1YmxpY19hcGkudjEuTG9naW5Db2RlRGVsaXZlcnlNZXRob2RCFQoTX3JlZ3VsYXRpb25zX2FjY2VwdCI5ChdHZXRPcmRlclJldHJ5VXJsUmVxdWVzdBIKCgJpZBgBIAEoCRISCgpwcm9qZWN0X2lkGAIgASgJIr8BChhHZXRPcmRlclJldHJ5VXJsUmVzcG9uc2USPgoDdXJsGAEgASgLMi8ucHVibGljX2FwaS52MS5HZXRPcmRlclJldHJ5VXJsUmVzcG9uc2UuU3VjY2Vzc0gAEhEKB2ZhaWx1cmUYAiABKAlIABpGCgdTdWNjZXNzEgsKA3VybBgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIICgZyZXN1bHQiMQoPR2V0T3JkZXJSZXF1ZXN0EgoKAmlkGAEgASgJEhIKCnByb2plY3RfaWQYAiABKAkifAoQR2V0T3JkZXJSZXNwb25zZRIPCgJpZBgBIAEoCUgAiAEBEiIKBWl0ZW1zGAIgAygLMhMucHVibGljX2FwaS52MS5JdGVtEiwKB2RldGFpbHMYAyABKAsyGy5wdWJsaWNfYXBpLnYxLk9yZGVyRGV0YWlsc0IFCgNfaWQi+QEKDE9yZGVyRGV0YWlscxI1CgVpdGVtcxgBIAMoCzImLnB1YmxpY19hcGkudjEuT3JkZXJEZXRhaWxzLlNpbmdsZUl0ZW0SIwoHZ2F0ZXdheRgCIAEoDjISLmNvbW1vbi52MS5HYXRld2F5GowBCgpTaW5nbGVJdGVtEgoKAmlkGAEgASgJEhYKCWltYWdlX3VybBgCIAEoCUgAiAEBEgwKBG5hbWUYAyABKAkSEAoIcXVhbnRpdHkYBCABKAUSFAoMcHJpY2VfYW1vdW50GAUgASgDEhYKDnByaWNlX2N1cnJlbmN5GAYgASgJQgwKCl9pbWFnZV91cmwi0QEKBEl0ZW0SCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIRCglpbWFnZV91cmwYAyABKAkSPAoRZmlsZV9kb3dubG9hZGFibGUYBCABKAsyHy5wdWJsaWNfYXBpLnYxLkZpbGVEb3dubG9hZGFibGVIABItCglhdWRpb2Jvb2sYBSABKAsyGC5wdWJsaWNfYXBpLnYxLkF1ZGlvYm9va0gAEicKBnRpY2tldBgGIAEoCzIVLnB1YmxpY19hcGkudjEuVGlja2V0SABCBgoEaXRlbSIkChBGaWxlRG93bmxvYWRhYmxlEhAKCGZpbGVfdXJsGAEgASgJIiUKCUF1ZGlvYm9vaxIYChBhcHBfZG93bmxvYWRfdXJsGAEgASgJIoEBCgZUaWNrZXQSEQoJdGlja2V0X2lkGAEgASgJEhsKDmFwcGxlX3Bhc3NfdXJsGAIgASgJSACIAQESHgoRZ29vZ2xlX3RpY2tldF91cmwYAyABKAlIAYgBAUIRCg9fYXBwbGVfcGFzc191cmxCFAoSX2dvb2dsZV90aWNrZXRfdXJsIucCCgtVc2VyUHJvZHVjdBISCgpwcm9qZWN0X2lkGAEgASgJEhQKDHByb2plY3RfbmFtZRgCIAEoCRISCgpwcm9kdWN0X2lkGAMgASgJEhQKDHByb2R1Y3RfbmFtZRgEIAEoCRIbChNwcm9kdWN0X2Rlc2NyaXB0aW9uGAUgASgJEhkKEXByb2R1Y3RfaW1hZ2VfdXJsGAYgASgJEjQKDHByb2R1Y3RfdHlwZRgHIAEoDjIeLnB1YmxpY19hcGkudjEuVXNlclByb2R1Y3RUeXBlEhEKCWFjY2Vzc19pZBgIIAEoCRI3Cg1wcm9qZWN0X3RoZW1lGAkgASgLMhsucHVibGljX2FwaS52MS5Qcm9qZWN0VGhlbWVIAIgBARIgChNwcm9qZWN0X2Rlc2NyaXB0aW9uGAogASgJSAGIAQFCEAoOX3Byb2plY3RfdGhlbWVCFgoUX3Byb2plY3RfZGVzY3JpcHRpb24idQoMQm9vbFJlc3BvbnNlEikKB3N1Y2Nlc3MYASABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABIwCgdmYWlsdXJlGAIgASgOMh0ucHVibGljX2FwaS52MS5GYWlsdXJlTWVzc2FnZUgAQggKBnJlc3VsdCJuChBQdXNoRXZlbnRSZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRIXCg9ub3RpZmljYXRpb25faWQYAiABKAkSKwoFZXZlbnQYAyABKA4yHC5jb21tb24udjEuTm90aWZpY2F0aW9uRXZlbnQirQEKGlB1c2hTZW5kRGV2aWNlVG9rZW5SZXF1ZXN0EhQKDGFjY2Vzc190b2tlbhgBIAEoCRI3CgdwYXlsb2FkGAIgASgLMiYuY29tbW9uLnYxLlB1c2hOb3RpZmljYXRpb25EZXZpY2VUb2tlbhIkChdpc19ub3RpZmljYXRpb25fZ3JhbnRlZBgDIAEoCEgAiAEBQhoKGF9pc19ub3RpZmljYXRpb25fZ3JhbnRlZCLCAQoMUHJvamVjdFRoZW1lEhYKCWltYWdlX3VybBgBIAEoCUgAiAEBEhsKDmltYWdlX2RhcmtfdXJsGAIgASgJSAGIAQESGAoLYnJhbmRfY29sb3IYAyABKAlIAogBARIdChBicmFuZF9jb2xvcl9kYXJrGAQgASgJSAOIAQFCDAoKX2ltYWdlX3VybEIRCg9faW1hZ2VfZGFya191cmxCDgoMX2JyYW5kX2NvbG9yQhMKEV9icmFuZF9jb2xvcl9kYXJrIo4BChxHZXRQdWJsaWNPcmRlckRldGFpbHNSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkSEgoFZW1haWwYAyABKAlIAIgBARIZCgxhY2Nlc3NfdG9rZW4YBCABKAlIAYgBAUIICgZfZW1haWxCDwoNX2FjY2Vzc190b2tlbiJwCh1HZXRQdWJsaWNPcmRlckRldGFpbHNSZXNwb25zZRIyCgVvcmRlchgBIAEoCzIhLnB1YmxpY19hcGkudjEuUHVibGljT3JkZXJEZXRhaWxzSAASEQoHZmFpbHVyZRgCIAEoCUgAQggKBnJlc3VsdCKGBgoSUHVibGljT3JkZXJEZXRhaWxzEhAKCG9yZGVyX2lkGAEgASgJEg4KBnN0YXR1cxgCIAEoCRIeChFwcm9jZXNzaW5nX3N0YXR1cxgDIAEoCUgAiAEBEhUKDWN1c3RvbWVyX25hbWUYBCABKAkSFgoOY3VzdG9tZXJfZW1haWwYBSABKAkSGwoOY3VzdG9tZXJfcGhvbmUYBiABKAlIAYgBARIdChBkZWxpdmVyeV9hZGRyZXNzGAcgASgJSAKIAQESHAoPZGVsaXZlcnlfbWV0aG9kGAggASgJSAOIAQESHAoPdHJhY2tpbmdfbnVtYmVyGAkgASgJSASIAQESLQoFaXRlbXMYCiADKAsyHi5wdWJsaWNfYXBpLnYxLlB1YmxpY09yZGVySXRlbRIzCghjb21tZW50cxgLIAMoCzIhLnB1YmxpY19hcGkudjEuUHVibGljT3JkZXJDb21tZW50EhQKDHRvdGFsX2Ftb3VudBgMIAEoAxIQCghjdXJyZW5jeRgNIAEoCRIuCgpjcmVhdGVkX2F0GA4gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIzCgp1cGRhdGVkX2F0GA8gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgFiAEBEhMKC2lzX3ZlcmlmaWVkGBAgASgIEhUKDWNvbW1lbnRfY291bnQYESABKAUSNwoNcHJvamVjdF90aGVtZRgSIAEoCzIbLnB1YmxpY19hcGkudjEuUHJvamVjdFRoZW1lSAaIAQESGQoMcHJvamVjdF9uYW1lGBMgASgJSAeIAQFCFAoSX3Byb2Nlc3Npbmdfc3RhdHVzQhEKD19jdXN0b21lcl9waG9uZUITChFfZGVsaXZlcnlfYWRkcmVzc0ISChBfZGVsaXZlcnlfbWV0aG9kQhIKEF90cmFja2luZ19udW1iZXJCDQoLX3VwZGF0ZWRfYXRCEAoOX3Byb2plY3RfdGhlbWVCDwoNX3Byb2plY3RfbmFtZSJ4Cg9QdWJsaWNPcmRlckl0ZW0SDAoEbmFtZRgBIAEoCRIQCghxdWFudGl0eRgCIAEoBRINCgVwcmljZRgDIAEoAxIQCghjdXJyZW5jeRgEIAEoCRIWCglpbWFnZV91cmwYBSABKAlIAIgBAUIMCgpfaW1hZ2VfdXJsIqABChJQdWJsaWNPcmRlckNvbW1lbnQSCgoCaWQYASABKAUSDwoHbWVzc2FnZRgCIAEoCRITCgthdXRob3JfdHlwZRgDIAEoCRIYCgthdXRob3JfbmFtZRgEIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQg4KDF9hdXRob3JfbmFtZSJrChxBZGRQdWJsaWNPcmRlckNvbW1lbnRSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIUCgxhY2Nlc3NfdG9rZW4YBCABKAkikQEKHUFkZFB1YmxpY09yZGVyQ29tbWVudFJlc3BvbnNlEjQKB2NvbW1lbnQYASABKAsyIS5wdWJsaWNfYXBpLnYxLlB1YmxpY09yZGVyQ29tbWVudEgAEjAKB2ZhaWx1cmUYAiABKA4yHS5wdWJsaWNfYXBpLnYxLkZhaWx1cmVNZXNzYWdlSABCCAoGcmVzdWx0IkUKHUdldE9yZGVyRm9yVGVzdGltb25pYWxSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkiwgMKHkdldE9yZGVyRm9yVGVzdGltb25pYWxSZXNwb25zZRJICgVvcmRlchgBIAEoCzI3LnB1YmxpY19hcGkudjEuR2V0T3JkZXJGb3JUZXN0aW1vbmlhbFJlc3BvbnNlLk9yZGVySW5mb0gAEhEKB2ZhaWx1cmUYAiABKAlIABqAAQoMT3JkZXJQcm9kdWN0EhIKCnByb2R1Y3RfaWQYASABKAkSFAoMcHJvZHVjdF9uYW1lGAIgASgJEh4KEXByb2R1Y3RfaW1hZ2VfdXJsGAMgASgJSACIAQESEAoIcXVhbnRpdHkYBCABKAVCFAoSX3Byb2R1Y3RfaW1hZ2VfdXJsGrUBCglPcmRlckluZm8SEAoIb3JkZXJfaWQYASABKAkSFQoNY3VzdG9tZXJfbmFtZRgCIAEoCRIWCg5jdXN0b21lcl9lbWFpbBgDIAEoCRJMCghwcm9kdWN0cxgEIAMoCzI6LnB1YmxpY19hcGkudjEuR2V0T3JkZXJGb3JUZXN0aW1vbmlhbFJlc3BvbnNlLk9yZGVyUHJvZHVjdBIZChFhbHJlYWR5X3N1Ym1pdHRlZBgFIAEoCEIICgZyZXN1bHQiswEKGFN1Ym1pdFRlc3RpbW9uaWFsUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEhAKCG9yZGVyX2lkGAIgASgJEhUKDWN1c3RvbWVyX25hbWUYAyABKAkSFgoJcGhvdG9fdXJsGAQgASgJSACIAQESDgoGcmF0aW5nGAUgASgFEg8KB21lc3NhZ2UYBiABKAkSEwoLcHJvZHVjdF9pZHMYByADKAlCDAoKX3Bob3RvX3VybCKCAQoZU3VibWl0VGVzdGltb25pYWxSZXNwb25zZRIpCgdzdWNjZXNzGAEgASgLMhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5SAASMAoHZmFpbHVyZRgCIAEoDjIdLnB1YmxpY19hcGkudjEuRmFpbHVyZU1lc3NhZ2VIAEIICgZyZXN1bHQiWAoeR2V0VGVzdGltb25pYWxVcGxvYWRVcmxSZXF1ZXN0EhIKCnByb2plY3RfaWQYASABKAkSEAoIb3JkZXJfaWQYAiABKAkSEAoIZmlsZW5hbWUYAyABKAkiSQofR2V0VGVzdGltb25pYWxVcGxvYWRVcmxSZXNwb25zZRISCgp1cGxvYWRfdXJsGAEgASgJEhIKCnB1YmxpY191cmwYAiABKAkqtAEKF0xvZ2luQ29kZURlbGl2ZXJ5TWV0aG9kEioKJkxPR0lOX0NPREVfREVMSVZFUllfTUVUSE9EX1VOU1BFQ0lGSUVEEAASJAogTE9HSU5fQ09ERV9ERUxJVkVSWV9NRVRIT0RfRU1BSUwQARIjCh9MT0dJTl9DT0RFX0RFTElWRVJZX01FVEhPRF9QVVNIEAISIgoeTE9HSU5fQ09ERV9ERUxJVkVSWV9NRVRIT0RfU01TEAMqpQEKD1VzZXJQcm9kdWN0VHlwZRIdChlVU0VSX1BST0RVQ1RfVFlQRV9VTktOT1dOEAASGwoXVVNFUl9QUk9EVUNUX1RZUEVfQVVESU8QARIaChZVU0VSX1BST0RVQ1RfVFlQRV9GSUxFEAISHAoYVVNFUl9QUk9EVUNUX1RZUEVfVElDS0VUEAMSHAoYVVNFUl9QUk9EVUNUX1RZUEVfQ09VUlNFEAQqqQQKDkZhaWx1cmVNZXNzYWdlEhsKF0ZBSUxVUkVfTUVTU0FHRV9VTktOT1dOEAASIwofRkFJTFVSRV9NRVNTQUdFX0VNQUlMX05PVF9GT1VORBABEiMKH0ZBSUxVUkVfTUVTU0FHRV9JTkNPUlJFQ1RfRU1BSUwQAhIiCh5GQUlMVVJFX01FU1NBR0VfSU5DT1JSRUNUX0NPREUQAxIwCixGQUlMVVJFX01FU1NBR0VfR0VORVJBVEVfQUNDRVNTX1RPS0VOX0ZBSUxFRBAEEiEKHUZBSUxVUkVfTUVTU0FHRV9MT0dPVVRfRkFJTEVEEAUSJQohRkFJTFVSRV9NRVNTQUdFX1BSRFVDVFNfTk9UX0ZPVU5EEAYSJwojRkFJTFVSRV9NRVNTQUdFX0FVRElPQk9PS19OT1RfRk9VTkQQBxInCiNGQUlMVVJFX01FU1NBR0VfSU5DT1JSRUNUX0FVRElPQk9PSxAIEiAKHEZBSUxVUkVfTUVTU0FHRV9VTkFVVEhPUklaRUQQCRIkCiBGQUlMVVJFX01FU1NBR0VfVElDS0VUX05PVF9GT1VORBAKEi8KK0ZBSUxVUkVfTUVTU0FHRV9ERUxJVkVSWV9NRVRIT0RfVU5BVkFJTEFCTEUQCxIjCh9GQUlMVVJFX01FU1NBR0VfREVMSVZFUllfRkFJTEVEEAwSIAocRkFJTFVSRV9NRVNTQUdFX1JBVEVfTElNSVRFRBANKo8BChJOb3RpZmljYXRpb25NZXRob2QSHwobTk9USUZJQ0FUSU9OX01FVEhPRF9VTktOT1dOEAASHQoZTk9USUZJQ0FUSU9OX01FVEhPRF9FTUFJTBABEhsKF05PVElGSUNBVElPTl9NRVRIT0RfU01TEAISHAoYTk9USUZJQ0FUSU9OX01FVEhPRF9QVVNIEAMy8iUKEFB1YmxpY0FwaVNlcnZpY2USSwoIR2V0T3JkZXISHi5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmVxdWVzdBofLnB1YmxpY19hcGkudjEuR2V0T3JkZXJSZXNwb25zZRJOCglHZXRPcmRlcnMSHy5wdWJsaWNfYXBpLnYxLkdldE9yZGVyc1JlcXVlc3QaIC5wdWJsaWNfYXBpLnYxLkdldE9yZGVyc1Jlc3BvbnNlEmMKEEdldE9yZGVyUmV0cnlVcmwSJi5wdWJsaWNfYXBpLnYxLkdldE9yZGVyUmV0cnlVcmxSZXF1ZXN0GicucHVibGljX2FwaS52MS5HZXRPcmRlclJldHJ5VXJsUmVzcG9uc2USXQoOVXNlclBhbmVsTG9naW4SJC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbExvZ2luUmVxdWVzdBolLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5SZXNwb25zZRJ1ChZVc2VyUGFuZWxMb2dpbldpdGhDb2RlEiwucHVibGljX2FwaS52MS5Vc2VyUGFuZWxMb2dpbldpdGhDb2RlUmVxdWVzdBotLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9naW5XaXRoQ29kZVJlc3BvbnNlElUKD1VzZXJQYW5lbExvZ291dBIlLnB1YmxpY19hcGkudjEuVXNlclBhbmVsTG9nb3V0UmVxdWVzdBobLnB1YmxpY19hcGkudjEuQm9vbFJlc3BvbnNlEmMKFlVzZXJQYW5lbERlbGV0ZUFjY291bnQSLC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbERlbGV0ZUFjY291bnRSZXF1ZXN0GhsucHVibGljX2FwaS52MS5Cb29sUmVzcG9uc2USbwoUVXNlclBhbmVsR2V0UHJvZHVjdHMSKi5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFByb2R1Y3RzUmVxdWVzdBorLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0UHJvZHVjdHNSZXNwb25zZRKHAQocVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlscxIyLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc1JlcXVlc3QaMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNSZXNwb25zZRKrAQooVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMcxI+LnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0QXVkaW9ib29rRGV0YWlsc0Rvd25sb2FkVVJMc1JlcXVlc3QaPy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldEF1ZGlvYm9va0RldGFpbHNEb3dubG9hZFVSTHNSZXNwb25zZRJ4ChdVc2VyUGFuZWxHZXRGaWxlRGV0YWlscxItLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0RmlsZURldGFpbHNSZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRGaWxlRGV0YWlsc1Jlc3BvbnNlEn4KGVVzZXJQYW5lbEdldFRpY2tldERldGFpbHMSLy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldFRpY2tldERldGFpbHNSZXF1ZXN0GjAucHVibGljX2FwaS52MS5Vc2VyUGFuZWxHZXRUaWNrZXREZXRhaWxzUmVzcG9uc2USfgoZVXNlclBhbmVsR2V0Q291cnNlRGV0YWlscxIvLnB1YmxpY19hcGkudjEuVXNlclBhbmVsR2V0Q291cnNlRGV0YWlsc1JlcXVlc3QaMC5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbEdldENvdXJzZURldGFpbHNSZXNwb25zZRJYChNQdXNoU2VuZERldmljZVRva2VuEikucHVibGljX2FwaS52MS5QdXNoU2VuZERldmljZVRva2VuUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJECglQdXNoRXZlbnQSHy5wdWJsaWNfYXBpLnYxLlB1c2hFdmVudFJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSVwoSU2hvdWxkU2hvcFByb2R1Y3RzEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GikucHVibGljX2FwaS52MS5TaG91bGRTaG9wUHJvZHVjdHNSZXNwb25zZRJfChZTaG91bGRTaG93R3Vlc3RDYXRhbG9nEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5Gi0ucHVibGljX2FwaS52MS5TaG91bGRTaG93R3Vlc3RDYXRhbG9nUmVzcG9uc2USUQoPR2V0R3Vlc3RDYXRhbG9nEhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5GiYucHVibGljX2FwaS52MS5HZXRHdWVzdENhdGFsb2dSZXNwb25zZRKKAQodVXNlclBhbmVsUmVzb2x2ZVByb2R1Y3RBY2Nlc3MSMy5wdWJsaWNfYXBpLnYxLlVzZXJQYW5lbFJlc29sdmVQcm9kdWN0QWNjZXNzUmVxdWVzdBo0LnB1YmxpY19hcGkudjEuVXNlclBhbmVsUmVzb2x2ZVByb2R1Y3RBY2Nlc3NSZXNwb25zZRJgCg9HZXRTaG9wUHJvZHVjdHMSJS5wdWJsaWNfYXBpLnYxLkdldFNob3BQcm9kdWN0c1JlcXVlc3QaJi5wdWJsaWNfYXBpLnYxLkdldFNob3BQcm9kdWN0c1Jlc3BvbnNlEkwKDURpZEJ1eVByb2R1Y3QSIy5wdWJsaWNfYXBpLnYxLkRpZEJ1eVByb2R1Y3RSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EngKF0dldEFwcFN0b3JlQWNjb3VudFRva2VuEi0ucHVibGljX2FwaS52MS5HZXRBcHBTdG9yZUFjY291bnRUb2tlblJlcXVlc3QaLi5wdWJsaWNfYXBpLnYxLkdldEFwcFN0b3JlQWNjb3VudFRva2VuUmVzcG9uc2USdQoWVmVyaWZ5QXBwU3RvcmVQdXJjaGFzZRIsLnB1YmxpY19hcGkudjEuVmVyaWZ5QXBwU3RvcmVQdXJjaGFzZVJlcXVlc3QaLS5wdWJsaWNfYXBpLnYxLlZlcmlmeUFwcFN0b3JlUHVyY2hhc2VSZXNwb25zZRJ4ChdHZXRBcHBTdG9yZUVudGl0bGVtZW50cxItLnB1YmxpY19hcGkudjEuR2V0QXBwU3RvcmVFbnRpdGxlbWVudHNSZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5HZXRBcHBTdG9yZUVudGl0bGVtZW50c1Jlc3BvbnNlEnsKGFJlc3RvcmVBcHBTdG9yZVB1cmNoYXNlcxIuLnB1YmxpY19hcGkudjEuUmVzdG9yZUFwcFN0b3JlUHVyY2hhc2VzUmVxdWVzdBovLnB1YmxpY19hcGkudjEuUmVzdG9yZUFwcFN0b3JlUHVyY2hhc2VzUmVzcG9uc2USZAoZQ2xlYXJBcHBTdG9yZUFjY291bnRUb2tlbhIvLnB1YmxpY19hcGkudjEuQ2xlYXJBcHBTdG9yZUFjY291bnRUb2tlblJlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSaQoSR2V0U3RvcmVLaXRDYXRhbG9nEigucHVibGljX2FwaS52MS5HZXRTdG9yZUtpdENhdGFsb2dSZXF1ZXN0GikucHVibGljX2FwaS52MS5HZXRTdG9yZUtpdENhdGFsb2dSZXNwb25zZRJ4ChdHZXROb3RpZmljYXRpb25TZXR0aW5ncxItLnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uU2V0dGluZ3NSZXF1ZXN0Gi4ucHVibGljX2FwaS52MS5HZXROb3RpZmljYXRpb25TZXR0aW5nc1Jlc3BvbnNlEo0BCh5HZXROb3RpZmljYXRpb25TZXR0aW5nc0RldGFpbHMSNC5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvblNldHRpbmdzRGV0YWlsc1JlcXVlc3QaNS5wdWJsaWNfYXBpLnYxLkdldE5vdGlmaWNhdGlvblNldHRpbmdzRGV0YWlsc1Jlc3BvbnNlEnIKIFVwZGF0ZUdsb2JhbE5vdGlmaWNhdGlvblNldHRpbmdzEjYucHVibGljX2FwaS52MS5VcGRhdGVHbG9iYWxOb3RpZmljYXRpb25TZXR0aW5nc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSZgoaVXBkYXRlTm90aWZpY2F0aW9uU2V0dGluZ3MSMC5wdWJsaWNfYXBpLnYxLlVwZGF0ZU5vdGlmaWNhdGlvblNldHRpbmdzUmVxdWVzdBoWLmdvb2dsZS5wcm90b2J1Zi5FbXB0eRJ1ChZHZXROb3RpZmljYXRpb25IaXN0b3J5EiwucHVibGljX2FwaS52MS5HZXROb3RpZmljYXRpb25IaXN0b3J5UmVxdWVzdBotLnB1YmxpY19hcGkudjEuR2V0Tm90aWZpY2F0aW9uSGlzdG9yeVJlc3BvbnNlEoQBChtHZXRBdmFpbGFibGVDb3VudEZvclByb2R1Y3QSMS5wdWJsaWNfYXBpLnYxLkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlcXVlc3QaMi5wdWJsaWNfYXBpLnYxLkdldEF2YWlsYWJsZUNvdW50Rm9yUHJvZHVjdFJlc3BvbnNlEoEBChpJc09uZUNsaWNrUGF5bWVudEF2YWlsYWJsZRIwLnB1YmxpY19hcGkudjEuSXNPbmVDbGlja1BheW1lbnRBdmFpbGFibGVSZXF1ZXN0GjEucHVibGljX2FwaS52MS5Jc09uZUNsaWNrUGF5bWVudEF2YWlsYWJsZVJlc3BvbnNlEmkKEkdldFByZU9yZGVyRGV0YWlscxIoLnB1YmxpY19hcGkudjEuR2V0UHJlT3JkZXJEZXRhaWxzUmVxdWVzdBopLnB1YmxpY19hcGkudjEuR2V0UHJlT3JkZXJEZXRhaWxzUmVzcG9uc2USewoYQXBwbGVQYXlWYWxpZGF0ZU1lcmNoYW50Ei4ucHVibGljX2FwaS52MS5BcHBsZVBheVZhbGlkYXRlTWVyY2hhbnRSZXF1ZXN0Gi8ucHVibGljX2FwaS52MS5BcHBsZVBheVZhbGlkYXRlTWVyY2hhbnRSZXNwb25zZRJ7ChhBdXRob3JpemVPbmVDbGlja1BheW1lbnQSLi5wdWJsaWNfYXBpLnYxLk9uZUNsaWNrQXV0aG9yaXplUGF5bWVudFJlcXVlc3QaLy5wdWJsaWNfYXBpLnYxLk9uZUNsaWNrQXV0aG9yaXplUGF5bWVudFJlc3BvbnNlEnYKIk5vdGlmeVVzZXJBYm91dFByb2R1Y3RBdmFpbGFiaWxpdHkSOC5wdWJsaWNfYXBpLnYxLk5vdGlmeVVzZXJBYm91dFByb2R1Y3RBdmFpbGFiaWxpdHlSZXF1ZXN0GhYuZ29vZ2xlLnByb3RvYnVmLkVtcHR5EnIKFUdldFB1YmxpY09yZGVyRGV0YWlscxIrLnB1YmxpY19hcGkudjEuR2V0UHVibGljT3JkZXJEZXRhaWxzUmVxdWVzdBosLnB1YmxpY19hcGkudjEuR2V0UHVibGljT3JkZXJEZXRhaWxzUmVzcG9uc2UScgoVQWRkUHVibGljT3JkZXJDb21tZW50EisucHVibGljX2FwaS52MS5BZGRQdWJsaWNPcmRlckNvbW1lbnRSZXF1ZXN0GiwucHVibGljX2FwaS52MS5BZGRQdWJsaWNPcmRlckNvbW1lbnRSZXNwb25zZRJ1ChZHZXRPcmRlckZvclRlc3RpbW9uaWFsEiwucHVibGljX2FwaS52MS5HZXRPcmRlckZvclRlc3RpbW9uaWFsUmVxdWVzdBotLnB1YmxpY19hcGkudjEuR2V0T3JkZXJGb3JUZXN0aW1vbmlhbFJlc3BvbnNlEmYKEVN1Ym1pdFRlc3RpbW9uaWFsEicucHVibGljX2FwaS52MS5TdWJtaXRUZXN0aW1vbmlhbFJlcXVlc3QaKC5wdWJsaWNfYXBpLnYxLlN1Ym1pdFRlc3RpbW9uaWFsUmVzcG9uc2USeAoXR2V0VGVzdGltb25pYWxVcGxvYWRVcmwSLS5wdWJsaWNfYXBpLnYxLkdldFRlc3RpbW9uaWFsVXBsb2FkVXJsUmVxdWVzdBouLnB1YmxpY19hcGkudjEuR2V0VGVzdGltb25pYWxVcGxvYWRVcmxSZXNwb25zZWIGcHJvdG8z",[l,W,r,X,T,H]);var Bs=m(u,19),ys=m(u,20);var Us=m(u,74);var t=z(u,0);import{enumDesc as Js,fileDesc as j}from"@bufbuild/protobuf/codegenv2";var Y=j("Chtjb21tb24vdjEvZW52aXJvbm1lbnQucHJvdG8SCWNvbW1vbi52MSonCgtFbnZpcm9ubWVudBIOCgpQUk9EVUNUSU9OEAASCAoEVEVTVBABQk5aTGdpdGh1Yi5jb20vZW1tZW1zL3N1cGVyLWNhcnQvYXBwcy9zcnYtd29ya2VyL3V0aWxzL21vZGVscy9jb21tb24vdjE7Y29tbW9udjFiBnByb3RvMw"),L=(a=>(a[a.PRODUCTION=0]="PRODUCTION",a[a.TEST=1]="TEST",a))(L||{});import{fileDesc as D,messageDesc as vs,serviceDesc as w}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_timestamp as q}from"@bufbuild/protobuf/wkt";var O=D("ChdwdWJsaWMvdjEvcmV0dXJucy5wcm90bxIJcHVibGljLnYxImsKGVN0YXJ0UmV0dXJuU2Vzc2lvblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIrCgtlbnZpcm9ubWVudBgDIAEoDjIWLmNvbW1vbi52MS5FbnZpcm9ubWVudCJhChpTdGFydFJldHVyblNlc3Npb25SZXNwb25zZRIUCgxjaGFsbGVuZ2VfaWQYASABKAkSHAoUcmVzZW5kX2FmdGVyX3NlY29uZHMYAiABKAUSDwoHbWVzc2FnZRgDIAEoCSKBAQoaVmVyaWZ5UmV0dXJuU2Vzc2lvblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxjaGFsbGVuZ2VfaWQYAiABKAkSDAoEY29kZRgDIAEoCRIrCgtlbnZpcm9ubWVudBgEIAEoDjIWLmNvbW1vbi52MS5FbnZpcm9ubWVudCJkChtWZXJpZnlSZXR1cm5TZXNzaW9uUmVzcG9uc2USFQoNc2Vzc2lvbl90b2tlbhgBIAEoCRIuCgpleHBpcmVzX2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCJ0ChtFeGNoYW5nZVBhbmVsU2Vzc2lvblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIUCgxhY2Nlc3NfdG9rZW4YAiABKAkSKwoLZW52aXJvbm1lbnQYAyABKA4yFi5jb21tb24udjEuRW52aXJvbm1lbnQiZQocRXhjaGFuZ2VQYW5lbFNlc3Npb25SZXNwb25zZRIVCg1zZXNzaW9uX3Rva2VuGAEgASgJEi4KCmV4cGlyZXNfYXQYAiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wIjMKClJldHVyblBhZ2USEQoJcGFnZV9zaXplGAEgASgFEhIKCnBhZ2VfdG9rZW4YAiABKAki1AEKElJldHVybk9yZGVyU3VtbWFyeRIaChJjYW5vbmljYWxfb3JkZXJfaWQYASABKAkSGQoRZGlzcGxheV9yZWZlcmVuY2UYAiABKAkSDwoHZ2F0ZXdheRgDIAEoCRIwCgxwdXJjaGFzZWRfYXQYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEhMKC3RvdGFsX21pbm9yGAUgASgDEhAKCGN1cnJlbmN5GAYgASgJEh0KFXJldHVybmFibGVfbGluZV9jb3VudBgHIAEoBSJrChdMaXN0UmV0dXJuT3JkZXJzUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEhUKDXNlc3Npb25fdG9rZW4YAiABKAkSEQoJcGFnZV9zaXplGAMgASgFEhIKCnBhZ2VfdG9rZW4YBCABKAkicQoYTGlzdFJldHVybk9yZGVyc1Jlc3BvbnNlEi0KBm9yZGVycxgBIAMoCzIdLnB1YmxpYy52MS5SZXR1cm5PcmRlclN1bW1hcnkSFwoPbmV4dF9wYWdlX3Rva2VuGAIgASgJEg0KBXRvdGFsGAMgASgFIsQDCg9SZXR1cm5PcmRlckxpbmUSDwoHbGluZV9pZBgBIAEoCRISCgpwcm9kdWN0X2lkGAIgASgJEhIKCnZhcmlhbnRfaWQYAyABKAkSDAoEbmFtZRgEIAEoCRIYChBmdWxmaWxsbWVudF90eXBlGAUgASgJEhoKEnB1cmNoYXNlZF9xdWFudGl0eRgGIAEoBRIZChFyZXNlcnZlZF9xdWFudGl0eRgHIAEoBRIZChFyZXR1cm5lZF9xdWFudGl0eRgIIAEoBRIaChJhdmFpbGFibGVfcXVhbnRpdHkYCSABKAUSGgoScmVndWxhcl91bml0X21pbm9yGAogASgDEhcKD3BhaWRfdW5pdF9taW5vchgLIAEoAxIQCghjdXJyZW5jeRgMIAEoCRIQCghlbGlnaWJsZRgNIAEoCBIYChBleGNsdXNpb25fcmVhc29uGA4gASgJEh0KFXBhaWRfbGluZV90b3RhbF9taW5vchgPIAEoAxIfChdjb3Vwb25fYWxsb2NhdGlvbl9taW5vchgQIAEoAxIVCg1hY2Nlc3Nfc291cmNlGBEgASgJEhgKEGFjY2Vzc19yZWZlcmVuY2UYEiABKAki3wEKEVJldHVybk9yZGVyRGV0YWlsEhoKEmNhbm9uaWNhbF9vcmRlcl9pZBgBIAEoCRIZChFkaXNwbGF5X3JlZmVyZW5jZRgCIAEoCRIPCgdnYXRld2F5GAMgASgJEjAKDHB1cmNoYXNlZF9hdBgEIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEwoLdG90YWxfbWlub3IYBSABKAMSEAoIY3VycmVuY3kYBiABKAkSKQoFbGluZXMYByADKAsyGi5wdWJsaWMudjEuUmV0dXJuT3JkZXJMaW5lIjsKFlJldHVyblJlcXVlc3RMaW5lSW5wdXQSDwoHbGluZV9pZBgBIAEoCRIQCghxdWFudGl0eRgCIAEoBSJzChJSZXR1cm5IaXN0b3J5RW50cnkSCgoCaWQYASABKAkSEQoJcmVmZXJlbmNlGAIgASgJEg4KBnN0YXR1cxgDIAEoCRIuCgpjcmVhdGVkX2F0GAQgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcCK5AQoVUmV0dXJuUmVxdWVzdExpbmVWaWV3Eg8KB2xpbmVfaWQYASABKAkSDAoEbmFtZRgCIAEoCRIYChBmdWxmaWxsbWVudF90eXBlGAMgASgJEhoKEnJlcXVlc3RlZF9xdWFudGl0eRgEIAEoBRIZChFhcHByb3ZlZF9xdWFudGl0eRgFIAEoBRIZChFyZWNlaXZlZF9xdWFudGl0eRgGIAEoBRIVCg1hY2Nlc3Nfc3RhdHVzGAcgASgJIvoCChFSZXR1cm5SZXF1ZXN0VmlldxIKCgJpZBgBIAEoCRIRCglyZWZlcmVuY2UYAiABKAkSGgoSY2Fub25pY2FsX29yZGVyX2lkGAMgASgJEg4KBnN0YXR1cxgEIAEoCRIVCg1yZWZ1bmRfc3RhdHVzGAUgASgJEhsKE3JlZnVuZF9hbW91bnRfbWlub3IYBiABKAMSEAoIY3VycmVuY3kYByABKAkSFQoNY3VzdG9tZXJfbm90ZRgIIAEoCRIPCgd2ZXJzaW9uGAkgASgDEi4KCmNyZWF0ZWRfYXQYCiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEi8KBWxpbmVzGAsgAygLMiAucHVibGljLnYxLlJldHVyblJlcXVlc3RMaW5lVmlldxIuCgdoaXN0b3J5GAwgAygLMh0ucHVibGljLnYxLlJldHVybkhpc3RvcnlFbnRyeRIbChNyZXR1cm5faW5zdHJ1Y3Rpb25zGA0gASgJImIKGUdldFJldHVybmFibGVPcmRlclJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIVCg1zZXNzaW9uX3Rva2VuGAIgASgJEhoKEmNhbm9uaWNhbF9vcmRlcl9pZBgDIAEoCSKAAQoaR2V0UmV0dXJuYWJsZU9yZGVyUmVzcG9uc2USKwoFb3JkZXIYASABKAsyHC5wdWJsaWMudjEuUmV0dXJuT3JkZXJEZXRhaWwSNQoOcmV0dXJuX2hpc3RvcnkYAiADKAsyHS5wdWJsaWMudjEuUmV0dXJuSGlzdG9yeUVudHJ5IrwBChpDcmVhdGVSZXR1cm5SZXF1ZXN0UmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEhUKDXNlc3Npb25fdG9rZW4YAiABKAkSGgoSY2Fub25pY2FsX29yZGVyX2lkGAMgASgJEjAKBWl0ZW1zGAQgAygLMiEucHVibGljLnYxLlJldHVyblJlcXVlc3RMaW5lSW5wdXQSDAoEbm90ZRgFIAEoCRIXCg9pZGVtcG90ZW5jeV9rZXkYBiABKAkiTAobQ3JlYXRlUmV0dXJuUmVxdWVzdFJlc3BvbnNlEi0KB3JlcXVlc3QYASABKAsyHC5wdWJsaWMudjEuUmV0dXJuUmVxdWVzdFZpZXciaAoUTGlzdE15UmV0dXJuc1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIVCg1zZXNzaW9uX3Rva2VuGAIgASgJEhEKCXBhZ2Vfc2l6ZRgDIAEoBRISCgpwYWdlX3Rva2VuGAQgASgJIm4KFUxpc3RNeVJldHVybnNSZXNwb25zZRItCgdyZXR1cm5zGAEgAygLMhwucHVibGljLnYxLlJldHVyblJlcXVlc3RWaWV3EhcKD25leHRfcGFnZV90b2tlbhgCIAEoCRINCgV0b3RhbBgDIAEoBSJSChJHZXRNeVJldHVyblJlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRIVCg1zZXNzaW9uX3Rva2VuGAIgASgJEhEKCXJldHVybl9pZBgDIAEoCSJEChNHZXRNeVJldHVyblJlc3BvbnNlEi0KB3JlcXVlc3QYASABKAsyHC5wdWJsaWMudjEuUmV0dXJuUmVxdWVzdFZpZXcyigYKDlJldHVybnNTZXJ2aWNlEmEKElN0YXJ0UmV0dXJuU2Vzc2lvbhIkLnB1YmxpYy52MS5TdGFydFJldHVyblNlc3Npb25SZXF1ZXN0GiUucHVibGljLnYxLlN0YXJ0UmV0dXJuU2Vzc2lvblJlc3BvbnNlEmQKE1ZlcmlmeVJldHVyblNlc3Npb24SJS5wdWJsaWMudjEuVmVyaWZ5UmV0dXJuU2Vzc2lvblJlcXVlc3QaJi5wdWJsaWMudjEuVmVyaWZ5UmV0dXJuU2Vzc2lvblJlc3BvbnNlEmcKFEV4Y2hhbmdlUGFuZWxTZXNzaW9uEiYucHVibGljLnYxLkV4Y2hhbmdlUGFuZWxTZXNzaW9uUmVxdWVzdBonLnB1YmxpYy52MS5FeGNoYW5nZVBhbmVsU2Vzc2lvblJlc3BvbnNlElsKEExpc3RSZXR1cm5PcmRlcnMSIi5wdWJsaWMudjEuTGlzdFJldHVybk9yZGVyc1JlcXVlc3QaIy5wdWJsaWMudjEuTGlzdFJldHVybk9yZGVyc1Jlc3BvbnNlEmEKEkdldFJldHVybmFibGVPcmRlchIkLnB1YmxpYy52MS5HZXRSZXR1cm5hYmxlT3JkZXJSZXF1ZXN0GiUucHVibGljLnYxLkdldFJldHVybmFibGVPcmRlclJlc3BvbnNlEmQKE0NyZWF0ZVJldHVyblJlcXVlc3QSJS5wdWJsaWMudjEuQ3JlYXRlUmV0dXJuUmVxdWVzdFJlcXVlc3QaJi5wdWJsaWMudjEuQ3JlYXRlUmV0dXJuUmVxdWVzdFJlc3BvbnNlElIKDUxpc3RNeVJldHVybnMSHy5wdWJsaWMudjEuTGlzdE15UmV0dXJuc1JlcXVlc3QaIC5wdWJsaWMudjEuTGlzdE15UmV0dXJuc1Jlc3BvbnNlEkwKC0dldE15UmV0dXJuEh0ucHVibGljLnYxLkdldE15UmV0dXJuUmVxdWVzdBoeLnB1YmxpYy52MS5HZXRNeVJldHVyblJlc3BvbnNlYgZwcm90bzM",[Y,q]);var c=w(O,0);import{TransportProvider as vt,useMutation as kt,useQuery as xt}from"@connectrpc/connect-query";import{createConnectTransport as Mt}from"@connectrpc/connect-web";import{QueryClient as Qt,QueryClientProvider as Pt}from"@tanstack/react-query";import{useState as Kt}from"react";var b={};g(b,{createNotificationGroup:()=>ue,createNotificationGroupUser:()=>Ve,createNotificationMessage:()=>Ne,createNotificationMessageJob:()=>Be,createNotificationSetting:()=>ie,createNotificationUser:()=>me,deleteNotificationGroup:()=>ge,deleteNotificationGroupUser:()=>Ze,deleteNotificationMessage:()=>Ee,deleteNotificationMessageJob:()=>Fe,deleteNotificationSetting:()=>re,deleteNotificationUser:()=>Ae,getNotificationStats:()=>xe,getNotificationUserSettings:()=>Je,getProjectedRecipientCount:()=>ke,getSentNotificationMessages:()=>Xe,getUserGroups:()=>Ce,readNotificationGroupUsers:()=>he,readNotificationGroups:()=>pe,readNotificationMessageJobs:()=>ye,readNotificationMessages:()=>We,readNotificationProducts:()=>fe,readNotificationSetting:()=>de,readNotificationUsers:()=>be,updateNotificationGroup:()=>Re,updateNotificationGroupUser:()=>Se,updateNotificationMessage:()=>Ye,updateNotificationMessageJob:()=>Ue,updateNotificationSetting:()=>le,updateNotificationUser:()=>Ge,updateUserGroups:()=>ve,verifyUserEmail:()=>Ie});import{enumDesc as Ls,fileDesc as te,messageDesc as Ds,serviceDesc as se}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_empty as oe,file_google_protobuf_timestamp as ae}from"@bufbuild/protobuf/wkt";import{enumDesc as Ps,fileDesc as _,messageDesc as Ks,serviceDesc as zs}from"@bufbuild/protobuf/codegenv2";import{file_google_protobuf_empty as $,file_google_protobuf_timestamp as ee}from"@bufbuild/protobuf/wkt";var E=_("ChpkYXNoYm9hcmQvdjEvcHJvZHVjdC5wcm90bxIUZGFzaGJvYXJkLnByb2R1Y3QudjEiNAoeR2V0R3Vlc3RDYXRhbG9nU2V0dGluZ3NSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkibAobU2V0R3Vlc3RDYXRhbG9nRW50cnlSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSFAoMcHJvZHVjdF90eXBlGAIgASgJEg8KB2VuYWJsZWQYAyABKAgSEgoKc29ydF9vcmRlchgEIAEoBSL3AQofR2V0R3Vlc3RDYXRhbG9nU2V0dGluZ3NSZXNwb25zZRISCgpjYW5fbWFuYWdlGAEgASgIEh0KFWd1ZXN0X2NhdGFsb2dfZW5hYmxlZBgCIAEoCBI4CgdlbnRyaWVzGAMgAygLMicuZGFzaGJvYXJkLnByb2R1Y3QudjEuR3Vlc3RDYXRhbG9nRW50cnkSHQoVYXZhaWxhYmxlX3Byb2R1Y3RfaWRzGAQgAygJEkgKD3Byb2R1Y3Rfb3B0aW9ucxgFIAMoCzIvLmRhc2hib2FyZC5wcm9kdWN0LnYxLkd1ZXN0Q2F0YWxvZ1Byb2R1Y3RPcHRpb24iRQoZR3Vlc3RDYXRhbG9nUHJvZHVjdE9wdGlvbhISCgpwcm9kdWN0X2lkGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCSJ+ChFHdWVzdENhdGFsb2dFbnRyeRISCgpwcm9kdWN0X2lkGAEgASgJEhQKDHByb2R1Y3RfdHlwZRgCIAEoCRIPCgdlbmFibGVkGAMgASgIEhIKCnNvcnRfb3JkZXIYBCABKAUSGgoSZWxpZ2liaWxpdHlfcmVhc29uGAUgASgJIisKFUFyY2hpdmVQcm9kdWN0UmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJIi0KF0R1cGxpY2F0ZVByb2R1Y3RSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkiOQoYRHVwbGljYXRlUHJvZHVjdFJlc3BvbnNlEh0KFWR1cGxpY2F0ZWRfcHJvZHVjdF9pZBgBIAEoCSI3CiBFeGNoYW5nZVByb2R1Y3RJRHNUb05hbWVzUmVxdWVzdBITCgtwcm9kdWN0X2lkcxgBIAMoCSK6AQohRXhjaGFuZ2VQcm9kdWN0SURzVG9OYW1lc1Jlc3BvbnNlEmAKDXByb2R1Y3RfbmFtZXMYASADKAsySS5kYXNoYm9hcmQucHJvZHVjdC52MS5FeGNoYW5nZVByb2R1Y3RJRHNUb05hbWVzUmVzcG9uc2UuUHJvZHVjdE5hbWVzRW50cnkaMwoRUHJvZHVjdE5hbWVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASJ5ChtHZXRGaWxlQWNjZXNzTWVtYmVyc1JlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCRITCgZzZWFyY2gYAiABKAlIAIgBARIXCgp2YXJpYW50X2lkGAMgASgJSAGIAQFCCQoHX3NlYXJjaEINCgtfdmFyaWFudF9pZCLRAQocR2V0RmlsZUFjY2Vzc01lbWJlcnNSZXNwb25zZRJJCgdtZW1iZXJzGAEgAygLMjguZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0RmlsZUFjY2Vzc01lbWJlcnNSZXNwb25zZS5WYWx1ZRpmCgVWYWx1ZRIKCgJpZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIzCgpjcmVhdGVkX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgAiAEBQg0KC19jcmVhdGVkX2F0ImQKF0dpdmVBY2Nlc3NUb0ZpbGVSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSFwoKdmFyaWFudF9pZBgCIAEoCUgAiAEBEg0KBWVtYWlsGAMgASgJQg0KC192YXJpYW50X2lkIisKGEdpdmVBY2Nlc3NUb0ZpbGVSZXNwb25zZRIPCgdzdWNjZXNzGAEgASgIIicKGVJlbW92ZUFjY2Vzc1RvRmlsZVJlcXVlc3QSCgoCaWQYASABKAkiLQoaUmVtb3ZlQWNjZXNzVG9GaWxlUmVzcG9uc2USDwoHc3VjY2VzcxgBIAEoCCJkCh9TZW5kVGVzdEVtYWlsV2l0aE1lc3NhZ2VSZXF1ZXN0Eg0KBWVtYWlsGAEgASgJEhQKDGh0bWxfbWVzc2FnZRgCIAEoCRISCgV0aXRsZRgDIAEoCUgAiAEBQggKBl90aXRsZSIvChlHZXRQcm9kdWN0VmFyaWFudHNSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkimQEKGkdldFByb2R1Y3RWYXJpYW50c1Jlc3BvbnNlElAKCHZhcmlhbnRzGAEgAygLMj4uZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdFZhcmlhbnRzUmVzcG9uc2UuU2luZ2xlVmFyaWFudBopCg1TaW5nbGVWYXJpYW50EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkigwEKKFVwZGF0ZVByb2R1Y3RBZnRlclB1cmNoYXNlTWVzc2FnZVJlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIPCgdtZXNzYWdlGAIgASgJEhQKDGh0bWxfbWVzc2FnZRgDIAEoCRISCgV0aXRsZRgEIAEoCUgAiAEBQggKBl90aXRsZSI7CiVHZXRQcm9kdWN0QWZ0ZXJQdXJjaGFzZU1lc3NhZ2VSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkiuwIKJkdldFByb2R1Y3RBZnRlclB1cmNoYXNlTWVzc2FnZVJlc3BvbnNlElcKB3N1Y2Nlc3MYASABKAsyRC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0QWZ0ZXJQdXJjaGFzZU1lc3NhZ2VSZXNwb25zZS5TdWNjZXNzSAASNwoHZmFpbHVyZRgCIAEoDjIkLmRhc2hib2FyZC5wcm9kdWN0LnYxLkZhaWx1cmVNZXNzYWdlSAAadQoHU3VjY2VzcxIUCgdtZXNzYWdlGAEgASgJSACIAQESGQoMaHRtbF9tZXNzYWdlGAIgASgJSAGIAQESEgoFdGl0bGUYAyABKAlIAogBAUIKCghfbWVzc2FnZUIPCg1faHRtbF9tZXNzYWdlQggKBl90aXRsZUIICgZyZXN1bHQiMwodUHVibGlzaFByb2R1Y3RJZk5lZWRlZFJlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCSJlCitVcGRhdGVQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2VSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSIgoac2VuZF90aWNrZXRfYWZ0ZXJfcHVyY2hhc2UYAiABKAgiVgoqVXBkYXRlUHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2VSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSFAoMYXVkaW9ib29rX2lkGAIgASgJIj4KKEdldFByb2R1Y3RTZW5kVGlja2V0QWZ0ZXJQdXJjaGFzZVJlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCSL5AQopR2V0UHJvZHVjdFNlbmRUaWNrZXRBZnRlclB1cmNoYXNlUmVzcG9uc2USWgoHc3VjY2VzcxgBIAEoCzJHLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RTZW5kVGlja2V0QWZ0ZXJQdXJjaGFzZVJlc3BvbnNlLlN1Y2Nlc3NIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIABotCgdTdWNjZXNzEiIKGnNlbmRfdGlja2V0X2FmdGVyX3B1cmNoYXNlGAEgASgIQggKBnJlc3VsdCI9CidHZXRQcm9kdWN0QXVkaW9ib29rQWZ0ZXJQdXJjaGFzZVJlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCSKfAgooR2V0UHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2VSZXNwb25zZRJZCgdzdWNjZXNzGAEgASgLMkYuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2VSZXNwb25zZS5TdWNjZXNzSAASNwoHZmFpbHVyZRgCIAEoDjIkLmRhc2hib2FyZC5wcm9kdWN0LnYxLkZhaWx1cmVNZXNzYWdlSAAaVQoHU3VjY2VzcxIUCgxhdWRpb2Jvb2tfaWQYASABKAkSFwoPYXVkaW9ib29rX3RpdGxlGAIgASgJEhsKE2F1ZGlvYm9va19pbWFnZV91cmwYAyABKAlCCAoGcmVzdWx0IjcKFVNlYXJjaFByb2R1Y3RzUmVxdWVzdBITCgZzZWFyY2gYASABKAlIAIgBAUIJCgdfc2VhcmNoIswCChZTZWFyY2hQcm9kdWN0c1Jlc3BvbnNlEkYKB3N1Y2Nlc3MYASABKAsyMy5kYXNoYm9hcmQucHJvZHVjdC52MS5TZWFyY2hQcm9kdWN0c1Jlc3BvbnNlLlJlc3VsdEgAEjcKB2ZhaWx1cmUYAiABKA4yJC5kYXNoYm9hcmQucHJvZHVjdC52MS5GYWlsdXJlTWVzc2FnZUgAGk8KDVNpbmdsZVByb2R1Y3QSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIWCglpbWFnZV91cmwYAyABKAlIAIgBAUIMCgpfaW1hZ2VfdXJsGlYKBlJlc3VsdBJMCghwcm9kdWN0cxgBIAMoCzI6LmRhc2hib2FyZC5wcm9kdWN0LnYxLlNlYXJjaFByb2R1Y3RzUmVzcG9uc2UuU2luZ2xlUHJvZHVjdEIICgZyZXN1bHQiNQofR2V0UHJvZHVjdEJvdWdodEFydGljbGVzUmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJImAKIEdldFByb2R1Y3RCb3VnaHRBcnRpY2xlc1Jlc3BvbnNlEjwKCGFydGljbGVzGAEgAygLMiouZGFzaGJvYXJkLnByb2R1Y3QudjEuUHJvZHVjdEJvdWdodEFydGljbGUiiAEKFFByb2R1Y3RCb3VnaHRBcnRpY2xlEgoKAmlkGAEgASgJEhIKCnByb2R1Y3RfaWQYAiABKAkSFAoHY29udGVudBgDIAEoCUgAiAEBEi4KCmNyZWF0ZWRfYXQYCCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQgoKCF9jb250ZW50ImAKIVVwZGF0ZVByb2R1Y3RCb3VnaHRBcnRpY2xlUmVxdWVzdBI7CgdhcnRpY2xlGAEgASgLMiouZGFzaGJvYXJkLnByb2R1Y3QudjEuUHJvZHVjdEJvdWdodEFydGljbGUiJwoRR2V0UHJvZHVjdFJlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCSKBAgoSR2V0UHJvZHVjdFJlc3BvbnNlEjIKB3Byb2R1Y3QYASABKAsyHy5kYXNoYm9hcmQucHJvZHVjdC52MS5Qcm9kdWN0VjJIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIABJGCgpzZWxsX3N0YXRzGAMgAygLMjIuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdFJlc3BvbnNlLlNlbGxTdGF0cxosCglTZWxsU3RhdHMSEQoJcHJvZHVjdElEGAEgASgJEgwKBHNvbGQYAiABKAVCCAoGcmVzdWx0InIKHENyZWF0ZU9yVXBkYXRlUHJvZHVjdFJlcXVlc3QSMAoHcHJvZHVjdBgBIAEoCzIfLmRhc2hib2FyZC5wcm9kdWN0LnYxLlByb2R1Y3RWMhIgChhpc19kZXNjcmlwdGlvbl9kaWZmZXJlbnQYAiABKAgiTQoeVXBkYXRlUHJvZHVjdFVuaXF1ZVNsdWdSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkSFwoPbmV3X3VuaXF1ZV9zbHVnGAIgASgJIqULCglQcm9kdWN0VjISDwoCaWQYASABKAlIAIgBARITCgt1bmlxdWVfc2x1ZxgCIAEoCRISCgpwcm9qZWN0X2lkGAMgASgJEjYKBnN0YXR1cxgEIAEoDjImLmRhc2hib2FyZC5wcm9kdWN0LnYxLlByb2R1Y3RWMi5TdGF0dXMSGQoMaXNfcmVjdXJyaW5nGAUgASgISAGIAQESNwoJcmVjdXJyaW5nGAYgASgLMh8uZGFzaGJvYXJkLnByb2R1Y3QudjEuUmVjdXJyaW5nSAKIAQESDAoEbmFtZRgHIAEoCRIYCgtkZXNjcmlwdGlvbhgIIAEoCUgDiAEBEh0KEGh0bWxfZGVzY3JpcHRpb24YCSABKAlIBIgBARIeChFzaG9ydF9kZXNjcmlwdGlvbhgKIAEoCUgFiAEBEhkKDHByaWNlX2Ftb3VudBgLIAEoBUgGiAEBEhsKDnByaWNlX2N1cnJlbmN5GAwgASgJSAeIAQESEAoDdGF4GA0gASgCSAiIAQESHwoSYXZhaWxhYmxlX3F1YW50aXR5GA4gASgFSAmIAQESPwoIZmVhdHVyZXMYDyADKAsyLS5kYXNoYm9hcmQucHJvZHVjdC52MS5Qcm9kdWN0VjIuRmVhdHVyZXNFbnRyeRIOCgZpbWFnZXMYECADKAkSHAoPdGh1bWJuYWlsX2ltYWdlGBEgASgJSAqIAQESFwoKbWFpbl9pbWFnZRgSIAEoCUgLiAEBEi8KCHZhcmlhbnRzGBMgAygLMh0uZGFzaGJvYXJkLnByb2R1Y3QudjEuVmFyaWFudBInChpzZW5kX3RpY2tldF9hZnRlcl9wdXJjaGFzZRgUIAEoCEgMiAEBEicKGmlzX3Byb2R1Y3RfdmlzaWJsZV9vbl9saXN0GBUgASgISA2IAQESGwoOaXNfZGVsaXZlcmFibGUYGCABKAhIDogBARIhChRmb3JjZV9tYW51YWxfcGF5bWVudBgdIAEoCEgPiAEBEhkKDHdlaWdodF9ncmFtcxgeIAEoBUgQiAEBEh4KEXdpZHRoX21pbGxpbWV0ZXJzGB8gASgFSBGIAQESHwoSaGVpZ2h0X21pbGxpbWV0ZXJzGCAgASgFSBKIAQESEgoKY3JlYXRlZF9hdBgZIAEoAxISCgp1cGRhdGVkX2F0GBogASgDEhcKCmRlbGV0ZWRfYXQYGyABKANIE4gBARIVCghhcmNoaXZlZBgcIAEoCEgUiAEBEhAKCHJldmlzaW9uGCEgASgFGi8KDUZlYXR1cmVzRW50cnkSCwoDa2V5GAEgASgJEg0KBXZhbHVlGAIgASgJOgI4ASIzCgZTdGF0dXMSCQoFRFJBRlQQABIPCgtVTlBVQkxJU0hFRBABEg0KCVBVQkxJU0hFRBACQgUKA19pZEIPCg1faXNfcmVjdXJyaW5nQgwKCl9yZWN1cnJpbmdCDgoMX2Rlc2NyaXB0aW9uQhMKEV9odG1sX2Rlc2NyaXB0aW9uQhQKEl9zaG9ydF9kZXNjcmlwdGlvbkIPCg1fcHJpY2VfYW1vdW50QhEKD19wcmljZV9jdXJyZW5jeUIGCgRfdGF4QhUKE19hdmFpbGFibGVfcXVhbnRpdHlCEgoQX3RodW1ibmFpbF9pbWFnZUINCgtfbWFpbl9pbWFnZUIdChtfc2VuZF90aWNrZXRfYWZ0ZXJfcHVyY2hhc2VCHQobX2lzX3Byb2R1Y3RfdmlzaWJsZV9vbl9saXN0QhEKD19pc19kZWxpdmVyYWJsZUIXChVfZm9yY2VfbWFudWFsX3BheW1lbnRCDwoNX3dlaWdodF9ncmFtc0IUChJfd2lkdGhfbWlsbGltZXRlcnNCFQoTX2hlaWdodF9taWxsaW1ldGVyc0INCgtfZGVsZXRlZF9hdEILCglfYXJjaGl2ZWQiuwMKCVJlY3VycmluZxI6Cg1iaWxsaW5nUGVyaW9kGAEgASgOMiMuZGFzaGJvYXJkLnByb2R1Y3QudjEuQmlsbGluZ1BlcmlvZBIXCgp0cmlhbF9kYXlzGAIgASgFSACIAQESHwoSbnVtYmVyX29mX3BheW1lbnRzGAMgASgFSAGIAQESMQokY2hhbmdlX2Ftb3VudF9mb3JfY3VycmVudFN1YnNjcmliZXJzGAQgASgISAKIAQESNAoncmVtb3ZlX2FjY2Vzc19mb3JfY2FuY2VsbGVkX3N1YnNjcmliZXJzGAUgASgISAOIAQESLgohc2hvdWxkX3NlbmRfdHJpYWxfcGVyaW9kX3JlbWluZGVyGAYgASgISASIAQFCDQoLX3RyaWFsX2RheXNCFQoTX251bWJlcl9vZl9wYXltZW50c0InCiVfY2hhbmdlX2Ftb3VudF9mb3JfY3VycmVudFN1YnNjcmliZXJzQioKKF9yZW1vdmVfYWNjZXNzX2Zvcl9jYW5jZWxsZWRfc3Vic2NyaWJlcnNCJAoiX3Nob3VsZF9zZW5kX3RyaWFsX3BlcmlvZF9yZW1pbmRlciKrAgoPVmFyaWFudERpc2NvdW50EjgKBHR5cGUYASABKA4yKi5kYXNoYm9hcmQucHJvZHVjdC52MS5WYXJpYW50RGlzY291bnQuVHlwZRIOCgZhbW91bnQYAiABKAUSMQoIZW5kX2RhdGUYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSACIAQESDwoCaWQYBCABKAlIAYgBARIPCgdlbmFibGVkGAUgASgIEjMKCnN0YXJ0X2RhdGUYBiABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wSAKIAQEiIQoEVHlwZRIJCgVGSVhFRBAAEg4KClBFUkNFTlRBR0UQAUILCglfZW5kX2RhdGVCBQoDX2lkQg0KC19zdGFydF9kYXRlIt0GCgdWYXJpYW50EgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARIWCglpbWFnZV91cmwYBCABKAlIAYgBARIUCgxwcmljZV9hbW91bnQYBSABKAUSFgoOcHJpY2VfY3VycmVuY3kYBiABKAkSEAoDdGF4GAcgASgFSAKIAQESHwoSYXZhaWxhYmxlX3F1YW50aXR5GAggASgFSAOIAQESNwoJcmVjdXJyaW5nGAkgASgLMh8uZGFzaGJvYXJkLnByb2R1Y3QudjEuUmVjdXJyaW5nSASIAQESGwoOaXNfZGVsaXZlcmFibGUYCiABKAhIBYgBARIhChRsb3dlc3RfcHJpY2VfMzBfZGF5cxgLIAEoBUgGiAEBEjwKCGRpc2NvdW50GAwgASgLMiUuZGFzaGJvYXJkLnByb2R1Y3QudjEuVmFyaWFudERpc2NvdW50SAeIAQESPgoVZXN0aW1hdGVkX2RlbGl2ZXJ5X2F0GA0gASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgIiAEBEhwKFHJlZ3VsYXJfcHJpY2VfYW1vdW50GA4gASgFEh4KFmVmZmVjdGl2ZV9wcmljZV9hbW91bnQYDyABKAUSIwoWcmVmZXJlbmNlX3ByaWNlX2Ftb3VudBgQIAEoBUgJiAEBEiMKG3JlZmVyZW5jZV9oaXN0b3J5X2F2YWlsYWJsZRgRIAEoCBIVCg1wcmljZV92ZXJzaW9uGBIgASgDEj0KFG5leHRfcHJpY2VfY2hhbmdlX2F0GBMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgKiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfaW1hZ2VfdXJsQgYKBF90YXhCFQoTX2F2YWlsYWJsZV9xdWFudGl0eUIMCgpfcmVjdXJyaW5nQhEKD19pc19kZWxpdmVyYWJsZUIXChVfbG93ZXN0X3ByaWNlXzMwX2RheXNCCwoJX2Rpc2NvdW50QhgKFl9lc3RpbWF0ZWRfZGVsaXZlcnlfYXRCGQoXX3JlZmVyZW5jZV9wcmljZV9hbW91bnRCFwoVX25leHRfcHJpY2VfY2hhbmdlX2F0IngKHUNyZWF0ZU9yVXBkYXRlUHJvZHVjdFJlc3BvbnNlEhQKCnByb2R1Y3RfaWQYASABKAlIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIAEIICgZyZXN1bHQifAoMQm9vbFJlc3BvbnNlEikKB3N1Y2Nlc3MYASABKAsyFi5nb29nbGUucHJvdG9idWYuRW1wdHlIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIAEIICgZyZXN1bHQiIgoPT3BlcmF0aW9uUmVzdWx0Eg8KB3N1Y2Nlc3MYASABKAgiUAoSR2V0UHJvZHVjdHNSZXF1ZXN0EhMKBnNlYXJjaBgBIAEoCUgAiAEBEhEKBHR5cGUYAiABKAlIAYgBAUIJCgdfc2VhcmNoQgcKBV90eXBlIrwBChNHZXRQcm9kdWN0c1Jlc3BvbnNlEkMKB3N1Y2Nlc3MYASABKAsyMC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0c1Jlc3BvbnNlLlJlc3VsdEgAEjcKB2ZhaWx1cmUYAiABKA4yJC5kYXNoYm9hcmQucHJvZHVjdC52MS5GYWlsdXJlTWVzc2FnZUgAGh0KBlJlc3VsdBITCgtwcm9kdWN0X2lkcxgBIAMoCUIICgZyZXN1bHQilgEKF0dldFByb2R1Y3RzQnlJZHNSZXF1ZXN0EgsKA2lkcxgBIAMoCRIVCghjdXJyZW5jeRgCIAEoCUgAiAEBEhEKBGxhbmcYAyABKAlIAYgBARIbCg5ncm91cF92YXJpYW50cxgEIAEoCEgCiAEBQgsKCV9jdXJyZW5jeUIHCgVfbGFuZ0IRCg9fZ3JvdXBfdmFyaWFudHMiwQIKGEdldFByb2R1Y3RzQnlJZHNSZXNwb25zZRJICgdzdWNjZXNzGAEgASgLMjUuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdHNCeUlkc1Jlc3BvbnNlLlJlc3VsdEgAEjcKB2ZhaWx1cmUYAiABKA4yJC5kYXNoYm9hcmQucHJvZHVjdC52MS5GYWlsdXJlTWVzc2FnZUgAGkQKB1Byb2R1Y3QSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRINCgVwcmljZRgDIAEoBRIQCghjdXJyZW5jeRgEIAEoCRpSCgZSZXN1bHQSSAoIcHJvZHVjdHMYASADKAsyNi5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0c0J5SWRzUmVzcG9uc2UuUHJvZHVjdEIICgZyZXN1bHQi3QEKFUdldFByb2R1Y3RHcmlkUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEhMKBnNlYXJjaBgCIAEoCUgAiAEBEhUKCGN1cnJlbmN5GAMgASgJSAGIAQESGwoOZ3JvdXBfdmFyaWFudHMYBCABKAhIAogBARITCgZvZmZzZXQYBSABKAVIA4gBARISCgVsaW1pdBgGIAEoBUgEiAEBQgkKB19zZWFyY2hCCwoJX2N1cnJlbmN5QhEKD19ncm91cF92YXJpYW50c0IJCgdfb2Zmc2V0QggKBl9saW1pdCLCAQoWR2V0UHJvZHVjdEdyaWRSZXNwb25zZRJGCgdzdWNjZXNzGAEgASgLMjMuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEdyaWRSZXNwb25zZS5SZXN1bHRIABI3CgdmYWlsdXJlGAIgASgOMiQuZGFzaGJvYXJkLnByb2R1Y3QudjEuRmFpbHVyZU1lc3NhZ2VIABodCgZSZXN1bHQSEwoLcHJvZHVjdF9pZHMYASADKAlCCAoGcmVzdWx0ItYBChpHZXRNYWluUGFnZVByb2R1Y3RzUmVxdWVzdBIXCgpwcm9qZWN0X2lkGAEgASgJSACIAQESEwoGc2VhcmNoGAIgASgJSAGIAQESEgoFbGltaXQYAyABKAVIAogBARITCgZvZmZzZXQYBCABKAVIA4gBARIdChBpbmNsdWRlX2FyY2hpdmVkGAUgASgISASIAQFCDQoLX3Byb2plY3RfaWRCCQoHX3NlYXJjaEIICgZfbGltaXRCCQoHX29mZnNldEITChFfaW5jbHVkZV9hcmNoaXZlZCL2AQobR2V0TWFpblBhZ2VQcm9kdWN0c1Jlc3BvbnNlEksKB3N1Y2Nlc3MYASABKAsyOC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRNYWluUGFnZVByb2R1Y3RzUmVzcG9uc2UuUmVzdWx0SAASNwoHZmFpbHVyZRgCIAEoDjIkLmRhc2hib2FyZC5wcm9kdWN0LnYxLkZhaWx1cmVNZXNzYWdlSAAaRwoGUmVzdWx0EhMKC3Byb2R1Y3RfaWRzGAEgAygJEhgKC3RvdGFsX2NvdW50GAIgASgFSACIAQFCDgoMX3RvdGFsX2NvdW50QggKBnJlc3VsdCI6CiNHZXRQdWJsaWNQcm9kdWN0QnlVbmlxdWVTbHVnUmVxdWVzdBITCgt1bmlxdWVfc2x1ZxgBIAEoCSKXBAokR2V0UHVibGljUHJvZHVjdEJ5VW5pcXVlU2x1Z1Jlc3BvbnNlElQKB3N1Y2Nlc3MYASABKAsyQS5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQdWJsaWNQcm9kdWN0QnlVbmlxdWVTbHVnUmVzcG9uc2UuUmVzdWx0SAASNwoHZmFpbHVyZRgCIAEoDjIkLmRhc2hib2FyZC5wcm9kdWN0LnYxLkZhaWx1cmVNZXNzYWdlSAAa1QIKBlJlc3VsdBIPCgdzdWNjZXNzGAEgASgIEhQKB21lc3NhZ2UYAiABKAlIAIgBARISCgpwcm9qZWN0X2lkGAMgASgJEgoKAmlkGAQgASgJEgwKBG5hbWUYBSABKAkSHgoRc2hvcnRfZGVzY3JpcHRpb24YBiABKAlIAYgBARIZCgxwcmljZV9hbW91bnQYByABKAVIAogBARIbCg5wcmljZV9jdXJyZW5jeRgIIAEoCUgDiAEBEhcKCm1haW5faW1hZ2UYCSABKAlIBIgBARIcCg90aHVtYm5haWxfaW1hZ2UYCiABKAlIBYgBAUIKCghfbWVzc2FnZUIUChJfc2hvcnRfZGVzY3JpcHRpb25CDwoNX3ByaWNlX2Ftb3VudEIRCg9fcHJpY2VfY3VycmVuY3lCDQoLX21haW5faW1hZ2VCEgoQX3RodW1ibmFpbF9pbWFnZUIICgZyZXN1bHQiYQoaR2V0UHVibGljQWdyZWVtZW50c1JlcXVlc3QSEgoKcHJvamVjdF9pZBgBIAEoCRITCgtwcm9kdWN0X2lkcxgCIAMoCRIaChJjb250YWluc19yZWN1cnJpbmcYAyABKAgi5QIKG0dldFB1YmxpY0FncmVlbWVudHNSZXNwb25zZRJLCgdzdWNjZXNzGAEgASgLMjguZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHVibGljQWdyZWVtZW50c1Jlc3BvbnNlLlJlc3VsdEgAEjcKB2ZhaWx1cmUYAiABKA4yJC5kYXNoYm9hcmQucHJvZHVjdC52MS5GYWlsdXJlTWVzc2FnZUgAGisKCUFncmVlbWVudBIMCgRuYW1lGAEgASgJEhAKCHJlcXVpcmVkGAIgASgIGogBCgZSZXN1bHQSDwoHc3VjY2VzcxgBIAEoCBIUCgdtZXNzYWdlGAIgASgJSACIAQESSwoGcmVzdWx0GAMgAygLMjsuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHVibGljQWdyZWVtZW50c1Jlc3BvbnNlLkFncmVlbWVudEIKCghfbWVzc2FnZUIICgZyZXN1bHQiPAomR2V0RVByb2R1Y3RzQWRkZWRGb3JUaGlzUHJvZHVjdFJlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCSLlAQonR2V0RVByb2R1Y3RzQWRkZWRGb3JUaGlzUHJvZHVjdFJlc3BvbnNlElcKB3N1Y2Nlc3MYASABKAsyRC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRFUHJvZHVjdHNBZGRlZEZvclRoaXNQcm9kdWN0UmVzcG9uc2UuUmVzdWx0SAASNwoHZmFpbHVyZRgCIAEoDjIkLmRhc2hib2FyZC5wcm9kdWN0LnYxLkZhaWx1cmVNZXNzYWdlSAAaHgoGUmVzdWx0EhQKDGVwcm9kdWN0X2lkcxgBIAMoCUIICgZyZXN1bHQiVQopVXBkYXRlRVByb2R1Y3RzQWRkZWRGb3JUaGlzUHJvZHVjdFJlcXVlc3QSEgoKcHJvZHVjdF9pZBgBIAEoCRIUCgxlcHJvZHVjdF9pZHMYAiADKAkiOgokR2V0TGlzdE9mQWRkaXRpb25hbEFncmVlbWVudHNSZXF1ZXN0EhIKCnByb2R1Y3RfaWQYASABKAkiUAoPQWdyZWVtZW50T3B0aW9uEgwKBG5hbWUYASABKAkSEwoLaXNfcmVxdWlyZWQYAiABKAgSEQoEbGluaxgDIAEoCUgAiAEBQgcKBV9saW5rIrUCCiVHZXRMaXN0T2ZBZGRpdGlvbmFsQWdyZWVtZW50c1Jlc3BvbnNlElUKB3N1Y2Nlc3MYASABKAsyQi5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRMaXN0T2ZBZGRpdGlvbmFsQWdyZWVtZW50c1Jlc3BvbnNlLlJlc3VsdEgAEjcKB2ZhaWx1cmUYAiABKA4yJC5kYXNoYm9hcmQucHJvZHVjdC52MS5GYWlsdXJlTWVzc2FnZUgAGnIKBlJlc3VsdBIPCgdzdWNjZXNzGAEgASgIEhQKB21lc3NhZ2UYAiABKAlIAIgBARI1CgZyZXN1bHQYAyADKAsyJS5kYXNoYm9hcmQucHJvZHVjdC52MS5BZ3JlZW1lbnRPcHRpb25CCgoIX21lc3NhZ2VCCAoGcmVzdWx0IngKJ1VwZGF0ZUxpc3RPZkFkZGl0aW9uYWxBZ3JlZW1lbnRzUmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJEjkKCmFncmVlbWVudHMYAiADKAsyJS5kYXNoYm9hcmQucHJvZHVjdC52MS5BZ3JlZW1lbnRPcHRpb24iJAoUQ3JlYXRlUHJvZHVjdFJlcXVlc3QSDAoEbmFtZRgBIAEoCSIqChREZWxldGVQcm9kdWN0UmVxdWVzdBISCgpwcm9kdWN0X2lkGAEgASgJIjcKFUdldFByb2R1Y3RCeUlkUmVxdWVzdBISCgpwcm9qZWN0X2lkGAEgASgJEgoKAmlkGAIgASgJKr0BCg1CaWxsaW5nUGVyaW9kEhgKFEJJTExJTkdfUEVSSU9EX0RBSUxZEAASGQoVQklMTElOR19QRVJJT0RfV0VFS0xZEAESGgoWQklMTElOR19QRVJJT0RfTU9OVEhMWRACEhwKGEJJTExJTkdfUEVSSU9EX1FVQVJURVJMWRADEiAKHEJJTExJTkdfUEVSSU9EX1NFTUlfQU5OVUFMTFkQBBIbChdCSUxMSU5HX1BFUklPRF9BTk5VQUxMWRAFKpUCCg5GYWlsdXJlTWVzc2FnZRIbChdGQUlMVVJFX01FU1NBR0VfVU5LTk9XThAAEiUKIUZBSUxVUkVfTUVTU0FHRV9QUk9KRUNUX05PVF9GT1VORBABEiUKIUZBSUxVUkVfTUVTU0FHRV9QUk9EVUNUX05PVF9GT1VORBACEiYKIkZBSUxVUkVfTUVTU0FHRV9JTlZBTElEX1BST0RVQ1RfSUQQAxImCiJGQUlMVVJFX01FU1NBR0VfU0xVR19BTFJFQURZX1RBS0VOEAQSKQolRkFJTFVSRV9NRVNTQUdFX0NBTk5PVF9DUkVBVEVfUFJPRFVDVBAFEh0KGUZBSUxVUkVfTUVTU0FHRV9OT19BQ0NFU1MQBjLXJQoNUHJvZHVjdFJvdXRlchKAAQoVQ3JlYXRlT3JVcGRhdGVQcm9kdWN0EjIuZGFzaGJvYXJkLnByb2R1Y3QudjEuQ3JlYXRlT3JVcGRhdGVQcm9kdWN0UmVxdWVzdBozLmRhc2hib2FyZC5wcm9kdWN0LnYxLkNyZWF0ZU9yVXBkYXRlUHJvZHVjdFJlc3BvbnNlEnEKEER1cGxpY2F0ZVByb2R1Y3QSLS5kYXNoYm9hcmQucHJvZHVjdC52MS5EdXBsaWNhdGVQcm9kdWN0UmVxdWVzdBouLmRhc2hib2FyZC5wcm9kdWN0LnYxLkR1cGxpY2F0ZVByb2R1Y3RSZXNwb25zZRJzChdVcGRhdGVQcm9kdWN0VW5pcXVlU2x1ZxI0LmRhc2hib2FyZC5wcm9kdWN0LnYxLlVwZGF0ZVByb2R1Y3RVbmlxdWVTbHVnUmVxdWVzdBoiLmRhc2hib2FyZC5wcm9kdWN0LnYxLkJvb2xSZXNwb25zZRJfCgpHZXRQcm9kdWN0EicuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdFJlcXVlc3QaKC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0UmVzcG9uc2USpAEKIUdldFByb2R1Y3RTZW5kVGlja2V0QWZ0ZXJQdXJjaGFzZRI+LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RTZW5kVGlja2V0QWZ0ZXJQdXJjaGFzZVJlcXVlc3QaPy5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2VSZXNwb25zZRKhAQogR2V0UHJvZHVjdEF1ZGlvYm9va0FmdGVyUHVyY2hhc2USPS5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0QXVkaW9ib29rQWZ0ZXJQdXJjaGFzZVJlcXVlc3QaPi5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0QXVkaW9ib29rQWZ0ZXJQdXJjaGFzZVJlc3BvbnNlEo0BCiRVcGRhdGVQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2USQS5kYXNoYm9hcmQucHJvZHVjdC52MS5VcGRhdGVQcm9kdWN0U2VuZFRpY2tldEFmdGVyUHVyY2hhc2VSZXF1ZXN0GiIuZGFzaGJvYXJkLnByb2R1Y3QudjEuQm9vbFJlc3BvbnNlEosBCiNVcGRhdGVQcm9kdWN0QXVkaW9ib29rQWZ0ZXJQdXJjaGFzZRJALmRhc2hib2FyZC5wcm9kdWN0LnYxLlVwZGF0ZVByb2R1Y3RBdWRpb2Jvb2tBZnRlclB1cmNoYXNlUmVxdWVzdBoiLmRhc2hib2FyZC5wcm9kdWN0LnYxLkJvb2xSZXNwb25zZRJxChZQdWJsaXNoUHJvZHVjdElmTmVlZGVkEjMuZGFzaGJvYXJkLnByb2R1Y3QudjEuUHVibGlzaFByb2R1Y3RJZk5lZWRlZFJlcXVlc3QaIi5kYXNoYm9hcmQucHJvZHVjdC52MS5Cb29sUmVzcG9uc2USmwEKHkdldFByb2R1Y3RBZnRlclB1cmNoYXNlTWVzc2FnZRI7LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RBZnRlclB1cmNoYXNlTWVzc2FnZVJlcXVlc3QaPC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0QWZ0ZXJQdXJjaGFzZU1lc3NhZ2VSZXNwb25zZRKHAQohVXBkYXRlUHJvZHVjdEFmdGVyUHVyY2hhc2VNZXNzYWdlEj4uZGFzaGJvYXJkLnByb2R1Y3QudjEuVXBkYXRlUHJvZHVjdEFmdGVyUHVyY2hhc2VNZXNzYWdlUmVxdWVzdBoiLmRhc2hib2FyZC5wcm9kdWN0LnYxLkJvb2xSZXNwb25zZRJ3ChJHZXRQcm9kdWN0VmFyaWFudHMSLy5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0VmFyaWFudHNSZXF1ZXN0GjAuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdFZhcmlhbnRzUmVzcG9uc2USdQoYU2VuZFRlc3RFbWFpbFdpdGhNZXNzYWdlEjUuZGFzaGJvYXJkLnByb2R1Y3QudjEuU2VuZFRlc3RFbWFpbFdpdGhNZXNzYWdlUmVxdWVzdBoiLmRhc2hib2FyZC5wcm9kdWN0LnYxLkJvb2xSZXNwb25zZRJrCg5TZWFyY2hQcm9kdWN0cxIrLmRhc2hib2FyZC5wcm9kdWN0LnYxLlNlYXJjaFByb2R1Y3RzUmVxdWVzdBosLmRhc2hib2FyZC5wcm9kdWN0LnYxLlNlYXJjaFByb2R1Y3RzUmVzcG9uc2USjAEKGUV4Y2hhbmdlUHJvZHVjdElEc1RvTmFtZXMSNi5kYXNoYm9hcmQucHJvZHVjdC52MS5FeGNoYW5nZVByb2R1Y3RJRHNUb05hbWVzUmVxdWVzdBo3LmRhc2hib2FyZC5wcm9kdWN0LnYxLkV4Y2hhbmdlUHJvZHVjdElEc1RvTmFtZXNSZXNwb25zZRKJAQoYR2V0UHJvZHVjdEJvdWdodEFydGljbGVzEjUuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEJvdWdodEFydGljbGVzUmVxdWVzdBo2LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RCb3VnaHRBcnRpY2xlc1Jlc3BvbnNlEnkKGlVwZGF0ZVByb2R1Y3RCb3VnaHRBcnRpY2xlEjcuZGFzaGJvYXJkLnByb2R1Y3QudjEuVXBkYXRlUHJvZHVjdEJvdWdodEFydGljbGVSZXF1ZXN0GiIuZGFzaGJvYXJkLnByb2R1Y3QudjEuQm9vbFJlc3BvbnNlEmkKF0FkZFByb2R1Y3RCb3VnaHRBcnRpY2xlEiouZGFzaGJvYXJkLnByb2R1Y3QudjEuUHJvZHVjdEJvdWdodEFydGljbGUaIi5kYXNoYm9hcmQucHJvZHVjdC52MS5Cb29sUmVzcG9uc2USfQoUR2V0RmlsZUFjY2Vzc01lbWJlcnMSMS5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRGaWxlQWNjZXNzTWVtYmVyc1JlcXVlc3QaMi5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRGaWxlQWNjZXNzTWVtYmVyc1Jlc3BvbnNlEnEKEEdpdmVBY2Nlc3NUb0ZpbGUSLS5kYXNoYm9hcmQucHJvZHVjdC52MS5HaXZlQWNjZXNzVG9GaWxlUmVxdWVzdBouLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdpdmVBY2Nlc3NUb0ZpbGVSZXNwb25zZRJ3ChJSZW1vdmVBY2Nlc3NUb0ZpbGUSLy5kYXNoYm9hcmQucHJvZHVjdC52MS5SZW1vdmVBY2Nlc3NUb0ZpbGVSZXF1ZXN0GjAuZGFzaGJvYXJkLnByb2R1Y3QudjEuUmVtb3ZlQWNjZXNzVG9GaWxlUmVzcG9uc2USYQoOQXJjaGl2ZVByb2R1Y3QSKy5kYXNoYm9hcmQucHJvZHVjdC52MS5BcmNoaXZlUHJvZHVjdFJlcXVlc3QaIi5kYXNoYm9hcmQucHJvZHVjdC52MS5Cb29sUmVzcG9uc2USYwoQVW5hcmNoaXZlUHJvZHVjdBIrLmRhc2hib2FyZC5wcm9kdWN0LnYxLkFyY2hpdmVQcm9kdWN0UmVxdWVzdBoiLmRhc2hib2FyZC5wcm9kdWN0LnYxLkJvb2xSZXNwb25zZRJiCgtHZXRQcm9kdWN0cxIoLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RzUmVxdWVzdBopLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RzUmVzcG9uc2UScQoQR2V0UHJvZHVjdHNCeUlkcxItLmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFByb2R1Y3RzQnlJZHNSZXF1ZXN0Gi4uZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdHNCeUlkc1Jlc3BvbnNlEmsKDkdldFByb2R1Y3RHcmlkEisuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEdyaWRSZXF1ZXN0GiwuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHJvZHVjdEdyaWRSZXNwb25zZRJ6ChNHZXRNYWluUGFnZVByb2R1Y3RzEjAuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0TWFpblBhZ2VQcm9kdWN0c1JlcXVlc3QaMS5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRNYWluUGFnZVByb2R1Y3RzUmVzcG9uc2USlQEKHEdldFB1YmxpY1Byb2R1Y3RCeVVuaXF1ZVNsdWcSOS5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQdWJsaWNQcm9kdWN0QnlVbmlxdWVTbHVnUmVxdWVzdBo6LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldFB1YmxpY1Byb2R1Y3RCeVVuaXF1ZVNsdWdSZXNwb25zZRJ6ChNHZXRQdWJsaWNBZ3JlZW1lbnRzEjAuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0UHVibGljQWdyZWVtZW50c1JlcXVlc3QaMS5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQdWJsaWNBZ3JlZW1lbnRzUmVzcG9uc2USngEKH0dldEVQcm9kdWN0c0FkZGVkRm9yVGhpc1Byb2R1Y3QSPC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRFUHJvZHVjdHNBZGRlZEZvclRoaXNQcm9kdWN0UmVxdWVzdBo9LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldEVQcm9kdWN0c0FkZGVkRm9yVGhpc1Byb2R1Y3RSZXNwb25zZRKMAQoiVXBkYXRlRVByb2R1Y3RzQWRkZWRGb3JUaGlzUHJvZHVjdBI/LmRhc2hib2FyZC5wcm9kdWN0LnYxLlVwZGF0ZUVQcm9kdWN0c0FkZGVkRm9yVGhpc1Byb2R1Y3RSZXF1ZXN0GiUuZGFzaGJvYXJkLnByb2R1Y3QudjEuT3BlcmF0aW9uUmVzdWx0EpgBCh1HZXRMaXN0T2ZBZGRpdGlvbmFsQWdyZWVtZW50cxI6LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldExpc3RPZkFkZGl0aW9uYWxBZ3JlZW1lbnRzUmVxdWVzdBo7LmRhc2hib2FyZC5wcm9kdWN0LnYxLkdldExpc3RPZkFkZGl0aW9uYWxBZ3JlZW1lbnRzUmVzcG9uc2USiAEKIFVwZGF0ZUxpc3RPZkFkZGl0aW9uYWxBZ3JlZW1lbnRzEj0uZGFzaGJvYXJkLnByb2R1Y3QudjEuVXBkYXRlTGlzdE9mQWRkaXRpb25hbEFncmVlbWVudHNSZXF1ZXN0GiUuZGFzaGJvYXJkLnByb2R1Y3QudjEuT3BlcmF0aW9uUmVzdWx0EmIKDUNyZWF0ZVByb2R1Y3QSKi5kYXNoYm9hcmQucHJvZHVjdC52MS5DcmVhdGVQcm9kdWN0UmVxdWVzdBolLmRhc2hib2FyZC5wcm9kdWN0LnYxLk9wZXJhdGlvblJlc3VsdBJiCg1EZWxldGVQcm9kdWN0EiouZGFzaGJvYXJkLnByb2R1Y3QudjEuRGVsZXRlUHJvZHVjdFJlcXVlc3QaJS5kYXNoYm9hcmQucHJvZHVjdC52MS5PcGVyYXRpb25SZXN1bHQSZwoOR2V0UHJvZHVjdEJ5SWQSKy5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0QnlJZFJlcXVlc3QaKC5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRQcm9kdWN0UmVzcG9uc2UShgEKF0dldEd1ZXN0Q2F0YWxvZ1NldHRpbmdzEjQuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0R3Vlc3RDYXRhbG9nU2V0dGluZ3NSZXF1ZXN0GjUuZGFzaGJvYXJkLnByb2R1Y3QudjEuR2V0R3Vlc3RDYXRhbG9nU2V0dGluZ3NSZXNwb25zZRKAAQoUU2V0R3Vlc3RDYXRhbG9nRW50cnkSMS5kYXNoYm9hcmQucHJvZHVjdC52MS5TZXRHdWVzdENhdGFsb2dFbnRyeVJlcXVlc3QaNS5kYXNoYm9hcmQucHJvZHVjdC52MS5HZXRHdWVzdENhdGFsb2dTZXR0aW5nc1Jlc3BvbnNlYgZwcm90bzM",[$,ee]);var ne=te("CiBkYXNoYm9hcmQvdjEvbm90aWZpY2F0aW9ucy5wcm90bxIaZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEiYAoWVmVyaWZ5VXNlckVtYWlsUmVxdWVzdBISCgVlbWFpbBgBIAEoCUgAiAEBEhEKBGNvZGUYAiABKAlIAYgBARIMCgRzbHVnGAMgASgJQggKBl9lbWFpbEIHCgVfY29kZSJ/ChdWZXJpZnlVc2VyRW1haWxSZXNwb25zZRIPCgJvaxgBIAEoCEgAiAEBEhkKDGFjY2Vzc190b2tlbhgCIAEoCUgBiAEBEhQKB3VzZXJfaWQYAyABKAlIAogBAUIFCgNfb2tCDwoNX2FjY2Vzc190b2tlbkIKCghfdXNlcl9pZCJQChRHZXRVc2VyR3JvdXBzUmVxdWVzdBIMCgRzbHVnGAEgASgJEhkKDGFjY2Vzc190b2tlbhgCIAEoCUgAiAEBQg8KDV9hY2Nlc3NfdG9rZW4iiQIKFUdldFVzZXJHcm91cHNSZXNwb25zZRJHCgZncm91cHMYASADKAsyNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXRVc2VyR3JvdXBzUmVzcG9uc2UuR3JvdXAapgEKBUdyb3VwEgoKAmlkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARINCgVpc19vbhgEIAEoCBI8Cglob3dfb2Z0ZW4YBSABKA4yJC5jb21tb24udjEuTm90aWZpY2F0aW9uR3JvdXBIb3dPZnRlbkgBiAEBQg4KDF9kZXNjcmlwdGlvbkIMCgpfaG93X29mdGVuIncKF1VwZGF0ZVVzZXJHcm91cHNSZXF1ZXN0EgwKBHNsdWcYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIRCglncm91cF9pZHMYAyADKAkSGQoMYWNjZXNzX3Rva2VuGAQgASgJSACIAQFCDwoNX2FjY2Vzc190b2tlbiJvCiJHZXROb3RpZmljYXRpb25Vc2VyU2V0dGluZ3NSZXF1ZXN0EgwKBHNsdWcYASABKAkSDwoHdXNlcl9pZBgCIAEoCRIZCgxhY2Nlc3NfdG9rZW4YAyABKAlIAIgBAUIPCg1fYWNjZXNzX3Rva2VuIowECiNHZXROb3RpZmljYXRpb25Vc2VyU2V0dGluZ3NSZXNwb25zZRJZCgdzdWNjZXNzGAEgASgLMkYuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0Tm90aWZpY2F0aW9uVXNlclNldHRpbmdzUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAawAIKBlJlc3VsdBIfChdub3RpZmljYXRpb25fc2V0dGluZ19pZBgBIAEoCRIZChFzdWJzY3JpcHRpb25fc2x1ZxgCIAEoCRIjChttb2JpbGVfbm90aWZpY2F0aW9uX2VuYWJsZWQYAyABKAgSIgoaZW1haWxfbm90aWZpY2F0aW9uX2VuYWJsZWQYBCABKAgSIAoYc21zX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIEiQKHGVtYWlsX25vdGlmaWNhdGlvbl9hdmFpbGFibGUYBiABKAgSIgoac21zX25vdGlmaWNhdGlvbl9hdmFpbGFibGUYByABKAgSJQodbW9iaWxlX25vdGlmaWNhdGlvbl9hdmFpbGFibGUYCCABKAgSHgoWaGFzX3VzZXJfaW5zdGFsbGVkX2FwcBgJIAEoCEIICgZyZXN1bHQiIgogQ3JlYXRlTm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QiIAoeUmVhZE5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0IskBCiBVcGRhdGVOb3RpZmljYXRpb25TZXR0aW5nUmVxdWVzdBIfChdub3RpZmljYXRpb25fc2V0dGluZ19pZBgBIAEoCRIZChFzdWJzY3JpcHRpb25fc2x1ZxgCIAEoCRIjChttb2JpbGVfbm90aWZpY2F0aW9uX2VuYWJsZWQYAyABKAgSIgoaZW1haWxfbm90aWZpY2F0aW9uX2VuYWJsZWQYBCABKAgSIAoYc21zX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIIkMKIERlbGV0ZU5vdGlmaWNhdGlvblNldHRpbmdSZXF1ZXN0Eh8KF25vdGlmaWNhdGlvbl9zZXR0aW5nX2lkGAEgASgJIvMCCh9SZWFkTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlElUKB3N1Y2Nlc3MYASABKAsyQi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGq8BCgZSZXN1bHQSHwoXbm90aWZpY2F0aW9uX3NldHRpbmdfaWQYASABKAkSGQoRc3Vic2NyaXB0aW9uX3NsdWcYAiABKAkSIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAMgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAQgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgFIAEoCEIICgZyZXN1bHQi5AEKG05vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZRJRCgdzdWNjZXNzGAEgASgLMj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGikKBlJlc3VsdBIfChdub3RpZmljYXRpb25fc2V0dGluZ19pZBgBIAEoCUIICgZyZXN1bHQiygEKHkNyZWF0ZU5vdGlmaWNhdGlvbkdyb3VwUmVxdWVzdBIMCgRuYW1lGAEgASgJEhgKC2Rlc2NyaXB0aW9uGAIgASgJSACIAQESPAoJaG93X29mdGVuGAMgASgOMiQuY29tbW9uLnYxLk5vdGlmaWNhdGlvbkdyb3VwSG93T2Z0ZW5IAYgBARIWCglpc19wdWJsaWMYBCABKAhIAogBAUIOCgxfZGVzY3JpcHRpb25CDAoKX2hvd19vZnRlbkIMCgpfaXNfcHVibGljIloKHVJlYWROb3RpZmljYXRpb25Hcm91cHNSZXF1ZXN0EhEKCWdyb3VwX2lkcxgBIAMoCRIXCgpncm91cF9uYW1lGAIgASgJSACIAQFCDQoLX2dyb3VwX25hbWUi6QEKHlVwZGF0ZU5vdGlmaWNhdGlvbkdyb3VwUmVxdWVzdBIdChVub3RpZmljYXRpb25fZ3JvdXBfaWQYASABKAkSDAoEbmFtZRgCIAEoCRIYCgtkZXNjcmlwdGlvbhgDIAEoCUgAiAEBEjwKCWhvd19vZnRlbhgEIAEoDjIkLmNvbW1vbi52MS5Ob3RpZmljYXRpb25Hcm91cEhvd09mdGVuSAGIAQESFgoJaXNfcHVibGljGAUgASgISAKIAQFCDgoMX2Rlc2NyaXB0aW9uQgwKCl9ob3dfb2Z0ZW5CDAoKX2lzX3B1YmxpYyI/Ch5EZWxldGVOb3RpZmljYXRpb25Hcm91cFJlcXVlc3QSHQoVbm90aWZpY2F0aW9uX2dyb3VwX2lkGAEgASgJIuoDCh5SZWFkTm90aWZpY2F0aW9uR3JvdXBzUmVzcG9uc2USVAoHc3VjY2VzcxgBIAEoCzJBLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25Hcm91cHNSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABrMAQoFR3JvdXASHQoVbm90aWZpY2F0aW9uX2dyb3VwX2lkGAEgASgJEgwKBG5hbWUYAiABKAkSGAoLZGVzY3JpcHRpb24YAyABKAlIAIgBARI8Cglob3dfb2Z0ZW4YBCABKA4yJC5jb21tb24udjEuTm90aWZpY2F0aW9uR3JvdXBIb3dPZnRlbkgBiAEBEg0KBXVzZXJzGAUgASgFEhEKCWlzX3B1YmxpYxgGIAEoCEIOCgxfZGVzY3JpcHRpb25CDAoKX2hvd19vZnRlbhpaCgZSZXN1bHQSUAoGZ3JvdXBzGAEgAygLMkAuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3Vwc1Jlc3BvbnNlLkdyb3VwQggKBnJlc3VsdCLeAQoZTm90aWZpY2F0aW9uR3JvdXBSZXNwb25zZRJPCgdzdWNjZXNzGAEgASgLMjwuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uR3JvdXBSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABonCgZSZXN1bHQSHQoVbm90aWZpY2F0aW9uX2dyb3VwX2lkGAEgASgJQggKBnJlc3VsdCKjAgodQ3JlYXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QSDAoEc2x1ZxgBIAEoCRINCgVlbWFpbBgCIAEoCRIOCgZncm91cHMYAyADKAkSEgoFcGhvbmUYBCABKAlIAIgBARIXCgpmaXJzdF9uYW1lGAUgASgJSAGIAQESFgoJbGFzdF9uYW1lGAYgASgJSAKIAQESIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAcgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAggASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgJIAEoCEIICgZfcGhvbmVCDQoLX2ZpcnN0X25hbWVCDAoKX2xhc3RfbmFtZSJYChxSZWFkTm90aWZpY2F0aW9uVXNlcnNSZXF1ZXN0EhAKCHVzZXJfaWRzGAEgAygJEhcKCnVzZXJfZW1haWwYAiABKAlIAIgBAUINCgtfdXNlcl9lbWFpbCKwAgodVXBkYXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QSDAoEc2x1ZxgBIAEoCRIcChRub3RpZmljYXRpb25fdXNlcl9pZBgCIAEoCRIXCgpmaXJzdF9uYW1lGAMgASgJSACIAQESFgoJbGFzdF9uYW1lGAQgASgJSAGIAQESIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAYgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgHIAEoCBIZCgxhY2Nlc3NfdG9rZW4YCCABKAlIAogBAUINCgtfZmlyc3RfbmFtZUIMCgpfbGFzdF9uYW1lQg8KDV9hY2Nlc3NfdG9rZW4iagodRGVsZXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QSDwoHdXNlcl9pZBgBIAEoCRIMCgRzbHVnGAIgASgJEhkKDGFjY2Vzc190b2tlbhgDIAEoCUgAiAEBQg8KDV9hY2Nlc3NfdG9rZW4i+AEKHVJlYWROb3RpZmljYXRpb25Vc2Vyc1Jlc3BvbnNlElMKB3N1Y2Nlc3MYASABKAsyQC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uVXNlcnNSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABo5CgZSZXN1bHQSLwoFdXNlcnMYASADKAsyIC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Vc2VyQggKBnJlc3VsdCKpAgoYTm90aWZpY2F0aW9uVXNlclJlc3BvbnNlEk4KB3N1Y2Nlc3MYASABKAsyOy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Vc2VyUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAASGQoMYWNjZXNzX3Rva2VuGAMgASgJSAGIAQESFAoHdXNlcl9pZBgEIAEoCUgCiAEBGiYKBlJlc3VsdBIcChRub3RpZmljYXRpb25fdXNlcl9pZBgBIAEoCUIICgZyZXN1bHRCDwoNX2FjY2Vzc190b2tlbkIKCghfdXNlcl9pZCJhCiJDcmVhdGVOb3RpZmljYXRpb25Hcm91cFVzZXJSZXF1ZXN0Eh0KFW5vdGlmaWNhdGlvbl9ncm91cF9pZBgBIAEoCRIcChRub3RpZmljYXRpb25fdXNlcl9pZBgCIAEoCSI3CiJSZWFkTm90aWZpY2F0aW9uR3JvdXBVc2Vyc1JlcXVlc3RzEhEKCWdyb3VwX2lkcxgBIAMoCSKFAQoiVXBkYXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVxdWVzdBIiChpub3RpZmljYXRpb25fZ3JvdXBfdXNlcl9pZBgBIAEoCRIdChVub3RpZmljYXRpb25fZ3JvdXBfaWQYAiABKAkSHAoUbm90aWZpY2F0aW9uX3VzZXJfaWQYAyABKAkiSAoiRGVsZXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVxdWVzdBIiChpub3RpZmljYXRpb25fZ3JvdXBfdXNlcl9pZBgBIAEoCSKCAgoiUmVhZE5vdGlmaWNhdGlvbkdyb3VwVXNlcnNSZXNwb25zZRJYCgdzdWNjZXNzGAEgASgLMkUuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3VwVXNlcnNSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABo5CgZSZXN1bHQSLwoFdXNlcnMYASADKAsyIC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Vc2VyQggKBnJlc3VsdCLrAQodTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVzcG9uc2USUwoHc3VjY2VzcxgBIAEoCzJALmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbkdyb3VwVXNlclJlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGiwKBlJlc3VsdBIiChpub3RpZmljYXRpb25fZ3JvdXBfdXNlcl9pZBgBIAEoCUIICgZyZXN1bHQikwQKE05vdGlmaWNhdGlvbk1lc3NhZ2USHwoXbm90aWZpY2F0aW9uX21lc3NhZ2VfaWQYASABKAkSRQoGc3RhdHVzGAIgASgOMjUuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZVN0YXR1cxIrCgdzZW5kX2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBINCgV0aXRsZRgEIAEoCRIVCghzdWJ0aXRsZRgFIAEoCUgAiAEBEhQKB21lc3NhZ2UYBiABKAlIAYgBARIWCglpbWFnZV91cmwYByABKAlIAogBARIVCghvcGVuX3VybBgPIAEoCUgDiAEBEg4KBmdyb3VwcxgIIAMoCRIQCghwcm9kdWN0cxgJIAMoCRINCgV1c2VycxgKIAMoCRIjChttb2JpbGVfbm90aWZpY2F0aW9uX2VuYWJsZWQYCyABKAgSIgoaZW1haWxfbm90aWZpY2F0aW9uX2VuYWJsZWQYDCABKAgSIAoYc21zX25vdGlmaWNhdGlvbl9lbmFibGVkGA0gASgIEhoKDWVycm9yX21lc3NhZ2UYDiABKAlIBIgBAUILCglfc3VidGl0bGVCCgoIX21lc3NhZ2VCDAoKX2ltYWdlX3VybEILCglfb3Blbl91cmxCEAoOX2Vycm9yX21lc3NhZ2Ui0QMKIENyZWF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2VSZXF1ZXN0EkUKBnN0YXR1cxgBIAEoDjI1LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VTdGF0dXMSKwoHc2VuZF9hdBgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASDQoFdGl0bGUYAyABKAkSFQoIc3VidGl0bGUYBCABKAlIAIgBARIUCgdtZXNzYWdlGAUgASgJSAGIAQESFgoJaW1hZ2VfdXJsGAYgASgJSAKIAQESFQoIb3Blbl91cmwYDSABKAlIA4gBARIOCgZncm91cHMYByADKAkSEAoIcHJvZHVjdHMYCCADKAkSDQoFdXNlcnMYCSADKAkSIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAogASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAsgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgMIAEoCEILCglfc3VidGl0bGVCCgoIX21lc3NhZ2VCDAoKX2ltYWdlX3VybEILCglfb3Blbl91cmwipAIKIkdldFNlbnROb3RpZmljYXRpb25NZXNzYWdlc1JlcXVlc3QSJAoXbm90aWZpY2F0aW9uX21lc3NhZ2VfaWQYASABKAlIAIgBARIzCgpzdGFydF90aW1lGAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgBiAEBEjEKCGVuZF90aW1lGAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEgCiAEBEiAKE2luY2x1ZGVfZXhwb3J0X2RhdGEYBCABKAhIA4gBAUIaChhfbm90aWZpY2F0aW9uX21lc3NhZ2VfaWRCDQoLX3N0YXJ0X3RpbWVCCwoJX2VuZF90aW1lQhYKFF9pbmNsdWRlX2V4cG9ydF9kYXRhIuEDCiNHZXRTZW50Tm90aWZpY2F0aW9uTWVzc2FnZXNSZXNwb25zZRJZCgdzdWNjZXNzGAEgASgLMkYuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0U2VudE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAaKAoYTm90aWZpY2F0aW9uTWVzc2FnZVN0YXRzEgwKBHNlbnQYASABKAUa6wEKBlJlc3VsdBJOChVub3RpZmljYXRpb25fbWVzc2FnZXMYASADKAsyLy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlEmcKBXN0YXRzGAIgASgLMlguZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0U2VudE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVzcG9uc2UuTm90aWZpY2F0aW9uTWVzc2FnZVN0YXRzEhgKC2V4cG9ydF9kYXRhGAMgASgMSACIAQFCDgoMX2V4cG9ydF9kYXRhQggKBnJlc3VsdCJjCh9SZWFkTm90aWZpY2F0aW9uTWVzc2FnZXNSZXF1ZXN0EiQKF25vdGlmaWNhdGlvbl9tZXNzYWdlX2lkGAEgASgJSACIAQFCGgoYX25vdGlmaWNhdGlvbl9tZXNzYWdlX2lkIvwDCiBVcGRhdGVOb3RpZmljYXRpb25NZXNzYWdlUmVxdWVzdBIfChdub3RpZmljYXRpb25fbWVzc2FnZV9pZBgBIAEoCRJFCgZzdGF0dXMYAiABKA4yNS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlU3RhdHVzEisKB3NlbmRfYXQYAyABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wEg0KBXRpdGxlGAQgASgJEhUKCHN1YnRpdGxlGAUgASgJSACIAQESFAoHbWVzc2FnZRgGIAEoCUgBiAEBEhYKCWltYWdlX3VybBgHIAEoCUgCiAEBEg4KBmdyb3VwcxgIIAMoCRIQCghwcm9kdWN0cxgJIAMoCRINCgV1c2VycxgKIAMoCRIjChttb2JpbGVfbm90aWZpY2F0aW9uX2VuYWJsZWQYCyABKAgSIgoaZW1haWxfbm90aWZpY2F0aW9uX2VuYWJsZWQYDCABKAgSIAoYc21zX25vdGlmaWNhdGlvbl9lbmFibGVkGA0gASgIEhoKDWVycm9yX21lc3NhZ2UYDiABKAlIA4gBAUILCglfc3VidGl0bGVCCgoIX21lc3NhZ2VCDAoKX2ltYWdlX3VybEIQCg5fZXJyb3JfbWVzc2FnZSJDCiBEZWxldGVOb3RpZmljYXRpb25NZXNzYWdlUmVxdWVzdBIfChdub3RpZmljYXRpb25fbWVzc2FnZV9pZBgBIAEoCSKdAgogUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVzcG9uc2USVgoHc3VjY2VzcxgBIAEoCzJDLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25NZXNzYWdlc1Jlc3BvbnNlLlJlc3VsdEgAEj0KB2ZhaWx1cmUYAiABKA4yKi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5GYWlsdXJlTWVzc2FnZUgAGlgKBlJlc3VsdBJOChVub3RpZmljYXRpb25fbWVzc2FnZXMYASADKAsyLy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlQggKBnJlc3VsdCLkAQobTm90aWZpY2F0aW9uTWVzc2FnZVJlc3BvbnNlElEKB3N1Y2Nlc3MYASABKAsyPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAaKQoGUmVzdWx0Eh8KF25vdGlmaWNhdGlvbl9tZXNzYWdlX2lkGAEgASgJQggKBnJlc3VsdCKSAgojQ3JlYXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlcXVlc3QSSAoGc3RhdHVzGAEgASgOMjguZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZUpvYlN0YXR1cxIrCgdzZW50X2F0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBITCgtjdXN0b21lcl9pZBgDIAEoCRIfChdub3RpZmljYXRpb25fbWVzc2FnZV9pZBgEIAEoCRIQCghwcmlvcml0eRgFIAMoCRIaCg1lcnJvcl9tZXNzYWdlGAYgASgJSACIAQFCEAoOX2Vycm9yX21lc3NhZ2UibgoiUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JzUmVxdWVzdBIoChtub3RpZmljYXRpb25fbWVzc2FnZV9qb2JfaWQYASABKAlIAIgBAUIeChxfbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkIu8BCiNVcGRhdGVOb3RpZmljYXRpb25NZXNzYWdlSm9iUmVxdWVzdBIjChtub3RpZmljYXRpb25fbWVzc2FnZV9qb2JfaWQYASABKAkSSAoGc3RhdHVzGAIgASgOMjguZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZUpvYlN0YXR1cxIrCgdzZW50X2F0GAMgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIaCg1lcnJvcl9tZXNzYWdlGAQgASgJSACIAQFCEAoOX2Vycm9yX21lc3NhZ2UiSgojRGVsZXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlcXVlc3QSIwobbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkGAEgASgJIvwECiNSZWFkTm90aWZpY2F0aW9uTWVzc2FnZUpvYnNSZXNwb25zZRJZCgdzdWNjZXNzGAEgASgLMkYuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JzUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAaqgIKFk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2ISIwobbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkGAEgASgJEkgKBnN0YXR1cxgCIAEoDjI4LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JTdGF0dXMSKwoHc2VudF9hdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXASEwoLY3VzdG9tZXJfaWQYBCABKAkSHwoXbm90aWZpY2F0aW9uX21lc3NhZ2VfaWQYBSABKAkSEAoIcHJpb3JpdHkYBiADKAkSGgoNZXJyb3JfbWVzc2FnZRgHIAEoCUgAiAEBQhAKDl9lcnJvcl9tZXNzYWdlGoMBCgZSZXN1bHQSeQoZbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9icxgBIAMoCzJWLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25NZXNzYWdlSm9ic1Jlc3BvbnNlLk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JCCAoGcmVzdWx0Iu4BCh5Ob3RpZmljYXRpb25NZXNzYWdlSm9iUmVzcG9uc2USVAoHc3VjY2VzcxgBIAEoCzJBLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JSZXNwb25zZS5SZXN1bHRIABI9CgdmYWlsdXJlGAIgASgOMiouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRmFpbHVyZU1lc3NhZ2VIABotCgZSZXN1bHQSIwobbm90aWZpY2F0aW9uX21lc3NhZ2Vfam9iX2lkGAEgASgJQggKBnJlc3VsdCLQAgoEVXNlchIcChRub3RpZmljYXRpb25fdXNlcl9pZBgBIAEoCRINCgVlbWFpbBgCIAEoCRIXCgpmaXJzdF9uYW1lGAMgASgJSACIAQESFgoJbGFzdF9uYW1lGAQgASgJSAGIAQESIwobbW9iaWxlX25vdGlmaWNhdGlvbl9lbmFibGVkGAUgASgIEiIKGmVtYWlsX25vdGlmaWNhdGlvbl9lbmFibGVkGAYgASgIEiAKGHNtc19ub3RpZmljYXRpb25fZW5hYmxlZBgHIAEoCBIuCgpjcmVhdGVkX2F0GAggASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcBIdChBpc19hcHBfaW5zdGFsbGVkGAkgASgISAKIAQFCDQoLX2ZpcnN0X25hbWVCDAoKX2xhc3RfbmFtZUITChFfaXNfYXBwX2luc3RhbGxlZCI2Ch9SZWFkTm90aWZpY2F0aW9uUHJvZHVjdHNSZXF1ZXN0EhMKC3Byb2R1Y3RfaWRzGAEgAygJIlQKIUdldFByb2plY3RlZFJlY2lwaWVudENvdW50UmVxdWVzdBIOCgZncm91cHMYASADKAkSEAoIcHJvZHVjdHMYAiADKAkSDQoFdXNlcnMYAyADKAkicQoiR2V0UHJvamVjdGVkUmVjaXBpZW50Q291bnRSZXNwb25zZRINCgV0b3RhbBgBIAEoBRITCgtlbWFpbF9jb3VudBgCIAEoBRIRCglzbXNfY291bnQYAyABKAUSFAoMbW9iaWxlX2NvdW50GAQgASgFIqEBChtHZXROb3RpZmljYXRpb25TdGF0c1JlcXVlc3QSMwoKc3RhcnRfdGltZRgBIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAIgBARIxCghlbmRfdGltZRgCIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBIAYgBAUINCgtfc3RhcnRfdGltZUILCglfZW5kX3RpbWUi2QUKHEdldE5vdGlmaWNhdGlvblN0YXRzUmVzcG9uc2USUgoHc3VjY2VzcxgBIAEoCzI/LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkdldE5vdGlmaWNhdGlvblN0YXRzUmVzcG9uc2UuUmVzdWx0SAASPQoHZmFpbHVyZRgCIAEoDjIqLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkZhaWx1cmVNZXNzYWdlSAAaZAoPU3RhdHVzQnJlYWtkb3duEg4KBmRyYWZ0cxgBIAEoBRIPCgdwbGFubmVkGAIgASgFEhMKC2luX3Byb2dyZXNzGAMgASgFEgwKBHNlbnQYBCABKAUSDQoFZXJyb3IYBSABKAUaPgoQQ2hhbm5lbEJyZWFrZG93bhIOCgZtb2JpbGUYASABKAUSDQoFZW1haWwYAiABKAUSCwoDc21zGAMgASgFGiwKDVRpbWVsaW5lUG9pbnQSDAoEZGF0ZRgBIAEoCRINCgVjb3VudBgCIAEoBRrHAgoGUmVzdWx0EmIKEHN0YXR1c19icmVha2Rvd24YASABKAsySC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXROb3RpZmljYXRpb25TdGF0c1Jlc3BvbnNlLlN0YXR1c0JyZWFrZG93bhJkChFjaGFubmVsX2JyZWFrZG93bhgCIAEoCzJJLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkdldE5vdGlmaWNhdGlvblN0YXRzUmVzcG9uc2UuQ2hhbm5lbEJyZWFrZG93bhJYCgh0aW1lbGluZRgDIAMoCzJGLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkdldE5vdGlmaWNhdGlvblN0YXRzUmVzcG9uc2UuVGltZWxpbmVQb2ludBIZChF0b3RhbF9zdWJzY3JpYmVycxgEIAEoBUIICgZyZXN1bHQqWQoZTm90aWZpY2F0aW9uTWVzc2FnZVN0YXR1cxIJCgVEUkFGVBAAEgsKB1BMQU5ORUQQARIPCgtJTl9QUk9HUkVTUxACEggKBFNFTlQQAxIJCgVFUlJPUhAEKs4BChxOb3RpZmljYXRpb25NZXNzYWdlSm9iU3RhdHVzEigKJE5PVElGSUNBVElPTl9NRVNTQUdFX0pPQl9TVEFUVVNfVE9ETxAAEi8KK05PVElGSUNBVElPTl9NRVNTQUdFX0pPQl9TVEFUVVNfSU5fUFJPR1JFU1MQARIoCiROT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfU1RBVFVTX1NFTlQQAhIpCiVOT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfU1RBVFVTX0VSUk9SEAMqtw4KDkZhaWx1cmVNZXNzYWdlEhsKF0ZBSUxVUkVfTUVTU0FHRV9VTktOT1dOEAASJQohRkFJTFVSRV9NRVNTQUdFX1BST0pFQ1RfTk9UX0ZPVU5EEAESMgouRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9TRVRUSU5HX05PVF9GT1VORBACEjYKMkZBSUxVUkVfTUVTU0FHRV9DUkVBVEVfTk9USUZJQ0FUSU9OX1NFVFRJTkdfRkFJTEVEEAMSNgoyRkFJTFVSRV9NRVNTQUdFX1VQREFURV9OT1RJRklDQVRJT05fU0VUVElOR19GQUlMRUQQBBI2CjJGQUlMVVJFX01FU1NBR0VfREVMRVRFX05PVElGSUNBVElPTl9TRVRUSU5HX0ZBSUxFRBAFEjAKLEZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fR1JPVVBfTk9UX0ZPVU5EEAYSMQotRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9HUk9VUFNfTk9UX0ZPVU5EEAcSNAowRkFJTFVSRV9NRVNTQUdFX0NSRUFURV9OT1RJRklDQVRJT05fR1JPVVBfRkFJTEVEEAgSNAowRkFJTFVSRV9NRVNTQUdFX1VQREFURV9OT1RJRklDQVRJT05fR1JPVVBfRkFJTEVEEAkSNAowRkFJTFVSRV9NRVNTQUdFX0RFTEVURV9OT1RJRklDQVRJT05fR1JPVVBfRkFJTEVEEAoSLworRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9VU0VSX05PVF9GT1VORBALEjAKLEZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fVVNFUlNfTk9UX0ZPVU5EEAwSMwovRkFJTFVSRV9NRVNTQUdFX0NSRUFURV9OT1RJRklDQVRJT05fVVNFUl9GQUlMRUQQDRIzCi9GQUlMVVJFX01FU1NBR0VfVVBEQVRFX05PVElGSUNBVElPTl9VU0VSX0ZBSUxFRBAOEjMKL0ZBSUxVUkVfTUVTU0FHRV9ERUxFVEVfTk9USUZJQ0FUSU9OX1VTRVJfRkFJTEVEEA8SNQoxRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9HUk9VUF9VU0VSX05PVF9GT1VORBAQEjkKNUZBSUxVUkVfTUVTU0FHRV9DUkVBVEVfTk9USUZJQ0FUSU9OX0dST1VQX1VTRVJfRkFJTEVEEBESOQo1RkFJTFVSRV9NRVNTQUdFX1VQREFURV9OT1RJRklDQVRJT05fR1JPVVBfVVNFUl9GQUlMRUQQEhI5CjVGQUlMVVJFX01FU1NBR0VfREVMRVRFX05PVElGSUNBVElPTl9HUk9VUF9VU0VSX0ZBSUxFRBATEjIKLkZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fTUVTU0FHRV9OT1RfRk9VTkQQFBIzCi9GQUlMVVJFX01FU1NBR0VfTk9USUZJQ0FUSU9OX01FU1NBR0VTX05PVF9GT1VORBAVEjYKMkZBSUxVUkVfTUVTU0FHRV9DUkVBVEVfTk9USUZJQ0FUSU9OX01FU1NBR0VfRkFJTEVEEBYSNgoyRkFJTFVSRV9NRVNTQUdFX1VQREFURV9OT1RJRklDQVRJT05fTUVTU0FHRV9GQUlMRUQQFxI2CjJGQUlMVVJFX01FU1NBR0VfREVMRVRFX05PVElGSUNBVElPTl9NRVNTQUdFX0ZBSUxFRBAYEjYKMkZBSUxVUkVfTUVTU0FHRV9OT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfTk9UX0ZPVU5EEBkSNwozRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9NRVNTQUdFX0pPQlNfTk9UX0ZPVU5EEBoSOgo2RkFJTFVSRV9NRVNTQUdFX0NSRUFURV9OT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfRkFJTEVEEBsSOgo2RkFJTFVSRV9NRVNTQUdFX1VQREFURV9OT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfRkFJTEVEEBwSOgo2RkFJTFVSRV9NRVNTQUdFX0RFTEVURV9OT1RJRklDQVRJT05fTUVTU0FHRV9KT0JfRkFJTEVEEB0SNgoyRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9TRVRUSU5HX0FMUkVBRFlfRVhJU1QQHhI7CjdGQUlMVVJFX01FU1NBR0VfTk9USUZJQ0FUSU9OX1NFVFRJTkdfU0xVR19BTFJFQURZX1RBS0VOEB8SMwovRkFJTFVSRV9NRVNTQUdFX05PVElGSUNBVElPTl9VU0VSX0FMUkVBRFlfRVhJU1QQIBI0CjBGQUlMVVJFX01FU1NBR0VfTk9USUZJQ0FUSU9OX0dST1VQX0FMUkVBRFlfRVhJU1QQITLlJAoUTm90aWZpY2F0aW9uc1NlcnZpY2USkgEKGUNyZWF0ZU5vdGlmaWNhdGlvblNldHRpbmcSPC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5DcmVhdGVOb3RpZmljYXRpb25TZXR0aW5nUmVxdWVzdBo3LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZRKSAQoXUmVhZE5vdGlmaWNhdGlvblNldHRpbmcSOi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QaOy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uU2V0dGluZ1Jlc3BvbnNlEpIBChlVcGRhdGVOb3RpZmljYXRpb25TZXR0aW5nEjwuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuVXBkYXRlTm90aWZpY2F0aW9uU2V0dGluZ1JlcXVlc3QaNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25TZXR0aW5nUmVzcG9uc2USkgEKGURlbGV0ZU5vdGlmaWNhdGlvblNldHRpbmcSPC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25TZXR0aW5nUmVxdWVzdBo3LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvblNldHRpbmdSZXNwb25zZRKMAQoXQ3JlYXRlTm90aWZpY2F0aW9uR3JvdXASOi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5DcmVhdGVOb3RpZmljYXRpb25Hcm91cFJlcXVlc3QaNS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Hcm91cFJlc3BvbnNlEo8BChZSZWFkTm90aWZpY2F0aW9uR3JvdXBzEjkuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3Vwc1JlcXVlc3QaOi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uR3JvdXBzUmVzcG9uc2USjAEKF1VwZGF0ZU5vdGlmaWNhdGlvbkdyb3VwEjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuVXBkYXRlTm90aWZpY2F0aW9uR3JvdXBSZXF1ZXN0GjUuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uR3JvdXBSZXNwb25zZRKMAQoXRGVsZXRlTm90aWZpY2F0aW9uR3JvdXASOi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25Hcm91cFJlcXVlc3QaNS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Hcm91cFJlc3BvbnNlEokBChZDcmVhdGVOb3RpZmljYXRpb25Vc2VyEjkuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuQ3JlYXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QaNC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Vc2VyUmVzcG9uc2USjAEKFVJlYWROb3RpZmljYXRpb25Vc2VycxI4LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25Vc2Vyc1JlcXVlc3QaOS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uVXNlcnNSZXNwb25zZRKJAQoWVXBkYXRlTm90aWZpY2F0aW9uVXNlchI5LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZU5vdGlmaWNhdGlvblVzZXJSZXF1ZXN0GjQuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uVXNlclJlc3BvbnNlEokBChZEZWxldGVOb3RpZmljYXRpb25Vc2VyEjkuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRGVsZXRlTm90aWZpY2F0aW9uVXNlclJlcXVlc3QaNC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Vc2VyUmVzcG9uc2USmAEKG0NyZWF0ZU5vdGlmaWNhdGlvbkdyb3VwVXNlchI+LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkNyZWF0ZU5vdGlmaWNhdGlvbkdyb3VwVXNlclJlcXVlc3QaOS5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25Hcm91cFVzZXJSZXNwb25zZRKcAQoaUmVhZE5vdGlmaWNhdGlvbkdyb3VwVXNlcnMSPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uR3JvdXBVc2Vyc1JlcXVlc3RzGj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbkdyb3VwVXNlcnNSZXNwb25zZRKYAQobVXBkYXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyEj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuVXBkYXRlTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVxdWVzdBo5LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbkdyb3VwVXNlclJlc3BvbnNlEpgBChtEZWxldGVOb3RpZmljYXRpb25Hcm91cFVzZXISPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5EZWxldGVOb3RpZmljYXRpb25Hcm91cFVzZXJSZXF1ZXN0GjkuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uR3JvdXBVc2VyUmVzcG9uc2USkgEKGUNyZWF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2USPC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5DcmVhdGVOb3RpZmljYXRpb25NZXNzYWdlUmVxdWVzdBo3LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VSZXNwb25zZRKVAQoYUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VzEjsuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuUmVhZE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVxdWVzdBo8LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25NZXNzYWdlc1Jlc3BvbnNlEp4BChtHZXRTZW50Tm90aWZpY2F0aW9uTWVzc2FnZXMSPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXRTZW50Tm90aWZpY2F0aW9uTWVzc2FnZXNSZXF1ZXN0Gj8uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0U2VudE5vdGlmaWNhdGlvbk1lc3NhZ2VzUmVzcG9uc2USkgEKGVVwZGF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2USPC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5VcGRhdGVOb3RpZmljYXRpb25NZXNzYWdlUmVxdWVzdBo3LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLk5vdGlmaWNhdGlvbk1lc3NhZ2VSZXNwb25zZRKSAQoZRGVsZXRlTm90aWZpY2F0aW9uTWVzc2FnZRI8LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkRlbGV0ZU5vdGlmaWNhdGlvbk1lc3NhZ2VSZXF1ZXN0GjcuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZVJlc3BvbnNlEpsBChxDcmVhdGVOb3RpZmljYXRpb25NZXNzYWdlSm9iEj8uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuQ3JlYXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlcXVlc3QaOi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlSm9iUmVzcG9uc2USngEKG1JlYWROb3RpZmljYXRpb25NZXNzYWdlSm9icxI+LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25NZXNzYWdlSm9ic1JlcXVlc3QaPy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5SZWFkTm90aWZpY2F0aW9uTWVzc2FnZUpvYnNSZXNwb25zZRKbAQocVXBkYXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYhI/LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlVwZGF0ZU5vdGlmaWNhdGlvbk1lc3NhZ2VKb2JSZXF1ZXN0GjouZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlc3BvbnNlEpsBChxEZWxldGVOb3RpZmljYXRpb25NZXNzYWdlSm9iEj8uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuRGVsZXRlTm90aWZpY2F0aW9uTWVzc2FnZUpvYlJlcXVlc3QaOi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5Ob3RpZmljYXRpb25NZXNzYWdlSm9iUmVzcG9uc2UShQEKGFJlYWROb3RpZmljYXRpb25Qcm9kdWN0cxI7LmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlJlYWROb3RpZmljYXRpb25Qcm9kdWN0c1JlcXVlc3QaLC5kYXNoYm9hcmQucHJvZHVjdC52MS5TZWFyY2hQcm9kdWN0c1Jlc3BvbnNlEp4BChtHZXROb3RpZmljYXRpb25Vc2VyU2V0dGluZ3MSPi5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXROb3RpZmljYXRpb25Vc2VyU2V0dGluZ3NSZXF1ZXN0Gj8uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0Tm90aWZpY2F0aW9uVXNlclNldHRpbmdzUmVzcG9uc2USegoPVmVyaWZ5VXNlckVtYWlsEjIuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuVmVyaWZ5VXNlckVtYWlsUmVxdWVzdBozLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLlZlcmlmeVVzZXJFbWFpbFJlc3BvbnNlEnQKDUdldFVzZXJHcm91cHMSMC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXRVc2VyR3JvdXBzUmVxdWVzdBoxLmRhc2hib2FyZC5ub3RpZmljYXRpb25zLnYxLkdldFVzZXJHcm91cHNSZXNwb25zZRJfChBVcGRhdGVVc2VyR3JvdXBzEjMuZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuVXBkYXRlVXNlckdyb3Vwc1JlcXVlc3QaFi5nb29nbGUucHJvdG9idWYuRW1wdHkSmwEKGkdldFByb2plY3RlZFJlY2lwaWVudENvdW50Ej0uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0UHJvamVjdGVkUmVjaXBpZW50Q291bnRSZXF1ZXN0Gj4uZGFzaGJvYXJkLm5vdGlmaWNhdGlvbnMudjEuR2V0UHJvamVjdGVkUmVjaXBpZW50Q291bnRSZXNwb25zZRKJAQoUR2V0Tm90aWZpY2F0aW9uU3RhdHMSNy5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXROb3RpZmljYXRpb25TdGF0c1JlcXVlc3QaOC5kYXNoYm9hcmQubm90aWZpY2F0aW9ucy52MS5HZXROb3RpZmljYXRpb25TdGF0c1Jlc3BvbnNlYgZwcm90bzM",[ae,oe,E,r]);var ce=(e=>(e[e.UNKNOWN=0]="UNKNOWN",e[e.PROJECT_NOT_FOUND=1]="PROJECT_NOT_FOUND",e[e.NOTIFICATION_SETTING_NOT_FOUND=2]="NOTIFICATION_SETTING_NOT_FOUND",e[e.CREATE_NOTIFICATION_SETTING_FAILED=3]="CREATE_NOTIFICATION_SETTING_FAILED",e[e.UPDATE_NOTIFICATION_SETTING_FAILED=4]="UPDATE_NOTIFICATION_SETTING_FAILED",e[e.DELETE_NOTIFICATION_SETTING_FAILED=5]="DELETE_NOTIFICATION_SETTING_FAILED",e[e.NOTIFICATION_GROUP_NOT_FOUND=6]="NOTIFICATION_GROUP_NOT_FOUND",e[e.NOTIFICATION_GROUPS_NOT_FOUND=7]="NOTIFICATION_GROUPS_NOT_FOUND",e[e.CREATE_NOTIFICATION_GROUP_FAILED=8]="CREATE_NOTIFICATION_GROUP_FAILED",e[e.UPDATE_NOTIFICATION_GROUP_FAILED=9]="UPDATE_NOTIFICATION_GROUP_FAILED",e[e.DELETE_NOTIFICATION_GROUP_FAILED=10]="DELETE_NOTIFICATION_GROUP_FAILED",e[e.NOTIFICATION_USER_NOT_FOUND=11]="NOTIFICATION_USER_NOT_FOUND",e[e.NOTIFICATION_USERS_NOT_FOUND=12]="NOTIFICATION_USERS_NOT_FOUND",e[e.CREATE_NOTIFICATION_USER_FAILED=13]="CREATE_NOTIFICATION_USER_FAILED",e[e.UPDATE_NOTIFICATION_USER_FAILED=14]="UPDATE_NOTIFICATION_USER_FAILED",e[e.DELETE_NOTIFICATION_USER_FAILED=15]="DELETE_NOTIFICATION_USER_FAILED",e[e.NOTIFICATION_GROUP_USER_NOT_FOUND=16]="NOTIFICATION_GROUP_USER_NOT_FOUND",e[e.CREATE_NOTIFICATION_GROUP_USER_FAILED=17]="CREATE_NOTIFICATION_GROUP_USER_FAILED",e[e.UPDATE_NOTIFICATION_GROUP_USER_FAILED=18]="UPDATE_NOTIFICATION_GROUP_USER_FAILED",e[e.DELETE_NOTIFICATION_GROUP_USER_FAILED=19]="DELETE_NOTIFICATION_GROUP_USER_FAILED",e[e.NOTIFICATION_MESSAGE_NOT_FOUND=20]="NOTIFICATION_MESSAGE_NOT_FOUND",e[e.NOTIFICATION_MESSAGES_NOT_FOUND=21]="NOTIFICATION_MESSAGES_NOT_FOUND",e[e.CREATE_NOTIFICATION_MESSAGE_FAILED=22]="CREATE_NOTIFICATION_MESSAGE_FAILED",e[e.UPDATE_NOTIFICATION_MESSAGE_FAILED=23]="UPDATE_NOTIFICATION_MESSAGE_FAILED",e[e.DELETE_NOTIFICATION_MESSAGE_FAILED=24]="DELETE_NOTIFICATION_MESSAGE_FAILED",e[e.NOTIFICATION_MESSAGE_JOB_NOT_FOUND=25]="NOTIFICATION_MESSAGE_JOB_NOT_FOUND",e[e.NOTIFICATION_MESSAGE_JOBS_NOT_FOUND=26]="NOTIFICATION_MESSAGE_JOBS_NOT_FOUND",e[e.CREATE_NOTIFICATION_MESSAGE_JOB_FAILED=27]="CREATE_NOTIFICATION_MESSAGE_JOB_FAILED",e[e.UPDATE_NOTIFICATION_MESSAGE_JOB_FAILED=28]="UPDATE_NOTIFICATION_MESSAGE_JOB_FAILED",e[e.DELETE_NOTIFICATION_MESSAGE_JOB_FAILED=29]="DELETE_NOTIFICATION_MESSAGE_JOB_FAILED",e[e.NOTIFICATION_SETTING_ALREADY_EXIST=30]="NOTIFICATION_SETTING_ALREADY_EXIST",e[e.NOTIFICATION_SETTING_SLUG_ALREADY_TAKEN=31]="NOTIFICATION_SETTING_SLUG_ALREADY_TAKEN",e[e.NOTIFICATION_USER_ALREADY_EXIST=32]="NOTIFICATION_USER_ALREADY_EXIST",e[e.NOTIFICATION_GROUP_ALREADY_EXIST=33]="NOTIFICATION_GROUP_ALREADY_EXIST",e))(ce||{});var o=se(ne,0);var ie=o.method.createNotificationSetting,de=o.method.readNotificationSetting,le=o.method.updateNotificationSetting,re=o.method.deleteNotificationSetting,ue=o.method.createNotificationGroup,pe=o.method.readNotificationGroups,Re=o.method.updateNotificationGroup,ge=o.method.deleteNotificationGroup,me=o.method.createNotificationUser,be=o.method.readNotificationUsers,Ge=o.method.updateNotificationUser,Ae=o.method.deleteNotificationUser,Ve=o.method.createNotificationGroupUser,he=o.method.readNotificationGroupUsers,Se=o.method.updateNotificationGroupUser,Ze=o.method.deleteNotificationGroupUser,Ne=o.method.createNotificationMessage,We=o.method.readNotificationMessages,Xe=o.method.getSentNotificationMessages,Ye=o.method.updateNotificationMessage,Ee=o.method.deleteNotificationMessage,Be=o.method.createNotificationMessageJob,ye=o.method.readNotificationMessageJobs,Ue=o.method.updateNotificationMessageJob,Fe=o.method.deleteNotificationMessageJob,fe=o.method.readNotificationProducts,Je=o.method.getNotificationUserSettings,Ie=o.method.verifyUserEmail,Ce=o.method.getUserGroups,ve=o.method.updateUserGroups,ke=o.method.getProjectedRecipientCount,xe=o.method.getNotificationStats;var G={};g(G,{addPublicOrderComment:()=>Wt,applePayValidateMerchant:()=>ht,authorizeOneClickPayment:()=>St,clearAppStoreAccountToken:()=>rt,didBuyProduct:()=>nt,getAppStoreAccountToken:()=>ct,getAppStoreEntitlements:()=>dt,getAvailableCountForProduct:()=>Gt,getGuestCatalog:()=>st,getNotificationHistory:()=>bt,getNotificationSettings:()=>pt,getNotificationSettingsDetails:()=>Rt,getOrder:()=>Me,getOrderForTestimonial:()=>Xt,getOrderRetryUrl:()=>Pe,getOrders:()=>Qe,getPreOrderDetails:()=>Vt,getPublicOrderDetails:()=>Nt,getShopProducts:()=>at,getStoreKitCatalog:()=>ut,getTestimonialUploadUrl:()=>Et,isOneClickPaymentAvailable:()=>At,notifyUserAboutProductAvailability:()=>Zt,pushEvent:()=>$e,pushSendDeviceToken:()=>_e,restoreAppStorePurchases:()=>lt,shouldShopProducts:()=>et,shouldShowGuestCatalog:()=>tt,submitTestimonial:()=>Yt,updateGlobalNotificationSettings:()=>gt,updateNotificationSettings:()=>mt,userPanelDeleteAccount:()=>He,userPanelGetAudiobookDetails:()=>Le,userPanelGetAudiobookDetailsDownloadURLs:()=>De,userPanelGetCourseDetails:()=>Oe,userPanelGetFileDetails:()=>we,userPanelGetProducts:()=>je,userPanelGetTicketDetails:()=>qe,userPanelLogin:()=>Ke,userPanelLoginWithCode:()=>ze,userPanelLogout:()=>Te,userPanelResolveProductAccess:()=>ot,verifyAppStorePurchase:()=>it});var Me=t.method.getOrder,Qe=t.method.getOrders,Pe=t.method.getOrderRetryUrl,Ke=t.method.userPanelLogin,ze=t.method.userPanelLoginWithCode,Te=t.method.userPanelLogout,He=t.method.userPanelDeleteAccount,je=t.method.userPanelGetProducts,Le=t.method.userPanelGetAudiobookDetails,De=t.method.userPanelGetAudiobookDetailsDownloadURLs,we=t.method.userPanelGetFileDetails,qe=t.method.userPanelGetTicketDetails,Oe=t.method.userPanelGetCourseDetails,_e=t.method.pushSendDeviceToken,$e=t.method.pushEvent,et=t.method.shouldShopProducts,tt=t.method.shouldShowGuestCatalog,st=t.method.getGuestCatalog,ot=t.method.userPanelResolveProductAccess,at=t.method.getShopProducts,nt=t.method.didBuyProduct,ct=t.method.getAppStoreAccountToken,it=t.method.verifyAppStorePurchase,dt=t.method.getAppStoreEntitlements,lt=t.method.restoreAppStorePurchases,rt=t.method.clearAppStoreAccountToken,ut=t.method.getStoreKitCatalog,pt=t.method.getNotificationSettings,Rt=t.method.getNotificationSettingsDetails,gt=t.method.updateGlobalNotificationSettings,mt=t.method.updateNotificationSettings,bt=t.method.getNotificationHistory,Gt=t.method.getAvailableCountForProduct,At=t.method.isOneClickPaymentAvailable,Vt=t.method.getPreOrderDetails,ht=t.method.applePayValidateMerchant,St=t.method.authorizeOneClickPayment,Zt=t.method.notifyUserAboutProductAvailability,Nt=t.method.getPublicOrderDetails,Wt=t.method.addPublicOrderComment,Xt=t.method.getOrderForTestimonial,Yt=t.method.submitTestimonial,Et=t.method.getTestimonialUploadUrl;var A={};g(A,{createReturnRequest:()=>Jt,exchangePanelSession:()=>Ut,getMyReturn:()=>Ct,getReturnableOrder:()=>ft,listMyReturns:()=>It,listReturnOrders:()=>Ft,startReturnSession:()=>Bt,verifyReturnSession:()=>yt});var Bt=c.method.startReturnSession,yt=c.method.verifyReturnSession,Ut=c.method.exchangePanelSession,Ft=c.method.listReturnOrders,ft=c.method.getReturnableOrder,Jt=c.method.createReturnRequest,It=c.method.listMyReturns,Ct=c.method.getMyReturn;import{jsx as U}from"react/jsx-runtime";var B,V;BigInt.prototype.toJSON=function(){return this.toString()};var uo={publicApi:G,notifications:b,returns:A},po=xt,Ro=kt,zt;function Tt(){return zt??Z}function F(n){return Mt({baseUrl:n+"/api/rpc",useBinaryFormat:!0,interceptors:[S],fetch:async(s,a)=>fetch(s,{...a,keepalive:!1,credentials:"include"})})}var y=new Map;function go(n){let s=y.get(n);return s==null&&(s=F(n),y.set(n,s)),s}var mo=({children:n})=>{let s=Tt();(V==null||B!==s)&&(B=s,V=F(s));let[a]=Kt(()=>new Qt({defaultOptions:{queries:{staleTime:5e3}}}));return U(vt,{transport:V,children:U(Pt,{client:a,children:n})})};import{cva as Ht}from"class-variance-authority";import{Slot as jt}from"radix-ui";import{jsx as Dt}from"react/jsx-runtime";var Lt=Ht("inline-flex shrink-0 items-center justify-center gap-2 rounded-md text-sm font-medium whitespace-nowrap transition-all outline-none focus-visible:border-ring focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 aria-invalid:border-destructive aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-white hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:bg-destructive/60 dark:focus-visible:ring-destructive/40",outline:"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:border-input dark:bg-input/30 dark:hover:bg-input/50",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-9 px-4 py-2 has-[>svg]:px-3",xs:"h-6 gap-1 rounded-md px-2 text-xs has-[>svg]:px-1.5 [&_svg:not([class*='size-'])]:size-3",sm:"h-8 gap-1.5 rounded-md px-3 has-[>svg]:px-2.5",lg:"h-10 rounded-md px-6 has-[>svg]:px-4",icon:"size-9","icon-xs":"size-6 rounded-md [&_svg:not([class*='size-'])]:size-3","icon-sm":"size-8","icon-lg":"size-10"}},defaultVariants:{variant:"default",size:"default"}});function So({className:n,variant:s="default",size:a="default",asChild:i=!1,...p}){let R=i?jt.Root:"button";return Dt(R,{"data-slot":"button","data-variant":s,"data-size":a,className:d(Lt({variant:s,size:a,className:n})),...p})}import{jsx as wt}from"react/jsx-runtime";function Xo({className:n,type:s,...a}){return wt("input",{type:s,"data-slot":"input",className:d("file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm","focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]","aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive",n),...a})}function qt(n){let s=/^#([0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/i.exec(n);if(s==null)return;let a=s[1];return a.length<=4&&(a=a.split("").map(i=>i+i).join("")),[parseInt(a.slice(0,2),16),parseInt(a.slice(2,4),16),parseInt(a.slice(4,6),16)]}function Ot(n){let s=/^rgba?\(\s*(\d{1,3})[\s,]+(\d{1,3})[\s,]+(\d{1,3})(?:[\s,/]+[\d.%]+)?\s*\)$/i.exec(n);if(s==null)return;let a=[s[1],s[2],s[3]].map(Number);return a.every(i=>i<=255)?a:void 0}function _t(n){let s=n/255;return s<=.03928?s/12.92:((s+.055)/1.055)**2.4}function $t(n){let s=n.trim(),a=qt(s)??Ot(s);if(a==null)return;let[i,p,R]=a.map(_t),h=.2126*i+.7152*p+.0722*R,J=1.05/(h+.05),I=(h+.05)/.05;return J>=I?"#ffffff":"#18181b"}function Bo(n){let s=$t(n);return{buttonBackground:n,focusRing:n,...s!=null?{buttonForeground:s}:{}}}import*as f from"react";import{jsx as ts}from"react/jsx-runtime";var es=f.forwardRef(({className:n,...s},a)=>ts("textarea",{className:d("flex min-h-[60px] w-full rounded-md border border-neutral-200 bg-white px-3 py-2 text-sm ring-offset-white placeholder:text-neutral-500 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-neutral-950 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 dark:border-neutral-800 dark:bg-neutral-950 dark:ring-offset-neutral-950 dark:placeholder:text-neutral-400 dark:focus-visible:ring-neutral-300",n),ref:a,...s}));es.displayName="Textarea";import{jsx as ss}from"react/jsx-runtime";function Io({className:n,...s}){return ss("div",{"data-slot":"skeleton",className:d("bg-accent animate-pulse rounded-md",n),...s})}export{as as a,ns as b,Bs as c,ys as d,Us as e,t as f,ce as g,L as h,c as i,uo as j,po as k,Ro as l,Tt as m,go as n,mo as o,Lt as p,So as q,Xo as r,$t as s,Bo as t,Io as u,es as v};
|
|
2
|
-
//# sourceMappingURL=chunk-2TLWMYXW.mjs.map
|