[ Index ]

PHP Cross Reference of WordPress Trunk (Updated Daily)

Search

title

Body

[close]

/wp-includes/js/dist/script-modules/workflow/ -> index.js (source)

   1  var __create = Object.create;
   2  var __defProp = Object.defineProperty;
   3  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
   4  var __getOwnPropNames = Object.getOwnPropertyNames;
   5  var __getProtoOf = Object.getPrototypeOf;
   6  var __hasOwnProp = Object.prototype.hasOwnProperty;
   7  var __commonJS = (cb, mod) => function __require() {
   8    return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
   9  };
  10  var __copyProps = (to, from, except, desc) => {
  11    if (from && typeof from === "object" || typeof from === "function") {
  12      for (let key of __getOwnPropNames(from))
  13        if (!__hasOwnProp.call(to, key) && key !== except)
  14          __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
  15    }
  16    return to;
  17  };
  18  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
  19    // If the importer is in node compatibility mode or this is not an ESM
  20    // file that has been converted to a CommonJS file using a Babel-
  21    // compatible transform (i.e. "__esModule" has not been set), then set
  22    // "default" to the CommonJS "module.exports" for node compatibility.
  23    isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
  24    mod
  25  ));
  26  
  27  // package-external:@wordpress/element
  28  var require_element = __commonJS({
  29    "package-external:@wordpress/element"(exports, module) {
  30      module.exports = window.wp.element;
  31    }
  32  });
  33  
  34  // vendor-external:react
  35  var require_react = __commonJS({
  36    "vendor-external:react"(exports, module) {
  37      module.exports = window.React;
  38    }
  39  });
  40  
  41  // vendor-external:react/jsx-runtime
  42  var require_jsx_runtime = __commonJS({
  43    "vendor-external:react/jsx-runtime"(exports, module) {
  44      module.exports = window.ReactJSXRuntime;
  45    }
  46  });
  47  
  48  // vendor-external:react-dom
  49  var require_react_dom = __commonJS({
  50    "vendor-external:react-dom"(exports, module) {
  51      module.exports = window.ReactDOM;
  52    }
  53  });
  54  
  55  // package-external:@wordpress/data
  56  var require_data = __commonJS({
  57    "package-external:@wordpress/data"(exports, module) {
  58      module.exports = window.wp.data;
  59    }
  60  });
  61  
  62  // package-external:@wordpress/i18n
  63  var require_i18n = __commonJS({
  64    "package-external:@wordpress/i18n"(exports, module) {
  65      module.exports = window.wp.i18n;
  66    }
  67  });
  68  
  69  // package-external:@wordpress/components
  70  var require_components = __commonJS({
  71    "package-external:@wordpress/components"(exports, module) {
  72      module.exports = window.wp.components;
  73    }
  74  });
  75  
  76  // package-external:@wordpress/keyboard-shortcuts
  77  var require_keyboard_shortcuts = __commonJS({
  78    "package-external:@wordpress/keyboard-shortcuts"(exports, module) {
  79      module.exports = window.wp.keyboardShortcuts;
  80    }
  81  });
  82  
  83  // package-external:@wordpress/primitives
  84  var require_primitives = __commonJS({
  85    "package-external:@wordpress/primitives"(exports, module) {
  86      module.exports = window.wp.primitives;
  87    }
  88  });
  89  
  90  // package-external:@wordpress/private-apis
  91  var require_private_apis = __commonJS({
  92    "package-external:@wordpress/private-apis"(exports, module) {
  93      module.exports = window.wp.privateApis;
  94    }
  95  });
  96  
  97  // packages/workflow/build-module/index.js
  98  var import_element3 = __toESM(require_element());
  99  
 100  // node_modules/cmdk/dist/chunk-NZJY6EH4.mjs
 101  var U = 1;
 102  var Y = 0.9;
 103  var H = 0.8;
 104  var J = 0.17;
 105  var p = 0.1;
 106  var u = 0.999;
 107  var $ = 0.9999;
 108  var k = 0.99;
 109  var m = /[\\\/_+.#"@\[\(\{&]/;
 110  var B = /[\\\/_+.#"@\[\(\{&]/g;
 111  var K = /[\s-]/;
 112  var X = /[\s-]/g;
 113  function G(_, C, h, P2, A, f, O) {
 114    if (f === C.length) return A === _.length ? U : k;
 115    var T2 = `$A},$f}`;
 116    if (O[T2] !== void 0) return O[T2];
 117    for (var L2 = P2.charAt(f), c = h.indexOf(L2, A), S = 0, E, N2, R, M; c >= 0; ) E = G(_, C, h, P2, c + 1, f + 1, O), E > S && (c === A ? E *= U : m.test(_.charAt(c - 1)) ? (E *= H, R = _.slice(A, c - 1).match(B), R && A > 0 && (E *= Math.pow(u, R.length))) : K.test(_.charAt(c - 1)) ? (E *= Y, M = _.slice(A, c - 1).match(X), M && A > 0 && (E *= Math.pow(u, M.length))) : (E *= J, A > 0 && (E *= Math.pow(u, c - A))), _.charAt(c) !== C.charAt(f) && (E *= $)), (E < p && h.charAt(c - 1) === P2.charAt(f + 1) || P2.charAt(f + 1) === P2.charAt(f) && h.charAt(c - 1) !== P2.charAt(f)) && (N2 = G(_, C, h, P2, c + 1, f + 2, O), N2 * p > E && (E = N2 * p)), E > S && (S = E), c = h.indexOf(L2, c + 1);
 118    return O[T2] = S, S;
 119  }
 120  function D(_) {
 121    return _.toLowerCase().replace(X, " ");
 122  }
 123  function W(_, C, h) {
 124    return _ = h && h.length > 0 ? `$_ + " " + h.join(" ")}` : _, G(_, C, D(_), D(C), 0, 0, {});
 125  }
 126  
 127  // node_modules/@radix-ui/react-dialog/dist/index.mjs
 128  var React37 = __toESM(require_react(), 1);
 129  
 130  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/primitive/dist/index.mjs
 131  var canUseDOM = !!(typeof window !== "undefined" && window.document && window.document.createElement);
 132  function composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
 133    return function handleEvent(event) {
 134      originalEventHandler?.(event);
 135      if (checkForDefaultPrevented === false || !event.defaultPrevented) {
 136        return ourEventHandler?.(event);
 137      }
 138    };
 139  }
 140  
 141  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
 142  var React = __toESM(require_react(), 1);
 143  function setRef(ref, value) {
 144    if (typeof ref === "function") {
 145      return ref(value);
 146    } else if (ref !== null && ref !== void 0) {
 147      ref.current = value;
 148    }
 149  }
 150  function composeRefs(...refs) {
 151    return (node) => {
 152      let hasCleanup = false;
 153      const cleanups = refs.map((ref) => {
 154        const cleanup = setRef(ref, node);
 155        if (!hasCleanup && typeof cleanup == "function") {
 156          hasCleanup = true;
 157        }
 158        return cleanup;
 159      });
 160      if (hasCleanup) {
 161        return () => {
 162          for (let i = 0; i < cleanups.length; i++) {
 163            const cleanup = cleanups[i];
 164            if (typeof cleanup == "function") {
 165              cleanup();
 166            } else {
 167              setRef(refs[i], null);
 168            }
 169          }
 170        };
 171      }
 172    };
 173  }
 174  function useComposedRefs(...refs) {
 175    return React.useCallback(composeRefs(...refs), refs);
 176  }
 177  
 178  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-context/dist/index.mjs
 179  var React2 = __toESM(require_react(), 1);
 180  var import_jsx_runtime = __toESM(require_jsx_runtime(), 1);
 181  function createContext2(rootComponentName, defaultContext) {
 182    const Context = React2.createContext(defaultContext);
 183    const Provider = (props) => {
 184      const { children, ...context } = props;
 185      const value = React2.useMemo(() => context, Object.values(context));
 186      return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Context.Provider, { value, children });
 187    };
 188    Provider.displayName = rootComponentName + "Provider";
 189    function useContext22(consumerName) {
 190      const context = React2.useContext(Context);
 191      if (context) return context;
 192      if (defaultContext !== void 0) return defaultContext;
 193      throw new Error(`\`$consumerName}\` must be used within \`$rootComponentName}\``);
 194    }
 195    return [Provider, useContext22];
 196  }
 197  function createContextScope(scopeName, createContextScopeDeps = []) {
 198    let defaultContexts = [];
 199    function createContext32(rootComponentName, defaultContext) {
 200      const BaseContext = React2.createContext(defaultContext);
 201      const index = defaultContexts.length;
 202      defaultContexts = [...defaultContexts, defaultContext];
 203      const Provider = (props) => {
 204        const { scope, children, ...context } = props;
 205        const Context = scope?.[scopeName]?.[index] || BaseContext;
 206        const value = React2.useMemo(() => context, Object.values(context));
 207        return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Context.Provider, { value, children });
 208      };
 209      Provider.displayName = rootComponentName + "Provider";
 210      function useContext22(consumerName, scope) {
 211        const Context = scope?.[scopeName]?.[index] || BaseContext;
 212        const context = React2.useContext(Context);
 213        if (context) return context;
 214        if (defaultContext !== void 0) return defaultContext;
 215        throw new Error(`\`$consumerName}\` must be used within \`$rootComponentName}\``);
 216      }
 217      return [Provider, useContext22];
 218    }
 219    const createScope = () => {
 220      const scopeContexts = defaultContexts.map((defaultContext) => {
 221        return React2.createContext(defaultContext);
 222      });
 223      return function useScope(scope) {
 224        const contexts = scope?.[scopeName] || scopeContexts;
 225        return React2.useMemo(
 226          () => ({ [`__scope$scopeName}`]: { ...scope, [scopeName]: contexts } }),
 227          [scope, contexts]
 228        );
 229      };
 230    };
 231    createScope.scopeName = scopeName;
 232    return [createContext32, composeContextScopes(createScope, ...createContextScopeDeps)];
 233  }
 234  function composeContextScopes(...scopes) {
 235    const baseScope = scopes[0];
 236    if (scopes.length === 1) return baseScope;
 237    const createScope = () => {
 238      const scopeHooks = scopes.map((createScope2) => ({
 239        useScope: createScope2(),
 240        scopeName: createScope2.scopeName
 241      }));
 242      return function useComposedScopes(overrideScopes) {
 243        const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {
 244          const scopeProps = useScope(overrideScopes);
 245          const currentScope = scopeProps[`__scope$scopeName}`];
 246          return { ...nextScopes2, ...currentScope };
 247        }, {});
 248        return React2.useMemo(() => ({ [`__scope$baseScope.scopeName}`]: nextScopes }), [nextScopes]);
 249      };
 250    };
 251    createScope.scopeName = baseScope.scopeName;
 252    return createScope;
 253  }
 254  
 255  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-id/dist/index.mjs
 256  var React4 = __toESM(require_react(), 1);
 257  
 258  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
 259  var React3 = __toESM(require_react(), 1);
 260  var useLayoutEffect2 = globalThis?.document ? React3.useLayoutEffect : () => {
 261  };
 262  
 263  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-id/dist/index.mjs
 264  var useReactId = React4[" useId ".trim().toString()] || (() => void 0);
 265  var count = 0;
 266  function useId(deterministicId) {
 267    const [id, setId] = React4.useState(useReactId());
 268    useLayoutEffect2(() => {
 269      if (!deterministicId) setId((reactId) => reactId ?? String(count++));
 270    }, [deterministicId]);
 271    return deterministicId || (id ? `radix-$id}` : "");
 272  }
 273  
 274  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs
 275  var React5 = __toESM(require_react(), 1);
 276  var React22 = __toESM(require_react(), 1);
 277  var useInsertionEffect = React5[" useInsertionEffect ".trim().toString()] || useLayoutEffect2;
 278  function useControllableState({
 279    prop,
 280    defaultProp,
 281    onChange = () => {
 282    },
 283    caller
 284  }) {
 285    const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({
 286      defaultProp,
 287      onChange
 288    });
 289    const isControlled = prop !== void 0;
 290    const value = isControlled ? prop : uncontrolledProp;
 291    if (true) {
 292      const isControlledRef = React5.useRef(prop !== void 0);
 293      React5.useEffect(() => {
 294        const wasControlled = isControlledRef.current;
 295        if (wasControlled !== isControlled) {
 296          const from = wasControlled ? "controlled" : "uncontrolled";
 297          const to = isControlled ? "controlled" : "uncontrolled";
 298          console.warn(
 299            `$caller} is changing from $from} to $to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`
 300          );
 301        }
 302        isControlledRef.current = isControlled;
 303      }, [isControlled, caller]);
 304    }
 305    const setValue = React5.useCallback(
 306      (nextValue) => {
 307        if (isControlled) {
 308          const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;
 309          if (value2 !== prop) {
 310            onChangeRef.current?.(value2);
 311          }
 312        } else {
 313          setUncontrolledProp(nextValue);
 314        }
 315      },
 316      [isControlled, prop, setUncontrolledProp, onChangeRef]
 317    );
 318    return [value, setValue];
 319  }
 320  function useUncontrolledState({
 321    defaultProp,
 322    onChange
 323  }) {
 324    const [value, setValue] = React5.useState(defaultProp);
 325    const prevValueRef = React5.useRef(value);
 326    const onChangeRef = React5.useRef(onChange);
 327    useInsertionEffect(() => {
 328      onChangeRef.current = onChange;
 329    }, [onChange]);
 330    React5.useEffect(() => {
 331      if (prevValueRef.current !== value) {
 332        onChangeRef.current?.(value);
 333        prevValueRef.current = value;
 334      }
 335    }, [value, prevValueRef]);
 336    return [value, setValue, onChangeRef];
 337  }
 338  function isFunction(value) {
 339    return typeof value === "function";
 340  }
 341  var SYNC_STATE = Symbol("RADIX:SYNC_STATE");
 342  
 343  // node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs
 344  var React11 = __toESM(require_react(), 1);
 345  
 346  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/primitive/dist/index.mjs
 347  var canUseDOM2 = !!(typeof window !== "undefined" && window.document && window.document.createElement);
 348  function composeEventHandlers2(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {
 349    return function handleEvent(event) {
 350      originalEventHandler?.(event);
 351      if (checkForDefaultPrevented === false || !event.defaultPrevented) {
 352        return ourEventHandler?.(event);
 353      }
 354    };
 355  }
 356  
 357  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive/dist/index.mjs
 358  var React8 = __toESM(require_react(), 1);
 359  var ReactDOM = __toESM(require_react_dom(), 1);
 360  
 361  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot/dist/index.mjs
 362  var React7 = __toESM(require_react(), 1);
 363  
 364  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
 365  var React6 = __toESM(require_react(), 1);
 366  function setRef2(ref, value) {
 367    if (typeof ref === "function") {
 368      return ref(value);
 369    } else if (ref !== null && ref !== void 0) {
 370      ref.current = value;
 371    }
 372  }
 373  function composeRefs2(...refs) {
 374    return (node) => {
 375      let hasCleanup = false;
 376      const cleanups = refs.map((ref) => {
 377        const cleanup = setRef2(ref, node);
 378        if (!hasCleanup && typeof cleanup == "function") {
 379          hasCleanup = true;
 380        }
 381        return cleanup;
 382      });
 383      if (hasCleanup) {
 384        return () => {
 385          for (let i = 0; i < cleanups.length; i++) {
 386            const cleanup = cleanups[i];
 387            if (typeof cleanup == "function") {
 388              cleanup();
 389            } else {
 390              setRef2(refs[i], null);
 391            }
 392          }
 393        };
 394      }
 395    };
 396  }
 397  function useComposedRefs2(...refs) {
 398    return React6.useCallback(composeRefs2(...refs), refs);
 399  }
 400  
 401  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-slot/dist/index.mjs
 402  var import_jsx_runtime2 = __toESM(require_jsx_runtime(), 1);
 403  // @__NO_SIDE_EFFECTS__
 404  function createSlot(ownerName) {
 405    const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);
 406    const Slot2 = React7.forwardRef((props, forwardedRef) => {
 407      const { children, ...slotProps } = props;
 408      const childrenArray = React7.Children.toArray(children);
 409      const slottable = childrenArray.find(isSlottable);
 410      if (slottable) {
 411        const newElement = slottable.props.children;
 412        const newChildren = childrenArray.map((child) => {
 413          if (child === slottable) {
 414            if (React7.Children.count(newElement) > 1) return React7.Children.only(null);
 415            return React7.isValidElement(newElement) ? newElement.props.children : null;
 416          } else {
 417            return child;
 418          }
 419        });
 420        return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React7.isValidElement(newElement) ? React7.cloneElement(newElement, void 0, newChildren) : null });
 421      }
 422      return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children });
 423    });
 424    Slot2.displayName = `$ownerName}.Slot`;
 425    return Slot2;
 426  }
 427  // @__NO_SIDE_EFFECTS__
 428  function createSlotClone(ownerName) {
 429    const SlotClone = React7.forwardRef((props, forwardedRef) => {
 430      const { children, ...slotProps } = props;
 431      if (React7.isValidElement(children)) {
 432        const childrenRef = getElementRef(children);
 433        const props2 = mergeProps(slotProps, children.props);
 434        if (children.type !== React7.Fragment) {
 435          props2.ref = forwardedRef ? composeRefs2(forwardedRef, childrenRef) : childrenRef;
 436        }
 437        return React7.cloneElement(children, props2);
 438      }
 439      return React7.Children.count(children) > 1 ? React7.Children.only(null) : null;
 440    });
 441    SlotClone.displayName = `$ownerName}.SlotClone`;
 442    return SlotClone;
 443  }
 444  var SLOTTABLE_IDENTIFIER = Symbol("radix.slottable");
 445  function isSlottable(child) {
 446    return React7.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;
 447  }
 448  function mergeProps(slotProps, childProps) {
 449    const overrideProps = { ...childProps };
 450    for (const propName in childProps) {
 451      const slotPropValue = slotProps[propName];
 452      const childPropValue = childProps[propName];
 453      const isHandler = /^on[A-Z]/.test(propName);
 454      if (isHandler) {
 455        if (slotPropValue && childPropValue) {
 456          overrideProps[propName] = (...args) => {
 457            const result = childPropValue(...args);
 458            slotPropValue(...args);
 459            return result;
 460          };
 461        } else if (slotPropValue) {
 462          overrideProps[propName] = slotPropValue;
 463        }
 464      } else if (propName === "style") {
 465        overrideProps[propName] = { ...slotPropValue, ...childPropValue };
 466      } else if (propName === "className") {
 467        overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
 468      }
 469    }
 470    return { ...slotProps, ...overrideProps };
 471  }
 472  function getElementRef(element) {
 473    let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
 474    let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
 475    if (mayWarn) {
 476      return element.ref;
 477    }
 478    getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
 479    mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
 480    if (mayWarn) {
 481      return element.props.ref;
 482    }
 483    return element.props.ref || element.ref;
 484  }
 485  
 486  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-primitive/dist/index.mjs
 487  var import_jsx_runtime3 = __toESM(require_jsx_runtime(), 1);
 488  var NODES = [
 489    "a",
 490    "button",
 491    "div",
 492    "form",
 493    "h2",
 494    "h3",
 495    "img",
 496    "input",
 497    "label",
 498    "li",
 499    "nav",
 500    "ol",
 501    "p",
 502    "select",
 503    "span",
 504    "svg",
 505    "ul"
 506  ];
 507  var Primitive = NODES.reduce((primitive, node) => {
 508    const Slot2 = createSlot(`Primitive.$node}`);
 509    const Node2 = React8.forwardRef((props, forwardedRef) => {
 510      const { asChild, ...primitiveProps } = props;
 511      const Comp = asChild ? Slot2 : node;
 512      if (typeof window !== "undefined") {
 513        window[Symbol.for("radix-ui")] = true;
 514      }
 515      return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(Comp, { ...primitiveProps, ref: forwardedRef });
 516    });
 517    Node2.displayName = `Primitive.$node}`;
 518    return { ...primitive, [node]: Node2 };
 519  }, {});
 520  function dispatchDiscreteCustomEvent(target, event) {
 521    if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));
 522  }
 523  
 524  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs
 525  var React9 = __toESM(require_react(), 1);
 526  function useCallbackRef(callback) {
 527    const callbackRef = React9.useRef(callback);
 528    React9.useEffect(() => {
 529      callbackRef.current = callback;
 530    });
 531    return React9.useMemo(() => (...args) => callbackRef.current?.(...args), []);
 532  }
 533  
 534  // node_modules/@radix-ui/react-dismissable-layer/node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs
 535  var React10 = __toESM(require_react(), 1);
 536  function useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {
 537    const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);
 538    React10.useEffect(() => {
 539      const handleKeyDown = (event) => {
 540        if (event.key === "Escape") {
 541          onEscapeKeyDown(event);
 542        }
 543      };
 544      ownerDocument.addEventListener("keydown", handleKeyDown, { capture: true });
 545      return () => ownerDocument.removeEventListener("keydown", handleKeyDown, { capture: true });
 546    }, [onEscapeKeyDown, ownerDocument]);
 547  }
 548  
 549  // node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs
 550  var import_jsx_runtime4 = __toESM(require_jsx_runtime(), 1);
 551  var DISMISSABLE_LAYER_NAME = "DismissableLayer";
 552  var CONTEXT_UPDATE = "dismissableLayer.update";
 553  var POINTER_DOWN_OUTSIDE = "dismissableLayer.pointerDownOutside";
 554  var FOCUS_OUTSIDE = "dismissableLayer.focusOutside";
 555  var originalBodyPointerEvents;
 556  var DismissableLayerContext = React11.createContext({
 557    layers: /* @__PURE__ */ new Set(),
 558    layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),
 559    branches: /* @__PURE__ */ new Set()
 560  });
 561  var DismissableLayer = React11.forwardRef(
 562    (props, forwardedRef) => {
 563      const {
 564        disableOutsidePointerEvents = false,
 565        onEscapeKeyDown,
 566        onPointerDownOutside,
 567        onFocusOutside,
 568        onInteractOutside,
 569        onDismiss,
 570        ...layerProps
 571      } = props;
 572      const context = React11.useContext(DismissableLayerContext);
 573      const [node, setNode] = React11.useState(null);
 574      const ownerDocument = node?.ownerDocument ?? globalThis?.document;
 575      const [, force] = React11.useState({});
 576      const composedRefs = useComposedRefs2(forwardedRef, (node2) => setNode(node2));
 577      const layers = Array.from(context.layers);
 578      const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);
 579      const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);
 580      const index = node ? layers.indexOf(node) : -1;
 581      const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;
 582      const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;
 583      const pointerDownOutside = usePointerDownOutside((event) => {
 584        const target = event.target;
 585        const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));
 586        if (!isPointerEventsEnabled || isPointerDownOnBranch) return;
 587        onPointerDownOutside?.(event);
 588        onInteractOutside?.(event);
 589        if (!event.defaultPrevented) onDismiss?.();
 590      }, ownerDocument);
 591      const focusOutside = useFocusOutside((event) => {
 592        const target = event.target;
 593        const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));
 594        if (isFocusInBranch) return;
 595        onFocusOutside?.(event);
 596        onInteractOutside?.(event);
 597        if (!event.defaultPrevented) onDismiss?.();
 598      }, ownerDocument);
 599      useEscapeKeydown((event) => {
 600        const isHighestLayer = index === context.layers.size - 1;
 601        if (!isHighestLayer) return;
 602        onEscapeKeyDown?.(event);
 603        if (!event.defaultPrevented && onDismiss) {
 604          event.preventDefault();
 605          onDismiss();
 606        }
 607      }, ownerDocument);
 608      React11.useEffect(() => {
 609        if (!node) return;
 610        if (disableOutsidePointerEvents) {
 611          if (context.layersWithOutsidePointerEventsDisabled.size === 0) {
 612            originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;
 613            ownerDocument.body.style.pointerEvents = "none";
 614          }
 615          context.layersWithOutsidePointerEventsDisabled.add(node);
 616        }
 617        context.layers.add(node);
 618        dispatchUpdate();
 619        return () => {
 620          if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {
 621            ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;
 622          }
 623        };
 624      }, [node, ownerDocument, disableOutsidePointerEvents, context]);
 625      React11.useEffect(() => {
 626        return () => {
 627          if (!node) return;
 628          context.layers.delete(node);
 629          context.layersWithOutsidePointerEventsDisabled.delete(node);
 630          dispatchUpdate();
 631        };
 632      }, [node, context]);
 633      React11.useEffect(() => {
 634        const handleUpdate = () => force({});
 635        document.addEventListener(CONTEXT_UPDATE, handleUpdate);
 636        return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);
 637      }, []);
 638      return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
 639        Primitive.div,
 640        {
 641          ...layerProps,
 642          ref: composedRefs,
 643          style: {
 644            pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? "auto" : "none" : void 0,
 645            ...props.style
 646          },
 647          onFocusCapture: composeEventHandlers2(props.onFocusCapture, focusOutside.onFocusCapture),
 648          onBlurCapture: composeEventHandlers2(props.onBlurCapture, focusOutside.onBlurCapture),
 649          onPointerDownCapture: composeEventHandlers2(
 650            props.onPointerDownCapture,
 651            pointerDownOutside.onPointerDownCapture
 652          )
 653        }
 654      );
 655    }
 656  );
 657  DismissableLayer.displayName = DISMISSABLE_LAYER_NAME;
 658  var BRANCH_NAME = "DismissableLayerBranch";
 659  var DismissableLayerBranch = React11.forwardRef((props, forwardedRef) => {
 660    const context = React11.useContext(DismissableLayerContext);
 661    const ref = React11.useRef(null);
 662    const composedRefs = useComposedRefs2(forwardedRef, ref);
 663    React11.useEffect(() => {
 664      const node = ref.current;
 665      if (node) {
 666        context.branches.add(node);
 667        return () => {
 668          context.branches.delete(node);
 669        };
 670      }
 671    }, [context.branches]);
 672    return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(Primitive.div, { ...props, ref: composedRefs });
 673  });
 674  DismissableLayerBranch.displayName = BRANCH_NAME;
 675  function usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {
 676    const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);
 677    const isPointerInsideReactTreeRef = React11.useRef(false);
 678    const handleClickRef = React11.useRef(() => {
 679    });
 680    React11.useEffect(() => {
 681      const handlePointerDown = (event) => {
 682        if (event.target && !isPointerInsideReactTreeRef.current) {
 683          let handleAndDispatchPointerDownOutsideEvent2 = function() {
 684            handleAndDispatchCustomEvent(
 685              POINTER_DOWN_OUTSIDE,
 686              handlePointerDownOutside,
 687              eventDetail,
 688              { discrete: true }
 689            );
 690          };
 691          var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;
 692          const eventDetail = { originalEvent: event };
 693          if (event.pointerType === "touch") {
 694            ownerDocument.removeEventListener("click", handleClickRef.current);
 695            handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;
 696            ownerDocument.addEventListener("click", handleClickRef.current, { once: true });
 697          } else {
 698            handleAndDispatchPointerDownOutsideEvent2();
 699          }
 700        } else {
 701          ownerDocument.removeEventListener("click", handleClickRef.current);
 702        }
 703        isPointerInsideReactTreeRef.current = false;
 704      };
 705      const timerId = window.setTimeout(() => {
 706        ownerDocument.addEventListener("pointerdown", handlePointerDown);
 707      }, 0);
 708      return () => {
 709        window.clearTimeout(timerId);
 710        ownerDocument.removeEventListener("pointerdown", handlePointerDown);
 711        ownerDocument.removeEventListener("click", handleClickRef.current);
 712      };
 713    }, [ownerDocument, handlePointerDownOutside]);
 714    return {
 715      // ensures we check React component tree (not just DOM tree)
 716      onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true
 717    };
 718  }
 719  function useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {
 720    const handleFocusOutside = useCallbackRef(onFocusOutside);
 721    const isFocusInsideReactTreeRef = React11.useRef(false);
 722    React11.useEffect(() => {
 723      const handleFocus = (event) => {
 724        if (event.target && !isFocusInsideReactTreeRef.current) {
 725          const eventDetail = { originalEvent: event };
 726          handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {
 727            discrete: false
 728          });
 729        }
 730      };
 731      ownerDocument.addEventListener("focusin", handleFocus);
 732      return () => ownerDocument.removeEventListener("focusin", handleFocus);
 733    }, [ownerDocument, handleFocusOutside]);
 734    return {
 735      onFocusCapture: () => isFocusInsideReactTreeRef.current = true,
 736      onBlurCapture: () => isFocusInsideReactTreeRef.current = false
 737    };
 738  }
 739  function dispatchUpdate() {
 740    const event = new CustomEvent(CONTEXT_UPDATE);
 741    document.dispatchEvent(event);
 742  }
 743  function handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {
 744    const target = detail.originalEvent.target;
 745    const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });
 746    if (handler) target.addEventListener(name, handler, { once: true });
 747    if (discrete) {
 748      dispatchDiscreteCustomEvent(target, event);
 749    } else {
 750      target.dispatchEvent(event);
 751    }
 752  }
 753  
 754  // node_modules/@radix-ui/react-focus-scope/dist/index.mjs
 755  var React16 = __toESM(require_react(), 1);
 756  
 757  // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
 758  var React12 = __toESM(require_react(), 1);
 759  function setRef3(ref, value) {
 760    if (typeof ref === "function") {
 761      return ref(value);
 762    } else if (ref !== null && ref !== void 0) {
 763      ref.current = value;
 764    }
 765  }
 766  function composeRefs3(...refs) {
 767    return (node) => {
 768      let hasCleanup = false;
 769      const cleanups = refs.map((ref) => {
 770        const cleanup = setRef3(ref, node);
 771        if (!hasCleanup && typeof cleanup == "function") {
 772          hasCleanup = true;
 773        }
 774        return cleanup;
 775      });
 776      if (hasCleanup) {
 777        return () => {
 778          for (let i = 0; i < cleanups.length; i++) {
 779            const cleanup = cleanups[i];
 780            if (typeof cleanup == "function") {
 781              cleanup();
 782            } else {
 783              setRef3(refs[i], null);
 784            }
 785          }
 786        };
 787      }
 788    };
 789  }
 790  function useComposedRefs3(...refs) {
 791    return React12.useCallback(composeRefs3(...refs), refs);
 792  }
 793  
 794  // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive/dist/index.mjs
 795  var React14 = __toESM(require_react(), 1);
 796  var ReactDOM2 = __toESM(require_react_dom(), 1);
 797  
 798  // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-slot/dist/index.mjs
 799  var React13 = __toESM(require_react(), 1);
 800  var import_jsx_runtime5 = __toESM(require_jsx_runtime(), 1);
 801  // @__NO_SIDE_EFFECTS__
 802  function createSlot2(ownerName) {
 803    const SlotClone = /* @__PURE__ */ createSlotClone2(ownerName);
 804    const Slot2 = React13.forwardRef((props, forwardedRef) => {
 805      const { children, ...slotProps } = props;
 806      const childrenArray = React13.Children.toArray(children);
 807      const slottable = childrenArray.find(isSlottable2);
 808      if (slottable) {
 809        const newElement = slottable.props.children;
 810        const newChildren = childrenArray.map((child) => {
 811          if (child === slottable) {
 812            if (React13.Children.count(newElement) > 1) return React13.Children.only(null);
 813            return React13.isValidElement(newElement) ? newElement.props.children : null;
 814          } else {
 815            return child;
 816          }
 817        });
 818        return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React13.isValidElement(newElement) ? React13.cloneElement(newElement, void 0, newChildren) : null });
 819      }
 820      return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children });
 821    });
 822    Slot2.displayName = `$ownerName}.Slot`;
 823    return Slot2;
 824  }
 825  // @__NO_SIDE_EFFECTS__
 826  function createSlotClone2(ownerName) {
 827    const SlotClone = React13.forwardRef((props, forwardedRef) => {
 828      const { children, ...slotProps } = props;
 829      if (React13.isValidElement(children)) {
 830        const childrenRef = getElementRef2(children);
 831        const props2 = mergeProps2(slotProps, children.props);
 832        if (children.type !== React13.Fragment) {
 833          props2.ref = forwardedRef ? composeRefs3(forwardedRef, childrenRef) : childrenRef;
 834        }
 835        return React13.cloneElement(children, props2);
 836      }
 837      return React13.Children.count(children) > 1 ? React13.Children.only(null) : null;
 838    });
 839    SlotClone.displayName = `$ownerName}.SlotClone`;
 840    return SlotClone;
 841  }
 842  var SLOTTABLE_IDENTIFIER2 = Symbol("radix.slottable");
 843  function isSlottable2(child) {
 844    return React13.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER2;
 845  }
 846  function mergeProps2(slotProps, childProps) {
 847    const overrideProps = { ...childProps };
 848    for (const propName in childProps) {
 849      const slotPropValue = slotProps[propName];
 850      const childPropValue = childProps[propName];
 851      const isHandler = /^on[A-Z]/.test(propName);
 852      if (isHandler) {
 853        if (slotPropValue && childPropValue) {
 854          overrideProps[propName] = (...args) => {
 855            const result = childPropValue(...args);
 856            slotPropValue(...args);
 857            return result;
 858          };
 859        } else if (slotPropValue) {
 860          overrideProps[propName] = slotPropValue;
 861        }
 862      } else if (propName === "style") {
 863        overrideProps[propName] = { ...slotPropValue, ...childPropValue };
 864      } else if (propName === "className") {
 865        overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
 866      }
 867    }
 868    return { ...slotProps, ...overrideProps };
 869  }
 870  function getElementRef2(element) {
 871    let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
 872    let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
 873    if (mayWarn) {
 874      return element.ref;
 875    }
 876    getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
 877    mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
 878    if (mayWarn) {
 879      return element.props.ref;
 880    }
 881    return element.props.ref || element.ref;
 882  }
 883  
 884  // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-primitive/dist/index.mjs
 885  var import_jsx_runtime6 = __toESM(require_jsx_runtime(), 1);
 886  var NODES2 = [
 887    "a",
 888    "button",
 889    "div",
 890    "form",
 891    "h2",
 892    "h3",
 893    "img",
 894    "input",
 895    "label",
 896    "li",
 897    "nav",
 898    "ol",
 899    "p",
 900    "select",
 901    "span",
 902    "svg",
 903    "ul"
 904  ];
 905  var Primitive2 = NODES2.reduce((primitive, node) => {
 906    const Slot2 = createSlot2(`Primitive.$node}`);
 907    const Node2 = React14.forwardRef((props, forwardedRef) => {
 908      const { asChild, ...primitiveProps } = props;
 909      const Comp = asChild ? Slot2 : node;
 910      if (typeof window !== "undefined") {
 911        window[Symbol.for("radix-ui")] = true;
 912      }
 913      return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(Comp, { ...primitiveProps, ref: forwardedRef });
 914    });
 915    Node2.displayName = `Primitive.$node}`;
 916    return { ...primitive, [node]: Node2 };
 917  }, {});
 918  
 919  // node_modules/@radix-ui/react-focus-scope/node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs
 920  var React15 = __toESM(require_react(), 1);
 921  function useCallbackRef2(callback) {
 922    const callbackRef = React15.useRef(callback);
 923    React15.useEffect(() => {
 924      callbackRef.current = callback;
 925    });
 926    return React15.useMemo(() => (...args) => callbackRef.current?.(...args), []);
 927  }
 928  
 929  // node_modules/@radix-ui/react-focus-scope/dist/index.mjs
 930  var import_jsx_runtime7 = __toESM(require_jsx_runtime(), 1);
 931  var AUTOFOCUS_ON_MOUNT = "focusScope.autoFocusOnMount";
 932  var AUTOFOCUS_ON_UNMOUNT = "focusScope.autoFocusOnUnmount";
 933  var EVENT_OPTIONS = { bubbles: false, cancelable: true };
 934  var FOCUS_SCOPE_NAME = "FocusScope";
 935  var FocusScope = React16.forwardRef((props, forwardedRef) => {
 936    const {
 937      loop = false,
 938      trapped = false,
 939      onMountAutoFocus: onMountAutoFocusProp,
 940      onUnmountAutoFocus: onUnmountAutoFocusProp,
 941      ...scopeProps
 942    } = props;
 943    const [container, setContainer] = React16.useState(null);
 944    const onMountAutoFocus = useCallbackRef2(onMountAutoFocusProp);
 945    const onUnmountAutoFocus = useCallbackRef2(onUnmountAutoFocusProp);
 946    const lastFocusedElementRef = React16.useRef(null);
 947    const composedRefs = useComposedRefs3(forwardedRef, (node) => setContainer(node));
 948    const focusScope = React16.useRef({
 949      paused: false,
 950      pause() {
 951        this.paused = true;
 952      },
 953      resume() {
 954        this.paused = false;
 955      }
 956    }).current;
 957    React16.useEffect(() => {
 958      if (trapped) {
 959        let handleFocusIn2 = function(event) {
 960          if (focusScope.paused || !container) return;
 961          const target = event.target;
 962          if (container.contains(target)) {
 963            lastFocusedElementRef.current = target;
 964          } else {
 965            focus(lastFocusedElementRef.current, { select: true });
 966          }
 967        }, handleFocusOut2 = function(event) {
 968          if (focusScope.paused || !container) return;
 969          const relatedTarget = event.relatedTarget;
 970          if (relatedTarget === null) return;
 971          if (!container.contains(relatedTarget)) {
 972            focus(lastFocusedElementRef.current, { select: true });
 973          }
 974        }, handleMutations2 = function(mutations) {
 975          const focusedElement = document.activeElement;
 976          if (focusedElement !== document.body) return;
 977          for (const mutation of mutations) {
 978            if (mutation.removedNodes.length > 0) focus(container);
 979          }
 980        };
 981        var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;
 982        document.addEventListener("focusin", handleFocusIn2);
 983        document.addEventListener("focusout", handleFocusOut2);
 984        const mutationObserver = new MutationObserver(handleMutations2);
 985        if (container) mutationObserver.observe(container, { childList: true, subtree: true });
 986        return () => {
 987          document.removeEventListener("focusin", handleFocusIn2);
 988          document.removeEventListener("focusout", handleFocusOut2);
 989          mutationObserver.disconnect();
 990        };
 991      }
 992    }, [trapped, container, focusScope.paused]);
 993    React16.useEffect(() => {
 994      if (container) {
 995        focusScopesStack.add(focusScope);
 996        const previouslyFocusedElement = document.activeElement;
 997        const hasFocusedCandidate = container.contains(previouslyFocusedElement);
 998        if (!hasFocusedCandidate) {
 999          const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);
1000          container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);
1001          container.dispatchEvent(mountEvent);
1002          if (!mountEvent.defaultPrevented) {
1003            focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });
1004            if (document.activeElement === previouslyFocusedElement) {
1005              focus(container);
1006            }
1007          }
1008        }
1009        return () => {
1010          container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);
1011          setTimeout(() => {
1012            const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);
1013            container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);
1014            container.dispatchEvent(unmountEvent);
1015            if (!unmountEvent.defaultPrevented) {
1016              focus(previouslyFocusedElement ?? document.body, { select: true });
1017            }
1018            container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);
1019            focusScopesStack.remove(focusScope);
1020          }, 0);
1021        };
1022      }
1023    }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);
1024    const handleKeyDown = React16.useCallback(
1025      (event) => {
1026        if (!loop && !trapped) return;
1027        if (focusScope.paused) return;
1028        const isTabKey = event.key === "Tab" && !event.altKey && !event.ctrlKey && !event.metaKey;
1029        const focusedElement = document.activeElement;
1030        if (isTabKey && focusedElement) {
1031          const container2 = event.currentTarget;
1032          const [first, last] = getTabbableEdges(container2);
1033          const hasTabbableElementsInside = first && last;
1034          if (!hasTabbableElementsInside) {
1035            if (focusedElement === container2) event.preventDefault();
1036          } else {
1037            if (!event.shiftKey && focusedElement === last) {
1038              event.preventDefault();
1039              if (loop) focus(first, { select: true });
1040            } else if (event.shiftKey && focusedElement === first) {
1041              event.preventDefault();
1042              if (loop) focus(last, { select: true });
1043            }
1044          }
1045        }
1046      },
1047      [loop, trapped, focusScope.paused]
1048    );
1049    return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Primitive2.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });
1050  });
1051  FocusScope.displayName = FOCUS_SCOPE_NAME;
1052  function focusFirst(candidates, { select = false } = {}) {
1053    const previouslyFocusedElement = document.activeElement;
1054    for (const candidate of candidates) {
1055      focus(candidate, { select });
1056      if (document.activeElement !== previouslyFocusedElement) return;
1057    }
1058  }
1059  function getTabbableEdges(container) {
1060    const candidates = getTabbableCandidates(container);
1061    const first = findVisible(candidates, container);
1062    const last = findVisible(candidates.reverse(), container);
1063    return [first, last];
1064  }
1065  function getTabbableCandidates(container) {
1066    const nodes = [];
1067    const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {
1068      acceptNode: (node) => {
1069        const isHiddenInput = node.tagName === "INPUT" && node.type === "hidden";
1070        if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;
1071        return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;
1072      }
1073    });
1074    while (walker.nextNode()) nodes.push(walker.currentNode);
1075    return nodes;
1076  }
1077  function findVisible(elements, container) {
1078    for (const element of elements) {
1079      if (!isHidden(element, { upTo: container })) return element;
1080    }
1081  }
1082  function isHidden(node, { upTo }) {
1083    if (getComputedStyle(node).visibility === "hidden") return true;
1084    while (node) {
1085      if (upTo !== void 0 && node === upTo) return false;
1086      if (getComputedStyle(node).display === "none") return true;
1087      node = node.parentElement;
1088    }
1089    return false;
1090  }
1091  function isSelectableInput(element) {
1092    return element instanceof HTMLInputElement && "select" in element;
1093  }
1094  function focus(element, { select = false } = {}) {
1095    if (element && element.focus) {
1096      const previouslyFocusedElement = document.activeElement;
1097      element.focus({ preventScroll: true });
1098      if (element !== previouslyFocusedElement && isSelectableInput(element) && select)
1099        element.select();
1100    }
1101  }
1102  var focusScopesStack = createFocusScopesStack();
1103  function createFocusScopesStack() {
1104    let stack = [];
1105    return {
1106      add(focusScope) {
1107        const activeFocusScope = stack[0];
1108        if (focusScope !== activeFocusScope) {
1109          activeFocusScope?.pause();
1110        }
1111        stack = arrayRemove(stack, focusScope);
1112        stack.unshift(focusScope);
1113      },
1114      remove(focusScope) {
1115        stack = arrayRemove(stack, focusScope);
1116        stack[0]?.resume();
1117      }
1118    };
1119  }
1120  function arrayRemove(array, item) {
1121    const updatedArray = [...array];
1122    const index = updatedArray.indexOf(item);
1123    if (index !== -1) {
1124      updatedArray.splice(index, 1);
1125    }
1126    return updatedArray;
1127  }
1128  function removeLinks(items) {
1129    return items.filter((item) => item.tagName !== "A");
1130  }
1131  
1132  // node_modules/@radix-ui/react-portal/dist/index.mjs
1133  var React21 = __toESM(require_react(), 1);
1134  var import_react_dom = __toESM(require_react_dom(), 1);
1135  
1136  // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive/dist/index.mjs
1137  var React19 = __toESM(require_react(), 1);
1138  var ReactDOM3 = __toESM(require_react_dom(), 1);
1139  
1140  // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot/dist/index.mjs
1141  var React18 = __toESM(require_react(), 1);
1142  
1143  // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
1144  var React17 = __toESM(require_react(), 1);
1145  function setRef4(ref, value) {
1146    if (typeof ref === "function") {
1147      return ref(value);
1148    } else if (ref !== null && ref !== void 0) {
1149      ref.current = value;
1150    }
1151  }
1152  function composeRefs4(...refs) {
1153    return (node) => {
1154      let hasCleanup = false;
1155      const cleanups = refs.map((ref) => {
1156        const cleanup = setRef4(ref, node);
1157        if (!hasCleanup && typeof cleanup == "function") {
1158          hasCleanup = true;
1159        }
1160        return cleanup;
1161      });
1162      if (hasCleanup) {
1163        return () => {
1164          for (let i = 0; i < cleanups.length; i++) {
1165            const cleanup = cleanups[i];
1166            if (typeof cleanup == "function") {
1167              cleanup();
1168            } else {
1169              setRef4(refs[i], null);
1170            }
1171          }
1172        };
1173      }
1174    };
1175  }
1176  
1177  // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-slot/dist/index.mjs
1178  var import_jsx_runtime8 = __toESM(require_jsx_runtime(), 1);
1179  // @__NO_SIDE_EFFECTS__
1180  function createSlot3(ownerName) {
1181    const SlotClone = /* @__PURE__ */ createSlotClone3(ownerName);
1182    const Slot2 = React18.forwardRef((props, forwardedRef) => {
1183      const { children, ...slotProps } = props;
1184      const childrenArray = React18.Children.toArray(children);
1185      const slottable = childrenArray.find(isSlottable3);
1186      if (slottable) {
1187        const newElement = slottable.props.children;
1188        const newChildren = childrenArray.map((child) => {
1189          if (child === slottable) {
1190            if (React18.Children.count(newElement) > 1) return React18.Children.only(null);
1191            return React18.isValidElement(newElement) ? newElement.props.children : null;
1192          } else {
1193            return child;
1194          }
1195        });
1196        return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React18.isValidElement(newElement) ? React18.cloneElement(newElement, void 0, newChildren) : null });
1197      }
1198      return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children });
1199    });
1200    Slot2.displayName = `$ownerName}.Slot`;
1201    return Slot2;
1202  }
1203  // @__NO_SIDE_EFFECTS__
1204  function createSlotClone3(ownerName) {
1205    const SlotClone = React18.forwardRef((props, forwardedRef) => {
1206      const { children, ...slotProps } = props;
1207      if (React18.isValidElement(children)) {
1208        const childrenRef = getElementRef3(children);
1209        const props2 = mergeProps3(slotProps, children.props);
1210        if (children.type !== React18.Fragment) {
1211          props2.ref = forwardedRef ? composeRefs4(forwardedRef, childrenRef) : childrenRef;
1212        }
1213        return React18.cloneElement(children, props2);
1214      }
1215      return React18.Children.count(children) > 1 ? React18.Children.only(null) : null;
1216    });
1217    SlotClone.displayName = `$ownerName}.SlotClone`;
1218    return SlotClone;
1219  }
1220  var SLOTTABLE_IDENTIFIER3 = Symbol("radix.slottable");
1221  function isSlottable3(child) {
1222    return React18.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER3;
1223  }
1224  function mergeProps3(slotProps, childProps) {
1225    const overrideProps = { ...childProps };
1226    for (const propName in childProps) {
1227      const slotPropValue = slotProps[propName];
1228      const childPropValue = childProps[propName];
1229      const isHandler = /^on[A-Z]/.test(propName);
1230      if (isHandler) {
1231        if (slotPropValue && childPropValue) {
1232          overrideProps[propName] = (...args) => {
1233            const result = childPropValue(...args);
1234            slotPropValue(...args);
1235            return result;
1236          };
1237        } else if (slotPropValue) {
1238          overrideProps[propName] = slotPropValue;
1239        }
1240      } else if (propName === "style") {
1241        overrideProps[propName] = { ...slotPropValue, ...childPropValue };
1242      } else if (propName === "className") {
1243        overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
1244      }
1245    }
1246    return { ...slotProps, ...overrideProps };
1247  }
1248  function getElementRef3(element) {
1249    let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
1250    let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
1251    if (mayWarn) {
1252      return element.ref;
1253    }
1254    getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
1255    mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
1256    if (mayWarn) {
1257      return element.props.ref;
1258    }
1259    return element.props.ref || element.ref;
1260  }
1261  
1262  // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-primitive/dist/index.mjs
1263  var import_jsx_runtime9 = __toESM(require_jsx_runtime(), 1);
1264  var NODES3 = [
1265    "a",
1266    "button",
1267    "div",
1268    "form",
1269    "h2",
1270    "h3",
1271    "img",
1272    "input",
1273    "label",
1274    "li",
1275    "nav",
1276    "ol",
1277    "p",
1278    "select",
1279    "span",
1280    "svg",
1281    "ul"
1282  ];
1283  var Primitive3 = NODES3.reduce((primitive, node) => {
1284    const Slot2 = createSlot3(`Primitive.$node}`);
1285    const Node2 = React19.forwardRef((props, forwardedRef) => {
1286      const { asChild, ...primitiveProps } = props;
1287      const Comp = asChild ? Slot2 : node;
1288      if (typeof window !== "undefined") {
1289        window[Symbol.for("radix-ui")] = true;
1290      }
1291      return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Comp, { ...primitiveProps, ref: forwardedRef });
1292    });
1293    Node2.displayName = `Primitive.$node}`;
1294    return { ...primitive, [node]: Node2 };
1295  }, {});
1296  
1297  // node_modules/@radix-ui/react-portal/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
1298  var React20 = __toESM(require_react(), 1);
1299  var useLayoutEffect22 = globalThis?.document ? React20.useLayoutEffect : () => {
1300  };
1301  
1302  // node_modules/@radix-ui/react-portal/dist/index.mjs
1303  var import_jsx_runtime10 = __toESM(require_jsx_runtime(), 1);
1304  var PORTAL_NAME = "Portal";
1305  var Portal = React21.forwardRef((props, forwardedRef) => {
1306    const { container: containerProp, ...portalProps } = props;
1307    const [mounted, setMounted] = React21.useState(false);
1308    useLayoutEffect22(() => setMounted(true), []);
1309    const container = containerProp || mounted && globalThis?.document?.body;
1310    return container ? import_react_dom.default.createPortal(/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Primitive3.div, { ...portalProps, ref: forwardedRef }), container) : null;
1311  });
1312  Portal.displayName = PORTAL_NAME;
1313  
1314  // node_modules/@radix-ui/react-presence/dist/index.mjs
1315  var React25 = __toESM(require_react(), 1);
1316  
1317  // node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
1318  var React23 = __toESM(require_react(), 1);
1319  function setRef5(ref, value) {
1320    if (typeof ref === "function") {
1321      return ref(value);
1322    } else if (ref !== null && ref !== void 0) {
1323      ref.current = value;
1324    }
1325  }
1326  function composeRefs5(...refs) {
1327    return (node) => {
1328      let hasCleanup = false;
1329      const cleanups = refs.map((ref) => {
1330        const cleanup = setRef5(ref, node);
1331        if (!hasCleanup && typeof cleanup == "function") {
1332          hasCleanup = true;
1333        }
1334        return cleanup;
1335      });
1336      if (hasCleanup) {
1337        return () => {
1338          for (let i = 0; i < cleanups.length; i++) {
1339            const cleanup = cleanups[i];
1340            if (typeof cleanup == "function") {
1341              cleanup();
1342            } else {
1343              setRef5(refs[i], null);
1344            }
1345          }
1346        };
1347      }
1348    };
1349  }
1350  function useComposedRefs4(...refs) {
1351    return React23.useCallback(composeRefs5(...refs), refs);
1352  }
1353  
1354  // node_modules/@radix-ui/react-presence/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
1355  var React24 = __toESM(require_react(), 1);
1356  var useLayoutEffect23 = globalThis?.document ? React24.useLayoutEffect : () => {
1357  };
1358  
1359  // node_modules/@radix-ui/react-presence/dist/index.mjs
1360  var React26 = __toESM(require_react(), 1);
1361  function useStateMachine(initialState, machine) {
1362    return React26.useReducer((state, event) => {
1363      const nextState = machine[state][event];
1364      return nextState ?? state;
1365    }, initialState);
1366  }
1367  var Presence = (props) => {
1368    const { present, children } = props;
1369    const presence = usePresence(present);
1370    const child = typeof children === "function" ? children({ present: presence.isPresent }) : React25.Children.only(children);
1371    const ref = useComposedRefs4(presence.ref, getElementRef4(child));
1372    const forceMount = typeof children === "function";
1373    return forceMount || presence.isPresent ? React25.cloneElement(child, { ref }) : null;
1374  };
1375  Presence.displayName = "Presence";
1376  function usePresence(present) {
1377    const [node, setNode] = React25.useState();
1378    const stylesRef = React25.useRef(null);
1379    const prevPresentRef = React25.useRef(present);
1380    const prevAnimationNameRef = React25.useRef("none");
1381    const initialState = present ? "mounted" : "unmounted";
1382    const [state, send] = useStateMachine(initialState, {
1383      mounted: {
1384        UNMOUNT: "unmounted",
1385        ANIMATION_OUT: "unmountSuspended"
1386      },
1387      unmountSuspended: {
1388        MOUNT: "mounted",
1389        ANIMATION_END: "unmounted"
1390      },
1391      unmounted: {
1392        MOUNT: "mounted"
1393      }
1394    });
1395    React25.useEffect(() => {
1396      const currentAnimationName = getAnimationName(stylesRef.current);
1397      prevAnimationNameRef.current = state === "mounted" ? currentAnimationName : "none";
1398    }, [state]);
1399    useLayoutEffect23(() => {
1400      const styles = stylesRef.current;
1401      const wasPresent = prevPresentRef.current;
1402      const hasPresentChanged = wasPresent !== present;
1403      if (hasPresentChanged) {
1404        const prevAnimationName = prevAnimationNameRef.current;
1405        const currentAnimationName = getAnimationName(styles);
1406        if (present) {
1407          send("MOUNT");
1408        } else if (currentAnimationName === "none" || styles?.display === "none") {
1409          send("UNMOUNT");
1410        } else {
1411          const isAnimating = prevAnimationName !== currentAnimationName;
1412          if (wasPresent && isAnimating) {
1413            send("ANIMATION_OUT");
1414          } else {
1415            send("UNMOUNT");
1416          }
1417        }
1418        prevPresentRef.current = present;
1419      }
1420    }, [present, send]);
1421    useLayoutEffect23(() => {
1422      if (node) {
1423        let timeoutId;
1424        const ownerWindow = node.ownerDocument.defaultView ?? window;
1425        const handleAnimationEnd = (event) => {
1426          const currentAnimationName = getAnimationName(stylesRef.current);
1427          const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));
1428          if (event.target === node && isCurrentAnimation) {
1429            send("ANIMATION_END");
1430            if (!prevPresentRef.current) {
1431              const currentFillMode = node.style.animationFillMode;
1432              node.style.animationFillMode = "forwards";
1433              timeoutId = ownerWindow.setTimeout(() => {
1434                if (node.style.animationFillMode === "forwards") {
1435                  node.style.animationFillMode = currentFillMode;
1436                }
1437              });
1438            }
1439          }
1440        };
1441        const handleAnimationStart = (event) => {
1442          if (event.target === node) {
1443            prevAnimationNameRef.current = getAnimationName(stylesRef.current);
1444          }
1445        };
1446        node.addEventListener("animationstart", handleAnimationStart);
1447        node.addEventListener("animationcancel", handleAnimationEnd);
1448        node.addEventListener("animationend", handleAnimationEnd);
1449        return () => {
1450          ownerWindow.clearTimeout(timeoutId);
1451          node.removeEventListener("animationstart", handleAnimationStart);
1452          node.removeEventListener("animationcancel", handleAnimationEnd);
1453          node.removeEventListener("animationend", handleAnimationEnd);
1454        };
1455      } else {
1456        send("ANIMATION_END");
1457      }
1458    }, [node, send]);
1459    return {
1460      isPresent: ["mounted", "unmountSuspended"].includes(state),
1461      ref: React25.useCallback((node2) => {
1462        stylesRef.current = node2 ? getComputedStyle(node2) : null;
1463        setNode(node2);
1464      }, [])
1465    };
1466  }
1467  function getAnimationName(styles) {
1468    return styles?.animationName || "none";
1469  }
1470  function getElementRef4(element) {
1471    let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
1472    let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
1473    if (mayWarn) {
1474      return element.ref;
1475    }
1476    getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
1477    mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
1478    if (mayWarn) {
1479      return element.props.ref;
1480    }
1481    return element.props.ref || element.ref;
1482  }
1483  
1484  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive/dist/index.mjs
1485  var React28 = __toESM(require_react(), 1);
1486  var ReactDOM5 = __toESM(require_react_dom(), 1);
1487  
1488  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs
1489  var React27 = __toESM(require_react(), 1);
1490  var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
1491  // @__NO_SIDE_EFFECTS__
1492  function createSlot4(ownerName) {
1493    const SlotClone = /* @__PURE__ */ createSlotClone4(ownerName);
1494    const Slot2 = React27.forwardRef((props, forwardedRef) => {
1495      const { children, ...slotProps } = props;
1496      const childrenArray = React27.Children.toArray(children);
1497      const slottable = childrenArray.find(isSlottable4);
1498      if (slottable) {
1499        const newElement = slottable.props.children;
1500        const newChildren = childrenArray.map((child) => {
1501          if (child === slottable) {
1502            if (React27.Children.count(newElement) > 1) return React27.Children.only(null);
1503            return React27.isValidElement(newElement) ? newElement.props.children : null;
1504          } else {
1505            return child;
1506          }
1507        });
1508        return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React27.isValidElement(newElement) ? React27.cloneElement(newElement, void 0, newChildren) : null });
1509      }
1510      return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children });
1511    });
1512    Slot2.displayName = `$ownerName}.Slot`;
1513    return Slot2;
1514  }
1515  // @__NO_SIDE_EFFECTS__
1516  function createSlotClone4(ownerName) {
1517    const SlotClone = React27.forwardRef((props, forwardedRef) => {
1518      const { children, ...slotProps } = props;
1519      if (React27.isValidElement(children)) {
1520        const childrenRef = getElementRef5(children);
1521        const props2 = mergeProps4(slotProps, children.props);
1522        if (children.type !== React27.Fragment) {
1523          props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;
1524        }
1525        return React27.cloneElement(children, props2);
1526      }
1527      return React27.Children.count(children) > 1 ? React27.Children.only(null) : null;
1528    });
1529    SlotClone.displayName = `$ownerName}.SlotClone`;
1530    return SlotClone;
1531  }
1532  var SLOTTABLE_IDENTIFIER4 = Symbol("radix.slottable");
1533  function isSlottable4(child) {
1534    return React27.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER4;
1535  }
1536  function mergeProps4(slotProps, childProps) {
1537    const overrideProps = { ...childProps };
1538    for (const propName in childProps) {
1539      const slotPropValue = slotProps[propName];
1540      const childPropValue = childProps[propName];
1541      const isHandler = /^on[A-Z]/.test(propName);
1542      if (isHandler) {
1543        if (slotPropValue && childPropValue) {
1544          overrideProps[propName] = (...args) => {
1545            const result = childPropValue(...args);
1546            slotPropValue(...args);
1547            return result;
1548          };
1549        } else if (slotPropValue) {
1550          overrideProps[propName] = slotPropValue;
1551        }
1552      } else if (propName === "style") {
1553        overrideProps[propName] = { ...slotPropValue, ...childPropValue };
1554      } else if (propName === "className") {
1555        overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
1556      }
1557    }
1558    return { ...slotProps, ...overrideProps };
1559  }
1560  function getElementRef5(element) {
1561    let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
1562    let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
1563    if (mayWarn) {
1564      return element.ref;
1565    }
1566    getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
1567    mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
1568    if (mayWarn) {
1569      return element.props.ref;
1570    }
1571    return element.props.ref || element.ref;
1572  }
1573  
1574  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-primitive/dist/index.mjs
1575  var import_jsx_runtime12 = __toESM(require_jsx_runtime(), 1);
1576  var NODES4 = [
1577    "a",
1578    "button",
1579    "div",
1580    "form",
1581    "h2",
1582    "h3",
1583    "img",
1584    "input",
1585    "label",
1586    "li",
1587    "nav",
1588    "ol",
1589    "p",
1590    "select",
1591    "span",
1592    "svg",
1593    "ul"
1594  ];
1595  var Primitive4 = NODES4.reduce((primitive, node) => {
1596    const Slot2 = createSlot4(`Primitive.$node}`);
1597    const Node2 = React28.forwardRef((props, forwardedRef) => {
1598      const { asChild, ...primitiveProps } = props;
1599      const Comp = asChild ? Slot2 : node;
1600      if (typeof window !== "undefined") {
1601        window[Symbol.for("radix-ui")] = true;
1602      }
1603      return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Comp, { ...primitiveProps, ref: forwardedRef });
1604    });
1605    Node2.displayName = `Primitive.$node}`;
1606    return { ...primitive, [node]: Node2 };
1607  }, {});
1608  
1609  // node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-focus-guards/dist/index.mjs
1610  var React29 = __toESM(require_react(), 1);
1611  var count2 = 0;
1612  function useFocusGuards() {
1613    React29.useEffect(() => {
1614      const edgeGuards = document.querySelectorAll("[data-radix-focus-guard]");
1615      document.body.insertAdjacentElement("afterbegin", edgeGuards[0] ?? createFocusGuard());
1616      document.body.insertAdjacentElement("beforeend", edgeGuards[1] ?? createFocusGuard());
1617      count2++;
1618      return () => {
1619        if (count2 === 1) {
1620          document.querySelectorAll("[data-radix-focus-guard]").forEach((node) => node.remove());
1621        }
1622        count2--;
1623      };
1624    }, []);
1625  }
1626  function createFocusGuard() {
1627    const element = document.createElement("span");
1628    element.setAttribute("data-radix-focus-guard", "");
1629    element.tabIndex = 0;
1630    element.style.outline = "none";
1631    element.style.opacity = "0";
1632    element.style.position = "fixed";
1633    element.style.pointerEvents = "none";
1634    return element;
1635  }
1636  
1637  // node_modules/tslib/tslib.es6.mjs
1638  var __assign = function() {
1639    __assign = Object.assign || function __assign2(t2) {
1640      for (var s, i = 1, n = arguments.length; i < n; i++) {
1641        s = arguments[i];
1642        for (var p2 in s) if (Object.prototype.hasOwnProperty.call(s, p2)) t2[p2] = s[p2];
1643      }
1644      return t2;
1645    };
1646    return __assign.apply(this, arguments);
1647  };
1648  function __rest(s, e) {
1649    var t2 = {};
1650    for (var p2 in s) if (Object.prototype.hasOwnProperty.call(s, p2) && e.indexOf(p2) < 0)
1651      t2[p2] = s[p2];
1652    if (s != null && typeof Object.getOwnPropertySymbols === "function")
1653      for (var i = 0, p2 = Object.getOwnPropertySymbols(s); i < p2.length; i++) {
1654        if (e.indexOf(p2[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p2[i]))
1655          t2[p2[i]] = s[p2[i]];
1656      }
1657    return t2;
1658  }
1659  function __spreadArray(to, from, pack) {
1660    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
1661      if (ar || !(i in from)) {
1662        if (!ar) ar = Array.prototype.slice.call(from, 0, i);
1663        ar[i] = from[i];
1664      }
1665    }
1666    return to.concat(ar || Array.prototype.slice.call(from));
1667  }
1668  
1669  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/Combination.js
1670  var React36 = __toESM(require_react());
1671  
1672  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/UI.js
1673  var React32 = __toESM(require_react());
1674  
1675  // node_modules/react-remove-scroll-bar/dist/es2015/constants.js
1676  var zeroRightClassName = "right-scroll-bar-position";
1677  var fullWidthClassName = "width-before-scroll-bar";
1678  var noScrollbarsClassName = "with-scroll-bars-hidden";
1679  var removedBarSizeVariable = "--removed-body-scroll-bar-size";
1680  
1681  // node_modules/use-callback-ref/dist/es2015/assignRef.js
1682  function assignRef(ref, value) {
1683    if (typeof ref === "function") {
1684      ref(value);
1685    } else if (ref) {
1686      ref.current = value;
1687    }
1688    return ref;
1689  }
1690  
1691  // node_modules/use-callback-ref/dist/es2015/useRef.js
1692  var import_react = __toESM(require_react());
1693  function useCallbackRef3(initialValue, callback) {
1694    var ref = (0, import_react.useState)(function() {
1695      return {
1696        // value
1697        value: initialValue,
1698        // last callback
1699        callback,
1700        // "memoized" public interface
1701        facade: {
1702          get current() {
1703            return ref.value;
1704          },
1705          set current(value) {
1706            var last = ref.value;
1707            if (last !== value) {
1708              ref.value = value;
1709              ref.callback(value, last);
1710            }
1711          }
1712        }
1713      };
1714    })[0];
1715    ref.callback = callback;
1716    return ref.facade;
1717  }
1718  
1719  // node_modules/use-callback-ref/dist/es2015/useMergeRef.js
1720  var React30 = __toESM(require_react());
1721  var useIsomorphicLayoutEffect = typeof window !== "undefined" ? React30.useLayoutEffect : React30.useEffect;
1722  var currentValues = /* @__PURE__ */ new WeakMap();
1723  function useMergeRefs(refs, defaultValue) {
1724    var callbackRef = useCallbackRef3(defaultValue || null, function(newValue) {
1725      return refs.forEach(function(ref) {
1726        return assignRef(ref, newValue);
1727      });
1728    });
1729    useIsomorphicLayoutEffect(function() {
1730      var oldValue = currentValues.get(callbackRef);
1731      if (oldValue) {
1732        var prevRefs_1 = new Set(oldValue);
1733        var nextRefs_1 = new Set(refs);
1734        var current_1 = callbackRef.current;
1735        prevRefs_1.forEach(function(ref) {
1736          if (!nextRefs_1.has(ref)) {
1737            assignRef(ref, null);
1738          }
1739        });
1740        nextRefs_1.forEach(function(ref) {
1741          if (!prevRefs_1.has(ref)) {
1742            assignRef(ref, current_1);
1743          }
1744        });
1745      }
1746      currentValues.set(callbackRef, refs);
1747    }, [refs]);
1748    return callbackRef;
1749  }
1750  
1751  // node_modules/use-sidecar/dist/es2015/medium.js
1752  function ItoI(a) {
1753    return a;
1754  }
1755  function innerCreateMedium(defaults, middleware) {
1756    if (middleware === void 0) {
1757      middleware = ItoI;
1758    }
1759    var buffer = [];
1760    var assigned = false;
1761    var medium = {
1762      read: function() {
1763        if (assigned) {
1764          throw new Error("Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.");
1765        }
1766        if (buffer.length) {
1767          return buffer[buffer.length - 1];
1768        }
1769        return defaults;
1770      },
1771      useMedium: function(data) {
1772        var item = middleware(data, assigned);
1773        buffer.push(item);
1774        return function() {
1775          buffer = buffer.filter(function(x) {
1776            return x !== item;
1777          });
1778        };
1779      },
1780      assignSyncMedium: function(cb) {
1781        assigned = true;
1782        while (buffer.length) {
1783          var cbs = buffer;
1784          buffer = [];
1785          cbs.forEach(cb);
1786        }
1787        buffer = {
1788          push: function(x) {
1789            return cb(x);
1790          },
1791          filter: function() {
1792            return buffer;
1793          }
1794        };
1795      },
1796      assignMedium: function(cb) {
1797        assigned = true;
1798        var pendingQueue = [];
1799        if (buffer.length) {
1800          var cbs = buffer;
1801          buffer = [];
1802          cbs.forEach(cb);
1803          pendingQueue = buffer;
1804        }
1805        var executeQueue = function() {
1806          var cbs2 = pendingQueue;
1807          pendingQueue = [];
1808          cbs2.forEach(cb);
1809        };
1810        var cycle = function() {
1811          return Promise.resolve().then(executeQueue);
1812        };
1813        cycle();
1814        buffer = {
1815          push: function(x) {
1816            pendingQueue.push(x);
1817            cycle();
1818          },
1819          filter: function(filter) {
1820            pendingQueue = pendingQueue.filter(filter);
1821            return buffer;
1822          }
1823        };
1824      }
1825    };
1826    return medium;
1827  }
1828  function createSidecarMedium(options) {
1829    if (options === void 0) {
1830      options = {};
1831    }
1832    var medium = innerCreateMedium(null);
1833    medium.options = __assign({ async: true, ssr: false }, options);
1834    return medium;
1835  }
1836  
1837  // node_modules/use-sidecar/dist/es2015/exports.js
1838  var React31 = __toESM(require_react());
1839  var SideCar = function(_a) {
1840    var sideCar = _a.sideCar, rest = __rest(_a, ["sideCar"]);
1841    if (!sideCar) {
1842      throw new Error("Sidecar: please provide `sideCar` property to import the right car");
1843    }
1844    var Target = sideCar.read();
1845    if (!Target) {
1846      throw new Error("Sidecar medium not found");
1847    }
1848    return React31.createElement(Target, __assign({}, rest));
1849  };
1850  SideCar.isSideCarExport = true;
1851  function exportSidecar(medium, exported) {
1852    medium.useMedium(exported);
1853    return SideCar;
1854  }
1855  
1856  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/medium.js
1857  var effectCar = createSidecarMedium();
1858  
1859  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/UI.js
1860  var nothing = function() {
1861    return;
1862  };
1863  var RemoveScroll = React32.forwardRef(function(props, parentRef) {
1864    var ref = React32.useRef(null);
1865    var _a = React32.useState({
1866      onScrollCapture: nothing,
1867      onWheelCapture: nothing,
1868      onTouchMoveCapture: nothing
1869    }), callbacks = _a[0], setCallbacks = _a[1];
1870    var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? "div" : _b, gapMode = props.gapMode, rest = __rest(props, ["forwardProps", "children", "className", "removeScrollBar", "enabled", "shards", "sideCar", "noRelative", "noIsolation", "inert", "allowPinchZoom", "as", "gapMode"]);
1871    var SideCar2 = sideCar;
1872    var containerRef = useMergeRefs([ref, parentRef]);
1873    var containerProps = __assign(__assign({}, rest), callbacks);
1874    return React32.createElement(
1875      React32.Fragment,
1876      null,
1877      enabled && React32.createElement(SideCar2, { sideCar: effectCar, removeScrollBar, shards, noRelative, noIsolation, inert, setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode }),
1878      forwardProps ? React32.cloneElement(React32.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef })) : React32.createElement(Container, __assign({}, containerProps, { className, ref: containerRef }), children)
1879    );
1880  });
1881  RemoveScroll.defaultProps = {
1882    enabled: true,
1883    removeScrollBar: true,
1884    inert: false
1885  };
1886  RemoveScroll.classNames = {
1887    fullWidth: fullWidthClassName,
1888    zeroRight: zeroRightClassName
1889  };
1890  
1891  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/SideEffect.js
1892  var React35 = __toESM(require_react());
1893  
1894  // node_modules/react-remove-scroll-bar/dist/es2015/component.js
1895  var React34 = __toESM(require_react());
1896  
1897  // node_modules/react-style-singleton/dist/es2015/hook.js
1898  var React33 = __toESM(require_react());
1899  
1900  // node_modules/get-nonce/dist/es2015/index.js
1901  var currentNonce;
1902  var getNonce = function() {
1903    if (currentNonce) {
1904      return currentNonce;
1905    }
1906    if (typeof __webpack_nonce__ !== "undefined") {
1907      return __webpack_nonce__;
1908    }
1909    return void 0;
1910  };
1911  
1912  // node_modules/react-style-singleton/dist/es2015/singleton.js
1913  function makeStyleTag() {
1914    if (!document)
1915      return null;
1916    var tag = document.createElement("style");
1917    tag.type = "text/css";
1918    var nonce = getNonce();
1919    if (nonce) {
1920      tag.setAttribute("nonce", nonce);
1921    }
1922    return tag;
1923  }
1924  function injectStyles(tag, css2) {
1925    if (tag.styleSheet) {
1926      tag.styleSheet.cssText = css2;
1927    } else {
1928      tag.appendChild(document.createTextNode(css2));
1929    }
1930  }
1931  function insertStyleTag(tag) {
1932    var head = document.head || document.getElementsByTagName("head")[0];
1933    head.appendChild(tag);
1934  }
1935  var stylesheetSingleton = function() {
1936    var counter = 0;
1937    var stylesheet = null;
1938    return {
1939      add: function(style) {
1940        if (counter == 0) {
1941          if (stylesheet = makeStyleTag()) {
1942            injectStyles(stylesheet, style);
1943            insertStyleTag(stylesheet);
1944          }
1945        }
1946        counter++;
1947      },
1948      remove: function() {
1949        counter--;
1950        if (!counter && stylesheet) {
1951          stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);
1952          stylesheet = null;
1953        }
1954      }
1955    };
1956  };
1957  
1958  // node_modules/react-style-singleton/dist/es2015/hook.js
1959  var styleHookSingleton = function() {
1960    var sheet = stylesheetSingleton();
1961    return function(styles, isDynamic) {
1962      React33.useEffect(function() {
1963        sheet.add(styles);
1964        return function() {
1965          sheet.remove();
1966        };
1967      }, [styles && isDynamic]);
1968    };
1969  };
1970  
1971  // node_modules/react-style-singleton/dist/es2015/component.js
1972  var styleSingleton = function() {
1973    var useStyle = styleHookSingleton();
1974    var Sheet = function(_a) {
1975      var styles = _a.styles, dynamic = _a.dynamic;
1976      useStyle(styles, dynamic);
1977      return null;
1978    };
1979    return Sheet;
1980  };
1981  
1982  // node_modules/react-remove-scroll-bar/dist/es2015/utils.js
1983  var zeroGap = {
1984    left: 0,
1985    top: 0,
1986    right: 0,
1987    gap: 0
1988  };
1989  var parse = function(x) {
1990    return parseInt(x || "", 10) || 0;
1991  };
1992  var getOffset = function(gapMode) {
1993    var cs = window.getComputedStyle(document.body);
1994    var left = cs[gapMode === "padding" ? "paddingLeft" : "marginLeft"];
1995    var top = cs[gapMode === "padding" ? "paddingTop" : "marginTop"];
1996    var right = cs[gapMode === "padding" ? "paddingRight" : "marginRight"];
1997    return [parse(left), parse(top), parse(right)];
1998  };
1999  var getGapWidth = function(gapMode) {
2000    if (gapMode === void 0) {
2001      gapMode = "margin";
2002    }
2003    if (typeof window === "undefined") {
2004      return zeroGap;
2005    }
2006    var offsets = getOffset(gapMode);
2007    var documentWidth = document.documentElement.clientWidth;
2008    var windowWidth = window.innerWidth;
2009    return {
2010      left: offsets[0],
2011      top: offsets[1],
2012      right: offsets[2],
2013      gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0])
2014    };
2015  };
2016  
2017  // node_modules/react-remove-scroll-bar/dist/es2015/component.js
2018  var Style = styleSingleton();
2019  var lockAttribute = "data-scroll-locked";
2020  var getStyles = function(_a, allowRelative, gapMode, important) {
2021    var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;
2022    if (gapMode === void 0) {
2023      gapMode = "margin";
2024    }
2025    return "\n  .".concat(noScrollbarsClassName, " {\n   overflow: hidden ").concat(important, ";\n   padding-right: ").concat(gap, "px ").concat(important, ";\n  }\n  body[").concat(lockAttribute, "] {\n    overflow: hidden ").concat(important, ";\n    overscroll-behavior: contain;\n    ").concat([
2026      allowRelative && "position: relative ".concat(important, ";"),
2027      gapMode === "margin" && "\n    padding-left: ".concat(left, "px;\n    padding-top: ").concat(top, "px;\n    padding-right: ").concat(right, "px;\n    margin-left:0;\n    margin-top:0;\n    margin-right: ").concat(gap, "px ").concat(important, ";\n    "),
2028      gapMode === "padding" && "padding-right: ".concat(gap, "px ").concat(important, ";")
2029    ].filter(Boolean).join(""), "\n  }\n  \n  .").concat(zeroRightClassName, " {\n    right: ").concat(gap, "px ").concat(important, ";\n  }\n  \n  .").concat(fullWidthClassName, " {\n    margin-right: ").concat(gap, "px ").concat(important, ";\n  }\n  \n  .").concat(zeroRightClassName, " .").concat(zeroRightClassName, " {\n    right: 0 ").concat(important, ";\n  }\n  \n  .").concat(fullWidthClassName, " .").concat(fullWidthClassName, " {\n    margin-right: 0 ").concat(important, ";\n  }\n  \n  body[").concat(lockAttribute, "] {\n    ").concat(removedBarSizeVariable, ": ").concat(gap, "px;\n  }\n");
2030  };
2031  var getCurrentUseCounter = function() {
2032    var counter = parseInt(document.body.getAttribute(lockAttribute) || "0", 10);
2033    return isFinite(counter) ? counter : 0;
2034  };
2035  var useLockAttribute = function() {
2036    React34.useEffect(function() {
2037      document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());
2038      return function() {
2039        var newCounter = getCurrentUseCounter() - 1;
2040        if (newCounter <= 0) {
2041          document.body.removeAttribute(lockAttribute);
2042        } else {
2043          document.body.setAttribute(lockAttribute, newCounter.toString());
2044        }
2045      };
2046    }, []);
2047  };
2048  var RemoveScrollBar = function(_a) {
2049    var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? "margin" : _b;
2050    useLockAttribute();
2051    var gap = React34.useMemo(function() {
2052      return getGapWidth(gapMode);
2053    }, [gapMode]);
2054    return React34.createElement(Style, { styles: getStyles(gap, !noRelative, gapMode, !noImportant ? "!important" : "") });
2055  };
2056  
2057  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js
2058  var passiveSupported = false;
2059  if (typeof window !== "undefined") {
2060    try {
2061      options = Object.defineProperty({}, "passive", {
2062        get: function() {
2063          passiveSupported = true;
2064          return true;
2065        }
2066      });
2067      window.addEventListener("test", options, options);
2068      window.removeEventListener("test", options, options);
2069    } catch (err) {
2070      passiveSupported = false;
2071    }
2072  }
2073  var options;
2074  var nonPassive = passiveSupported ? { passive: false } : false;
2075  
2076  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/handleScroll.js
2077  var alwaysContainsScroll = function(node) {
2078    return node.tagName === "TEXTAREA";
2079  };
2080  var elementCanBeScrolled = function(node, overflow) {
2081    if (!(node instanceof Element)) {
2082      return false;
2083    }
2084    var styles = window.getComputedStyle(node);
2085    return (
2086      // not-not-scrollable
2087      styles[overflow] !== "hidden" && // contains scroll inside self
2088      !(styles.overflowY === styles.overflowX && !alwaysContainsScroll(node) && styles[overflow] === "visible")
2089    );
2090  };
2091  var elementCouldBeVScrolled = function(node) {
2092    return elementCanBeScrolled(node, "overflowY");
2093  };
2094  var elementCouldBeHScrolled = function(node) {
2095    return elementCanBeScrolled(node, "overflowX");
2096  };
2097  var locationCouldBeScrolled = function(axis, node) {
2098    var ownerDocument = node.ownerDocument;
2099    var current = node;
2100    do {
2101      if (typeof ShadowRoot !== "undefined" && current instanceof ShadowRoot) {
2102        current = current.host;
2103      }
2104      var isScrollable = elementCouldBeScrolled(axis, current);
2105      if (isScrollable) {
2106        var _a = getScrollVariables(axis, current), scrollHeight = _a[1], clientHeight = _a[2];
2107        if (scrollHeight > clientHeight) {
2108          return true;
2109        }
2110      }
2111      current = current.parentNode;
2112    } while (current && current !== ownerDocument.body);
2113    return false;
2114  };
2115  var getVScrollVariables = function(_a) {
2116    var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;
2117    return [
2118      scrollTop,
2119      scrollHeight,
2120      clientHeight
2121    ];
2122  };
2123  var getHScrollVariables = function(_a) {
2124    var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;
2125    return [
2126      scrollLeft,
2127      scrollWidth,
2128      clientWidth
2129    ];
2130  };
2131  var elementCouldBeScrolled = function(axis, node) {
2132    return axis === "v" ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);
2133  };
2134  var getScrollVariables = function(axis, node) {
2135    return axis === "v" ? getVScrollVariables(node) : getHScrollVariables(node);
2136  };
2137  var getDirectionFactor = function(axis, direction) {
2138    return axis === "h" && direction === "rtl" ? -1 : 1;
2139  };
2140  var handleScroll = function(axis, endTarget, event, sourceDelta, noOverscroll) {
2141    var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);
2142    var delta = directionFactor * sourceDelta;
2143    var target = event.target;
2144    var targetInLock = endTarget.contains(target);
2145    var shouldCancelScroll = false;
2146    var isDeltaPositive = delta > 0;
2147    var availableScroll = 0;
2148    var availableScrollTop = 0;
2149    do {
2150      if (!target) {
2151        break;
2152      }
2153      var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];
2154      var elementScroll = scroll_1 - capacity - directionFactor * position;
2155      if (position || elementScroll) {
2156        if (elementCouldBeScrolled(axis, target)) {
2157          availableScroll += elementScroll;
2158          availableScrollTop += position;
2159        }
2160      }
2161      var parent_1 = target.parentNode;
2162      target = parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1;
2163    } while (
2164      // portaled content
2165      !targetInLock && target !== document.body || // self content
2166      targetInLock && (endTarget.contains(target) || endTarget === target)
2167    );
2168    if (isDeltaPositive && (noOverscroll && Math.abs(availableScroll) < 1 || !noOverscroll && delta > availableScroll)) {
2169      shouldCancelScroll = true;
2170    } else if (!isDeltaPositive && (noOverscroll && Math.abs(availableScrollTop) < 1 || !noOverscroll && -delta > availableScrollTop)) {
2171      shouldCancelScroll = true;
2172    }
2173    return shouldCancelScroll;
2174  };
2175  
2176  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/SideEffect.js
2177  var getTouchXY = function(event) {
2178    return "changedTouches" in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];
2179  };
2180  var getDeltaXY = function(event) {
2181    return [event.deltaX, event.deltaY];
2182  };
2183  var extractRef = function(ref) {
2184    return ref && "current" in ref ? ref.current : ref;
2185  };
2186  var deltaCompare = function(x, y) {
2187    return x[0] === y[0] && x[1] === y[1];
2188  };
2189  var generateStyle = function(id) {
2190    return "\n  .block-interactivity-".concat(id, " {pointer-events: none;}\n  .allow-interactivity-").concat(id, " {pointer-events: all;}\n");
2191  };
2192  var idCounter = 0;
2193  var lockStack = [];
2194  function RemoveScrollSideCar(props) {
2195    var shouldPreventQueue = React35.useRef([]);
2196    var touchStartRef = React35.useRef([0, 0]);
2197    var activeAxis = React35.useRef();
2198    var id = React35.useState(idCounter++)[0];
2199    var Style2 = React35.useState(styleSingleton)[0];
2200    var lastProps = React35.useRef(props);
2201    React35.useEffect(function() {
2202      lastProps.current = props;
2203    }, [props]);
2204    React35.useEffect(function() {
2205      if (props.inert) {
2206        document.body.classList.add("block-interactivity-".concat(id));
2207        var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);
2208        allow_1.forEach(function(el) {
2209          return el.classList.add("allow-interactivity-".concat(id));
2210        });
2211        return function() {
2212          document.body.classList.remove("block-interactivity-".concat(id));
2213          allow_1.forEach(function(el) {
2214            return el.classList.remove("allow-interactivity-".concat(id));
2215          });
2216        };
2217      }
2218      return;
2219    }, [props.inert, props.lockRef.current, props.shards]);
2220    var shouldCancelEvent = React35.useCallback(function(event, parent) {
2221      if ("touches" in event && event.touches.length === 2 || event.type === "wheel" && event.ctrlKey) {
2222        return !lastProps.current.allowPinchZoom;
2223      }
2224      var touch = getTouchXY(event);
2225      var touchStart = touchStartRef.current;
2226      var deltaX = "deltaX" in event ? event.deltaX : touchStart[0] - touch[0];
2227      var deltaY = "deltaY" in event ? event.deltaY : touchStart[1] - touch[1];
2228      var currentAxis;
2229      var target = event.target;
2230      var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? "h" : "v";
2231      if ("touches" in event && moveDirection === "h" && target.type === "range") {
2232        return false;
2233      }
2234      var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);
2235      if (!canBeScrolledInMainDirection) {
2236        return true;
2237      }
2238      if (canBeScrolledInMainDirection) {
2239        currentAxis = moveDirection;
2240      } else {
2241        currentAxis = moveDirection === "v" ? "h" : "v";
2242        canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);
2243      }
2244      if (!canBeScrolledInMainDirection) {
2245        return false;
2246      }
2247      if (!activeAxis.current && "changedTouches" in event && (deltaX || deltaY)) {
2248        activeAxis.current = currentAxis;
2249      }
2250      if (!currentAxis) {
2251        return true;
2252      }
2253      var cancelingAxis = activeAxis.current || currentAxis;
2254      return handleScroll(cancelingAxis, parent, event, cancelingAxis === "h" ? deltaX : deltaY, true);
2255    }, []);
2256    var shouldPrevent = React35.useCallback(function(_event) {
2257      var event = _event;
2258      if (!lockStack.length || lockStack[lockStack.length - 1] !== Style2) {
2259        return;
2260      }
2261      var delta = "deltaY" in event ? getDeltaXY(event) : getTouchXY(event);
2262      var sourceEvent = shouldPreventQueue.current.filter(function(e) {
2263        return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta);
2264      })[0];
2265      if (sourceEvent && sourceEvent.should) {
2266        if (event.cancelable) {
2267          event.preventDefault();
2268        }
2269        return;
2270      }
2271      if (!sourceEvent) {
2272        var shardNodes = (lastProps.current.shards || []).map(extractRef).filter(Boolean).filter(function(node) {
2273          return node.contains(event.target);
2274        });
2275        var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;
2276        if (shouldStop) {
2277          if (event.cancelable) {
2278            event.preventDefault();
2279          }
2280        }
2281      }
2282    }, []);
2283    var shouldCancel = React35.useCallback(function(name, delta, target, should) {
2284      var event = { name, delta, target, should, shadowParent: getOutermostShadowParent(target) };
2285      shouldPreventQueue.current.push(event);
2286      setTimeout(function() {
2287        shouldPreventQueue.current = shouldPreventQueue.current.filter(function(e) {
2288          return e !== event;
2289        });
2290      }, 1);
2291    }, []);
2292    var scrollTouchStart = React35.useCallback(function(event) {
2293      touchStartRef.current = getTouchXY(event);
2294      activeAxis.current = void 0;
2295    }, []);
2296    var scrollWheel = React35.useCallback(function(event) {
2297      shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));
2298    }, []);
2299    var scrollTouchMove = React35.useCallback(function(event) {
2300      shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));
2301    }, []);
2302    React35.useEffect(function() {
2303      lockStack.push(Style2);
2304      props.setCallbacks({
2305        onScrollCapture: scrollWheel,
2306        onWheelCapture: scrollWheel,
2307        onTouchMoveCapture: scrollTouchMove
2308      });
2309      document.addEventListener("wheel", shouldPrevent, nonPassive);
2310      document.addEventListener("touchmove", shouldPrevent, nonPassive);
2311      document.addEventListener("touchstart", scrollTouchStart, nonPassive);
2312      return function() {
2313        lockStack = lockStack.filter(function(inst) {
2314          return inst !== Style2;
2315        });
2316        document.removeEventListener("wheel", shouldPrevent, nonPassive);
2317        document.removeEventListener("touchmove", shouldPrevent, nonPassive);
2318        document.removeEventListener("touchstart", scrollTouchStart, nonPassive);
2319      };
2320    }, []);
2321    var removeScrollBar = props.removeScrollBar, inert = props.inert;
2322    return React35.createElement(
2323      React35.Fragment,
2324      null,
2325      inert ? React35.createElement(Style2, { styles: generateStyle(id) }) : null,
2326      removeScrollBar ? React35.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null
2327    );
2328  }
2329  function getOutermostShadowParent(node) {
2330    var shadowParent = null;
2331    while (node !== null) {
2332      if (node instanceof ShadowRoot) {
2333        shadowParent = node.host;
2334        node = node.host;
2335      }
2336      node = node.parentNode;
2337    }
2338    return shadowParent;
2339  }
2340  
2341  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/sidecar.js
2342  var sidecar_default = exportSidecar(effectCar, RemoveScrollSideCar);
2343  
2344  // node_modules/@radix-ui/react-dialog/node_modules/react-remove-scroll/dist/es2015/Combination.js
2345  var ReactRemoveScroll = React36.forwardRef(function(props, ref) {
2346    return React36.createElement(RemoveScroll, __assign({}, props, { ref, sideCar: sidecar_default }));
2347  });
2348  ReactRemoveScroll.classNames = RemoveScroll.classNames;
2349  var Combination_default = ReactRemoveScroll;
2350  
2351  // node_modules/aria-hidden/dist/es2015/index.js
2352  var getDefaultParent = function(originalTarget) {
2353    if (typeof document === "undefined") {
2354      return null;
2355    }
2356    var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;
2357    return sampleTarget.ownerDocument.body;
2358  };
2359  var counterMap = /* @__PURE__ */ new WeakMap();
2360  var uncontrolledNodes = /* @__PURE__ */ new WeakMap();
2361  var markerMap = {};
2362  var lockCount = 0;
2363  var unwrapHost = function(node) {
2364    return node && (node.host || unwrapHost(node.parentNode));
2365  };
2366  var correctTargets = function(parent, targets) {
2367    return targets.map(function(target) {
2368      if (parent.contains(target)) {
2369        return target;
2370      }
2371      var correctedTarget = unwrapHost(target);
2372      if (correctedTarget && parent.contains(correctedTarget)) {
2373        return correctedTarget;
2374      }
2375      console.error("aria-hidden", target, "in not contained inside", parent, ". Doing nothing");
2376      return null;
2377    }).filter(function(x) {
2378      return Boolean(x);
2379    });
2380  };
2381  var applyAttributeToOthers = function(originalTarget, parentNode, markerName, controlAttribute) {
2382    var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
2383    if (!markerMap[markerName]) {
2384      markerMap[markerName] = /* @__PURE__ */ new WeakMap();
2385    }
2386    var markerCounter = markerMap[markerName];
2387    var hiddenNodes = [];
2388    var elementsToKeep = /* @__PURE__ */ new Set();
2389    var elementsToStop = new Set(targets);
2390    var keep = function(el) {
2391      if (!el || elementsToKeep.has(el)) {
2392        return;
2393      }
2394      elementsToKeep.add(el);
2395      keep(el.parentNode);
2396    };
2397    targets.forEach(keep);
2398    var deep = function(parent) {
2399      if (!parent || elementsToStop.has(parent)) {
2400        return;
2401      }
2402      Array.prototype.forEach.call(parent.children, function(node) {
2403        if (elementsToKeep.has(node)) {
2404          deep(node);
2405        } else {
2406          try {
2407            var attr = node.getAttribute(controlAttribute);
2408            var alreadyHidden = attr !== null && attr !== "false";
2409            var counterValue = (counterMap.get(node) || 0) + 1;
2410            var markerValue = (markerCounter.get(node) || 0) + 1;
2411            counterMap.set(node, counterValue);
2412            markerCounter.set(node, markerValue);
2413            hiddenNodes.push(node);
2414            if (counterValue === 1 && alreadyHidden) {
2415              uncontrolledNodes.set(node, true);
2416            }
2417            if (markerValue === 1) {
2418              node.setAttribute(markerName, "true");
2419            }
2420            if (!alreadyHidden) {
2421              node.setAttribute(controlAttribute, "true");
2422            }
2423          } catch (e) {
2424            console.error("aria-hidden: cannot operate on ", node, e);
2425          }
2426        }
2427      });
2428    };
2429    deep(parentNode);
2430    elementsToKeep.clear();
2431    lockCount++;
2432    return function() {
2433      hiddenNodes.forEach(function(node) {
2434        var counterValue = counterMap.get(node) - 1;
2435        var markerValue = markerCounter.get(node) - 1;
2436        counterMap.set(node, counterValue);
2437        markerCounter.set(node, markerValue);
2438        if (!counterValue) {
2439          if (!uncontrolledNodes.has(node)) {
2440            node.removeAttribute(controlAttribute);
2441          }
2442          uncontrolledNodes.delete(node);
2443        }
2444        if (!markerValue) {
2445          node.removeAttribute(markerName);
2446        }
2447      });
2448      lockCount--;
2449      if (!lockCount) {
2450        counterMap = /* @__PURE__ */ new WeakMap();
2451        counterMap = /* @__PURE__ */ new WeakMap();
2452        uncontrolledNodes = /* @__PURE__ */ new WeakMap();
2453        markerMap = {};
2454      }
2455    };
2456  };
2457  var hideOthers = function(originalTarget, parentNode, markerName) {
2458    if (markerName === void 0) {
2459      markerName = "data-aria-hidden";
2460    }
2461    var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);
2462    var activeParentNode = parentNode || getDefaultParent(originalTarget);
2463    if (!activeParentNode) {
2464      return function() {
2465        return null;
2466      };
2467    }
2468    targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll("[aria-live], script")));
2469    return applyAttributeToOthers(targets, activeParentNode, markerName, "aria-hidden");
2470  };
2471  
2472  // node_modules/@radix-ui/react-dialog/dist/index.mjs
2473  var import_jsx_runtime13 = __toESM(require_jsx_runtime(), 1);
2474  var DIALOG_NAME = "Dialog";
2475  var [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);
2476  var [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);
2477  var Dialog = (props) => {
2478    const {
2479      __scopeDialog,
2480      children,
2481      open: openProp,
2482      defaultOpen,
2483      onOpenChange,
2484      modal = true
2485    } = props;
2486    const triggerRef = React37.useRef(null);
2487    const contentRef = React37.useRef(null);
2488    const [open, setOpen] = useControllableState({
2489      prop: openProp,
2490      defaultProp: defaultOpen ?? false,
2491      onChange: onOpenChange,
2492      caller: DIALOG_NAME
2493    });
2494    return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2495      DialogProvider,
2496      {
2497        scope: __scopeDialog,
2498        triggerRef,
2499        contentRef,
2500        contentId: useId(),
2501        titleId: useId(),
2502        descriptionId: useId(),
2503        open,
2504        onOpenChange: setOpen,
2505        onOpenToggle: React37.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),
2506        modal,
2507        children
2508      }
2509    );
2510  };
2511  Dialog.displayName = DIALOG_NAME;
2512  var TRIGGER_NAME = "DialogTrigger";
2513  var DialogTrigger = React37.forwardRef(
2514    (props, forwardedRef) => {
2515      const { __scopeDialog, ...triggerProps } = props;
2516      const context = useDialogContext(TRIGGER_NAME, __scopeDialog);
2517      const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);
2518      return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2519        Primitive4.button,
2520        {
2521          type: "button",
2522          "aria-haspopup": "dialog",
2523          "aria-expanded": context.open,
2524          "aria-controls": context.contentId,
2525          "data-state": getState(context.open),
2526          ...triggerProps,
2527          ref: composedTriggerRef,
2528          onClick: composeEventHandlers(props.onClick, context.onOpenToggle)
2529        }
2530      );
2531    }
2532  );
2533  DialogTrigger.displayName = TRIGGER_NAME;
2534  var PORTAL_NAME2 = "DialogPortal";
2535  var [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME2, {
2536    forceMount: void 0
2537  });
2538  var DialogPortal = (props) => {
2539    const { __scopeDialog, forceMount, children, container } = props;
2540    const context = useDialogContext(PORTAL_NAME2, __scopeDialog);
2541    return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(PortalProvider, { scope: __scopeDialog, forceMount, children: React37.Children.map(children, (child) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Portal, { asChild: true, container, children: child }) })) });
2542  };
2543  DialogPortal.displayName = PORTAL_NAME2;
2544  var OVERLAY_NAME = "DialogOverlay";
2545  var DialogOverlay = React37.forwardRef(
2546    (props, forwardedRef) => {
2547      const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);
2548      const { forceMount = portalContext.forceMount, ...overlayProps } = props;
2549      const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);
2550      return context.modal ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;
2551    }
2552  );
2553  DialogOverlay.displayName = OVERLAY_NAME;
2554  var Slot = createSlot4("DialogOverlay.RemoveScroll");
2555  var DialogOverlayImpl = React37.forwardRef(
2556    (props, forwardedRef) => {
2557      const { __scopeDialog, ...overlayProps } = props;
2558      const context = useDialogContext(OVERLAY_NAME, __scopeDialog);
2559      return (
2560        // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`
2561        // ie. when `Overlay` and `Content` are siblings
2562        /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Combination_default, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2563          Primitive4.div,
2564          {
2565            "data-state": getState(context.open),
2566            ...overlayProps,
2567            ref: forwardedRef,
2568            style: { pointerEvents: "auto", ...overlayProps.style }
2569          }
2570        ) })
2571      );
2572    }
2573  );
2574  var CONTENT_NAME = "DialogContent";
2575  var DialogContent = React37.forwardRef(
2576    (props, forwardedRef) => {
2577      const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);
2578      const { forceMount = portalContext.forceMount, ...contentProps } = props;
2579      const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);
2580      return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });
2581    }
2582  );
2583  DialogContent.displayName = CONTENT_NAME;
2584  var DialogContentModal = React37.forwardRef(
2585    (props, forwardedRef) => {
2586      const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);
2587      const contentRef = React37.useRef(null);
2588      const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);
2589      React37.useEffect(() => {
2590        const content = contentRef.current;
2591        if (content) return hideOthers(content);
2592      }, []);
2593      return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2594        DialogContentImpl,
2595        {
2596          ...props,
2597          ref: composedRefs,
2598          trapFocus: context.open,
2599          disableOutsidePointerEvents: true,
2600          onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {
2601            event.preventDefault();
2602            context.triggerRef.current?.focus();
2603          }),
2604          onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {
2605            const originalEvent = event.detail.originalEvent;
2606            const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;
2607            const isRightClick = originalEvent.button === 2 || ctrlLeftClick;
2608            if (isRightClick) event.preventDefault();
2609          }),
2610          onFocusOutside: composeEventHandlers(
2611            props.onFocusOutside,
2612            (event) => event.preventDefault()
2613          )
2614        }
2615      );
2616    }
2617  );
2618  var DialogContentNonModal = React37.forwardRef(
2619    (props, forwardedRef) => {
2620      const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);
2621      const hasInteractedOutsideRef = React37.useRef(false);
2622      const hasPointerDownOutsideRef = React37.useRef(false);
2623      return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2624        DialogContentImpl,
2625        {
2626          ...props,
2627          ref: forwardedRef,
2628          trapFocus: false,
2629          disableOutsidePointerEvents: false,
2630          onCloseAutoFocus: (event) => {
2631            props.onCloseAutoFocus?.(event);
2632            if (!event.defaultPrevented) {
2633              if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();
2634              event.preventDefault();
2635            }
2636            hasInteractedOutsideRef.current = false;
2637            hasPointerDownOutsideRef.current = false;
2638          },
2639          onInteractOutside: (event) => {
2640            props.onInteractOutside?.(event);
2641            if (!event.defaultPrevented) {
2642              hasInteractedOutsideRef.current = true;
2643              if (event.detail.originalEvent.type === "pointerdown") {
2644                hasPointerDownOutsideRef.current = true;
2645              }
2646            }
2647            const target = event.target;
2648            const targetIsTrigger = context.triggerRef.current?.contains(target);
2649            if (targetIsTrigger) event.preventDefault();
2650            if (event.detail.originalEvent.type === "focusin" && hasPointerDownOutsideRef.current) {
2651              event.preventDefault();
2652            }
2653          }
2654        }
2655      );
2656    }
2657  );
2658  var DialogContentImpl = React37.forwardRef(
2659    (props, forwardedRef) => {
2660      const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;
2661      const context = useDialogContext(CONTENT_NAME, __scopeDialog);
2662      const contentRef = React37.useRef(null);
2663      const composedRefs = useComposedRefs(forwardedRef, contentRef);
2664      useFocusGuards();
2665      return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
2666        /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2667          FocusScope,
2668          {
2669            asChild: true,
2670            loop: true,
2671            trapped: trapFocus,
2672            onMountAutoFocus: onOpenAutoFocus,
2673            onUnmountAutoFocus: onCloseAutoFocus,
2674            children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2675              DismissableLayer,
2676              {
2677                role: "dialog",
2678                id: context.contentId,
2679                "aria-describedby": context.descriptionId,
2680                "aria-labelledby": context.titleId,
2681                "data-state": getState(context.open),
2682                ...contentProps,
2683                ref: composedRefs,
2684                onDismiss: () => context.onOpenChange(false)
2685              }
2686            )
2687          }
2688        ),
2689        /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
2690          /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(TitleWarning, { titleId: context.titleId }),
2691          /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })
2692        ] })
2693      ] });
2694    }
2695  );
2696  var TITLE_NAME = "DialogTitle";
2697  var DialogTitle = React37.forwardRef(
2698    (props, forwardedRef) => {
2699      const { __scopeDialog, ...titleProps } = props;
2700      const context = useDialogContext(TITLE_NAME, __scopeDialog);
2701      return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Primitive4.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });
2702    }
2703  );
2704  DialogTitle.displayName = TITLE_NAME;
2705  var DESCRIPTION_NAME = "DialogDescription";
2706  var DialogDescription = React37.forwardRef(
2707    (props, forwardedRef) => {
2708      const { __scopeDialog, ...descriptionProps } = props;
2709      const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);
2710      return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Primitive4.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });
2711    }
2712  );
2713  DialogDescription.displayName = DESCRIPTION_NAME;
2714  var CLOSE_NAME = "DialogClose";
2715  var DialogClose = React37.forwardRef(
2716    (props, forwardedRef) => {
2717      const { __scopeDialog, ...closeProps } = props;
2718      const context = useDialogContext(CLOSE_NAME, __scopeDialog);
2719      return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
2720        Primitive4.button,
2721        {
2722          type: "button",
2723          ...closeProps,
2724          ref: forwardedRef,
2725          onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))
2726        }
2727      );
2728    }
2729  );
2730  DialogClose.displayName = CLOSE_NAME;
2731  function getState(open) {
2732    return open ? "open" : "closed";
2733  }
2734  var TITLE_WARNING_NAME = "DialogTitleWarning";
2735  var [WarningProvider, useWarningContext] = createContext2(TITLE_WARNING_NAME, {
2736    contentName: CONTENT_NAME,
2737    titleName: TITLE_NAME,
2738    docsSlug: "dialog"
2739  });
2740  var TitleWarning = ({ titleId }) => {
2741    const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);
2742    const MESSAGE = `\`$titleWarningContext.contentName}\` requires a \`$titleWarningContext.titleName}\` for the component to be accessible for screen reader users.
2743  
2744  If you want to hide the \`$titleWarningContext.titleName}\`, you can wrap it with our VisuallyHidden component.
2745  
2746  For more information, see https://radix-ui.com/primitives/docs/components/$titleWarningContext.docsSlug}`;
2747    React37.useEffect(() => {
2748      if (titleId) {
2749        const hasTitle = document.getElementById(titleId);
2750        if (!hasTitle) console.error(MESSAGE);
2751      }
2752    }, [MESSAGE, titleId]);
2753    return null;
2754  };
2755  var DESCRIPTION_WARNING_NAME = "DialogDescriptionWarning";
2756  var DescriptionWarning = ({ contentRef, descriptionId }) => {
2757    const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);
2758    const MESSAGE = `Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {$descriptionWarningContext.contentName}}.`;
2759    React37.useEffect(() => {
2760      const describedById = contentRef.current?.getAttribute("aria-describedby");
2761      if (descriptionId && describedById) {
2762        const hasDescription = document.getElementById(descriptionId);
2763        if (!hasDescription) console.warn(MESSAGE);
2764      }
2765    }, [MESSAGE, contentRef, descriptionId]);
2766    return null;
2767  };
2768  var Root = Dialog;
2769  var Portal2 = DialogPortal;
2770  var Overlay = DialogOverlay;
2771  var Content = DialogContent;
2772  
2773  // node_modules/cmdk/dist/index.mjs
2774  var t = __toESM(require_react(), 1);
2775  
2776  // node_modules/cmdk/node_modules/@radix-ui/react-primitive/dist/index.mjs
2777  var React40 = __toESM(require_react(), 1);
2778  var ReactDOM6 = __toESM(require_react_dom(), 1);
2779  
2780  // node_modules/cmdk/node_modules/@radix-ui/react-slot/dist/index.mjs
2781  var React39 = __toESM(require_react(), 1);
2782  
2783  // node_modules/cmdk/node_modules/@radix-ui/react-compose-refs/dist/index.mjs
2784  var React38 = __toESM(require_react(), 1);
2785  function setRef6(ref, value) {
2786    if (typeof ref === "function") {
2787      return ref(value);
2788    } else if (ref !== null && ref !== void 0) {
2789      ref.current = value;
2790    }
2791  }
2792  function composeRefs6(...refs) {
2793    return (node) => {
2794      let hasCleanup = false;
2795      const cleanups = refs.map((ref) => {
2796        const cleanup = setRef6(ref, node);
2797        if (!hasCleanup && typeof cleanup == "function") {
2798          hasCleanup = true;
2799        }
2800        return cleanup;
2801      });
2802      if (hasCleanup) {
2803        return () => {
2804          for (let i = 0; i < cleanups.length; i++) {
2805            const cleanup = cleanups[i];
2806            if (typeof cleanup == "function") {
2807              cleanup();
2808            } else {
2809              setRef6(refs[i], null);
2810            }
2811          }
2812        };
2813      }
2814    };
2815  }
2816  
2817  // node_modules/cmdk/node_modules/@radix-ui/react-slot/dist/index.mjs
2818  var import_jsx_runtime14 = __toESM(require_jsx_runtime(), 1);
2819  var REACT_LAZY_TYPE = Symbol.for("react.lazy");
2820  var use = React39[" use ".trim().toString()];
2821  function isPromiseLike(value) {
2822    return typeof value === "object" && value !== null && "then" in value;
2823  }
2824  function isLazyComponent(element) {
2825    return element != null && typeof element === "object" && "$$typeof" in element && element.$$typeof === REACT_LAZY_TYPE && "_payload" in element && isPromiseLike(element._payload);
2826  }
2827  // @__NO_SIDE_EFFECTS__
2828  function createSlot5(ownerName) {
2829    const SlotClone = /* @__PURE__ */ createSlotClone5(ownerName);
2830    const Slot2 = React39.forwardRef((props, forwardedRef) => {
2831      let { children, ...slotProps } = props;
2832      if (isLazyComponent(children) && typeof use === "function") {
2833        children = use(children._payload);
2834      }
2835      const childrenArray = React39.Children.toArray(children);
2836      const slottable = childrenArray.find(isSlottable5);
2837      if (slottable) {
2838        const newElement = slottable.props.children;
2839        const newChildren = childrenArray.map((child) => {
2840          if (child === slottable) {
2841            if (React39.Children.count(newElement) > 1) return React39.Children.only(null);
2842            return React39.isValidElement(newElement) ? newElement.props.children : null;
2843          } else {
2844            return child;
2845          }
2846        });
2847        return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children: React39.isValidElement(newElement) ? React39.cloneElement(newElement, void 0, newChildren) : null });
2848      }
2849      return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(SlotClone, { ...slotProps, ref: forwardedRef, children });
2850    });
2851    Slot2.displayName = `$ownerName}.Slot`;
2852    return Slot2;
2853  }
2854  // @__NO_SIDE_EFFECTS__
2855  function createSlotClone5(ownerName) {
2856    const SlotClone = React39.forwardRef((props, forwardedRef) => {
2857      let { children, ...slotProps } = props;
2858      if (isLazyComponent(children) && typeof use === "function") {
2859        children = use(children._payload);
2860      }
2861      if (React39.isValidElement(children)) {
2862        const childrenRef = getElementRef6(children);
2863        const props2 = mergeProps5(slotProps, children.props);
2864        if (children.type !== React39.Fragment) {
2865          props2.ref = forwardedRef ? composeRefs6(forwardedRef, childrenRef) : childrenRef;
2866        }
2867        return React39.cloneElement(children, props2);
2868      }
2869      return React39.Children.count(children) > 1 ? React39.Children.only(null) : null;
2870    });
2871    SlotClone.displayName = `$ownerName}.SlotClone`;
2872    return SlotClone;
2873  }
2874  var SLOTTABLE_IDENTIFIER5 = Symbol("radix.slottable");
2875  function isSlottable5(child) {
2876    return React39.isValidElement(child) && typeof child.type === "function" && "__radixId" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER5;
2877  }
2878  function mergeProps5(slotProps, childProps) {
2879    const overrideProps = { ...childProps };
2880    for (const propName in childProps) {
2881      const slotPropValue = slotProps[propName];
2882      const childPropValue = childProps[propName];
2883      const isHandler = /^on[A-Z]/.test(propName);
2884      if (isHandler) {
2885        if (slotPropValue && childPropValue) {
2886          overrideProps[propName] = (...args) => {
2887            const result = childPropValue(...args);
2888            slotPropValue(...args);
2889            return result;
2890          };
2891        } else if (slotPropValue) {
2892          overrideProps[propName] = slotPropValue;
2893        }
2894      } else if (propName === "style") {
2895        overrideProps[propName] = { ...slotPropValue, ...childPropValue };
2896      } else if (propName === "className") {
2897        overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(" ");
2898      }
2899    }
2900    return { ...slotProps, ...overrideProps };
2901  }
2902  function getElementRef6(element) {
2903    let getter = Object.getOwnPropertyDescriptor(element.props, "ref")?.get;
2904    let mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
2905    if (mayWarn) {
2906      return element.ref;
2907    }
2908    getter = Object.getOwnPropertyDescriptor(element, "ref")?.get;
2909    mayWarn = getter && "isReactWarning" in getter && getter.isReactWarning;
2910    if (mayWarn) {
2911      return element.props.ref;
2912    }
2913    return element.props.ref || element.ref;
2914  }
2915  
2916  // node_modules/cmdk/node_modules/@radix-ui/react-primitive/dist/index.mjs
2917  var import_jsx_runtime15 = __toESM(require_jsx_runtime(), 1);
2918  var NODES5 = [
2919    "a",
2920    "button",
2921    "div",
2922    "form",
2923    "h2",
2924    "h3",
2925    "img",
2926    "input",
2927    "label",
2928    "li",
2929    "nav",
2930    "ol",
2931    "p",
2932    "select",
2933    "span",
2934    "svg",
2935    "ul"
2936  ];
2937  var Primitive5 = NODES5.reduce((primitive, node) => {
2938    const Slot2 = createSlot5(`Primitive.$node}`);
2939    const Node2 = React40.forwardRef((props, forwardedRef) => {
2940      const { asChild, ...primitiveProps } = props;
2941      const Comp = asChild ? Slot2 : node;
2942      if (typeof window !== "undefined") {
2943        window[Symbol.for("radix-ui")] = true;
2944      }
2945      return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Comp, { ...primitiveProps, ref: forwardedRef });
2946    });
2947    Node2.displayName = `Primitive.$node}`;
2948    return { ...primitive, [node]: Node2 };
2949  }, {});
2950  
2951  // node_modules/cmdk/node_modules/@radix-ui/react-id/dist/index.mjs
2952  var React42 = __toESM(require_react(), 1);
2953  
2954  // node_modules/cmdk/node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs
2955  var React41 = __toESM(require_react(), 1);
2956  var useLayoutEffect24 = globalThis?.document ? React41.useLayoutEffect : () => {
2957  };
2958  
2959  // node_modules/cmdk/node_modules/@radix-ui/react-id/dist/index.mjs
2960  var useReactId2 = React42[" useId ".trim().toString()] || (() => void 0);
2961  var count3 = 0;
2962  function useId2(deterministicId) {
2963    const [id, setId] = React42.useState(useReactId2());
2964    useLayoutEffect24(() => {
2965      if (!deterministicId) setId((reactId) => reactId ?? String(count3++));
2966    }, [deterministicId]);
2967    return deterministicId || (id ? `radix-$id}` : "");
2968  }
2969  
2970  // node_modules/cmdk/dist/index.mjs
2971  var N = '[cmdk-group=""]';
2972  var Y2 = '[cmdk-group-items=""]';
2973  var be = '[cmdk-group-heading=""]';
2974  var le = '[cmdk-item=""]';
2975  var ce = `$le}:not([aria-disabled="true"])`;
2976  var Z = "cmdk-item-select";
2977  var T = "data-value";
2978  var Re = (r, o, n) => W(r, o, n);
2979  var ue = t.createContext(void 0);
2980  var K2 = () => t.useContext(ue);
2981  var de = t.createContext(void 0);
2982  var ee = () => t.useContext(de);
2983  var fe = t.createContext(void 0);
2984  var me = t.forwardRef((r, o) => {
2985    let n = L(() => {
2986      var e, a;
2987      return { search: "", value: (a = (e = r.value) != null ? e : r.defaultValue) != null ? a : "", selectedItemId: void 0, filtered: { count: 0, items: /* @__PURE__ */ new Map(), groups: /* @__PURE__ */ new Set() } };
2988    }), u2 = L(() => /* @__PURE__ */ new Set()), c = L(() => /* @__PURE__ */ new Map()), d = L(() => /* @__PURE__ */ new Map()), f = L(() => /* @__PURE__ */ new Set()), p2 = pe(r), { label: b, children: m2, value: R, onValueChange: x, filter: C, shouldFilter: S, loop: A, disablePointerSelection: ge = false, vimBindings: j = true, ...O } = r, $2 = useId2(), q = useId2(), _ = useId2(), I = t.useRef(null), v = ke();
2989    k2(() => {
2990      if (R !== void 0) {
2991        let e = R.trim();
2992        n.current.value = e, E.emit();
2993      }
2994    }, [R]), k2(() => {
2995      v(6, ne);
2996    }, []);
2997    let E = t.useMemo(() => ({ subscribe: (e) => (f.current.add(e), () => f.current.delete(e)), snapshot: () => n.current, setState: (e, a, s) => {
2998      var i, l, g, y;
2999      if (!Object.is(n.current[e], a)) {
3000        if (n.current[e] = a, e === "search") J2(), z(), v(1, W2);
3001        else if (e === "value") {
3002          if (document.activeElement.hasAttribute("cmdk-input") || document.activeElement.hasAttribute("cmdk-root")) {
3003            let h = document.getElementById(_);
3004            h ? h.focus() : (i = document.getElementById($2)) == null || i.focus();
3005          }
3006          if (v(7, () => {
3007            var h;
3008            n.current.selectedItemId = (h = M()) == null ? void 0 : h.id, E.emit();
3009          }), s || v(5, ne), ((l = p2.current) == null ? void 0 : l.value) !== void 0) {
3010            let h = a != null ? a : "";
3011            (y = (g = p2.current).onValueChange) == null || y.call(g, h);
3012            return;
3013          }
3014        }
3015        E.emit();
3016      }
3017    }, emit: () => {
3018      f.current.forEach((e) => e());
3019    } }), []), U2 = t.useMemo(() => ({ value: (e, a, s) => {
3020      var i;
3021      a !== ((i = d.current.get(e)) == null ? void 0 : i.value) && (d.current.set(e, { value: a, keywords: s }), n.current.filtered.items.set(e, te(a, s)), v(2, () => {
3022        z(), E.emit();
3023      }));
3024    }, item: (e, a) => (u2.current.add(e), a && (c.current.has(a) ? c.current.get(a).add(e) : c.current.set(a, /* @__PURE__ */ new Set([e]))), v(3, () => {
3025      J2(), z(), n.current.value || W2(), E.emit();
3026    }), () => {
3027      d.current.delete(e), u2.current.delete(e), n.current.filtered.items.delete(e);
3028      let s = M();
3029      v(4, () => {
3030        J2(), (s == null ? void 0 : s.getAttribute("id")) === e && W2(), E.emit();
3031      });
3032    }), group: (e) => (c.current.has(e) || c.current.set(e, /* @__PURE__ */ new Set()), () => {
3033      d.current.delete(e), c.current.delete(e);
3034    }), filter: () => p2.current.shouldFilter, label: b || r["aria-label"], getDisablePointerSelection: () => p2.current.disablePointerSelection, listId: $2, inputId: _, labelId: q, listInnerRef: I }), []);
3035    function te(e, a) {
3036      var i, l;
3037      let s = (l = (i = p2.current) == null ? void 0 : i.filter) != null ? l : Re;
3038      return e ? s(e, n.current.search, a) : 0;
3039    }
3040    function z() {
3041      if (!n.current.search || p2.current.shouldFilter === false) return;
3042      let e = n.current.filtered.items, a = [];
3043      n.current.filtered.groups.forEach((i) => {
3044        let l = c.current.get(i), g = 0;
3045        l.forEach((y) => {
3046          let h = e.get(y);
3047          g = Math.max(h, g);
3048        }), a.push([i, g]);
3049      });
3050      let s = I.current;
3051      V().sort((i, l) => {
3052        var h, F;
3053        let g = i.getAttribute("id"), y = l.getAttribute("id");
3054        return ((h = e.get(y)) != null ? h : 0) - ((F = e.get(g)) != null ? F : 0);
3055      }).forEach((i) => {
3056        let l = i.closest(Y2);
3057        l ? l.appendChild(i.parentElement === l ? i : i.closest(`$Y2} > *`)) : s.appendChild(i.parentElement === s ? i : i.closest(`$Y2} > *`));
3058      }), a.sort((i, l) => l[1] - i[1]).forEach((i) => {
3059        var g;
3060        let l = (g = I.current) == null ? void 0 : g.querySelector(`$N}[$T}="$encodeURIComponent(i[0])}"]`);
3061        l == null || l.parentElement.appendChild(l);
3062      });
3063    }
3064    function W2() {
3065      let e = V().find((s) => s.getAttribute("aria-disabled") !== "true"), a = e == null ? void 0 : e.getAttribute(T);
3066      E.setState("value", a || void 0);
3067    }
3068    function J2() {
3069      var a, s, i, l;
3070      if (!n.current.search || p2.current.shouldFilter === false) {
3071        n.current.filtered.count = u2.current.size;
3072        return;
3073      }
3074      n.current.filtered.groups = /* @__PURE__ */ new Set();
3075      let e = 0;
3076      for (let g of u2.current) {
3077        let y = (s = (a = d.current.get(g)) == null ? void 0 : a.value) != null ? s : "", h = (l = (i = d.current.get(g)) == null ? void 0 : i.keywords) != null ? l : [], F = te(y, h);
3078        n.current.filtered.items.set(g, F), F > 0 && e++;
3079      }
3080      for (let [g, y] of c.current) for (let h of y) if (n.current.filtered.items.get(h) > 0) {
3081        n.current.filtered.groups.add(g);
3082        break;
3083      }
3084      n.current.filtered.count = e;
3085    }
3086    function ne() {
3087      var a, s, i;
3088      let e = M();
3089      e && (((a = e.parentElement) == null ? void 0 : a.firstChild) === e && ((i = (s = e.closest(N)) == null ? void 0 : s.querySelector(be)) == null || i.scrollIntoView({ block: "nearest" })), e.scrollIntoView({ block: "nearest" }));
3090    }
3091    function M() {
3092      var e;
3093      return (e = I.current) == null ? void 0 : e.querySelector(`$le}[aria-selected="true"]`);
3094    }
3095    function V() {
3096      var e;
3097      return Array.from(((e = I.current) == null ? void 0 : e.querySelectorAll(ce)) || []);
3098    }
3099    function X2(e) {
3100      let s = V()[e];
3101      s && E.setState("value", s.getAttribute(T));
3102    }
3103    function Q(e) {
3104      var g;
3105      let a = M(), s = V(), i = s.findIndex((y) => y === a), l = s[i + e];
3106      (g = p2.current) != null && g.loop && (l = i + e < 0 ? s[s.length - 1] : i + e === s.length ? s[0] : s[i + e]), l && E.setState("value", l.getAttribute(T));
3107    }
3108    function re(e) {
3109      let a = M(), s = a == null ? void 0 : a.closest(N), i;
3110      for (; s && !i; ) s = e > 0 ? we(s, N) : De(s, N), i = s == null ? void 0 : s.querySelector(ce);
3111      i ? E.setState("value", i.getAttribute(T)) : Q(e);
3112    }
3113    let oe = () => X2(V().length - 1), ie = (e) => {
3114      e.preventDefault(), e.metaKey ? oe() : e.altKey ? re(1) : Q(1);
3115    }, se = (e) => {
3116      e.preventDefault(), e.metaKey ? X2(0) : e.altKey ? re(-1) : Q(-1);
3117    };
3118    return t.createElement(Primitive5.div, { ref: o, tabIndex: -1, ...O, "cmdk-root": "", onKeyDown: (e) => {
3119      var s;
3120      (s = O.onKeyDown) == null || s.call(O, e);
3121      let a = e.nativeEvent.isComposing || e.keyCode === 229;
3122      if (!(e.defaultPrevented || a)) switch (e.key) {
3123        case "n":
3124        case "j": {
3125          j && e.ctrlKey && ie(e);
3126          break;
3127        }
3128        case "ArrowDown": {
3129          ie(e);
3130          break;
3131        }
3132        case "p":
3133        case "k": {
3134          j && e.ctrlKey && se(e);
3135          break;
3136        }
3137        case "ArrowUp": {
3138          se(e);
3139          break;
3140        }
3141        case "Home": {
3142          e.preventDefault(), X2(0);
3143          break;
3144        }
3145        case "End": {
3146          e.preventDefault(), oe();
3147          break;
3148        }
3149        case "Enter": {
3150          e.preventDefault();
3151          let i = M();
3152          if (i) {
3153            let l = new Event(Z);
3154            i.dispatchEvent(l);
3155          }
3156        }
3157      }
3158    } }, t.createElement("label", { "cmdk-label": "", htmlFor: U2.inputId, id: U2.labelId, style: Te }, b), B2(r, (e) => t.createElement(de.Provider, { value: E }, t.createElement(ue.Provider, { value: U2 }, e))));
3159  });
3160  var he = t.forwardRef((r, o) => {
3161    var _, I;
3162    let n = useId2(), u2 = t.useRef(null), c = t.useContext(fe), d = K2(), f = pe(r), p2 = (I = (_ = f.current) == null ? void 0 : _.forceMount) != null ? I : c == null ? void 0 : c.forceMount;
3163    k2(() => {
3164      if (!p2) return d.item(n, c == null ? void 0 : c.id);
3165    }, [p2]);
3166    let b = ve(n, u2, [r.value, r.children, u2], r.keywords), m2 = ee(), R = P((v) => v.value && v.value === b.current), x = P((v) => p2 || d.filter() === false ? true : v.search ? v.filtered.items.get(n) > 0 : true);
3167    t.useEffect(() => {
3168      let v = u2.current;
3169      if (!(!v || r.disabled)) return v.addEventListener(Z, C), () => v.removeEventListener(Z, C);
3170    }, [x, r.onSelect, r.disabled]);
3171    function C() {
3172      var v, E;
3173      S(), (E = (v = f.current).onSelect) == null || E.call(v, b.current);
3174    }
3175    function S() {
3176      m2.setState("value", b.current, true);
3177    }
3178    if (!x) return null;
3179    let { disabled: A, value: ge, onSelect: j, forceMount: O, keywords: $2, ...q } = r;
3180    return t.createElement(Primitive5.div, { ref: composeRefs6(u2, o), ...q, id: n, "cmdk-item": "", role: "option", "aria-disabled": !!A, "aria-selected": !!R, "data-disabled": !!A, "data-selected": !!R, onPointerMove: A || d.getDisablePointerSelection() ? void 0 : S, onClick: A ? void 0 : C }, r.children);
3181  });
3182  var Ee = t.forwardRef((r, o) => {
3183    let { heading: n, children: u2, forceMount: c, ...d } = r, f = useId2(), p2 = t.useRef(null), b = t.useRef(null), m2 = useId2(), R = K2(), x = P((S) => c || R.filter() === false ? true : S.search ? S.filtered.groups.has(f) : true);
3184    k2(() => R.group(f), []), ve(f, p2, [r.value, r.heading, b]);
3185    let C = t.useMemo(() => ({ id: f, forceMount: c }), [c]);
3186    return t.createElement(Primitive5.div, { ref: composeRefs6(p2, o), ...d, "cmdk-group": "", role: "presentation", hidden: x ? void 0 : true }, n && t.createElement("div", { ref: b, "cmdk-group-heading": "", "aria-hidden": true, id: m2 }, n), B2(r, (S) => t.createElement("div", { "cmdk-group-items": "", role: "group", "aria-labelledby": n ? m2 : void 0 }, t.createElement(fe.Provider, { value: C }, S))));
3187  });
3188  var ye = t.forwardRef((r, o) => {
3189    let { alwaysRender: n, ...u2 } = r, c = t.useRef(null), d = P((f) => !f.search);
3190    return !n && !d ? null : t.createElement(Primitive5.div, { ref: composeRefs6(c, o), ...u2, "cmdk-separator": "", role: "separator" });
3191  });
3192  var Se = t.forwardRef((r, o) => {
3193    let { onValueChange: n, ...u2 } = r, c = r.value != null, d = ee(), f = P((m2) => m2.search), p2 = P((m2) => m2.selectedItemId), b = K2();
3194    return t.useEffect(() => {
3195      r.value != null && d.setState("search", r.value);
3196    }, [r.value]), t.createElement(Primitive5.input, { ref: o, ...u2, "cmdk-input": "", autoComplete: "off", autoCorrect: "off", spellCheck: false, "aria-autocomplete": "list", role: "combobox", "aria-expanded": true, "aria-controls": b.listId, "aria-labelledby": b.labelId, "aria-activedescendant": p2, id: b.inputId, type: "text", value: c ? r.value : f, onChange: (m2) => {
3197      c || d.setState("search", m2.target.value), n == null || n(m2.target.value);
3198    } });
3199  });
3200  var Ce = t.forwardRef((r, o) => {
3201    let { children: n, label: u2 = "Suggestions", ...c } = r, d = t.useRef(null), f = t.useRef(null), p2 = P((m2) => m2.selectedItemId), b = K2();
3202    return t.useEffect(() => {
3203      if (f.current && d.current) {
3204        let m2 = f.current, R = d.current, x, C = new ResizeObserver(() => {
3205          x = requestAnimationFrame(() => {
3206            let S = m2.offsetHeight;
3207            R.style.setProperty("--cmdk-list-height", S.toFixed(1) + "px");
3208          });
3209        });
3210        return C.observe(m2), () => {
3211          cancelAnimationFrame(x), C.unobserve(m2);
3212        };
3213      }
3214    }, []), t.createElement(Primitive5.div, { ref: composeRefs6(d, o), ...c, "cmdk-list": "", role: "listbox", tabIndex: -1, "aria-activedescendant": p2, "aria-label": u2, id: b.listId }, B2(r, (m2) => t.createElement("div", { ref: composeRefs6(f, b.listInnerRef), "cmdk-list-sizer": "" }, m2)));
3215  });
3216  var xe = t.forwardRef((r, o) => {
3217    let { open: n, onOpenChange: u2, overlayClassName: c, contentClassName: d, container: f, ...p2 } = r;
3218    return t.createElement(Root, { open: n, onOpenChange: u2 }, t.createElement(Portal2, { container: f }, t.createElement(Overlay, { "cmdk-overlay": "", className: c }), t.createElement(Content, { "aria-label": r.label, "cmdk-dialog": "", className: d }, t.createElement(me, { ref: o, ...p2 }))));
3219  });
3220  var Ie = t.forwardRef((r, o) => P((u2) => u2.filtered.count === 0) ? t.createElement(Primitive5.div, { ref: o, ...r, "cmdk-empty": "", role: "presentation" }) : null);
3221  var Pe = t.forwardRef((r, o) => {
3222    let { progress: n, children: u2, label: c = "Loading...", ...d } = r;
3223    return t.createElement(Primitive5.div, { ref: o, ...d, "cmdk-loading": "", role: "progressbar", "aria-valuenow": n, "aria-valuemin": 0, "aria-valuemax": 100, "aria-label": c }, B2(r, (f) => t.createElement("div", { "aria-hidden": true }, f)));
3224  });
3225  var _e = Object.assign(me, { List: Ce, Item: he, Input: Se, Group: Ee, Separator: ye, Dialog: xe, Empty: Ie, Loading: Pe });
3226  function we(r, o) {
3227    let n = r.nextElementSibling;
3228    for (; n; ) {
3229      if (n.matches(o)) return n;
3230      n = n.nextElementSibling;
3231    }
3232  }
3233  function De(r, o) {
3234    let n = r.previousElementSibling;
3235    for (; n; ) {
3236      if (n.matches(o)) return n;
3237      n = n.previousElementSibling;
3238    }
3239  }
3240  function pe(r) {
3241    let o = t.useRef(r);
3242    return k2(() => {
3243      o.current = r;
3244    }), o;
3245  }
3246  var k2 = typeof window == "undefined" ? t.useEffect : t.useLayoutEffect;
3247  function L(r) {
3248    let o = t.useRef();
3249    return o.current === void 0 && (o.current = r()), o;
3250  }
3251  function P(r) {
3252    let o = ee(), n = () => r(o.snapshot());
3253    return t.useSyncExternalStore(o.subscribe, n, n);
3254  }
3255  function ve(r, o, n, u2 = []) {
3256    let c = t.useRef(), d = K2();
3257    return k2(() => {
3258      var b;
3259      let f = (() => {
3260        var m2;
3261        for (let R of n) {
3262          if (typeof R == "string") return R.trim();
3263          if (typeof R == "object" && "current" in R) return R.current ? (m2 = R.current.textContent) == null ? void 0 : m2.trim() : c.current;
3264        }
3265      })(), p2 = u2.map((m2) => m2.trim());
3266      d.value(r, f, p2), (b = o.current) == null || b.setAttribute(T, f), c.current = f;
3267    }), c;
3268  }
3269  var ke = () => {
3270    let [r, o] = t.useState(), n = L(() => /* @__PURE__ */ new Map());
3271    return k2(() => {
3272      n.current.forEach((u2) => u2()), n.current = /* @__PURE__ */ new Map();
3273    }, [r]), (u2, c) => {
3274      n.current.set(u2, c), o({});
3275    };
3276  };
3277  function Me(r) {
3278    let o = r.type;
3279    return typeof o == "function" ? o(r.props) : "render" in o ? o.render(r.props) : r;
3280  }
3281  function B2({ asChild: r, children: o }, n) {
3282    return r && t.isValidElement(o) ? t.cloneElement(Me(o), { ref: o.ref }, n(o.props.children)) : n(o);
3283  }
3284  var Te = { position: "absolute", width: "1px", height: "1px", padding: "0", margin: "-1px", overflow: "hidden", clip: "rect(0, 0, 0, 0)", whiteSpace: "nowrap", borderWidth: "0" };
3285  
3286  // packages/workflow/build-module/components/workflow-menu.js
3287  var import_data = __toESM(require_data());
3288  var import_element2 = __toESM(require_element());
3289  var import_i18n = __toESM(require_i18n());
3290  var import_components = __toESM(require_components());
3291  var import_keyboard_shortcuts = __toESM(require_keyboard_shortcuts());
3292  
3293  // packages/icons/build-module/icon/index.js
3294  var import_element = __toESM(require_element());
3295  var icon_default = (0, import_element.forwardRef)(
3296    ({ icon, size = 24, ...props }, ref) => {
3297      return (0, import_element.cloneElement)(icon, {
3298        width: size,
3299        height: size,
3300        ...props,
3301        ref
3302      });
3303    }
3304  );
3305  
3306  // packages/icons/build-module/library/search.js
3307  var import_primitives = __toESM(require_primitives());
3308  var import_jsx_runtime16 = __toESM(require_jsx_runtime());
3309  var search_default = /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives.SVG, { xmlns: "http://www.w3.org/2000/svg", viewBox: "0 0 24 24", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_primitives.Path, { d: "M13 5c-3.3 0-6 2.7-6 6 0 1.4.5 2.7 1.3 3.7l-3.8 3.8 1.1 1.1 3.8-3.8c1 .8 2.3 1.3 3.7 1.3 3.3 0 6-2.7 6-6S16.3 5 13 5zm0 10.5c-2.5 0-4.5-2-4.5-4.5s2-4.5 4.5-4.5 4.5 2 4.5 4.5-2 4.5-4.5 4.5z" }) });
3310  
3311  // packages/workflow/build-module/components/workflow-menu.js
3312  import { executeAbility, store as abilitiesStore } from "@wordpress/abilities";
3313  
3314  // packages/workflow/build-module/lock-unlock.js
3315  var import_private_apis = __toESM(require_private_apis());
3316  var { lock, unlock } = (0, import_private_apis.__dangerousOptInToUnstableAPIsOnlyForCoreModules)(
3317    "I acknowledge private features are not for use in themes or plugins and doing so will break in the next version of WordPress.",
3318    "@wordpress/workflows"
3319  );
3320  
3321  // packages/workflow/build-module/components/workflow-menu.js
3322  var import_jsx_runtime17 = __toESM(require_jsx_runtime());
3323  var css = `/**
3324   * Typography
3325   */
3326  /**
3327   * SCSS Variables.
3328   *
3329   * Please use variables from this sheet to ensure consistency across the UI.
3330   * Don't add to this sheet unless you're pretty sure the value will be reused in many places.
3331   * For example, don't add rules to this sheet that affect block visuals. It's purely for UI.
3332   */
3333  /**
3334   * Colors
3335   */
3336  /**
3337   * Fonts & basic variables.
3338   */
3339  /**
3340   * Typography
3341   */
3342  /**
3343   * Grid System.
3344   * https://make.wordpress.org/design/2019/10/31/proposal-a-consistent-spacing-system-for-wordpress/
3345   */
3346  /**
3347   * Radius scale.
3348   */
3349  /**
3350   * Elevation scale.
3351   */
3352  /**
3353   * Dimensions.
3354   */
3355  /**
3356   * Mobile specific styles
3357   */
3358  /**
3359   * Editor styles.
3360   */
3361  /**
3362   * Block & Editor UI.
3363   */
3364  /**
3365   * Block paddings.
3366   */
3367  /**
3368   * React Native specific.
3369   * These variables do not appear to be used anywhere else.
3370   */
3371  /**
3372   * Breakpoints & Media Queries
3373   */
3374  /**
3375  *  Converts a hex value into the rgb equivalent.
3376  *
3377  * @param {string} hex - the hexadecimal value to convert
3378  * @return {string} comma separated rgb values
3379  */
3380  /**
3381   * Long content fade mixin
3382   *
3383   * Creates a fading overlay to signify that the content is longer
3384   * than the space allows.
3385   */
3386  /**
3387   * Breakpoint mixins
3388   */
3389  /**
3390   * Focus styles.
3391   */
3392  /**
3393   * Applies editor left position to the selector passed as argument
3394   */
3395  /**
3396   * Styles that are reused verbatim in a few places
3397   */
3398  /**
3399   * Allows users to opt-out of animations via OS-level preferences.
3400   */
3401  /**
3402   * Reset default styles for JavaScript UI based pages.
3403   * This is a WP-admin agnostic reset
3404   */
3405  /**
3406   * Reset the WP Admin page styles for Gutenberg-like pages.
3407   */
3408  :root {
3409    --wp-block-synced-color: #7a00df;
3410    --wp-block-synced-color--rgb: 122, 0, 223;
3411    --wp-bound-block-color: var(--wp-block-synced-color);
3412    --wp-editor-canvas-background: #ddd;
3413    --wp-admin-theme-color: #007cba;
3414    --wp-admin-theme-color--rgb: 0, 124, 186;
3415    --wp-admin-theme-color-darker-10: rgb(0, 107, 160.5);
3416    --wp-admin-theme-color-darker-10--rgb: 0, 107, 160.5;
3417    --wp-admin-theme-color-darker-20: #005a87;
3418    --wp-admin-theme-color-darker-20--rgb: 0, 90, 135;
3419    --wp-admin-border-width-focus: 2px;
3420  }
3421  @media (-webkit-min-device-pixel-ratio: 2), (min-resolution: 192dpi) {
3422    :root {
3423      --wp-admin-border-width-focus: 1.5px;
3424    }
3425  }
3426  
3427  .workflows-workflow-menu {
3428    border-radius: 4px;
3429    width: calc(100% - 32px);
3430    margin: auto;
3431    max-width: 400px;
3432    position: relative;
3433    top: calc(5% + 64px);
3434  }
3435  @media (min-width: 600px) {
3436    .workflows-workflow-menu {
3437      top: calc(10% + 64px);
3438    }
3439  }
3440  .workflows-workflow-menu .components-modal__content {
3441    margin: 0;
3442    padding: 0;
3443  }
3444  
3445  .workflows-workflow-menu__overlay {
3446    display: block;
3447    align-items: start;
3448  }
3449  
3450  .workflows-workflow-menu__header {
3451    padding: 0 16px;
3452  }
3453  
3454  .workflows-workflow-menu__header-search-icon:dir(ltr) {
3455    transform: scaleX(-1);
3456  }
3457  
3458  .workflows-workflow-menu__container {
3459    will-change: transform;
3460  }
3461  .workflows-workflow-menu__container:focus {
3462    outline: none;
3463  }
3464  .workflows-workflow-menu__container [cmdk-input] {
3465    border: none;
3466    width: 100%;
3467    padding: 16px 4px;
3468    outline: none;
3469    color: #1e1e1e;
3470    margin: 0;
3471    font-size: 15px;
3472    line-height: 28px;
3473    border-radius: 0;
3474  }
3475  .workflows-workflow-menu__container [cmdk-input]::placeholder {
3476    color: #757575;
3477  }
3478  .workflows-workflow-menu__container [cmdk-input]:focus {
3479    box-shadow: none;
3480    outline: none;
3481  }
3482  .workflows-workflow-menu__container [cmdk-item] {
3483    border-radius: 2px;
3484    cursor: pointer;
3485    display: flex;
3486    align-items: center;
3487    color: #1e1e1e;
3488    font-size: 13px;
3489  }
3490  .workflows-workflow-menu__container [cmdk-item][aria-selected=true], .workflows-workflow-menu__container [cmdk-item]:active {
3491    background: var(--wp-admin-theme-color);
3492    color: #fff;
3493  }
3494  .workflows-workflow-menu__container [cmdk-item][aria-disabled=true] {
3495    color: #949494;
3496    cursor: not-allowed;
3497  }
3498  .workflows-workflow-menu__container [cmdk-item] > div {
3499    min-height: 40px;
3500    padding: 4px;
3501    padding-left: 16px;
3502  }
3503  .workflows-workflow-menu__container [cmdk-root] > [cmdk-list] {
3504    max-height: 368px;
3505    overflow: auto;
3506  }
3507  .workflows-workflow-menu__container [cmdk-root] > [cmdk-list] [cmdk-list-sizer] > [cmdk-group]:last-child [cmdk-group-items]:not(:empty) {
3508    padding-bottom: 8px;
3509  }
3510  .workflows-workflow-menu__container [cmdk-root] > [cmdk-list] [cmdk-list-sizer] > [cmdk-group] > [cmdk-group-items]:not(:empty) {
3511    padding: 0 8px;
3512  }
3513  .workflows-workflow-menu__container [cmdk-empty] {
3514    display: flex;
3515    align-items: center;
3516    justify-content: center;
3517    white-space: pre-wrap;
3518    color: #1e1e1e;
3519    padding: 8px 0 32px;
3520  }
3521  .workflows-workflow-menu__container [cmdk-loading] {
3522    padding: 16px;
3523  }
3524  .workflows-workflow-menu__container [cmdk-list-sizer] {
3525    position: relative;
3526  }
3527  
3528  .workflows-workflow-menu__item span {
3529    display: inline-block;
3530    overflow: hidden;
3531    text-overflow: ellipsis;
3532    white-space: nowrap;
3533  }
3534  
3535  .workflows-workflow-menu__item mark {
3536    color: inherit;
3537    background: unset;
3538    font-weight: 600;
3539  }
3540  
3541  .workflows-workflow-menu__output {
3542    padding: 16px;
3543  }
3544  
3545  .workflows-workflow-menu__output-header {
3546    margin-bottom: 16px;
3547    border-bottom: 1px solid #ddd;
3548    padding-bottom: 8px;
3549  }
3550  .workflows-workflow-menu__output-header h3 {
3551    margin: 0 0 4px;
3552    font-size: 16px;
3553    font-weight: 600;
3554    color: #1e1e1e;
3555  }
3556  
3557  .workflows-workflow-menu__output-hint {
3558    margin: 0;
3559    font-size: 12px;
3560    color: #757575;
3561  }
3562  
3563  .workflows-workflow-menu__output-content {
3564    max-height: 400px;
3565    overflow: auto;
3566  }
3567  .workflows-workflow-menu__output-content pre {
3568    margin: 0;
3569    padding: 12px;
3570    background: #f0f0f0;
3571    border-radius: 2px;
3572    font-size: 12px;
3573    line-height: 1.5;
3574    white-space: pre-wrap;
3575    word-break: break-word;
3576    color: #1e1e1e;
3577  }
3578  
3579  .workflows-workflow-menu__output-error {
3580    padding: 12px;
3581    background: #e0e0e0;
3582    border: 1px solid rgb(158.3684210526, 18.6315789474, 18.6315789474);
3583    border-radius: 2px;
3584    color: #cc1818;
3585  }
3586  .workflows-workflow-menu__output-error p {
3587    margin: 0;
3588    font-size: 13px;
3589  }
3590  
3591  .workflows-workflow-menu__executing {
3592    padding: 24px 16px;
3593    color: #757575;
3594    font-size: 14px;
3595  }
3596  /*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VSb290IjoiL2hvbWUvc3ZuL2NoZWNrb3V0cy9kZXZlbG9wLnN2bi53b3JkcHJlc3Mub3JnL3RydW5rL2d1dGVuYmVyZy9wYWNrYWdlcy93b3JrZmxvdy9zcmMvY29tcG9uZW50cyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX21peGlucy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX3ZhcmlhYmxlcy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX2NvbG9ycy5zY3NzIiwiLi4vLi4vLi4vLi4vbm9kZV9tb2R1bGVzL0B3b3JkcHJlc3MvYmFzZS1zdHlsZXMvX2JyZWFrcG9pbnRzLnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9iYXNlLXN0eWxlcy9fZnVuY3Rpb25zLnNjc3MiLCIuLi8uLi8uLi8uLi9ub2RlX21vZHVsZXMvQHdvcmRwcmVzcy9iYXNlLXN0eWxlcy9fbG9uZy1jb250ZW50LWZhZGUuc2NzcyIsIi4uLy4uLy4uLy4uL25vZGVfbW9kdWxlcy9Ad29yZHByZXNzL2Jhc2Utc3R5bGVzL19kZWZhdWx0LWN1c3RvbS1wcm9wZXJ0aWVzLnNjc3MiLCJ3b3JrZmxvdy1tZW51LnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFBQTtBQUFBO0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUNBQTtBQUFBO0FBQUE7QURVQTtBQUFBO0FBQUE7QUFPQTtBQUFBO0FBQUE7QUE2QkE7QUFBQTtBQUFBO0FBQUE7QUFpQkE7QUFBQTtBQUFBO0FBV0E7QUFBQTtBQUFBO0FBZ0JBO0FBQUE7QUFBQTtBQXlCQTtBQUFBO0FBQUE7QUFLQTtBQUFBO0FBQUE7QUFlQTtBQUFBO0FBQUE7QUFtQkE7QUFBQTtBQUFBO0FBU0E7QUFBQTtBQUFBO0FBQUE7QUVuS0E7QUFBQTtBQUFBO0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FDQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FMNEVBO0FBQUE7QUFBQTtBQTBEQTtBQUFBO0FBQUE7QUFnREE7QUFBQTtBQUFBO0FBcUNBO0FBQUE7QUFBQTtBQW9CQTtBQUFBO0FBQUE7QUF3TEE7QUFBQTtBQUFBO0FBQUE7QUFnREE7QUFBQTtBQUFBO0FNaGRBO0VBQ0M7RUFDQTtFQUdBO0VBQ0E7RU5zZkE7RUFDQTtFQUVBO0VBQ0E7RUFDQTtFQUNBO0VBSUE7O0FBQ0E7RU12Z0JEO0lOd2dCRTs7OztBT3hnQkY7RUFDQyxlTjRDYztFTTNDZDtFQUNBO0VBQ0E7RUFDQTtFQUNBOztBUHdHQTtFTzlHRDtJQVNFOzs7QUFHRDtFQUNDO0VBQ0E7OztBQUlGO0VBQ0M7RUFDQTs7O0FBR0Q7RUFDQzs7O0FBSUE7RUFDQzs7O0FBSUY7RUFFQzs7QUFFQTtFQUNDOztBQUdEO0VBQ0M7RUFDQTtFQUNBO0VBQ0E7RUFDQSxPTC9DUztFS2dEVDtFQUNBO0VBQ0E7RUFDQTs7QUFFQTtFQUNDLE9McERROztBS3VEVDtFQUNDO0VBQ0E7O0FBSUY7RUFDQyxlTkZhO0VNR2I7RUFDQTtFQUNBO0VBQ0EsT0xwRVM7RUtxRVQsV05uRGlCOztBTXFEakI7RUFFQztFQUNBLE9MbEVLOztBS3FFTjtFQUNDLE9MM0VRO0VLNEVSOztBQUdEO0VBQ0MsWU5PNkI7RU1ON0IsU050Q1k7RU11Q1osY05wQ1k7O0FNd0NkO0VBQ0MsWU5pQm1CO0VNaEJuQjs7QUFHQTtFQUdDLGdCTmxEWTs7QU1xRGI7RUFDQzs7QUFJRjtFQUNDO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsT0w5R1M7RUsrR1Q7O0FBR0Q7RUFDQyxTTmxFYTs7QU1xRWQ7RUFDQzs7O0FBSUY7RUFFQztFQUNBO0VBQ0E7RUFDQTs7O0FBR0Q7RUFDQztFQUNBO0VBQ0E7OztBQUdEO0VBQ0MsU056RmM7OztBTTRGZjtFQUNDLGVON0ZjO0VNOEZkO0VBQ0EsZ0JOakdjOztBTW1HZDtFQUNDO0VBQ0E7RUFDQTtFQUNBLE9MdEpTOzs7QUswSlg7RUFDQztFQUNBO0VBQ0EsT0wzSlU7OztBSzhKWDtFQUNDO0VBQ0E7O0FBRUE7RUFDQztFQUNBLFNOdEhhO0VNdUhiLFlMaEtTO0VLaUtULGVOMUdhO0VNMkdiO0VBQ0E7RUFDQTtFQUNBO0VBQ0EsT0w3S1M7OztBS2lMWDtFQUNDLFNObEljO0VNbUlkLFlMN0tVO0VLOEtWO0VBQ0EsZU52SGM7RU13SGQsT0xyS1c7O0FLdUtYO0VBQ0M7RUFDQTs7O0FBSUY7RUFDQztFQUNBLE9MOUxVO0VLK0xWIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBvZ3JhcGh5XG4gKi9cblxuQHVzZSBcInNhc3M6Y29sb3JcIjtcbkB1c2UgXCJzYXNzOm1hdGhcIjtcbkB1c2UgXCIuL3ZhcmlhYmxlc1wiO1xuQHVzZSBcIi4vY29sb3JzXCI7XG5AdXNlIFwiLi9icmVha3BvaW50c1wiO1xuQHVzZSBcIi4vZnVuY3Rpb25zXCI7XG5AdXNlIFwiLi9sb25nLWNvbnRlbnQtZmFkZVwiO1xuXG5AbWl4aW4gX3RleHQtaGVhZGluZygpIHtcblx0Zm9udC1mYW1pbHk6IHZhcmlhYmxlcy4kZm9udC1mYW1pbHktaGVhZGluZ3M7XG5cdGZvbnQtd2VpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtd2VpZ2h0LW1lZGl1bTtcbn1cblxuQG1peGluIF90ZXh0LWJvZHkoKSB7XG5cdGZvbnQtZmFtaWx5OiB2YXJpYWJsZXMuJGZvbnQtZmFtaWx5LWJvZHk7XG5cdGZvbnQtd2VpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtd2VpZ2h0LXJlZ3VsYXI7XG59XG5cbkBtaXhpbiBoZWFkaW5nLXNtYWxsKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1oZWFkaW5nKCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUteC1zbWFsbDtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC14LXNtYWxsO1xufVxuXG5AbWl4aW4gaGVhZGluZy1tZWRpdW0oKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWhlYWRpbmcoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS1tZWRpdW07XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw7XG59XG5cbkBtaXhpbiBoZWFkaW5nLWxhcmdlKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1oZWFkaW5nKCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUtbGFyZ2U7XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw7XG59XG5cbkBtaXhpbiBoZWFkaW5nLXgtbGFyZ2UoKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWhlYWRpbmcoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS14LWxhcmdlO1xuXHRsaW5lLWhlaWdodDogdmFyaWFibGVzLiRmb250LWxpbmUtaGVpZ2h0LW1lZGl1bTtcbn1cblxuQG1peGluIGhlYWRpbmctMngtbGFyZ2UoKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWhlYWRpbmcoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS0yeC1sYXJnZTtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC0yeC1sYXJnZTtcbn1cblxuQG1peGluIGJvZHktc21hbGwoKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWJvZHkoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS1zbWFsbDtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC14LXNtYWxsO1xufVxuXG5AbWl4aW4gYm9keS1tZWRpdW0oKSB7XG5cdEBpbmNsdWRlIF90ZXh0LWJvZHkoKTtcblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGZvbnQtc2l6ZS1tZWRpdW07XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw7XG59XG5cbkBtaXhpbiBib2R5LWxhcmdlKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1ib2R5KCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUtbGFyZ2U7XG5cdGxpbmUtaGVpZ2h0OiB2YXJpYWJsZXMuJGZvbnQtbGluZS1oZWlnaHQtbWVkaXVtO1xufVxuXG5AbWl4aW4gYm9keS14LWxhcmdlKCkge1xuXHRAaW5jbHVkZSBfdGV4dC1ib2R5KCk7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRmb250LXNpemUteC1sYXJnZTtcblx0bGluZS1oZWlnaHQ6IHZhcmlhYmxlcy4kZm9udC1saW5lLWhlaWdodC14LWxhcmdlO1xufVxuXG4vKipcbiAqIEJyZWFrcG9pbnQgbWl4aW5zXG4gKi9cblxuQG1peGluIGJyZWFrLXhodWdlKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay14aHVnZSkgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbkBtaXhpbiBicmVhay1odWdlKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1odWdlKSB9KSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cbn1cblxuQG1peGluIGJyZWFrLXdpZGUoKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLXdpZGUpIH0pIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuXG5AbWl4aW4gYnJlYWsteGxhcmdlKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay14bGFyZ2UpIH0pIHtcblx0XHRAY29udGVudDtcblx0fVxufVxuXG5AbWl4aW4gYnJlYWstbGFyZ2UoKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLWxhcmdlKSB9KSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cbn1cblxuQG1peGluIGJyZWFrLW1lZGl1bSgpIHtcblx0QG1lZGlhIChtaW4td2lkdGg6ICN7IChicmVha3BvaW50cy4kYnJlYWstbWVkaXVtKSB9KSB7XG5cdFx0QGNvbnRlbnQ7XG5cdH1cbn1cblxuQG1peGluIGJyZWFrLXNtYWxsKCkge1xuXHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1zbWFsbCkgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbkBtaXhpbiBicmVhay1tb2JpbGUoKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLW1vYmlsZSkgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbkBtaXhpbiBicmVhay16b29tZWQtaW4oKSB7XG5cdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLXpvb21lZC1pbikgfSkge1xuXHRcdEBjb250ZW50O1xuXHR9XG59XG5cbi8qKlxuICogRm9jdXMgc3R5bGVzLlxuICovXG5cbkBtaXhpbiBibG9jay10b29sYmFyLWJ1dHRvbi1zdHlsZV9fZm9jdXMoKSB7XG5cdGJveC1zaGFkb3c6IGluc2V0IDAgMCAwIHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoIGNvbG9ycy4kd2hpdGUsIDAgMCAwIHZhcigtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1cykgdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXG5cdC8vIFdpbmRvd3MgSGlnaCBDb250cmFzdCBtb2RlIHdpbGwgc2hvdyB0aGlzIG91dGxpbmUsIGJ1dCBub3QgdGhlIGJveC1zaGFkb3cuXG5cdG91dGxpbmU6IDJweCBzb2xpZCB0cmFuc3BhcmVudDtcbn1cblxuLy8gVGFicywgSW5wdXRzLCBTcXVhcmUgYnV0dG9ucy5cbkBtaXhpbiBpbnB1dC1zdHlsZV9fbmV1dHJhbCgpIHtcblx0Ym94LXNoYWRvdzogMCAwIDAgdHJhbnNwYXJlbnQ7XG5cdGJvcmRlci1yYWRpdXM6IHZhcmlhYmxlcy4kcmFkaXVzLXNtYWxsO1xuXHRib3JkZXI6IHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoIHNvbGlkIGNvbG9ycy4kZ3JheS02MDA7XG5cblx0QG1lZGlhIG5vdCAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbikge1xuXHRcdHRyYW5zaXRpb246IGJveC1zaGFkb3cgMC4xcyBsaW5lYXI7XG5cdH1cbn1cblxuXG5AbWl4aW4gaW5wdXQtc3R5bGVfX2ZvY3VzKCRhY2NlbnQtY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKSkge1xuXHRib3JkZXItY29sb3I6ICRhY2NlbnQtY29sb3I7XG5cdC8vIEV4cGFuZCB0aGUgZGVmYXVsdCBib3JkZXIgZm9jdXMgc3R5bGUgYnkgLjVweCB0byBiZSBhIHRvdGFsIG9mIDEuNXB4LlxuXHRib3gtc2hhZG93OiAwIDAgMCAwLjVweCAkYWNjZW50LWNvbG9yO1xuXHQvLyBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSB3aWxsIHNob3cgdGhpcyBvdXRsaW5lLCBidXQgbm90IHRoZSBib3gtc2hhZG93LlxuXHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cbkBtaXhpbiBidXR0b24tc3R5bGVfX2ZvY3VzKCkge1xuXHRib3gtc2hhZG93OiAwIDAgMCB2YXIoLS13cC1hZG1pbi1ib3JkZXItd2lkdGgtZm9jdXMpIHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblxuXHQvLyBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSB3aWxsIHNob3cgdGhpcyBvdXRsaW5lLCBidXQgbm90IHRoZSBib3gtc2hhZG93LlxuXHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG59XG5cblxuQG1peGluIGJ1dHRvbi1zdHlsZS1vdXRzZXRfX2ZvY3VzKCRmb2N1cy1jb2xvcikge1xuXHRib3gtc2hhZG93OiAwIDAgMCB2YXIoLS13cC1hZG1pbi1ib3JkZXItd2lkdGgtZm9jdXMpIGNvbG9ycy4kd2hpdGUsIDAgMCAwIGNhbGMoMiAqIHZhcigtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1cykpICRmb2N1cy1jb2xvcjtcblxuXHQvLyBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZSB3aWxsIHNob3cgdGhpcyBvdXRsaW5lLCBidXQgbm90IHRoZSBib3gtc2hhZG93LlxuXHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdG91dGxpbmUtb2Zmc2V0OiAycHg7XG59XG5cblxuLyoqXG4gKiBBcHBsaWVzIGVkaXRvciBsZWZ0IHBvc2l0aW9uIHRvIHRoZSBzZWxlY3RvciBwYXNzZWQgYXMgYXJndW1lbnRcbiAqL1xuXG5AbWl4aW4gZWRpdG9yLWxlZnQoJHNlbGVjdG9yKSB7XG5cdCN7JHNlbGVjdG9yfSB7IC8qIFNldCBsZWZ0IHBvc2l0aW9uIHdoZW4gYXV0by1mb2xkIGlzIG5vdCBvbiB0aGUgYm9keSBlbGVtZW50LiAqL1xuXHRcdGxlZnQ6IDA7XG5cblx0XHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1tZWRpdW0gKyAxKSB9KSB7XG5cdFx0XHRsZWZ0OiB2YXJpYWJsZXMuJGFkbWluLXNpZGViYXItd2lkdGg7XG5cdFx0fVxuXHR9XG5cblx0LmF1dG8tZm9sZCAjeyRzZWxlY3Rvcn0geyAvKiBBdXRvIGZvbGQgaXMgd2hlbiBvbiBzbWFsbGVyIGJyZWFrcG9pbnRzLCBuYXYgbWVudSBhdXRvIGNvbGxhcHNlcy4gKi9cblx0XHRAbWVkaWEgKG1pbi13aWR0aDogI3sgKGJyZWFrcG9pbnRzLiRicmVhay1tZWRpdW0gKyAxKSB9KSB7XG5cdFx0XHRsZWZ0OiB2YXJpYWJsZXMuJGFkbWluLXNpZGViYXItd2lkdGgtY29sbGFwc2VkO1xuXHRcdH1cblxuXHRcdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLWxhcmdlICsgMSkgfSkge1xuXHRcdFx0bGVmdDogdmFyaWFibGVzLiRhZG1pbi1zaWRlYmFyLXdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdC8qIFNpZGViYXIgbWFudWFsbHkgY29sbGFwc2VkLiAqL1xuXHQuZm9sZGVkICN7JHNlbGVjdG9yfSB7XG5cdFx0bGVmdDogMDtcblxuXHRcdEBtZWRpYSAobWluLXdpZHRoOiAjeyAoYnJlYWtwb2ludHMuJGJyZWFrLW1lZGl1bSArIDEpIH0pIHtcblx0XHRcdGxlZnQ6IHZhcmlhYmxlcy4kYWRtaW4tc2lkZWJhci13aWR0aC1jb2xsYXBzZWQ7XG5cdFx0fVxuXHR9XG5cblx0Ym9keS5pcy1mdWxsc2NyZWVuLW1vZGUgI3skc2VsZWN0b3J9IHtcblx0XHRsZWZ0OiAwICFpbXBvcnRhbnQ7XG5cdH1cbn1cblxuLyoqXG4gKiBTdHlsZXMgdGhhdCBhcmUgcmV1c2VkIHZlcmJhdGltIGluIGEgZmV3IHBsYWNlc1xuICovXG5cbi8vIFRoZXNlIGFyZSBhZGRpdGlvbmFsIHN0eWxlcyBmb3IgYWxsIGNhcHRpb25zLCB3aGVuIHRoZSB0aGVtZSBvcHRzIGluIHRvIGJsb2NrIHN0eWxlcy5cbkBtaXhpbiBjYXB0aW9uLXN0eWxlKCkge1xuXHRtYXJnaW4tdG9wOiAwLjVlbTtcblx0bWFyZ2luLWJvdHRvbTogMWVtO1xufVxuXG5AbWl4aW4gY2FwdGlvbi1zdHlsZS10aGVtZSgpIHtcblx0Y29sb3I6ICM1NTU7XG5cdGZvbnQtc2l6ZTogdmFyaWFibGVzLiRkZWZhdWx0LWZvbnQtc2l6ZTtcblx0dGV4dC1hbGlnbjogY2VudGVyO1xuXG5cdC5pcy1kYXJrLXRoZW1lICYge1xuXHRcdGNvbG9yOiBjb2xvcnMuJGxpZ2h0LWdyYXktcGxhY2Vob2xkZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBBbGxvd3MgdXNlcnMgdG8gb3B0LW91dCBvZiBhbmltYXRpb25zIHZpYSBPUy1sZXZlbCBwcmVmZXJlbmNlcy5cbiAqL1xuXG5AbWl4aW4gcmVkdWNlLW1vdGlvbigkcHJvcGVydHk6IFwiXCIpIHtcblxuXHRAaWYgJHByb3BlcnR5ID09IFwidHJhbnNpdGlvblwiIHtcblx0XHRAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuXHRcdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMHM7XG5cdFx0XHR0cmFuc2l0aW9uLWRlbGF5OiAwcztcblx0XHR9XG5cdH0gQGVsc2UgaWYgJHByb3BlcnR5ID09IFwiYW5pbWF0aW9uXCIge1xuXHRcdEBtZWRpYSAocHJlZmVycy1yZWR1Y2VkLW1vdGlvbjogcmVkdWNlKSB7XG5cdFx0XHRhbmltYXRpb24tZHVyYXRpb246IDFtcztcblx0XHRcdGFuaW1hdGlvbi1kZWxheTogMHM7XG5cdFx0fVxuXHR9IEBlbHNlIHtcblx0XHRAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkge1xuXHRcdFx0dHJhbnNpdGlvbi1kdXJhdGlvbjogMHM7XG5cdFx0XHR0cmFuc2l0aW9uLWRlbGF5OiAwcztcblx0XHRcdGFuaW1hdGlvbi1kdXJhdGlvbjogMW1zO1xuXHRcdFx0YW5pbWF0aW9uLWRlbGF5OiAwcztcblx0XHR9XG5cdH1cbn1cblxuQG1peGluIGlucHV0LWNvbnRyb2woJGFjY2VudC1jb2xvcjogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpKSB7XG5cdGZvbnQtZmFtaWx5OiB2YXJpYWJsZXMuJGRlZmF1bHQtZm9udDtcblx0cGFkZGluZzogNnB4IDhweDtcblx0LyogRm9udHMgc21hbGxlciB0aGFuIDE2cHggY2F1c2VzIG1vYmlsZSBzYWZhcmkgdG8gem9vbS4gKi9cblx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJG1vYmlsZS10ZXh0LW1pbi1mb250LXNpemU7XG5cdC8qIE92ZXJyaWRlIGNvcmUgbGluZS1oZWlnaHQuIFRvIGJlIHJldmlld2VkLiAqL1xuXHRsaW5lLWhlaWdodDogbm9ybWFsO1xuXHRAaW5jbHVkZSBpbnB1dC1zdHlsZV9fbmV1dHJhbCgpO1xuXG5cdEBpbmNsdWRlIGJyZWFrLXNtYWxsIHtcblx0XHRmb250LXNpemU6IHZhcmlhYmxlcy4kZGVmYXVsdC1mb250LXNpemU7XG5cdFx0LyogT3ZlcnJpZGUgY29yZSBsaW5lLWhlaWdodC4gVG8gYmUgcmV2aWV3ZWQuICovXG5cdFx0bGluZS1oZWlnaHQ6IG5vcm1hbDtcblx0fVxuXG5cdCY6Zm9jdXMge1xuXHRcdEBpbmNsdWRlIGlucHV0LXN0eWxlX19mb2N1cygkYWNjZW50LWNvbG9yKTtcblx0fVxuXG5cdC8vIFVzZSBvcGFjaXR5IHRvIHdvcmsgaW4gdmFyaW91cyBlZGl0b3Igc3R5bGVzLlxuXHQmOjotd2Via2l0LWlucHV0LXBsYWNlaG9sZGVyIHtcblx0XHRjb2xvcjogY29sb3JzLiRkYXJrLWdyYXktcGxhY2Vob2xkZXI7XG5cdH1cblxuXHQmOjotbW96LXBsYWNlaG9sZGVyIHtcblx0XHRjb2xvcjogY29sb3JzLiRkYXJrLWdyYXktcGxhY2Vob2xkZXI7XG5cdH1cblxuXHQmOi1tcy1pbnB1dC1wbGFjZWhvbGRlciB7XG5cdFx0Y29sb3I6IGNvbG9ycy4kZGFyay1ncmF5LXBsYWNlaG9sZGVyO1xuXHR9XG59XG5cbkBtaXhpbiBjaGVja2JveC1jb250cm9sIHtcblx0Ym9yZGVyOiB2YXJpYWJsZXMuJGJvcmRlci13aWR0aCBzb2xpZCBjb2xvcnMuJGdyYXktOTAwO1xuXHRtYXJnaW4tcmlnaHQ6IHZhcmlhYmxlcy4kZ3JpZC11bml0LTE1O1xuXHR0cmFuc2l0aW9uOiBub25lO1xuXHRib3JkZXItcmFkaXVzOiB2YXJpYWJsZXMuJHJhZGl1cy1zbWFsbDtcblx0QGluY2x1ZGUgaW5wdXQtY29udHJvbDtcblxuXHQmOmZvY3VzIHtcblx0XHRib3gtc2hhZG93OiAwIDAgMCAodmFyaWFibGVzLiRib3JkZXItd2lkdGggKiAyKSBjb2xvcnMuJHdoaXRlLCAwIDAgMCAodmFyaWFibGVzLiRib3JkZXItd2lkdGggKiAyICsgdmFyaWFibGVzLiRib3JkZXItd2lkdGgtZm9jdXMtZmFsbGJhY2spIHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblxuXHRcdC8vIE9ubHkgdmlzaWJsZSBpbiBXaW5kb3dzIEhpZ2ggQ29udHJhc3QgbW9kZS5cblx0XHRvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7XG5cdH1cblxuXHQmOmNoZWNrZWQge1xuXHRcdGJhY2tncm91bmQ6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblx0XHRib3JkZXItY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblxuXHRcdC8vIEhpZGUgZGVmYXVsdCBjaGVja2JveCBzdHlsZXMgaW4gSUUuXG5cdFx0Jjo6LW1zLWNoZWNrIHtcblx0XHRcdG9wYWNpdHk6IDA7XG5cdFx0fVxuXHR9XG5cblx0JjpjaGVja2VkOjpiZWZvcmUsXG5cdCZbYXJpYS1jaGVja2VkPVwibWl4ZWRcIl06OmJlZm9yZSB7XG5cdFx0bWFyZ2luOiAtM3B4IC01cHg7XG5cdFx0Y29sb3I6IGNvbG9ycy4kd2hpdGU7XG5cblx0XHRAaW5jbHVkZSBicmVhay1tZWRpdW0oKSB7XG5cdFx0XHRtYXJnaW46IC00cHggMCAwIC01cHg7XG5cdFx0fVxuXHR9XG5cblx0JlthcmlhLWNoZWNrZWQ9XCJtaXhlZFwiXSB7XG5cdFx0YmFja2dyb3VuZDogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXHRcdGJvcmRlci1jb2xvcjogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXG5cdFx0Jjo6YmVmb3JlIHtcblx0XHRcdC8vIEluaGVyaXRlZCBmcm9tIGBmb3Jtcy5jc3NgLlxuXHRcdFx0Ly8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vV29yZFByZXNzL3dvcmRwcmVzcy1kZXZlbG9wL3RyZWUvNS4xLjEvc3JjL3dwLWFkbWluL2Nzcy9mb3Jtcy5jc3MjTDEyMi1MMTMyXG5cdFx0XHRjb250ZW50OiBcIlxcZjQ2MFwiO1xuXHRcdFx0ZmxvYXQ6IGxlZnQ7XG5cdFx0XHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XG5cdFx0XHR2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlO1xuXHRcdFx0d2lkdGg6IDE2cHg7XG5cdFx0XHQvKiBzdHlsZWxpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZm9udC1mYW1pbHktbm8tbWlzc2luZy1nZW5lcmljLWZhbWlseS1rZXl3b3JkIC0tIGRhc2hpY29ucyBkb24ndCBuZWVkIGEgZ2VuZXJpYyBmYW1pbHkga2V5d29yZC4gKi9cblx0XHRcdGZvbnQ6IG5vcm1hbCAzMHB4LzEgZGFzaGljb25zO1xuXHRcdFx0c3BlYWs6IG5vbmU7XG5cdFx0XHQtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDtcblx0XHRcdC1tb3otb3N4LWZvbnQtc21vb3RoaW5nOiBncmF5c2NhbGU7XG5cblx0XHRcdEBpbmNsdWRlIGJyZWFrLW1lZGl1bSgpIHtcblx0XHRcdFx0ZmxvYXQ6IG5vbmU7XG5cdFx0XHRcdGZvbnQtc2l6ZTogMjFweDtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQmW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdLFxuXHQmOmRpc2FibGVkIHtcblx0XHRiYWNrZ3JvdW5kOiBjb2xvcnMuJGdyYXktMTAwO1xuXHRcdGJvcmRlci1jb2xvcjogY29sb3JzLiRncmF5LTMwMDtcblx0XHRjdXJzb3I6IGRlZmF1bHQ7XG5cblx0XHQvLyBPdmVycmlkZSBzdHlsZSBpbmhlcml0ZWQgZnJvbSB3cC1hZG1pbi4gUmVxdWlyZWQgdG8gYXZvaWQgZGVncmFkZWQgYXBwZWFyYW5jZSBvbiBkaWZmZXJlbnQgYmFja2dyb3VuZHMuXG5cdFx0b3BhY2l0eTogMTtcblx0fVxufVxuXG5AbWl4aW4gcmFkaW8tY29udHJvbCB7XG5cdGJvcmRlcjogdmFyaWFibGVzLiRib3JkZXItd2lkdGggc29saWQgY29sb3JzLiRncmF5LTkwMDtcblx0bWFyZ2luLXJpZ2h0OiB2YXJpYWJsZXMuJGdyaWQtdW5pdC0xNTtcblx0dHJhbnNpdGlvbjogbm9uZTtcblx0Ym9yZGVyLXJhZGl1czogdmFyaWFibGVzLiRyYWRpdXMtcm91bmQ7XG5cdHdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemUtc207XG5cdGhlaWdodDogdmFyaWFibGVzLiRyYWRpby1pbnB1dC1zaXplLXNtO1xuXHRtaW4td2lkdGg6IHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZS1zbTtcblx0bWF4LXdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemUtc207XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblxuXHRAbWVkaWEgbm90IChwcmVmZXJzLXJlZHVjZWQtbW90aW9uKSB7XG5cdFx0dHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjFzIGxpbmVhcjtcblx0fVxuXG5cdEBpbmNsdWRlIGJyZWFrLXNtYWxsKCkge1xuXHRcdGhlaWdodDogdmFyaWFibGVzLiRyYWRpby1pbnB1dC1zaXplO1xuXHRcdHdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemU7XG5cdFx0bWluLXdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemU7XG5cdFx0bWF4LXdpZHRoOiB2YXJpYWJsZXMuJHJhZGlvLWlucHV0LXNpemU7XG5cdH1cblxuXHQmOmNoZWNrZWQ6OmJlZm9yZSB7XG5cdFx0Ym94LXNpemluZzogaW5oZXJpdDtcblx0XHR3aWR0aDogbWF0aC5kaXYodmFyaWFibGVzLiRyYWRpby1pbnB1dC1zaXplLXNtLCAyKTtcblx0XHRoZWlnaHQ6IG1hdGguZGl2KHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZS1zbSwgMik7XG5cdFx0cG9zaXRpb246IGFic29sdXRlO1xuXHRcdHRvcDogNTAlO1xuXHRcdGxlZnQ6IDUwJTtcblx0XHR0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTtcblx0XHRtYXJnaW46IDA7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogY29sb3JzLiR3aGl0ZTtcblxuXHRcdC8vIFRoaXMgYm9yZGVyIHNlcnZlcyBhcyBhIGJhY2tncm91bmQgY29sb3IgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUuXG5cdFx0Ym9yZGVyOiA0cHggc29saWQgY29sb3JzLiR3aGl0ZTtcblxuXHRcdEBpbmNsdWRlIGJyZWFrLXNtYWxsKCkge1xuXHRcdFx0d2lkdGg6IG1hdGguZGl2KHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZSwgMik7XG5cdFx0XHRoZWlnaHQ6IG1hdGguZGl2KHZhcmlhYmxlcy4kcmFkaW8taW5wdXQtc2l6ZSwgMik7XG5cdFx0fVxuXHR9XG5cblx0Jjpmb2N1cyB7XG5cdFx0Ym94LXNoYWRvdzogMCAwIDAgKHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoICogMikgY29sb3JzLiR3aGl0ZSwgMCAwIDAgKHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoICogMiArIHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoLWZvY3VzLWZhbGxiYWNrKSB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvcik7XG5cblx0XHQvLyBPbmx5IHZpc2libGUgaW4gV2luZG93cyBIaWdoIENvbnRyYXN0IG1vZGUuXG5cdFx0b3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHR9XG5cblx0JjpjaGVja2VkIHtcblx0XHRiYWNrZ3JvdW5kOiB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvcik7XG5cdFx0Ym9yZGVyOiBub25lO1xuXHR9XG59XG5cbi8qKlxuICogUmVzZXQgZGVmYXVsdCBzdHlsZXMgZm9yIEphdmFTY3JpcHQgVUkgYmFzZWQgcGFnZXMuXG4gKiBUaGlzIGlzIGEgV1AtYWRtaW4gYWdub3N0aWMgcmVzZXRcbiAqL1xuXG5AbWl4aW4gcmVzZXQge1xuXHRib3gtc2l6aW5nOiBib3JkZXItYm94O1xuXG5cdCosXG5cdCo6OmJlZm9yZSxcblx0Kjo6YWZ0ZXIge1xuXHRcdGJveC1zaXppbmc6IGluaGVyaXQ7XG5cdH1cbn1cblxuQG1peGluIGxpbmstcmVzZXQge1xuXHQmOmZvY3VzIHtcblx0XHRjb2xvcjogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3ItLXJnYik7XG5cdFx0Ym94LXNoYWRvdzogMCAwIDAgdmFyKC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzKSB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvciwgIzAwN2NiYSk7XG5cdFx0Ym9yZGVyLXJhZGl1czogdmFyaWFibGVzLiRyYWRpdXMtc21hbGw7XG5cdH1cbn1cblxuLy8gVGhlIGVkaXRvciBpbnB1dCByZXNldCB3aXRoIGluY3JlYXNlZCBzcGVjaWZpY2l0eSB0byBhdm9pZCB0aGVtZSBzdHlsZXMgYmxlZWRpbmcgaW4uXG5AbWl4aW4gZWRpdG9yLWlucHV0LXJlc2V0KCkge1xuXHRmb250LWZhbWlseTogdmFyaWFibGVzLiRlZGl0b3ItaHRtbC1mb250ICFpbXBvcnRhbnQ7XG5cdGNvbG9yOiBjb2xvcnMuJGdyYXktOTAwICFpbXBvcnRhbnQ7XG5cdGJhY2tncm91bmQ6IGNvbG9ycy4kd2hpdGUgIWltcG9ydGFudDtcblx0cGFkZGluZzogdmFyaWFibGVzLiRncmlkLXVuaXQtMTUgIWltcG9ydGFudDtcblx0Ym9yZGVyOiB2YXJpYWJsZXMuJGJvcmRlci13aWR0aCBzb2xpZCBjb2xvcnMuJGdyYXktOTAwICFpbXBvcnRhbnQ7XG5cdGJveC1zaGFkb3c6IG5vbmUgIWltcG9ydGFudDtcblx0Ym9yZGVyLXJhZGl1czogdmFyaWFibGVzLiRyYWRpdXMtc21hbGwgIWltcG9ydGFudDtcblxuXHQvLyBGb250cyBzbWFsbGVyIHRoYW4gMTZweCBjYXVzZXMgbW9iaWxlIHNhZmFyaSB0byB6b29tLlxuXHRmb250LXNpemU6IHZhcmlhYmxlcy4kbW9iaWxlLXRleHQtbWluLWZvbnQtc2l6ZSAhaW1wb3J0YW50O1xuXHRAaW5jbHVkZSBicmVhay1zbWFsbCB7XG5cdFx0Zm9udC1zaXplOiB2YXJpYWJsZXMuJGRlZmF1bHQtZm9udC1zaXplICFpbXBvcnRhbnQ7XG5cdH1cblxuXHQmOmZvY3VzIHtcblx0XHRib3JkZXItY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKSAhaW1wb3J0YW50O1xuXHRcdGJveC1zaGFkb3c6IDAgMCAwICh2YXJpYWJsZXMuJGJvcmRlci13aWR0aC1mb2N1cy1mYWxsYmFjayAtIHZhcmlhYmxlcy4kYm9yZGVyLXdpZHRoKSB2YXIoLS13cC1hZG1pbi10aGVtZS1jb2xvcikgIWltcG9ydGFudDtcblxuXHRcdC8vIFdpbmRvd3MgSGlnaCBDb250cmFzdCBtb2RlIHdpbGwgc2hvdyB0aGlzIG91dGxpbmUsIGJ1dCBub3QgdGhlIGJveC1zaGFkb3cuXG5cdFx0b3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXNldCB0aGUgV1AgQWRtaW4gcGFnZSBzdHlsZXMgZm9yIEd1dGVuYmVyZy1saWtlIHBhZ2VzLlxuICovXG5cbkBtaXhpbiB3cC1hZG1pbi1yZXNldCggJGNvbnRlbnQtY29udGFpbmVyICkge1xuXHRiYWNrZ3JvdW5kOiBjb2xvcnMuJHdoaXRlO1xuXG5cdCN3cGNvbnRlbnQge1xuXHRcdHBhZGRpbmctbGVmdDogMDtcblx0fVxuXG5cdCN3cGJvZHktY29udGVudCB7XG5cdFx0cGFkZGluZy1ib3R0b206IDA7XG5cdH1cblxuXHQvKiBXZSBoaWRlIGxlZ2FjeSBub3RpY2VzIGluIEd1dGVuYmVyZyBCYXNlZCBQYWdlcywgYmVjYXVzZSB0aGV5IHdlcmUgbm90IGRlc2lnbmVkIGluIGEgd2F5IHRoYXQgc2NhbGVkIHdlbGwuXG5cdCAgIFBsdWdpbnMgY2FuIHVzZSBHdXRlbmJlcmcgbm90aWNlcyBpZiB0aGV5IG5lZWQgdG8gcGFzcyBvbiBpbmZvcm1hdGlvbiB0byB0aGUgdXNlciB3aGVuIHRoZXkgYXJlIGVkaXRpbmcuICovXG5cdCN3cGJvZHktY29udGVudCA+IGRpdjpub3QoI3sgJGNvbnRlbnQtY29udGFpbmVyIH0pOm5vdCgjc2NyZWVuLW1ldGEpIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0I3dwZm9vdGVyIHtcblx0XHRkaXNwbGF5OiBub25lO1xuXHR9XG5cblx0LmExMXktc3BlYWstcmVnaW9uIHtcblx0XHRsZWZ0OiAtMXB4O1xuXHRcdHRvcDogLTFweDtcblx0fVxuXG5cdHVsI2FkbWlubWVudSBhLndwLWhhcy1jdXJyZW50LXN1Ym1lbnU6OmFmdGVyLFxuXHR1bCNhZG1pbm1lbnUgPiBsaS5jdXJyZW50ID4gYS5jdXJyZW50OjphZnRlciB7XG5cdFx0Ym9yZGVyLXJpZ2h0LWNvbG9yOiBjb2xvcnMuJHdoaXRlO1xuXHR9XG5cblx0Lm1lZGlhLWZyYW1lIHNlbGVjdC5hdHRhY2htZW50LWZpbHRlcnM6bGFzdC1vZi10eXBlIHtcblx0XHR3aWR0aDogYXV0bztcblx0XHRtYXgtd2lkdGg6IDEwMCU7XG5cdH1cbn1cblxuQG1peGluIGFkbWluLXNjaGVtZSgkY29sb3ItcHJpbWFyeSkge1xuXHQvLyBEZWZpbmUgUkdCIGVxdWl2YWxlbnRzIGZvciB1c2UgaW4gcmdiYSBmdW5jdGlvbi5cblx0Ly8gSGV4YWRlY2ltYWwgY3NzIHZhcnMgZG8gbm90IHdvcmsgaW4gdGhlIHJnYmEgZnVuY3Rpb24uXG5cdC0td3AtYWRtaW4tdGhlbWUtY29sb3I6ICN7JGNvbG9yLXByaW1hcnl9O1xuXHQtLXdwLWFkbWluLXRoZW1lLWNvbG9yLS1yZ2I6ICN7ZnVuY3Rpb25zLmhleC10by1yZ2IoJGNvbG9yLXByaW1hcnkpfTtcblx0Ly8gRGFya2VyIHNoYWRlcy5cblx0LS13cC1hZG1pbi10aGVtZS1jb2xvci1kYXJrZXItMTA6ICN7Y29sb3IuYWRqdXN0KCRjb2xvci1wcmltYXJ5LCAkbGlnaHRuZXNzOiAtNSUpfTtcblx0LS13cC1hZG1pbi10aGVtZS1jb2xvci1kYXJrZXItMTAtLXJnYjogI3tmdW5jdGlvbnMuaGV4LXRvLXJnYihjb2xvci5hZGp1c3QoJGNvbG9yLXByaW1hcnksICRsaWdodG5lc3M6IC01JSkpfTtcblx0LS13cC1hZG1pbi10aGVtZS1jb2xvci1kYXJrZXItMjA6ICN7Y29sb3IuYWRqdXN0KCRjb2xvci1wcmltYXJ5LCAkbGlnaHRuZXNzOiAtMTAlKX07XG5cdC0td3AtYWRtaW4tdGhlbWUtY29sb3ItZGFya2VyLTIwLS1yZ2I6ICN7ZnVuY3Rpb25zLmhleC10by1yZ2IoY29sb3IuYWRqdXN0KCRjb2xvci1wcmltYXJ5LCAkbGlnaHRuZXNzOiAtMTAlKSl9O1xuXG5cdC8vIEZvY3VzIHN0eWxlIHdpZHRoLlxuXHQvLyBBdm9pZCByb3VuZGluZyBpc3N1ZXMgYnkgc2hvd2luZyBhIHdob2xlIDJweCBmb3IgMXggc2NyZWVucywgYW5kIDEuNXB4IG9uIGhpZ2ggcmVzb2x1dGlvbiBzY3JlZW5zLlxuXHQtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1czogMnB4O1xuXHRAbWVkaWEgKCAtd2Via2l0LW1pbi1kZXZpY2UtcGl4ZWwtcmF0aW86IDIpLCAobWluLXJlc29sdXRpb246IDE5MmRwaSkge1xuXHRcdC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzOiAxLjVweDtcblx0fVxufVxuXG5AbWl4aW4gd29yZHByZXNzLWFkbWluLXNjaGVtZXMoKSB7XG5cdGJvZHkuYWRtaW4tY29sb3ItbGlnaHQge1xuXHRcdEBpbmNsdWRlIGFkbWluLXNjaGVtZSgjMDA4NWJhKTtcblx0fVxuXG5cdGJvZHkuYWRtaW4tY29sb3ItbW9kZXJuIHtcblx0XHRAaW5jbHVkZSBhZG1pbi1zY2hlbWUoIzM4NThlOSk7XG5cdH1cblxuXHRib2R5LmFkbWluLWNvbG9yLWJsdWUge1xuXHRcdEBpbmNsdWRlIGFkbWluLXNjaGVtZSgjMDk2NDg0KTtcblx0fVxuXG5cdGJvZHkuYWRtaW4tY29sb3ItY29mZmVlIHtcblx0XHRAaW5jbHVkZSBhZG1pbi1zY2hlbWUoIzQ2NDAzYyk7XG5cdH1cblxuXHRib2R5LmFkbWluLWNvbG9yLWVjdG9wbGFzbSB7XG5cdFx0QGluY2x1ZGUgYWRtaW4tc2NoZW1lKCM1MjNmNmQpO1xuXHR9XG5cblx0Ym9keS5hZG1pbi1jb2xvci1taWRuaWdodCB7XG5cdFx0QGluY2x1ZGUgYWRtaW4tc2NoZW1lKCNlMTRkNDMpO1xuXHR9XG5cblx0Ym9keS5hZG1pbi1jb2xvci1vY2VhbiB7XG5cdFx0QGluY2x1ZGUgYWRtaW4tc2NoZW1lKCM2MjdjODMpO1xuXHR9XG5cblx0Ym9keS5hZG1pbi1jb2xvci1zdW5yaXNlIHtcblx0XHRAaW5jbHVkZSBhZG1pbi1zY2hlbWUoI2RkODIzYik7XG5cdH1cbn1cblxuLy8gRGVwcmVjYXRlZCBmcm9tIFVJLCBrZXB0IGZvciBiYWNrLWNvbXBhdC5cbkBtaXhpbiBiYWNrZ3JvdW5kLWNvbG9ycy1kZXByZWNhdGVkKCkge1xuXHQuaGFzLXZlcnktbGlnaHQtZ3JheS1iYWNrZ3JvdW5kLWNvbG9yIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlO1xuXHR9XG5cblx0Lmhhcy12ZXJ5LWRhcmstZ3JheS1iYWNrZ3JvdW5kLWNvbG9yIHtcblx0XHRiYWNrZ3JvdW5kLWNvbG9yOiAjMzEzMTMxO1xuXHR9XG59XG5cbi8vIERlcHJlY2F0ZWQgZnJvbSBVSSwga2VwdCBmb3IgYmFjay1jb21wYXQuXG5AbWl4aW4gZm9yZWdyb3VuZC1jb2xvcnMtZGVwcmVjYXRlZCgpIHtcblx0Lmhhcy12ZXJ5LWxpZ2h0LWdyYXktY29sb3Ige1xuXHRcdGNvbG9yOiAjZWVlO1xuXHR9XG5cblx0Lmhhcy12ZXJ5LWRhcmstZ3JheS1jb2xvciB7XG5cdFx0Y29sb3I6ICMzMTMxMzE7XG5cdH1cbn1cblxuLy8gRGVwcmVjYXRlZCBmcm9tIFVJLCBrZXB0IGZvciBiYWNrLWNvbXBhdC5cbkBtaXhpbiBncmFkaWVudC1jb2xvcnMtZGVwcmVjYXRlZCgpIHtcblx0Ly8gT3VyIGNsYXNzZXMgdXNlcyB0aGUgc2FtZSB2YWx1ZXMgd2Ugc2V0IGZvciBncmFkaWVudCB2YWx1ZSBhdHRyaWJ1dGVzLlxuXG5cdC8qIHN0eWxlbGludC1kaXNhYmxlIEBzdHlsaXN0aWMvZnVuY3Rpb24tY29tbWEtc3BhY2UtYWZ0ZXIgLS0gV2UgY2FuIG5vdCB1c2Ugc3BhY2luZyBiZWNhdXNlIG9mIFdQIG11bHRpIHNpdGUga3NlcyBydWxlLiAqL1xuXHQuaGFzLXZpdmlkLWdyZWVuLWN5YW4tdG8tdml2aWQtY3lhbi1ibHVlLWdyYWRpZW50LWJhY2tncm91bmQge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiYSgwLDIwOCwxMzIsMSkgMCUscmdiYSg2LDE0NywyMjcsMSkgMTAwJSk7XG5cdH1cblxuXHQuaGFzLXB1cnBsZS1jcnVzaC1ncmFkaWVudC1iYWNrZ3JvdW5kIHtcblx0XHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYig1MiwyMjYsMjI4KSAwJSxyZ2IoNzEsMzMsMjUxKSA1MCUscmdiKDE3MSwyOSwyNTQpIDEwMCUpO1xuXHR9XG5cblx0Lmhhcy1oYXp5LWRhd24tZ3JhZGllbnQtYmFja2dyb3VuZCB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjUwLDE3MiwxNjgpIDAlLHJnYigyMTgsMjA4LDIzNikgMTAwJSk7XG5cdH1cblxuXHQuaGFzLXN1YmR1ZWQtb2xpdmUtZ3JhZGllbnQtYmFja2dyb3VuZCB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KDEzNWRlZyxyZ2IoMjUwLDI1MCwyMjUpIDAlLHJnYigxMDMsMTY2LDExMykgMTAwJSk7XG5cdH1cblxuXHQuaGFzLWF0b21pYy1jcmVhbS1ncmFkaWVudC1iYWNrZ3JvdW5kIHtcblx0XHRiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoMTM1ZGVnLHJnYigyNTMsMjE1LDE1NCkgMCUscmdiKDAsNzQsODkpIDEwMCUpO1xuXHR9XG5cblx0Lmhhcy1uaWdodHNoYWRlLWdyYWRpZW50LWJhY2tncm91bmQge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDUxLDksMTA0KSAwJSxyZ2IoNDksMjA1LDIwNykgMTAwJSk7XG5cdH1cblxuXHQuaGFzLW1pZG5pZ2h0LWdyYWRpZW50LWJhY2tncm91bmQge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxMzVkZWcscmdiKDIsMywxMjkpIDAlLHJnYig0MCwxMTYsMjUyKSAxMDAlKTtcblx0fVxuXHQvKiBzdHlsZWxpbnQtZW5hYmxlIEBzdHlsaXN0aWMvZnVuY3Rpb24tY29tbWEtc3BhY2UtYWZ0ZXIgKi9cbn1cblxuQG1peGluIGN1c3RvbS1zY3JvbGxiYXJzLW9uLWhvdmVyKCRoYW5kbGUtY29sb3IsICRoYW5kbGUtY29sb3ItaG92ZXIpIHtcblxuXHQvLyBXZWJLaXRcblx0Jjo6LXdlYmtpdC1zY3JvbGxiYXIge1xuXHRcdHdpZHRoOiAxMnB4O1xuXHRcdGhlaWdodDogMTJweDtcblx0fVxuXHQmOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7XG5cdFx0YmFja2dyb3VuZC1jb2xvcjogdHJhbnNwYXJlbnQ7XG5cdH1cblx0Jjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRoYW5kbGUtY29sb3I7XG5cdFx0Ym9yZGVyLXJhZGl1czogOHB4O1xuXHRcdGJvcmRlcjogM3B4IHNvbGlkIHRyYW5zcGFyZW50O1xuXHRcdGJhY2tncm91bmQtY2xpcDogcGFkZGluZy1ib3g7XG5cdH1cblx0Jjpob3Zlcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIsIC8vIFRoaXMgbmVlZHMgc3BlY2lmaWNpdHkuXG5cdCY6Zm9jdXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iLFxuXHQmOmZvY3VzLXdpdGhpbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIge1xuXHRcdGJhY2tncm91bmQtY29sb3I6ICRoYW5kbGUtY29sb3ItaG92ZXI7XG5cdH1cblxuXHQvLyBGaXJlZm94IDEwOSsgYW5kIENocm9tZSAxMTErXG5cdHNjcm9sbGJhci13aWR0aDogdGhpbjtcblx0c2Nyb2xsYmFyLWd1dHRlcjogc3RhYmxlIGJvdGgtZWRnZXM7XG5cdHNjcm9sbGJhci1jb2xvcjogJGhhbmRsZS1jb2xvciB0cmFuc3BhcmVudDsgLy8gU3ludGF4LCBcImRhcmtcIiwgXCJsaWdodFwiLCBvciBcIiNoYW5kbGUtY29sb3IgI3RyYWNrLWNvbG9yXCJcblxuXHQmOmhvdmVyLFxuXHQmOmZvY3VzLFxuXHQmOmZvY3VzLXdpdGhpbiB7XG5cdFx0c2Nyb2xsYmFyLWNvbG9yOiAkaGFuZGxlLWNvbG9yLWhvdmVyIHRyYW5zcGFyZW50O1xuXHR9XG5cblx0Ly8gTmVlZGVkIHRvIGZpeCBhIFNhZmFyaSByZW5kZXJpbmcgaXNzdWUuXG5cdHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG5cblx0Ly8gQWx3YXlzIHNob3cgc2Nyb2xsYmFyIG9uIE1vYmlsZSBkZXZpY2VzLlxuXHRAbWVkaWEgKGhvdmVyOiBub25lKSB7XG5cdFx0JiB7XG5cdFx0XHRzY3JvbGxiYXItY29sb3I6ICRoYW5kbGUtY29sb3ItaG92ZXIgdHJhbnNwYXJlbnQ7XG5cdFx0fVxuXHR9XG59XG5cbkBtaXhpbiBzZWxlY3RlZC1ibG9jay1vdXRsaW5lKCR3aWR0aFJhdGlvOiAxKSB7XG5cdG91dGxpbmUtY29sb3I6IHZhcigtLXdwLWFkbWluLXRoZW1lLWNvbG9yKTtcblx0b3V0bGluZS1zdHlsZTogc29saWQ7XG5cdG91dGxpbmUtd2lkdGg6IGNhbGMoI3skd2lkdGhSYXRpb30gKiAodmFyKC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzKSAvIHZhcigtLXdwLWJsb2NrLWVkaXRvci1pZnJhbWUtem9vbS1vdXQtc2NhbGUsIDEpKSk7XG5cdG91dGxpbmUtb2Zmc2V0OiBjYWxjKCN7JHdpZHRoUmF0aW99ICogKCgtMSAqIHZhcigtLXdwLWFkbWluLWJvcmRlci13aWR0aC1mb2N1cykgKSAvIHZhcigtLXdwLWJsb2NrLWVkaXRvci1pZnJhbWUtem9vbS1vdXQtc2NhbGUsIDEpKSk7XG59XG5cbkBtaXhpbiBzZWxlY3RlZC1ibG9jay1mb2N1cygkd2lkdGhSYXRpbzogMSkge1xuXHRjb250ZW50OiBcIlwiO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdHBvaW50ZXItZXZlbnRzOiBub25lO1xuXHR0b3A6IDA7XG5cdHJpZ2h0OiAwO1xuXHRib3R0b206IDA7XG5cdGxlZnQ6IDA7XG5cdEBpbmNsdWRlIHNlbGVjdGVkLWJsb2NrLW91dGxpbmUoJHdpZHRoUmF0aW8pO1xufVxuIiwiLyoqXG4gKiBTQ1NTIFZhcmlhYmxlcy5cbiAqXG4gKiBQbGVhc2UgdXNlIHZhcmlhYmxlcyBmcm9tIHRoaXMgc2hlZXQgdG8gZW5zdXJlIGNvbnNpc3RlbmN5IGFjcm9zcyB0aGUgVUkuXG4gKiBEb24ndCBhZGQgdG8gdGhpcyBzaGVldCB1bmxlc3MgeW91J3JlIHByZXR0eSBzdXJlIHRoZSB2YWx1ZSB3aWxsIGJlIHJldXNlZCBpbiBtYW55IHBsYWNlcy5cbiAqIEZvciBleGFtcGxlLCBkb24ndCBhZGQgcnVsZXMgdG8gdGhpcyBzaGVldCB0aGF0IGFmZmVjdCBibG9jayB2aXN1YWxzLiBJdCdzIHB1cmVseSBmb3IgVUkuXG4gKi9cblxuQHVzZSBcIi4vY29sb3JzXCI7XG5cbi8qKlxuICogRm9udHMgJiBiYXNpYyB2YXJpYWJsZXMuXG4gKi9cblxuJGRlZmF1bHQtZm9udDogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LFwiU2Vnb2UgVUlcIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmOyAvLyBUb2RvOiBkZXByZWNhdGUgaW4gZmF2b3Igb2YgJGZhbWlseSB2YXJpYWJsZXNcbiRkZWZhdWx0LWxpbmUtaGVpZ2h0OiAxLjQ7IC8vIFRvZG86IGRlcHJlY2F0ZSBpbiBmYXZvciBvZiAkbGluZS1oZWlnaHQgdG9rZW5zXG5cbi8qKlxuICogVHlwb2dyYXBoeVxuICovXG5cbi8vIFNpemVzXG4kZm9udC1zaXplLXgtc21hbGw6IDExcHg7XG4kZm9udC1zaXplLXNtYWxsOiAxMnB4O1xuJGZvbnQtc2l6ZS1tZWRpdW06IDEzcHg7XG4kZm9udC1zaXplLWxhcmdlOiAxNXB4O1xuJGZvbnQtc2l6ZS14LWxhcmdlOiAyMHB4O1xuJGZvbnQtc2l6ZS0yeC1sYXJnZTogMzJweDtcblxuLy8gTGluZSBoZWlnaHRzXG4kZm9udC1saW5lLWhlaWdodC14LXNtYWxsOiAxNnB4O1xuJGZvbnQtbGluZS1oZWlnaHQtc21hbGw6IDIwcHg7XG4kZm9udC1saW5lLWhlaWdodC1tZWRpdW06IDI0cHg7XG4kZm9udC1saW5lLWhlaWdodC1sYXJnZTogMjhweDtcbiRmb250LWxpbmUtaGVpZ2h0LXgtbGFyZ2U6IDMycHg7XG4kZm9udC1saW5lLWhlaWdodC0yeC1sYXJnZTogNDBweDtcblxuLy8gV2VpZ2h0c1xuJGZvbnQtd2VpZ2h0LXJlZ3VsYXI6IDQwMDtcbiRmb250LXdlaWdodC1tZWRpdW06IDQ5OTsgLy8gZW5zdXJlcyBmYWxsYmFjayB0byA0MDAgKGluc3RlYWQgb2YgNjAwKVxuXG4vLyBGYW1pbGllc1xuJGZvbnQtZmFtaWx5LWhlYWRpbmdzOiAtYXBwbGUtc3lzdGVtLCBcInN5c3RlbS11aVwiLCBcIlNlZ29lIFVJXCIsIFJvYm90bywgT3h5Z2VuLVNhbnMsIFVidW50dSwgQ2FudGFyZWxsLCBcIkhlbHZldGljYSBOZXVlXCIsIHNhbnMtc2VyaWY7XG4kZm9udC1mYW1pbHktYm9keTogLWFwcGxlLXN5c3RlbSwgXCJzeXN0ZW0tdWlcIiwgXCJTZWdvZSBVSVwiLCBSb2JvdG8sIE94eWdlbi1TYW5zLCBVYnVudHUsIENhbnRhcmVsbCwgXCJIZWx2ZXRpY2EgTmV1ZVwiLCBzYW5zLXNlcmlmO1xuJGZvbnQtZmFtaWx5LW1vbm86IE1lbmxvLCBDb25zb2xhcywgbW9uYWNvLCBtb25vc3BhY2U7XG5cbi8qKlxuICogR3JpZCBTeXN0ZW0uXG4gKiBodHRwczovL21ha2Uud29yZHByZXNzLm9yZy9kZXNpZ24vMjAxOS8xMC8zMS9wcm9wb3NhbC1hLWNvbnNpc3RlbnQtc3BhY2luZy1zeXN0ZW0tZm9yLXdvcmRwcmVzcy9cbiAqL1xuXG4kZ3JpZC11bml0OiA4cHg7XG4kZ3JpZC11bml0LTA1OiAwLjUgKiAkZ3JpZC11bml0O1x0Ly8gNHB4XG4kZ3JpZC11bml0LTEwOiAxICogJGdyaWQtdW5pdDtcdFx0Ly8gOHB4XG4kZ3JpZC11bml0LTE1OiAxLjUgKiAkZ3JpZC11bml0O1x0Ly8gMTJweFxuJGdyaWQtdW5pdC0yMDogMiAqICRncmlkLXVuaXQ7XHRcdC8vIDE2cHhcbiRncmlkLXVuaXQtMzA6IDMgKiAkZ3JpZC11bml0O1x0XHQvLyAyNHB4XG4kZ3JpZC11bml0LTQwOiA0ICogJGdyaWQtdW5pdDtcdFx0Ly8gMzJweFxuJGdyaWQtdW5pdC01MDogNSAqICRncmlkLXVuaXQ7XHRcdC8vIDQwcHhcbiRncmlkLXVuaXQtNjA6IDYgKiAkZ3JpZC11bml0O1x0XHQvLyA0OHB4XG4kZ3JpZC11bml0LTcwOiA3ICogJGdyaWQtdW5pdDtcdFx0Ly8gNTZweFxuJGdyaWQtdW5pdC04MDogOCAqICRncmlkLXVuaXQ7XHRcdC8vIDY0cHhcblxuLyoqXG4gKiBSYWRpdXMgc2NhbGUuXG4gKi9cblxuJHJhZGl1cy14LXNtYWxsOiAxcHg7ICAgLy8gQXBwbGllZCB0byBlbGVtZW50cyBsaWtlIGJ1dHRvbnMgbmVzdGVkIHdpdGhpbiBwcmltaXRpdmVzIGxpa2UgaW5wdXRzLlxuJHJhZGl1cy1zbWFsbDogMnB4OyAgICAgLy8gQXBwbGllZCB0byBtb3N0IHByaW1pdGl2ZXMuXG4kcmFkaXVzLW1lZGl1bTogNHB4OyAgICAvLyBBcHBsaWVkIHRvIGNvbnRhaW5lcnMgd2l0aCBzbWFsbGVyIHBhZGRpbmcuXG4kcmFkaXVzLWxhcmdlOiA4cHg7ICAgICAvLyBBcHBsaWVkIHRvIGNvbnRhaW5lcnMgd2l0aCBsYXJnZXIgcGFkZGluZy5cbiRyYWRpdXMtZnVsbDogOTk5OXB4OyAgIC8vIEZvciBwaWxscy5cbiRyYWRpdXMtcm91bmQ6IDUwJTsgICAgIC8vIEZvciBjaXJjbGVzIGFuZCBvdmFscy5cblxuLyoqXG4gKiBFbGV2YXRpb24gc2NhbGUuXG4gKi9cblxuLy8gRm9yIHNlY3Rpb25zIGFuZCBjb250YWluZXJzIHRoYXQgZ3JvdXAgcmVsYXRlZCBjb250ZW50IGFuZCBjb250cm9scywgd2hpY2ggbWF5IG92ZXJsYXAgb3RoZXIgY29udGVudC4gRXhhbXBsZTogUHJldmlldyBGcmFtZS5cbiRlbGV2YXRpb24teC1zbWFsbDogMCAxcHggMXB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wMyksIDAgMXB4IDJweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDIpLCAwIDNweCAzcHggcmdiYShjb2xvcnMuJGJsYWNrLCAwLjAyKSwgMCA0cHggNHB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wMSk7XG5cbi8vIEZvciBjb21wb25lbnRzIHRoYXQgcHJvdmlkZSBjb250ZXh0dWFsIGZlZWRiYWNrIHdpdGhvdXQgYmVpbmcgaW50cnVzaXZlLiBHZW5lcmFsbHkgbm9uLWludGVycnVwdGl2ZS4gRXhhbXBsZTogVG9vbHRpcHMsIFNuYWNrYmFyLlxuJGVsZXZhdGlvbi1zbWFsbDogMCAxcHggMnB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wNSksIDAgMnB4IDNweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDQpLCAwIDZweCA2cHggcmdiYShjb2xvcnMuJGJsYWNrLCAwLjAzKSwgMCA4cHggOHB4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wMik7XG5cbi8vIEZvciBjb21wb25lbnRzIHRoYXQgb2ZmZXIgYWRkaXRpb25hbCBhY3Rpb25zLiBFeGFtcGxlOiBNZW51cywgQ29tbWFuZCBQYWxldHRlXG4kZWxldmF0aW9uLW1lZGl1bTogMCAycHggM3B4IHJnYmEoY29sb3JzLiRibGFjaywgMC4wNSksIDAgNHB4IDVweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDQpLCAwIDEycHggMTJweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDMpLCAwIDE2cHggMTZweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDIpO1xuXG4vLyBGb3IgY29tcG9uZW50cyB0aGF0IGNvbmZpcm0gZGVjaXNpb25zIG9yIGhhbmRsZSBuZWNlc3NhcnkgaW50ZXJydXB0aW9ucy4gRXhhbXBsZTogTW9kYWxzLlxuJGVsZXZhdGlvbi1sYXJnZTogMCA1cHggMTVweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDgpLCAwIDE1cHggMjdweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDcpLCAwIDMwcHggMzZweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDQpLCAwIDUwcHggNDNweCByZ2JhKGNvbG9ycy4kYmxhY2ssIDAuMDIpO1xuXG4vKipcbiAqIERpbWVuc2lvbnMuXG4gKi9cblxuJGljb24tc2l6ZTogMjRweDtcbiRidXR0b24tc2l6ZTogMzZweDtcbiRidXR0b24tc2l6ZS1uZXh0LWRlZmF1bHQtNDBweDogNDBweDsgLy8gdHJhbnNpdGlvbmFyeSB2YXJpYWJsZSBmb3IgbmV4dCBkZWZhdWx0IGJ1dHRvbiBzaXplXG4kYnV0dG9uLXNpemUtc21hbGw6IDI0cHg7XG4kYnV0dG9uLXNpemUtY29tcGFjdDogMzJweDtcbiRoZWFkZXItaGVpZ2h0OiA2NHB4O1xuJHBhbmVsLWhlYWRlci1oZWlnaHQ6ICRncmlkLXVuaXQtNjA7XG4kbmF2LXNpZGViYXItd2lkdGg6IDMwMHB4O1xuJGFkbWluLWJhci1oZWlnaHQ6IDMycHg7XG4kYWRtaW4tYmFyLWhlaWdodC1iaWc6IDQ2cHg7XG4kYWRtaW4tc2lkZWJhci13aWR0aDogMTYwcHg7XG4kYWRtaW4tc2lkZWJhci13aWR0aC1iaWc6IDE5MHB4O1xuJGFkbWluLXNpZGViYXItd2lkdGgtY29sbGFwc2VkOiAzNnB4O1xuJG1vZGFsLW1pbi13aWR0aDogMzUwcHg7XG4kbW9kYWwtd2lkdGgtc21hbGw6IDM4NHB4O1xuJG1vZGFsLXdpZHRoLW1lZGl1bTogNTEycHg7XG4kbW9kYWwtd2lkdGgtbGFyZ2U6IDg0MHB4O1xuJHNwaW5uZXItc2l6ZTogMTZweDtcbiRjYW52YXMtcGFkZGluZzogJGdyaWQtdW5pdC0yMDtcbiRwYWxldHRlLW1heC1oZWlnaHQ6IDM2OHB4O1xuXG4vKipcbiAqIE1vYmlsZSBzcGVjaWZpYyBzdHlsZXNcbiAqL1xuJG1vYmlsZS10ZXh0LW1pbi1mb250LXNpemU6IDE2cHg7IC8vIEFueSBmb250IHNpemUgYmVsb3cgMTZweCB3aWxsIGNhdXNlIE1vYmlsZSBTYWZhcmkgdG8gXCJ6b29tIGluXCIuXG5cbi8qKlxuICogRWRpdG9yIHN0eWxlcy5cbiAqL1xuXG4kc2lkZWJhci13aWR0aDogMjgwcHg7XG4kY29udGVudC13aWR0aDogODQwcHg7XG4kd2lkZS1jb250ZW50LXdpZHRoOiAxMTAwcHg7XG4kd2lkZ2V0LWFyZWEtd2lkdGg6IDcwMHB4O1xuJHNlY29uZGFyeS1zaWRlYmFyLXdpZHRoOiAzNTBweDtcbiRlZGl0b3ItZm9udC1zaXplOiAxNnB4O1xuJGRlZmF1bHQtYmxvY2stbWFyZ2luOiAyOHB4OyAvLyBUaGlzIHZhbHVlIHByb3ZpZGVzIGEgY29uc2lzdGVudCwgY29udGlndW91cyBzcGFjaW5nIGJldHdlZW4gYmxvY2tzLlxuJHRleHQtZWRpdG9yLWZvbnQtc2l6ZTogMTVweDtcbiRlZGl0b3ItbGluZS1oZWlnaHQ6IDEuODtcbiRlZGl0b3ItaHRtbC1mb250OiAkZm9udC1mYW1pbHktbW9ubztcblxuLyoqXG4gKiBCbG9jayAmIEVkaXRvciBVSS5cbiAqL1xuXG4kYmxvY2stdG9vbGJhci1oZWlnaHQ6ICRncmlkLXVuaXQtNjA7XG4kYm9yZGVyLXdpZHRoOiAxcHg7XG4kYm9yZGVyLXdpZHRoLWZvY3VzLWZhbGxiYWNrOiAycHg7IC8vIFRoaXMgZXhpc3RzIGFzIGEgZmFsbGJhY2ssIGFuZCBpcyBpZGVhbGx5IG92ZXJyaWRkZW4gYnkgdmFyKC0td3AtYWRtaW4tYm9yZGVyLXdpZHRoLWZvY3VzKSB1bmxlc3MgaW4gc29tZSBTQVNTIG1hdGggY2FzZXMuXG4kYm9yZGVyLXdpZHRoLXRhYjogMS41cHg7XG4kaGVscHRleHQtZm9udC1zaXplOiAxMnB4O1xuJHJhZGlvLWlucHV0LXNpemU6IDE2cHg7XG4kcmFkaW8taW5wdXQtc2l6ZS1zbTogMjRweDsgLy8gV2lkdGggJiBoZWlnaHQgZm9yIHNtYWxsIHZpZXdwb3J0cy5cblxuLy8gRGVwcmVjYXRlZCwgcGxlYXNlIGF2b2lkIHVzaW5nIHRoZXNlLlxuJGJsb2NrLXBhZGRpbmc6IDE0cHg7IC8vIFVzZWQgdG8gZGVmaW5lIHNwYWNlIGJldHdlZW4gYmxvY2sgZm9vdHByaW50IGFuZCBzdXJyb3VuZGluZyBib3JkZXJzLlxuJHJhZGl1cy1ibG9jay11aTogJHJhZGl1cy1zbWFsbDtcbiRzaGFkb3ctcG9wb3ZlcjogJGVsZXZhdGlvbi14LXNtYWxsO1xuJHNoYWRvdy1tb2RhbDogJGVsZXZhdGlvbi1sYXJnZTtcbiRkZWZhdWx0LWZvbnQtc2l6ZTogJGZvbnQtc2l6ZS1tZWRpdW07XG5cbi8qKlxuICogQmxvY2sgcGFkZGluZ3MuXG4gKi9cblxuLy8gUGFkZGluZyBmb3IgYmxvY2tzIHdpdGggYSBiYWNrZ3JvdW5kIGNvbG9yIChlLmcuIHBhcmFncmFwaCBvciBncm91cCkuXG4kYmxvY2stYmctcGFkZGluZy0tdjogMS4yNWVtO1xuJGJsb2NrLWJnLXBhZGRpbmctLWg6IDIuMzc1ZW07XG5cblxuLyoqXG4gKiBSZWFjdCBOYXRpdmUgc3BlY2lmaWMuXG4gKiBUaGVzZSB2YXJpYWJsZXMgZG8gbm90IGFwcGVhciB0byBiZSB1c2VkIGFueXdoZXJlIGVsc2UuXG4gKi9cblxuLy8gRGltZW5zaW9ucy5cbiRtb2JpbGUtaGVhZGVyLXRvb2xiYXItaGVpZ2h0OiA0NHB4O1xuJG1vYmlsZS1oZWFkZXItdG9vbGJhci1leHBhbmRlZC1oZWlnaHQ6IDUycHg7XG4kbW9iaWxlLWZsb2F0aW5nLXRvb2xiYXItaGVpZ2h0OiA0NHB4O1xuJG1vYmlsZS1mbG9hdGluZy10b29sYmFyLW1hcmdpbjogOHB4O1xuJG1vYmlsZS1jb2xvci1zd2F0Y2g6IDQ4cHg7XG5cbi8vIEJsb2NrIFVJLlxuJG1vYmlsZS1ibG9jay10b29sYmFyLWhlaWdodDogNDRweDtcbiRkaW1tZWQtb3BhY2l0eTogMTtcbiRibG9jay1lZGdlLXRvLWNvbnRlbnQ6IDE2cHg7XG4kc29saWQtYm9yZGVyLXNwYWNlOiAxMnB4O1xuJGRhc2hlZC1ib3JkZXItc3BhY2U6IDZweDtcbiRibG9jay1zZWxlY3RlZC1tYXJnaW46IDNweDtcbiRibG9jay1zZWxlY3RlZC1ib3JkZXItd2lkdGg6IDFweDtcbiRibG9jay1zZWxlY3RlZC1wYWRkaW5nOiAwO1xuJGJsb2NrLXNlbGVjdGVkLWNoaWxkLW1hcmdpbjogNXB4O1xuJGJsb2NrLXNlbGVjdGVkLXRvLWNvbnRlbnQ6ICRibG9jay1lZGdlLXRvLWNvbnRlbnQgLSAkYmxvY2stc2VsZWN0ZWQtbWFyZ2luIC0gJGJsb2NrLXNlbGVjdGVkLWJvcmRlci13aWR0aDtcbiIsIi8qKlxuICogQ29sb3JzXG4gKi9cblxuLy8gV29yZFByZXNzIGdyYXlzLlxuJGJsYWNrOiAjMDAwO1x0XHRcdC8vIFVzZSBvbmx5IHdoZW4geW91IHRydWx5IG5lZWQgcHVyZSBibGFjay4gRm9yIFVJLCB1c2UgJGdyYXktOTAwLlxuJGdyYXktOTAwOiAjMWUxZTFlO1xuJGdyYXktODAwOiAjMmYyZjJmO1xuJGdyYXktNzAwOiAjNzU3NTc1O1x0XHQvLyBNZWV0cyA0LjY6MSAoNC41OjEgaXMgbWluaW11bSkgdGV4dCBjb250cmFzdCBhZ2FpbnN0IHdoaXRlLlxuJGdyYXktNjAwOiAjOTQ5NDk0O1x0XHQvLyBNZWV0cyAzOjEgVUkgb3IgbGFyZ2UgdGV4dCBjb250cmFzdCBhZ2FpbnN0IHdoaXRlLlxuJGdyYXktNDAwOiAjY2NjO1xuJGdyYXktMzAwOiAjZGRkO1x0XHQvLyBVc2VkIGZvciBtb3N0IGJvcmRlcnMuXG4kZ3JheS0yMDA6ICNlMGUwZTA7XHRcdC8vIFVzZWQgc3BhcmluZ2x5IGZvciBsaWdodCBib3JkZXJzLlxuJGdyYXktMTAwOiAjZjBmMGYwO1x0XHQvLyBVc2VkIGZvciBsaWdodCBncmF5IGJhY2tncm91bmRzLlxuJHdoaXRlOiAjZmZmO1xuXG4vLyBPcGFjaXRpZXMgJiBhZGRpdGlvbmFsIGNvbG9ycy5cbiRkYXJrLWdyYXktcGxhY2Vob2xkZXI6IHJnYmEoJGdyYXktOTAwLCAwLjYyKTtcbiRtZWRpdW0tZ3JheS1wbGFjZWhvbGRlcjogcmdiYSgkZ3JheS05MDAsIDAuNTUpO1xuJGxpZ2h0LWdyYXktcGxhY2Vob2xkZXI6IHJnYmEoJHdoaXRlLCAwLjY1KTtcblxuLy8gQWxlcnQgY29sb3JzLlxuJGFsZXJ0LXllbGxvdzogI2YwYjg0OTtcbiRhbGVydC1yZWQ6ICNjYzE4MTg7XG4kYWxlcnQtZ3JlZW46ICM0YWI4NjY7XG5cbi8vIERlcHJlY2F0ZWQsIHBsZWFzZSBhdm9pZCB1c2luZyB0aGVzZS5cbiRkYXJrLXRoZW1lLWZvY3VzOiAkd2hpdGU7XHQvLyBGb2N1cyBjb2xvciB3aGVuIHRoZSB0aGVtZSBpcyBkYXJrLlxuIiwiLyoqXG4gKiBCcmVha3BvaW50cyAmIE1lZGlhIFF1ZXJpZXNcbiAqL1xuXG4vLyBNb3N0IHVzZWQgYnJlYWtwb2ludHNcbiRicmVhay14aHVnZTogMTkyMHB4O1xuJGJyZWFrLWh1Z2U6IDE0NDBweDtcbiRicmVhay13aWRlOiAxMjgwcHg7XG4kYnJlYWsteGxhcmdlOiAxMDgwcHg7XG4kYnJlYWstbGFyZ2U6IDk2MHB4O1x0Ly8gYWRtaW4gc2lkZWJhciBhdXRvIGZvbGRzXG4kYnJlYWstbWVkaXVtOiA3ODJweDtcdC8vIGFkbWluYmFyIGdvZXMgYmlnXG4kYnJlYWstc21hbGw6IDYwMHB4O1xuJGJyZWFrLW1vYmlsZTogNDgwcHg7XG4kYnJlYWstem9vbWVkLWluOiAyODBweDtcblxuLy8gQWxsIG1lZGlhIHF1ZXJpZXMgY3VycmVudGx5IGluIFdvcmRQcmVzczpcbi8vXG4vLyBtaW4td2lkdGg6IDIwMDBweFxuLy8gbWluLXdpZHRoOiAxNjgwcHhcbi8vIG1pbi13aWR0aDogMTI1MHB4XG4vLyBtYXgtd2lkdGg6IDExMjBweCAqXG4vLyBtYXgtd2lkdGg6IDEwMDBweFxuLy8gbWluLXdpZHRoOiA3NjlweCBhbmQgbWF4LXdpZHRoOiAxMDAwcHhcbi8vIG1heC13aWR0aDogOTYwcHggKlxuLy8gbWF4LXdpZHRoOiA5MDBweFxuLy8gbWF4LXdpZHRoOiA4NTBweFxuLy8gbWluLXdpZHRoOiA4MDBweCBhbmQgbWF4LXdpZHRoOiAxNDk5cHhcbi8vIG1heC13aWR0aDogODAwcHhcbi8vIG1heC13aWR0aDogNzk5cHhcbi8vIG1heC13aWR0aDogNzgycHggKlxuLy8gbWF4LXdpZHRoOiA3NjhweFxuLy8gbWF4LXdpZHRoOiA2NDBweCAqXG4vLyBtYXgtd2lkdGg6IDYwMHB4ICpcbi8vIG1heC13aWR0aDogNTIwcHhcbi8vIG1heC13aWR0aDogNTAwcHhcbi8vIG1heC13aWR0aDogNDgwcHggKlxuLy8gbWF4LXdpZHRoOiA0MDBweCAqXG4vLyBtYXgtd2lkdGg6IDM4MHB4XG4vLyBtYXgtd2lkdGg6IDMyMHB4ICpcbi8vXG4vLyBUaG9zZSBtYXJrZWQgKiBzZWVtIHRvIGJlIG1vcmUgY29tbW9ubHkgdXNlZCB0aGFuIHRoZSBvdGhlcnMuXG4vLyBMZXQncyB0cnkgYW5kIHVzZSBhcyBmZXcgb2YgdGhlc2UgYXMgcG9zc2libGUsIGFuZCBiZSBtaW5kZnVsIGFib3V0IGFkZGluZyBuZXcgb25lcywgc28gd2UgZG9uJ3QgbWFrZSB0aGUgc2l0dWF0aW9uIHdvcnNlXG4iLCIvKipcbiogIENvbnZlcnRzIGEgaGV4IHZhbHVlIGludG8gdGhlIHJnYiBlcXVpdmFsZW50LlxuKlxuKiBAcGFyYW0ge3N0cmluZ30gaGV4IC0gdGhlIGhleGFkZWNpbWFsIHZhbHVlIHRvIGNvbnZlcnRcbiogQHJldHVybiB7c3RyaW5nfSBjb21tYSBzZXBhcmF0ZWQgcmdiIHZhbHVlc1xuKi9cblxuQHVzZSBcInNhc3M6Y29sb3JcIjtcbkB1c2UgXCJzYXNzOm1ldGFcIjtcblxuQGZ1bmN0aW9uIGhleC10by1yZ2IoJGhleCkge1xuXHQvKlxuXHQgKiBUT0RPOiBgY29sb3Iue3JlZHxncmVlbnxibHVlfWAgd2lsbCB0cmlnZ2VyIGEgZGVwcmVjYXRpb24gd2FybmluZyBpbiBEYXJ0IFNhc3MsXG5cdCAqIGJ1dCB0aGUgU2FzcyB1c2VkIGJ5IHRoZSBHdXRlbmJlcmcgcHJvamVjdCBkb2Vzbid0IHN1cHBvcnQgYGNvbG9yLmNoYW5uZWwoKWAgeWV0LFxuXHQgKiBzbyB3ZSBjYW4ndCBtaWdyYXRlIHRvIGl0IGF0IHRoaXMgdGltZS5cblx0ICogSW4gdGhlIGZ1dHVyZSwgYWZ0ZXIgdGhlIEd1dGVuYmVyZyBwcm9qZWN0IGhhcyBiZWVuIGZ1bGx5IG1pZ3JhdGVkIHRvIERhcnQgU2Fzcyxcblx0ICogUmVtb3ZlIHRoaXMgY29uZGl0aW9uYWwgc3RhdGVtZW50IGFuZCB1c2Ugb25seSBgY29sb3IuY2hhbm5lbCgpYC5cblx0ICovXG5cdEBpZiBtZXRhLmZ1bmN0aW9uLWV4aXN0cyhcImNoYW5uZWxcIiwgXCJjb2xvclwiKSB7XG5cdFx0QHJldHVybiBjb2xvci5jaGFubmVsKCRoZXgsIFwicmVkXCIpLCBjb2xvci5jaGFubmVsKCRoZXgsIFwiZ3JlZW5cIiksIGNvbG9yLmNoYW5uZWwoJGhleCwgXCJibHVlXCIpO1xuXHR9IEBlbHNlIHtcblx0XHRAcmV0dXJuIGNvbG9yLnJlZCgkaGV4KSwgY29sb3IuZ3JlZW4oJGhleCksIGNvbG9yLmJsdWUoJGhleCk7XG5cdH1cbn1cbiIsIi8qKlxuICogTG9uZyBjb250ZW50IGZhZGUgbWl4aW5cbiAqXG4gKiBDcmVhdGVzIGEgZmFkaW5nIG92ZXJsYXkgdG8gc2lnbmlmeSB0aGF0IHRoZSBjb250ZW50IGlzIGxvbmdlclxuICogdGhhbiB0aGUgc3BhY2UgYWxsb3dzLlxuICovXG5cbkBtaXhpbiBsb25nLWNvbnRlbnQtZmFkZSgkZGlyZWN0aW9uOiByaWdodCwgJHNpemU6IDIwJSwgJGNvbG9yOiAjZmZmLCAkZWRnZTogMCwgJHotaW5kZXg6IGZhbHNlKSB7XG5cdGNvbnRlbnQ6IFwiXCI7XG5cdGRpc3BsYXk6IGJsb2NrO1xuXHRwb3NpdGlvbjogYWJzb2x1dGU7XG5cdC13ZWJraXQtdG91Y2gtY2FsbG91dDogbm9uZTtcblx0LXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTtcblx0LWtodG1sLXVzZXItc2VsZWN0OiBub25lO1xuXHQtbW96LXVzZXItc2VsZWN0OiBub25lO1xuXHQtbXMtdXNlci1zZWxlY3Q6IG5vbmU7XG5cdHVzZXItc2VsZWN0OiBub25lO1xuXHRwb2ludGVyLWV2ZW50czogbm9uZTtcblxuXHRAaWYgJHotaW5kZXgge1xuXHRcdHotaW5kZXg6ICR6LWluZGV4O1xuXHR9XG5cblx0QGlmICRkaXJlY3Rpb24gPT0gXCJib3R0b21cIiB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIHRvcCwgdHJhbnNwYXJlbnQsICRjb2xvciA5MCUpO1xuXHRcdGxlZnQ6ICRlZGdlO1xuXHRcdHJpZ2h0OiAkZWRnZTtcblx0XHR0b3A6ICRlZGdlO1xuXHRcdGJvdHRvbTogY2FsYygxMDAlIC0gJHNpemUpO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHR9XG5cblx0QGlmICRkaXJlY3Rpb24gPT0gXCJ0b3BcIiB7XG5cdFx0YmFja2dyb3VuZDogbGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwgdHJhbnNwYXJlbnQsICRjb2xvciA5MCUpO1xuXHRcdHRvcDogY2FsYygxMDAlIC0gJHNpemUpO1xuXHRcdGxlZnQ6ICRlZGdlO1xuXHRcdHJpZ2h0OiAkZWRnZTtcblx0XHRib3R0b206ICRlZGdlO1xuXHRcdHdpZHRoOiBhdXRvO1xuXHR9XG5cblx0QGlmICRkaXJlY3Rpb24gPT0gXCJsZWZ0XCIge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byBsZWZ0LCB0cmFuc3BhcmVudCwgJGNvbG9yIDkwJSk7XG5cdFx0dG9wOiAkZWRnZTtcblx0XHRsZWZ0OiAkZWRnZTtcblx0XHRib3R0b206ICRlZGdlO1xuXHRcdHJpZ2h0OiBhdXRvO1xuXHRcdHdpZHRoOiAkc2l6ZTtcblx0XHRoZWlnaHQ6IGF1dG87XG5cdH1cblxuXHRAaWYgJGRpcmVjdGlvbiA9PSBcInJpZ2h0XCIge1xuXHRcdGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCh0byByaWdodCwgdHJhbnNwYXJlbnQsICRjb2xvciA5MCUpO1xuXHRcdHRvcDogJGVkZ2U7XG5cdFx0Ym90dG9tOiAkZWRnZTtcblx0XHRyaWdodDogJGVkZ2U7XG5cdFx0bGVmdDogYXV0bztcblx0XHR3aWR0aDogJHNpemU7XG5cdFx0aGVpZ2h0OiBhdXRvO1xuXHR9XG59XG4iLCJAdXNlIFwiLi9taXhpbnNcIjtcbkB1c2UgXCIuL2Z1bmN0aW9uc1wiO1xuQHVzZSBcIi4vY29sb3JzXCI7XG5cbi8vIEl0IGlzIGltcG9ydGFudCB0byBpbmNsdWRlIHRoZXNlIHN0eWxlcyBpbiBhbGwgYnVpbHQgc3R5bGVzaGVldHMuXG4vLyBUaGlzIGFsbG93cyB0byBDU1MgdmFyaWFibGVzIHBvc3QgQ1NTIHBsdWdpbiB0byBnZW5lcmF0ZSBmYWxsYmFja3MuXG4vLyBJdCBhbHNvIHByb3ZpZGVzIGRlZmF1bHQgQ1NTIHZhcmlhYmxlcyBmb3IgbnBtIHBhY2thZ2UgY29uc3VtZXJzLlxuOnJvb3Qge1xuXHQtLXdwLWJsb2NrLXN5bmNlZC1jb2xvcjogIzdhMDBkZjtcblx0LS13cC1ibG9jay1zeW5jZWQtY29sb3ItLXJnYjogI3tmdW5jdGlvbnMuaGV4LXRvLXJnYigjN2EwMGRmKX07XG5cdC8vIFRoaXMgQ1NTIHZhcmlhYmxlIGlzIG5vdCB1c2VkIGluIEd1dGVuYmVyZyBwcm9qZWN0LFxuXHQvLyBidXQgaXMgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXG5cdC0td3AtYm91bmQtYmxvY2stY29sb3I6IHZhcigtLXdwLWJsb2NrLXN5bmNlZC1jb2xvcik7XG5cdC0td3AtZWRpdG9yLWNhbnZhcy1iYWNrZ3JvdW5kOiAje2NvbG9ycy4kZ3JheS0zMDB9O1xuXHRAaW5jbHVkZSBtaXhpbnMuYWRtaW4tc2NoZW1lKCMwMDdjYmEpO1xufVxuIiwiQHVzZSBcInNhc3M6Y29sb3JcIjtcbkB1c2UgXCJAd29yZHByZXNzL2Jhc2Utc3R5bGVzL21peGluc1wiIGFzICo7XG5AdXNlIFwiQHdvcmRwcmVzcy9iYXNlLXN0eWxlcy92YXJpYWJsZXNcIiBhcyAqO1xuQHVzZSBcIkB3b3JkcHJlc3MvYmFzZS1zdHlsZXMvY29sb3JzXCIgYXMgKjtcbkB1c2UgXCJAd29yZHByZXNzL2Jhc2Utc3R5bGVzL2RlZmF1bHQtY3VzdG9tLXByb3BlcnRpZXNcIiBhcyAqO1xuXG4vLyBIZXJlIHdlIGV4dGVuZCB0aGUgbW9kYWwgc3R5bGVzIHRvIGJlIHRpZ2h0ZXIsIGFuZCB0byB0aGUgY2VudGVyLiBCZWNhdXNlIHRoZSBwYWxldHRlIHVzZXMgdGhlIG1vZGFsIGFzIGEgY29udGFpbmVyLlxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51IHtcblx0Ym9yZGVyLXJhZGl1czogJGdyaWQtdW5pdC0wNTtcblx0d2lkdGg6IGNhbGMoMTAwJSAtICN7JGdyaWQtdW5pdC00MH0pO1xuXHRtYXJnaW46IGF1dG87XG5cdG1heC13aWR0aDogNDAwcHg7XG5cdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0dG9wOiBjYWxjKDUlICsgI3skaGVhZGVyLWhlaWdodH0pO1xuXG5cdEBpbmNsdWRlIGJyZWFrLXNtYWxsKCkge1xuXHRcdHRvcDogY2FsYygxMCUgKyAjeyRoZWFkZXItaGVpZ2h0fSk7XG5cdH1cblxuXHQuY29tcG9uZW50cy1tb2RhbF9fY29udGVudCB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHBhZGRpbmc6IDA7XG5cdH1cbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19vdmVybGF5IHtcblx0ZGlzcGxheTogYmxvY2s7XG5cdGFsaWduLWl0ZW1zOiBzdGFydDtcbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19oZWFkZXIge1xuXHRwYWRkaW5nOiAwICRncmlkLXVuaXQtMjA7XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9faGVhZGVyLXNlYXJjaC1pY29uIHtcblx0JjpkaXIobHRyKSB7XG5cdFx0dHJhbnNmb3JtOiBzY2FsZVgoLTEpO1xuXHR9XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9fY29udGFpbmVyIHtcblx0Ly8gdGhlIHN0eWxlIGhlcmUgaXMgYSBoYWNrIHRvIGZvcmNlIHNhZmFyaSB0byByZXBhaW50IHRvIGF2b2lkIGEgc3R5bGUgZ2xpdGNoXG5cdHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07XG5cblx0Jjpmb2N1cyB7XG5cdFx0b3V0bGluZTogbm9uZTtcblx0fVxuXG5cdFtjbWRrLWlucHV0XSB7XG5cdFx0Ym9yZGVyOiBub25lO1xuXHRcdHdpZHRoOiAxMDAlO1xuXHRcdHBhZGRpbmc6ICRncmlkLXVuaXQtMjAgJGdyaWQtdW5pdC0wNTtcblx0XHRvdXRsaW5lOiBub25lO1xuXHRcdGNvbG9yOiAkZ3JheS05MDA7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdGZvbnQtc2l6ZTogMTVweDtcblx0XHRsaW5lLWhlaWdodDogMjhweDtcblx0XHRib3JkZXItcmFkaXVzOiAwO1xuXG5cdFx0Jjo6cGxhY2Vob2xkZXIge1xuXHRcdFx0Y29sb3I6ICRncmF5LTcwMDtcblx0XHR9XG5cblx0XHQmOmZvY3VzIHtcblx0XHRcdGJveC1zaGFkb3c6IG5vbmU7XG5cdFx0XHRvdXRsaW5lOiBub25lO1xuXHRcdH1cblx0fVxuXG5cdFtjbWRrLWl0ZW1dIHtcblx0XHRib3JkZXItcmFkaXVzOiAkcmFkaXVzLXNtYWxsO1xuXHRcdGN1cnNvcjogcG9pbnRlcjtcblx0XHRkaXNwbGF5OiBmbGV4O1xuXHRcdGFsaWduLWl0ZW1zOiBjZW50ZXI7XG5cdFx0Y29sb3I6ICRncmF5LTkwMDtcblx0XHRmb250LXNpemU6ICRkZWZhdWx0LWZvbnQtc2l6ZTtcblxuXHRcdCZbYXJpYS1zZWxlY3RlZD1cInRydWVcIl0sXG5cdFx0JjphY3RpdmUge1xuXHRcdFx0YmFja2dyb3VuZDogdmFyKC0td3AtYWRtaW4tdGhlbWUtY29sb3IpO1xuXHRcdFx0Y29sb3I6ICR3aGl0ZTtcblx0XHR9XG5cblx0XHQmW2FyaWEtZGlzYWJsZWQ9XCJ0cnVlXCJdIHtcblx0XHRcdGNvbG9yOiAkZ3JheS02MDA7XG5cdFx0XHRjdXJzb3I6IG5vdC1hbGxvd2VkO1xuXHRcdH1cblxuXHRcdD4gZGl2IHtcblx0XHRcdG1pbi1oZWlnaHQ6ICRidXR0b24tc2l6ZS1uZXh0LWRlZmF1bHQtNDBweDtcblx0XHRcdHBhZGRpbmc6ICRncmlkLXVuaXQtMDU7XG5cdFx0XHRwYWRkaW5nLWxlZnQ6ICRncmlkLXVuaXQtMjA7XG5cdFx0fVxuXHR9XG5cblx0W2NtZGstcm9vdF0gPiBbY21kay1saXN0XSB7XG5cdFx0bWF4LWhlaWdodDogJHBhbGV0dGUtbWF4LWhlaWdodDsgLy8gU3BlY2lmaWMgdG8gbm90IGhhdmUgd29ya2Zsb3dzIG92ZXJmbG93IG9kZGx5LlxuXHRcdG92ZXJmbG93OiBhdXRvO1xuXG5cdFx0Ly8gRW5zdXJlcyB0aGVyZSBpcyBhbHdheXMgcGFkZGluZyBib3R0b20gb24gdGhlIGxhc3QgZ3JvdXAsIHdoZW4gdGhlcmUgYXJlIHdvcmtmbG93cy5cblx0XHQmXG5cdFx0W2NtZGstbGlzdC1zaXplcl0gPiBbY21kay1ncm91cF06bGFzdC1jaGlsZFxuXHRcdFtjbWRrLWdyb3VwLWl0ZW1zXTpub3QoOmVtcHR5KSB7XG5cdFx0XHRwYWRkaW5nLWJvdHRvbTogJGdyaWQtdW5pdC0xMDtcblx0XHR9XG5cblx0XHQmIFtjbWRrLWxpc3Qtc2l6ZXJdID4gW2NtZGstZ3JvdXBdID4gW2NtZGstZ3JvdXAtaXRlbXNdOm5vdCg6ZW1wdHkpIHtcblx0XHRcdHBhZGRpbmc6IDAgJGdyaWQtdW5pdC0xMDtcblx0XHR9XG5cdH1cblxuXHRbY21kay1lbXB0eV0ge1xuXHRcdGRpc3BsYXk6IGZsZXg7XG5cdFx0YWxpZ24taXRlbXM6IGNlbnRlcjtcblx0XHRqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcblx0XHR3aGl0ZS1zcGFjZTogcHJlLXdyYXA7XG5cdFx0Y29sb3I6ICRncmF5LTkwMDtcblx0XHRwYWRkaW5nOiAkZ3JpZC11bml0LTEwIDAgJGdyaWQtdW5pdC00MDtcblx0fVxuXG5cdFtjbWRrLWxvYWRpbmddIHtcblx0XHRwYWRkaW5nOiAkZ3JpZC11bml0LTIwO1xuXHR9XG5cblx0W2NtZGstbGlzdC1zaXplcl0ge1xuXHRcdHBvc2l0aW9uOiByZWxhdGl2ZTtcblx0fVxufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX2l0ZW0gc3BhbiB7XG5cdC8vIEVuc3VyZSB3b3JrZmxvd3MgZG8gbm90IHJ1biBvZmYgdGhlIGVkZ2UgKGdyZWF0IGZvciBwb3N0IHRpdGxlcykuXG5cdGRpc3BsYXk6IGlubGluZS1ibG9jaztcblx0b3ZlcmZsb3c6IGhpZGRlbjtcblx0dGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XG5cdHdoaXRlLXNwYWNlOiBub3dyYXA7XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9faXRlbSBtYXJrIHtcblx0Y29sb3I6IGluaGVyaXQ7XG5cdGJhY2tncm91bmQ6IHVuc2V0O1xuXHRmb250LXdlaWdodDogNjAwO1xufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX291dHB1dCB7XG5cdHBhZGRpbmc6ICRncmlkLXVuaXQtMjA7XG59XG5cbi53b3JrZmxvd3Mtd29ya2Zsb3ctbWVudV9fb3V0cHV0LWhlYWRlciB7XG5cdG1hcmdpbi1ib3R0b206ICRncmlkLXVuaXQtMjA7XG5cdGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAkZ3JheS0zMDA7XG5cdHBhZGRpbmctYm90dG9tOiAkZ3JpZC11bml0LTEwO1xuXG5cdGgzIHtcblx0XHRtYXJnaW46IDAgMCAkZ3JpZC11bml0LTA1O1xuXHRcdGZvbnQtc2l6ZTogMTZweDtcblx0XHRmb250LXdlaWdodDogNjAwO1xuXHRcdGNvbG9yOiAkZ3JheS05MDA7XG5cdH1cbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19vdXRwdXQtaGludCB7XG5cdG1hcmdpbjogMDtcblx0Zm9udC1zaXplOiAxMnB4O1xuXHRjb2xvcjogJGdyYXktNzAwO1xufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX291dHB1dC1jb250ZW50IHtcblx0bWF4LWhlaWdodDogNDAwcHg7XG5cdG92ZXJmbG93OiBhdXRvO1xuXG5cdHByZSB7XG5cdFx0bWFyZ2luOiAwO1xuXHRcdHBhZGRpbmc6ICRncmlkLXVuaXQtMTU7XG5cdFx0YmFja2dyb3VuZDogJGdyYXktMTAwO1xuXHRcdGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtc21hbGw7XG5cdFx0Zm9udC1zaXplOiAxMnB4O1xuXHRcdGxpbmUtaGVpZ2h0OiAxLjU7XG5cdFx0d2hpdGUtc3BhY2U6IHByZS13cmFwO1xuXHRcdHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7XG5cdFx0Y29sb3I6ICRncmF5LTkwMDtcblx0fVxufVxuXG4ud29ya2Zsb3dzLXdvcmtmbG93LW1lbnVfX291dHB1dC1lcnJvciB7XG5cdHBhZGRpbmc6ICRncmlkLXVuaXQtMTU7XG5cdGJhY2tncm91bmQ6ICRncmF5LTIwMDtcblx0Ym9yZGVyOiAxcHggc29saWQgI3tjb2xvci5hZGp1c3QoICRhbGVydC1yZWQsICRsaWdodG5lc3M6IC0xMCUgKX07XG5cdGJvcmRlci1yYWRpdXM6ICRyYWRpdXMtc21hbGw7XG5cdGNvbG9yOiAkYWxlcnQtcmVkO1xuXG5cdHAge1xuXHRcdG1hcmdpbjogMDtcblx0XHRmb250LXNpemU6IDEzcHg7XG5cdH1cbn1cblxuLndvcmtmbG93cy13b3JrZmxvdy1tZW51X19leGVjdXRpbmcge1xuXHRwYWRkaW5nOiAkZ3JpZC11bml0LTMwICRncmlkLXVuaXQtMjA7XG5cdGNvbG9yOiAkZ3JheS03MDA7XG5cdGZvbnQtc2l6ZTogMTRweDtcbn1cbiJdfQ== */`;
3597  document.head.appendChild(document.createElement("style")).appendChild(document.createTextNode(css));
3598  var { withIgnoreIMEEvents } = unlock(import_components.privateApis);
3599  var EMPTY_ARRAY = [];
3600  var inputLabel = (0, import_i18n.__)("Run abilities and workflows");
3601  function WorkflowInput({ isOpen, search, setSearch, abilities }) {
3602    const workflowMenuInput = (0, import_element2.useRef)();
3603    const _value = P((state) => state.value);
3604    const selectedItemId = (0, import_element2.useMemo)(() => {
3605      const ability = abilities.find((a) => a.label === _value);
3606      return ability?.name;
3607    }, [_value, abilities]);
3608    (0, import_element2.useEffect)(() => {
3609      if (isOpen) {
3610        workflowMenuInput.current.focus();
3611      }
3612    }, [isOpen]);
3613    return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3614      _e.Input,
3615      {
3616        ref: workflowMenuInput,
3617        value: search,
3618        onValueChange: setSearch,
3619        placeholder: inputLabel,
3620        "aria-activedescendant": selectedItemId
3621      }
3622    );
3623  }
3624  function WorkflowMenu() {
3625    const { registerShortcut } = (0, import_data.useDispatch)(import_keyboard_shortcuts.store);
3626    const [search, setSearch] = (0, import_element2.useState)("");
3627    const [isOpen, setIsOpen] = (0, import_element2.useState)(false);
3628    const [abilityOutput, setAbilityOutput] = (0, import_element2.useState)(null);
3629    const [isExecuting, setIsExecuting] = (0, import_element2.useState)(false);
3630    const containerRef = (0, import_element2.useRef)();
3631    const abilities = (0, import_data.useSelect)((select) => {
3632      const allAbilities = select(abilitiesStore).getAbilities();
3633      return allAbilities || EMPTY_ARRAY;
3634    }, []);
3635    const filteredAbilities = (0, import_element2.useMemo)(() => {
3636      if (!search) {
3637        return abilities;
3638      }
3639      const searchLower = search.toLowerCase();
3640      return abilities.filter(
3641        (ability) => ability.label?.toLowerCase().includes(searchLower) || ability.name?.toLowerCase().includes(searchLower)
3642      );
3643    }, [abilities, search]);
3644    (0, import_element2.useEffect)(() => {
3645      if (abilityOutput && containerRef.current) {
3646        containerRef.current.focus();
3647      }
3648    }, [abilityOutput]);
3649    (0, import_element2.useEffect)(() => {
3650      registerShortcut({
3651        name: "core/workflows",
3652        category: "global",
3653        description: (0, import_i18n.__)("Open the workflow palette."),
3654        keyCombination: {
3655          modifier: "primary",
3656          character: "j"
3657        }
3658      });
3659    }, [registerShortcut]);
3660    (0, import_keyboard_shortcuts.useShortcut)(
3661      "core/workflows",
3662      /** @type {import('react').KeyboardEventHandler} */
3663      withIgnoreIMEEvents((event) => {
3664        if (event.defaultPrevented) {
3665          return;
3666        }
3667        event.preventDefault();
3668        setIsOpen(!isOpen);
3669      }),
3670      {
3671        bindGlobal: true
3672      }
3673    );
3674    const closeAndReset = () => {
3675      setSearch("");
3676      setIsOpen(false);
3677      setAbilityOutput(null);
3678      setIsExecuting(false);
3679    };
3680    const goBack = () => {
3681      setAbilityOutput(null);
3682      setIsExecuting(false);
3683      setSearch("");
3684    };
3685    const handleExecuteAbility = async (ability) => {
3686      setIsExecuting(true);
3687      try {
3688        const result = await executeAbility(ability.name);
3689        setAbilityOutput({
3690          name: ability.name,
3691          label: ability?.label || ability.name,
3692          description: ability?.description || "",
3693          success: true,
3694          data: result
3695        });
3696      } catch (error) {
3697        setAbilityOutput({
3698          name: ability.name,
3699          label: ability?.label || ability.name,
3700          description: ability?.description || "",
3701          success: false,
3702          error: error.message || String(error)
3703        });
3704      } finally {
3705        setIsExecuting(false);
3706      }
3707    };
3708    const onContainerKeyDown = (event) => {
3709      if (abilityOutput && (event.key === "Escape" || event.key === "Backspace" || event.key === "Delete")) {
3710        event.preventDefault();
3711        event.stopPropagation();
3712        goBack();
3713      }
3714    };
3715    if (!isOpen) {
3716      return null;
3717    }
3718    return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3719      import_components.Modal,
3720      {
3721        className: "workflows-workflow-menu",
3722        overlayClassName: "workflows-workflow-menu__overlay",
3723        onRequestClose: abilityOutput ? goBack : closeAndReset,
3724        __experimentalHideHeader: true,
3725        contentLabel: (0, import_i18n.__)("Workflow palette"),
3726        children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3727          "div",
3728          {
3729            className: "workflows-workflow-menu__container",
3730            onKeyDown: withIgnoreIMEEvents(onContainerKeyDown),
3731            ref: containerRef,
3732            tabIndex: -1,
3733            role: "presentation",
3734            children: abilityOutput ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "workflows-workflow-menu__output", children: [
3735              /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("div", { className: "workflows-workflow-menu__output-header", children: [
3736                /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("h3", { children: abilityOutput.label }),
3737                abilityOutput.description && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { className: "workflows-workflow-menu__output-hint", children: abilityOutput.description })
3738              ] }),
3739              /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "workflows-workflow-menu__output-content", children: abilityOutput.success ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("pre", { children: JSON.stringify(
3740                abilityOutput.data,
3741                null,
3742                2
3743              ) }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("div", { className: "workflows-workflow-menu__output-error", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("p", { children: abilityOutput.error }) }) })
3744            ] }) : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(_e, { label: inputLabel, shouldFilter: false, children: [
3745              /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_components.__experimentalHStack, { className: "workflows-workflow-menu__header", children: [
3746                /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3747                  icon_default,
3748                  {
3749                    className: "workflows-workflow-menu__header-search-icon",
3750                    icon: search_default
3751                  }
3752                ),
3753                /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3754                  WorkflowInput,
3755                  {
3756                    search,
3757                    setSearch,
3758                    isOpen,
3759                    abilities
3760                  }
3761                )
3762              ] }),
3763              /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(_e.List, { label: (0, import_i18n.__)("Workflow suggestions"), children: [
3764                isExecuting && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3765                  import_components.__experimentalHStack,
3766                  {
3767                    className: "workflows-workflow-menu__executing",
3768                    align: "center",
3769                    children: (0, import_i18n.__)("Executing ability\u2026")
3770                  }
3771                ),
3772                !isExecuting && search && filteredAbilities.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(_e.Empty, { children: (0, import_i18n.__)("No results found.") }),
3773                !isExecuting && filteredAbilities.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(_e.Group, { children: filteredAbilities.map((ability) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3774                  _e.Item,
3775                  {
3776                    value: ability.label,
3777                    className: "workflows-workflow-menu__item",
3778                    onSelect: () => handleExecuteAbility(ability),
3779                    id: ability.name,
3780                    children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_components.__experimentalHStack, { alignment: "left", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
3781                      import_components.TextHighlight,
3782                      {
3783                        text: ability.label,
3784                        highlight: search
3785                      }
3786                    ) }) })
3787                  },
3788                  ability.name
3789                )) })
3790              ] })
3791            ] })
3792          }
3793        )
3794      }
3795    );
3796  }
3797  
3798  // packages/workflow/build-module/index.js
3799  var root = document.createElement("div");
3800  document.body.appendChild(root);
3801  (0, import_element3.createRoot)(root).render((0, import_element3.createElement)(WorkflowMenu));


Generated : Tue May 5 08:20:14 2026 Cross-referenced by PHPXref