UNPKG

projen

Version:

CDK for software projects

12,267 lines 585 kB
var __defProp = Object.defineProperty;
var __export = (target, all) => {
  for (var name in all)
    __defProp(target, name, { get: all[name], enumerable: true });
};

// npm/esm/_dnt.polyfills.js
if (!Object.hasOwn) {
  Object.defineProperty(Object, "hasOwn", {
    value: function(object, property) {
      if (object == null) {
        throw new TypeError("Cannot convert undefined or null to object");
      }
      return Object.prototype.hasOwnProperty.call(Object(object), property);
    },
    configurable: true,
    enumerable: false,
    writable: true
  });
}
if (Promise.withResolvers === void 0) {
  Promise.withResolvers = () => {
    const out = {};
    out.promise = new Promise((resolve_, reject_) => {
      out.resolve = resolve_;
      out.reject = reject_;
    });
    return out;
  };
}
function findLastIndex(self, callbackfn, that) {
  const boundFunc = that === void 0 ? callbackfn : callbackfn.bind(that);
  let index = self.length - 1;
  while (index >= 0) {
    const result = boundFunc(self[index], index, self);
    if (result) {
      return index;
    }
    index--;
  }
  return -1;
}
function findLast(self, callbackfn, that) {
  const index = self.findLastIndex(callbackfn, that);
  return index === -1 ? void 0 : self[index];
}
if (!Array.prototype.findLastIndex) {
  Array.prototype.findLastIndex = function(callbackfn, that) {
    return findLastIndex(this, callbackfn, that);
  };
}
if (!Array.prototype.findLast) {
  Array.prototype.findLast = function(callbackfn, that) {
    return findLast(this, callbackfn, that);
  };
}
if (!Uint8Array.prototype.findLastIndex) {
  Uint8Array.prototype.findLastIndex = function(callbackfn, that) {
    return findLastIndex(this, callbackfn, that);
  };
}
if (!Uint8Array.prototype.findLast) {
  Uint8Array.prototype.findLast = function(callbackfn, that) {
    return findLast(this, callbackfn, that);
  };
}
var { MAX_SAFE_INTEGER } = Number;
var iteratorSymbol = Symbol.iterator;
var asyncIteratorSymbol = Symbol.asyncIterator;
var IntrinsicArray = Array;
var tooLongErrorMessage = "Input is too long and exceeded Number.MAX_SAFE_INTEGER times.";
function isConstructor(obj) {
  if (obj != null) {
    const prox = new Proxy(obj, {
      construct() {
        return prox;
      }
    });
    try {
      new prox();
      return true;
    } catch (err) {
      return false;
    }
  } else {
    return false;
  }
}
async function fromAsync(items, mapfn, thisArg) {
  const itemsAreIterable = asyncIteratorSymbol in items || iteratorSymbol in items;
  if (itemsAreIterable) {
    const result = isConstructor(this) ? new this() : IntrinsicArray(0);
    let i = 0;
    for await (const v of items) {
      if (i > MAX_SAFE_INTEGER) {
        throw TypeError(tooLongErrorMessage);
      } else if (mapfn) {
        result[i] = await mapfn.call(thisArg, v, i);
      } else {
        result[i] = v;
      }
      i++;
    }
    result.length = i;
    return result;
  } else {
    const { length } = items;
    const result = isConstructor(this) ? new this(length) : IntrinsicArray(length);
    let i = 0;
    while (i < length) {
      if (i > MAX_SAFE_INTEGER) {
        throw TypeError(tooLongErrorMessage);
      }
      const v = await items[i];
      if (mapfn) {
        result[i] = await mapfn.call(thisArg, v, i);
      } else {
        result[i] = v;
      }
      i++;
    }
    result.length = i;
    return result;
  }
}
if (!Array.fromAsync) {
  Array.fromAsync = fromAsync;
}

// npm/esm/_dnt.shims.js
import { TextDecoder } from "node:util";
import { TextDecoder as TextDecoder2 } from "node:util";
import { ReadableStream, WritableStream, TextDecoderStream, TransformStream } from "node:stream/web";
import { ReadableStream as ReadableStream2, WritableStream as WritableStream2, TextDecoderStream as TextDecoderStream2, TransformStream as TransformStream2 } from "node:stream/web";
var dntGlobals = {
  TextDecoder,
  ReadableStream,
  WritableStream,
  TextDecoderStream,
  TransformStream
};
var dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
function createMergeProxy(baseObj, extObj) {
  return new Proxy(baseObj, {
    get(_target, prop, _receiver) {
      if (prop in extObj) {
        return extObj[prop];
      } else {
        return baseObj[prop];
      }
    },
    set(_target, prop, value) {
      if (prop in extObj) {
        delete extObj[prop];
      }
      baseObj[prop] = value;
      return true;
    },
    deleteProperty(_target, prop) {
      let success = false;
      if (prop in extObj) {
        delete extObj[prop];
        success = true;
      }
      if (prop in baseObj) {
        delete baseObj[prop];
        success = true;
      }
      return success;
    },
    ownKeys(_target) {
      const baseKeys = Reflect.ownKeys(baseObj);
      const extKeys = Reflect.ownKeys(extObj);
      const extKeysSet = new Set(extKeys);
      return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
    },
    defineProperty(_target, prop, desc) {
      if (prop in extObj) {
        delete extObj[prop];
      }
      Reflect.defineProperty(baseObj, prop, desc);
      return true;
    },
    getOwnPropertyDescriptor(_target, prop) {
      if (prop in extObj) {
        return Reflect.getOwnPropertyDescriptor(extObj, prop);
      } else {
        return Reflect.getOwnPropertyDescriptor(baseObj, prop);
      }
    },
    has(_target, prop) {
      return prop in extObj || prop in baseObj;
    }
  });
}

// npm/esm/deps/jsr.io/@std/fmt/1.0.10/colors.js
var { Deno } = dntGlobalThis;
var noColor = typeof Deno?.noColor === "boolean" ? Deno.noColor : false;
var enabled = !noColor;
function code(open3, close) {
  return {
    open: `\x1B[${open3.join(";")}m`,
    close: `\x1B[${close}m`,
    regexp: new RegExp(`\\x1b\\[${close}m`, "g")
  };
}
function run(str, code2) {
  return enabled ? `${code2.open}${str.replace(code2.regexp, code2.open)}${code2.close}` : str;
}
function bold(str) {
  return run(str, code([1], 22));
}
function dim(str) {
  return run(str, code([2], 22));
}
function italic(str) {
  return run(str, code([3], 23));
}
function red(str) {
  return run(str, code([31], 39));
}
function green(str) {
  return run(str, code([32], 39));
}
function yellow(str) {
  return run(str, code([33], 39));
}
function blue(str) {
  return run(str, code([34], 39));
}
function cyan(str) {
  return run(str, code([36], 39));
}
function white(str) {
  return run(str, code([37], 39));
}
function gray(str) {
  return brightBlack(str);
}
function brightBlack(str) {
  return run(str, code([90], 39));
}
var ANSI_REGEXP = new RegExp([
  "[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)",
  "(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TXZcf-nq-uy=><~]))"
].join("|"), "g");

// npm/esm/deps/jsr.io/@david/which/0.7.1/mod.js
var denoGlobal = globalThis.Deno;
var nodeProcess = globalThis.process;
var nodeFs;
function getNodeFs() {
  return nodeFs ??= nodeProcess.getBuiltinModule("node:fs");
}
var RealEnvironment = class {
  env(key) {
    if (denoGlobal?.env) {
      return denoGlobal.env.get(key);
    }
    return nodeProcess.env[key];
  }
  async stat(path6) {
    if (denoGlobal?.stat) {
      return await denoGlobal.stat(path6);
    }
    const info = await getNodeFs().promises.stat(path6);
    return { isFile: info.isFile() };
  }
  statSync(path6) {
    if (denoGlobal?.statSync) {
      return denoGlobal.statSync(path6);
    }
    const info = getNodeFs().statSync(path6);
    return { isFile: info.isFile() };
  }
  async lstat(path6) {
    if (denoGlobal?.lstat) {
      return await denoGlobal.lstat(path6);
    }
    const info = await getNodeFs().promises.lstat(path6);
    return { isFile: info.isFile(), isSymlink: info.isSymbolicLink() };
  }
  lstatSync(path6) {
    if (denoGlobal?.lstatSync) {
      return denoGlobal.lstatSync(path6);
    }
    const info = getNodeFs().lstatSync(path6);
    return { isFile: info.isFile(), isSymlink: info.isSymbolicLink() };
  }
  async readLink(path6) {
    if (denoGlobal?.readLink) {
      return await denoGlobal.readLink(path6);
    }
    return await getNodeFs().promises.readlink(path6);
  }
  readLinkSync(path6) {
    if (denoGlobal?.readLinkSync) {
      return denoGlobal.readLinkSync(path6);
    }
    return getNodeFs().readlinkSync(path6);
  }
  get isWindows() {
    if (denoGlobal?.build?.os) {
      return denoGlobal.build.os === "windows";
    }
    return nodeProcess.platform === "win32";
  }
};
async function which(command, environment = new RealEnvironment()) {
  if (commandHasPathSeparator(command, environment.isWindows)) {
    if (await pathMatches(environment, command)) {
      return command;
    }
    const pathExts = getPathExts(command, environment);
    if (pathExts == null) {
      return void 0;
    }
    for (const pathExt of pathExts) {
      const filePath = command + pathExt;
      if (await pathMatches(environment, filePath)) {
        return filePath;
      }
    }
    return void 0;
  }
  const systemInfo = getSystemInfo(command, environment);
  if (systemInfo == null) {
    return void 0;
  }
  for (const pathItem of systemInfo.pathItems) {
    const filePath = pathItem + command;
    if (systemInfo.pathExts) {
      environment.requestPermission?.(pathItem);
      for (const pathExt of systemInfo.pathExts) {
        const filePath2 = pathItem + command + pathExt;
        if (await pathMatches(environment, filePath2)) {
          return filePath2;
        }
      }
    } else if (await pathMatches(environment, filePath)) {
      return filePath;
    }
  }
  return void 0;
}
async function pathMatches(environment, path6) {
  try {
    return (await environment.stat(path6)).isFile;
  } catch (statErr) {
    if (isDenoPermissionDeniedError(statErr)) {
      throw statErr;
    }
    if (environment.isWindows && isEaccesError(statErr)) {
      return await followSymlinkChain(environment, path6);
    }
    return false;
  }
}
async function followSymlinkChain(environment, path6) {
  let current = path6;
  for (let hops = 0; hops < 40; hops++) {
    let info;
    try {
      info = await environment.lstat(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    if (info.isFile)
      return true;
    if (!info.isSymlink)
      return false;
    let target;
    try {
      target = await environment.readLink(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    current = resolveLinkTarget(current, target);
  }
  return false;
}
function whichSync(command, environment = new RealEnvironment()) {
  if (commandHasPathSeparator(command, environment.isWindows)) {
    if (pathMatchesSync(environment, command)) {
      return command;
    }
    const pathExts = getPathExts(command, environment);
    if (pathExts == null) {
      return void 0;
    }
    for (const pathExt of pathExts) {
      const filePath = command + pathExt;
      if (pathMatchesSync(environment, filePath)) {
        return filePath;
      }
    }
    return void 0;
  }
  const systemInfo = getSystemInfo(command, environment);
  if (systemInfo == null) {
    return void 0;
  }
  for (const pathItem of systemInfo.pathItems) {
    const filePath = pathItem + command;
    if (systemInfo.pathExts) {
      environment.requestPermission?.(pathItem);
      for (const pathExt of systemInfo.pathExts) {
        const filePath2 = pathItem + command + pathExt;
        if (pathMatchesSync(environment, filePath2)) {
          return filePath2;
        }
      }
    } else if (pathMatchesSync(environment, filePath)) {
      return filePath;
    }
  }
  return void 0;
}
function pathMatchesSync(environment, path6) {
  try {
    return environment.statSync(path6).isFile;
  } catch (statErr) {
    if (isDenoPermissionDeniedError(statErr)) {
      throw statErr;
    }
    if (environment.isWindows && isEaccesError(statErr)) {
      return followSymlinkChainSync(environment, path6);
    }
    return false;
  }
}
function followSymlinkChainSync(environment, path6) {
  let current = path6;
  for (let hops = 0; hops < 40; hops++) {
    let info;
    try {
      info = environment.lstatSync(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    if (info.isFile)
      return true;
    if (!info.isSymlink)
      return false;
    let target;
    try {
      target = environment.readLinkSync(current);
    } catch (err) {
      if (isDenoPermissionDeniedError(err)) {
        throw err;
      }
      return false;
    }
    current = resolveLinkTarget(current, target);
  }
  return false;
}
function resolveLinkTarget(linkPath, target) {
  if (isAbsolutePath(target)) {
    return target;
  }
  const sepIdx = Math.max(linkPath.lastIndexOf("/"), linkPath.lastIndexOf("\\"));
  const dir = sepIdx >= 0 ? linkPath.slice(0, sepIdx + 1) : "";
  return dir + target;
}
function isAbsolutePath(p) {
  if (p.startsWith("/") || p.startsWith("\\"))
    return true;
  return /^[A-Za-z]:[\\/]/.test(p);
}
function isEaccesError(err) {
  return err != null && typeof err === "object" && "code" in err && err.code === "EACCES";
}
function isDenoPermissionDeniedError(err) {
  const permissionDeniedError = denoGlobal?.errors?.PermissionDenied;
  return permissionDeniedError != null && err instanceof permissionDeniedError;
}
function getSystemInfo(command, environment) {
  const isWindows5 = environment.isWindows;
  const path6 = environment.env("PATH");
  const pathSeparator = isWindows5 ? "\\" : "/";
  if (path6 == null) {
    return void 0;
  }
  return {
    pathItems: splitEnvValue(path6, isWindows5).map((item) => normalizeDir(item, pathSeparator)),
    pathExts: getPathExts(command, environment),
    isNameMatch: isWindows5 ? (a, b) => a.toLowerCase() === b.toLowerCase() : (a, b) => a === b
  };
}
function getPathExts(command, environment) {
  if (!environment.isWindows) {
    return void 0;
  }
  const pathExtText = environment.env("PATHEXT") ?? ".EXE;.CMD;.BAT;.COM";
  const pathExts = splitEnvValue(pathExtText, true);
  const lowerCaseCommand = command.toLowerCase();
  for (const pathExt of pathExts) {
    if (lowerCaseCommand.endsWith(pathExt.toLowerCase())) {
      return void 0;
    }
  }
  return pathExts;
}
function commandHasPathSeparator(command, isWindows5) {
  return command.includes("/") || isWindows5 && command.includes("\\");
}
function splitEnvValue(value, isWindows5) {
  const envValueSeparator = isWindows5 ? ";" : ":";
  return value.split(envValueSeparator).map((item) => item.trim()).filter((item) => item.length > 0);
}
function normalizeDir(dirPath, pathSeparator) {
  if (pathSeparator === "\\" && dirPath.includes("/")) {
    dirPath = normalizeWindowsSeparators(dirPath, pathSeparator);
  }
  if (!dirPath.endsWith(pathSeparator)) {
    dirPath += pathSeparator;
  }
  return dirPath;
}
function normalizeWindowsSeparators(dirPath, pathSeparator) {
  const isUncRoot = /^[/\\]{2}/.test(dirPath);
  const head = isUncRoot ? pathSeparator + pathSeparator : "";
  const rest = isUncRoot ? dirPath.slice(2) : dirPath;
  return head + rest.replaceAll("/", pathSeparator).replace(/\\+/g, pathSeparator);
}

// npm/esm/deps/jsr.io/@david/path/0.3.2/path.js
function checkWindows() {
  const global = dntGlobalThis;
  const platform = global.process?.platform;
  if (typeof platform === "string")
    return platform.startsWith("win");
  const os = global.Deno?.build?.os;
  if (typeof os === "string")
    return os === "windows";
  return global.navigator?.platform?.startsWith("Win") ?? false;
}
var isWindows = checkWindows();
function assertPath(path6) {
  if (typeof path6 !== "string") {
    throw new TypeError(`Path must be a string, received "${JSON.stringify(path6)}"`);
  }
}
function stripSuffix(name, suffix) {
  if (suffix.length >= name.length) {
    return name;
  }
  const lenDiff = name.length - suffix.length;
  for (let i = suffix.length - 1; i >= 0; --i) {
    if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) {
      return name;
    }
  }
  return name.slice(0, -suffix.length);
}
function lastPathSegment(path6, isSep, start = 0) {
  let matchedNonSeparator = false;
  let end = path6.length;
  for (let i = path6.length - 1; i >= start; --i) {
    if (isSep(path6.charCodeAt(i))) {
      if (matchedNonSeparator) {
        start = i + 1;
        break;
      }
    } else if (!matchedNonSeparator) {
      matchedNonSeparator = true;
      end = i + 1;
    }
  }
  return path6.slice(start, end);
}
function assertArgs(path6, suffix) {
  assertPath(path6);
  if (path6.length === 0)
    return path6;
  if (typeof suffix !== "string") {
    throw new TypeError(`Suffix must be a string, received "${JSON.stringify(suffix)}"`);
  }
}
function assertArg(url) {
  url = url instanceof URL ? url : new URL(url);
  if (url.protocol !== "file:") {
    throw new TypeError(`URL must be a file URL: received "${url.protocol}"`);
  }
  return url;
}
function fromFileUrl(url) {
  url = assertArg(url);
  return decodeURIComponent(url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"));
}
function stripTrailingSeparators(segment, isSep) {
  if (segment.length <= 1) {
    return segment;
  }
  let end = segment.length;
  for (let i = segment.length - 1; i > 0; i--) {
    if (isSep(segment.charCodeAt(i))) {
      end = i;
    } else {
      break;
    }
  }
  return segment.slice(0, end);
}
var CHAR_UPPERCASE_A = 65;
var CHAR_LOWERCASE_A = 97;
var CHAR_UPPERCASE_Z = 90;
var CHAR_LOWERCASE_Z = 122;
var CHAR_DOT = 46;
var CHAR_FORWARD_SLASH = 47;
var CHAR_BACKWARD_SLASH = 92;
var CHAR_COLON = 58;
function isPosixPathSeparator(code2) {
  return code2 === CHAR_FORWARD_SLASH;
}
function basename(path6, suffix = "") {
  if (path6 instanceof URL) {
    path6 = fromFileUrl(path6);
  }
  assertArgs(path6, suffix);
  const lastSegment = lastPathSegment(path6, isPosixPathSeparator);
  const strippedSegment = stripTrailingSeparators(lastSegment, isPosixPathSeparator);
  return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
}
function isPosixPathSeparator2(code2) {
  return code2 === CHAR_FORWARD_SLASH;
}
function isPathSeparator(code2) {
  return code2 === CHAR_FORWARD_SLASH || code2 === CHAR_BACKWARD_SLASH;
}
function isWindowsDeviceRoot(code2) {
  return code2 >= CHAR_LOWERCASE_A && code2 <= CHAR_LOWERCASE_Z || code2 >= CHAR_UPPERCASE_A && code2 <= CHAR_UPPERCASE_Z;
}
function fromFileUrl2(url) {
  url = assertArg(url);
  let path6 = decodeURIComponent(url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25")).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\");
  if (url.hostname !== "") {
    path6 = `\\\\${url.hostname}${path6}`;
  }
  return path6;
}
function basename2(path6, suffix = "") {
  if (path6 instanceof URL) {
    path6 = fromFileUrl2(path6);
  }
  assertArgs(path6, suffix);
  let start = 0;
  if (path6.length >= 2) {
    const drive = path6.charCodeAt(0);
    if (isWindowsDeviceRoot(drive)) {
      if (path6.charCodeAt(1) === CHAR_COLON)
        start = 2;
    }
  }
  const lastSegment = lastPathSegment(path6, isPathSeparator, start);
  const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator);
  return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment;
}
function basename3(path6, suffix = "") {
  return isWindows ? basename2(path6, suffix) : basename(path6, suffix);
}
function assertArg2(path6) {
  assertPath(path6);
  if (path6.length === 0)
    return ".";
}
function dirname(path6) {
  if (path6 instanceof URL) {
    path6 = fromFileUrl(path6);
  }
  assertArg2(path6);
  let end = -1;
  let matchedNonSeparator = false;
  for (let i = path6.length - 1; i >= 1; --i) {
    if (isPosixPathSeparator(path6.charCodeAt(i))) {
      if (matchedNonSeparator) {
        end = i;
        break;
      }
    } else {
      matchedNonSeparator = true;
    }
  }
  if (end === -1) {
    return isPosixPathSeparator(path6.charCodeAt(0)) ? "/" : ".";
  }
  return stripTrailingSeparators(path6.slice(0, end), isPosixPathSeparator);
}
function dirname2(path6) {
  if (path6 instanceof URL) {
    path6 = fromFileUrl2(path6);
  }
  assertArg2(path6);
  const len = path6.length;
  let rootEnd = -1;
  let end = -1;
  let matchedSlash = true;
  let offset = 0;
  const code2 = path6.charCodeAt(0);
  if (len > 1) {
    if (isPathSeparator(code2)) {
      rootEnd = offset = 1;
      if (isPathSeparator(path6.charCodeAt(1))) {
        let j = 2;
        let last = j;
        for (; j < len; ++j) {
          if (isPathSeparator(path6.charCodeAt(j)))
            break;
        }
        if (j < len && j !== last) {
          last = j;
          for (; j < len; ++j) {
            if (!isPathSeparator(path6.charCodeAt(j)))
              break;
          }
          if (j < len && j !== last) {
            last = j;
            for (; j < len; ++j) {
              if (isPathSeparator(path6.charCodeAt(j)))
                break;
            }
            if (j === len) {
              return path6;
            }
            if (j !== last) {
              rootEnd = offset = j + 1;
            }
          }
        }
      }
    } else if (isWindowsDeviceRoot(code2)) {
      if (path6.charCodeAt(1) === CHAR_COLON) {
        rootEnd = offset = 2;
        if (len > 2) {
          if (isPathSeparator(path6.charCodeAt(2)))
            rootEnd = offset = 3;
        }
      }
    }
  } else if (isPathSeparator(code2)) {
    return path6;
  }
  for (let i = len - 1; i >= offset; --i) {
    if (isPathSeparator(path6.charCodeAt(i))) {
      if (!matchedSlash) {
        end = i;
        break;
      }
    } else {
      matchedSlash = false;
    }
  }
  if (end === -1) {
    if (rootEnd === -1)
      return ".";
    else
      end = rootEnd;
  }
  return stripTrailingSeparators(path6.slice(0, end), isPosixPathSeparator2);
}
function dirname3(path6) {
  return isWindows ? dirname2(path6) : dirname(path6);
}
function extname(path6) {
  if (path6 instanceof URL) {
    path6 = fromFileUrl(path6);
  }
  assertPath(path6);
  let startDot = -1;
  let startPart = 0;
  let end = -1;
  let matchedSlash = true;
  let preDotState = 0;
  for (let i = path6.length - 1; i >= 0; --i) {
    const code2 = path6.charCodeAt(i);
    if (isPosixPathSeparator(code2)) {
      if (!matchedSlash) {
        startPart = i + 1;
        break;
      }
      continue;
    }
    if (end === -1) {
      matchedSlash = false;
      end = i + 1;
    }
    if (code2 === CHAR_DOT) {
      if (startDot === -1)
        startDot = i;
      else if (preDotState !== 1)
        preDotState = 1;
    } else if (startDot !== -1) {
      preDotState = -1;
    }
  }
  if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
  preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
  preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
    return "";
  }
  return path6.slice(startDot, end);
}
function extname2(path6) {
  if (path6 instanceof URL) {
    path6 = fromFileUrl2(path6);
  }
  assertPath(path6);
  let start = 0;
  let startDot = -1;
  let startPart = 0;
  let end = -1;
  let matchedSlash = true;
  let preDotState = 0;
  if (path6.length >= 2 && path6.charCodeAt(1) === CHAR_COLON && isWindowsDeviceRoot(path6.charCodeAt(0))) {
    start = startPart = 2;
  }
  for (let i = path6.length - 1; i >= start; --i) {
    const code2 = path6.charCodeAt(i);
    if (isPathSeparator(code2)) {
      if (!matchedSlash) {
        startPart = i + 1;
        break;
      }
      continue;
    }
    if (end === -1) {
      matchedSlash = false;
      end = i + 1;
    }
    if (code2 === CHAR_DOT) {
      if (startDot === -1)
        startDot = i;
      else if (preDotState !== 1)
        preDotState = 1;
    } else if (startDot !== -1) {
      preDotState = -1;
    }
  }
  if (startDot === -1 || end === -1 || // We saw a non-dot character immediately before the dot
  preDotState === 0 || // The (right-most) trimmed path component is exactly '..'
  preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) {
    return "";
  }
  return path6.slice(startDot, end);
}
function extname3(path6) {
  return isWindows ? extname2(path6) : extname(path6);
}
function fromFileUrl3(url) {
  return isWindows ? fromFileUrl2(url) : fromFileUrl(url);
}
function isAbsolute(path6) {
  assertPath(path6);
  return path6.length > 0 && isPosixPathSeparator(path6.charCodeAt(0));
}
function isAbsolute2(path6) {
  assertPath(path6);
  const len = path6.length;
  if (len === 0)
    return false;
  const code2 = path6.charCodeAt(0);
  if (isPathSeparator(code2)) {
    return true;
  } else if (isWindowsDeviceRoot(code2)) {
    if (len > 2 && path6.charCodeAt(1) === CHAR_COLON) {
      if (isPathSeparator(path6.charCodeAt(2)))
        return true;
    }
  }
  return false;
}
function isAbsolute3(path6) {
  return isWindows ? isAbsolute2(path6) : isAbsolute(path6);
}
function assertArg4(path6) {
  assertPath(path6);
  if (path6.length === 0)
    return ".";
}
function normalizeString(path6, allowAboveRoot, separator, isPathSeparator2) {
  let res = "";
  let lastSegmentLength = 0;
  let lastSlash = -1;
  let dots = 0;
  let code2;
  for (let i = 0; i <= path6.length; ++i) {
    if (i < path6.length)
      code2 = path6.charCodeAt(i);
    else if (isPathSeparator2(code2))
      break;
    else
      code2 = CHAR_FORWARD_SLASH;
    if (isPathSeparator2(code2)) {
      if (lastSlash === i - 1 || dots === 1) {
      } else if (lastSlash !== i - 1 && dots === 2) {
        if (res.length < 2 || lastSegmentLength !== 2 || res.charCodeAt(res.length - 1) !== CHAR_DOT || res.charCodeAt(res.length - 2) !== CHAR_DOT) {
          if (res.length > 2) {
            const lastSlashIndex = res.lastIndexOf(separator);
            if (lastSlashIndex === -1) {
              res = "";
              lastSegmentLength = 0;
            } else {
              res = res.slice(0, lastSlashIndex);
              lastSegmentLength = res.length - 1 - res.lastIndexOf(separator);
            }
            lastSlash = i;
            dots = 0;
            continue;
          } else if (res.length === 2 || res.length === 1) {
            res = "";
            lastSegmentLength = 0;
            lastSlash = i;
            dots = 0;
            continue;
          }
        }
        if (allowAboveRoot) {
          if (res.length > 0)
            res += `${separator}..`;
          else
            res = "..";
          lastSegmentLength = 2;
        }
      } else {
        if (res.length > 0)
          res += separator + path6.slice(lastSlash + 1, i);
        else
          res = path6.slice(lastSlash + 1, i);
        lastSegmentLength = i - lastSlash - 1;
      }
      lastSlash = i;
      dots = 0;
    } else if (code2 === CHAR_DOT && dots !== -1) {
      ++dots;
    } else {
      dots = -1;
    }
  }
  return res;
}
function normalize(path6) {
  if (path6 instanceof URL) {
    path6 = fromFileUrl(path6);
  }
  assertArg4(path6);
  const isAbsolute42 = isPosixPathSeparator(path6.charCodeAt(0));
  const trailingSeparator = isPosixPathSeparator(path6.charCodeAt(path6.length - 1));
  path6 = normalizeString(path6, !isAbsolute42, "/", isPosixPathSeparator);
  if (path6.length === 0 && !isAbsolute42)
    path6 = ".";
  if (path6.length > 0 && trailingSeparator)
    path6 += "/";
  if (isAbsolute42)
    return `/${path6}`;
  return path6;
}
function join(path6, ...paths) {
  if (path6 === void 0)
    return ".";
  if (path6 instanceof URL) {
    path6 = fromFileUrl(path6);
  }
  paths = path6 ? [
    path6,
    ...paths
  ] : paths;
  paths.forEach((path22) => assertPath(path22));
  const joined = paths.filter((path22) => path22.length > 0).join("/");
  return joined === "" ? "." : normalize(joined);
}
function normalize2(path6) {
  if (path6 instanceof URL) {
    path6 = fromFileUrl2(path6);
  }
  assertArg4(path6);
  const len = path6.length;
  let rootEnd = 0;
  let device;
  let isAbsolute42 = false;
  const code2 = path6.charCodeAt(0);
  if (len > 1) {
    if (isPathSeparator(code2)) {
      isAbsolute42 = true;
      if (isPathSeparator(path6.charCodeAt(1))) {
        let j = 2;
        let last = j;
        for (; j < len; ++j) {
          if (isPathSeparator(path6.charCodeAt(j)))
            break;
        }
        if (j < len && j !== last) {
          const firstPart = path6.slice(last, j);
          last = j;
          for (; j < len; ++j) {
            if (!isPathSeparator(path6.charCodeAt(j)))
              break;
          }
          if (j < len && j !== last) {
            last = j;
            for (; j < len; ++j) {
              if (isPathSeparator(path6.charCodeAt(j)))
                break;
            }
            if (j === len) {
              return `\\\\${firstPart}\\${path6.slice(last)}\\`;
            } else if (j !== last) {
              device = `\\\\${firstPart}\\${path6.slice(last, j)}`;
              rootEnd = j;
            }
          }
        }
      } else {
        rootEnd = 1;
      }
    } else if (isWindowsDeviceRoot(code2)) {
      if (path6.charCodeAt(1) === CHAR_COLON) {
        device = path6.slice(0, 2);
        rootEnd = 2;
        if (len > 2) {
          if (isPathSeparator(path6.charCodeAt(2))) {
            isAbsolute42 = true;
            rootEnd = 3;
          }
        }
      }
    }
  } else if (isPathSeparator(code2)) {
    return "\\";
  }
  let tail;
  if (rootEnd < len) {
    tail = normalizeString(path6.slice(rootEnd), !isAbsolute42, "\\", isPathSeparator);
  } else {
    tail = "";
  }
  if (tail.length === 0 && !isAbsolute42)
    tail = ".";
  if (tail.length > 0 && isPathSeparator(path6.charCodeAt(len - 1))) {
    tail += "\\";
  }
  if (device === void 0) {
    if (isAbsolute42) {
      if (tail.length > 0)
        return `\\${tail}`;
      else
        return "\\";
    }
    return tail;
  } else if (isAbsolute42) {
    if (tail.length > 0)
      return `${device}\\${tail}`;
    else
      return `${device}\\`;
  }
  return device + tail;
}
function join2(path6, ...paths) {
  if (path6 instanceof URL) {
    path6 = fromFileUrl2(path6);
  }
  paths = path6 ? [
    path6,
    ...paths
  ] : paths;
  paths.forEach((path22) => assertPath(path22));
  paths = paths.filter((path22) => path22.length > 0);
  if (paths.length === 0)
    return ".";
  let needsReplace = true;
  let slashCount = 0;
  const firstPart = paths[0];
  if (isPathSeparator(firstPart.charCodeAt(0))) {
    ++slashCount;
    const firstLen = firstPart.length;
    if (firstLen > 1) {
      if (isPathSeparator(firstPart.charCodeAt(1))) {
        ++slashCount;
        if (firstLen > 2) {
          if (isPathSeparator(firstPart.charCodeAt(2)))
            ++slashCount;
          else {
            needsReplace = false;
          }
        }
      }
    }
  }
  let joined = paths.join("\\");
  if (needsReplace) {
    for (; slashCount < joined.length; ++slashCount) {
      if (!isPathSeparator(joined.charCodeAt(slashCount)))
        break;
    }
    if (slashCount >= 2)
      joined = `\\${joined.slice(slashCount)}`;
  }
  return normalize2(joined);
}
function join3(path6, ...paths) {
  return isWindows ? join2(path6, ...paths) : join(path6, ...paths);
}
function normalize3(path6) {
  return isWindows ? normalize2(path6) : normalize(path6);
}
function cwd(errorMessage) {
  const global = dntGlobalThis;
  const getCwd = global.process?.cwd ?? global.Deno?.cwd;
  if (typeof getCwd !== "function") {
    throw new TypeError(errorMessage);
  }
  return getCwd();
}
function resolve(...pathSegments) {
  let resolvedPath = "";
  let resolvedAbsolute = false;
  for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) {
    let path6;
    if (i >= 0)
      path6 = pathSegments[i];
    else {
      path6 = cwd("Resolved a relative path without a current working directory (CWD)");
    }
    assertPath(path6);
    if (path6.length === 0) {
      continue;
    }
    resolvedPath = `${path6}/${resolvedPath}`;
    resolvedAbsolute = isPosixPathSeparator(path6.charCodeAt(0));
  }
  resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute, "/", isPosixPathSeparator);
  if (resolvedAbsolute) {
    if (resolvedPath.length > 0)
      return `/${resolvedPath}`;
    else
      return "/";
  } else if (resolvedPath.length > 0)
    return resolvedPath;
  else
    return ".";
}
function assertArgs2(from, to) {
  assertPath(from);
  assertPath(to);
  if (from === to)
    return "";
}
function relative(from, to) {
  assertArgs2(from, to);
  from = resolve(from);
  to = resolve(to);
  if (from === to)
    return "";
  let fromStart = 1;
  const fromEnd = from.length;
  for (; fromStart < fromEnd; ++fromStart) {
    if (!isPosixPathSeparator(from.charCodeAt(fromStart)))
      break;
  }
  const fromLen = fromEnd - fromStart;
  let toStart = 1;
  const toEnd = to.length;
  for (; toStart < toEnd; ++toStart) {
    if (!isPosixPathSeparator(to.charCodeAt(toStart)))
      break;
  }
  const toLen = toEnd - toStart;
  const length = fromLen < toLen ? fromLen : toLen;
  let lastCommonSep = -1;
  let i = 0;
  for (; i <= length; ++i) {
    if (i === length) {
      if (toLen > length) {
        if (isPosixPathSeparator(to.charCodeAt(toStart + i))) {
          return to.slice(toStart + i + 1);
        } else if (i === 0) {
          return to.slice(toStart + i);
        }
      } else if (fromLen > length) {
        if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) {
          lastCommonSep = i;
        } else if (i === 0) {
          lastCommonSep = 0;
        }
      }
      break;
    }
    const fromCode = from.charCodeAt(fromStart + i);
    const toCode = to.charCodeAt(toStart + i);
    if (fromCode !== toCode)
      break;
    else if (isPosixPathSeparator(fromCode))
      lastCommonSep = i;
  }
  let out = "";
  for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
    if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) {
      if (out.length === 0)
        out += "..";
      else
        out += "/..";
    }
  }
  if (out.length > 0)
    return out + to.slice(toStart + lastCommonSep);
  else {
    toStart += lastCommonSep;
    if (isPosixPathSeparator(to.charCodeAt(toStart)))
      ++toStart;
    return to.slice(toStart);
  }
}
function resolve2(...pathSegments) {
  let resolvedDevice = "";
  let resolvedTail = "";
  let resolvedAbsolute = false;
  for (let i = pathSegments.length - 1; i >= -1; i--) {
    let path6;
    if (i >= 0) {
      path6 = pathSegments[i];
    } else if (!resolvedDevice) {
      path6 = cwd("Resolved a drive-letter-less path without a current working directory (CWD)");
    } else {
      path6 = cwd("Resolved a relative path without a current working directory (CWD)");
      if (path6 === void 0 || path6.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\`) {
        path6 = `${resolvedDevice}\\`;
      }
    }
    assertPath(path6);
    const len = path6.length;
    if (len === 0)
      continue;
    let rootEnd = 0;
    let device = "";
    let isAbsolute42 = false;
    const code2 = path6.charCodeAt(0);
    if (len > 1) {
      if (isPathSeparator(code2)) {
        isAbsolute42 = true;
        if (isPathSeparator(path6.charCodeAt(1))) {
          let j = 2;
          let last = j;
          for (; j < len; ++j) {
            if (isPathSeparator(path6.charCodeAt(j)))
              break;
          }
          if (j < len && j !== last) {
            const firstPart = path6.slice(last, j);
            last = j;
            for (; j < len; ++j) {
              if (!isPathSeparator(path6.charCodeAt(j)))
                break;
            }
            if (j < len && j !== last) {
              last = j;
              for (; j < len; ++j) {
                if (isPathSeparator(path6.charCodeAt(j)))
                  break;
              }
              if (j === len) {
                device = `\\\\${firstPart}\\${path6.slice(last)}`;
                rootEnd = j;
              } else if (j !== last) {
                device = `\\\\${firstPart}\\${path6.slice(last, j)}`;
                rootEnd = j;
              }
            }
          }
        } else {
          rootEnd = 1;
        }
      } else if (isWindowsDeviceRoot(code2)) {
        if (path6.charCodeAt(1) === CHAR_COLON) {
          device = path6.slice(0, 2);
          rootEnd = 2;
          if (len > 2) {
            if (isPathSeparator(path6.charCodeAt(2))) {
              isAbsolute42 = true;
              rootEnd = 3;
            }
          }
        }
      }
    } else if (isPathSeparator(code2)) {
      rootEnd = 1;
      isAbsolute42 = true;
    }
    if (device.length > 0 && resolvedDevice.length > 0 && device.toLowerCase() !== resolvedDevice.toLowerCase()) {
      continue;
    }
    if (resolvedDevice.length === 0 && device.length > 0) {
      resolvedDevice = device;
    }
    if (!resolvedAbsolute) {
      resolvedTail = `${path6.slice(rootEnd)}\\${resolvedTail}`;
      resolvedAbsolute = isAbsolute42;
    }
    if (resolvedAbsolute && resolvedDevice.length > 0)
      break;
  }
  resolvedTail = normalizeString(resolvedTail, !resolvedAbsolute, "\\", isPathSeparator);
  return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || ".";
}
function relative2(from, to) {
  assertArgs2(from, to);
  const fromOrig = resolve2(from);
  const toOrig = resolve2(to);
  if (fromOrig === toOrig)
    return "";
  from = fromOrig.toLowerCase();
  to = toOrig.toLowerCase();
  if (from === to)
    return "";
  let fromStart = 0;
  let fromEnd = from.length;
  for (; fromStart < fromEnd; ++fromStart) {
    if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH)
      break;
  }
  for (; fromEnd - 1 > fromStart; --fromEnd) {
    if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH)
      break;
  }
  const fromLen = fromEnd - fromStart;
  let toStart = 0;
  let toEnd = to.length;
  for (; toStart < toEnd; ++toStart) {
    if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH)
      break;
  }
  for (; toEnd - 1 > toStart; --toEnd) {
    if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH)
      break;
  }
  const toLen = toEnd - toStart;
  const length = fromLen < toLen ? fromLen : toLen;
  let lastCommonSep = -1;
  let i = 0;
  for (; i <= length; ++i) {
    if (i === length) {
      if (toLen > length) {
        if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) {
          return toOrig.slice(toStart + i + 1);
        } else if (i === 2) {
          return toOrig.slice(toStart + i);
        }
      }
      if (fromLen > length) {
        if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) {
          lastCommonSep = i;
        } else if (i === 2) {
          lastCommonSep = 3;
        }
      }
      break;
    }
    const fromCode = from.charCodeAt(fromStart + i);
    const toCode = to.charCodeAt(toStart + i);
    if (fromCode !== toCode)
      break;
    else if (fromCode === CHAR_BACKWARD_SLASH)
      lastCommonSep = i;
  }
  if (i !== length && lastCommonSep === -1) {
    return toOrig;
  }
  let out = "";
  if (lastCommonSep === -1)
    lastCommonSep = 0;
  for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) {
    if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) {
      if (out.length === 0)
        out += "..";
      else
        out += "\\..";
    }
  }
  if (out.length > 0) {
    return out + toOrig.slice(toStart + lastCommonSep, toEnd);
  } else {
    toStart += lastCommonSep;
    if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH)
      ++toStart;
    return toOrig.slice(toStart, toEnd);
  }
}
function relative3(from, to) {
  return isWindows ? relative2(from, to) : relative(from, to);
}
function resolve3(...pathSegments) {
  return isWindows ? resolve2(...pathSegments) : resolve(...pathSegments);
}
var WHITESPACE_ENCODINGS = {
  "	": "%09",
  "\n": "%0A",
  "\v": "%0B",
  "\f": "%0C",
  "\r": "%0D",
  " ": "%20"
};
function encodeWhitespace(string) {
  return string.replaceAll(/[\s]/g, (c) => {
    return WHITESPACE_ENCODINGS[c] ?? c;
  });
}
function toFileUrl(path6) {
  if (!isAbsolute(path6)) {
    throw new TypeError(`Path must be absolute: received "${path6}"`);
  }
  const url = new URL("file:///");
  url.pathname = encodeWhitespace(path6.replace(/%/g, "%25").replace(/\\/g, "%5C"));
  return url;
}
function toFileUrl2(path6) {
  if (!isAbsolute2(path6)) {
    throw new TypeError(`Path must be absolute: received "${path6}"`);
  }
  const [, hostname, pathname] = path6.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/);
  const url = new URL("file:///");
  url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25"));
  if (hostname !== void 0 && hostname !== "localhost") {
    url.hostname = hostname;
    if (!url.hostname) {
      throw new TypeError(`Invalid hostname: "${url.hostname}"`);
    }
  }
  return url;
}
function toFileUrl3(path6) {
  return isWindows ? toFileUrl2(path6) : toFileUrl(path6);
}

// npm/esm/deps/jsr.io/@david/path/0.3.2/_fs.js
import fs from "node:fs";
import fsPromises from "node:fs/promises";
import { dirname as dirname4, join as join4 } from "node:path";
function isNotFoundError(err) {
  return err?.code === "ENOENT";
}
function createNotFoundError(message) {
  const err = new Error(message);
  err.code = "ENOENT";
  return err;
}
function isWindows2() {
  return process.platform === "win32";
}
var FsFile = class {
  /** @internal */
  _fd;
  /** @internal */
  constructor(fd) {
    this._fd = fd;
  }
  /** Writes data to the file, resolving to the number of bytes written.
   *
   * Strings are encoded as UTF-8.
   */
  write(data) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    return new Promise((resolve8, reject) => {
      fs.write(this._fd, bytes3, 0, bytes3.length, null, (err, written) => {
        if (err)
          reject(err);
        else
          resolve8(written);
      });
    });
  }
  /** Synchronously writes data to the file, returning the number of bytes written.
   *
   * Strings are encoded as UTF-8.
   */
  writeSync(data) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    return fs.writeSync(this._fd, bytes3, 0, bytes3.length);
  }
  /** Reads into `buf`, resolving to the number of bytes read (0 at EOF). */
  read(buf) {
    return new Promise((resolve8, reject) => {
      fs.read(this._fd, buf, 0, buf.length, null, (err, bytesRead) => {
        if (err)
          reject(err);
        else
          resolve8(bytesRead);
      });
    });
  }
  /** Synchronously reads into `buf`, returning the number of bytes read (0 at EOF). */
  readSync(buf) {
    return fs.readSync(this._fd, buf, 0, buf.length, null);
  }
  /** Closes the file handle. */
  close() {
    fs.closeSync(this._fd);
  }
  /** A writable stream that writes to this file. */
  get writable() {
    const fd = this._fd;
    return new WritableStream2({
      write(chunk) {
        return new Promise((resolve8, reject) => {
          fs.write(fd, chunk, 0, chunk.length, null, (err) => {
            if (err)
              reject(err);
            else
              resolve8();
          });
        });
      }
    });
  }
  /** A readable stream that reads from this file. */
  get readable() {
    const fd = this._fd;
    return new ReadableStream2({
      pull(controller) {
        return new Promise((resolve8, reject) => {
          const buf = new Uint8Array(16384);
          fs.read(fd, buf, 0, buf.length, null, (err, bytesRead) => {
            if (err) {
              reject(err);
              return;
            }
            if (bytesRead === 0) {
              controller.close();
            } else {
              controller.enqueue(buf.subarray(0, bytesRead));
            }
            resolve8();
          });
        });
      }
    });
  }
};
function stat(path6) {
  return fsPromises.stat(path6);
}
function statSync(path6) {
  return fs.statSync(path6);
}
function lstat(path6) {
  return fsPromises.lstat(path6);
}
function lstatSync(path6) {
  return fs.lstatSync(path6);
}
function realPath(path6) {
  return fsPromises.realpath(path6);
}
function realPathSync(path6) {
  return fs.realpathSync(path6);
}
async function mkdirFn(path6, options) {
  await fsPromises.mkdir(path6, options);
}
function mkdirSyncFn(path6, options) {
  fs.mkdirSync(path6, options);
}
async function linkFn(oldPath, newPath) {
  await fsPromises.link(oldPath, newPath);
}
function linkSyncFn(oldPath, newPath) {
  fs.linkSync(oldPath, newPath);
}
async function symlinkFn(target, path6, type) {
  await fsPromises.symlink(target, path6, type?.type);
}
function symlinkSyncFn(target, path6, type) {
  fs.symlinkSync(target, path6, type?.type);
}
async function* readDir(path6) {
  const entries = await fsPromises.readdir(path6, { withFileTypes: true });
  yield* entries;
}
function* readDirSync(path6) {
  yield* fs.readdirSync(path6, { withFileTypes: true });
}
async function readFile(path6, options) {
  return new Uint8Array(await fsPromises.readFile(path6, { signal: options?.signal }));
}
function readFileSync(path6) {
  return new Uint8Array(fs.readFileSync(path6));
}
function readTextFile(path6, options) {
  return fsPromises.readFile(path6, {
    encoding: "utf8",
    signal: options?.signal
  });
}
function readTextFileSync(path6) {
  return fs.readFileSync(path6, "utf8");
}
async function chmod(path6, mode) {
  await fsPromises.chmod(path6, mode);
}
function chmodSync(path6, mode) {
  fs.chmodSync(path6, mode);
}
async function chown(path6, uid, gid) {
  await fsPromises.chown(path6, uid ?? -1, gid ?? -1);
}
function chownSync(path6, uid, gid) {
  fs.chownSync(path6, uid ?? -1, gid ?? -1);
}
function openFile(path6, options) {
  return new Promise((resolve8, reject) => {
    fs.open(path6, openOptionsToFlags(options), options?.mode, (err, fd) => {
      if (err)
        reject(err);
      else
        resolve8(new FsFile(fd));
    });
  });
}
function openFileSync(path6, options) {
  const fd = fs.openSync(path6, openOptionsToFlags(options), options?.mode);
  return new FsFile(fd);
}
function createFile(path6) {
  return openFile(path6, {
    write: true,
    create: true,
    truncate: true,
    read: true
  });
}
function createFileSync(path6) {
  return openFileSync(path6, {
    write: true,
    create: true,
    truncate: true,
    read: true
  });
}
async function remove(path6, options) {
  if (options?.recursive) {
    await fsPromises.rm(path6, { recursive: true });
    return;
  }
  const info = await fsPromises.lstat(path6);
  if (info.isDirectory()) {
    await fsPromises.rmdir(path6);
  } else {
    await fsPromises.unlink(path6);
  }
}
function removeSync(path6, options) {
  if (options?.recursive) {
    fs.rmSync(path6, { recursive: true });
    return;
  }
  const info = fs.lstatSync(path6);
  if (info.isDirectory()) {
    fs.rmdirSync(path6);
  } else {
    fs.unlinkSync(path6);
  }
}
async function copyFileFn(src, dest) {
  await fsPromises.copyFile(src, dest);
}
function copyFileSyncFn(src, dest) {
  fs.copyFileSync(src, dest);
}
async function renameFn(oldPath, newPath) {
  await fsPromises.rename(oldPath, newPath);
}
function renameSyncFn(oldPath, newPath) {
  fs.renameSync(oldPath, newPath);
}
async function ensureDir(path6) {
  await mkdirFn(path6, { recursive: true });
}
function ensureDirSync(path6) {
  mkdirSyncFn(path6, { recursive: true });
}
async function ensureFile(path6) {
  const info = await lstatOrUndefined(path6);
  if (info != null) {
    if (info.isFile())
      return;
    throw new Error(`Path '${path6}' already exists and is not a file.`);
  }
  await mkdirFn(dirname4(path6), { recursive: true });
  (await createFile(path6)).close();
}
function ensureFileSync(path6) {
  const info = lstatOrUndefinedSync(path6);
  if (info != null) {
    if (info.isFile())
      return;
    throw new Error(`Path '${path6}' already exists and is not a file.`);
  }
  mkdirSyncFn(dirname4(path6), { recursive: true });
  createFileSync(path6).close();
}
async function emptyDir(path6) {
  try {
    const entries = [];
    for await (const entry of readDir(path6)) {
      entries.push(entry);
    }
    for (const entry of entries) {
      await remove(join4(path6, entry.name), { recursive: true });
    }
  } catch (err) {
    if (!isNotFoundError(err))
      throw err;
    await mkdirFn(path6, { recursive: true });
  }
}
function emptyDirSync(path6) {
  try {
    const entries = [...readDirSync(path6)];
    for (const entry of entries) {
      removeSync(join4(path6, entry.name), { recursive: true });
    }
  } catch (err) {
    if (!isNotFoundError(err))
      throw err;
    mkdirSyncFn(path6, { recursive: true });
  }
}
async function copy(src, dest, options) {
  const overwrite = options?.overwrite ?? false;
  const srcInfo = await stat(src);
  await copyRecursive(src, dest, srcInfo, overwrite);
}
function copySync(src, dest, options) {
  const overwrite = options?.overwrite ?? false;
  const srcInfo = statSync(src);
  copyRecursiveSync(src, dest, srcInfo, overwrite);
}
async function copyRecursive(src, dest, srcInfo, overwrite) {
  let destInfo = await lstatOrUndefined(dest);
  if (destInfo != null && !overwrite) {
    throw new Error(`'${dest}' already exists.`);
  }
  if (srcInfo.isDirectory()) {
    if (destInfo != null && !destInfo.isDirectory()) {
      await remove(dest);
      destInfo = void 0;
    }
    if (destInfo == null) {
      await mkdirFn(dest, { recursive: true });
    }
    for await (const entry of readDir(src)) {
      const srcChild = join4(src, entry.name);
      const destChild = join4(dest, entry.name);
      const childInfo = await stat(srcChild);
      await copyRecursive(srcChild, destChild, childInfo, overwrite);
    }
  } else {
    if (destInfo != null && destInfo.isDirectory()) {
      throw new Error(`Cannot overwrite directory '${dest}' with file '${src}'.`);
    }
    await copyFileFn(src, dest);
  }
}
function copyRecursiveSync(src, dest, srcInfo, overwrite) {
  let destInfo = lstatOrUndefinedSync(dest);
  if (destInfo != null && !overwrite) {
    throw new Error(`'${dest}' already exists.`);
  }
  if (srcInfo.isDirectory()) {
    if (destInfo != null && !destInfo.isDirectory()) {
      removeSync(dest);
      destInfo = void 0;
    }
    if (destInfo == null) {
      mkdirSyncFn(dest, { recursive: true });
    }
    for (const entry of readDirSync(src)) {
      const srcChild = join4(src, entry.name);
      const destChild = join4(dest, entry.name);
      const childInfo = statSync(srcChild);
      copyRecursiveSync(srcChild, destChild, childInfo, overwrite);
    }
  } else {
    if (destInfo != null && destInfo.isDirectory()) {
      throw new Error(`Cannot overwrite directory '${dest}' with file '${src}'.`);
    }
    copyFileSyncFn(src, dest);
  }
}
async function lstatOrUndefined(path6) {
  try {
    return await lstat(path6);
  } catch (err) {
    if (isNotFoundError(err))
      return void 0;
    throw err;
  }
}
function lstatOrUndefinedSync(path6) {
  try {
    return lstatSync(path6);
  } catch (err) {
    if (isNotFoundError(err))
      return void 0;
    throw err;
  }
}
function openOptionsToFlags(options) {
  const C = fs.constants;
  if (!options)
    return C.O_RDONLY;
  const { read: read2, write: write2, append, truncate, create: create2, createNew } = options;
  const needsWrite = write2 || append || create2 || createNew;
  let flags;
  if (read2 && needsWrite)
    flags = C.O_RDWR;
  else if (needsWrite)
    flags = C.O_WRONLY;
  else
    flags = C.O_RDONLY;
  if (append)
    flags |= C.O_APPEND;
  if (truncate)
    flags |= C.O_TRUNC;
  if (createNew)
    flags |= C.O_CREAT | C.O_EXCL;
  else if (create2)
    flags |= C.O_CREAT;
  return flags;
}

// npm/esm/deps/jsr.io/@david/path/0.3.2/mod.js
var Path = class _Path {
  #path;
  #knownResolved = false;
  /** This is a special symbol that allows different versions of
   * `Path` API to match on `instanceof` checks. Ideally
   * people shouldn't be mixing versions, but if it happens then
   * this will maybe reduce some bugs.
   * @internal
   */
  static instanceofSymbol = Symbol.for("@david/path.Path");
  /** Creates a new path from the provided string, URL, or another Path. */
  constructor(path6) {
    if (path6 instanceof URL) {
      this.#path = fromFileUrl3(path6);
    } else if (path6 instanceof _Path) {
      this.#path = path6.toString();
    } else if (typeof path6 === "string") {
      if (path6.startsWith("file://")) {
        this.#path = fromFileUrl3(path6);
      } else {
        this.#path = path6;
      }
    } else {
      throw new Error(`Invalid path argument: ${path6}

Provide a URL, string, or another Path.`);
    }
  }
  /** @internal */
  static [Symbol.hasInstance](instance) {
    return instance?.constructor?.instanceofSymbol === _Path.instanceofSymbol;
  }
  /** @internal */
  [Symbol.for("Deno.customInspect")]() {
    return `Path("${this.#path}")`;
  }
  /** @internal */
  [Symbol.for("nodejs.util.inspect.custom")]() {
    return `Path("${this.#path}")`;
  }
  /** Gets the string representation of this path. */
  toString() {
    return this.#path;
  }
  /** Resolves the path and gets the file URL. */
  toFileUrl() {
    const resolvedPath = this.resolve();
    return toFileUrl3(resolvedPath.toString());
  }
  /** If this path reference is the same as another one. */
  equals(otherPath) {
    return this.resolve().toString() === otherPath.resolve().toString();
  }
  /** Follows symlinks and gets if this path is a directory. */
  isDirSync() {
    return this.statSync()?.isDirectory() ?? false;
  }
  /** Follows symlinks and gets if this path is a file. */
  isFileSync() {
    return this.statSync()?.isFile() ?? false;
  }
  /** Gets if this path is a symlink. */
  isSymlinkSync() {
    return this.lstatSync()?.isSymbolicLink() ?? false;
  }
  /** Gets if this path is an absolute path. */
  isAbsolute() {
    return isAbsolute3(this.#path);
  }
  /** Gets if this path is relative. */
  isRelative() {
    return !this.isAbsolute();
  }
  /** Joins the provided path segments onto this path. */
  join(...pathSegments) {
    return new _Path(join3(this.#path, ...pathSegments));
  }
  /** Resolves this path to an absolute path along with the provided path segments. */
  resolve(...pathSegments) {
    if (this.#knownResolved && pathSegments.length === 0) {
      return this;
    }
    const resolvedPath = resolve3(this.#path, ...pathSegments);
    if (pathSegments.length === 0 && resolvedPath === this.#path) {
      this.#knownResolved = true;
      return this;
    } else {
      const pathRef = new _Path(resolvedPath);
      pathRef.#knownResolved = true;
      return pathRef;
    }
  }
  /**
   * Normalizes the `path`, resolving `'..'` and `'.'` segments.
   * Note that resolving these segments does not necessarily mean that all will be eliminated.
   * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`.
   */
  normalize() {
    return new _Path(normalize3(this.#path));
  }
  /** Resolves the file info of this path following symlinks. */
  async stat() {
    try {
      return await stat(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /** Synchronously resolves the file info of this path following symlinks. */
  statSync() {
    try {
      return statSync(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /** Resolves the file info of this path without following symlinks. */
  async lstat() {
    try {
      return await lstat(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /** Synchronously resolves the file info of this path without following symlinks. */
  lstatSync() {
    try {
      return lstatSync(this.#path);
    } catch (err) {
      if (isNotFoundError(err)) {
        return void 0;
      } else {
        throw err;
      }
    }
  }
  /**
   * Gets the directory path. In most cases, it is recommended
   * to use `.parent()` instead since it will give you a `PathRef`.
   */
  dirname() {
    return dirname3(this.#path);
  }
  /** Gets the file or directory name of the path. */
  basename() {
    return basename3(this.#path);
  }
  /** Resolves the path getting all its ancestor directories in order. */
  *ancestors() {
    let ancestor = this.parent();
    while (ancestor != null) {
      yield ancestor;
      ancestor = ancestor.parent();
    }
  }
  /** Iterates over the components of a path. */
  *components() {
    const path6 = this.normalize();
    let last_index = 0;
    if (path6.#path.startsWith("\\\\?\\")) {
      last_index = nextSlash(path6.#path, 4);
      if (last_index === -1) {
        yield path6.#path;
        return;
      } else {
        yield path6.#path.substring(0, last_index);
        last_index += 1;
      }
    } else if (path6.#path.startsWith("/")) {
      last_index += 1;
    }
    while (true) {
      const index = nextSlash(path6.#path, last_index);
      if (index < 0) {
        const part = path6.#path.substring(last_index);
        if (part.length > 0) {
          yield part;
        }
        return;
      }
      yield path6.#path.substring(last_index, index);
      last_index = index + 1;
    }
    function nextSlash(path7, start) {
      for (let i = start; i < path7.length; i++) {
        const c = path7.charCodeAt(i);
        if (c === 47 || c === 92) {
          return i;
        }
      }
      return -1;
    }
  }
  // This is private because this doesn't handle stuff like `\\?\` at the start
  // so it's only used internally with #endsWith for perf. API consumers should
  // use .components()
  *#rcomponents() {
    const path6 = this.normalize();
    let last_index = void 0;
    while (last_index == null || last_index > 0) {
      const index = nextSlash(path6.#path, last_index == null ? void 0 : last_index - 1);
      if (index < 0) {
        const part2 = path6.#path.substring(0, last_index);
        if (part2.length > 0) {
          yield part2;
        }
        return;
      }
      const part = path6.#path.substring(index + 1, last_index);
      if (last_index != null || part.length > 0) {
        yield part;
      }
      last_index = index;
    }
    function nextSlash(path7, start) {
      for (let i = start ?? path7.length - 1; i >= 0; i--) {
        const c = path7.charCodeAt(i);
        if (c === 47 || c === 92) {
          return i;
        }
      }
      return -1;
    }
  }
  /** Gets if the provided path starts with the specified Path, URL, or string.
   *
   * This verifies based on matching the components.
   *
   * ```
   * assert(new Path("/a/b/c").startsWith("/a/b"));
   * assert(!new Path("/example").endsWith("/exam"));
   * ```
   */
  startsWith(path6) {
    const startsWithComponents = ensurePath(path6).components();
    for (const component of this.components()) {
      const next = startsWithComponents.next();
      if (next.done) {
        return true;
      }
      if (next.value !== component) {
        return false;
      }
    }
    return startsWithComponents.next().done ?? true;
  }
  /** Gets if the provided path ends with the specified Path, URL, or string.
   *
   * This verifies based on matching the components.
   *
   * ```
   * assert(new Path("/a/b/c").endsWith("b/c"));
   * assert(!new Path("/a/b/example").endsWith("ple"));
   * ```
   */
  endsWith(path6) {
    const endsWithComponents = ensurePath(path6).#rcomponents();
    for (const component of this.#rcomponents()) {
      const next = endsWithComponents.next();
      if (next.done) {
        return true;
      }
      if (next.value !== component) {
        return false;
      }
    }
    return endsWithComponents.next().done ?? true;
  }
  /** Gets the parent directory or returns undefined if the parent is the root directory. */
  parent() {
    const resolvedPath = this.resolve();
    const dirname6 = resolvedPath.dirname();
    if (dirname6 === resolvedPath.#path) {
      return void 0;
    } else {
      return new _Path(dirname6);
    }
  }
  /** Gets the parent or throws if the current directory was the root. */
  parentOrThrow() {
    const parent = this.parent();
    if (parent == null) {
      throw new Error(`Cannot get the parent directory of '${this.#path}'.`);
    }
    return parent;
  }
  /**
   * Returns the extension of the path with leading period or undefined
   * if there is no extension.
   */
  extname() {
    const extName = extname3(this.#path);
    return extName.length === 0 ? void 0 : extName;
  }
  /** Gets a new path reference with the provided extension. */
  withExtname(ext) {
    const currentExt = this.extname();
    const hasLeadingPeriod = ext.charCodeAt(0) === /* period */
    46;
    if (!hasLeadingPeriod && ext.length !== 0) {
      ext = "." + ext;
    }
    return new _Path(this.#path.substring(0, this.#path.length - (currentExt?.length ?? 0)) + ext);
  }
  /** Gets a new path reference with the provided file or directory name. */
  withBasename(basename5) {
    const currentBaseName = this.basename();
    return new _Path(this.#path.substring(0, this.#path.length - currentBaseName.length) + basename5);
  }
  /** Gets the relative path from this path to the specified path. */
  relative(to) {
    const toPathRef = ensurePath(to);
    return relative3(this.resolve().#path, toPathRef.resolve().toString());
  }
  /** Gets if the path exists. Beware of TOCTOU issues. */
  exists() {
    return this.lstat().then((info) => info != null);
  }
  /** Synchronously gets if the path exists. Beware of TOCTOU issues. */
  existsSync() {
    return this.lstatSync() != null;
  }
  /** Resolves to the absolute normalized path, with symbolic links resolved. */
  realPath() {
    return realPath(this.#path).then((path6) => new _Path(path6));
  }
  /** Synchronously resolves to the absolute normalized path, with symbolic links resolved. */
  realPathSync() {
    return new _Path(realPathSync(this.#path));
  }
  /** Creates a directory at this path.
   * @remarks By default, this is recursive.
   */
  async mkdir(options) {
    await mkdirFn(this.#path, {
      recursive: true,
      ...options
    });
    return this;
  }
  /** Synchronously creates a directory at this path.
   * @remarks By default, this is recursive.
   */
  mkdirSync(options) {
    mkdirSyncFn(this.#path, {
      recursive: true,
      ...options
    });
    return this;
  }
  async symlinkTo(target, opts) {
    await createSymlink(this.#resolveCreateSymlinkOpts(target, opts));
  }
  symlinkToSync(target, opts) {
    createSymlinkSync(this.#resolveCreateSymlinkOpts(target, opts));
  }
  #resolveCreateSymlinkOpts(target, opts) {
    if (opts?.kind == null) {
      if (typeof target === "string") {
        return {
          fromPath: this.resolve(),
          targetPath: ensurePath(target),
          text: target,
          type: opts?.type
        };
      } else {
        throw new Error("Please specify if this symlink is absolute or relative. Otherwise provide the target text.");
      }
    }
    const targetPath = ensurePath(target).resolve();
    if (opts?.kind === "relative") {
      const fromPath = this.resolve();
      const relativePath = fromPath.parentOrThrow().relative(targetPath);
      return {
        fromPath,
        targetPath,
        text: relativePath,
        type: opts?.type
      };
    } else {
      return {
        fromPath: this.resolve(),
        targetPath,
        text: targetPath.toString(),
        type: opts?.type
      };
    }
  }
  /**
   * Creates a hardlink to the provided target path.
   */
  async linkTo(targetPath) {
    const targetPathRef = ensurePath(targetPath).resolve();
    await linkFn(targetPathRef.toString(), this.resolve().toString());
  }
  /**
   * Synchronously creates a hardlink to the provided target path.
   */
  linkToSync(targetPath) {
    const targetPathRef = ensurePath(targetPath).resolve();
    linkSyncFn(targetPathRef.toString(), this.resolve().toString());
  }
  /** Reads the entries in the directory. */
  async *readDir() {
    const dir = this.resolve();
    for await (const entry of readDir(dir.#path)) {
      const out = entry;
      out.path = dir.join(entry.name);
      yield out;
    }
  }
  /** Synchronously reads the entries in the directory. */
  *readDirSync() {
    const dir = this.resolve();
    for (const entry of readDirSync(dir.#path)) {
      const out = entry;
      out.path = dir.join(entry.name);
      yield out;
    }
  }
  /** Reads only the directory file paths, not including symlinks. */
  async *readDirFilePaths() {
    const dir = this.resolve();
    for await (const entry of readDir(dir.#path)) {
      if (entry.isFile()) {
        yield dir.join(entry.name);
      }
    }
  }
  /** Synchronously reads only the directory file paths, not including symlinks. */
  *readDirFilePathsSync() {
    const dir = this.resolve();
    for (const entry of readDirSync(dir.#path)) {
      if (entry.isFile()) {
        yield dir.join(entry.name);
      }
    }
  }
  /** Reads the bytes from the file. */
  readBytes(options) {
    return readFile(this.#path, options);
  }
  /** Synchronously reads the bytes from the file. */
  readBytesSync() {
    return readFileSync(this.#path);
  }
  /** Calls `.readBytes()`, but returns undefined if the path doesn't exist. */
  readMaybeBytes(options) {
    return notFoundToUndefined(() => this.readBytes(options));
  }
  /** Calls `.readBytesSync()`, but returns undefined if the path doesn't exist. */
  readMaybeBytesSync() {
    return notFoundToUndefinedSync(() => this.readBytesSync());
  }
  /** Reads the text from the file. */
  readText(options) {
    return readTextFile(this.#path, options);
  }
  /** Synchronously reads the text from the file. */
  readTextSync() {
    return readTextFileSync(this.#path);
  }
  /** Calls `.readText()`, but returns undefined when the path doesn't exist.
   * @remarks This still errors for other kinds of errors reading a file.
   */
  readMaybeText(options) {
    return notFoundToUndefined(() => this.readText(options));
  }
  /** Calls `.readTextSync()`, but returns undefined when the path doesn't exist.
   * @remarks This still errors for other kinds of errors reading a file.
   */
  readMaybeTextSync() {
    return notFoundToUndefinedSync(() => this.readTextSync());
  }
  /** Reads the file's text and returns an array of its lines.
   *
   * Lines are split at `\n` or `\r\n`. Line terminators are not included.
   * A trailing blank line caused by a final line ending is excluded (matches
   * [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)).
   */
  async lines(options) {
    return [...splitLines(await this.readText(options))];
  }
  /** Synchronously reads the file's text and returns an array of its lines.
   *
   * See `.lines()` for the splitting semantics.
   */
  linesSync() {
    return [...splitLines(this.readTextSync())];
  }
  /** Streams the file and iterates over its lines without loading it all into memory.
   *
   * See `.lines()` for the splitting semantics.
   */
  async *linesIter(options) {
    const file = await openFile(this.#path, { read: true });
    try {
      const decoder2 = new TextDecoder2();
      const chunk = new Uint8Array(16384);
      let buffer = "";
      while (true) {
        options?.signal?.throwIfAborted();
        const n = await file.read(chunk);
        if (n === 0)
          break;
        buffer += decoder2.decode(chunk.subarray(0, n), { stream: true });
        let start = 0;
        while (true) {
          const nl = buffer.indexOf("\n", start);
          if (nl === -1)
            break;
          const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
          yield buffer.substring(start, end);
          start = nl + 1;
        }
        if (start > 0)
          buffer = buffer.substring(start);
      }
      buffer += decoder2.decode();
      if (buffer !== "")
        yield buffer;
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Synchronously streams the file and iterates over its lines without
   * loading it all into memory.
   *
   * See `.lines()` for the splitting semantics.
   */
  *linesIterSync() {
    const file = openFileSync(this.#path, { read: true });
    try {
      const decoder2 = new TextDecoder2();
      const chunk = new Uint8Array(16384);
      let buffer = "";
      while (true) {
        const n = file.readSync(chunk);
        if (n === 0)
          break;
        buffer += decoder2.decode(chunk.subarray(0, n), { stream: true });
        let start = 0;
        while (true) {
          const nl = buffer.indexOf("\n", start);
          if (nl === -1)
            break;
          const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
          yield buffer.substring(start, end);
          start = nl + 1;
        }
        if (start > 0)
          buffer = buffer.substring(start);
      }
      buffer += decoder2.decode();
      if (buffer !== "")
        yield buffer;
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Reads and parses the file as JSON, throwing if it doesn't exist or is not valid JSON. */
  async readJson(options) {
    return this.#parseJson(await this.readText(options));
  }
  /** Synchronously reads and parses the file as JSON, throwing if it doesn't
   * exist or is not valid JSON. */
  readJsonSync() {
    return this.#parseJson(this.readTextSync());
  }
  #parseJson(text) {
    try {
      return JSON.parse(text);
    } catch (err) {
      throw new Error(`Failed parsing JSON in '${this.toString()}'.`, {
        cause: err
      });
    }
  }
  /**
   * Calls `.readJson()`, but returns undefined if the file doesn't exist.
   * @remarks This method will still throw if the file cannot be parsed as JSON.
   */
  readMaybeJson(options) {
    return notFoundToUndefined(() => this.readJson(options));
  }
  /**
   * Calls `.readJsonSync()`, but returns undefined if the file doesn't exist.
   * @remarks This method will still throw if the file cannot be parsed as JSON.
   */
  readMaybeJsonSync() {
    return notFoundToUndefinedSync(() => this.readJsonSync());
  }
  /** Writes out the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  async write(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    await this.#withFileForWriting(options, (file) => {
      return writeAll(file, bytes3, options?.signal);
    });
    return this;
  }
  /** Synchronously writes out the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  writeSync(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    this.#withFileForWritingSync(options, (file) => {
      writeAllSync(file, bytes3, options?.signal);
    });
    return this;
  }
  /** Writes the provided text to the file.
   * @deprecated Use `.write(text)` instead — `write` now accepts strings.
   */
  writeText(text, options) {
    return this.write(text, options);
  }
  /** Synchronously writes the provided text to the file.
   * @deprecated Use `.writeSync(text)` instead — `writeSync` now accepts strings.
   */
  writeTextSync(text, options) {
    return this.writeSync(text, options);
  }
  /** Writes out the provided object as compact JSON. */
  async writeJson(obj, options) {
    await this.write(JSON.stringify(obj) + "\n", options);
    return this;
  }
  /** Synchronously writes out the provided object as compact JSON. */
  writeJsonSync(obj, options) {
    this.writeSync(JSON.stringify(obj) + "\n", options);
    return this;
  }
  /** Writes out the provided object as formatted JSON. */
  async writeJsonPretty(obj, options) {
    await this.write(JSON.stringify(obj, void 0, 2) + "\n", options);
    return this;
  }
  /** Synchronously writes out the provided object as formatted JSON. */
  writeJsonPrettySync(obj, options) {
    this.writeSync(JSON.stringify(obj, void 0, 2) + "\n", options);
    return this;
  }
  /** Appends the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  async append(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    await this.#withFileForAppending(options, (file) => writeAll(file, bytes3, options?.signal));
    return this;
  }
  /** Synchronously appends the provided bytes or text to the file.
   *
   * Strings are encoded as UTF-8.
   */
  appendSync(data, options) {
    const bytes3 = typeof data === "string" ? new TextEncoder().encode(data) : data;
    this.#withFileForAppendingSync(options, (file) => {
      writeAllSync(file, bytes3, options?.signal);
    });
    return this;
  }
  #withFileForAppending(options, action) {
    return this.#withFileForWriting({
      append: true,
      ...options
    }, action);
  }
  async #withFileForWriting(options, action) {
    const file = await this.#openFileMaybeCreatingDirectory({
      write: true,
      create: true,
      truncate: options?.append !== true,
      ...options
    });
    try {
      return await action(file);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Opens a file, but handles if the directory does not exist. */
  async #openFileMaybeCreatingDirectory(options) {
    const resolvedPath = this.resolve();
    try {
      return await resolvedPath.open(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        const parent = resolvedPath.parent();
        if (parent != null) {
          try {
            await parent.mkdir();
          } catch {
            throw err;
          }
        }
        return await resolvedPath.open(options);
      } else {
        throw err;
      }
    }
  }
  #withFileForAppendingSync(options, action) {
    return this.#withFileForWritingSync({
      append: true,
      ...options
    }, action);
  }
  #withFileForWritingSync(options, action) {
    const file = this.#openFileForWritingSync(options);
    try {
      return action(file);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  }
  /** Opens a file for writing, but handles if the directory does not exist. */
  #openFileForWritingSync(options) {
    return this.#openFileMaybeCreatingDirectorySync({
      write: true,
      create: true,
      truncate: options?.append !== true,
      ...options
    });
  }
  /** Opens a file for writing, but handles if the directory does not exist. */
  #openFileMaybeCreatingDirectorySync(options) {
    try {
      return this.openSync(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        const parent = this.resolve().parent();
        if (parent != null) {
          try {
            parent.mkdirSync();
          } catch {
            throw err;
          }
        }
        return this.openSync(options);
      } else {
        throw err;
      }
    }
  }
  /** Changes the permissions of the file or directory. */
  async chmod(mode) {
    await chmod(this.#path, mode);
    return this;
  }
  /** Synchronously changes the permissions of the file or directory. */
  chmodSync(mode) {
    chmodSync(this.#path, mode);
    return this;
  }
  /** Changes the ownership permissions of the file. */
  async chown(uid, gid) {
    await chown(this.#path, uid, gid);
    return this;
  }
  /** Synchronously changes the ownership permissions of the file. */
  chownSync(uid, gid) {
    chownSync(this.#path, uid, gid);
    return this;
  }
  /** Creates a new file or opens the existing one. */
  create() {
    return createFile(this.#path).then((file) => createFsFileWrapper(file));
  }
  /** Synchronously creates a new file or opens the existing one. */
  createSync() {
    return createFsFileWrapper(createFileSync(this.#path));
  }
  /** Creates a file throwing if a file previously existed. */
  createNew() {
    return this.open({
      createNew: true,
      read: true,
      write: true
    });
  }
  /** Synchronously creates a file throwing if a file previously existed. */
  createNewSync() {
    return this.openSync({
      createNew: true,
      read: true,
      write: true
    });
  }
  /** Opens a file. */
  open(options) {
    return openFile(this.#path, options).then((file) => createFsFileWrapper(file));
  }
  /** Opens a file synchronously. */
  openSync(options) {
    return createFsFileWrapper(openFileSync(this.#path, options));
  }
  /** Removes the file or directory from the file system. */
  async remove(options) {
    await remove(this.#path, options);
    return this;
  }
  /** Removes the file or directory from the file system synchronously. */
  removeSync(options) {
    removeSync(this.#path, options);
    return this;
  }
  /** Removes the file or directory from the file system, but doesn't throw
   * when the file doesn't exist.
   */
  async ensureRemove(options) {
    try {
      return await this.remove(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        return this;
      } else {
        throw err;
      }
    }
  }
  /** Removes the file or directory from the file system, but doesn't throw
   * when the file doesn't exist.
   */
  ensureRemoveSync(options) {
    try {
      return this.removeSync(options);
    } catch (err) {
      if (isNotFoundError(err)) {
        return this;
      } else {
        throw err;
      }
    }
  }
  /**
   * Ensures that a directory is empty.
   * Deletes directory contents if the directory is not empty.
   * If the directory does not exist, it is created.
   * The directory itself is not deleted.
   */
  async emptyDir() {
    await emptyDir(this.toString());
    return this;
  }
  /** Synchronous version of `emptyDir()` */
  emptyDirSync() {
    emptyDirSync(this.toString());
    return this;
  }
  /** Ensures that the directory exists.
   * If the directory structure does not exist, it is created. Like mkdir -p.
   */
  async ensureDir() {
    await ensureDir(this.toString());
    return this;
  }
  /** Synchronously ensures that the directory exists.
   * If the directory structure does not exist, it is created. Like mkdir -p.
   */
  ensureDirSync() {
    ensureDirSync(this.toString());
    return this;
  }
  /**
   * Ensures that the file exists.
   * If the file that is requested to be created is in directories that do
   * not exist these directories are created. If the file already exists,
   * it is NOTMODIFIED.
   */
  async ensureFile() {
    await ensureFile(this.toString());
    return this;
  }
  /**
   * Synchronously ensures that the file exists.
   * If the file that is requested to be created is in directories that do
   * not exist these directories are created. If the file already exists,
   * it is NOTMODIFIED.
   */
  ensureFileSync() {
    ensureFileSync(this.toString());
    return this;
  }
  /** Copies a file or directory to the provided destination.
   * @returns The destination path.
   */
  async copy(destinationPath, options) {
    const pathRef = ensurePath(destinationPath);
    await copy(this.#path, pathRef.toString(), options);
    return pathRef;
  }
  /** Copies a file or directory to the provided destination synchronously.
   * @returns The destination path.
   */
  copySync(destinationPath, options) {
    const pathRef = ensurePath(destinationPath);
    copySync(this.#path, pathRef.toString(), options);
    return pathRef;
  }
  /**
   * Copies the file or directory to the specified directory.
   * @returns The destination path.
   */
  copyToDir(destinationDirPath, options) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copy(destinationPath, options);
  }
  /**
   * Copies the file or directory to the specified directory synchronously.
   * @returns The destination path.
   */
  copyToDirSync(destinationDirPath, options) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copySync(destinationPath, options);
  }
  /**
   * Copies the file to the specified destination path.
   * @returns The destination path.
   */
  copyFile(destinationPath) {
    const pathRef = ensurePath(destinationPath);
    return copyFileFn(this.#path, pathRef.toString()).then(() => pathRef);
  }
  /**
   * Copies the file to the destination path synchronously.
   * @returns The destination path.
   */
  copyFileSync(destinationPath) {
    const pathRef = ensurePath(destinationPath);
    copyFileSyncFn(this.#path, pathRef.toString());
    return pathRef;
  }
  /**
   * Copies the file to the specified directory.
   * @returns The destination path.
   */
  copyFileToDir(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copyFile(destinationPath);
  }
  /**
   * Copies the file to the specified directory synchronously.
   * @returns The destination path.
   */
  copyFileToDirSync(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.copyFileSync(destinationPath);
  }
  /**
   * Moves the file or directory returning a promise that resolves to
   * the renamed path.
   * @returns The destination path.
   */
  rename(newPath) {
    const pathRef = ensurePath(newPath);
    return renameFn(this.#path, pathRef.toString()).then(() => pathRef);
  }
  /**
   * Moves the file or directory returning the renamed path synchronously.
   * @returns The destination path.
   */
  renameSync(newPath) {
    const pathRef = ensurePath(newPath);
    renameSyncFn(this.#path, pathRef.toString());
    return pathRef;
  }
  /**
   * Moves the file or directory to the specified directory.
   * @returns The destination path.
   */
  renameToDir(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.rename(destinationPath);
  }
  /**
   * Moves the file or directory to the specified directory synchronously.
   * @returns The destination path.
   */
  renameToDirSync(destinationDirPath) {
    const destinationPath = ensurePath(destinationDirPath).join(this.basename());
    return this.renameSync(destinationPath);
  }
  /** Opens the file and pipes it to the writable stream. */
  async pipeTo(dest, options) {
    const file = await openFile(this.#path, { read: true });
    try {
      await file.readable.pipeTo(dest, options);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
    return this;
  }
};
function ensurePath(path6) {
  return path6 instanceof Path ? path6 : new Path(path6);
}
function createFsFileWrapper(file) {
  Object.setPrototypeOf(file, FsFileWrapper.prototype);
  return file;
}
var FsFileWrapper = class extends FsFile {
  /** Writes the provided text to this file, looping to handle partial writes. */
  writeText(text) {
    return this.writeBytes(new TextEncoder().encode(text));
  }
  /** Synchronously writes the provided text to this file, looping to handle partial writes. */
  writeTextSync(text) {
    return this.writeBytesSync(new TextEncoder().encode(text));
  }
  /** Writes all the provided bytes to this file, looping to handle partial writes. */
  async writeBytes(bytes3) {
    let nwritten = 0;
    while (nwritten < bytes3.length) {
      nwritten += await this.write(bytes3.subarray(nwritten));
    }
    return this;
  }
  /** Synchronously writes all the provided bytes to this file, looping to handle partial writes. */
  writeBytesSync(bytes3) {
    let nwritten = 0;
    while (nwritten < bytes3.length) {
      nwritten += this.writeSync(bytes3.subarray(nwritten));
    }
    return this;
  }
  /** Writes all the provided data to this file, dispatching to `.writeText` or `.writeBytes` based on input type. */
  writeAll(data) {
    return typeof data === "string" ? this.writeText(data) : this.writeBytes(data);
  }
  /** Synchronously writes all the provided data to this file, dispatching to `.writeTextSync` or `.writeBytesSync` based on input type. */
  writeAllSync(data) {
    return typeof data === "string" ? this.writeTextSync(data) : this.writeBytesSync(data);
  }
};
async function createSymlink(opts) {
  let kind = opts.type;
  if (kind == null && isWindows2()) {
    const info = await opts.targetPath.lstat();
    if (info?.isDirectory()) {
      kind = "dir";
    } else if (info?.isFile()) {
      kind = "file";
    } else {
      throw createNotFoundError(`The target path '${opts.targetPath}' did not exist or path kind could not be determined. When the path doesn't exist, you need to specify a symlink type on Windows.`);
    }
  }
  await symlinkFn(opts.text, opts.fromPath.toString(), kind == null ? void 0 : {
    type: kind
  });
}
function createSymlinkSync(opts) {
  let kind = opts.type;
  if (kind == null && isWindows2()) {
    const info = opts.targetPath.lstatSync();
    if (info?.isDirectory()) {
      kind = "dir";
    } else if (info?.isFile()) {
      kind = "file";
    } else {
      throw createNotFoundError(`The target path '${opts.targetPath}' did not exist or path kind could not be determined. When the path doesn't exist, you need to specify a symlink type on Windows.`);
    }
  }
  symlinkSyncFn(opts.text, opts.fromPath.toString(), kind == null ? void 0 : {
    type: kind
  });
}
async function notFoundToUndefined(action) {
  try {
    return await action();
  } catch (err) {
    if (isNotFoundError(err)) {
      return void 0;
    } else {
      throw err;
    }
  }
}
function notFoundToUndefinedSync(action) {
  try {
    return action();
  } catch (err) {
    if (isNotFoundError(err)) {
      return void 0;
    } else {
      throw err;
    }
  }
}
async function writeAll(writer, data, signal) {
  let nwritten = 0;
  while (nwritten < data.length) {
    signal?.throwIfAborted();
    nwritten += await writer.write(data.subarray(nwritten));
  }
}
function writeAllSync(writer, data, signal) {
  let nwritten = 0;
  while (nwritten < data.length) {
    signal?.throwIfAborted();
    nwritten += writer.writeSync(data.subarray(nwritten));
  }
}
function* splitLines(text) {
  if (text === "")
    return;
  let start = 0;
  while (true) {
    const nl = text.indexOf("\n", start);
    if (nl === -1) {
      if (start < text.length)
        yield text.substring(start);
      return;
    }
    const end = nl > start && text.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
    yield text.substring(start, end);
    start = nl + 1;
    if (start === text.length)
      return;
  }
}

// npm/esm/deps/jsr.io/@david/console-static-text/0.3.4/lib/rs_lib.internal.js
var rs_lib_internal_exports = {};
__export(rs_lib_internal_exports, {
  StaticTextContainer: () => StaticTextContainer,
  __wbg_buffer_609cc3eee51ed158: () => __wbg_buffer_609cc3eee51ed158,
  __wbg_call_672a4d21634d4a24: () => __wbg_call_672a4d21634d4a24,
  __wbg_done_769e5ede4b31c67b: () => __wbg_done_769e5ede4b31c67b,
  __wbg_entries_3265d4158b33e5dc: () => __wbg_entries_3265d4158b33e5dc,
  __wbg_get_67b2ba62fc30de12: () => __wbg_get_67b2ba62fc30de12,
  __wbg_get_b9b93047fe3cf45b: () => __wbg_get_b9b93047fe3cf45b,
  __wbg_instanceof_ArrayBuffer_e14585432e3737fc: () => __wbg_instanceof_ArrayBuffer_e14585432e3737fc,
  __wbg_instanceof_Map_f3469ce2244d2430: () => __wbg_instanceof_Map_f3469ce2244d2430,
  __wbg_instanceof_Uint8Array_17156bcf118086a9: () => __wbg_instanceof_Uint8Array_17156bcf118086a9,
  __wbg_isArray_a1eab7e0d067391b: () => __wbg_isArray_a1eab7e0d067391b,
  __wbg_isSafeInteger_343e2beeeece1bb0: () => __wbg_isSafeInteger_343e2beeeece1bb0,
  __wbg_iterator_9a24c88df860dc65: () => __wbg_iterator_9a24c88df860dc65,
  __wbg_length_a446193dc22c12f8: () => __wbg_length_a446193dc22c12f8,
  __wbg_length_e2d2a49132c1b256: () => __wbg_length_e2d2a49132c1b256,
  __wbg_new_a12002a7f91c75be: () => __wbg_new_a12002a7f91c75be,
  __wbg_next_25feadfc0913fea9: () => __wbg_next_25feadfc0913fea9,
  __wbg_next_6574e1a8a62d1055: () => __wbg_next_6574e1a8a62d1055,
  __wbg_set_65595bdd868b3009: () => __wbg_set_65595bdd868b3009,
  __wbg_set_wasm: () => __wbg_set_wasm,
  __wbg_value_cd1ffa7b1ab794f1: () => __wbg_value_cd1ffa7b1ab794f1,
  __wbindgen_bigint_from_i64: () => __wbindgen_bigint_from_i64,
  __wbindgen_bigint_from_u64: () => __wbindgen_bigint_from_u64,
  __wbindgen_bigint_get_as_i64: () => __wbindgen_bigint_get_as_i64,
  __wbindgen_boolean_get: () => __wbindgen_boolean_get,
  __wbindgen_debug_string: () => __wbindgen_debug_string,
  __wbindgen_error_new: () => __wbindgen_error_new,
  __wbindgen_in: () => __wbindgen_in,
  __wbindgen_init_externref_table: () => __wbindgen_init_externref_table,
  __wbindgen_is_bigint: () => __wbindgen_is_bigint,
  __wbindgen_is_function: () => __wbindgen_is_function,
  __wbindgen_is_object: () => __wbindgen_is_object,
  __wbindgen_jsval_eq: () => __wbindgen_jsval_eq,
  __wbindgen_jsval_loose_eq: () => __wbindgen_jsval_loose_eq,
  __wbindgen_memory: () => __wbindgen_memory,
  __wbindgen_number_get: () => __wbindgen_number_get,
  __wbindgen_string_get: () => __wbindgen_string_get,
  __wbindgen_throw: () => __wbindgen_throw,
  static_text_render_once: () => static_text_render_once,
  strip_ansi_codes: () => strip_ansi_codes
});
var wasm;
function __wbg_set_wasm(val) {
  wasm = val;
}
function addToExternrefTable0(obj) {
  const idx = wasm.__externref_table_alloc();
  wasm.__wbindgen_export_2.set(idx, obj);
  return idx;
}
function handleError(f, args) {
  try {
    return f.apply(this, args);
  } catch (e) {
    const idx = addToExternrefTable0(e);
    wasm.__wbindgen_exn_store(idx);
  }
}
function isLikeNone(x) {
  return x === void 0 || x === null;
}
var cachedDataViewMemory0 = null;
function getDataViewMemory0() {
  if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || cachedDataViewMemory0.buffer.detached === void 0 && cachedDataViewMemory0.buffer !== wasm.memory.buffer) {
    cachedDataViewMemory0 = new DataView(wasm.memory.buffer);
  }
  return cachedDataViewMemory0;
}
function debugString(val) {
  const type = typeof val;
  if (type == "number" || type == "boolean" || val == null) {
    return `${val}`;
  }
  if (type == "string") {
    return `"${val}"`;
  }
  if (type == "symbol") {
    const description = val.description;
    if (description == null) {
      return "Symbol";
    } else {
      return `Symbol(${description})`;
    }
  }
  if (type == "function") {
    const name = val.name;
    if (typeof name == "string" && name.length > 0) {
      return `Function(${name})`;
    } else {
      return "Function";
    }
  }
  if (Array.isArray(val)) {
    const length = val.length;
    let debug = "[";
    if (length > 0) {
      debug += debugString(val[0]);
    }
    for (let i = 1; i < length; i++) {
      debug += ", " + debugString(val[i]);
    }
    debug += "]";
    return debug;
  }
  const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
  let className;
  if (builtInMatches && builtInMatches.length > 1) {
    className = builtInMatches[1];
  } else {
    return toString.call(val);
  }
  if (className == "Object") {
    try {
      return "Object(" + JSON.stringify(val) + ")";
    } catch (_) {
      return "Object";
    }
  }
  if (val instanceof Error) {
    return `${val.name}: ${val.message}
${val.stack}`;
  }
  return className;
}
var WASM_VECTOR_LEN = 0;
var cachedUint8ArrayMemory0 = null;
function getUint8ArrayMemory0() {
  if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {
    cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);
  }
  return cachedUint8ArrayMemory0;
}
var lTextEncoder = typeof TextEncoder === "undefined" ? (0, module.require)("util").TextEncoder : TextEncoder;
var cachedTextEncoder = new lTextEncoder("utf-8");
var encodeString = typeof cachedTextEncoder.encodeInto === "function" ? function(arg, view) {
  return cachedTextEncoder.encodeInto(arg, view);
} : function(arg, view) {
  const buf = cachedTextEncoder.encode(arg);
  view.set(buf);
  return {
    read: arg.length,
    written: buf.length
  };
};
function passStringToWasm0(arg, malloc, realloc) {
  if (realloc === void 0) {
    const buf = cachedTextEncoder.encode(arg);
    const ptr2 = malloc(buf.length, 1) >>> 0;
    getUint8ArrayMemory0().subarray(ptr2, ptr2 + buf.length).set(buf);
    WASM_VECTOR_LEN = buf.length;
    return ptr2;
  }
  let len = arg.length;
  let ptr = malloc(len, 1) >>> 0;
  const mem = getUint8ArrayMemory0();
  let offset = 0;
  for (; offset < len; offset++) {
    const code2 = arg.charCodeAt(offset);
    if (code2 > 127)
      break;
    mem[ptr + offset] = code2;
  }
  if (offset !== len) {
    if (offset !== 0) {
      arg = arg.slice(offset);
    }
    ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
    const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);
    const ret = encodeString(arg, view);
    offset += ret.written;
    ptr = realloc(ptr, len, offset, 1) >>> 0;
  }
  WASM_VECTOR_LEN = offset;
  return ptr;
}
var lTextDecoder = typeof TextDecoder2 === "undefined" ? (0, module.require)("util").TextDecoder : TextDecoder2;
var cachedTextDecoder = new lTextDecoder("utf-8", {
  ignoreBOM: true,
  fatal: true
});
cachedTextDecoder.decode();
function getStringFromWasm0(ptr, len) {
  ptr = ptr >>> 0;
  return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));
}
function takeFromExternrefTable0(idx) {
  const value = wasm.__wbindgen_export_2.get(idx);
  wasm.__externref_table_dealloc(idx);
  return value;
}
function static_text_render_once(items, cols, rows) {
  const ret = wasm.static_text_render_once(items, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
  if (ret[3]) {
    throw takeFromExternrefTable0(ret[2]);
  }
  let v1;
  if (ret[0] !== 0) {
    v1 = getStringFromWasm0(ret[0], ret[1]).slice();
    wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
  }
  return v1;
}
function strip_ansi_codes(text) {
  let deferred2_0;
  let deferred2_1;
  try {
    const ptr0 = passStringToWasm0(text, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
    const len0 = WASM_VECTOR_LEN;
    const ret = wasm.strip_ansi_codes(ptr0, len0);
    deferred2_0 = ret[0];
    deferred2_1 = ret[1];
    return getStringFromWasm0(ret[0], ret[1]);
  } finally {
    wasm.__wbindgen_free(deferred2_0, deferred2_1, 1);
  }
}
var StaticTextContainerFinalization = typeof FinalizationRegistry === "undefined" ? { register: () => {
}, unregister: () => {
} } : new FinalizationRegistry((ptr) => wasm.__wbg_statictextcontainer_free(ptr >>> 0, 1));
var StaticTextContainer = class {
  __destroy_into_raw() {
    const ptr = this.__wbg_ptr;
    this.__wbg_ptr = 0;
    StaticTextContainerFinalization.unregister(this);
    return ptr;
  }
  free() {
    const ptr = this.__destroy_into_raw();
    wasm.__wbg_statictextcontainer_free(ptr, 0);
  }
  constructor() {
    const ret = wasm.statictextcontainer_new();
    this.__wbg_ptr = ret >>> 0;
    StaticTextContainerFinalization.register(this, this.__wbg_ptr, this);
    return this;
  }
  /**
   * @param {any} items
   * @param {number | null} [cols]
   * @param {number | null} [rows]
   * @returns {string | undefined}
   */
  render_text(items, cols, rows) {
    const ret = wasm.statictextcontainer_render_text(this.__wbg_ptr, items, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
    if (ret[3]) {
      throw takeFromExternrefTable0(ret[2]);
    }
    let v1;
    if (ret[0] !== 0) {
      v1 = getStringFromWasm0(ret[0], ret[1]).slice();
      wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
    }
    return v1;
  }
  /**
   * @param {number | null} [cols]
   * @param {number | null} [rows]
   * @returns {string | undefined}
   */
  clear_text(cols, rows) {
    const ret = wasm.statictextcontainer_clear_text(this.__wbg_ptr, isLikeNone(cols) ? 4294967297 : cols >>> 0, isLikeNone(rows) ? 4294967297 : rows >>> 0);
    let v1;
    if (ret[0] !== 0) {
      v1 = getStringFromWasm0(ret[0], ret[1]).slice();
      wasm.__wbindgen_free(ret[0], ret[1] * 1, 1);
    }
    return v1;
  }
};
function __wbg_buffer_609cc3eee51ed158(arg0) {
  const ret = arg0.buffer;
  return ret;
}
function __wbg_call_672a4d21634d4a24() {
  return handleError(function(arg0, arg1) {
    const ret = arg0.call(arg1);
    return ret;
  }, arguments);
}
function __wbg_done_769e5ede4b31c67b(arg0) {
  const ret = arg0.done;
  return ret;
}
function __wbg_entries_3265d4158b33e5dc(arg0) {
  const ret = Object.entries(arg0);
  return ret;
}
function __wbg_get_67b2ba62fc30de12() {
  return handleError(function(arg0, arg1) {
    const ret = Reflect.get(arg0, arg1);
    return ret;
  }, arguments);
}
function __wbg_get_b9b93047fe3cf45b(arg0, arg1) {
  const ret = arg0[arg1 >>> 0];
  return ret;
}
function __wbg_instanceof_ArrayBuffer_e14585432e3737fc(arg0) {
  let result;
  try {
    result = arg0 instanceof ArrayBuffer;
  } catch (_) {
    result = false;
  }
  const ret = result;
  return ret;
}
function __wbg_instanceof_Map_f3469ce2244d2430(arg0) {
  let result;
  try {
    result = arg0 instanceof Map;
  } catch (_) {
    result = false;
  }
  const ret = result;
  return ret;
}
function __wbg_instanceof_Uint8Array_17156bcf118086a9(arg0) {
  let result;
  try {
    result = arg0 instanceof Uint8Array;
  } catch (_) {
    result = false;
  }
  const ret = result;
  return ret;
}
function __wbg_isArray_a1eab7e0d067391b(arg0) {
  const ret = Array.isArray(arg0);
  return ret;
}
function __wbg_isSafeInteger_343e2beeeece1bb0(arg0) {
  const ret = Number.isSafeInteger(arg0);
  return ret;
}
function __wbg_iterator_9a24c88df860dc65() {
  const ret = Symbol.iterator;
  return ret;
}
function __wbg_length_a446193dc22c12f8(arg0) {
  const ret = arg0.length;
  return ret;
}
function __wbg_length_e2d2a49132c1b256(arg0) {
  const ret = arg0.length;
  return ret;
}
function __wbg_new_a12002a7f91c75be(arg0) {
  const ret = new Uint8Array(arg0);
  return ret;
}
function __wbg_next_25feadfc0913fea9(arg0) {
  const ret = arg0.next;
  return ret;
}
function __wbg_next_6574e1a8a62d1055() {
  return handleError(function(arg0) {
    const ret = arg0.next();
    return ret;
  }, arguments);
}
function __wbg_set_65595bdd868b3009(arg0, arg1, arg2) {
  arg0.set(arg1, arg2 >>> 0);
}
function __wbg_value_cd1ffa7b1ab794f1(arg0) {
  const ret = arg0.value;
  return ret;
}
function __wbindgen_bigint_from_i64(arg0) {
  const ret = arg0;
  return ret;
}
function __wbindgen_bigint_from_u64(arg0) {
  const ret = BigInt.asUintN(64, arg0);
  return ret;
}
function __wbindgen_bigint_get_as_i64(arg0, arg1) {
  const v = arg1;
  const ret = typeof v === "bigint" ? v : void 0;
  getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
}
function __wbindgen_boolean_get(arg0) {
  const v = arg0;
  const ret = typeof v === "boolean" ? v ? 1 : 0 : 2;
  return ret;
}
function __wbindgen_debug_string(arg0, arg1) {
  const ret = debugString(arg1);
  const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
  const len1 = WASM_VECTOR_LEN;
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_error_new(arg0, arg1) {
  const ret = new Error(getStringFromWasm0(arg0, arg1));
  return ret;
}
function __wbindgen_in(arg0, arg1) {
  const ret = arg0 in arg1;
  return ret;
}
function __wbindgen_init_externref_table() {
  const table = wasm.__wbindgen_export_2;
  const offset = table.grow(4);
  table.set(0, void 0);
  table.set(offset + 0, void 0);
  table.set(offset + 1, null);
  table.set(offset + 2, true);
  table.set(offset + 3, false);
}
function __wbindgen_is_bigint(arg0) {
  const ret = typeof arg0 === "bigint";
  return ret;
}
function __wbindgen_is_function(arg0) {
  const ret = typeof arg0 === "function";
  return ret;
}
function __wbindgen_is_object(arg0) {
  const val = arg0;
  const ret = typeof val === "object" && val !== null;
  return ret;
}
function __wbindgen_jsval_eq(arg0, arg1) {
  const ret = arg0 === arg1;
  return ret;
}
function __wbindgen_jsval_loose_eq(arg0, arg1) {
  const ret = arg0 == arg1;
  return ret;
}
function __wbindgen_memory() {
  const ret = wasm.memory;
  return ret;
}
function __wbindgen_number_get(arg0, arg1) {
  const obj = arg1;
  const ret = typeof obj === "number" ? obj : void 0;
  getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);
}
function __wbindgen_string_get(arg0, arg1) {
  const obj = arg1;
  const ret = typeof obj === "string" ? obj : void 0;
  var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
  var len1 = WASM_VECTOR_LEN;
  getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_throw(arg0, arg1) {
  throw new Error(getStringFromWasm0(arg0, arg1));
}

// npm/esm/deps/jsr.io/@david/console-static-text/0.3.4/lib/rs_lib.js
var bytes = base64decode("AGFzbQEAAAABpwIrYAJ/fwBgAn9/AX9gA39/fwF/YAN/f38AYAF/AGABfwF/YAFvAX9gBX9/f39/AGAEf39/fwBgAW8Bb2AEf39/fwF/YAJ/bwBgBn9/f39/fwBgAAR/f39/YAACf39gAm9vAX9gAAF/YAV/f39/fwF/YAF+AW9gAAFvYAJvbwFvYAAAYAZ/f39/f38Bf2ADf35/AGACf34AYAJvfwFvYAJ/fwFvYANvb38AYAh/f39/f39/fwBgCX9/f39/f35+fgBgB39/f39/f38Bf2ADf35+AGACf3wAYAR/b3x8BH9/f39gA298fAR/f39/YAN/fHwCf39gAn9/An9/YAV/f31/fwBgBH99f38AYAV/f35/fwBgBH9+f38AYAV/f3x/fwBgBH98f38AApcOJBQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19nZXRfYjliOTMwNDdmZTNjZjQ1YgAZFC4vcnNfbGliLmludGVybmFsLmpzGV9fd2JpbmRnZW5fanN2YWxfbG9vc2VfZXEADxQuL3JzX2xpYi5pbnRlcm5hbC5qcyxfX3diZ19pbnN0YW5jZW9mX1VpbnQ4QXJyYXlfMTcxNTZiY2YxMTgwODZhOQAGFC4vcnNfbGliLmludGVybmFsLmpzLV9fd2JnX2luc3RhbmNlb2ZfQXJyYXlCdWZmZXJfZTE0NTg1NDMyZTM3MzdmYwAGFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX25ld19hMTIwMDJhN2Y5MWM3NWJlAAkULi9yc19saWIuaW50ZXJuYWwuanMWX193YmluZGdlbl9ib29sZWFuX2dldAAGFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fbnVtYmVyX2dldAALFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fc3RyaW5nX2dldAALFC4vcnNfbGliLmludGVybmFsLmpzFF9fd2JpbmRnZW5fZXJyb3JfbmV3ABoULi9yc19saWIuaW50ZXJuYWwuanMdX193YmdfbGVuZ3RoX2UyZDJhNDkxMzJjMWIyNTYABhQuL3JzX2xpYi5pbnRlcm5hbC5qcxRfX3diaW5kZ2VuX2lzX2JpZ2ludAAGFC4vcnNfbGliLmludGVybmFsLmpzJF9fd2JnX2lzU2FmZUludGVnZXJfMzQzZTJiZWVlZWNlMWJiMAAGFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JpbmRnZW5fYmlnaW50X2Zyb21faTY0ABIULi9yc19saWIuaW50ZXJuYWwuanMaX193YmluZGdlbl9iaWdpbnRfZnJvbV91NjQAEhQuL3JzX2xpYi5pbnRlcm5hbC5qcxRfX3diaW5kZ2VuX2lzX29iamVjdAAGFC4vcnNfbGliLmludGVybmFsLmpzH19fd2JnX2l0ZXJhdG9yXzlhMjRjODhkZjg2MGRjNjUAExQuL3JzX2xpYi5pbnRlcm5hbC5qcw1fX3diaW5kZ2VuX2luAA8ULi9yc19saWIuaW50ZXJuYWwuanMlX193YmdfaW5zdGFuY2VvZl9NYXBfZjM0NjljZTIyNDRkMjQzMAAGFC4vcnNfbGliLmludGVybmFsLmpzHl9fd2JnX2VudHJpZXNfMzI2NWQ0MTU4YjMzZTVkYwAJFC4vcnNfbGliLmludGVybmFsLmpzE19fd2JpbmRnZW5fanN2YWxfZXEADxQuL3JzX2xpYi5pbnRlcm5hbC5qcxZfX3diaW5kZ2VuX2lzX2Z1bmN0aW9uAAYULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfbmV4dF82NTc0ZTFhOGE2MmQxMDU1AAkULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfZG9uZV83NjllNWVkZTRiMzFjNjdiAAYULi9yc19saWIuaW50ZXJuYWwuanMcX193YmdfdmFsdWVfY2QxZmZhN2IxYWI3OTRmMQAJFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX2dldF82N2IyYmE2MmZjMzBkZTEyABQULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfY2FsbF82NzJhNGQyMTYzNGQ0YTI0ABQULi9yc19saWIuaW50ZXJuYWwuanMbX193YmdfbmV4dF8yNWZlYWRmYzA5MTNmZWE5AAkULi9yc19saWIuaW50ZXJuYWwuanMeX193YmdfaXNBcnJheV9hMWVhYjdlMGQwNjczOTFiAAYULi9yc19saWIuaW50ZXJuYWwuanMdX193YmdfbGVuZ3RoX2E0NDYxOTNkYzIyYzEyZjgABhQuL3JzX2xpYi5pbnRlcm5hbC5qcxFfX3diaW5kZ2VuX21lbW9yeQATFC4vcnNfbGliLmludGVybmFsLmpzHV9fd2JnX2J1ZmZlcl82MDljYzNlZWU1MWVkMTU4AAkULi9yc19saWIuaW50ZXJuYWwuanMaX193Ymdfc2V0XzY1NTk1YmRkODY4YjMwMDkAGxQuL3JzX2xpYi5pbnRlcm5hbC5qcxBfX3diaW5kZ2VuX3Rocm93AAAULi9yc19saWIuaW50ZXJuYWwuanMcX193YmluZGdlbl9iaWdpbnRfZ2V0X2FzX2k2NAALFC4vcnNfbGliLmludGVybmFsLmpzF19fd2JpbmRnZW5fZGVidWdfc3RyaW5nAAsULi9yc19saWIuaW50ZXJuYWwuanMfX193YmluZGdlbl9pbml0X2V4dGVybnJlZl90YWJsZQAVA4UCgwIFHAEABwADCAIBAwEKAQMABAMAARYCAwMAAgIAHRABAAACAB4XDAMDDAEBAAEIAQAHAwAHABUBAwMAAAgABAUCBwAAAQAMCAEIDAUAAR8HAAADAwgDAAIEAgABCAAAAAMBAAADAwQABAMDAAgAAAcBBAEAAAAHBAACAwMAAwMABwADGBggAwEBEAQDAAQEAwEBBQUAAAADEQEEAQQBCiEAIgAAASMEJAAAAAAEFgoDBxElJykDAQgEBAIBBAQEAQEEBQEAAQEABAABBAQEAQEBAQEBAgADBAQHAQQFEAMBAQAFAAQBBQAAAwMAAAAEAQAABQUAAAAAAAAFBQUFAAcICggXBAkCcAE2Nm8AgAEFAwEAEQYJAX8BQYCAwAALB/ACDwZtZW1vcnkCAB5fX3diZ19zdGF0aWN0ZXh0Y29udGFpbmVyX2ZyZWUAXhdzdGF0aWN0ZXh0Y29udGFpbmVyX25ldwCsAR9zdGF0aWN0ZXh0Y29udGFpbmVyX3JlbmRlcl90ZXh0AMIBHnN0YXRpY3RleHRjb250YWluZXJfY2xlYXJfdGV4dADIARdzdGF0aWNfdGV4dF9yZW5kZXJfb25jZQDEARBzdHJpcF9hbnNpX2NvZGVzAMoBFF9fd2JpbmRnZW5fZXhuX3N0b3JlAPoBF19fZXh0ZXJucmVmX3RhYmxlX2FsbG9jAEETX193YmluZGdlbl9leHBvcnRfMgEBEV9fd2JpbmRnZW5fbWFsbG9jALwBEl9f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EIYBIANBNGogAUG4mcAAEJ0BDAELA0AgA0HMAGoQtgEiBkGAgMQARwRAIANBCGogBhB9IAMoAghBAXFFDQEgBSADKAIMIgEgBGoiBEkEQCADQYABaiIEIANBkAFqEIYBIANBNGogBEGomcAAEJ0BIANBADYCnAEgAyAGIANBnAFqEJ4BIAQgAygCACADKAIEEIwBIANBmAFqIANBiAFqKAIANgIAIAMgAykCgAE3A5ABIAEhBAwCBSADQZABaiAGEIUBDAILAAsLIAMoApgBBEAgA0GAAWoiASADQZABahCGASADQTRqIAFBmJnAABCdAQUgAygCkAEgAygClAEQjgILDAALAAsgA0HYAGogAiABENgBA0AgA0EYaiADQdgAahBGIAMoAhgiAUUNBiADQZABaiIEIAEgAygCHBCMASADQYABaiIBIAQQhgEgA0E0aiABQciZwAAQnQEMAAsACyAEKQIEIQ4gASAKaiILIAc2AgAgC0EEaiAONwIAIAZBEGshBiAFQRBqIQUgAUEMaiEBIAhBAWohCCAEQRBqIQQMAQsLDAQLDAMLIAAgASkCADcCACABQoCAgIDAADcCACAAQQhqIAFBCGoiACgCADYCACAAQQA2AgAMAQsgA0GIAWoiBCADQTxqKAIANgIAIAMgAykCNDcDgAECQCAOQoCAgIAQg1ANACADKAKIASIGIA5CMIinIgFNDQAgA0EANgKIASADIAMoAoQBIgU2AlggAyABNgJoIAMgBiABayIBNgJkIAMgBSABQQR0ajYCXCADIANBgAFqNgJgIANB2ABqEGELIAAgAykDgAE3AgAgAEEIaiAEKAIANgIAIAMoAkAgAhDqASAHIAoQjgIgCSEBA0AgCARAIAEoAgAgAUEEaigCABCOAiAIQQFrIQggAUEMaiEBDAELCyAMIAlBBEEMEHcLIANBoAFqJAAPCyADQQA2AmggA0EBNgJcIANByJXAADYCWCADQgQ3AmAgA0HYAGpB9JbAABDGAQALzAoBBX8jAEEQayIGJAACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAJB/wFxQQFrDg8ACgsCAQwZBhEHEggYGAkZCyAAQQA6AIEKIABBADYC8AEgAEEAOwH+CSAAQQA6AOQBIABBADYC4AEM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IAAoAugBIAJBH3FBBnRyNgLoAUEDIQMMCAsgAsBBQEgiBEEBdCEDCyAERQ0EIAAgACgC6AEgAkE/cUEMdHI2AugBDAYLQQULIQMgACAAKALoASACQQ9xQQx0cjYC6AEMBAtBByEDCyAAIAAoAugBIAJBB3FBEnRyNgLoAQwCCyAAQQA2AugBIAEoAhQhAiABLQAYQQFGBEAgAUEAOgAYIAEgAkEDazYCDAsgAEEMOgCACiABIAI2AhAMAQsgACAAKALoASACQT9xQQZ0cjYC6AFBAyEDCyAAIAM6AOwBC6MEAQd/IwBBoAprIgMkACADQQBBgAH8CwAgA0EANgLwASADQQw6AIAKIANBgAFqQQBB5QD8CwAgA0EAOgCBCiADQQA2AvQBIANCADcC+AkgA0EAOgDsASADQQA2AugBIANCADcClAogA0IANwKMCiADQQA6AJwKIANCgICAgMAANwKECgNAAkACQCACBEAgAyADKAKYCkEBajYCmAogAS0AACEEIAMtAIAKIgdBD0YEQCADIANBhApqIAQQOgwDCyAEQfaZwQBqLQAAIgVFBEAgB0EIdCAEckH2mcEAai0AACEFCyAFQfABcUEEdiEIIAVBD3EiBkUEQCADIANBhApqIAggBBArDAMLQQghCQJAAkACQCAHQQlrDgUAAgICAQILQQ4hCQsgAyADQYQKaiAJIAQQKwsgBUEPTQ0BIAMgA0GECmogCCAEECsMAQsgAyADKAKYCjYClAogA0GECmogAy0AnAoQjgEgAEEIaiADQYwKaigCADYCACAAIAMpAoQKNwIAIANBoApqJAAPCwJAAkACQAJAAkAgBkEFaw4JAgQEBAACBAQDAQsgAyADQYQKakEGIAQQKwwDCyAGQQFHDQILIANBADoAgQogA0EANgLwASADQQA7Af4JIANBADoA5AEgA0EANgLgAQwBCyADKAL0AQRAIANBADYC9AELIANBADYC+AkLIAMgBjoAgAoLIAFBAWohASACQQFrIQIMAAsAC/kDAQJ/IAAgAWohAgJAAkAgACgCBCIDQQFxDQAgA0ECcUUNASAAKAIAIgMgAWohASAAIANrIgBBgMDBACgCAEYEQCACKAIEQQNxQQNHDQFB+L/BACABNgIAIAIgAigCBEF+cTYCBCAAIAFBAXI2AgQgAiABNgIADAILIAAgAxBE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ADYCGCAAQgQ3AiAgAEEYakGQu8EAEMYBAAv2AQECfyMAQTBrIgIkAAJAIAApAwBC////////////AINCgICAgICAgPj/AFoEQCACQQE2AhQgAkHA08AANgIQIAJCATcCHCACQR42AiwgAiAANgIoIAIgAkEoajYCGCABKAIAIAEoAgQgAkEQahD3ASEDDAELIAJBADoADCACIAE2AghBASEDIAJBATYCFCACQcDTwAA2AhAgAkIBNwIcIAJBHjYCLCACIAA2AiggAiACQShqNgIYIAJBCGogAkEQahD2AQ0AIAItAAxFBEAgASgCAEHI08AAQQIgASgCBCgCDBECAA0BC0EAIQMLIAJBMGokACADC/gBAQN/IwBBIGsiAyQAAkACf0EAIAEgASACaiICSw0AGkEAQQggAiAAKAIAIgRBAXQiASABIAJJGyIBIAFBCE0bIgFBAEgNABogAyAEBH8gAyAENgIcIAMgACgCBDYCFEEBBUEACzYCGCADQQhqIQICfwJAIANBFGoiBCgCBEUNACAEKAIIIgVFDQAgBCgCACAFQQEgARAwDAELIAEQJAshBCACIAE2AgggAiAEQQEgBBs2AgQgAiAERTYCACADKAIIQQFHDQEgAygCEBogAygCDAtB1JLAABDnAQALIAMoAgwhAiAAIAE2AgAgACACNgIEIANBIGokAAuzAQEDfyMAQRBrIgUkACABKAIIIgMgAksEQCABKAIEIAJBA3RqIgQoAgQhASAEKAIAIQQgACADIAJBAWpLBH8gBUEANgIMIAVBDSAFQQxqEJ4BQQAhAiAFKAIEIgMgAU0EQCAEQQAgBSgCACADIAQgASADa2ogAxDRARshAgsgAiAEIAIbIQQgASADQQAgAhtrBSABCzYCBCAAIAQ2AgAgBUEQaiQADwsgAiADQZiawAAQdgALsQEAAkAgAEGAAU8EQCAAQYAQSQ0BIABBgIAETwRAIAEgAEE/cUGAAXI6AAMgASAAQRJ2QfABcjoAACABIABBBnZBP3FBgAFyOgACIAEgAEEMdkE/cUGAAXI6AAEPCyABIABBP3FBgAFyOgACIAEgAEEMdkHgAXI6AAAgASAAQQZ2QT9xQYABcjoAAQ8LIAEgADoAAA8LIAEgAEE/cUGAAXI6AAEgASAAQQZ2QcABcjoAAAu+AQICfwF+IwBBIGsiAiQAIAAQ/gEgAEEIayEDAkACQCABRQRAIAMoAgBBAUcNAiACQRhqIABBHGopAgA3AwAgAkEQaiAAQRRqKQIANwMAIAJBCGogAEEMaikCADcDACAAKQIEIQQgA0EANgIAIAIgBDcDAAJAIANBf0YNACAAQQRrIgAgACgCAEEBayIANgIAIAANACADQSwQgAELIAIQmgEMAQsgAxDbAQsgAkEgaiQADwtBldDAAEE/EJQCAAupAQICfwF+IwBBEGsiBCQAIAACfwJAIAIgA2pBAWtBACACa3GtIAGtfiIGQiCIUARAIAanIgNBgICAgHggAmtNDQELIABBADYCBEEBDAELIANFBEAgACACNgIIIABBADYCBEEADAELIARBCGogAiADENIBIAQoAggiBQRAIAAgBTYCCCAAIAE2AgRBAAwBCyAAIAM2AgggACACNgIEQQELNgIAIARBEGokAAvCAQEFfyMAQRBrIgMkACABKAIMIQICQAJAAkACQAJAAkAgASgCBA4CAAECCyACDQFBASECQQAhAQwCCyACDQAgASgCACICKAIEIQEgAigCACECDAELIAAgARBTDAELIANBBGogAUEBQQEQXyADKAIIIQQgAygCBEEBRg0BIAMoAgwhBSABBEAgBSACIAH8CgAACyAAIAE2AgggACAFNgIEIAAgBDYCAAsgA0EQaiQADwsgAygCDCEGIARBxM7AABDnAQALrQEBBX8gACgCBCEBIAAoAgAhAiAAQoSAgIDAADcCAAJAIAEgAkYNACABIAJrQQR2IQEDQCABRQ0BIAIoAgAgAkEEaigCABCOAiABQQFrIQEgAkEQaiECDAALAAsgACgCECICBEACQCAAKAIMIgMgACgCCCIAKAIIIgFGDQAgAkEEdCIERQ0AIAAoAgQiBSABQQR0aiAFIANBBHRqIAT8CgAACyAAIAEgAmo2AggLC5kBAQJ/AkAgAEEJayIBQRhPBEBBACEBIABBgAFJDQECQCAAQQh2IgIEQCACQTBHBEAgAkEgRg0CIAJBFkcNBCAAQYAtRiEBDAQLIABBgOAARiEBDAMLIABB/wFxQfegwABqLQAAIQEMAgsgAEH/AXFB96DAAGotAABBAnFBAXYhAQwBC0EAQZ+AgAQgAXZBAXFrIQELIAFBAXELlAEBBX8jAEEQayIDJAACQCACQQdNBEAgAiEE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IAUoAgRBAUYEQCAFKAIMIQYgASAEEOcBAAsgACAFKAIMNgIEIAAgATYCACAFQRBqJAALUwAjAEEgayIAJAAgAEEBNgIEIABB1JfAADYCACAAQgE3AgwgAEEONgIcIABBvJfAADYCGCAAIABBGGo2AgggASgCACABKAIEIAAQOSAAQSBqJAALTgECfyAAKAIMIAAoAgQiAWtBGG4hAgNAIAIEQCABKAIAIAFBBGooAgAQjwIgAkEBayECIAFBGGohAQwBCwsgACgCCCAAKAIAQQRBGBB3C0gCAX8CfiMAQSBrIgIkACACIAApAwAiAyADQj+HIgSFIAR9IAJBDGoQSCABIANCAFlBAUEAIAIoAgAgAigCBBA4IAJBIGokAAtYAQF/IAEoAgwhAgJAAkACQAJAIAEoAgQOAgABAgsgAg0BQQEhAUEAIQIMAgsgAg0AIAEoAgAiASgCBCECIAEoAgAhAQwBCyAAIAEQUw8LIAAgASACEIwBC0gBAn8jAEEQayICJAAgASgCAAR/IAJBCGogARCkASACKAIMIQMgAigCCEEBcQVBAAshASAAIAM2AgQgACABNgIAIAJBEGokAAtIAQJ/IwBBEGsiAiQAIAAgASgCAEGAgICAeEcEfyACQQhqIAEQmwEgAigCCCEDIAIoAgwFQQALNgIEIAAgAzYCACACQRBqJAALSAACQCADRQ0AAkAgAiADTQRAIAIgA0cNAQwCCyABIANqLAAAQb9/Sg0BCyABIAJBACADIAQQ/AEACyAAIAM2AgQgACABNgIAC1IBBH8gACgCFCEBIAAoAhgiAygCACICBEAgASACEQQACyADKAIEIgIEQCADKAIIIQQgASACEIABCyAAKAIEIgEgACgCCBDFASAAKAIAIAEQkAILSQEBfyMAQSBrIgIkACACQRhqIAFBCGooAgA2AgAgAiABKQIANwMQIAJBCGogAkEQakHU0MAAEHggACACKQMINwMAIAJBIGokAAtHAQF/IAAoAgAgACgCCCIDayACSQRAIAAgAyACEFsgACgCCCEDCyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AghBAAuGAQEDfyAAKAIIIgQgACgCAEYEQCMAQRBrIgMkACADQQhqIAAgACgCAEEBQQRBEBBMIAMoAggiBUGBgICAeEcEQCADKAIMGiAFIAIQ5wEACyADQRBqJAALIAAgBEEBajYCCCAAKAIEIARBBHRqIgAgASkCADcCACAAQQhqIAFBCGopAgA3AgALOQAgASACEF0gAAJ/QQEgAUGAAUkNABpBAiABQYAQSQ0AGkEDQQQgAUGAgARJGws2AgQgACACNgIAC4cBAQN/IAAoAggiAyAAKAIARgRAIwBBEGsiAiQAIAJBCGogACAAKAIAQQRBEBBUIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQcTLwAAQ5wEACyACQRBqJAALIAAgA0EBajYCCCAAKAIEIANBBHRqIgAgASkCADcCACAAQQhqIAFBCGopAgA3AgALDQAgACABIAJBBRClAgsNACAAIAEgAkEGEKUCC4cBAQN/IAAoAggiAyAAKAIARgRAIwBBEGsiAiQAIAJBCGogACAAKAIAQQhBEBBUIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQbTOwAAQ5wEACyACQRBqJAALIAAgA0EBajYCCCAAKAIEIANBBHRqIgAgASkDADcDACAAQQhqIAFBCGopAwA3AwALSAECfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBBMIAUoAggiAEGBgICAeEcEQCAFKAIMIQYgAEGUl8AAEOcBAAsgBUEQaiQAC0IBAX8gASgCBCICIAEoAghPBH9BAAUgASACQQFqNgIEIAEoAgAoAgAgAhDiASEBQQELIQIgACABNgIEIAAgAjYCAAtEAQF/IwBBIGsiAyQAIAMgAjYCHCADIAE2AhggAyACNgIUIANBCGogA0EUakGkvMEAEHggACADKQMINwMAIANBIGokAAsLACAAIAFBARCmAgsLACAAIAFBAhCmAgtHAQJ/IwBBIGsiAiQAIAJBAzoACCACIAE5AxAgAkEIaiACQR9qQaTNwAAQeiEDIABBgYCAgHg2AgAgACADNgIEIAJBIGokAAtCAQF/IwBBIGsiAyQAIANBADYCECADQQE2AgQgA0IENwIIIAMgATYCHCADIAA2AhggAyADQRhqNgIAIAMgAhDGAQALOQEBfyMAQSBrIgIkACACQQhqIAAoAgAgAkEWahBKIAFBAUEBQQAgAigCCCACKAIMEDggAkEgaiQAC/pPAxl/FX4BfCABKAIIIgZBgICAAXEhBCAAKwMAITAgBkGAgICAAXFFBEACfyABIQUg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ACAIQQFxaiIINgIAIAAgAUkgACAIS3IhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0RCyADIAY2AvwBIAlBAmohCQsgDiAGIAYgDkkbIgBBKU8NDSAAQQJ0IQICQAJAAkADQCACRQ0BIAJBBGsiAiADQdwAamooAgAiASACIANByARqaigCACIERg0ACyABIARPDQEgBiEADAILIANByARqIgEgASACakYNACAGIQAMAQsgAARAQQEhCCADQcgEaiEHIANB3ABqIQIgACEEA0AgAiACKAIAIgYgBygCAEF/c2oiASAIQQFxaiIINgIAIAEgBkkgASAIS3IhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0RCyADIAA2AvwBIAlBAWohCQsgCkERRg0EIANBywBqIApqIAlBMGo6AAAgAygCoAMiESAAIAAgEUkbIgJBKU8NECAKQQFqIQkgAkECdCECAn8CQANAIAJFDQEgAkEEayICIANB3ABqaigCACIBIAIgA0GAAmpqKAIAIgRGDQALIAEgBEsgASAESWsMAQtBf0EAIANBgAJqIgEgASACakcbCyEYIANB3AlqIANB3ABqQaQB/AoAAAJAAkAgAygCxAQiBiADKAL8CiIBIAEgBkkbIgFBKE0EQCABDQFBACEBDAILDBALQQAhCCADQaQDaiEHIANB3AlqIQIgASEEA0AgAiACKAIAIhkgBygCAGoiFiAIQQFxaiIINgIAIBYgGUkgCCAWSXIhCCACQQRqIQIgB0EEaiEHIARBAWsiBA0ACyAIRQ0AIAFBKEYNEiADQdwJaiABQQJ0akEBNgIAIAFBAWohAQsgAyABNgL8CiABIA4gASAOSxsiAkEpTw0QIAJBAnQhAiAMIBhKIghFAn8CQANAIAJFDQEgAkEEayICIANByARqaigCACIBIAIgA0HcCWpqKAIAIgRGDQALIAEgBEsgASAESWsMAQtBf0EAIANB3AlqIgEgASACakcbCyIBIAxOcUUEQCABIAxIDQMMCgtBACEBIAMCf0EAIABFDQAaIABBAnQiByADQdwAaiICakIAIRwDQCACIAI1AgBCCn4gHHwiGz4CACACQQRqIQIgG0IgiCEcIAdBBGsiBw0ACyAAIBtCgICAgBBUDQAaIABBKEYNEiAcPgIAIABBAWoLIgg2AvwBAkAgEUUNACARQQJ0IgcgA0GAAmoiAmpCACEcA0AgAiACNQIAQgp+IBx8Ihs+AgAgAkEEaiECIBtCIIghHCAHQQRrIgcNAAsgG0KAgICAEFQEQCARIQEMAQsgEUEoRg0SIBw+AgAgEUEBaiEBCyADIAE2AqADAkAgBkUEQEEAIQYMAQsgBkECdCIHIANBpANqIgJqQgAhHANAIAIgAjUCAEIKfiAcfCIbPgIAIAJBBGohAiAbQiCIIRwgB0EEayIHDQALIBtCgICAgBBUDQAgBkEoRg0SIBw+AgAgBkEBaiEGCyADIAY2AsQEIA8gCCAIIA9JGyIAQShNDQALCwwLCyAIRQ0FIANB3ABqQQEQLRogAygC6AUiACADKAL8ASIBIAAgAUsbIgJBKU8NDSACQQJ0IQIgA0HYAGohAANAIAJFDQMgACACaigCACIBIAJBBGsiAiADQcgEamooAgAiBEYNAAsgASAESQ0GDAULIAZBKEH0x8AAEIwCAAtBEUERQeikwAAQdgALIANByARqIgAgACACakcNAwwCCwwHCwwICyADQcsAaiAJaiEEQX8hByAJIQICQANAIAIiAEUNASAHQQFqIQcgAkEBayICIANBywBqIgFqLQAAQTlGDQALIAEgAmoiBCAELQAAQQFqOgAAIAdFIAAgCktyDQEgACABakEwIAf8CwAMAQsgA0ExOgBLAkAgCgRAIAoEQCADQcwAakEwIAr8CwALIApBD0sNAQsgBEEwOgAAIAtBAWohCyAKQQJqIQkMAgsgCUERQfikwAAQdgALIApBEUkNACAJQRFBiKXAABCMAgALIANBCGogA0HLAGogCSALQQAgA0HcCWoQSSADKAIMIQEgAygCCAshACADIAE2AsQIIAMgADYCwAggAyANNgK8CCADIBI2ArgIIAUgA0G4CGoQNyADQYALaiQADAYLIANBADYC3AkjAEEQayIBJAAgASADQbgIajYCDCABIANBkAdqNgIIIwBB8ABrIgAkACAAQdi0wAA2AgwgACABQQhqNgIIIABB2LTAADYCFCAAIAFBDGo2AhAgAEECNgIcIABB6LTAADYCGAJAIANB3AlqIgEoAgAEQCAAQTBqIAFBEGopAgA3AwAgAEEoaiABQQhqKQIANwMAIAAgASkCADcDICAAQQQ2AlwgAEHQtcAANgJYIABCBDcCZCAAIABBEGqtQoCAgICwAYQ3A1AgACAAQQhqrUKAgICAsAGENwNIIAAgAEEgaq1CgICAgPABhDcDQAwBCyAAQQM2AlwgAEGctcAANgJYIABCAzcCZCAAIABBEGqtQoCAgICwAYQ3A0ggACAAQQhqrUKAgICAsAGENwNACyAAIABBGGqtQoCAgIDAAYQ3AzggACAAQThqNgJgIABB2ABqQfiiwAAQxgEACyAAQShB9MfAABCMAgALIAFBKEH0x8AAEIwCAAtBhMjAAEEaQfTHwAAQqQEACyACQShB9MfAABCMAgALQShBKEH0x8AAEHYACw8LAn8gBEEARyEGIAEiES8BDiEOQQAhACMAQeAOayIFJAAgML0hGwJAAkACQAJAAn8CQAJAAkACQAJAAkACfwJAAkAgMJlEAAAAAAAA8H9hBH9BAwUgG0KAgICAgICA+P8AgyIfQoCAgICAgID4/wBRDQUgG0L/////////B4MiHkKAgICAgICACIQgG0IBhkL+////////D4MgG0I0iKdB/w9xIgEbIhxCAYMhHSAfQgBSDQIgHlBFDQFBBAtBAmshBAwDCyAdUCEEQgEhHiABQbMIawwBC0KAgICAgICAICAcQgGGIBxCgICAgICAgAhRIgAbIRxCAkIBIAAbIR4gHVAhBEHLd0HMdyAAGyABagshACAEQX5yIgRFDQELQQEhAkGXs8AAQZizwAAgG0IAUyIBG0GXs8AAQQEgARsgBhshEiAbQj+IpyAGciEYQQMgBCAEQQNPG0ECaw4CAgMBCyAFQQM2AsQNIAVBmbPAADYCwA0gBUECOwG8DUEBIRJBASECIAVBvA1qDAQLIAVBAzYCxA0gBUGcs8AANgLADSAFQQI7AbwNIAVBvA1qDAMLQQIhAiAFQQI7AbwNIA5FDQEgBSAONgLMDSAFQQA7AcgNIAVBAjYCxA0gBUGVs8AANgLADSAFQbwNagwCCwJAAkACQAJAAkACQAJAAn8CQAJAAkBBdEEFIADBIghBAEgbIAhsIgRBwP0ASQRAIBxQDQFBoH8gACAceSIbp2siBmvBQdAAbEGwpwVqQc4QbSIBQdEATw0CIARBBHYiB0EVaiEKQYCAfkEAIA5rIA7BQQBIG8EhDCAFQRBqIAFBBHQiAUGwpsAAaikDACAcIBuGEHFCAUFAIAYgAUG4psAAai8BAGprIglBP3GtIh2GIiBCAX0iJiAFKQMYIAUpAxBCP4h8IhuDIh9QDQUgAUG6psAAai8BACEGIBsgHYinIgRBkM4ATwRAIARBwIQ9SQ0EIARBgMLXL08EQEEIQQkgBEGAlOvcA0kiAhshAUGAwtcvQYCU69wDIAIbDAYLQQZBByAEQYCt4gRJIgIbIQFBwIQ9QYCt4gQgAhsMBQsgBEHkAE8EQEECQQMgBEHoB0kiAhshAUHkAEHoByACGwwFC0EKQQEgBEEJSyIBGwwEC0Ggs8AAQSVByLPAABCpAQALQcykwABBHEH0scAAEKkBAAsgAUHRAEHAsMAAEHYAC0EEQQUgBEGgjQZJIgIbIQFBkM4AQaCNBiACGwshAiABIAZrQQFqwSIGIAxMDQMgCUH//wNxIAYgDGsiCcEgCiAJIApJGyIJQQFrIQ0CQANAIAVBIGogA2ogBCACbiIQQTBqOgAAIAQgAiAQbGshBCADIA1GDQMgASADRg0BIANBAWohAyACQQpJIAJBCm4hAkUNAAtBhLLAABC/AQALIANBAWohAkFsIAdrIQFBAWtBP3GtISdCASEbA0AgGyAniEIAUg0BIAEgAmpBAUYNAyAFQSBqIgQgAmogH0IKfiIfIB2Ip0EwajoAACAbQgp+IRsgHyAmgyEfIAkgAkEBaiICRw0ACyAFQaAIaiAEIAogCSAGIAwgHyAgIBsQQAwECyAFQQA2AqAIDAQLIAVBoAhqIAVBIGogCiAJIAYgDCAErSAdhiAffCACrSAdhiAgEEAMAgsgAiAKQZSywAAQdgALIAVBoAhqIAVBIGogCkEAIAYgDCAbQgqAIAKtIB2GICAQQAsgBSgCoAgiAkUNACAFLwGoCCELIAUoAqQIIQkMAQsCQAJAAkAgHCAcIB58WARAIAUgHD4CrAggBUEBQQIgHEKAgICAEFQiARs2AswJIAVBACAcQiCIpyABGzYCsAggBUG0CGpBAEGYAfwLACAFQdQJakEAQZwB/AsAIAVBATYC0AkgBUEBNgLwCiAArcMgHEIBfXl9QsKawegEfkKAoc2gtAJ8QiCIpyIBwSELAkAgCEEATgRAIAVBrAhqIABB//8DcRAtGgwBCyAFQdAJakEAIABrwRAtGgsCQCALQQBIBEAgBUGsCGpBACALa0H//wNxEDMMAQsgBUHQCWogAUH//wFxEDMLIAVBvA1qIAVB0AlqQaQB/AoAACAFQbgNaiEAIAohCANAIAUoAtwOIgNBKU8NCSADBEAgA0ECdCECQgAhGwNAIAAgAmoiASABNQIAIBtCIIaEIhtCgJTr3AOAIhw+AgAgGyAcQoCU69wDfn0hGyACQQRrIgINAAsLIAhBCWsiCEEJSw0ACyAIQQJ0QYijwABqKAIAQQF0IgBFDQEgBSgC3A4iA0EpTw0IIAMEfyADQQJ0IQIgBUG4DWohASAArSEbQgAhHANAIAEgAmoiACAANQIAIBxCIIaEIhwgG4AiHT4CACAcIBsgHX59IRwgAkEEayICDQALIAUoAtwOBUEACyEAAkACQCAFKALMCSIEIAAgACAESRsiAUEoTQRAIAENAUEAIQEMAgsMCQtBACEIIAVBrAhqIQMgBUG8DWohAiABIQADQCACIAIoAgAiCSADKAIAaiIGIAhBAXFqIgg2AgAgBiAJSSAGIAhLciEIIAJBBGohAiADQQRqIQMgAEEBayIADQALIAhFDQAgAUEoRg0KIAVBvA1qIAFBAnRqQQE2AgAgAUEBaiEBCyAFIAE2AtwOIAUoAvAKIgcgASABIAdJGyIDQSlPDQggA0ECdCECAkACQANAIAJFDQEgAkEEayICIAVBvA1qaigCACIAIAIgBUHQCWpqKAIAIgFGDQALIAAgAU8NAQwECyAFQdAJaiIAIAAgAmpHDQMLIAtBAWohCwwDC0GYpcAAQTZBoKbAABCpAQALQbvIwABBG0H0x8AAEKkBAAsgBEUEQEEAIQQgBUEANgLMCQwBCyAEQQJ0IgMgBUGsCGoiAmohAEIAIRsDQCACIAI1AgBCCn4gG3wiHD4CACACQQRqIQIgHEIgiCEbIANBBGsiAw0ACyAcQoCAgIAQWgRAIARBKEYNByAAIBs+AgAgBEEBaiEECyAFIAQ2AswJC0EAIQBBASEBAkACQAJAIAvBIgYgDEgiGQ0AIAsgDGvBIAogBiAMayAKSRsiCUUNACAFQfQKaiIBIAVB0AlqIgBBpAH8CgAAIAFBARAtIRAgBUGYDGoiASAAQaQB/AoAACABQQIQLSETIAVBvA1qIgEgAEGkAfwKAAAgBUGoCGohGiABQQMQLSEUIBAoAqABIRUgEygCoAEhFiAUKAKgASEXIAUoAswJIQQgBSgC8AohBwJAAkACQAJAAkADQCAEQSlPDQIgBEECdCEAQQAhAgJ/AkACQANAIAAgAkYNASAFQawIaiACaiACQQRqIQIoAgBFDQALIBcgBCAEIBdJGyIBQSlPDQ8gAUECdCECAkADQCACRQ0BIAJBBGsiAiAFQawIamooAgAiACACIAVBvA1qaigCACIGRg0ACyAAIAZPDQJBAAwDCyAUIAVBvA1qIAJqRg0BQQAMAgsgCSAKSw0FIAkgD0YNCSAJIA9rIgBFDQkgBUEgaiAPakEwIAD8CwAMCQtBASEIIAVBvA1qIQMgBUGsCGohAiABIQADQCACIAIoAgAiBiADKAIAQX9zaiIEIAhBAXFqIgg2AgAgBCAGSSAEIAhLciEIIAJBBGohAiADQQRqIQMgAEEBayIADQALIAhFDRAgBSABNgLMCSABIQRBCAshDSAWIAQgBCAWSRsiAUEpTw0MIAFBAnQhAgJAAkACQANAIAJFDQEgAkEEayICIAVBrAhqaigCACIAIAIgBUGYDGpqKAIAIgZGDQALIAAgBk8NASAEIQEMAgsgEyAFQZgMaiACakYNACAEIQEMAQsgAQRAQQEhCCAFQZgMaiEDIAVBrAhqIQIgASEAA0AgAiACKAIAIgYgAygCAEF/c2oiBCAIQQFxaiIINgIAIAQgBkkgBCAIS3IhCCACQQRqIQIgA0EEaiEDIABBAWsiAA0ACyAIRQ0RCyAFIAE2AswJIA1BBHIhDQsgFSABIAEgFUkbIgZBKU8NBCAGQQJ0IQICQAJAAkADQCACRQ0BIAJBBGsiAiAFQawIamooAgAiACACIAVB9ApqaigCACIERg0ACyAAIARPDQEgASEGDAILIBAgBUH0CmogAmpGDQAgASEGDAELIAYEQEEBIQggBUH0CmohAyAFQawIaiECIAYhAANAIAIgAigCACIEIAMoAgBBf3NqIgEgCEEBcWoiCDYCACABIARJIAEgCEtyIQggAkEEaiECIANBBGohAyAAQQFrIgANAAsgCEUNEQsgBSAGNgLMCSANQQJqIQ0LIAcgBiAGIAdJGyIEQSlPDQUgBEECdCECAkACQAJAA0AgAkUNASACIBpqKAIAIgAgAkEEayICIAVB0AlqaigCACIBRg0ACyAAIAFPDQEgBiEEDAILIAVB0AlqIgAgACACakYNACAGIQQMAQsgBARAQQEhCCAFQdAJaiEDIAVBrAhqIQIgBCEAA0AgAiACKAIAIgYgAygCAEF/c2oiASAIQQFxaiIINgIAIAEgBkkgASAIS3IhCCACQQRqIQIgA0EEaiEDIABBAWsiAA0ACyAIRQ0RCyAFIAQ2AswJIA1BAWohDQsgCiAPTQ0BIAVBIGogD2ogDUEwajoAAAJAIARFBEBBACEEDAELIARBAnQiAyAFQawIaiICakIAIRsDQCACIAI1AgBCCn4gG3wiHD4CACACQQRqIQIgHEIgiCEbIANBBGsiAw0ACyAcQoCAgIAQVA0AIARBKEYNDyAbPgIAIARBAWohBAsgBSAENgLMCSAPQQFqIg8gCUcNAAtBACEBIAkhAAwFCyAPIApBgKbAABB2AAsgBEEoQfTHwAAQjAIACyAJIApBkKbAABCMAgALIAZBKEH0x8AAEIwCAAsgBEEoQfTHwAAQjAIACwJAAkAgB0EpSQRAAkAgB0UEQEEAIQcMAQsgB0ECdCIDIAVB0AlqIgJqQgAhGwNAIAIgAjUCAEIFfiAbfCIcPgIAIAJBBGohAiAcQiCIIRsgA0EEayIDDQALIBxCgICAgBBUDQAgB0EoRg0LIBs+AgAgB0EBaiEHCyAFIAc2AvAKIAcgBCAEIAdJGyIDQSlPDQkgA0ECdCECIAVBqAhqIQkCQAJ/AkADQCACRQ0BIAIgCWooAgAiBCACQQRrIgIgBUHQCWpqKAIAIgZGDQALIAQgBksgBCAGSWsMAQtBf0EAIAVB0AlqIgQgAiAEakcbC0H/AXEOAgACAwtBACEJIAENAyAKIABBAWsiBEsEQCAFQSBqIARqLQAAQQFxDQIMAwsgBCAKQdClwAAQdgALIAdBKEH0x8AAEIwCAAsgACAKTQRAIAVBIGogAGpBfyEDIAAhAgJAA0AgAiIERQ0BIANBAWohAyACQQFrIgIgBUEgaiIGai0AAEE5Rg0ACyACIAZqIgEgAS0AAEEBajoAACADRSAAIARNcg0CIAQgBmpBMCAD/AsADAILAkAgAQRAQTEhAgwBCyAFQTE6ACAgAEEBRgRAQTAhAgwBC0EwIQIgAEEBayIBRQ0AIAVBIWpBMCAB/AsACyALQQFqIQsgGSAAIApPcg0BIAI6AAAgAEEBaiEADAELIAAgCkHgpcAAEIwCAAsgACAKSw0BIAAhCQsgBUEgaiECDAELIAAgCkHwpcAAEIwCAAsgDCALwUgEQCAFQQhqIAIgCSALIA4gBUG8DWoQSSAFKAIMIQIgBSgCCAwCC0ECIQIgBUECOwG8DSAORQRAQQEhAiAFQQE2AsQNIAVBn7PAADYCwA0gBUG8DWoMAgsgBSAONgLMDSAFQQA7AcgNIAVBAjYCxA0gBUGVs8AANgLADSAFQbwNagwBC0EBIQIgBUEBNgLEDSAFQZ+zwAA2AsANIAVBvA1qCyEAIAUgAjYCpAwgBSAANgKgDCAFIBg2ApwMIAUgEjYCmAwgESAFQZgMahA3IAVB4A5qJAAMBAsgAUEoQfTHwAAQjAIACyADQShB9MfAABCMAgALQShBKEH0x8AAEHYAC0GEyMAAQRpB9MfAABCpAQALC00BAX9BLBD/ASIAQQE6ACggAEH0y8AANgIkIABBATYCICAAQQA7ARwgAEEAOwEYIABCBDcCECAAQgA3AgggAEKBgICAEDcCACAAQQhqCz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACEM8BIAJBEGohAgwBCwsgACgCACADQQRBEBB/C0kAAkAgASACQdzPwABBBBDRAUUEQCABIAJB4M/AAEENENEBRQRAIABBAjoAAQwCCyAAQQE6AAEMAQsgAEEAOgABCyAAQQA6AAALOAEBfyMAQRBrIgIkACACIAElARAhIAAgAigCAAR+IAAgAikDCDcDCEIBBUIACzcDACACQRBqJAALPgEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQhwIgAkEgaiECDAELCyAAKAIAIANBCEEgEH8LPQEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQeyACQRBqIQIMAQsLIAAoAgAgA0EIQRAQfws7AQF/A0AgAgRAIAAoAAAhAyAAIAEoAAA2AAAgASADNgAAIAJBAWshAiABQQRqIQEgAEEEaiEADAELCws2AQF/IwBBIGsiAiQAIAIgACkDACACQQxqEEggAUEBQQFBACACKAIAIAIoAgQQOCACQSBqJAALOQEBfyMAQRBrIgIkACACQQRqIAAgARCNASACKAIIIgAgAigCDBDmASACKAIEIAAQigIgAkEQaiQACzYBAn8jAEEQayIBJAAgAUEEaiAAEGAgASgCCCIAIAEoAgwQ5gEgASgCBCAAEIoCIAFBEGokAAs0AQJ/IwBBEGsiASQAIAFBCGogABBYIAEoAgghACABKAIMIAFBEGokAEGAgMQAIABBAXEbCxIAIAAgAUG0y8AAQRBBBBCiAgsSACAAIAFBpM7AAEEQQQgQogILEgAgACABQYTOwABBIEEIEKICCzYBAX8gACACIAFrIgIQzAEgACgCCCEDIAIEQCAAKAIEIANqIAEgAvwKAAALIAAgAiADajYCCAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBEBAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBECAAsvAAJAIAFpQQFHIABBgICAgHggAWtLcg0AIAAEQCAAIAEQ3gEiAUUNAQsgAQ8LAAsMACAAQdSAwAAQoQILLABBAUF/QQAgACABLwADIAEtAAVBEHRySxsgACABLwAAIAEtAAJBEHRySRsLDAAgAEHwyMAAEKECCzwBAX9BASECAkAgACgCACABEE4NACABKAIAQdizwABBAiABKAIEKAIMEQIADQAgACgCBCABEE4hAgsgAgstAAJAIANpQQFHIAFBgICAgHggA2tLcg0AIAAgASADIAIQMCIARQ0AIAAPCwALlQQBBn8jAEEQayIGJAAQQSIFIAEmASMAQdAAayIEJAAgBEEQaiAAEJEBIAQoAhAhCSAEQUBrIAUQNiAEKAJEIQcCQCAEKAJAIgBBgICAgHhGBEAgBCAHNgIgIARBgYCAgHg2AhwMAQsgBCAEKAJIIgU2AjAgBCAHNgIsIAQgADYCKCAEQQhqIAVB/////wBxIghBBEEQQaTMwAAQkgEgBEEANgI8IAQgBCkDCDcCNCAEQTRqIAgQzQEgBCgCPCEAIAUEQCAAIAhqIAQoAjggAEEEdGohAANAIARBQGsgBxCBASAAQQhqIARByABqKQIANwIAIAAgBCkCQDcCACAAQRBqIQAgB0EQaiEHIAhBAWsiCA0ACyEACyAEIAA2AjwgBCgCOCEFIAQgA/wDOwFGIAQgA0QAABAAAADwQWI7AUQgBCAC/AM7AUIgBCACRAAAEAAAAPBBYjsBQCAEQRxqIAkgBSAFIABBBHRqIARBQGsQKCAEQTRqEIkBIARBKGoQrQELQQAhACAEKAIUQQA2AgAgBCgCGBDbASAEQUBrIARBHGoQigFBASEHIAQoAkQhBQJ/IAQoAkAEQEEAIQggBQwBCyAEKAJIIQggBSEAQQAhB0EACyEFIAYgBzYCDCAGIAU2AgggBiAINgIEIAYgADYCACAEQdAAaiQAIAYoAgAgBigCBCAGKAIIIAYoAgwgBkEQaiQACzYBAX8jAEEQayICJAAgASACQQ9qQeTLwAAQPSEBIABBlYCAgHg2AgAgACABNgIEIAJBEGokAAvHBAEHfyMAQRBrIgYkABBBIgQgACYBIwBB4ABrIgMkACADQSxqIAQQNiADKAIwIQcCQCADKAIsIgRBgICAgHhGBEAgAyAHNgIYIANBgYCAgHg2AhQMAQsgAyADKAI0IgU2AiggAyAHNgIkIAMgBDYCICADQQhqIAVB/////wBxIgRBBEEQQaTMwAAQkgEgA0EANgJUIAMgAykDCDcCTCADQcwAaiAEEM0BIAMoAlQhCCADIAUEfyAEIAhqIAMoAlAgCEEEdGohBQNAIANBLGogBxCBASAFQQhqIANBNGopAgA3AgAgBSADKQIsNwIAIAVBEGohBSAHQRBqIQcgBEEBayIEDQALBSAICzYCVEEQEP8BIgQgAvwDNgIMIAQgAkQAABAAAADwQWI2AgggBCAB/AM2AgQgBCABRAAAEAAAAPBBYjYCACADQYzMwAA2AkQgAyAENgJAIANBAToASCADQQA7ATwgA0EAOwE4IANBADYCNCADQoCAgIDAADcCLCADKAJQIQggAygCVCEJIANB2ABqIgUgBBDOASADQRRqIANBLGoiBCAIIAggCUEEdGogBRAoIAQQmgEgA0HMAGoQiQEgA0EgahCtAQsgA0EsaiADQRRqEIoBIAMoAjAhBQJ/IAMoAiwEQEEBIQdBACEEQQAMAQtBACEHIAUhBEEAIQUgAygCNAshCSAGIAc2AgwgBiAFNgIIIAYgCTYCBCAGIAQ2AgAgA0HgAGokACAGKAIAIAYoAgQgBigCCCAGKAIMIAZBEGokAAsqAANAIAEEQCAAKAIAIABBBGooAgAQjgIgAUEBayEBIABBEGohAAwBCwsL9AECAn8BfiMAQRBrIgIkACACQQE7AQwgAiABNgIIIAIgADYCBCMAQRBrIgEkACACQQRqIgApAgAhBCABIAA2AgwgASAENwIEIwBBEGsiACQAIAFBBGoiASgCACICKAIMIQMCQAJAAkACQCACKAIEDgIAAQILIAMNAUEBIQJBACEDDAILIAMNACACKAIAIgIoAgQhAyACKAIAIQIMAQsgAEGAgICAeDYCACAAIAE2AgwgASgCCCIBLQAIIQIgAS0ACRogAEEfIAIQdQALIAAgAzYCBCAAIAI2AgAgASgCCCIBLQAIIQIgAS0ACRogAEEgIAIQdQALLAAgACAALQAEIAFBLkZyOgAEIAAoAgAiACgCACABIABBBGooAgAoAhARAQALoAIBA38jAEEQayIEJAAjAEFAaiIDJAAgA0EIaiAAEJEBIAMoAgghACADIAL8AzsBGiADIAJEAAAQAAAA8EFiOwEYIAMgAfwDOwEWIAMgAUQAABAAAADwQWI7ARQgA0EcaiAAIANBFGoQKgJAAkAgAygCJCIABEAgA0EoaiIFQYiZwABBBBCMASAAQQFrIgBFDQEgA0E0aiAAEJABIAUgAygCOCIAIAMoAjwQgQIgAygCNCAAEI4CDAELIANBgICAgHg2AigMAQsgA0EoakGMmcAAQZOZwAAQugELIANBHGoQ4QEgAygCDEEANgIAIAMoAhAQ2wEgAyADQShqEJgBIAQgAykDADcCACADQUBrJAAgBCgCACAEKAIEIARBEGokAAstAQF+QajAwQApAwAhAUGowMEAQgA3AwAgACABQiCIPgIEIAAgAadBAUY2AgALigEBBH8jAEEQayIDJAAjAEEwayICJAAgAkEQaiAAIAEQpQEgAkEkaiACKAIQIgAgAigCFCIBEEsgAkEYaiIEIAIoAigiBSACKAIsEI0BIAIoAiQgBRDsASABIAAQigIgAkEIaiAEEJsBIAMgAikDCDcCACACQTBqJAAgAygCACADKAIEIANBEGokAAspAQJ/IAFBABDiASECIAFBARDiASEDIAEQ+wEgACADNgIEIAAgAjYCAAskAQF/IAAoAgAgACgCCCICayABSQRAIAAgAiABQQFBARCjAQsLJAEBfyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgAUEEQRAQowELCyoAIAAgASgCDDsBBiAAIAEoAgg7AQQgACABKAIEOwECIAAgASgCADsBAAskACAAIAAoAgBBgICAgHhGQQJ0aiIAKAIAIABBBGooAgAQigILJQAgAEUEQEHk0MAAQTIQlAIACyAAIAIgAyAEIAUgASgCEBERAAtTAQJ/IAEgA0YEf0EAIQMCQCABRQ0A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LXdpZHRoLTAuMS4xNFxzcmNcdGFibGVzLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcd2FzbS1iaW5kZ2VuLTAuMi4xMDBcc3JjXGNvbnZlcnRcc2xpY2VzLnJzAEM6XFVzZXJzXGRhdmlkXC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2FsbG9jL3NyYy9zdHIucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvY29yZS9zcmMvaXRlci90cmFpdHMvaXRlcmF0b3IucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvY29yZS9zcmMvc3RyL3BhdHRlcm4ucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vZmx0MmRlYy9zdHJhdGVneS9kcmFnb24ucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vYmlnbnVtLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcY29uc29sZV9zdGF0aWNfdGV4dC0wLjkuMFxzcmNcYW5zaS5ycwBDOlxVc2Vyc1xkYXZpZFwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcc2VyZGUtMS4wLjIxOVxzcmNcZGVcdmFsdWUucnMAbGlicmFyeS9jb3JlL3NyYy91bmljb2RlL3ByaW50YWJsZS5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLTEuMC4yMTlcc3JjXHByaXZhdGVcZGUucnMAQzpcVXNlcnNcZGF2aWRcLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvYWxsb2Mvc3JjL3NsaWNlLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcY29uc29sZV9zdGF0aWNfdGV4dC0wLjkuMFxzcmNcd29yZC5ycwBsaWJyYXJ5L2NvcmUvc3JjL2ZtdC9tb2QucnMAbGlicmFyeS9jb3JlL3NyYy9zdHIvbW9kLnJzAEM6XFVzZXJzXGRhdmlkXC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL3NsaWNlL21vZC5ycwBDOlxVc2Vyc1xkYXZpZFwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvcmF3X3ZlYy9tb2QucnMAbGlicmFyeS9jb3JlL3NyYy9udW0vZmx0MmRlYy9tb2QucnMAL3J1c3QvZGVwcy9kbG1hbGxvYy0wLjIuOS9zcmMvZGxtYWxsb2MucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxqcy1zeXMtMC4zLjc3XHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3ZlxvbmNlX2NlbGwtMS4yMS4zXHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMu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ZWZnAmgCaWprbAICbW5vcAJxcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnR1AgICAgICAnZ3OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTl4OTk5OTk5OTk5eXoCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAns5OXw5OX0CAgICAgICAgICAgICAgICAgICfgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAn8CAgKAgYICAgICAgICAgICAgICAgKDhAICAgICAgICAgKFhnUCAocCAgKIAgICAgICAomKAgICAgICAgICAgICAouMAo2OAo+QkZKTlJWWApcCApiZmpsCAgICAgICAgICOTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5nB0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dHR0dAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAnQICAgKenwIEAgUGBwgJCgsMDQ4PEBESExQVFhcYGRobHB0CAh4CAgICAgICHyAhIiMCJCUmJygpAioCAgICoKGio6Slpi6nqKmqq6ytMwICAgICAq4CAjU2NwI4OTo7PD0+rzk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OTk5OUwCAgICArBOT7GFhnUCAocCAgKIAgICAgICAomKAgICAgICAgICAgICAouMsrOOAo+QkZKTlJWWApcCApiZmpsCAgICAgICAgICVVV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEG84sAACylVVVVVFQBQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQBB7+LAAAvEARBBEFVVVVVVV1VVVVVVVVVVVVFVVQAAQFT13VVVVVVVVVVVFQAAAAAAVVVVVfxdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFABQAFARQVVVVVVVVVRVRVVVVVVVVVQAAAAAAAEBVVVVVVVVVVVXVV1VVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVVVUVAABVVVFVVVVVVQUQAAABAVBVVVVVVVVVVVVVAVVVVVVV/////39VVVVQVQAAVVVVVVVVVVVVVQUAQcDkwAALmARAVVVVVVVVVVVVVVVVVUVUAQBUUQEAVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVUQBVFVRVRVVVQVVVVVVVVVFQVVVVVVVVVVVVVVVVVVVVEEVFFBRVVVVVVVVVVBRVVVBVVVVVVVVVVVVVVVVVVVUARBUUVVVVVUFVVVVVVUFAFFVVVVVVVVVVVVVVVVVVQQBVFVRVQFVVQVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVRVRVVVFVFVVVVVVVVVVVVVVUVFVVVVVVVVVVVVVVVVUEVAUEUFVBVVUFVVVVVVVVVVFVVVVVVVVVVVVVVVVVVRREBQRQVUFVVQVVVVVVVVVVUFVVVVVVVVVVVVVVVVUVRAFUVUFVFVVVBVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVFFQVEVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVEAQFVVFQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUQAAVFVVAEBVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVEVFVVVVVVVVVVVVVVVVVAQAAQAAEVQEAAAEAAAAAAAAAAFRVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUBBABBQVVVVVVVVVAFVFVVVQFUVVVFQVVRVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqgBBgOnAAAuQA1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVQVUVVVVVVVVBVVVVVVVVVUFVVVVVVVVVQVVVVV///33//3XX3fW1ddVEABQVUUBAABVV1FVVVVVVVVVVVVVFQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVVFVFVQFVVVVVVVVVVVVVVVVVVVVVVVVVVVVXFRRVVVVVVVVVVVVVVVVVVUUAQEQBAFQVAAAUVVVVVVVVVVVVVVVVAAAAAAAAAEBVVVVVVVVVVVVVVVUAVVVVVVVVVVVVVVVVAABQBVVVVVVVVVVVVRUAAFVVVVBVVVVVVVVVBVAQUFVVVVVVVVVVVVVVVVVFUBFQVVVVVVVVVVVVVVVVVVUAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAEAFRRVVRQVVVVVVVVVVVVVVVVVVVVVVUAQaDswAALkwhVVRUAVVVVVVVVBUBVVVVVVVVVVVVVVVUAAAAAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAAAAAAAAAABUVVVVVVVVVVVV9VVVVWlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf1X11VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV9VVVVVVVfVVVVVVVVVVVVVVVV////VVVVVVVVVVVVVdVVVVVV1VVVVV1V9VVVVVV9VV9VdVVXVVVVVXVV9V11XVVd9VVVVVVVVVVXVVVVVVVVVVV31d9VVVVVVVVVVVVVVVVVVVX9VVVVVVVVV1VV1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVXVV1VVVVVVVVVVVVVVVVddVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVQVVVVVVVVVVVVVVVVVVVV/f///////////////19V1VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAAAAAAAAAAKqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVqqqqqqqqqqqqqqqqqqoKAKqqqmqpqqqqqqqqqqqqqqqqqqqqqqqqqqpqgaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVqaqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqKqqqqqqqqqqqmqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVZWqqqqqqqqqqqqqqmqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVVVVVVVVVVVVVVVVVVVVaqqqlaqqqqqqqqqqqqqqqqqalVVVVVVVVVVVVVVVVVfVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUAAAFBVVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVVUFVVVUVFFVVVVVVVVUFVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVAAAAAFBVRRVVVVVVVVVVVVUFAFBVVVVVVRUAAFBVVVWqqqqqqqqqVkBVVVVVVVVVVVVVVRUFUFBVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVQFAQUFVVRVVVVRVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVUEFFQFUVVVVVVVVVVVVVVQVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVFFVVVVVqqqqqqqqqqqqVVVVAAAAAABAFQBBv/TAAAvhDFVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQAAAPCqqlpVAAAAAKqqqqqqqqqqaqqqqqpqqlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRWpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpWVVVVVVVVVVVVVVVVVVUFVFVVVVVVVVVVVVVVVVVVVapqVVUAAFRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUBVAUFVAFVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVRVVVVVVVVVVVVVVVVVVVVVVVVVAVVVVVVVVVVVVVVVVVVVVVVVBQAAVFVVVVVVVVVVVVVVBVBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVQAAAEBVVVVVVVVVVVVVFFRVFVBVVVVVVVVVVVVVVRVAQVVFVVVVVVVVVVVVVVVVVVVVQFVVVVVVVVVVFQABAFRVVVVVVVVVVVVVVVVVVRVVVVVQVVVVVVVVVVVVVVVVBQBABVUBFFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVAEVUVRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVFQBAVVVVVVVQVVVVVVVVVVVVVVVVVRVEVFVVVVUVVVVVBQBUAFRVVVVVVVVVVVVVVVVVVVVVAAAFRFVVVVVVRVVVVVVVVVVVVVVVVVVVVVVVVVVVFABEEQRVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUFUFUQVFVVVVVVVVBVVVVVVVVVVVVVVVVVVVVVVVVVVRUAQBFUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVRABBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAQUQAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFUVBBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUABVVUVVVVVVVVVQEAQFVVVVVVVVVVVRUABEBVFVVVAUABVVVVVVVVVVVVVQAAAABAUFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQAAQVVVVVVVVVVVVVVVVVVVVVVVVVVUFAAAAAAAFAARBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAUBFEAAAVVVVVVVVVVVVVVVVVVVVVVVVUBFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVFVVQFVVVVVVVVVVVVVVVQVAVURVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBUAAABQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAVFVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVFVVVVVVVVVVVVVVVVVVVVRVAVVVVVVVVVVVVVVVVVVVVVVVVVapUVVVaVVVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVVWqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVVVaqqVlVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqpqmmqqqqqqqqqqmpVVVVlVVVVVVVVVWpZVVVVqlVVqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpVVVVVVVVVVUEAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUAQauBwQALdVAAAAAAAEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVURUAUAAAAAQAEAVVVVVVVVVQVQVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVBVRVVVVVVVVVVVVVVVVVVQBBrYLBAAsCQBUAQbuCwQALxQZUVVFVVVVUVVVVVRUAAQAAAFVVVVVVVVVVVVVVVVVVVVVVVVVVAEAAAAAAFAAQBEBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRVVVVVVVVVVVVVVVVVVVVQBVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAFVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVQBAVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVAEBVVVVVVVVVVVVVVVVVVVdVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV1VVVVVVVVVVVVVVVVVVVVXX9/39VVVVVVVVVVVVVVVVVVVVVVVX1////////blVVVaqquqqqqqrq+r+/VaqqVlVfVVVVqlpVVVVVVVX//////////1dVVf3/3///////////////////////9///////VVVV/////////////3/V/1VVVf////9XV///////////////////////f/f/////////////////////////////////////////////////////////////1////////////////////19VVdV/////////VVVVVXVVVVVVVVV9VVVVV1VVVVVVVVVVVVVVVVVVVVVVVVVV1f///////////////////////////1VVVVVVVVVVVVVVVf//////////////////////X1VXf/1V/1VV1VdV//9XVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVV////VVdVVVVVVVX//////////////3///9//////////////////////////////////////////////////////////////VVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVf///1f//1dV///////////////f/19V9f///1X//1dV//9XVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqpaVVVVVVVVVVVZllVhqqVZqlVVVVVVlVVVVVVVVVWVVVUAQY6JwQALAQMAQZyJwQAL7AdVVVVVVZVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVRUAlmpaWmqqBUCmWZVlVVVVVVVVVVUAAAAAVVZVValWVVVVVVVVVVVVVlVVVVVVVVVVAAAAAAAAAABUVVVVlVlZVVVlVVVpVVVVVVVVVVVVVVWVVpVqqqqqVaqqWlVVVVlVqqqqVVVVVWVVVVpVVVVVpWVWVVVVlVVVVVVVVaaWmpZZWWWplqqqZlWqVVpZVVpWZVVVVWqqpaVaVVVVpapaVVVZWVVVWVVVVVVVlVVVVVVVVVVVVVVVVVVVVVVVVVVVZVX1VVVVaVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqaqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqVaqqqqqqqqqqqlVVVaqqqqqlWlVVmqpaVaWlVVpapZalWlVVVaVaVZVVVVV9VWlZpVVfVWZVVVVVVVVVVWZV////VVVVmppqmlVVVdVVVVVV1VVVpV1V9VVVVVW9Va+quqqrqqqaVbqq+q66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uLgoKCgoCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcABB9qXBAAuAAXBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcABwAABwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwAEGSp8EACwEMAEH2p8EAC4ABcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwAHAAAHBwcHAgICAgICAgICAgICAgICAgBgYGBgYGBgYGBgYGBgYGBgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCXAAQfapwQALgAFwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAAcAAAcHBwcCcnJycnJycnJycnJycnJyewsLCwsLCwsLCwsLAGBgYGCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJcABB9qvBAAuAAdDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0ADQAADQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NBwAEGSrcEACwEMAEH2rcEAC4ABUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQAFAAAFBQUFArKysrKysrKysrKysrKysrTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTEwFTExMTExMTA5MTAFMDQ4OTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTHAAQfavwQALgAFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFAAUAAAUFBQUCAgICAgICAgICAgICAgICBMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMTExMcABB9rHBAAudAVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUABQAABQUFBQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAUFBQUFBQUFBQUFBQUFBQUABQUFBQUFBQUFBQAFAAQbizwQALM////////////////////////////////////////////////////////////////////wBB9rPBAAuAA3BwcHBwcHAMcHBwcHBwcHBwcHBwcHBwcABwAABwcHBwkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHAAcAAAcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcABBkrfBAAsBDABB9rnBAAu7AlRyaWVkIHRvIHNocmluayB0byBhIGxhcmdlciBjYXBhY2l0eQAA9lwQACQAAAAnBxAAdgAAALkCAAAJAAAATGF6eSBpbnN0YW5jZSBoYXMgcHJldmlvdXNseSBiZWVuIHBvaXNvbmVkAAA0XRAAKgAAAEIIEABaAAAACAMAABkAAAByZWVudHJhbnQgaW5pdAAAeF0QAA4AAABCCBAAWgAAAHoCAAANAAAAbnVsbCBwb2ludGVyIHBhc3NlZCB0byBydXN0cmVjdXJzaXZlIHVzZSBvZiBhbiBvYmplY3QgZGV0ZWN0ZWQgd2hpY2ggd291bGQgbGVhZCB0byB1bnNhZmUgYWxpYXNpbmcgaW4gcnVzdEpzVmFsdWUoKQAKXhAACAAAABJeEAABAAAA2gEQAGkAAADoAAAAAQBBzLzBAAsBNQBwCXByb2R1Y2VycwIIbGFuZ3VhZ2UBBFJ1c3QADHByb2Nlc3NlZC1ieQMFcnVzdGMdMS44OS4wICgyOTQ4Mzg4M2UgMjAyNS0wOC0wNCkGd2FscnVzBjAuMjMuMwx3YXNtLWJpbmRnZW4HMC4yLjEwMAB8D3RhcmdldF9mZWF0dXJlcwcrD211dGFibGUtZ2xvYmFscysTbm9udHJhcHBpbmctZnB0b2ludCsLYnVsay1tZW1vcnkrCHNpZ24tZXh0Kw9yZWZlcmVuY2UtdHlwZXMrCm11bHRpdmFsdWUrD2J1bGstbWVtb3J5LW9wdA==");
var wasmModule = new WebAssembly.Module(bytes);
var wasm2 = new WebAssembly.Instance(wasmModule, {
  "./rs_lib.internal.js": rs_lib_internal_exports
});
__wbg_set_wasm(wasm2.exports);
wasm2.exports.__wbindgen_start();
function base64decode(b64) {
  const binString = atob(b64);
  const size = binString.length;
  const bytes3 = new Uint8Array(size);
  for (let i = 0; i < size; i++) {
    bytes3[i] = binString.charCodeAt(i);
  }
  return bytes3;
}

// npm/esm/deps/jsr.io/@david/console-static-text/0.3.4/mod.js
var scopesSymbol = Symbol();
var getItemsSymbol = Symbol();
var renderOnceSymbol = Symbol();
var onItemsChangedEventsSymbol = Symbol();
var StaticTextScope = class {
  #container;
  #items = [];
  constructor(container) {
    this.#container = container;
    this.#container[scopesSymbol].push(this);
  }
  [Symbol.dispose]() {
    this.#items.length = 0;
    const index = this.#container[scopesSymbol].indexOf(this);
    if (index >= 0) {
      this.#container[scopesSymbol].splice(index, 1);
      this.#container.refresh();
      this.#notifyContainerOnItemsChanged();
    }
  }
  [getItemsSymbol]() {
    return this.#items;
  }
  setText(textOrItems) {
    if (typeof textOrItems === "string") {
      if (textOrItems.length === 0) {
        textOrItems = [];
      } else {
        textOrItems = [{ text: textOrItems }];
      }
    } else if (textOrItems instanceof Function) {
      textOrItems = [{ text: textOrItems }];
    }
    this.#items = textOrItems;
    this.#notifyContainerOnItemsChanged();
  }
  #notifyContainerOnItemsChanged() {
    for (const onChanged of this.#container[onItemsChangedEventsSymbol]) {
      onChanged();
    }
  }
  logAbove(textOrItems, size) {
    this.#container.logAbove(textOrItems, size);
  }
  /** Forces a refresh of the container. */
  refresh(size) {
    this.#container.refresh(size);
  }
};
var StaticTextContainer2 = class {
  #container = new StaticTextContainer();
  [scopesSymbol] = [];
  #getConsoleSize;
  #onWriteText;
  [onItemsChangedEventsSymbol] = [];
  constructor(onWriteText, getConsoleSize) {
    this.#onWriteText = onWriteText;
    this.#getConsoleSize = getConsoleSize;
  }
  /** If any scope has text or items. */
  hasText() {
    return this[scopesSymbol].some((s) => s[getItemsSymbol]().length > 0);
  }
  /** Creates a scope which can be used to set the text for. */
  createScope() {
    return new StaticTextScope(this);
  }
  /** Gets the containers current console size. */
  getConsoleSize() {
    return this.#getConsoleSize();
  }
  logAbove(textOrItems, size) {
    size ??= this.getConsoleSize();
    let detailedItem;
    if (typeof textOrItems === "string") {
      if (textOrItems.length === 0) {
        detailedItem = [];
      } else {
        detailedItem = [{ text: textOrItems }];
      }
    } else {
      detailedItem = Array.from(resolveItems(textOrItems, size));
    }
    this.withTempClear(() => {
      this[renderOnceSymbol](detailedItem, size);
    }, size);
  }
  /** Clears the displayed text for the provided action. */
  withTempClear(action, size) {
    size ??= this.getConsoleSize();
    this.clear(size);
    try {
      action();
    } finally {
      this.refresh(size);
    }
  }
  /** Clears the text and flushes it to the console. */
  clear(size) {
    const newText = this.renderClearText(size);
    if (newText != null) {
      this.#onWriteText(newText);
    }
  }
  /** Refreshes the static text (writes it to the console). */
  refresh(size) {
    const newText = this.renderRefreshText(size);
    if (newText != null) {
      this.#onWriteText(newText);
    }
  }
  /**
   * Renders the clear text.
   *
   * Note: this is a low level method. Prefer calling `.clear()` instead.
   */
  renderClearText(size) {
    size = size ?? this.#getConsoleSize();
    return this.#container.clear_text(size?.columns, size?.rows);
  }
  /**
   * Renders the next text that should be displayed.
   *
   * Note: This is a low level method. Prefer calling `.refresh()` instead.
   */
  renderRefreshText(size) {
    size ??= this.#getConsoleSize();
    const items = Array.from(this.#resolveItems(size));
    return this.#container.render_text(items, size?.columns, size?.rows);
  }
  *#resolveItems(size) {
    for (const provider of this[scopesSymbol]) {
      for (const item of provider[getItemsSymbol]()) {
        yield* resolveItem(item, size);
      }
    }
  }
  [renderOnceSymbol](items, size) {
    const newText = static_text_render_once(items, size?.columns, void 0);
    if (newText != null) {
      this.#onWriteText(newText + "\r\n");
    }
  }
};
var encoder = new TextEncoder();
var RenderInterval = class {
  #count = 0;
  #intervalId = void 0;
  #container;
  #intervalMs = 60;
  #containerSubscription;
  #disposed = false;
  /**
   * Constructs a new `RenderInterval` from the provided `StaticTextContainer`.
   * @param container Container to render every `intervalMs`.
   */
  constructor(container) {
    this.#container = container;
  }
  [Symbol.dispose]() {
    this.#markStop();
    this.#disposed = true;
  }
  /** Gets how often this interval will refresh the output.
   * @default `60`
   */
  get intervalMs() {
    return this.#intervalMs;
  }
  /** Sets how often this should refresh the output. */
  set intervalMs(value) {
    if (this.#intervalMs === value) {
      return;
    }
    this.#intervalMs = value;
    if (this.#intervalId != null) {
      this.#stopInterval();
      this.#startInterval();
    }
  }
  /**
   * Starts the render task returning a disposable for stopping it.
   *
   * Note that it's perfectly fine to just start this and never dispose it.
   * The underlying interval won't run if there's no items in the container.
   */
  start() {
    if (this.#disposed) {
      throw new Error("Cannot call .start() on a disposed RenderInterval.");
    }
    if (this.#count === 0) {
      this.#markStart();
    }
    this.#count++;
    let hasCalled = false;
    return {
      [Symbol.dispose]: () => {
        if (!hasCalled && !this.#disposed) {
          hasCalled = true;
          this.#count--;
          if (this.#count === 0) {
            this.#markStop();
            this.#container.refresh();
          }
        }
      }
    };
  }
  #markStart() {
    this.#addSubscriptionToContainer();
    if (this.#container.hasText()) {
      this.#container.refresh();
    }
  }
  #markStop() {
    this.#removeSubscriptionFromContainer();
    this.#stopInterval();
  }
  #startInterval() {
    this.#container.refresh();
    this.#intervalId = setInterval(() => {
      this.#container.refresh();
    }, this.#intervalMs);
  }
  #stopInterval() {
    if (this.#intervalId == null) {
      return;
    }
    clearInterval(this.#intervalId);
    this.#intervalId = void 0;
  }
  #addSubscriptionToContainer() {
    let lastValue = this.#container.hasText();
    this.#containerSubscription = () => {
      const hasItems = this.#container.hasText();
      if (hasItems != lastValue) {
        lastValue = hasItems;
        if (hasItems) {
          this.#startInterval();
        } else {
          this.#stopInterval();
          this.#container.refresh();
        }
      }
    };
    this.#container[onItemsChangedEventsSymbol].push(this.#containerSubscription);
  }
  #removeSubscriptionFromContainer() {
    if (!this.#containerSubscription) {
      return;
    }
    const events = this.#container[onItemsChangedEventsSymbol];
    const removeIndex = events.indexOf(this.#containerSubscription);
    if (removeIndex >= 0) {
      events.splice(removeIndex, 1);
      this.#containerSubscription = void 0;
    }
  }
};
var staticText = new StaticTextContainer2((text) => {
  process.stderr.write(encoder.encode(text));
}, () => maybeConsoleSize());
var renderInterval = new RenderInterval(staticText);
function renderTextItems(items, size) {
  size ??= maybeConsoleSize();
  const wasmItems = Array.from(resolveItems(items, size));
  return static_text_render_once(wasmItems, size?.columns, size?.rows) ?? "";
}
function maybeConsoleSize() {
  try {
    for (const stream of [process.stdout, process.stderr]) {
      if (stream.isTTY) {
        return {
          columns: stream.columns,
          rows: stream.rows
        };
      }
    }
    return void 0;
  } catch {
    return void 0;
  }
}
function stripAnsiCodes(text) {
  return strip_ansi_codes(text);
}
function* resolveDeferred(deferred, size) {
  const value = deferred(size);
  if (value instanceof Array) {
    yield* resolveItems(value, size);
  } else {
    yield* resolveItem(value, size);
  }
}
function* resolveItems(value, size) {
  for (const item of value) {
    yield* resolveItem(item, size);
  }
}
function* resolveItem(item, size) {
  if (typeof item === "string") {
    if (item.length > 0) {
      yield { text: item };
    }
  } else if (item instanceof Function) {
    yield* resolveDeferred(item, size);
  } else if (item.text instanceof Function) {
    const hangingIndent = item.hangingIndent ?? 0;
    for (const value of resolveDeferred(item.text, size)) {
      yield {
        ...value,
        hangingIndent: hangingIndent + (value.hangingIndent ?? 0)
      };
    }
  } else if (item.text.length > 0) {
    yield item;
  }
}

// npm/esm/deps/jsr.io/@std/bytes/1.0.6/copy.js
function copy2(src, dst, offset = 0) {
  offset = Math.max(0, Math.min(offset, dst.byteLength));
  const dstBytesAvailable = dst.byteLength - offset;
  if (src.byteLength > dstBytesAvailable) {
    src = src.subarray(0, dstBytesAvailable);
  }
  dst.set(src, offset);
  return src.byteLength;
}

// npm/esm/deps/jsr.io/@std/io/0.225.3/buffer.js
var MIN_READ = 32 * 1024;
var MAX_SIZE = 2 ** 32 - 2;
var Buffer2 = class {
  #buf;
  // contents are the bytes buf[off : len(buf)]
  #off = 0;
  // read at buf[off], write at buf[buf.byteLength]
  /**
   * Constructs a new instance with the specified {@linkcode ArrayBuffer} as its
   * initial contents.
   *
   * @param ab The ArrayBuffer to use as the initial contents of the buffer.
   */
  constructor(ab) {
    if (ab === void 0) {
      this.#buf = new Uint8Array(0);
    } else if (ab instanceof SharedArrayBuffer) {
      this.#buf = new Uint8Array(ab);
    } else {
      this.#buf = new Uint8Array(ab);
    }
  }
  /**
   * Returns a slice holding the unread portion of the buffer.
   *
   * The slice is valid for use only until the next buffer modification (that
   * is, only until the next call to a method like `read()`, `write()`,
   * `reset()`, or `truncate()`). If `options.copy` is false the slice aliases the buffer content at
   * least until the next buffer modification, so immediate changes to the
   * slice will affect the result of future reads.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * const slice = buf.bytes();
   * assertEquals(new TextDecoder().decode(slice), "Hello, world!");
   * ```
   *
   * @param options The options for the slice.
   * @returns A slice holding the unread portion of the buffer.
   */
  bytes(options = { copy: true }) {
    if (options.copy === false)
      return this.#buf.subarray(this.#off);
    return this.#buf.slice(this.#off);
  }
  /**
   * Returns whether the unread portion of the buffer is empty.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * assertEquals(buf.empty(), true);
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * assertEquals(buf.empty(), false);
   * ```
   *
   * @returns `true` if the unread portion of the buffer is empty, `false`
   *          otherwise.
   */
  empty() {
    return this.#buf.byteLength <= this.#off;
  }
  /**
   * A read only number of bytes of the unread portion of the buffer.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * assertEquals(buf.length, 13);
   * ```
   *
   * @returns The number of bytes of the unread portion of the buffer.
   */
  get length() {
    return this.#buf.byteLength - this.#off;
  }
  /**
   * The read only capacity of the buffer's underlying byte slice, that is,
   * the total space allocated for the buffer's data.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * assertEquals(buf.capacity, 0);
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * assertEquals(buf.capacity, 13);
   * ```
   *
   * @returns The capacity of the buffer.
   */
  get capacity() {
    return this.#buf.buffer.byteLength;
  }
  /**
   * Discards all but the first `n` unread bytes from the buffer but
   * continues to use the same allocated storage. It throws if `n` is
   * negative or greater than the length of the buffer.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * buf.truncate(6);
   * assertEquals(buf.length, 6);
   * ```
   *
   * @param n The number of bytes to keep.
   */
  truncate(n) {
    if (n === 0) {
      this.reset();
      return;
    }
    if (n < 0 || n > this.length) {
      throw new Error("Buffer truncation out of range");
    }
    this.#reslice(this.#off + n);
  }
  /**
   * Resets the contents
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   * buf.reset();
   * assertEquals(buf.length, 0);
   * ```
   */
  reset() {
    this.#reslice(0);
    this.#off = 0;
  }
  #tryGrowByReslice(n) {
    const l = this.#buf.byteLength;
    if (n <= this.capacity - l) {
      this.#reslice(l + n);
      return l;
    }
    return -1;
  }
  #reslice(len) {
    if (len > this.#buf.buffer.byteLength) {
      throw new RangeError("Length is greater than buffer capacity");
    }
    this.#buf = new Uint8Array(this.#buf.buffer, 0, len);
  }
  /**
   * Reads the next `p.length` bytes from the buffer or until the buffer is
   * drained. Returns the number of bytes read. If the buffer has no data to
   * return, the return is EOF (`null`).
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * const data = new Uint8Array(5);
   * const res = await buf.read(data);
   *
   * assertEquals(res, 5);
   * assertEquals(new TextDecoder().decode(data), "Hello");
   * ```
   *
   * @param p The buffer to read data into.
   * @returns The number of bytes read.
   */
  readSync(p) {
    if (this.empty()) {
      this.reset();
      if (p.byteLength === 0) {
        return 0;
      }
      return null;
    }
    const nread = copy2(this.#buf.subarray(this.#off), p);
    this.#off += nread;
    return nread;
  }
  /**
   * Reads the next `p.length` bytes from the buffer or until the buffer is
   * drained. Resolves to the number of bytes read. If the buffer has no
   * data to return, resolves to EOF (`null`).
   *
   * NOTE: This methods reads bytes synchronously; it's provided for
   * compatibility with `Reader` interfaces.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * await buf.write(new TextEncoder().encode("Hello, world!"));
   *
   * const data = new Uint8Array(5);
   * const res = await buf.read(data);
   *
   * assertEquals(res, 5);
   * assertEquals(new TextDecoder().decode(data), "Hello");
   * ```
   *
   * @param p The buffer to read data into.
   * @returns The number of bytes read.
   */
  read(p) {
    const rr = this.readSync(p);
    return Promise.resolve(rr);
  }
  /**
   * Writes the given data to the buffer.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const data = new TextEncoder().encode("Hello, world!");
   * buf.writeSync(data);
   *
   * const slice = buf.bytes();
   * assertEquals(new TextDecoder().decode(slice), "Hello, world!");
   * ```
   *
   * @param p The data to write to the buffer.
   * @returns The number of bytes written.
   */
  writeSync(p) {
    const m = this.#grow(p.byteLength);
    return copy2(p, this.#buf, m);
  }
  /**
   * Writes the given data to the buffer. Resolves to the number of bytes
   * written.
   *
   * > [!NOTE]
   * > This methods writes bytes synchronously; it's provided for compatibility
   * > with the {@linkcode Writer} interface.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const data = new TextEncoder().encode("Hello, world!");
   * await buf.write(data);
   *
   * const slice = buf.bytes();
   * assertEquals(new TextDecoder().decode(slice), "Hello, world!");
   * ```
   *
   * @param p The data to write to the buffer.
   * @returns The number of bytes written.
   */
  write(p) {
    const n = this.writeSync(p);
    return Promise.resolve(n);
  }
  #grow(n) {
    const m = this.length;
    if (m === 0 && this.#off !== 0) {
      this.reset();
    }
    const i = this.#tryGrowByReslice(n);
    if (i >= 0) {
      return i;
    }
    const c = this.capacity;
    if (n <= Math.floor(c / 2) - m) {
      copy2(this.#buf.subarray(this.#off), this.#buf);
    } else if (c + n > MAX_SIZE) {
      throw new Error(`The buffer cannot be grown beyond the maximum size of "${MAX_SIZE}"`);
    } else {
      const buf = new Uint8Array(Math.min(2 * c + n, MAX_SIZE));
      copy2(this.#buf.subarray(this.#off), buf);
      this.#buf = buf;
    }
    this.#off = 0;
    this.#reslice(Math.min(m + n, MAX_SIZE));
    return m;
  }
  /** Grows the buffer's capacity, if necessary, to guarantee space for
   * another `n` bytes. After `.grow(n)`, at least `n` bytes can be written to
   * the buffer without another allocation. If `n` is negative, `.grow()` will
   * throw. If the buffer can't grow it will throw an error.
   *
   * Based on Go Lang's
   * {@link https://golang.org/pkg/bytes/#Buffer.Grow | Buffer.Grow}.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * buf.grow(10);
   * assertEquals(buf.capacity, 10);
   * ```
   *
   * @param n The number of bytes to grow the buffer by.
   */
  grow(n) {
    if (n < 0) {
      throw new Error("Buffer growth cannot be negative");
    }
    const m = this.#grow(n);
    this.#reslice(m);
  }
  /**
   * Reads data from `r` until EOF (`null`) and appends it to the buffer,
   * growing the buffer as needed. It resolves to the number of bytes read.
   * If the buffer becomes too large, `.readFrom()` will reject with an error.
   *
   * Based on Go Lang's
   * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const r = new Buffer(new TextEncoder().encode("Hello, world!"));
   * const n = await buf.readFrom(r);
   *
   * assertEquals(n, 13);
   * ```
   *
   * @param r The reader to read from.
   * @returns The number of bytes read.
   */
  async readFrom(r) {
    let n = 0;
    const tmp = new Uint8Array(MIN_READ);
    while (true) {
      const shouldGrow = this.capacity - this.length < MIN_READ;
      const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length);
      const nread = await r.read(buf);
      if (nread === null) {
        return n;
      }
      if (shouldGrow)
        this.writeSync(buf.subarray(0, nread));
      else
        this.#reslice(this.length + nread);
      n += nread;
    }
  }
  /** Reads data from `r` until EOF (`null`) and appends it to the buffer,
   * growing the buffer as needed. It returns the number of bytes read. If the
   * buffer becomes too large, `.readFromSync()` will throw an error.
   *
   * Based on Go Lang's
   * {@link https://golang.org/pkg/bytes/#Buffer.ReadFrom | Buffer.ReadFrom}.
   *
   * @example Usage
   * ```ts
   * import { Buffer } from "@std/io/buffer";
   * import { assertEquals } from "@std/assert/equals";
   *
   * const buf = new Buffer();
   * const r = new Buffer(new TextEncoder().encode("Hello, world!"));
   * const n = buf.readFromSync(r);
   *
   * assertEquals(n, 13);
   * ```
   *
   * @param r The reader to read from.
   * @returns The number of bytes read.
   */
  readFromSync(r) {
    let n = 0;
    const tmp = new Uint8Array(MIN_READ);
    while (true) {
      const shouldGrow = this.capacity - this.length < MIN_READ;
      const buf = shouldGrow ? tmp : new Uint8Array(this.#buf.buffer, this.length);
      const nread = r.readSync(buf);
      if (nread === null) {
        return n;
      }
      if (shouldGrow)
        this.writeSync(buf.subarray(0, nread));
      else
        this.#reslice(this.length + nread);
      n += nread;
    }
  }
};

// npm/esm/deps/jsr.io/@std/io/0.225.3/write_all.js
async function writeAll2(writer, data) {
  let nwritten = 0;
  while (nwritten < data.length) {
    nwritten += await writer.write(data.subarray(nwritten));
  }
}
function writeAllSync2(writer, data) {
  let nwritten = 0;
  while (nwritten < data.length) {
    nwritten += writer.writeSync(data.subarray(nwritten));
  }
}

// npm/esm/deps/jsr.io/@std/io/0.225.3/reader_from_stream_reader.js
function readerFromStreamReader(streamReader) {
  const buffer = new Buffer2();
  return {
    async read(p) {
      if (buffer.empty()) {
        const res = await streamReader.read();
        if (res.done) {
          return null;
        }
        await writeAll2(buffer, res.value);
      }
      return buffer.read(p);
    }
  };
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/command.js
import * as path5 from "node:path";
import { fileURLToPath } from "node:url";

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/common.js
import * as fs3 from "node:fs";
import * as path from "node:path";

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/fsFile.js
import * as fs2 from "node:fs";
import { setImmediate } from "node:timers";
import * as nodeUtil from "node:util";
var openAsync = nodeUtil.promisify(fs2.open);
var FsFile2 = class {
  #fd;
  /** Wraps an existing open file descriptor. */
  constructor(fd) {
    this.#fd = fd;
  }
  /** Reads up to `p.length` bytes into `p`, returning the number of bytes
   * read or `null` on EOF. */
  read(p) {
    return new Promise((resolve8, reject) => {
      fs2.read(this.#fd, p, 0, p.length, null, (err, bytesRead) => {
        if (err)
          reject(err);
        else
          resolve8(bytesRead === 0 ? null : bytesRead);
      });
    });
  }
  /** Synchronous variant of {@link FsFile.read}. */
  readSync(p) {
    const bytesRead = fs2.readSync(this.#fd, p);
    return bytesRead === 0 ? null : bytesRead;
  }
  /** Writes the provided bytes to the file, returning the number of bytes
   * written. */
  write(p) {
    return writeAll3(this.#fd, p);
  }
  /** Synchronous variant of {@link FsFile.write}. */
  writeSync(p) {
    return writeSyncAll(this.#fd, p);
  }
  /** Closes the underlying file descriptor. */
  close() {
    try {
      fs2.closeSync(this.#fd);
    } catch {
    }
  }
  /** A `WritableStream` that writes to this file. */
  get writable() {
    const write2 = this.write.bind(this);
    return new WritableStream2({
      async write(chunk) {
        await write2(chunk);
      }
    });
  }
  /** Closes the file when used with `using` declarations. */
  [Symbol.dispose]() {
    this.close();
  }
};
async function open2(filePath, options) {
  const fd = await openAsync(filePath, openOptionsToFlags2(options));
  return new FsFile2(fd);
}
async function create(filePath) {
  const fd = await openAsync(filePath, fs2.constants.O_WRONLY | fs2.constants.O_CREAT | fs2.constants.O_TRUNC);
  return new FsFile2(fd);
}
function openOptionsToFlags2(options) {
  let flags = options.read && options.write ? fs2.constants.O_RDWR : options.write ? fs2.constants.O_WRONLY : fs2.constants.O_RDONLY;
  if (options.create)
    flags |= fs2.constants.O_CREAT;
  if (options.truncate)
    flags |= fs2.constants.O_TRUNC;
  if (options.append)
    flags |= fs2.constants.O_APPEND;
  return flags;
}
function writeSyncAll(fd, data) {
  let offset = 0;
  while (offset < data.length) {
    try {
      const n = fs2.writeSync(fd, data, offset, data.length - offset);
      if (n <= 0)
        break;
      offset += n;
    } catch (err) {
      if (err?.code === "EAGAIN" || err?.code === "EWOULDBLOCK")
        continue;
      throw err;
    }
  }
  return offset;
}
async function writeAll3(fd, data) {
  let offset = 0;
  while (offset < data.length) {
    const n = await writeOnce(fd, data, offset);
    if (n <= 0)
      break;
    offset += n;
  }
  return offset;
}
function writeOnce(fd, data, offset) {
  return new Promise((resolve8, reject) => {
    const attempt = () => {
      fs2.write(fd, data, offset, data.length - offset, null, (err, bytesWritten) => {
        if (err) {
          if (err.code === "EAGAIN" || err.code === "EWOULDBLOCK")
            setImmediate(attempt);
          else
            reject(err);
        } else {
          resolve8(bytesWritten);
        }
      });
    };
    attempt();
  });
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/common.js
var isWindows3 = process.platform === "win32";
function getRealEnvVars() {
  const result = {};
  for (const [key, value] of Object.entries(process.env)) {
    if (value !== void 0) {
      result[key] = value;
    }
  }
  return result;
}
var symbols = {
  writable: Symbol.for("dax.writableStream"),
  readable: Symbol.for("dax.readableStream")
};
function delayToMs(delay) {
  if (typeof delay === "number") {
    return delay;
  } else if (typeof delay === "string") {
    const msMatch = delay.match(/^([0-9]+)ms$/);
    if (msMatch != null) {
      return parseInt(msMatch[1], 10);
    }
    const secondsMatch = delay.match(/^([0-9]+\.?[0-9]*)s$/);
    if (secondsMatch != null) {
      return Math.round(parseFloat(secondsMatch[1]) * 1e3);
    }
    const minutesMatch = delay.match(/^([0-9]+\.?[0-9]*)m$/);
    if (minutesMatch != null) {
      return Math.round(parseFloat(minutesMatch[1]) * 1e3 * 60);
    }
    const minutesSecondsMatch = delay.match(/^([0-9]+\.?[0-9]*)m([0-9]+\.?[0-9]*)s$/);
    if (minutesSecondsMatch != null) {
      return Math.round(parseFloat(minutesSecondsMatch[1]) * 1e3 * 60 + parseFloat(minutesSecondsMatch[2]) * 1e3);
    }
    const hoursMatch = delay.match(/^([0-9]+\.?[0-9]*)h$/);
    if (hoursMatch != null) {
      return Math.round(parseFloat(hoursMatch[1]) * 1e3 * 60 * 60);
    }
    const hoursMinutesMatch = delay.match(/^([0-9]+\.?[0-9]*)h([0-9]+\.?[0-9]*)m$/);
    if (hoursMinutesMatch != null) {
      return Math.round(parseFloat(hoursMinutesMatch[1]) * 1e3 * 60 * 60 + parseFloat(hoursMinutesMatch[2]) * 1e3 * 60);
    }
    const hoursMinutesSecondsMatch = delay.match(/^([0-9]+\.?[0-9]*)h([0-9]+\.?[0-9]*)m([0-9]+\.?[0-9]*)s$/);
    if (hoursMinutesSecondsMatch != null) {
      return Math.round(parseFloat(hoursMinutesSecondsMatch[1]) * 1e3 * 60 * 60 + parseFloat(hoursMinutesSecondsMatch[2]) * 1e3 * 60 + parseFloat(hoursMinutesSecondsMatch[3]) * 1e3);
    }
  }
  throw new Error(`Unknown delay value: ${delay}`);
}
function resolvePath(cwd2, arg) {
  return path.resolve(path.isAbsolute(arg) ? arg : path.join(cwd2, arg));
}
var Box = class {
  value;
  constructor(value) {
    this.value = value;
  }
};
var TreeBox = class _TreeBox {
  #value;
  constructor(value) {
    this.#value = value;
  }
  getValue() {
    let tree = this;
    while (tree.#value instanceof _TreeBox) {
      tree = tree.#value;
    }
    return tree.#value;
  }
  setValue(value) {
    this.#value = value;
  }
  createChild() {
    return new _TreeBox(this);
  }
};
var LoggerTreeBox = class extends TreeBox {
  getValue() {
    const innerValue = super.getValue();
    return (...args) => {
      return staticText.withTempClear(() => {
        innerValue(...args);
      });
    };
  }
};
async function safeLstat(path6) {
  try {
    return await fs3.promises.lstat(path6);
  } catch (err) {
    if (err?.code === "ENOENT") {
      return void 0;
    } else {
      throw err;
    }
  }
}
async function getExecutableShebangFromPath(path6) {
  try {
    const file = await open2(path6, { read: true });
    try {
      return await getExecutableShebang(file);
    } finally {
      try {
        file.close();
      } catch {
      }
    }
  } catch (err) {
    if (err?.code === "ENOENT") {
      return false;
    }
    throw err;
  }
}
var decoder = new TextDecoder2();
async function getExecutableShebang(reader) {
  const text = "#!/usr/bin/env ";
  const buffer = new Uint8Array(text.length);
  const bytesReadCount = await reader.read(buffer);
  if (bytesReadCount !== text.length || decoder.decode(buffer) !== text) {
    return void 0;
  }
  const line = (await readFirstLine(reader)).trim();
  if (line.length === 0) {
    return void 0;
  }
  const dashS = "-S ";
  if (line.startsWith(dashS)) {
    return {
      stringSplit: true,
      command: line.slice(dashS.length)
    };
  } else {
    return {
      stringSplit: false,
      command: line
    };
  }
}
async function readFirstLine(reader) {
  const chunkSize = 1024;
  const chunkBuffer = new Uint8Array(chunkSize);
  const collectedChunks = [];
  let totalLength = 0;
  while (true) {
    const bytesRead = await reader.read(chunkBuffer);
    if (bytesRead == null || bytesRead === 0) {
      break;
    }
    const currentChunk = chunkBuffer.subarray(0, bytesRead);
    const newlineIndex = currentChunk.indexOf(10);
    if (newlineIndex !== -1) {
      collectedChunks.push(currentChunk.subarray(0, newlineIndex));
      totalLength += newlineIndex;
      break;
    } else {
      collectedChunks.push(currentChunk);
      totalLength += bytesRead;
    }
  }
  const finalBytes = new Uint8Array(totalLength);
  let offset = 0;
  for (const chunk of collectedChunks) {
    finalBytes.set(chunk, offset);
    offset += chunk.length;
  }
  return new TextDecoder2().decode(finalBytes);
}
function abortSignalToPromise(signal) {
  const { resolve: resolve8, promise } = Promise.withResolvers();
  const listener = () => {
    signal.removeEventListener("abort", listener);
    resolve8();
  };
  signal.addEventListener("abort", listener);
  return {
    [Symbol.dispose]() {
      signal.removeEventListener("abort", listener);
    },
    promise
  };
}
var nodeErrorPrefix = /^E[A-Z0-9_]+: /;
function errorToString(err) {
  const message = err instanceof Error ? err.message : String(err);
  return message.replace(nodeErrorPrefix, "");
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/args.js
function parseArgKinds(flags) {
  const result = [];
  let had_dash_dash = false;
  for (const arg of flags) {
    if (had_dash_dash) {
      result.push({ arg, kind: "Arg" });
    } else if (arg == "-") {
      result.push({ arg: "-", kind: "Arg" });
    } else if (arg == "--") {
      had_dash_dash = true;
    } else if (arg.startsWith("--")) {
      result.push({ arg: arg.replace(/^--/, ""), kind: "LongFlag" });
    } else if (arg.startsWith("-")) {
      const flags2 = arg.replace(/^-/, "");
      if (!isNaN(parseFloat(flags2))) {
        result.push({ arg, kind: "Arg" });
      } else {
        for (const c of flags2) {
          result.push({ arg: c, kind: "ShortFlag" });
        }
      }
    } else {
      result.push({ arg, kind: "Arg" });
    }
  }
  return result;
}
function bailUnsupported(arg) {
  switch (arg.kind) {
    case "Arg":
      throw Error(`unsupported argument: ${arg.arg}`);
    case "ShortFlag":
      throw Error(`unsupported flag: -${arg.arg}`);
    case "LongFlag":
      throw Error(`unsupported flag: --${arg.arg}`);
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/cat.js
async function catCommand(context) {
  try {
    const code2 = await executeCat(context);
    return { code: code2 };
  } catch (err) {
    return context.error(`cat: ${errorToString(err)}`);
  }
}
async function executeCat(context) {
  const flags = parseCatArgs(context.args);
  let exitCode = 0;
  const buf = new Uint8Array(1024);
  for (const path6 of flags.paths) {
    if (path6 === "-") {
      if (typeof context.stdin === "object") {
        while (!context.signal.aborted) {
          const size = await context.stdin.read(buf);
          if (!size || size === 0) {
            break;
          } else {
            const maybePromise = context.stdout.write(buf.slice(0, size));
            if (maybePromise instanceof Promise) {
              await maybePromise;
            }
          }
        }
        exitCode = context.signal.abortedExitCode ?? 0;
      } else {
        const _assertValue = context.stdin;
        throw new Error(`not supported. stdin was '${context.stdin}'`);
      }
    } else {
      let file;
      try {
        file = await open2(resolvePath(context.cwd, path6), { read: true });
        while (!context.signal.aborted) {
          const size = await file.read(buf);
          if (!size || size === 0) {
            break;
          } else {
            const maybePromise = context.stdout.write(buf.slice(0, size));
            if (maybePromise instanceof Promise) {
              await maybePromise;
            }
          }
        }
        exitCode = context.signal.abortedExitCode ?? 0;
      } catch (err) {
        const maybePromise = context.stderr.writeLine(`cat ${path6}: ${errorToString(err)}`);
        if (maybePromise instanceof Promise) {
          await maybePromise;
        }
        exitCode = 1;
      } finally {
        file?.close();
      }
    }
  }
  return exitCode;
}
function parseCatArgs(args) {
  const paths = [];
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg") {
      paths.push(arg.arg);
    } else {
      bailUnsupported(arg);
    }
  }
  if (paths.length === 0) {
    paths.push("-");
  }
  return { paths };
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/cd.js
import * as fs4 from "node:fs";
async function cdCommand(context) {
  try {
    const dir = await executeCd(context.cwd, context.args);
    return {
      code: 0,
      changes: [{
        kind: "cd",
        dir
      }]
    };
  } catch (err) {
    return context.error(`cd: ${errorToString(err)}`);
  }
}
async function executeCd(cwd2, args) {
  const arg = parseArgs(args);
  const result = resolvePath(cwd2, arg);
  if (!await isDirectory(result)) {
    throw new Error(`${result}: Not a directory`);
  }
  return result;
}
async function isDirectory(path6) {
  try {
    return (await fs4.promises.stat(path6)).isDirectory();
  } catch (err) {
    if (err?.code === "ENOENT") {
      return false;
    } else {
      throw err;
    }
  }
}
function parseArgs(args) {
  if (args.length === 0) {
    throw new Error("expected at least 1 argument");
  } else if (args.length > 1) {
    throw new Error("too many arguments");
  } else {
    return args[0];
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/cpMv.js
import * as fs5 from "node:fs";
import * as path2 from "node:path";
async function cpCommand(context) {
  try {
    await executeCp(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`cp: ${errorToString(err)}`);
  }
}
async function executeCp(cwd2, args) {
  const flags = await parseCpArgs(cwd2, args);
  for (const { from, to } of flags.operations) {
    await doCopyOperation(flags, from, to);
  }
}
async function parseCpArgs(cwd2, args) {
  const paths = [];
  let recursive = false;
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg")
      paths.push(arg.arg);
    else if (arg.arg === "recursive" && arg.kind === "LongFlag" || arg.arg === "r" && arg.kind == "ShortFlag" || arg.arg === "R" && arg.kind === "ShortFlag") {
      recursive = true;
    } else
      bailUnsupported(arg);
  }
  if (paths.length === 0)
    throw Error("missing file operand");
  else if (paths.length === 1)
    throw Error(`missing destination file operand after '${paths[0]}'`);
  return { recursive, operations: await getCopyAndMoveOperations(cwd2, paths) };
}
async function doCopyOperation(flags, from, to) {
  const fromInfo = await safeLstat(from.path);
  if (fromInfo?.isDirectory()) {
    if (flags.recursive) {
      const toInfo = await safeLstat(to.path);
      if (toInfo?.isFile()) {
        throw Error("destination was a file");
      } else if (toInfo?.isSymbolicLink()) {
        throw Error("no support for copying to symlinks");
      } else if (fromInfo.isSymbolicLink()) {
        throw Error("no support for copying from symlinks");
      } else {
        await fs5.promises.cp(from.path, to.path, { recursive: true });
      }
    } else {
      throw Error("source was a directory; maybe specify -r");
    }
  } else {
    await fs5.promises.copyFile(from.path, to.path);
  }
}
async function mvCommand(context) {
  try {
    await executeMove(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`mv: ${errorToString(err)}`);
  }
}
async function executeMove(cwd2, args) {
  const flags = await parseMvArgs(cwd2, args);
  for (const { from, to } of flags.operations) {
    await fs5.promises.rename(from.path, to.path);
  }
}
async function parseMvArgs(cwd2, args) {
  const paths = [];
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg")
      paths.push(arg.arg);
    else
      bailUnsupported(arg);
  }
  if (paths.length === 0)
    throw Error("missing operand");
  else if (paths.length === 1)
    throw Error(`missing destination file operand after '${paths[0]}'`);
  return { operations: await getCopyAndMoveOperations(cwd2, paths) };
}
async function getCopyAndMoveOperations(cwd2, paths) {
  const specified_destination = paths.splice(paths.length - 1, 1)[0];
  const destination = resolvePath(cwd2, specified_destination);
  const fromArgs = paths;
  const operations = [];
  if (fromArgs.length > 1) {
    if (!await safeLstat(destination).then((p) => p?.isDirectory())) {
      throw Error(`target '${specified_destination}' is not a directory`);
    }
    for (const from of fromArgs) {
      const fromPath = resolvePath(cwd2, from);
      const toPath = path2.join(destination, path2.basename(fromPath));
      operations.push({
        from: {
          specified: from,
          path: fromPath
        },
        to: {
          specified: specified_destination,
          path: toPath
        }
      });
    }
  } else {
    const fromPath = resolvePath(cwd2, fromArgs[0]);
    const toPath = await safeLstat(destination).then((p) => p?.isDirectory()) ? calculateDestinationPath(destination, fromPath) : destination;
    operations.push({
      from: {
        specified: fromArgs[0],
        path: fromPath
      },
      to: {
        specified: specified_destination,
        path: toPath
      }
    });
  }
  return operations;
}
function calculateDestinationPath(destination, from) {
  return path2.join(destination, path2.basename(from));
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/echo.js
function echoCommand(context) {
  try {
    const maybePromise = context.stdout.writeLine(context.args.join(" "));
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => ({ code: 0 })).catch((err) => handleFailure(context, err));
    } else {
      return { code: 0 };
    }
  } catch (err) {
    return handleFailure(context, err);
  }
}
function handleFailure(context, err) {
  return context.error(`echo: ${errorToString(err)}`);
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/exit.js
function exitCommand(context) {
  try {
    const code2 = parseArgs2(context.args);
    return {
      kind: "exit",
      code: code2
    };
  } catch (err) {
    return context.error(2, `exit: ${errorToString(err)}`);
  }
}
function parseArgs2(args) {
  if (args.length === 0)
    return 1;
  if (args.length > 1)
    throw new Error("too many arguments");
  const exitCode = parseInt(args[0], 10);
  if (isNaN(exitCode))
    throw new Error("numeric argument required.");
  if (exitCode < 0) {
    const code2 = -exitCode % 256;
    return 256 - code2;
  }
  return exitCode % 256;
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/export.js
function exportCommand(context) {
  const changes = [];
  for (const arg of context.args) {
    const equalsIndex = arg.indexOf("=");
    if (equalsIndex >= 0) {
      changes.push({
        kind: "envvar",
        name: arg.substring(0, equalsIndex),
        value: arg.substring(equalsIndex + 1)
      });
    }
  }
  return {
    code: 0,
    changes
  };
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/mkdir.js
import * as fs6 from "node:fs";
async function mkdirCommand(context) {
  try {
    await executeMkdir(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`mkdir: ${errorToString(err)}`);
  }
}
async function executeMkdir(cwd2, args) {
  const flags = parseArgs3(args);
  for (const specifiedPath of flags.paths) {
    const path6 = resolvePath(cwd2, specifiedPath);
    const info = await safeLstat(path6);
    if (info?.isFile() || !flags.parents && info?.isDirectory()) {
      throw Error(`cannot create directory '${specifiedPath}': File exists`);
    }
    if (flags.parents) {
      await fs6.promises.mkdir(path6, { recursive: true });
    } else {
      await fs6.promises.mkdir(path6);
    }
  }
}
function parseArgs3(args) {
  const result = {
    parents: false,
    paths: []
  };
  for (const arg of parseArgKinds(args)) {
    if (arg.arg === "parents" && arg.kind === "LongFlag" || arg.arg === "p" && arg.kind == "ShortFlag") {
      result.parents = true;
    } else {
      if (arg.kind !== "Arg")
        bailUnsupported(arg);
      result.paths.push(arg.arg.trim());
    }
  }
  if (result.paths.length === 0) {
    throw Error("missing operand");
  }
  return result;
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/printenv.js
function printEnvCommand(context) {
  let args;
  if (isWindows3) {
    args = context.args.map((arg) => arg.toUpperCase());
  } else {
    args = context.args;
  }
  try {
    const result = executePrintEnv(context.env, args);
    const code2 = args.some((arg) => context.env[arg] === void 0) ? 1 : 0;
    const maybePromise = context.stdout.writeLine(result);
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => ({ code: code2 })).catch((err) => handleError2(context, err));
    } else {
      return { code: code2 };
    }
  } catch (err) {
    return handleError2(context, err);
  }
}
function handleError2(context, err) {
  return context.error(`printenv: ${errorToString(err)}`);
}
function executePrintEnv(env, args) {
  if (args.length === 0) {
    return Object.entries(env).map(([key, val]) => `${isWindows3 ? key.toUpperCase() : key}=${val}`).join("\n");
  } else {
    if (isWindows3) {
      args = args.map((arg) => arg.toUpperCase());
    }
    return Object.entries(env).filter(([key]) => args.includes(key)).map(([_key, val]) => val).join("\n");
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/pwd.js
import * as path3 from "node:path";
function pwdCommand(context) {
  try {
    const output = executePwd(context.cwd, context.args);
    const maybePromise = context.stdout.writeLine(output);
    const result = { code: 0 };
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => result).catch((err) => handleError3(context, err));
    } else {
      return result;
    }
  } catch (err) {
    return handleError3(context, err);
  }
}
function handleError3(context, err) {
  return context.error(`pwd: ${errorToString(err)}`);
}
function executePwd(cwd2, args) {
  const flags = parseArgs4(args);
  if (flags.logical) {
    return path3.resolve(cwd2);
  } else {
    return cwd2;
  }
}
function parseArgs4(args) {
  let logical = false;
  for (const arg of parseArgKinds(args)) {
    if (arg.arg === "L" && arg.kind === "ShortFlag") {
      logical = true;
    } else if (arg.arg === "P" && arg.kind == "ShortFlag") {
    } else if (arg.kind === "Arg") {
    } else {
      bailUnsupported(arg);
    }
  }
  return { logical };
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/rm.js
import * as fs7 from "node:fs";
async function rmCommand(context) {
  try {
    await executeRemove(context.cwd, context.args);
    return { code: 0 };
  } catch (err) {
    return context.error(`rm: ${errorToString(err)}`);
  }
}
async function executeRemove(cwd2, args) {
  const flags = parseArgs5(args);
  await Promise.all(flags.paths.map((specifiedPath) => {
    if (specifiedPath.length === 0) {
      throw new Error("Bug in dax. Specified path should have not been empty.");
    }
    const path6 = resolvePath(cwd2, specifiedPath);
    if (path6 === "/") {
      throw new Error("Cannot delete root directory. Maybe bug in dax? Please report this.");
    }
    return removePath(path6, flags.recursive).catch((err) => {
      if (flags.force && err?.code === "ENOENT") {
        return Promise.resolve();
      } else {
        return Promise.reject(err);
      }
    });
  }));
}
async function removePath(filePath, recursive) {
  if (recursive) {
    await fs7.promises.rm(filePath, { recursive: true });
    return;
  }
  try {
    await fs7.promises.rm(filePath);
  } catch (err) {
    if (err?.code !== "EISDIR" && err?.code !== "ERR_FS_EISDIR") {
      throw err;
    }
    await fs7.promises.rmdir(filePath);
  }
}
function parseArgs5(args) {
  const result = {
    recursive: false,
    force: false,
    dir: false,
    paths: []
  };
  for (const arg of parseArgKinds(args)) {
    if (arg.arg === "recursive" && arg.kind === "LongFlag" || arg.arg === "r" && arg.kind == "ShortFlag" || arg.arg === "R" && arg.kind === "ShortFlag") {
      result.recursive = true;
    } else if (arg.arg == "dir" && arg.kind === "LongFlag" || arg.arg == "d" && arg.kind === "ShortFlag") {
      result.dir = true;
    } else if (arg.arg == "force" && arg.kind === "LongFlag" || arg.arg == "f" && arg.kind === "ShortFlag") {
      result.force = true;
    } else {
      if (arg.kind !== "Arg")
        bailUnsupported2(arg);
      result.paths.push(arg.arg.trim());
    }
  }
  if (result.paths.length === 0) {
    throw Error("missing operand");
  }
  return result;
}
function bailUnsupported2(arg) {
  switch (arg.kind) {
    case "Arg":
      throw Error(`unsupported argument: ${arg.arg}`);
    case "ShortFlag":
      throw Error(`unsupported flag: -${arg.arg}`);
    case "LongFlag":
      throw Error(`unsupported flag: --${arg.arg}`);
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/set.js
var NAMED_OPTIONS = [
  ["errexit", "errexit"],
  ["pipefail", "pipefail"]
];
var SHORT_FLAGS = {
  e: "errexit"
};
function findNamedOption(name) {
  return NAMED_OPTIONS.find(([n]) => n === name)?.[1];
}
function findShortFlag(arg) {
  if (arg.length !== 2)
    return void 0;
  const sign = arg[0];
  if (sign !== "-" && sign !== "+")
    return void 0;
  return SHORT_FLAGS[arg[1]];
}
function setCommand(context) {
  const args = context.args;
  if (args.length === 0) {
    return { code: 0 };
  }
  if (args.length === 1 && args[0] === "-o") {
    const opts = context.shellOptions;
    for (const [name, flag] of NAMED_OPTIONS) {
      context.stdout.writeLine(`${name}	${opts[flag] ? "on" : "off"}`);
    }
    return { code: 0 };
  }
  if (args.length === 1 && args[0] === "+o") {
    const opts = context.shellOptions;
    for (const [name, flag] of NAMED_OPTIONS) {
      context.stdout.writeLine(`set ${opts[flag] ? "-o" : "+o"} ${name}`);
    }
    return { code: 0 };
  }
  const changes = [];
  let i = 0;
  while (i < args.length) {
    const arg = args[i];
    if ((arg === "-o" || arg === "+o") && i + 1 < args.length) {
      const enable = arg === "-o";
      const optionName = args[i + 1];
      const option = findNamedOption(optionName);
      if (option == null) {
        return context.error(`set: unknown option: ${optionName}`);
      }
      changes.push({ kind: "setoption", option, value: enable });
      i += 2;
    } else {
      const option = findShortFlag(arg);
      if (option == null) {
        return context.error(`set: invalid option: ${arg}`);
      }
      changes.push({ kind: "setoption", option, value: arg.startsWith("-") });
      i += 1;
    }
  }
  return { code: 0, changes };
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/shopt.js
var SHOPT_OPTIONS = ["nullglob", "failglob", "globstar"];
function isShoptOption(name) {
  return SHOPT_OPTIONS.includes(name);
}
function invalidOptionError(context, name) {
  return context.error(`shopt: ${name}: invalid shell option name`);
}
function shoptCommand(context) {
  const args = context.args;
  let mode;
  let optionArgs = args;
  if (args.length > 0) {
    if (args[0] === "-s") {
      mode = true;
      optionArgs = args.slice(1);
    } else if (args[0] === "-u") {
      mode = false;
      optionArgs = args.slice(1);
    }
  }
  const options = [];
  for (const arg of optionArgs) {
    if (!isShoptOption(arg)) {
      return invalidOptionError(context, arg);
    }
    options.push(arg);
  }
  if (mode !== void 0) {
    const changes = options.map((option) => ({
      kind: "setoption",
      option,
      value: mode
    }));
    return { code: 0, changes };
  }
  const currentOptions = context.shellOptions;
  if (options.length === 0) {
    context.stdout.writeLine(`failglob	${currentOptions.failglob ? "on" : "off"}`);
    context.stdout.writeLine(`globstar	${currentOptions.globstar ? "on" : "off"}`);
    context.stdout.writeLine(`nullglob	${currentOptions.nullglob ? "on" : "off"}`);
    return { code: 0 };
  } else {
    let anyOff = false;
    for (const opt of options) {
      const isOn = currentOptions[opt];
      if (!isOn) {
        anyOff = true;
      }
      context.stdout.writeLine(`${opt}	${isOn ? "on" : "off"}`);
    }
    return { code: anyOff ? 1 : 0 };
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/result.js
function getAbortedResult() {
  return {
    kind: "exit",
    code: 124
    // same as timeout command
  };
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/sleep.js
async function sleepCommand(context) {
  try {
    const ms = parseArgs6(context.args);
    await new Promise((resolve8) => {
      const timeoutId = setTimeout(finish, ms);
      context.signal.addListener(signalListener);
      function signalListener(_signal) {
        if (context.signal.aborted) {
          finish();
        }
      }
      function finish() {
        resolve8();
        clearInterval(timeoutId);
        context.signal.removeListener(signalListener);
      }
    });
    if (context.signal.aborted) {
      return getAbortedResult();
    }
    return { code: 0 };
  } catch (err) {
    return context.error(`sleep: ${errorToString(err)}`);
  }
}
function parseArgs6(args) {
  let totalTimeMs = 0;
  if (args.length === 0) {
    throw new Error("missing operand");
  }
  for (const arg of args) {
    if (arg.startsWith("-")) {
      throw new Error(`unsupported: ${arg}`);
    }
    const value = parseFloat(arg);
    if (isNaN(value)) {
      throw new Error(`error parsing argument '${arg}' to number.`);
    }
    totalTimeMs = value * 1e3;
  }
  return totalTimeMs;
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/test.js
async function testCommand(context) {
  try {
    const [testFlag, testPath] = parseArgs7(context.cwd, context.args);
    let result;
    switch (testFlag) {
      case "-f":
        result = (await safeLstat(testPath))?.isFile() ?? false;
        break;
      case "-d":
        result = (await safeLstat(testPath))?.isDirectory() ?? false;
        break;
      case "-e":
        result = await safeLstat(testPath) != null;
        break;
      case "-s":
        result = ((await safeLstat(testPath))?.size ?? 0) > 0;
        break;
      case "-L":
        result = (await safeLstat(testPath))?.isSymbolicLink() ?? false;
        break;
      default:
        throw new Error("unsupported test type");
    }
    return { code: result ? 0 : 1 };
  } catch (err) {
    return context.error(2, `test: ${errorToString(err)}`);
  }
}
function parseArgs7(cwd2, args) {
  if (args.length !== 2) {
    throw new Error("expected 2 arguments");
  }
  if (args[0] == null || !args[0].startsWith("-")) {
    throw new Error("missing test type flag");
  }
  return [args[0], resolvePath(cwd2, args[1])];
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/touch.js
import { join as join7 } from "node:path";
var __addDisposableResource = function(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function")
      throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose)
        throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose)
        throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async)
        inner = dispose;
    }
    if (typeof dispose !== "function")
      throw new TypeError("Object not disposable.");
    if (inner)
      dispose = function() {
        try {
          inner.call(this);
        } catch (e) {
          return Promise.reject(e);
        }
      };
    env.stack.push({ value, dispose, async });
  } else if (async) {
    env.stack.push({ async: true });
  }
  return value;
};
var __disposeResources = /* @__PURE__ */ function(SuppressedError2) {
  return function(env) {
    function fail(e) {
      env.error = env.hasError ? new SuppressedError2(e, env.error, "An error was suppressed during disposal.") : e;
      env.hasError = true;
    }
    var r, s = 0;
    function next() {
      while (r = env.stack.pop()) {
        try {
          if (!r.async && s === 1)
            return s = 0, env.stack.push(r), Promise.resolve().then(next);
          if (r.dispose) {
            var result = r.dispose.call(r.value);
            if (r.async)
              return s |= 2, Promise.resolve(result).then(next, function(e) {
                fail(e);
                return next();
              });
          } else
            s |= 1;
        } catch (e) {
          fail(e);
        }
      }
      if (s === 1)
        return env.hasError ? Promise.reject(env.error) : Promise.resolve();
      if (env.hasError)
        throw env.error;
    }
    return next();
  };
}(typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
});
async function touchCommand(context) {
  try {
    await executetouch(context.args, context.cwd);
    return { code: 0 };
  } catch (err) {
    return context.error(`touch: ${errorToString(err)}`);
  }
}
async function executetouch(args, cwd2) {
  const flags = parseArgs8(args);
  for (const path6 of flags.paths) {
    const env_1 = { stack: [], error: void 0, hasError: false };
    try {
      const _f = __addDisposableResource(env_1, await create(join7(cwd2, path6)), false);
    } catch (e_1) {
      env_1.error = e_1;
      env_1.hasError = true;
    } finally {
      __disposeResources(env_1);
    }
  }
}
function parseArgs8(args) {
  const paths = [];
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg")
      paths.push(arg.arg);
    else
      bailUnsupported(arg);
  }
  if (paths.length === 0)
    throw Error("missing file operand");
  return { paths };
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/unset.js
function unsetCommand(context) {
  try {
    return {
      code: 0,
      changes: parseNames(context.args).map((name) => ({ kind: "unsetvar", name }))
    };
  } catch (err) {
    return context.error(`unset: ${errorToString(err)}`);
  }
}
function parseNames(args) {
  if (args[0] === "-f") {
    throw Error(`unsupported flag: -f`);
  } else if (args[0] === "-v") {
    return args.slice(1);
  } else {
    return args;
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/shell.js
import * as path4 from "node:path";

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/executable.js
import * as fs8 from "node:fs";

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/lineRingBuffer.js
var LineRingBuffer = class {
  capacity;
  #buffer;
  #size = 0;
  #head = 0;
  constructor(capacity) {
    this.capacity = Math.max(1, capacity);
    this.#buffer = new Array(this.capacity);
  }
  get size() {
    return this.#size;
  }
  push(item) {
    this.#buffer[this.#head] = item;
    this.#head = (this.#head + 1) % this.capacity;
    if (this.#size < this.capacity)
      this.#size++;
  }
  /** Iterate every retained item, oldest first. */
  *[Symbol.iterator]() {
    const start = this.#size < this.capacity ? 0 : this.#head;
    for (let i = 0; i < this.#size; i++) {
      yield this.#buffer[(start + i) % this.capacity];
    }
  }
  /** Iterate the last `n` retained items, oldest first. */
  *takeLast(n) {
    const count = Math.min(Math.max(0, n), this.#size);
    const start = (this.#head - count + this.capacity) % this.capacity;
    for (let i = 0; i < count; i++) {
      yield this.#buffer[(start + i) % this.capacity];
    }
  }
};

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/pipes.js
var __addDisposableResource2 = function(env, value, async) {
  if (value !== null && value !== void 0) {
    if (typeof value !== "object" && typeof value !== "function")
      throw new TypeError("Object expected.");
    var dispose, inner;
    if (async) {
      if (!Symbol.asyncDispose)
        throw new TypeError("Symbol.asyncDispose is not defined.");
      dispose = value[Symbol.asyncDispose];
    }
    if (dispose === void 0) {
      if (!Symbol.dispose)
        throw new TypeError("Symbol.dispose is not defined.");
      dispose = value[Symbol.dispose];
      if (async)
        inner = dispose;
    }
    if (typeof dispose !== "function")
      throw new TypeError("Object not disposable.");
    if (inner)
      dispose = function() {
        try {
          inner.call(this);
        } catch (e) {
          return Promise.reject(e);
        }
      };
    env.stack.push({ value, dispose, async });
  } else if (async) {
    env.stack.push({ async: true });
  }
  return value;
};
var __disposeResources2 = /* @__PURE__ */ function(SuppressedError2) {
  return function(env) {
    function fail(e) {
      env.error = env.hasError ? new SuppressedError2(e, env.error, "An error was suppressed during disposal.") : e;
      env.hasError = true;
    }
    var r, s = 0;
    function next() {
      while (r = env.stack.pop()) {
        try {
          if (!r.async && s === 1)
            return s = 0, env.stack.push(r), Promise.resolve().then(next);
          if (r.dispose) {
            var result = r.dispose.call(r.value);
            if (r.async)
              return s |= 2, Promise.resolve(result).then(next, function(e) {
                fail(e);
                return next();
              });
          } else
            s |= 1;
        } catch (e) {
          fail(e);
        }
      }
      if (s === 1)
        return env.hasError ? Promise.reject(env.error) : Promise.resolve();
      if (env.hasError)
        throw env.error;
    }
    return next();
  };
}(typeof SuppressedError === "function" ? SuppressedError : function(error, suppressed, message) {
  var e = new Error(message);
  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
});
var TAIL_INDENT = "  ";
function indentTailLine(line) {
  return { text: TAIL_INDENT + line, hangingIndent: TAIL_INDENT.length };
}
var TailRenderer = class {
  container;
  #scope;
  #intervalScope;
  #segments = [];
  // single deferred installed on the scope while at least one segment is
  // active. `setText` is called only on the empty↔non-empty transition, so
  // appendLines/setHeader become pure field writes — items get rebuilt at
  // draw time (≈16 Hz via renderInterval) instead of per write.
  #deferredItems;
  constructor(options = {}) {
    this.container = options.container ?? staticText;
    this.#scope = this.container.createScope();
    const interval = options.interval === null ? void 0 : options.interval ?? renderInterval;
    this.#intervalScope = interval?.start();
    this.#deferredItems = [(size) => this.#buildItems(size)];
  }
  [Symbol.dispose]() {
    this.#intervalScope?.[Symbol.dispose]();
    this.#scope[Symbol.dispose]();
  }
  /** @internal */
  register(seg) {
    const wasEmpty = this.#segments.length === 0;
    this.#segments.push(seg);
    if (wasEmpty)
      this.#scope.setText(this.#deferredItems);
  }
  /** @internal */
  unregister(seg) {
    const idx = this.#segments.indexOf(seg);
    if (idx !== -1)
      this.#segments.splice(idx, 1);
    if (this.#segments.length === 0)
      this.#scope.setText([]);
  }
  /** @internal */
  logAbove(items) {
    this.#scope.logAbove(items);
  }
  #buildItems(size) {
    const items = [];
    const ctx = { size };
    for (const seg of this.#segments) {
      if (seg.headerFn != null) {
        const text = seg.headerFn(ctx);
        items.push(seg.headerVerbatim ? truncateHeaderToWidth(text, size) : formatTailHeader(text, size));
      }
      for (const line of seg.lines.takeLast(seg.visibleLineCount(ctx)))
        items.push(indentTailLine(line));
    }
    return items;
  }
};
var defaultTailRenderer = new TailRenderer();
var encoder2 = new TextEncoder();
var NullPipeReader = class {
  read(_p) {
    return Promise.resolve(null);
  }
};
var NullPipeWriter = class {
  writeSync(p) {
    return p.length;
  }
};
var ShellPipeWriter = class {
  #kind;
  #inner;
  constructor(kind, inner) {
    this.#kind = kind;
    this.#inner = inner;
  }
  get kind() {
    return this.#kind;
  }
  get inner() {
    return this.#inner;
  }
  write(p) {
    if ("write" in this.#inner) {
      return this.#inner.write(p);
    } else {
      return this.#inner.writeSync(p);
    }
  }
  writeAll(data) {
    if ("write" in this.#inner) {
      return writeAll2(this.#inner, data);
    } else {
      return writeAllSync2(this.#inner, data);
    }
  }
  writeText(text) {
    return this.writeAll(encoder2.encode(text));
  }
  writeLine(text) {
    return this.writeText(text + "\n");
  }
};
var CapturingBufferWriter = class {
  #buffer;
  #innerWriter;
  constructor(innerWriter, buffer) {
    this.#innerWriter = innerWriter;
    this.#buffer = buffer;
  }
  getBuffer() {
    return this.#buffer;
  }
  async write(p) {
    const nWritten = await this.#innerWriter.write(p);
    this.#buffer.writeSync(p.slice(0, nWritten));
    return nWritten;
  }
};
var CapturingBufferWriterSync = class {
  #buffer;
  #innerWriter;
  constructor(innerWriter, buffer) {
    this.#innerWriter = innerWriter;
    this.#buffer = buffer;
  }
  getBuffer() {
    return this.#buffer;
  }
  writeSync(p) {
    const nWritten = this.#innerWriter.writeSync(p);
    this.#buffer.writeSync(p.slice(0, nWritten));
    return nWritten;
  }
};
var ErrorTailCaptureWriter = class {
  ring;
  #innerWriter;
  constructor(innerWriter, ring) {
    this.#innerWriter = innerWriter;
    this.ring = ring;
  }
  async write(p) {
    const nWritten = await this.#innerWriter.write(p);
    this.ring.push(p.subarray(0, nWritten));
    return nWritten;
  }
};
var ErrorTailCaptureWriterSync = class {
  ring;
  #innerWriter;
  constructor(innerWriter, ring) {
    this.#innerWriter = innerWriter;
    this.ring = ring;
  }
  writeSync(p) {
    const nWritten = this.#innerWriter.writeSync(p);
    this.ring.push(p.subarray(0, nWritten));
    return nWritten;
  }
};
var lineFeedCharCode = "\n".charCodeAt(0);
var InheritStaticTextBypassWriter = class {
  #buffer;
  #innerWriter;
  constructor(innerWriter) {
    this.#innerWriter = innerWriter;
    this.#buffer = new Buffer2();
  }
  writeSync(p) {
    const index = p.findLastIndex((v) => v === lineFeedCharCode);
    if (index === -1) {
      this.#buffer.writeSync(p);
    } else {
      this.#buffer.writeSync(p.slice(0, index + 1));
      this.flush();
      this.#buffer.writeSync(p.slice(index + 1));
    }
    return p.byteLength;
  }
  flush() {
    const bytes3 = this.#buffer.bytes({ copy: false });
    staticText.withTempClear(() => {
      writeAllSync2(this.#innerWriter, bytes3);
    });
    this.#buffer.reset();
  }
};
var DEFAULT_INHERIT_TAIL_LINES = 5;
var DEFAULT_INHERIT_TAIL_ERROR_LINES = 80;
var DEFAULT_ERROR_TAIL_BYTES = 8 * 1024;
function makeMaxLinesResolver(value) {
  if (typeof value === "function")
    return value;
  if (typeof value === "number") {
    if (!Number.isFinite(value)) {
      throw new TypeError(`Invalid tailDisplay maxLines: ${value}`);
    }
    const n = Math.max(1, Math.floor(value));
    return () => n;
  }
  const match = /^(\d+(?:\.\d+)?)%$/.exec(value);
  if (!match)
    throw new TypeError(`Invalid tailDisplay maxLines: ${JSON.stringify(value)}`);
  const fraction = parseFloat(match[1]) / 100;
  return ({ size }) => {
    if (size?.rows == null)
      return DEFAULT_INHERIT_TAIL_LINES;
    return Math.max(1, Math.floor(size.rows * fraction));
  };
}
function normalizeHeaderText(text) {
  if (text == null)
    return void 0;
  const trimmed = text.replace(/\s+/g, " ").trim();
  return trimmed.length > 0 ? trimmed : void 0;
}
function truncateHeaderToWidth(text, size) {
  const cols = size?.columns ?? 80;
  const visible = stripAnsiCodes(text);
  if (visible.length <= cols)
    return text;
  return visible.slice(0, Math.max(1, cols - 1)) + "\u2026";
}
var InheritTailState = class {
  resolveMaxLines;
  lines;
  enabled;
  /** Per-draw callback that produces the header text. `undefined` means
   * "no header" (live tail renders no label). Percentages, raw strings and
   * user callbacks are all normalized into this single shape upstream. */
  headerFn;
  /** When true, the header is rendered verbatim instead of being framed
   * with the built-in `Running <text>` / `Ran <text>` styling. Set when
   * the user supplies a custom header string or function. */
  headerVerbatim = false;
  /** Always-present fallback shown on the error path, even if the live
   * header is hidden or customized — so error scrollback is unambiguous
   * about which command failed. */
  errorHeader;
  promoteHeaderOnSuccess = false;
  #refCount = 0;
  #disposed = false;
  #errored = false;
  #trailingLines = [];
  #registered = false;
  #totalLinesSeen = 0;
  renderer;
  constructor(renderer, maxLines, isTty, maxErrorLines = DEFAULT_INHERIT_TAIL_ERROR_LINES) {
    this.renderer = renderer;
    this.resolveMaxLines = makeMaxLinesResolver(maxLines);
    const initial = this.resolveMaxLines({ size: renderer.container.getConsoleSize() });
    this.lines = new LineRingBuffer(Math.max(initial, maxErrorLines));
    this.enabled = isTty;
  }
  get omittedLineCount() {
    return Math.max(0, this.#totalLinesSeen - this.lines.size);
  }
  /** Visible output rows after subtracting the header (if any) from the
   * total `maxLines` budget. Floors to 1 so a headered segment always shows
   * at least one line. */
  visibleLineCount(ctx) {
    const total = this.resolveMaxLines(ctx);
    return Math.max(1, this.headerFn != null ? total - 1 : total);
  }
  addRef() {
    this.#refCount++;
    if (this.enabled && !this.#registered && !this.#disposed) {
      this.renderer.register(this);
      this.#registered = true;
    }
  }
  setHeader(header, options) {
    if (header == null) {
      this.headerFn = void 0;
    } else if (typeof header === "string") {
      const trimmed = normalizeHeaderText(header);
      this.headerFn = trimmed != null ? () => trimmed : void 0;
    } else {
      this.headerFn = header;
    }
    this.headerVerbatim = options?.verbatim ?? false;
  }
  appendLines(newLines) {
    if (this.#disposed)
      return;
    this.#totalLinesSeen += newLines.length;
    for (const line of newLines)
      this.lines.push(line);
  }
  release(errored, trailing) {
    if (this.#disposed)
      return;
    if (errored)
      this.#errored = true;
    if (trailing.length > 0)
      this.#trailingLines.push(...trailing);
    this.#refCount--;
    if (this.#refCount > 0)
      return;
    this.#disposed = true;
    if (!this.enabled)
      return;
    this.renderer.unregister(this);
    this.#flushAbove();
  }
  #flushAbove() {
    const preserved = [];
    if (this.#errored) {
      if (this.errorHeader != null) {
        preserved.push(`${white(">")} ${blue(this.errorHeader)}`);
      } else if (this.headerFn != null) {
        const headerFn = this.headerFn;
        preserved.push((size) => `${white(">")} ${blue(headerFn({ size }))}`);
      }
      const omitted = this.omittedLineCount;
      if (omitted > 0) {
        const noun = omitted === 1 ? "line" : "lines";
        preserved.push(indentTailLine(dim(`...${omitted} ${noun} omitted...`)));
      }
      for (const line of this.lines)
        preserved.push(indentTailLine(line));
      for (const line of this.#trailingLines)
        preserved.push(indentTailLine(line));
    } else if (this.promoteHeaderOnSuccess && this.headerFn != null) {
      const headerFn = this.headerFn;
      const verbatim = this.headerVerbatim;
      preserved.push((size) => {
        const text = headerFn({ size });
        return verbatim ? truncateHeaderToWidth(text, size) : formatRanHeader(text, size);
      });
    }
    if (preserved.length > 0)
      this.renderer.logAbove(preserved);
  }
};
var InheritTailWriter = class _InheritTailWriter {
  #innerWriter;
  #state;
  #decoder = new TextDecoder2();
  #pending = "";
  #finalized = false;
  constructor(innerWriter, optionsOrSibling = {}) {
    this.#innerWriter = innerWriter;
    if (optionsOrSibling instanceof _InheritTailWriter) {
      this.#state = optionsOrSibling.#state;
    } else {
      const opts = optionsOrSibling;
      const renderer = opts.renderer ?? defaultTailRenderer;
      const maxLines = opts.maxLines ?? DEFAULT_INHERIT_TAIL_LINES;
      const isTty = opts.isTty ?? isStderrTty();
      const state = new InheritTailState(renderer, maxLines, isTty);
      if (opts.header !== void 0) {
        state.setHeader(opts.header, { verbatim: opts.headerVerbatim });
      }
      if (opts.errorHeader !== void 0) {
        state.errorHeader = normalizeHeaderText(opts.errorHeader);
      }
      if (opts.promoteHeaderOnSuccess !== void 0) {
        state.promoteHeaderOnSuccess = opts.promoteHeaderOnSuccess;
      }
      this.#state = state;
    }
    this.#state.addRef();
  }
  /** Snapshot of the live tail (last visible-window retained lines, oldest
   * first). The visible-window size is `maxLines - 1` when a header is shown
   * (recomputed from the current console size for percentage / callback
   * `maxLines`). */
  get tailLines() {
    const size = this.#state.renderer.container.getConsoleSize();
    return Array.from(this.#state.lines.takeLast(this.#state.visibleLineCount({ size })));
  }
  /** Number of completed lines that were dropped from the retained ring
   * buffer because its capacity is bounded. Rendered as
   * `...N lines omitted...` above the retained tail when the command fails. */
  get omittedLineCount() {
    return this.#state.omittedLineCount;
  }
  /**
   * Sets a label rendered above the tail lines that identifies what this
   * scrolling region is showing. Accepts a literal string (collapsed to
   * a single line) or a per-draw callback that receives the current
   * `{ size }`. `undefined` removes the header. Long text is truncated to
   * the terminal width.
   *
   * When `options.verbatim` is true, the text is rendered as-is (no
   * built-in `Running` / `Ran` framing). Used by `.tailDisplay({ header })`
   * so the caller has full control over styling.
   */
  setHeader(header, options) {
    this.#state.setHeader(header, options);
  }
  /**
   * Sets the command label preserved on the error scrollback path even
   * when the live header is hidden or customized — so `> <command>` is
   * always shown when a tailed command fails, regardless of `.tailDisplay`
   * header config.
   */
  setErrorHeader(text) {
    this.#state.errorHeader = normalizeHeaderText(text);
  }
  /**
   * Controls whether the `Ran <command>` header is promoted to scrollback
   * on successful finalize. Defaults to `false` — on success the live tail
   * clears silently unless the caller opts in (command.ts enables it when
   * `.printCommand()` was set, so the command stays visible in scrollback).
   * The error-path header (`> <command>` + retained tail) is always emitted
   * regardless of this flag since it's diagnostic.
   */
  setPromoteHeaderOnSuccess(value) {
    this.#state.promoteHeaderOnSuccess = value;
  }
  writeSync(p) {
    if (this.#finalized) {
      return p.length;
    }
    if (!this.#state.enabled) {
      return this.#innerWriter.writeSync(p);
    }
    this.#pending += this.#decoder.decode(p, { stream: true });
    const lastNewline = this.#pending.lastIndexOf("\n");
    if (lastNewline !== -1) {
      const complete = this.#pending.slice(0, lastNewline);
      this.#pending = this.#pending.slice(lastNewline + 1);
      this.#state.appendLines(complete.split("\n").map(stripTrailingCR));
    }
    return p.length;
  }
  /**
   * Clears the scrolling region. Called on successful command completion.
   *
   * If a header was set it's promoted to scrollback via `logAbove` before
   * the scope is disposed, so "which commands ran" remains visible after
   * the transient tail clears. When multiple writers share a scope the
   * scope is only disposed once all of them have finalized.
   *
   * Any partial pending line is still passed to `release` so that — if a
   * sibling writer subsequently errors — the success side's last partial
   * line is preserved in the error scrollback. The success path itself
   * never renders trailing lines, so there's no visual cost when no
   * sibling errors.
   */
  finalize() {
    if (this.#finalized)
      return;
    this.#finalized = true;
    const trailing = [];
    if (this.#pending.length > 0) {
      trailing.push(stripTrailingCR(this.#pending));
      this.#pending = "";
    }
    this.#state.release(false, trailing);
  }
  [Symbol.dispose]() {
    this.finalize();
  }
  /**
   * Promotes the header + retained tail above the static region before
   * clearing it. Called when the command errored so the user has visible
   * context. When multiple writers share a scope, any writer finalizing
   * for error causes the shared region to use the error path once all
   * writers have finalized.
   */
  finalizeForError() {
    if (this.#finalized)
      return;
    this.#finalized = true;
    const trailing = [];
    if (this.#pending.length > 0) {
      trailing.push(stripTrailingCR(this.#pending));
      this.#pending = "";
    }
    this.#state.release(true, trailing);
  }
};
function stripTrailingCR(line) {
  return line.endsWith("\r") ? line.slice(0, -1) : line;
}
function isStderrTty() {
  return Boolean(process.stderr.isTTY);
}
function formatTailHeader(text, size) {
  return renderTailHeader(text, size, "Running", cyan);
}
function formatRanHeader(text, size) {
  return renderTailHeader(text, size, "Ran", green);
}
function renderTailHeader(text, size, status, statusColor) {
  const maxColumns = size?.columns ?? 80;
  const overhead = status.length + 1;
  const budget = Math.max(10, maxColumns - overhead);
  const display = text.length > budget ? text.slice(0, budget - 1) + "\u2026" : text;
  return `${bold(statusColor(status))} ${display}`;
}
var PipedBuffer = class {
  #inner;
  #hasSet = false;
  constructor() {
    this.#inner = new Buffer2();
  }
  getBuffer() {
    if (this.#inner instanceof Buffer2) {
      return this.#inner;
    } else {
      return void 0;
    }
  }
  setError(err) {
    if ("setError" in this.#inner) {
      this.#inner.setError(err);
    }
  }
  close() {
    if ("close" in this.#inner) {
      this.#inner.close();
    }
  }
  writeSync(p) {
    return this.#inner.writeSync(p);
  }
  setListener(listener) {
    if (this.#hasSet) {
      throw new Error("Piping to multiple outputs is currently not supported.");
    }
    if (this.#inner instanceof Buffer2) {
      writeAllSync2(listener, this.#inner.bytes({ copy: false }));
    }
    this.#inner = listener;
    this.#hasSet = true;
  }
};
var PipeSequencePipe = class {
  #inner = new Buffer2();
  #readListener;
  #closed = false;
  close() {
    this.#readListener?.();
    this.#closed = true;
  }
  writeSync(p) {
    const value = this.#inner.writeSync(p);
    if (this.#readListener !== void 0) {
      const listener = this.#readListener;
      this.#readListener = void 0;
      listener();
    }
    return value;
  }
  read(p) {
    if (this.#readListener !== void 0) {
      throw new Error("Misuse of PipeSequencePipe");
    }
    if (this.#inner.length === 0) {
      if (this.#closed) {
        return Promise.resolve(null);
      } else {
        return new Promise((resolve8) => {
          this.#readListener = () => {
            resolve8(this.#inner.readSync(p));
          };
        });
      }
    } else {
      return Promise.resolve(this.#inner.readSync(p));
    }
  }
};
async function pipeReaderToWritable(reader, writable, signal) {
  const env_1 = { stack: [], error: void 0, hasError: false };
  try {
    const abortedPromise = __addDisposableResource2(env_1, abortSignalToPromise(signal), false);
    const writer = writable.getWriter();
    try {
      while (!signal.aborted) {
        const buffer = new Uint8Array(1024);
        const length = await Promise.race([abortedPromise.promise, reader.read(buffer)]);
        if (length === 0 || length == null) {
          break;
        }
        await writer.write(buffer.subarray(0, length));
      }
    } finally {
      await writer.close();
    }
  } catch (e_1) {
    env_1.error = e_1;
    env_1.hasError = true;
  } finally {
    __disposeResources2(env_1);
  }
}
async function pipeReadableToWriterSync(readable, writer, signal) {
  const reader = readable.getReader();
  while (!signal.aborted) {
    const result = await reader.read();
    if (result.done) {
      break;
    }
    const maybePromise = writer.writeAll(result.value);
    if (maybePromise) {
      await maybePromise;
    }
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/spawn.js
import * as cp from "node:child_process";
import { Readable, Writable } from "node:stream";
function spawnCommand(path6, options) {
  let receivedSignal;
  const isWindowsBatch = isWindows3 && /\.(cmd|bat)$/i.test(path6);
  const child = cp.spawn(isWindowsBatch ? "cmd.exe" : path6, isWindowsBatch ? getWindowsBatchArgs(path6, options.args) : options.args, {
    cwd: options.cwd,
    env: options.env,
    // cmd.exe parses its command line differently than the
    // `CommandLineToArgvW` convention that Node's default escaping assumes, so
    // escape the arguments ourselves (see `getWindowsBatchArgs`) and tell Node
    // to pass them through verbatim. Without this, a `.cmd`/`.bat` path or
    // argument containing a space is split by cmd.exe.
    windowsVerbatimArguments: isWindowsBatch,
    stdio: [
      toNodeStdio(options.stdin),
      toNodeStdio(options.stdout),
      toNodeStdio(options.stderr)
    ]
  });
  const exitResolvers = Promise.withResolvers();
  child.on("exit", (code2) => {
    if (code2 == null && receivedSignal != null) {
      exitResolvers.resolve(getSignalAbortCode(receivedSignal) ?? 1);
    } else {
      exitResolvers.resolve(code2 ?? 0);
    }
  });
  child.on("error", (err) => {
    exitResolvers.reject(err);
  });
  return {
    stdin() {
      return Writable.toWeb(child.stdin);
    },
    kill(signo) {
      receivedSignal = signo;
      child.kill(signo);
    },
    waitExitCode() {
      return exitResolvers.promise;
    },
    stdout() {
      return Readable.toWeb(child.stdout);
    },
    stderr() {
      return Readable.toWeb(child.stderr);
    }
  };
}
function getWindowsBatchArgs(path6, args) {
  const doubleEscapeMetaChars = /node_modules[\\/]\.bin[\\/][^\\/]+\.cmd$/i.test(path6);
  const command = [
    escapeCmdCommand(path6),
    ...args.map((arg) => escapeCmdArgument(arg, doubleEscapeMetaChars))
  ].join(" ");
  return ["/d", "/s", "/c", `"${command}"`];
}
var cmdMetaCharsRegex = /([()\][%!^"`<>&|;, *?])/g;
function escapeCmdCommand(arg) {
  return arg.replace(cmdMetaCharsRegex, "^$1");
}
function escapeCmdArgument(arg, doubleEscapeMetaChars) {
  arg = arg.replace(/(?=(\\+?)?)\1"/g, '$1$1\\"');
  arg = arg.replace(/(?=(\\+?)?)\1$/, "$1$1");
  arg = `"${arg}"`;
  arg = arg.replace(cmdMetaCharsRegex, "^$1");
  if (doubleEscapeMetaChars) {
    arg = arg.replace(cmdMetaCharsRegex, "^$1");
  }
  return arg;
}
function toNodeStdio(stdio) {
  switch (stdio) {
    case "inherit":
      return "inherit";
    case "null":
      return "ignore";
    case "piped":
      return "pipe";
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/executable.js
var neverAbortedSignal = new AbortController().signal;
function createExecutableCommand(resolvedPath, options) {
  const prependArgs = options?.args;
  return async function executeCommandAtPath(context) {
    const pipeStringVals = {
      stdin: getStdioStringValue(context.stdin),
      stdout: getStdioStringValue(context.stdout.kind),
      stderr: getStdioStringValue(context.stderr.kind)
    };
    let p;
    const cwd2 = context.cwd;
    const args = prependArgs != null && prependArgs.length > 0 ? [...prependArgs, ...context.args] : context.args;
    try {
      p = spawnCommand(resolvedPath, {
        args,
        cwd: cwd2,
        env: context.env,
        ...pipeStringVals
      });
    } catch (err) {
      throw checkMapCwdNotExistsError(cwd2, err);
    }
    const listener = (signal) => p.kill(signal);
    context.signal.addListener(listener);
    const completeController = new AbortController();
    const completeSignal = completeController.signal;
    let stdinError;
    const stdinPromise = writeStdin(context.stdin, p, completeSignal).catch(async (err) => {
      if (completeSignal.aborted) {
        return;
      }
      const maybePromise = context.stderr.writeLine(`stdin pipe broken. ${errorToString(err)}`);
      if (maybePromise != null) {
        await maybePromise;
      }
      stdinError = err;
      try {
        p.kill("SIGKILL");
      } catch (err2) {
        const code2 = err2?.code;
        if (code2 !== "EACCES" && code2 !== "EPERM" && code2 !== "ENOENT") {
          throw err2;
        }
      }
    });
    try {
      const readStdoutTask = pipeStringVals.stdout === "piped" ? readStdOutOrErr(p.stdout(), context.stdout) : Promise.resolve();
      const readStderrTask = pipeStringVals.stderr === "piped" ? readStdOutOrErr(p.stderr(), context.stderr) : Promise.resolve();
      const [exitCode] = await Promise.all([
        p.waitExitCode().catch((err) => Promise.reject(checkMapCwdNotExistsError(cwd2, err))),
        readStdoutTask,
        readStderrTask
      ]);
      if (stdinError != null) {
        return {
          code: 1,
          kind: "exit"
        };
      } else {
        return { code: exitCode };
      }
    } finally {
      completeController.abort();
      context.signal.removeListener(listener);
      await stdinPromise;
    }
  };
}
async function writeStdin(stdin2, p, signal) {
  if (typeof stdin2 === "string") {
    return;
  }
  const processStdin = p.stdin();
  await pipeReaderToWritable(stdin2, processStdin, signal);
  try {
    await processStdin.close();
  } catch {
  }
}
async function readStdOutOrErr(readable, writer) {
  if (typeof writer === "string") {
    return;
  }
  await pipeReadableToWriterSync(readable, writer, neverAbortedSignal);
}
function getStdioStringValue(value) {
  if (value === "inheritPiped") {
    return "piped";
  } else if (value === "inherit" || value === "null" || value === "piped") {
    return value;
  } else {
    return "piped";
  }
}
function checkMapCwdNotExistsError(cwd2, err) {
  if (err.code === "ENOENT" && !fs8.existsSync(cwd2)) {
    throw new Error(`Failed to launch command because the cwd does not exist (${cwd2}).`, {
      cause: err
    });
  } else {
    throw err;
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/glob.js
import * as fs9 from "node:fs";
import * as nodePath from "node:path";

// npm/esm/deps/jsr.io/@std/internal/1.0.14/_os.js
function checkWindows2() {
  const global = dntGlobalThis;
  const platform = global.process?.platform;
  if (typeof platform === "string")
    return platform.startsWith("win");
  const os = global.Deno?.build?.os;
  if (typeof os === "string")
    return os === "windows";
  return global.navigator?.platform?.startsWith("Win") ?? false;
}

// npm/esm/deps/jsr.io/@std/internal/1.0.14/os.js
var isWindows4 = checkWindows2();

// npm/esm/deps/jsr.io/@std/path/1.1.6/_common/glob_to_reg_exp.js
var REG_EXP_ESCAPE_CHARS = [
  "!",
  "$",
  "(",
  ")",
  "*",
  "+",
  ".",
  "=",
  "?",
  "[",
  "\\",
  "^",
  "{",
  "|"
];
var RANGE_ESCAPE_CHARS = ["-", "\\", "]"];
function _globToRegExp(c, glob, {
  extended = true,
  globstar: globstarOption = true,
  // os = osType,
  caseInsensitive = false
} = {}) {
  if (glob === "") {
    return /(?!)/;
  }
  let newLength = glob.length;
  for (; newLength > 1 && c.seps.includes(glob[newLength - 1]); newLength--)
    ;
  glob = glob.slice(0, newLength);
  let regExpString = "";
  for (let j = 0; j < glob.length; ) {
    let segment = "";
    const groupStack = [];
    let inRange = false;
    let inEscape = false;
    let endsWithSep = false;
    let i = j;
    for (; i < glob.length && !(c.seps.includes(glob[i]) && groupStack.length === 0); i++) {
      if (inEscape) {
        inEscape = false;
        const escapeChars = inRange ? RANGE_ESCAPE_CHARS : REG_EXP_ESCAPE_CHARS;
        segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
        continue;
      }
      if (glob[i] === c.escapePrefix) {
        inEscape = true;
        continue;
      }
      if (glob[i] === "[") {
        if (!inRange) {
          inRange = true;
          segment += "[";
          if (glob[i + 1] === "!") {
            i++;
            segment += "^";
          } else if (glob[i + 1] === "^") {
            i++;
            segment += "\\^";
          }
          continue;
        } else if (glob[i + 1] === ":") {
          let k = i + 1;
          let value = "";
          while (glob[k + 1] !== void 0 && glob[k + 1] !== ":") {
            value += glob[k + 1];
            k++;
          }
          if (glob[k + 1] === ":" && glob[k + 2] === "]") {
            i = k + 2;
            if (value === "alnum")
              segment += "\\dA-Za-z";
            else if (value === "alpha")
              segment += "A-Za-z";
            else if (value === "ascii")
              segment += "\0-\x7F";
            else if (value === "blank")
              segment += "	 ";
            else if (value === "cntrl")
              segment += "\0-\x7F";
            else if (value === "digit")
              segment += "\\d";
            else if (value === "graph")
              segment += "!-~";
            else if (value === "lower")
              segment += "a-z";
            else if (value === "print")
              segment += " -~";
            else if (value === "punct") {
              segment += `!"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_\u2018{|}~`;
            } else if (value === "space")
              segment += "\\s\v";
            else if (value === "upper")
              segment += "A-Z";
            else if (value === "word")
              segment += "\\w";
            else if (value === "xdigit")
              segment += "\\dA-Fa-f";
            continue;
          }
        }
      }
      if (glob[i] === "]" && inRange) {
        inRange = false;
        segment += "]";
        continue;
      }
      if (inRange) {
        segment += glob[i];
        continue;
      }
      if (glob[i] === ")" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
        segment += ")";
        const type = groupStack.pop();
        if (type === "!") {
          segment += c.wildcard;
        } else if (type !== "@") {
          segment += type;
        }
        continue;
      }
      if (glob[i] === "|" && groupStack.length > 0 && groupStack[groupStack.length - 1] !== "BRACE") {
        segment += "|";
        continue;
      }
      if (glob[i] === "+" && extended && glob[i + 1] === "(") {
        i++;
        groupStack.push("+");
        segment += "(?:";
        continue;
      }
      if (glob[i] === "@" && extended && glob[i + 1] === "(") {
        i++;
        groupStack.push("@");
        segment += "(?:";
        continue;
      }
      if (glob[i] === "?") {
        if (extended && glob[i + 1] === "(") {
          i++;
          groupStack.push("?");
          segment += "(?:";
        } else {
          segment += ".";
        }
        continue;
      }
      if (glob[i] === "!" && extended && glob[i + 1] === "(") {
        i++;
        groupStack.push("!");
        segment += "(?!";
        continue;
      }
      if (glob[i] === "{") {
        groupStack.push("BRACE");
        segment += "(?:";
        continue;
      }
      if (glob[i] === "}" && groupStack[groupStack.length - 1] === "BRACE") {
        groupStack.pop();
        segment += ")";
        continue;
      }
      if (glob[i] === "," && groupStack[groupStack.length - 1] === "BRACE") {
        segment += "|";
        continue;
      }
      if (glob[i] === "*") {
        if (extended && glob[i + 1] === "(") {
          i++;
          groupStack.push("*");
          segment += "(?:";
        } else {
          const prevChar = glob[i - 1];
          let numStars = 1;
          while (glob[i + 1] === "*") {
            i++;
            numStars++;
          }
          const nextChar = glob[i + 1];
          if (globstarOption && numStars === 2 && [...c.seps, void 0].includes(prevChar) && [...c.seps, void 0].includes(nextChar)) {
            segment += c.globstar;
            endsWithSep = true;
          } else {
            segment += c.wildcard;
          }
        }
        continue;
      }
      segment += REG_EXP_ESCAPE_CHARS.includes(glob[i]) ? `\\${glob[i]}` : glob[i];
    }
    if (groupStack.length > 0 || inRange || inEscape) {
      segment = "";
      for (const c2 of glob.slice(j, i)) {
        segment += REG_EXP_ESCAPE_CHARS.includes(c2) ? `\\${c2}` : c2;
        endsWithSep = false;
      }
    }
    regExpString += segment;
    if (!endsWithSep) {
      regExpString += i < glob.length ? c.sep : c.sepMaybe;
      endsWithSep = true;
    }
    while (c.seps.includes(glob[i]))
      i++;
    j = i;
  }
  regExpString = `^${regExpString}$`;
  return new RegExp(regExpString, caseInsensitive ? "i" : "");
}

// npm/esm/deps/jsr.io/@std/path/1.1.6/posix/glob_to_regexp.js
var constants2 = {
  sep: "/+",
  sepMaybe: "/*",
  seps: ["/"],
  globstar: "(?:[^/]*(?:/|$)+)*",
  wildcard: "[^/]*",
  escapePrefix: "\\"
};
function globToRegExp(glob, options = {}) {
  return _globToRegExp(constants2, glob, options);
}

// npm/esm/deps/jsr.io/@std/path/1.1.6/windows/glob_to_regexp.js
var constants3 = {
  sep: "(?:\\\\|/)+",
  sepMaybe: "(?:\\\\|/)*",
  seps: ["\\", "/"],
  globstar: "(?:[^\\\\/]*(?:\\\\|/|$)+)*",
  wildcard: "[^\\\\/]*",
  escapePrefix: "`"
};
function globToRegExp2(glob, options = {}) {
  return _globToRegExp(constants3, glob, options);
}

// npm/esm/deps/jsr.io/@std/path/1.1.6/glob_to_regexp.js
function globToRegExp3(glob, options = {}) {
  return isWindows4 ? globToRegExp2(glob, options) : globToRegExp(glob, options);
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/glob.js
async function* expandGlob(pattern, options) {
  const opts = {
    caseInsensitive: options.caseInsensitive ?? false,
    globstar: options.globstar ?? true,
    followSymlinks: options.followSymlinks ?? false,
    includeDirs: options.includeDirs ?? true
  };
  let startDir;
  let remaining;
  if (nodePath.isAbsolute(pattern)) {
    const parsed = nodePath.parse(pattern);
    startDir = parsed.root;
    remaining = pattern.slice(parsed.root.length);
  } else {
    startDir = options.root;
    remaining = pattern;
  }
  const sepRe = isWindows3 ? /[/\\]/ : /\//;
  const segments = remaining.split(sepRe).filter((s) => s.length > 0);
  yield* walkSegments(startDir, segments, 0, opts);
}
async function* walkSegments(dir, segments, index, opts) {
  if (index >= segments.length) {
    return;
  }
  const segment = segments[index];
  const isLast = index === segments.length - 1;
  if (segment === "**" && opts.globstar) {
    yield* walkSegments(dir, segments, index + 1, opts);
    let entries2;
    try {
      entries2 = await fs9.promises.readdir(dir, { withFileTypes: true });
    } catch {
      return;
    }
    for (const entry of entries2) {
      const entryPath = nodePath.join(dir, entry.name);
      if (await isDirectory2(entry, entryPath, opts.followSymlinks)) {
        yield* walkSegments(entryPath, segments, index, opts);
      }
    }
    return;
  }
  if (!hasGlobChar(segment)) {
    const nextPath = nodePath.join(dir, segment);
    let stat2;
    try {
      stat2 = await fs9.promises.stat(nextPath);
    } catch (err) {
      if (err?.code !== "ENOENT" || !opts.caseInsensitive || isWindows3) {
        return;
      }
      let entries2;
      try {
        entries2 = await fs9.promises.readdir(dir, { withFileTypes: true });
      } catch {
        return;
      }
      const lowered = segment.toLowerCase();
      for (const entry of entries2) {
        if (entry.name.toLowerCase() !== lowered)
          continue;
        yield* yieldOrDescend(nodePath.join(dir, entry.name), entry, segments, index, isLast, opts);
      }
      return;
    }
    if (isLast) {
      if (stat2.isFile() || stat2.isDirectory() && opts.includeDirs) {
        yield { path: nextPath };
      }
    } else if (stat2.isDirectory()) {
      yield* walkSegments(nextPath, segments, index + 1, opts);
    }
    return;
  }
  const regex = globToRegExp3(segment, {
    caseInsensitive: opts.caseInsensitive,
    globstar: opts.globstar
  });
  let entries;
  try {
    entries = await fs9.promises.readdir(dir, { withFileTypes: true });
  } catch {
    return;
  }
  for (const entry of entries) {
    if (!regex.test(entry.name))
      continue;
    yield* yieldOrDescend(nodePath.join(dir, entry.name), entry, segments, index, isLast, opts);
  }
}
async function* yieldOrDescend(entryPath, entry, segments, index, isLast, opts) {
  let isFile = entry.isFile();
  let isDir = entry.isDirectory();
  if (entry.isSymbolicLink()) {
    if (opts.followSymlinks) {
      try {
        const s = await fs9.promises.stat(entryPath);
        isFile = s.isFile();
        isDir = s.isDirectory();
      } catch {
        return;
      }
    } else if (isLast) {
      isFile = true;
    }
  }
  if (isLast) {
    if (isFile || isDir && opts.includeDirs) {
      yield { path: entryPath };
    }
  } else if (isDir) {
    yield* walkSegments(entryPath, segments, index + 1, opts);
  }
}
async function isDirectory2(entry, entryPath, followSymlinks) {
  if (entry.isDirectory())
    return true;
  if (followSymlinks && entry.isSymbolicLink()) {
    try {
      return (await fs9.promises.stat(entryPath)).isDirectory();
    } catch {
      return false;
    }
  }
  return false;
}
function hasGlobChar(segment) {
  for (let i = 0; i < segment.length; i++) {
    const ch = segment[i];
    if (ch === "*" || ch === "?" || ch === "[")
      return true;
  }
  return false;
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/lib/rs_lib.internal.js
var rs_lib_internal_exports2 = {};
__export(rs_lib_internal_exports2, {
  __wbg_error_7534b8e9a36f1ab4: () => __wbg_error_7534b8e9a36f1ab4,
  __wbg_new_405e22f390576ce2: () => __wbg_new_405e22f390576ce2,
  __wbg_new_78feb108b6472713: () => __wbg_new_78feb108b6472713,
  __wbg_new_8a6f238a6ece86ea: () => __wbg_new_8a6f238a6ece86ea,
  __wbg_set_37837023f3d740e8: () => __wbg_set_37837023f3d740e8,
  __wbg_set_3f1d0b984ed272ed: () => __wbg_set_3f1d0b984ed272ed,
  __wbg_set_wasm: () => __wbg_set_wasm2,
  __wbg_stack_0ed75d68575b0f3c: () => __wbg_stack_0ed75d68575b0f3c,
  __wbindgen_debug_string: () => __wbindgen_debug_string2,
  __wbindgen_init_externref_table: () => __wbindgen_init_externref_table2,
  __wbindgen_number_new: () => __wbindgen_number_new,
  __wbindgen_string_new: () => __wbindgen_string_new,
  __wbindgen_throw: () => __wbindgen_throw2,
  parse: () => parse2
});
var wasm3;
function __wbg_set_wasm2(val) {
  wasm3 = val;
}
var lTextDecoder2 = typeof TextDecoder2 === "undefined" ? (0, module.require)("util").TextDecoder : TextDecoder2;
var cachedTextDecoder2 = new lTextDecoder2("utf-8", { ignoreBOM: true, fatal: true });
cachedTextDecoder2.decode();
var cachedUint8ArrayMemory02 = null;
function getUint8ArrayMemory02() {
  if (cachedUint8ArrayMemory02 === null || cachedUint8ArrayMemory02.byteLength === 0) {
    cachedUint8ArrayMemory02 = new Uint8Array(wasm3.memory.buffer);
  }
  return cachedUint8ArrayMemory02;
}
function getStringFromWasm02(ptr, len) {
  ptr = ptr >>> 0;
  return cachedTextDecoder2.decode(getUint8ArrayMemory02().subarray(ptr, ptr + len));
}
var WASM_VECTOR_LEN2 = 0;
var lTextEncoder2 = typeof TextEncoder === "undefined" ? (0, module.require)("util").TextEncoder : TextEncoder;
var cachedTextEncoder2 = new lTextEncoder2("utf-8");
var encodeString2 = typeof cachedTextEncoder2.encodeInto === "function" ? function(arg, view) {
  return cachedTextEncoder2.encodeInto(arg, view);
} : function(arg, view) {
  const buf = cachedTextEncoder2.encode(arg);
  view.set(buf);
  return {
    read: arg.length,
    written: buf.length
  };
};
function passStringToWasm02(arg, malloc, realloc) {
  if (realloc === void 0) {
    const buf = cachedTextEncoder2.encode(arg);
    const ptr2 = malloc(buf.length, 1) >>> 0;
    getUint8ArrayMemory02().subarray(ptr2, ptr2 + buf.length).set(buf);
    WASM_VECTOR_LEN2 = buf.length;
    return ptr2;
  }
  let len = arg.length;
  let ptr = malloc(len, 1) >>> 0;
  const mem = getUint8ArrayMemory02();
  let offset = 0;
  for (; offset < len; offset++) {
    const code2 = arg.charCodeAt(offset);
    if (code2 > 127)
      break;
    mem[ptr + offset] = code2;
  }
  if (offset !== len) {
    if (offset !== 0) {
      arg = arg.slice(offset);
    }
    ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
    const view = getUint8ArrayMemory02().subarray(ptr + offset, ptr + len);
    const ret = encodeString2(arg, view);
    offset += ret.written;
    ptr = realloc(ptr, len, offset, 1) >>> 0;
  }
  WASM_VECTOR_LEN2 = offset;
  return ptr;
}
var cachedDataViewMemory02 = null;
function getDataViewMemory02() {
  if (cachedDataViewMemory02 === null || cachedDataViewMemory02.buffer.detached === true || cachedDataViewMemory02.buffer.detached === void 0 && cachedDataViewMemory02.buffer !== wasm3.memory.buffer) {
    cachedDataViewMemory02 = new DataView(wasm3.memory.buffer);
  }
  return cachedDataViewMemory02;
}
function debugString2(val) {
  const type = typeof val;
  if (type == "number" || type == "boolean" || val == null) {
    return `${val}`;
  }
  if (type == "string") {
    return `"${val}"`;
  }
  if (type == "symbol") {
    const description = val.description;
    if (description == null) {
      return "Symbol";
    } else {
      return `Symbol(${description})`;
    }
  }
  if (type == "function") {
    const name = val.name;
    if (typeof name == "string" && name.length > 0) {
      return `Function(${name})`;
    } else {
      return "Function";
    }
  }
  if (Array.isArray(val)) {
    const length = val.length;
    let debug = "[";
    if (length > 0) {
      debug += debugString2(val[0]);
    }
    for (let i = 1; i < length; i++) {
      debug += ", " + debugString2(val[i]);
    }
    debug += "]";
    return debug;
  }
  const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
  let className;
  if (builtInMatches && builtInMatches.length > 1) {
    className = builtInMatches[1];
  } else {
    return toString.call(val);
  }
  if (className == "Object") {
    try {
      return "Object(" + JSON.stringify(val) + ")";
    } catch (_) {
      return "Object";
    }
  }
  if (val instanceof Error) {
    return `${val.name}: ${val.message}
${val.stack}`;
  }
  return className;
}
function takeFromExternrefTable02(idx) {
  const value = wasm3.__wbindgen_export_3.get(idx);
  wasm3.__externref_table_dealloc(idx);
  return value;
}
function parse2(command) {
  const ptr0 = passStringToWasm02(command, wasm3.__wbindgen_malloc, wasm3.__wbindgen_realloc);
  const len0 = WASM_VECTOR_LEN2;
  const ret = wasm3.parse(ptr0, len0);
  if (ret[2]) {
    throw takeFromExternrefTable02(ret[1]);
  }
  return takeFromExternrefTable02(ret[0]);
}
function __wbg_error_7534b8e9a36f1ab4(arg0, arg1) {
  let deferred0_0;
  let deferred0_1;
  try {
    deferred0_0 = arg0;
    deferred0_1 = arg1;
    console.error(getStringFromWasm02(arg0, arg1));
  } finally {
    wasm3.__wbindgen_free(deferred0_0, deferred0_1, 1);
  }
}
function __wbg_new_405e22f390576ce2() {
  const ret = new Object();
  return ret;
}
function __wbg_new_78feb108b6472713() {
  const ret = new Array();
  return ret;
}
function __wbg_new_8a6f238a6ece86ea() {
  const ret = new Error();
  return ret;
}
function __wbg_set_37837023f3d740e8(arg0, arg1, arg2) {
  arg0[arg1 >>> 0] = arg2;
}
function __wbg_set_3f1d0b984ed272ed(arg0, arg1, arg2) {
  arg0[arg1] = arg2;
}
function __wbg_stack_0ed75d68575b0f3c(arg0, arg1) {
  const ret = arg1.stack;
  const ptr1 = passStringToWasm02(ret, wasm3.__wbindgen_malloc, wasm3.__wbindgen_realloc);
  const len1 = WASM_VECTOR_LEN2;
  getDataViewMemory02().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory02().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_debug_string2(arg0, arg1) {
  const ret = debugString2(arg1);
  const ptr1 = passStringToWasm02(ret, wasm3.__wbindgen_malloc, wasm3.__wbindgen_realloc);
  const len1 = WASM_VECTOR_LEN2;
  getDataViewMemory02().setInt32(arg0 + 4 * 1, len1, true);
  getDataViewMemory02().setInt32(arg0 + 4 * 0, ptr1, true);
}
function __wbindgen_init_externref_table2() {
  const table = wasm3.__wbindgen_export_3;
  const offset = table.grow(4);
  table.set(0, void 0);
  table.set(offset + 0, void 0);
  table.set(offset + 1, null);
  table.set(offset + 2, true);
  table.set(offset + 3, false);
}
function __wbindgen_number_new(arg0) {
  const ret = arg0;
  return ret;
}
function __wbindgen_string_new(arg0, arg1) {
  const ret = getStringFromWasm02(arg0, arg1);
  return ret;
}
function __wbindgen_throw2(arg0, arg1) {
  throw new Error(getStringFromWasm02(arg0, arg1));
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/lib/rs_lib.js
var bytes2 = base64decode2("AGFzbQEAAAAB5QEiYAN/f38AYAJ/fwBgAn9/AX9gAX8AYAN/f38Bf2AEf39/fwBgBX9/f39/AGAEf39/fwF/YAF/AX9gBX9/f39/AX9gAAFvYAAAYAABf2ACf28AYAZ/f39/f38AYAADf39/YAJ/fwFvYANvf28AYANvb28AYAF8AW9gAn9+AGAHf39/f39/fwBgB39/f39/f38Bf2ADf35+AGADf39+AX9gBH9/f34AYAJ/fwN/f39gBn9/f39/fwF/YAV/f35/fwBgBH9+f38AYAV/f31/fwBgBH99f38AYAV/f3x/fwBgBH98f38AAssEDBQuL3JzX2xpYi5pbnRlcm5hbC5qcxVfX3diaW5kZ2VuX3N0cmluZ19uZXcAEBQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19uZXdfNDA1ZTIyZjM5MDU3NmNlMgAKFC4vcnNfbGliLmludGVybmFsLmpzGl9fd2JnX25ld183OGZlYjEwOGI2NDcyNzEzAAoULi9yc19saWIuaW50ZXJuYWwuanMaX193Ymdfc2V0XzM3ODM3MDIzZjNkNzQwZTgAERQuL3JzX2xpYi5pbnRlcm5hbC5qcxpfX3diZ19zZXRfM2YxZDBiOTg0ZWQyNzJlZAASFC4vcnNfbGliLmludGVybmFsLmpzFV9fd2JpbmRnZW5fbnVtYmVyX25ldwATFC4vcnNfbGliLmludGVybmFsLmpzF19fd2JpbmRnZW5fZGVidWdfc3RyaW5nAA0ULi9yc19saWIuaW50ZXJuYWwuanMaX193YmdfbmV3XzhhNmYyMzhhNmVjZTg2ZWEAChQuL3JzX2xpYi5pbnRlcm5hbC5qcxxfX3diZ19zdGFja18wZWQ3NWQ2ODU3NWIwZjNjAA0ULi9yc19saWIuaW50ZXJuYWwuanMcX193YmdfZXJyb3JfNzUzNGI4ZTlhMzZmMWFiNAABFC4vcnNfbGliLmludGVybmFsLmpzEF9fd2JpbmRnZW5fdGhyb3cAARQuL3JzX2xpYi5pbnRlcm5hbC5qcx9fX3diaW5kZ2VuX2luaXRfZXh0ZXJucmVmX3RhYmxlAAsDhQKDAgUIAAAAAAYEAgcAAAYAAwYCAAQABAkAABQAABUBBQwAAgECAAEWAAQAAAABAgACAgACAQIBBQ4BAAAABgMBAAsA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AwsgBCAFai0AAEEnRg0CIAVBAWohBQwACwALQQAhAiADKQKUASENIAMoApABIQQMBwsgA0HYAGogBCAIIAVBxKzAABCHASADKAJcIQcgAygCWCEGIANB0ABqIAQgCCAFQdSswAAQjAEgByAGRQ0AGiADKAJUIQUgAygCUCEIIANB4ABqIAwgBiAHEEEgAygCYCIEIAMoAmhBgIDEAEYNABogAygCZCEHIAQNASAHCyEEQYCAgIB4IQUgA0G0AWoMAQtBEBDtASEKIANBgAJqIAggBRCEASAKQQA2AgAgCiADKQKAAjcCBCAKQQxqIANBiAJqKAIANgIAQQEhBSADQQE2ArQBIAchCyADQbABagsgBTYCAAJAAkACfwJAAkAgAygCtAEiB0GAgICAeEYEQCAEDQcgA0KigICAEDcCgAIgA0GBxAA7AYgCIANB4ABqIANBgAJqIAEgAhBNIAMoAmAhBiADKAJoQYCAxABGBEAgA0GAgICAeDYCpAEgAyAGNgKcAUGAgICAeAwECyADKAJkIQcgA0EANgLAASADQoCAgIDAADcCuAEgA0EANgJoIAMgBjYCYCADIAYgB2o2AmQDQEEAIQRBgYDEACEFA0AgA0GBgMQANgJwAn8gBUGBgMQARwRAIAMoAmwMAQsgA0HIAGogA0HgAGoQciADKAJMIQUgAygCSAshCAJAAkACQAJAAkAgBUEiaw4DAwQBAAsgBUHgAEYNASAFQYCAxABHDQMgA0GcAWogASACQZCzwABBHhCzASADQbgBahCkAQwICyAEQQFxDQIgAygCcCIEQYGAxABGBEAgA0EgaiADQeAAahByIAMgAygCJCIENgJwIAMgAygCIDYCbAsgBEEoRw0CIANBGGogBiAHIAhBoLHAABCMASADQYACaiADKAIYIAMoAhwQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAcLIAMgAykCjAI3AsgBIAMgBDYCxAEgA0G4AWogA0HEAWoQcSADQRBqIAYgByAIQbCxwAAQhwEgA0GAAmogAygCECADKAIUEDwgAygCgAIhBgJAAkAgAygCiAIiBEGAgICAeEYEQCAGDQFBACEFDAILIAMoAoQCIQcgAyADKQKMAjcCiAIgAyAENgKEAiADQQM2AoACIANBuAFqIANBgAJqQfyxwAAQkQEgA0GBgMQANgJwIANBADYCaCADIAY2AmAgAyAGIAdqNgJkDAYLIANB3AFqIgQgBigCCEE+ahCnASAEQcCxwABB/LHAABCsASAEQeSswABB5qzAABCsASAEIAYoAgQgBigCCBD1ASAGKQIMIQ1BFBDtASIFIA03AgwgBUEIaiADQeQBaigCADYCACAFIAMpAtwBNwIAIAYQ1QELIANBgICAgHg2AqQBIAMgBTYCnAEMBgsgBEEBcQ0BIANBMGogBiAHIAhBjLLAABCMASADQYACaiADKAIwIAMoAjQQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAYLIAMgAykCjAI3AtQBIAMgBDYC0AEgA0G4AWogA0HQAWoQcSADQShqIAYgByAIQZyywAAQhwEgA0GAAmogAygCKCADKAIsEBcgAygCgAIhBgJAAkAgAygCiAIiBEGAgICAeEYEQCAGDQFBACEFDAILIAMoAoQCIQcgAyADKQKMAjcCiAIgAyAENgKEAiADQQM2AoACIANBuAFqIANBgAJqQeCywAAQkQEgA0GBgMQANgJwIANBADYCaCADIAY2AmAgAyAGIAdqNgJkDAULIANB6AFqIgQgBigCCEEzahCnASAEQayywABB3bLAABCsASAEQeSswABB5qzAABCsASAEIAYoAgQgBigCCBD1ASAGKQIMIQ1BFBDtASIFIA03AgwgBUEIaiADQfABaigCADYCACAFIAMpAugBNwIAIAYQ1QELIANBgICAgHg2AqQBIAMgBTYCnAEMBQsgBEEBcQ0AIANBQGsgBiAHIAhB8LLAABCMASADQYACaiADKAJAIAMoAkQQNCADKAKIAiIEQYCAgIB4RgRAIANBgICAgHg2AqQBIAMgAygCgAI2ApwBDAULIAMgAykCjAI3AvgBIAMgBDYC9AEgA0E4aiAGIAcgCEEBakGAs8AAEIcBIAMoAjwhByADKAI4IQQgAygCwAEEQCADQbgBaiADQfQBahBxIAkgAykCuAE3AgAgCUEIaiADQcABaigCADYCACADIAc2AqABIAMgBDYCnAEMBgsgCSADKQL0ATcCACAJQQhqIANB/AFqKAIANgIAIAMgBzYCoAEgAyAENgKcAQwECyAFQdwARiEEIAMoAnAhBQwACwALAAsgAyAKNgKoASADIAc2AqQBIAMgCzYCoAEgAyAENgKcASADIAMoArABNgKsAQwDCyADQbgBahCkAQsgAygCpAELQQAQ9AEgAygCnAEhBEGAgICAeEYNAQsgBCEBIAMoAqABIQIgA0GQAWogCRCUAQwBCwsgBEUNAQsgA0GQAWoQpQFBgICAgHghAkEIIQUMAgsgAykClAEhDSADKAKQASEEQQAQ9AELQQghBSAEQYCAgIB4RgRAIAEhBEGAgICAeCECDAELIAMgBDYCgAIgAyANNwKEAiANQv////8PWARAIANBgAJqEKUBQQAhBEGAgICAeCECDAELIANBADYCgAEgA0EANgJwIAMgBDYCaCADIA2nIgQ2AmQgAyAENgJgIAMgBCANQiCIp0EMbGo2AmwgA0GcAWogA0HgAGoiBRBRAkAgAygCnAFBBkcEQCADQYACaiIIIAUQbyADQQhqQQQgAygCgAJBAWoiBEF/IAQbIgQgBEEETRtBBEEQQcSrwAAQbSADQaQBaikCACENIAMoAgghBCADKAIMIgsgAykCnAE3AgAgC0EIaiANNwIAIANB/AFqIgdBATYCACADIAs2AvgBIAMgBDYC9AEgCCAFQTD8CgAAIANB9AFqIAgQYiAAQQhqIgRBCGogBygCADYCACAEIAMpAvQBNwIADAELIABBADYCECAAQoCAgIDAADcCCCADQeAAahCAAQtBBCEFIAEhBAsgACAENgIAIAAgBWogAjYCACADQbACaiQAC6MOAg9/An4jAEHQAmsiAyQAIAMgAjYCjAIgAyABNgKIAiADQSk2AoQCIANB0LnAADYCgAIgA0GB0gA7AfwBIANCqYCAgBA3AvQBIANBgdAAOwHwASADQqiAgIAQNwLoASADQdwAaiIGIANB6AFqIAEgAhBNIAMoAlwhBAJAAkACQAJAAkACQCADKAJkQYCAxABGDQAgBiAEIAMoAmAQMiADKAJgIQQgAygCXCIFRQ0AIAYgBSAEECIgAygCXCEEIAMoAmQiBUGAgICAeEYNACADKAJgIQcgAyADKQJoIhI3AowBIAMgBTYCiAEgBiADQfQBaiAEIAcQQSADKAJcIQQgAygCZEGAgMQARw0BIANBiAFqEOgBCyAEDQIgA0HoAWoiBiABIAIQGSADKALoASEEIAMoAvABIgJBgICAgHhGDQIgAygC7AEhASADIAMpAvQBIhI3AmAgAyACNgJcIAYgBCABEBEgAygC6AEhBCADKALwASIBQYCAgIB4RwRAIAMoAuwBIQcgAyADKQL0ASITNwLsASADIAE2AugBIBNC/////w9WDQIgBhCeAUEAIQQLIANB3ABqEJ8BDAILIAMoAmAhB0EMEO0BIgIgEjcCBCACIAU2AgAgAq0hEkGAgICAeCECCyADIBM3AvgBIAMgATYC9AEgAyASNwLsASADIAI2AugBIANB3ABqIAQgBxA2IAMoAmAhBCADKAJcIghFBEAgA0HoAWoQuAEMAQtBBCEKIANBnAFqIANB7AFqIgFBEGooAgA2AgAgA0GUAWogAUEIaikCADcCACADIAEpAgA3AowBIAMgAjYCiAEgA0EANgK0AiADQoCAgIDAADcCrAIgA0HkAGohDyADQeAAaiEJIANB9AFqIQxBBCEGIAQhBSAIIQECfwJAA0AgBQRAIANB6AFqIhAgASAFEBYgAygC6AEhAgJAIAMoAvABIg5BA0cEQCADKALsASEHIAlBEGoiDSAMQRBqKAIANgIAIAlBCGoiESAMQQhqKQIANwIAIAkgDCkCADcCACADIA42AlwgECACIAcQNiADKALsASECIAMoAugBIgcNASAPEOEBCyACRQ0DIANBrAJqEJoBIAIMBAsgA0HIAmoiBSANKAIANgIAIANBwAJqIg0gESkCADcDACADIAkpAgA3A7gCIAMoAqwCIAtGBEAgA0GsAmoQlgEgAygCsAIhBgsgBiAKaiIBQQRrIA42AgAgASADKQO4AjcCACABQQhqIA0pAwA3AgAgAUEQaiAFKAIANgIAIAMgC0EBaiILNgK0AiAKQRhqIQogAiEFIAchAQwBCwtBACEFCyADKQKwAiESIAEgAygCrAIiAkGAgICAeEYNABogAyACNgLoASADIBI3AuwBIBJC/////x9YBEBBAyEEIBJCgICAgBBaBEAgAyASQiCIp0EBayICNgLwASADQagBaiASpyACQRhsaiICQQxqKQIANwMAIANBsAFqIAJBFGooAgA2AgAgAyACKQIENwOgASACKAIAIQQLIANB3AFqIANBmAFqKQIANwIAIANB1AFqIANBkAFqKQIANwIAIANBwAFqIANBqAFqKQMANwMAIANByAFqIANBsAFqKAIANgIAIAMgAykCiAE3AswBIAMgAykDoAE3A7gBIANB6AFqEJoBIARBBEcNAyABIQQMAgtBFBDtASIBIAQ2AhAgASAINgIMIAFBLzYCCCABQeevwAA2AgQgAUGAgICAeDYCACADQegBahCaASABCyEEIANBiAFqELgBCyAAQQU2AgggACAENgIADAELIANBCGogA0G4AWoiBkEs/AoAACADIAQ2AgQgA0GIAWogASAFEEUgAygCiAEhAgJAAkACQCADLQCQASIHQQJGBEAgAg0DIAMoAgghAiADQTRqIAZBBHJBKPwKAABBABD0AQwBCyADQegBaiACIAMoAowBIgQQDyADKALoASEBIAMoAvABIghBBUYEQCABDQJBFBDtASIBIAQ2AhAgASACNgIMIAFBLTYCCCABQbqvwAA2AgQgAUGAgICAeDYCACABIQIMAwsgAygC7AEhBSADQdwAaiADQfQBakEs/AoAAEHkABDtASICIANBBGpBMPwKAAAgAiAINgIwIAJBNGogA0HcAGpBLPwKAAAgAiAHOgBgQQQhBAsgACACNgIMIAAgBDYCCCAAIAU2AgQgACABNgIAIABBEGogA0E0akEo/AoAAAwCCyADQaACaiICIAEoAghBL2oQpwEgAkG6r8AAQeevwAAQrAEgAkHkrMAAQeaswAAQrAEgAiABKAIEIAEoAggQ9QEgASkCDCESQRQQ7QEiAiASNwIMIAJBCGogA0GoAmooAgA2AgAgAiADKQKgAjcCACABENUBCyAAQQU2AgggACACNgIAIANBBGoQvwELIANB0AJqJAALzwoCBn8CfiMAQYACayIDJAAgA0H4AGoiByABIAIQGSADKAJ4IQQCQAJAAkACQAJAAkACfwJAAkACQAJAAkAgAygCgAEiBUGAgICAeEcEQCADKAJ8IQYgAyADKQKEASIJNwJ8IAMgBTYCeCAJQv////8PVg0BIAcQnwFBACEECyADQQg2AswBIAMgBDYCxAEMAQsgAyAFNgJAIAMgCTcCRCADQfgAaiAEIAYQESADKAJ4IQQCQAJAIAMoAoABIgVBgICAgHhGBEAgA0EINgLMASADIAQ2AsQBDAELIAMoAnwhBiADIAMpAoQBIgo3AnwgAyAFNgJ4IApCgICAgBBUDQEgA0EINgLMAUEAIQQgA0EANgLEASADQfgAahCeAQsgA0FAaxCfAQwB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BwwDCyAAQQM2AgggACAENgIADAMLDAELQQAhBwsgAygCLCEIIANBgcwAOwEwIANCpoCAgBA3AiggA0EEaiADQShqIAQgCBBNQYCAxAAhBiADKAIEIQECfyADQTxqIAMoAgwiDEGAgMQARg0AGiADQQRqIAEgAygCCBBYIAMoAgQiAUUEQCADKAIIIQEgA0E8agwBCyADIAw2AjwgAygCDCEGIAMoAgghCSADQThqCyAGNgIAIAMCfiADKAI8QYCAxABGBEACQCABDQAgA0EEaiIGIAQgCBA2IAMoAgghASADKAIEIgRFDQAgBiAEIAEQJSADKAIEIQFBgYCAgHggAygCDCIEIARBgYCAgHhMGyIEQYGAgIB4Rg0AIAMoAgghCSADKQIQDAILIABBAzYCCCAAIAE2AgAMAgtBgICAgHghBCADNQI4CyINNwIIIAMgBDYCBCAEQYCAgIB4RiANQv////8PVnJFBEBBFBDtASIBIAI2AhAgASAFNgIMIAFBFzYCCCABQciwwAA2AgQgAUGAgICAeDYCACAAQQM2AgggACABNgIAIANBBGoQ4QEMAQsgACADKQIENwIQIAAgBzoAHCAAIAo2AgwgACALNgIIIAAgCTYCBCAAIAE2AgAgAEEYaiADQQxqKAIANgIACyADQUBrJAAL5AYBB38jAEHAAWsiAyQAIANC4ICAgBA3AoABIANBgcABOwGIASADQThqIANBgAFqIAEgAhBNIAMoAjghBAJAIAMoAkBBgIDEAEYEQCAAQYCAgIB4NgIIIAAgBDYCAAwBCyADKAI8IQYgA0EANgI0IAMgBDYCLCADIAQgBmo2AjADQAJAIANBIGogA0EsahByAkAgAygCJCIHQeAARwRAIAdBgIDEAEcNAUEUEO0BIgQgAjYCECAEIAE2AgwgBEEaNgIIIARBnLjAADYCBCAEQYCAgIB4NgIAIABBgICAgHg2AgggACAENgIADAQLIAVBAXFFDQELIAdB3ABGIQUMAQsLIANBGGogBCAGIAMoAiAiB0G4uMAAEIwBIAMoAhwhAiADKAIYIQFBACEFIANBEGpBAEEBQQFB1KvAABBtIANBADYCeCADIAMpAxA3AnAgA0GAAWogASACQci4wABBAhASA0AgA0E4aiADQYABahAtIAMoAjhBAUdFBEAgASAFaiEIIAMoAkAhBSAD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CyAEDQQLIAAgAykCDDcCCCAAIAI2AgQgACABNgIAIABBEGogA0EUaigCADYCAAwECyADQShqIgIgC0EQaigCADYCACADQSBqIgggC0EIaikCADcDACADIAspAgA3AxggAygCDCAJRgRAIANBDGoQlgEgAygCECEMCyAKIAxqIgFBBGsgBjYCACABIAMpAxg3AgAgAUEIaiAIKQMANwIAIAFBEGogAigCADYCACADIAlBAWoiCTYCFCAKQRhqIQogBCECIAUhAQwBCwsgACADKQIMNwIIIABBADYCBCAAIAE2AgAgAEEQaiADQRRqKAIANgIADAELIABBgICAgHg2AgggACAENgIAIANBDGoQnwELIANB4ABqJAAL/gUBBX8gAEEIayIBIABBBGsoAgAiA0F4cSIAaiECAkACQCADQQFxDQAgA0ECcUUNASABKAIAIgMgAGohACABIANrIgFBqMfAACgCAEYEQCACKAIEQQNxQQNHDQFBoMfAACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEDALAkACQAJAAkACQCACKAIEIgNBAnFFBEAgAkGsx8AAKAIARg0CIAJBqMfAACgCAEYNAyACIANBeHEiAhAwIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQajHwAAoAgBHDQFBoMfAACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAEDdBACEBQcDHwABBwMfAACgCAEEBayIANgIAIAANBEGIxcAAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQcDHwABB/x8gASABQf8fTRs2AgAPC0Gsx8AAIAE2AgBBpMfAAEGkx8AAKAIAIABqIgA2AgAgASAAQQFyNgIEQajHwAAoAgAgAUYEQEGgx8AAQQA2AgBBqMfAAEEANgIACyAAQbjHwAAoAgAiA00NA0Gsx8AAKAIAIgJFDQNBACEAQaTHwAAoAgAiBEEpSQ0CQYDFwAAhAQNAIAIgASgCACIFTwRAIAIgBSABKAIEakkNBAsgASgCCCEBDAALAAtBqMfAACABNgIAQaDHwABBoMfAACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgAPCyAAQfgBcUGQxcAAaiECAn9BmMfAACgCACIDQQEgAEEDdnQiAHFFBEBBmMfAACAAIANyNgIAIAIMAQsgAigCCAshACACIAE2AgggACABNgIMIAEgAjYCDCABIAA2AggPC0GIxcAAKAIAIgEEQANAIABBAWohACABKAIIIgENAAsLQcDHwABB/x8gACAAQf8fTRs2AgAgAyAETw0AQbjHwABBfzYCAAsL1QUBBH8jAEHwAGsiBSQAIAEoAgAhBgJAIAQoAgBBBEYEQCAFIAY2AlwgBUEMNgJYIAVBv43AADYCVCAFQQQ2AlAgBUHTi8AANgJMIAVBDDYCSCAFQaaNwAA2AkQgBUENNgJAIAVBso3AADYCPCAEKAIEIQcgBUHoAGogBUE8ahB/IAUoAmwhBiAFKAJoIgRFBEBBASEHIAYhBAwCCyAFIAY2AmQgBSAENgJgIAUQ7wEiCDYCbCAFIAQ2AmggBUEgaiAFQegAaiAHQRhqEB0CQAJAAn8gBSgCIEEBcQRAIAUoAiQMAQsgBUEYaiAFQegAaiAHECYgBSgCGEEBcUUNASAFKAIcCyEEIAgQ6QEMAQsgBkHzjMAAQQcQHCAIEM8BAn8gBy0AYEEBRgRAIAVBCGpBvovAAEEMENkBIAUoAgghCCAFKAIMDAELIAVBEGpBuIvAAEEGENkBIAUoAhAhCCAFKAIUCyEEIAhBAXENACAGQYeMwABBAhAcIAQQzwEgBSAFQeAAakH6jMAAQQQgB0EwahAbIAUoAgBBAXFFBEBBACEHIAYhBAwDCyAFKAIEIQQLIAYQ6QFBASEHDAELIAUgBjYCXCAFQQc2AlggBUHWjMAANgJUIAVBBDYCUCAFQdOLwAA2AkwgBUEHNgJIIAVB3YvAADYCRCAFQQ02AkAgBUGyjcAANgI8IAVB6ABqIAVBPGoQfyAFKAJsIQYgBSgCaCIHRQRAQQEhByAGIQQMAQsgBSAGNgJsIAUgBzYCaCAFQTBqIAVB6ABqIARBGGoQHUEBIQcCfyAFKAIwQQFxBEAgBSgCNAwBCyAFQShqIAVB6ABqIAQQJiAFKAIoQQFxRQRAQQAhByAGIQQMAgsgBSgCLAshBCAGEOkBC0EBIQYgB0UEQCACIAMQHCECIAEoAgQgAiAEEM8BQQAhBgsgACAENgIEIAAgBjYCACAFQfAAaiQAC48PAhN/BH4jAEEgayILJAACQEHYw8AAKAIAIgINAEHYw8AAQgE3AgBB5MPAACgCACEJQeDDwAAoAgAhBkHgw8AAQYiAwAApAgA3AgBB7MPAACgCACEDQejDwABBkIDAACkCADcCACACRSAJRXINAAJAIANFDQAgBkEIaiEEIAYpAwBCf4VCgIGChIiQoMCAf4MhFkEBIQUgBiECA0AgBUUNASAWIRUDQCAVUARAIAJB4ABrIQIgBCkDAEJ/hUKAgYKEiJCgwIB/gyEVIARBCGohBAwBCwsgFUIBfSAVgyEWIANBAWsiAyEFIAIgFXqnQQN2QXRsakEEaygCACIHQYQBSQ0AIAcQgwEMAAsACyALQRRqQQxBCCAJQQFqEGkgCygCFBogBiALKAIcayALKAIYENgBC0Hcw8AAKAIARQRAQdzDwABBfzYCAEHkw8AAKAIAIgYgAHEhAiAArSIXQhmIQoGChIiQoMCAAX4hGEHgw8AAKAIAIQNBACEFA0AgAiADaikAACIWIBiFIhVCf4UgFUKBgoSIkKDAgAF9g0KAgYKEiJCgwIB/gyEVAkACQANAIBVQRQRAIAAgAyAVeqdBA3YgAmogBnFBdGxqIgRBDGsoAgBGBEAgBEEIaygCACABRg0DCyAVQgF9IBWDIRUMAQsLIBYgFkIBhoNCgIGChIiQoMCAf4NQDQFB6MPAACgCAEUEQEEAIQkjAEEwayIDJAACQAJAAkBB7MPAACgCACIGQX9GDQBB5MPAACgCACIHIAdBAWoiCkEDdiICQQdsIAdBCEkbIg9BAXYgBk0EQCADQQhqQQxBCAJ/IA8gBiAGIA9JGyICQQ5PBEAgAkH+////AUsNA0F/IAJBA3RBCGpBB25BAWtndkEBagwBC0EEQQhBECACQQdJGyACQQNJGwsiBBBpIAMoAggiAkUNASADKAIQIQUgAygCDCIHBEAgByACEMsBIQILIAJFDQIgAiAFaiEHIARBCGoiAgRAIAdB/wEgAvwLAAsgA0EANgIgIAMgBEEBayIKNgIYIAMgBzYCFCADQoyAgICAATcCDCADQfDDwAA2AgggAyAKIARBA3ZBB2wgBEEJSRsiDzYCHCAHQQxrIQxB4MPAACgCACIEKQMAQn+FQoCBgoSIkKDAgH+DIRUgA0EUaiEIIAQhAiAGIQUDQCAFBEADQCAVUARAIAlBCGohCSACQQhqIgIpAwBCf4VCgIGChIiQoMCAf4MhFQwBCwsgAyAHIAogBCAVeqdBA3YgCWoiDUF0bGoiBEEMaygCACIOIARBCGsoAgAgDhutEI0BIAwgAygCAEF0bGoiDkHgw8AAKAIAIgQgDUF0bGpBDGsiDSkAADcAACAOQQhqIA1BCGooAAA2AAAgBUEBayEFIBVCAX0gFYMhFQwBCwsgAyAGNgIgIAMgDyAGazYCHEHgw8AAIAhBBBCgASADKAIYIgJFDQMgA0EkaiADKAIMIAMoAhAgAkEBahBpIAMoAiQaIAMoAhQgAygCLGsgAygCKBDYAQwDCyACIApBB3FBAEdqIQJB4MPAACgCACIFIQkDQCACBEAgCSAJKQMAIhVCf4VCB4hCgYKEiJCgwIABgyAVQv/+/fv379+//wCEfDcDACAJQQhqIQkgAkEBayECDAEFAkAgCkEITwRAIAUgCmogBSkAADcAAAwBCyAKRQ0AIAVBCGogBSAK/AoAAAsgBUEIaiEJIAVBDGshDkEAIQIDQAJAIAogAiIESwRAIAIgAiAKSWohAiAEIAVqIhEtAABBgAFHDQIgDiAEQXRsIghqIQwgBSAIaiIIQQhrIRIgCEEMayETA0AgBCATKAIAIgggEigCACAIGyIIIAdxIhBrIAUgByAIrRBuIg0gEGtzIAdxQQhJDQIgBSANaiIQLQAAIBAgCEEZdiIIOgAAIAkgDUEIayAHcWogCDoAACAOIA1BdGxqIQhB/wFGBEAgEUH/AToAACAJIARBCGsgB3FqQf8BOgAAIAhBCGogDEEIaigAADYAACAIIAwpAAA3AAAMBAUgDCAIQQMQoAEMAQsACwALQejDwAAgDyAGazYCAAwGCyARIAhBGXYiDDoAACAJIARBCGsgB3FqIAw6AAAMAAsACwALAAsjAEEgayIAJAAgAEEANgIYIABBATYCDCAAQay7wAA2AgggAEIENwIQIABBCGpBtLvAABC5AQALAAsgA0EwaiQACyAAIAEQ1wEhAiALQQhqQeDDwAAoAgAiBkHkw8AAKAIAIBcQjQFB7MPAAEHsw8AAKAIAQQFqNgIAQejDwABB6MPAACgCACALLQAMQQFxazYCACAGIAsoAghBdGxqIgRBBGsgAjYCACAEQQhrIAE2AgAgBEEMayAANgIACyAEQQRrKAIAIQAQKiIBIAAlASYBQdzDwABB3MPAACgCAEEBajYCACALQSBqJAAgAQ8LIAIgBUEIaiIFaiAGcSECDAALAAsjAEEwayIAJAAgAEEBNgIMIABBqL7AADYCCCAAQgE3AhQgACAAQS9qrUKAgICAEIQ3AyAgACAAQSBqNgIQIABBCGpBjIvAABC5AQALiQUBCH8jAEHQAGsiAyQAIAEoAgAhBAJAAkAgAigCAEGAgICAeEYEQCADIAQ2AkQgA0EINgJAIANBno3AADYCPCADQQQ2AjggA0HTi8AANgI0IANBCDYCMCADQZaNwAA2AiwgA0EMNgIoIANB/ozAADYCJCACKAIEIQRBASEFIANByABqIgYgA0EkahB/IAMoAkwhAiADKAJIIgdFDQEgAyACNgJMIAMgBzYCSCADIAYgBBBGIAMoAgBBAXFFBEBBACEFDAILIAMoAgQhBCACEOkBDAILIAMgBDYCRCADQQY2AkAgA0GQjcAANgI8IANBBDYCOCADQdOLwAA2AjQgA0EGNgIwIANBio3AADYCLCADQQw2AiggA0H+jMAANgIkIANByABqIANBJGoQfyADKAJMIQcgAygCSCIKRQRAQQEhBSAHIQQMAgsgAyAHNgIgIAMgCjYCHCACKAIIQRhsIQYgAigCBCEEEPABIQgCQAJAA0AgBkUNASADEO8BIgk2AkwgAyAKNgJIIAlByovAAEEEIARBBGooAgAgBEEIaigCABCuASADQRBqIANByABqIARBDGoQfiADKAIQQQFxRQRAIAggBSAJEOcBIAZBGGshBiAFQQFqIQUgBEEYaiEEDAELCyADKAIUIQQgCRDpASAIEOkBDAELIAdBy43AAEEHEBwgCBDPASADQQhqIANBHGpB0o3AAEEEIAJBDGoQWiADKAIIQQFxRQRAQQAhBSAHIQQMAwsgAygCDCEECyAHEOkBQQEhBQwBCyACIQQLQQEhBiAFRQRAQeSLwABBBRAcIQIgASgCBCACIAQQzwFBACEGCyAAIAQ2AgQgACAGNgIAIANB0ABqJAALqwQBDH8gAUEBayEOIAAoAgQhCiAAKAIAIQsgACgCCCEMAkADQCAFDQECfwJAIAIgA0kNAANAIAEgA2ohBQJAAkACQCACIANrIgdBB00EQCACIANHDQEgAiEDDAULAkAgBUEDakF8cSIGIAVrIgQEQEEAIQADQCAAIAVqLQAAQQpGDQUgBCAAQQFqIgBHDQALIAQgB0EIayIATQ0BDAMLIAdBCGshAAsDQEGAgoQIIAYoAgAiCUGKlKjQAHNrIAlyQYCChAggBkEEaigCACIJQYqUqNAAc2sgCXJxQYCBgoR4cUGAgYKEeEcNAiAGQQhqIQYgBEEIaiIEIABNDQALDAELQQAhAANAIAAgBWotAABBCkYNAiAHIABBAWoiAEcNAAsgAiEDDAMLIAQgB0YEQCACIQMMAwsgBCAFaiEGIAIgBGsgA2shB0EAIQACQANAIAAgBmotAABBCkYNASAHIABBAWoiAEcNAAsgAiEDDAMLIAAgBGohAAsgACADaiIEQQFqIQMCQCACIARNDQAgACAFai0AAEEKRw0AQQAhBSADIgQMAwsgAiADTw0ACwsgAiAIRg0CQQEhBSAIIQQgAgshAAJAIAwtAAAEQCALQbiZwABBBCAKKAIMEQQADQELQQAhBiAAIAhHBEAgACAOai0AAEEKRiEGCyAAIAhrIQAgASAIaiEHIAwgBjoAACAEIQggCyAHIAAgCigCDBEEAEUNAQsLQQEhDQsgDQuRBAICfgJ/IwBBIGsiBiQAIAACfwJAAkACQAJAAkAgAg4CAAECCyAAQQA6AAFBAQwECyABLQAAIgVBK2sOAwIBAgELIAEtAAAhBQsCQAJAAkACQAJAAkACQAJAIAVB/wFxQStrDgMAAgECCyACQQFrIQUgAUEBaiEBIAJBEEsNAgwFCyACQQFrIQUgAUEBaiEBIAJBEU8EQANAIAVFDQcgBkEQaiADIANCP4cQayABLQAAQTBrIgJBCUsNCCAGKQMYIAYpAxAiA0I/h1INBCABQQFqIQEgBUEBayEFIAKtIgRCAFIgAyADIAR9IgNVc0UNAAsgAEEDOgABQQEMCAsDQCAFRQ0GIAEtAABBMGsiAkEJSw0HIAFBAWohASAFQQFrIQUgA0IKfiACrX0hAwwACwALIAIiBUEQSQ0DCwwBCyAAQQM6AAFBAQwECwJAA0AgBUUNAyAGIAMgA0I/hxBrIAEtAABBMGsiAkEJSw0EIAYpAwggBikDACIDQj+HUg0BIAFBAWohASAFQQFrIQUgAq0iBEIAVCADIAMgBHwiA1VzRQ0ACyAAQQI6AAFBAQwECyAAQQI6AAFBAQwDCwNAIAVFDQEgAS0AAEEwayICQQlLDQIgAUEBaiEBIAVBAWshBSACrSADQgp+fCEDDAALAAsgACADNwMIQQAMAQsgAEEBOgABQQELOgAAIAZBIGokAAu6BAEIfyMAQRBrIgMkACADIAE2AgQgAyAANgIAIANCoICAgA43AggCfwJAAkACQCACKAIQIgkEQCACKAIUIgANAQwCCyACKAIMIgBFDQEgAigCCCIBIABBA3RqIQQgAEEBa0H/////AXFBAWohBiACKAIAIQADQAJAIABBBGooAgAiBUUNACADKAIAIAAoAgAgBSADKAIEKAIMEQQARQ0AQQEMBQtBASABKAIAIAMgAUEEaigCABECAA0EGiAAQQhqIQAgBCABQQhqIgFHDQALDAILIABBGGwhCiAAQQFrQf////8BcUEBaiEGIAIoAgghBCACKAIAIQADQAJAIABBBGooAgAiAUUNACADKAIAIAAoAgAgASADKAIEKAIMEQQARQ0AQQEMBAtBACEHQQAhCAJAAkACQCAFIAlqIgFBCGovAQBBAWsOAgECAAsgAUEKai8BACEIDAELIAQgAUEMaigCAEEDdGovAQQhCAsCQAJAAkAgAS8BAEEBaw4CAQIACyABQQJqLwEAIQcMAQsgBCABQQRqKAIAQQN0ai8BBCEHCyADIAc7AQ4gAyAIOwEMIAMgAUEUaigCADYCCEEBIAQgAUEQaigCAEEDdGoiASgCACADIAEoAgQRAgANAxogAEEIaiEAIAVBGGoiBSAKRw0ACwwBCwsCQCAGIAIoAgRPDQAgAygCACACKAIAIAZBA3RqIgAoAgAgACgCBCADKAIEKAIMEQQARQ0AQQEMAQtBAAsgA0EQaiQAC64EAgd/AX4gACgCCCIGQYCAgAFxIgpBFXYgBGohCQJAIAZBgICABHFFBEBBACEBDAELIAIEQCABIQUgAiEIA0AgByAFLAAAQb9/SmohByAFQQFqIQUgCEEBayIIDQALCyAHIAlqIQkLQStBgIDEACAKGyEKAkAgAC8BDCIIIAlLBEACQAJAIAZBgICACHFFBEAgCCAJayEJQQAhBUEAIQgCQAJAAkAgBkEddkEDcUEBaw4DAAEAAgsgCSEIDAELIAlB/v8DcUEBdiEICyAGQf///wBxIQsgACgCBCEGIAAoAgAhAANAIAVB//8DcSAIQf//A3FPDQJBASEHIAVBAWohBSAAIAsgBigCEBECAEUNAAsMBAsgACAAKQIIIgynQYCAgP95cUGwgICAAnI2AghBASEHIAAoAgAiBiAAKAIEIgsgCiABIAIQqwENA0EAIQUgCCAJa0H//wNxIQEDQCAFQf//A3EgAU8NAiAFQQFqIQUgBkEwIAsoAhARAgBFDQALDAMLQQEhByAAIAYgCiABIAIQqwENAiAAIAMgBCAGKAIMEQQADQIgCSAIa0H//wNxIQFBACEFA0AgASAFQf//A3FNBEBBAA8LIAVBAWohBSAAIAsgBigCEBECAEUNAAsMAgsgBiADIAQgCygCDBEEAA0BIAAgDDcCCEEADwtBASEHIAAoAgAiBSAAKAIEIgAgCiABIAIQqwENACAFIAMgBCAAKAIMEQQAIQcLIAcLjwQBBn8jAEGAAWsiAyQAIANBxABqIAEgAhAyIAMoAkghAgJAIAMoAkQiAUUEQCAAQYCAgIB4NgIIIAAgAjYCAAwBCyADQQA2AgwgA0KAgICAwAA3AgQgA0HMAGohCANAAkAgAkUNACADQcQAaiABIAIQECADKAJEIQQCQAJAAkACQAJAIAMoAkxBCEYEQCAERQ0EIABBgICAgHg2AgggACAENgIADAELIAMoAkghASADQRBqIAhBNPwKAAAgA0HEAGogBCABEDYgAygCSCECAkAgAygCRCIERQRAIABBgICAgHg2AgggACACNgIADAELIANBxABqIAQgAhAjIAMoAkQhASADLQBMIgdBAkcNAyABRQ0CIABBgICAgHg2AgggACABNgIACyADQRBqEI8BCyADQQRqEOgBDAYLQQAhBUEAEPQBQQAhByAEIQEMAgsgAy0ATSEFIAMoAkghAgwBC0EAEPQBIAIhBgwBCyAHQQFxIgQgAnIEQCADIAVBAXE6AHkgAyAEOgB4IANBxABqIgQgA0EQakE0/AoAACADQQRqIAQQogEMAgsgA0EAOgB4IAMgBUEBcSIEOgB5IANBxABqIgUgA0EQakE0/AoAACADQQRqIAUQogEgBA0BCwsgACADKQIENwIIIAAgBjYCBCAAIAE2AgAgAEEQaiADQQxqKAIANgIACyADQYABaiQAC74EAQZ/IwBB0ABrIgMkACADEEggA0GBzAA7ASggA0KmgICAEDcDICADQThqIgYgA0EgaiABIAIQTSADKAI4IQQCQAJ/AkACQCADKAJAIgdBgIDEAEcE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CjcDACAFIAk3AwggBSgCAEEBcUUNAQwCCyAEIAEoAhQgASgCGBBbDQELQYCAxAAhBCAHIQYgAiEHIAMhCAsgACAINgIEIAAgBzYCACAGIAQQ7gEgBUEgaiQAC7cBAgJ/AX4jAEEgayIDJAAgA0EMaiABIAIQJSADKAIMIQICQCADKAIUIgFBgICAgHhGBEAgAEGAgICAeDYCCAwBCyADKAIQIQQgAyADKQIYIgU3AhAgAyABNgIMIABBCGohASAFQoCAgIAQWgRAIAEgAykCDDcCACAAIAQ2AgQgAUEIaiADQRRqKAIANgIADAELIAFBgICAgHg2AgAgA0EMahCkAUEAIQILIAAgAjYCACADQSBqJAALmQEBA38jAEHgAGsiAyQAAn8CQCACQYABTwRAIANBADYCECADQQhqIAIgA0EQahCVASADKAIIIQIgAygCDCIEIAFPDQEgBEEBRwRAIANBIGoiBSAAIAEgAiAEEBIgA0EUaiAFEC0gAygCFAwDCyACLQAAIAAgARAzDAILIAIgACABEDMMAQsgAiAEIAAgARDAAQsgA0HgAGokAAu2AQIEfwF+IwBBIGsiAyQAIANBDGoiBSABIAIQDiADKAIMIQQCQCADKAIUIgZBgICAgHhGBEAgBEUEQCADQQE6AAwgACAFIAEgAhAMDAILIABBgICAgHg2AgggACAENgIADAELIAMoAhAhAiADKQIYIQdBEBDtASIBIAc3AgggASAGNgIEIAFBBDYCACAAQQE2AhAgACABNgIMIABBATYCCCAAIAI2AgQgACAENgIACyADQSBqJAALsQEBA38jAEEQayIEJAAgBCABNgIIIAQgASACajYCDAJAAkAgBEEIahCmASIDQYCAxABGDQAgAxBhDQAgA0H8AEYgA0EmayIFQRVNQQBBASAFdEGNgIABcRtyDQBBFBDtASIDIAI2AhAgAyABNgIMIANBFTYCCCADQfm6wAA2AgQgA0GAgICAeDYCACAAIAM2AgQgAEEANgIADAELIAAgAjYCBCAAIAE2AgALIARBEGokAAuZAQECfwJAIABBCWsiAUEYTwRAQQAhASAAQYABSQ0BAkAgAEEIdiICBEAgAkEwRwRAIAJBIEYNAiACQRZHDQQgAEGALUYhAQwECyAAQYDgAEYhAQwDCyAAQf8BcUGGvMAAai0AACEBDAILIABB/wFxQYa8wABqLQAAQQJxQQF2IQEMAQtBAEGfgIAEIAF2QQFxayEBCyABQQFxC5gBAQN/IwBBIGsiAiQAA0ACQCACQQRqIAEQUSACKAIEQQZGDQAgACgCCCIDIAAoAgBGBEAgAkEUaiABEG8gACACKAIUQQFqIgRBfyAEGxC8AQsgACADQQFqNgIIIAAoAgQgA0EEdGoiAyACKQIENwIAIANBCGogAkEMaikCADcCAAwBCwsgAkEEahDgASABEIABIAJBIGokAAucAQECfyMAQRBrIgMkAAJAIAEoAgAEQAJAIAEoAgQiAiABKAIMRwRAIAEgAkEQajYCBCADQQhqIAJBDGooAgA2AgAgAyACKQIENwMAIAIoAgAiAkEGRw0BCyABEOwBIAFBADYCAEEGIQILIAAgAjYCACAAIAMpAwA3AgQgAEEMaiADQQhqKAIANgIADAELIABBBjYCAAsgA0EQaiQAC48BAQF/IwBBIGsiAiQAAn8gACgCAEGAgICAeEcEQCABKAIAIAAoAgQgACgCCCABKAIEKAIMEQQADAELIAJBEGogACgCDCgCACIAQQhqKQIANwMAIAJBGGogAEEQaikCADcDACACIAApAgA3AwggASgCBCEAIAIoAgwaIAEoAgAgACACQQhqECALIAJBIGokAAuPAQECfyMAQRBrIgMkACADIAE2AgggAyABIAJqNgIMAkAgA0EIahCmASIEQYCAxABHBEAgAyABIAICf0EBIARBgAFJDQAaQQIgBEGAEEkNABpBA0EEIARBgIAESRsLQbitwAAQhwEgACADKQMANwIADAELIABBADYCAEGAgMQAIQQLIAAgBDYCCCADQRBqJAALjgEBAn8jAEEQayIEJAACfyADKAIEBEAgAygCCCIFRQRAIARBCGogASACEMIBIAQoAgghAyAEKAIMDAILIAMoAgAgBSABIAIQFSEDIAIMAQsgBCABIAIQwgEgBCgCACEDIAQoAgQLIQUgACADIAEgAxs2AgQgACADRTYCACAAIAUgAiADGzYCCCAEQRBqJAALmgEBAn8jAEEQayIEJAAgBCABKAIgIAEoAiQgAiADEHsCQAJAAkAgBCgCACICRQRAIAQoAgQhAQwBCyAEKAIMIQMgBCgCCCEFIAQgASACIAQoAgQQcyAEKAIEIQEgBCgCACICDQELIABBADYCACAAIAE2AgQMAQsgACADNgIMIAAgBTYCCCAAIAE2AgQgACACNgIACyAEQRBqJAALkAEBA38jAEEgayIGJAACQCABBEAgBkEUaiIHIAEgAyAEIAUgAigCEBEGACAAIAYoAhwiASAGKAIUSQR/IAZBCGogByABQQRBBBBHIAYoAggiAUGBgICAeEcNAiAGKAIcBSABCzYCBCAAIAYoAhg2AgAgBkEgaiQADwsQiQIACyAGKAIMIQggAUHEu8AAENsBAAuAAQIBfgF/AkACQCABrSADrX4iBEIgiKcNACAEpyIBIAJBAWtqIgUgAUkNACAFQQAgAmtxIgEgA0EIamoiAyABSQ0BQYCAgIB4IAJrIANPBEAgACABNgIIIAAgAzYCBCAAIAI2AgAPCyAAQQA2AgAPCyAAQQA2AgAPCyAAQQA2AgALkQEBAX8jAEFAaiIDJAAgA0IANwM4IANBOGogACgCACUBEAYgAyADKAI8IgA2AjQgAyADKAI4NgIwIAMgADYCLCADQQg2AiggA0ECNgIQIANBnMPAADYCDCADQgE3AhggAyADQSxqNgIkIAMgA0EkajYCFCABIAIgA0EMahAgIAMoAiwgAygCMBD7ASADQUBrJAALTwEDfiAAIAFC/////w+DIgNCCn4iBEIAIgMgAUIgiEIKfnwiAUIghnwiBTcDACAAIAQgBVatIAEgA1StQiCGIAFCIIiEfCACQgp+fDcDCAt8AQF/IwBBQGoiBSQAIAUgATYCDCAFIAA2AgggBSADNgIUIAUgAjYCECAFQQI2AhwgBUGQmcAANgIYIAVCAjcCJCAFIAVBEGqtQoCAgIDgAIQ3AzggBSAFQQhqrUKAgICA8ACENwMwIAUgBUEwajYCICAFQRhqIAQQuQEAC2gCAX8BfgJAAkAgAiADakEBa0EAIAJrca0gAa1+IgZCIIhQRQ0AIAanIgNBgICAgHggAmtLDQAgA0UEQEEAIQEMAgsgAyACIgUQywEiAg0BCyAFIAQQ2wEACyAAIAI2AgQgACABNgIAC3UBAn8gASACp3EhA0EIIQQDfyAAIANqKQAAQoCBgoSIkKDAgH+DIgJQBH8gAyAEaiABcSEDIARBCGohBAwBBSAAIAJ6p0EDdiADaiABcSIDaiwAAEEATgR/IAApAwBCgIGChIiQoMCAf4N6p0EDdgUgAwsLCwt1AQF/IAEoAiwgASgCJGtBBHZBACABKAIgGyABKAIcIAEoAhRrQQR2QQAgASgCEBtqIQICfwJAIAEoAgBFDQAgASgCDCABKAIERg0AIAAgAjYCAEEAIQJBBAwBCyAAQQE2AgQgACACNgIAQQgLIABqIAI2AgALgAEBAn8jAEEQayIEJAAgBCABKAIAIAEoAgQgAiADEHsCQCAEKAIARQRAIAQoAgQiBUUEQCAAIAEoAgggASgCDCACIAMQe0EAEPQBDAILIABBADYCACAAIAU2AgQMAQsgACAEKQIANwIAIABBCGogBEEIaikCADcCAAsgBEEQaiQAC3cBBH8jAEEQayICJAAgAiABKAIANgIIIAIgASgCBCIDNgIAIAIgAzYCBCAAIAEoAggiARC8ASAAKAIIIQQgAUEEdCIFBEAgACgCBCAEQQR0aiADIAX8CgAACyAAIAEgBGo2AgggAiADNgIMIAIQnAEgAkEQaiQAC3YBBX8jAEEQayICJAAgASgCACEEIAEoAgQhBSACQQhqIAEQSQJAIAIoAghBAXFFBEBBgIDEACEDDAELIAIoAgwhAyABIAEoAgAgASgCCCIGIAVqIAQgASgCBGprajYCCAsgACADNgIEIAAgBjYCACACQRBqJAALcAECfyMAQRBrIgQkACAEQQhqIgUgASACIAMQXCAEKAIMIQMCQAJAIAQoAggiAQRAIAUgASADEDIgBCgCDCEDIAQoAggiAQ0BCyAAQQA2AgAgACADNgIEDAELIAAgAzYCBCAAIAE2AgALIARBEGokAAtuAQJ/IwBBEGsiAyQAIANBCGoiBCABIAIQYCADKAIMIQICQAJAIAMoAggiAQRAIAQgASACEDYgAygCDCECIAMoAggiAQ0BCyAAQQA2AgAgACACNgIEDAELIAAgAjYCBCAAIAE2AgALIANBEGokAAttAQN/IwBBEGsiAiQAAkACQAJAIAAoAggiA0UNACAAKAIEIANBBHRqIgNBEGsiBEUNACAEKAIARQ0BCyACQQRqIAEQgQEgAkEANgIAIAAgAkHwtMAAEJEBDAELIANBDGsgARCCAQsgAkEQaiQAC20BA38jAEEQayIDJAACQCAAIAEoAggiBCABKAIASQR/IANBCGogASAEQQFBARBHIAMoAggiBEGBgICAeEcNASABKAIIBSAECzYCBCAA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bGoiACABKQIANwIAIABBCGogAUEIaigCADYCAAs5ACABIAIQVSAAAn9BASABQYABSQ0AGkECIAFBgBBJDQAaQQNBBCABQYCABEkbCzYCBCAAIAI2AgALSwECfyMAQRBrIgEkACABQQhqIAAgACgCAEEBQQRBGBBCIAEoAggiAEGBgICAeEcEQCABKAIMIQIgAEGorcAAENsBAAsgAUEQaiQAC0gBAn8jAEEQayICJAAgAkEIaiAAIAAoAgBBAUEEQQwQQiACKAIIIgBBgYCAgHhHBEAgAigCDCEDIAAgARDbAQALIAJBEGokAAtFAQJ/IAAoAiAgACgCGCIBa0EEdiECA0AgAgRAIAJBAWshAiABEL4BIAFBEGohAQwBCwsgACgCHCAAKAIUEIICIAAQ4wELSAECfyMAQRBrIgUkACAFQQhqIAAgASACIAMgBBBCIAUoAggiAEGBgICAeEcEQCAFKAIMIQYgAEHgvsAAENsBAAsgBUEQaiQAC0EBA38gACgCBCIDQQhqIQEgACgCCCECA0AgAgRAIAJBAWshAiABEOEBIAFBGGohAQwBCwsgACgCACADQQRBGBB4C0QBAX8jAEEgayIDJAAgAyACNgIcIAMgATYCGCADIAI2AhQgA0EIaiADQRRqQazDwAAQdiAAIAMpAwg3AwAgA0EgaiQAC0ABAn8gACgCDCAAKAIEIgFrQQR2IQIDQCACBEAgAkEBayECIAEQiwEgAUEQaiEBDAELCyAAKAIIIAAoAgAQggILQgEBfyMAQSBrIgMkACADQQA2AhAgA0EBNgIEIANCBDcCCCADIAE2AhwgAyAANgIYIAMgA0EYajYCACADIAIQuQEACz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACEKQBIAJBDGohAgwBCwsgACgCACADQQRBDBB4Cz4BA38gACgCCCEBIAAoAgQiAyECA0AgAQRAIAFBAWshASACENQBIAJBGGohAgwBCwsgACgCACADQQRBGBB4CzsBAX8DQCACBEAgACgAACEDIAAgASgAADYAACABIAM2AAAgAkEBayECIAFBBGohASAAQQRqIQAMAQsLCzcBAX8jAEEgayICJAAgAkEIaiAAKAIAIAJBFmoQNSABQQFBACACKAIIIAIoAgwQISACQSBqJAALdwEDfyAAKAIIIgMgACgCAEYEQCMAQRBrIgIkACACQQhqIAAgACgCAEEBQQRBOBBCIAIoAggiBEGBgICAeEcEQCACKAIMGiAEQayuwAAQ2wEACyACQRBqJAALIAAoAgQgA0E4bGogAUE4/AoAACAAIANBAWo2AggLegEDfyAAKAIIIgUgACgCAEYEQCMAQRBrIgQkACAEQQhqIAAgACgCAEEBQQRBCBBCIAQoAggiBkGBgICAeEcEQCAEKAIMGiAGIAMQ2wEACyAEQRBqJAALIAAgBUEBajYCCCAAKAIEIAVBA3RqIgAgAjYCBCAAIAE2AgALOwEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQiwEgAkEQaiECDAELCyAAKAIAIAMQggILOwEDfyAAKAIIIQEgACgCBCIDIQIDQCABBEAgAUEBayEBIAIQpAEgAkEMaiECDAELCyAAKAIAIAMQgQILNAECfyMAQRBrIgEkACABQQhqIAAQSSABKAIIIQAgASgCDCABQRBqJABBgIDEACAAQQFxGws9AgF/AX4jAEEQayICJAAgAkEIaiABQQFBAUHUq8AAEG0gAikDCCEDIABBADYCCCAAIAM3AgAgAkEQaiQAC0MBAX9BFBDtASIEIAI2AhAgBCABNgIMIABBgICAgHg2AgggACAENgIAIARBCGogA0EIaigCADYCACAEIAMpAgA3AgALNwEBfyMAQRBrIgMkACADQQhqIAEgAhArIAMoAgwhASAAIAMoAgg2AgAgACABNgIEIANBEGokAAs1AQF/IAAgAiABayICEEMgACgCCCEDIAIEQCAAKAIEIANqIAEgAvwKAAALIAAgAiADajYCCAs4AAJAIAJBgIDEAEYNACAAIAIgASgCEBECAEUNAEEBDwsgA0UEQEEADwsgACADIAQgASgCDBEEAAs2AQF/IAAgAiABayICEL0BIAAoAgghAyACBEAgACgCBCADaiABIAL8CgAACyAAIAIgA2o2AggLLwACQCABaUEBRyAAQYCAgIB4IAFrS3INACAABEAgACABEMsBIgFFDQELIAEPCwALNAEBfyMAQRBrIgUkACAFQQhqIAMgBBDaASAFKAIMIQMgACABIAIQHCADEM8BIAVBEGokAAs3AQF/IwBBEGsiAyQAIANBCGogASACENkBIAMoAgwhASAAQdOLwABBBBAcIAEQzwEgA0EQaiQACzwBAn8gASgCBCECIAEoAgAhA0EIEA0iAUUEQAALIAEgAjYCBCABIAM2AgAgAEGgwcAANgIEIAAgATYCAAs3AQF/IwBBIGsiASQAIAFBADYCGCABQQE2AgwgAUHoj8AANgIIIAFCBDcCECABQQhqIAAQuQEACzwBAX9BASECAkAgACgCACABEDgNACABKAIAQYC3wABBAiABKAIEKAIMEQQADQAgACgCBCABEDghAgsgAgtCAQF/QRQQ7QEiBSACNgIQIAUgATYCDCAFIAQ2AgggBSADNgIEIAVBgICAgHg2AgAgAEGAgICAeDYCCCAAIAU2AgALPgEBf0EUEO0BIgUgAjYCECAFIAE2AgwgBSAENgIIIAUgAzYCBCAFQYCAgIB4NgIAIABBCDYCCCAAIAU2AgALLQACQCADaUEBRyABQYCAgIB4IANrS3INACAAIAEgAyACEBUiAEUNACAADwsACy8BAX8gACgCCCEBIAAoAgQhAANAIAEEQCABQQFrIQEgABCPASAAQThqIQAMAQsLCywAIAAoAgBBBEcEQCAAEL8BDwsgACgCBCIAEL8BIABBMGoQtwEgAEHkABB9Cy8AIAAoAgBBgICAgHhHBEAgABCfASAAQQxqEJ4BDwsgACgCBCIAEOgBIABBDBB9C/oBAgJ/AX4jAEEQayICJAAgAkEBOwEMIAIgATYCCCACIAA2AgQjAEEQayIBJAAgAkEEaiIAKQIAIQQgASAANgIMIAEgBDcCBCMAQRBrIgAkACABQQRqIgEoAgAiAigCDCEDAkACQAJAAkAgAigCBA4CAAECCyADDQFBASECQQAhAwwCCyADDQAgAigCACICKAIEIQMgAigCACECDAELIABBgICAgHg2AgAgACABNgIMIABBzMHAACABKAIEIAEoAggiAC0ACCAALQAJEFQACyAAIAM2AgQgACACNgIAIABBsMHAACABKAIEIAEoAggiAC0ACCAALQAJEFQACygAIAMgBCABIAIQwQEhASAAIAQgAms2AgQgACACIANqQQAgARs2AgALrwgBCH8jAEEQayIDJAAjAEGQAWsiAiQAIAJBKGogACABEJsBIAIoAiwhByACKAIoIQgCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAQfDDwAAtAABBAWsOAwQDAQALQfDDwABBAjoAAEH8w8AAKAIAQf////8HcQRAQcTHwAAoAgANAgtB9MPAACgCAA0HQfDDwABBAzoAAEH4w8AAQQE2AgALIAJBIGogCCAHEC8gAkHIAGogAigCICIBIAIoAiQiBBAiIAIoAkghACACKAJQQYCAgIB4Rw0DIABFDQQgAkGIAWogAEEQaigCADYCACACQYABaiAAQQhqKQIANwMAIAIgACkCADcDeCACQTBqIAEgBCACQfgAahApIAAQhwIMBQsgAkEANgKIASACQQE2AnwgAkH4wMAANgJ4IAJCBDcCgAEgAkH4AGpBgMHAABC5AQALIAJBADYCiAEgAkEBNgJ8IAJB6I7AADYCeAwICyACQQA2AogBIAJBATYCfCACQaiOwAA2AngMBwsgAkHQAGohBSACKAJYIQYgAkEYaiAAIAIoAkwiCRAvAkAgAigCHARAIAIgCTYCiAEgAiAANgKEASACQRU2AoABIAJB+brAADYCfCACQYCAgIB4NgJ4IAJBMGogASAEIAJB+ABqECkMAQsgBgRAIAJBPGogBUEIaigCADYCACACQYGAgIB4NgIwIAIgBSkCADcCNAwFCyACQTBqQeytwABBDhCEASACQYCAgIB4NgI8CyAFEOgBDAELIAIgBDYCiAEgAiABNgKEASACQRU2AoABIAJB+brAADYCfCACQYCAgIB4NgJ4IAJBMGogASAEIAJB+ABqECkLIAIoAjBBgYCAgHhGDQEgAkHYAGogAkFAaykCADcDACACQdAAaiACQThqKQIANwMAIAIgAikCMDcDSCACQQI2AnQgAiACQcgAajYCcCACQgE3AoQBIAJBATYCfCACQai+wAA2AnggAiACQfAAajYCgAEgAkHkAGogAkH4AGoQPiACQRBqIAIoAmgiASACKAJsENoBIAIoAhQhACACKAJkIAEQ+QEgAigCSCIBQYCAgIB4RwRAIAEgAigCTBD5AQsgAigCVCIBQYCAgIB4RwRAIAEgAigCWBD5AQtBASEBDAILAAsgAigCOCEEIAIoAjRBACEBIAJBADYCeCACQQhqIAJBNGoiBiACQfgAahB6IAIoAgwhACACKAIIQQFxDQEgBhC2ASAEEPoBCyAHIAgQ+QEgAyABNgIIIAMgAEEAIAEbNgIEIANBACAAIAEbNgIAIAJBkAFqJAAMAgsgAiAANgJ4QYCPwABBKyACQfgAakHwjsAAQayPwAAQbAALIAJCBDcCgAEgAkH4AGpB7I3AABC5AQALIAMoAgAgAygCBCADKAIIIANBEGokAAskAQF/IAAoAgAgACgCCCICayABSQRAIAAgAiABQQRBEBCZAQsLJAEBfyAAKAIAIAAoAggiAmsgAUkEQCAAIAIgAUEBQQEQmQELCygAAkACQAJAIAAoAgAOBAEBAQIACyAAQQRqEKQBCw8LIABBBGoQ6AELHQAgAEEYahC4ASAAKAIAQQNHBEAgAEEIahDhAQsLGQEBfyABIANGBH8gACACIAEQiQEFQQELRQsZAQF/IAEgA08EfyACIAAgAxCJAQVBAQtFCx4AIAIEQCACIAEQywEhAQsgACACNgIEIAAgATYCAAslAQF/IAAoAgAiAUGAgICAeHJBgICAgHhHBEAgACgCBCABEH0LCx4AIABFBEAQiQIACyAAIAIgAyAEIAUgASgCEBEJAAscACAARQRAEIkCAAsgACACIAMgBCABKAIQEQUACxwAIABFBEAQiQIACyAAIAIgAyAEIAEoAhARHQALHAAgAEUEQBCJAgALIAAgAiADIAQgASgCEBEfAAscACAARQRAEIkCAAsgACACIAMgBCABKAIQESEACxwAIABFBEAQiQIACyAAIAIgAyAEIAEoAhARBwALGwAgASAAKAIAIgBBBGooAgAgAEEIaigCABATCxUAIAFBCU8EQCABIAAQLA8LIAAQDQsZACAAIAEgAhAcQYIBQYMBIANBAXEbEM8BCxcBAX8gACgCACIBBEAgACgCBCABEH0LCxoAIABFBEAQiQIACyAAIAIgAyABKAIQEQAACxwBAW8gACUBIAElASABEIMBIAIlASACEIMBEAQLIAEBbyADuBAFIQQQKiIDIAQmASAAIAEgAhAcIAMQzwELFQAgACgCBEEFRwRAIABBBGoQvgELCxgAIABFBEAQiQIACyAAIAIgASgCEBECAAscACABKAIAIAAoAgAgACgCBCABKAIEKAIMEQQACxcAIAAoAgAgACgCBBD5ASAAQQxqEKQBCxcAIAAoAgAgAEEEaigCABDiASAAEIcCCxwAIABBADYCECAAQgA3AgggAEKAgICAwAA3AgALFgEBbyAAIAEQACECECoiACACJgEgAAsNACABBEAgACABEH0LCxQAIAAg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fQsNACABQYaYwABBGBATCwwAQdS7wABBMhAKAAsMACAAIAEpAgA3AwALCgAgACgCABDpAQsJACAAQQA2AgALuQEBBH8jAEEgayIEJAACQAJ/QQAgASABIAJqIgJLDQAaQQBBCCACIAAoAgAiAUEBdCIFIAIgBUsbIgIgAkEITRsiBUEASA0AGkEAIQIgBCABBH8gBCABNgIcIAQgACgCBDYCFEEBBUEACzYCGCAEQQhqIAUgBEEUahCKASAEKAIIQQFHDQEgBCgCECEAIAQoAgwLIAAhByADENsBAAsgBCgCDCEBIAAgBTYCACAAIAE2AgQgBEEgaiQAC2YBAX8jAEEwayIEJAAgBCABNgIEIAQgADYCACAEQQI2AgwgBCADNgIIIARCAjcCFCAEIARBBGqtQoCAgIAwhDcDKCAEIAStQoCAgIAwhDcDICAEIARBIGo2AhAgBEEIaiACELkBAAsLjUIKAEGAgMAACwv//////////wAAEABBmIDAAAv1D2xpYnJhcnkvYWxsb2Mvc3JjL2ZtdC5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHdhc20tYmluZGdlbi0wLjIuMTAwXHNyY1xjb252ZXJ0XHNsaWNlcy5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL2l0ZXIvdHJhaXRzL2l0ZXJhdG9yLnJzAFY6XC5jYWNoZVxjYXJnb1xnaXRcY2hlY2tvdXRzXGRlbm9fdGFza19zaGVsbC01OTZlMGM0MmFiZDJkZmIzXGMxYTFjZjhcc3JjXHBhcnNlci5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2NvcmUvc3JjL3N0ci9wYXR0ZXJuLnJzAH5cLnJ1c3R1cFx0b29sY2hhaW5zXHN0YWJsZS14ODZfNjQtcGMtd2luZG93cy1tc3ZjXGxpYi9ydXN0bGliL3NyYy9ydXN0XGxpYnJhcnkvYWxsb2Mvc3JjL3N0cmluZy5ycwBsaWJyYXJ5L3N0ZC9zcmMvcGFuaWNraW5nLnJzAGxpYnJhcnkvY29yZS9zcmMvdW5pY29kZS9wcmludGFibGUucnMAflwucnVzdHVwXHRvb2xjaGFpbnNcc3RhYmxlLXg4Nl82NC1wYy13aW5kb3dzLW1zdmNcbGliL3J1c3RsaWIvc3JjL3J1c3RcbGlicmFyeS9hbGxvYy9zcmMvc2xpY2UucnMAL3J1c3QvZGVwcy9oYXNoYnJvd24tMC4xNS40L3NyYy9yYXcvbW9kLnJzAGxpYnJhcnkvY29yZS9zcmMvc3RyL21vZC5ycwB+XC5ydXN0dXBcdG9vbGNoYWluc1xzdGFibGUteDg2XzY0LXBjLXdpbmRvd3MtbXN2Y1xsaWIvcnVzdGxpYi9zcmMvcnVzdFxsaWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdGMvMjk0ODM4ODNlZWQ2OWQ1ZmI0ZGIwMTk2NGNkZjJhZjRkODZlOWNiMi9saWJyYXJ5L2FsbG9jL3NyYy9yYXdfdmVjL21vZC5ycwAvcnVzdC9kZXBzL2RsbWFsbG9jLTAuMi45L3NyYy9kbG1hbGxvYy5ycwBzcmNccnNfbGliXHNyY1xsaWIucnMAVjpcLmNhY2hlXGNhcmdvXHJlZ2lzdHJ5XHNyY1xpbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zlxjb25zb2xlX2Vycm9yX3BhbmljX2hvb2stMC4xLjdcc3JjXGxpYi5ycwBWOlwuY2FjaGVcY2FyZ29ccmVnaXN0cnlcc3JjXGluZGV4LmNyYXRlcy5pby0xOTQ5Y2Y4YzZiNWI1NTdmXHNlcmRlLXdhc20tYmluZGdlbi0wLjYuNVxzcmNcbGliLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2Zcb25jZV9jZWxsLTEuMjEuNFxzcmNcbGliLnJzAFY6XC5jYWNoZVxjYXJnb1xyZWdpc3RyeVxzcmNcaW5kZXguY3JhdGVzLmlvLTE5NDljZjhjNmI1YjU1N2ZcbW9uY2gtMC42LjBcc3JjXGxpYi5ycwB7BBAAYgAAADUAAAAOAAAAaXNBc3luY2VuZHNMaW5lc2VxdWVuY2VhbmRvcnN0ZG91dHN0ZG91dFN0ZGVycm5hbWV2YWx1ZWtpbmR3b3JkZmRDb21tYW5kaW5uZXJyZWRpcmVjdFBpcGVsaW5lbmVnYXRlZG1heWJlRmRvcGlvRmlsZVNlcXVlbmNlU2hlbGxWYXJzaGVsbFZhcnBpcGVsaW5lQm9vbGVhbkxpc3Rib29sZWFuTGlzdHRleHR2YXJpYWJsZXRpbGRlY29tbWFuZHF1b3RlZGJyYWNlaW5wdXRvdXRwdXRjdXJyZW50bmV4dENvbW1hbmRJbm5lclNpbXBsZXNpbXBsZVN1YnNoZWxsc3Vic2hlbGxQaXBlU2VxdWVuY2VQaXBlbGluZUlubmVycGlwZVNlcXVlbmNlZW52VmFyc2FyZ3NpdGVtc292ZXJ3cml0ZWFwcGVuZAAAEwQQAGgAAACVAAAADgAAAE9uY2UgaW5zdGFuY2UgaGFzIHByZXZpb3VzbHkgYmVlbiBwb2lzb25lZAAA/AYQACoAAABvbmUtdGltZSBpbml0aWFsaXphdGlvbiBtYXkgbm90IGJlIHBlcmZvcm1lZCByZWN1cnNpdmVseTAHEAA4AAAAGgAAAAQAAAAEAAAAGwAAAGNhbGxlZCBgUmVzdWx0Ojp1bndyYXAoKWAgb24gYW4gYEVycmAgdmFsdWUA/QMQABYAAAAIAAAAOAAAABwAAAAMAAAABAAAAB0AAAAeAAAAHwAAAGNhcGFjaXR5IG92ZXJmbG93AAAA1AcQABEAAACyAxAAIQAAAC4CAAARAAAAEAIQABwAAADoAQAAFwBBmJDAAAuFAQEAAAAgAAAAYSBmb3JtYXR0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHdoZW4gdGhlIHVuZGVybHlpbmcgc3RyZWFtIGRpZCBub3QAABgAEAAZAAAAigIAAA4AAAAhAAAADAAAAAQAAAAiAAAAIwAAACQAQaiRwAAL7CoBAAAAJQAAAGEgRGlzcGxheSBpbXBsZW1lbnRhdGlvbiByZXR1cm5lZCBhbiBlcnJvciB1bmV4cGVjdGVkbHkAyAEQAGQAAAAOCwAADgAAAEVycm9yCgpTdGFjazoKCgBwAAcALQEBAQIBAgEBSAswFRABZQcCBgICAQQjAR4bWws6CQkBGAQBCQEDAQUrAzsJKhgBIDcBAQEECAQBAwcKAh0BOgEBAQIECAEJAQoCGgECAjkBBAIEAgIDAwEeAgMBCwI5AQQFAQIEARQCFgYBAToBAQIBBAgBBwMKAh4BOwEBAQwBCQEoAQMBNwEBAwUDAQQHAgsCHQE6AQICAQEDAwEEBwILAhwCOQIBAQIECAEJAQoCHQFIAQQBAgMBAQgBUQECBwwIYgECCQsHSQIbAQEBAQE3DgEFAQIFCwEkCQFmBAEGAQICAhkCBAMQBA0BAgIGAQ8BAAMABBwDHQIeAkACAQcIAQILCQEtAwEBdQIiAXYDBAIJAQYD2wICAToBAQcBAQEBAggGCgIBMB8xBDAKBAMmCQwCIAQCBjgBAQIDAQEFOAgCApgDAQ0BBwQBBgEDAsZAAAHDIQADjQFgIAAGaQIABAEKIAJQAgABAwEEARkCBQGXAhoSDQEmCBkLAQEsAzABAgQCAgIBJAFDBgICAgIMAQgBLwEzAQEDAgIFAgEBKgIIAe4BAgEEAQABABAQEAACAAHiAZUFAAMBAgUEKAMEAaUCAARBBQACTwRGCzEEewE2DykBAgIKAzEEAgIHAT0DJAUBCD4BDAI0CQEBCAQCAV8DAgQGAQIBnQEDCBUCOQIBAQEBDAEJAQ4HAwVDAQIGAQECAQEDBAMBAQ4CVQgCAwEBFwFRAQIGAQECAQECAQLrAQIEBgIBAhsCVQgCAQECagEBAQIIZQEBAQIEAQUACQEC9QEKBAQBkAQCAgQBIAooBgIECAEJBgIDLg0BAgAHAQYBAVIWAgcBAgECegYDAQECAQcBAUgCAwEBAQACCwI0BQUDFwEAAQYPAAwDAwAFOwcAAT8EUQELAgACAC4CFwAFAwYICAIHHgSUAwA3BDIIAQ4BFgUBDwAHARECBwECAQVkAaAHAAE9BAAE/gIAB20HAGCA8AAwMTIzNDU2Nzg5YWJjZGVmUmVmQ2VsbCBhbHJlYWR5IGJvcnJvd2VkY2FsbGVkIGBPcHRpb246OnVud3JhcCgpYCBvbiBhIGBOb25lYCB2YWx1ZWluZGV4IG91dCBvZiBib3VuZHM6IHRoZSBsZW4gaXMgIGJ1dCB0aGUgaW5kZXggaXMgAEkMEAAgAAAAaQwQABIAAAA6IAAAAQAAAAAAAACMDBAAAgAAAAAAAAAMAAAABAAA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AAsAAAB8Jg0KCkV4cGVjdGVkIGNvbW1hbmQgZm9sbG93aW5nIGJvb2xlYW4gb3BlcmF0b3IuQ2Fubm90IHNldCBtdWx0aXBsZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgd2hlbiB0aGVyZSBpcyBubyBmb2xsb3dpbmcgY29tbWFuZC5FeHBlY3RlZCBjb21tYW5kIGZvbGxvd2luZyBwaXBlbGluZSBvcGVyYXRvci5NdWx0aXBsZSByZWRpcmVjdHMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgAACwEQAFUAAAA+AgAACAAAAFVuc3VwcG9ydGVkIHJlc2VydmVkIHdvcmQuIT4+Pnw+RXhwZWN0ZWQgcmVkaXJlY3QgcGF0aC5JbnZhbGlkIGVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlLkV4cGVjdGVkIGNsb3Npbmcgc2luZ2xlIHF1b3RlLgsBEABVAAAAOQMAACQAAAALARAAVQAAADsDAAAgAAAARmFpbGVkIHBhcnNpbmcgY29tbWFuZCBzdWJzdGl0dXRpb24gaW4gZG91YmxlIHF1b3RlZCBzdHJpbmcuCwEQAFUAAABAAwAAFwAAAAsBEABVAAAARQMAACQAAAALARAAVQAAAEcDAAAgAAAARmFpbGVkIHBhcnNpbmcgYmFja3RpY2tzIGluIGRvdWJsZSBxdW90ZWQgc3RyaW5nLgAAAAsBEABVAAAATAMAABcAAAALARAAVQAAAFEDAAAhAAAACwEQAFUAAABUAwAAEQAAAEV4cGVjdGVkIGNsb3NpbmcgZG91YmxlIHF1b3RlLkZhaWxlZCBwYXJzaW5nIHdpdGhpbiBkb3VibGUgcXVvdGVzLiBVbmV4cGVjdGVkIGNoYXJhY3RlcjogAAAArhkQADsAAABDb3VsZCBub3QgZGV0ZXJtaW5lIGV4cHJlc3Npb24uRmFpbGVkIHBhcnNpbmcgd2l0aGluIGRvdWJsZSBxdW90ZXMuIBMaEAAlAAAAJCMqJCBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC5DGhAAAQAAAEQaEAAcAAAACwEQAFUAAACrAwAADgAAAFwNClwKJD8ACwEQAFUAAAAFBAAAEgAAAAsBEABVAAAA+AMAABYAAABVbnN1cHBvcnRlZCB0aWxkZSBl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");
var wasmModule2 = new WebAssembly.Module(bytes2);
var wasm4 = new WebAssembly.Instance(wasmModule2, {
  "./rs_lib.internal.js": rs_lib_internal_exports2
});
__wbg_set_wasm2(wasm4.exports);
wasm4.exports.__wbindgen_start();
function base64decode2(b64) {
  const binString = atob(b64);
  const size = binString.length;
  const bytes3 = new Uint8Array(size);
  for (let i = 0; i < size; i++) {
    bytes3[i] = binString.charCodeAt(i);
  }
  return bytes3;
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/streams.js
var cachedStdinReadable;
function getStdinReadable() {
  if (cachedStdinReadable !== void 0)
    return cachedStdinReadable;
  const abortController = new AbortController();
  return cachedStdinReadable = new ReadableStream2({
    async pull(controller) {
      const buf = new Uint8Array(16 * 1024);
      let bytesRead;
      try {
        bytesRead = await readStdin(buf, abortController.signal);
      } catch (err) {
        if (abortController.signal.aborted)
          return;
        throw err;
      }
      if (bytesRead === null)
        controller.close();
      else
        controller.enqueue(buf.subarray(0, bytesRead));
    },
    cancel() {
      abortController.abort();
      cachedStdinReadable = void 0;
    }
  });
}
var stdin = {
  read(p, options) {
    const signal = options?.signal;
    signal?.throwIfAborted();
    return readStdin(p, signal);
  },
  // todo: remove this as it's unused
  get readable() {
    return getStdinReadable();
  },
  setRaw(mode) {
    if (process.stdin.isTTY) {
      process.stdin.setRawMode(mode);
    }
  },
  isTerminal() {
    return process.stdin.isTTY ?? false;
  }
};
var stdout = {
  writeSync(p) {
    return writeSyncAll(1, p);
  },
  isTerminal() {
    return process.stdout.isTTY ?? false;
  }
};
function readStdin(p, signal) {
  const stream = process.stdin;
  return new Promise((resolve8, reject) => {
    const onReadable = () => {
      const chunk = stream.read();
      if (chunk === null)
        return;
      cleanup();
      const len = Math.min(chunk.length, p.length);
      p.set(chunk.subarray(0, len));
      if (chunk.length > len)
        stream.unshift(chunk.subarray(len));
      resolve8(len);
    };
    const onEnd = () => {
      cleanup();
      resolve8(null);
    };
    const onError = (err) => {
      cleanup();
      reject(err);
    };
    const onAbort = () => {
      cleanup();
      reject(signal.reason);
    };
    const cleanup = () => {
      stream.off("readable", onReadable);
      stream.off("end", onEnd);
      stream.off("error", onError);
      signal?.removeEventListener("abort", onAbort);
    };
    stream.on("readable", onReadable);
    stream.on("end", onEnd);
    stream.on("error", onError);
    signal?.addEventListener("abort", onAbort, { once: true });
    onReadable();
  });
}
var stderr = {
  writeSync(p) {
    return writeSyncAll(2, p);
  },
  isTerminal() {
    return process.stderr.isTTY ?? false;
  }
};

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/shell.js
var ShellEvaluateError = class extends Error {
};
var RealEnv = class {
  setCwd(cwd2) {
    process.chdir(cwd2);
  }
  getCwd() {
    return process.cwd();
  }
  setEnvVar(key, value) {
    if (value == null) {
      delete process.env[key];
    } else {
      process.env[key] = value;
    }
  }
  getEnvVar(key) {
    return process.env[key];
  }
  getEnvVars() {
    return getRealEnvVars();
  }
  clone() {
    return cloneEnv(this);
  }
};
var ShellEnv = class {
  #cwd;
  #envVars = {};
  setCwd(cwd2) {
    this.#cwd = cwd2;
  }
  getCwd() {
    if (this.#cwd == null) {
      throw new Error("The cwd must be initialized.");
    }
    return this.#cwd;
  }
  setEnvVar(key, value) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (value == null) {
      delete this.#envVars[key];
    } else {
      this.#envVars[key] = value;
    }
  }
  getEnvVar(key) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    return this.#envVars[key];
  }
  getEnvVars() {
    return { ...this.#envVars };
  }
  clone() {
    return cloneEnv(this);
  }
};
var RealEnvWriteOnly = class {
  real = new RealEnv();
  shell = new ShellEnv();
  setCwd(cwd2) {
    this.real.setCwd(cwd2);
    this.shell.setCwd(cwd2);
  }
  getCwd() {
    return this.shell.getCwd();
  }
  setEnvVar(key, value) {
    this.real.setEnvVar(key, value);
    this.shell.setEnvVar(key, value);
  }
  getEnvVar(key) {
    return this.shell.getEnvVar(key);
  }
  getEnvVars() {
    return this.shell.getEnvVars();
  }
  clone() {
    return cloneEnv(this);
  }
};
function initializeEnv(env, opts) {
  env.setCwd(opts.cwd);
  for (const [key, value] of Object.entries(opts.env)) {
    env.setEnvVar(key, value);
  }
}
function cloneEnv(env) {
  const result = new ShellEnv();
  initializeEnv(result, {
    cwd: env.getCwd(),
    env: env.getEnvVars()
  });
  return result;
}
var StreamFds = class {
  #readers = /* @__PURE__ */ new Map();
  #writers = /* @__PURE__ */ new Map();
  insertReader(fd, stream) {
    this.#readers.set(fd, stream);
  }
  insertWriter(fd, stream) {
    this.#writers.set(fd, stream);
  }
  getReader(fd) {
    return this.#readers.get(fd)?.();
  }
  getWriter(fd) {
    return this.#writers.get(fd)?.();
  }
};
var Context = class _Context {
  stdin;
  stdout;
  stderr;
  #env;
  #shellVars;
  #shellOptions;
  #static;
  constructor(opts) {
    this.stdin = opts.stdin;
    this.stdout = opts.stdout;
    this.stderr = opts.stderr;
    this.#env = opts.env;
    this.#shellVars = opts.shellVars;
    this.#shellOptions = opts.shellOptions;
    this.#static = opts.static;
  }
  get signal() {
    return this.#static.signal;
  }
  applyChanges(changes) {
    if (changes == null) {
      return;
    }
    for (const change of changes) {
      switch (change.kind) {
        case "cd":
          this.#env.setCwd(change.dir);
          break;
        case "envvar":
          this.setEnvVar(change.name, change.value);
          break;
        case "shellvar":
          this.setShellVar(change.name, change.value);
          break;
        case "unsetvar":
          this.setShellVar(change.name, void 0);
          this.setEnvVar(change.name, void 0);
          break;
        case "setoption":
          this.setShellOption(change.option, change.value);
          break;
        default: {
          const _assertNever = change;
          throw new Error(`Not implemented env change: ${change}`);
        }
      }
    }
  }
  setEnvVar(key, value) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (key === "PWD") {
      if (value != null && path4.isAbsolute(value)) {
        this.#env.setCwd(path4.resolve(value));
      }
    } else {
      delete this.#shellVars[key];
      this.#env.setEnvVar(key, value);
    }
  }
  setShellVar(key, value) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (this.#env.getEnvVar(key) != null || key === "PWD") {
      this.setEnvVar(key, value);
    } else if (value == null) {
      delete this.#shellVars[key];
    } else {
      this.#shellVars[key] = value;
    }
  }
  getEnvVars() {
    return this.#env.getEnvVars();
  }
  getCwd() {
    return this.#env.getCwd();
  }
  getVar(key) {
    if (isWindows3) {
      key = key.toUpperCase();
    }
    if (key === "PWD") {
      return this.#env.getCwd();
    }
    return this.#env.getEnvVar(key) ?? this.#shellVars[key];
  }
  getCommand(command) {
    return this.#static.commands[command] ?? null;
  }
  getShellOptions() {
    return this.#shellOptions;
  }
  setShellOption(option, value) {
    this.#shellOptions[option] = value;
  }
  getFdReader(fd) {
    return this.#static.fds?.getReader(fd);
  }
  getFdWriter(fd) {
    return this.#static.fds?.getWriter(fd);
  }
  asCommandContext(args) {
    const context = this;
    return {
      get args() {
        return args;
      },
      get cwd() {
        return context.getCwd();
      },
      get env() {
        return context.getEnvVars();
      },
      get stdin() {
        return context.stdin;
      },
      get stdout() {
        return context.stdout;
      },
      get stderr() {
        return context.stderr;
      },
      get signal() {
        return context.signal;
      },
      get shellOptions() {
        return context.getShellOptions();
      },
      error(codeOrText, maybeText) {
        return context.error(codeOrText, maybeText);
      }
    };
  }
  error(codeOrText, maybeText) {
    let code2;
    let text;
    if (typeof codeOrText === "number") {
      code2 = codeOrText;
      text = maybeText;
    } else {
      code2 = 1;
      text = codeOrText;
    }
    const maybePromise = this.stderr.writeLine(text);
    if (maybePromise instanceof Promise) {
      return maybePromise.then(() => ({ code: code2 }));
    } else {
      return { code: code2 };
    }
  }
  withInner(opts) {
    return new _Context({
      stdin: opts.stdin ?? this.stdin,
      stdout: opts.stdout ?? this.stdout,
      stderr: opts.stderr ?? this.stderr,
      env: this.#env.clone(),
      shellVars: { ...this.#shellVars },
      shellOptions: this.#shellOptions,
      static: this.#static
    });
  }
  clone() {
    return new _Context({
      stdin: this.stdin,
      stdout: this.stdout,
      stderr: this.stderr,
      env: this.#env.clone(),
      shellVars: { ...this.#shellVars },
      shellOptions: this.#shellOptions,
      static: this.#static
    });
  }
};
function parseCommand(command) {
  return parse2(command);
}
function getDefaultShellOptions(list) {
  return {
    nullglob: false,
    failglob: false,
    // default: pass unmatched globs through literally
    pipefail: false,
    globstar: true,
    // default: ** matches recursively
    questionGlob: false,
    // default: ? is literal
    // on by default for multi-line input so a failing line stops the rest;
    // single-line `a; b` keeps running through failures.
    errexit: isMultiLine(list)
  };
}
function isMultiLine(list) {
  return list.items.some((item) => item.endsLine);
}
async function spawn2(list, opts) {
  const env = opts.exportEnv ? opts.clearedEnv ? new RealEnvWriteOnly() : new RealEnv() : new ShellEnv();
  initializeEnv(env, opts);
  const defaultOptions = getDefaultShellOptions(list);
  const context = new Context({
    env,
    stdin: opts.stdin,
    stdout: opts.stdout,
    stderr: opts.stderr,
    shellVars: {},
    shellOptions: {
      ...defaultOptions,
      ...opts.shellOptions
    },
    static: {
      commands: opts.commands,
      fds: opts.fds,
      signal: opts.signal
    }
  });
  const result = await executeSequentialList(list, context);
  return result.code;
}
async function executeSequentialList(list, context) {
  let finalExitCode = 0;
  const finalChanges = [];
  for (const item of list.items) {
    if (item.isAsync) {
      throw new Error("Async commands are not supported. Run a command concurrently in the JS code instead.");
    }
    const result = await executeSequence(item.sequence, context);
    switch (result.kind) {
      case void 0:
        if (result.changes) {
          context.applyChanges(result.changes);
          finalChanges.push(...result.changes);
        }
        finalExitCode = result.code;
        break;
      case "exit":
        return result;
      default: {
        const _assertNever = result;
      }
    }
    if (finalExitCode !== 0 && context.getShellOptions().errexit) {
      break;
    }
  }
  return {
    code: finalExitCode,
    changes: finalChanges
  };
}
function executeSequence(sequence, context) {
  if (context.signal.aborted) {
    return Promise.resolve(getAbortedResult());
  }
  switch (sequence.kind) {
    case "pipeline":
      return executePipeline(sequence, context);
    case "booleanList":
      return executeBooleanList(sequence, context);
    case "shellVar":
      return executeShellVar(sequence, context);
    default: {
      const _assertNever = sequence;
      throw new Error(`Not implemented: ${sequence}`);
    }
  }
}
function executePipeline(pipeline, context) {
  const output = executePipelineInner(pipeline.inner, context);
  if (pipeline.negated) {
    return Promise.resolve(output).then((result) => {
      return {
        ...result,
        code: result.code === 0 ? 1 : 0
      };
    });
  }
  return output;
}
async function executeBooleanList(list, context) {
  const changes = [];
  const firstResult = await executeSequence(list.current, context.clone());
  let exitCode = 0;
  switch (firstResult.kind) {
    case "exit":
      return firstResult;
    case void 0:
      if (firstResult.changes) {
        context.applyChanges(firstResult.changes);
        changes.push(...firstResult.changes);
      }
      exitCode = firstResult.code;
      break;
    default: {
      const _assertNever = firstResult;
      throw new Error("Not handled.");
    }
  }
  const next = findNextSequence(list, exitCode);
  if (next == null) {
    return {
      code: exitCode,
      changes
    };
  } else {
    const nextResult = await executeSequence(next, context.clone());
    switch (nextResult.kind) {
      case "exit":
        return nextResult;
      case void 0:
        if (nextResult.changes) {
          changes.push(...nextResult.changes);
        }
        return {
          code: nextResult.code,
          changes
        };
      default: {
        const _assertNever = nextResult;
        throw new Error("Not Implemented");
      }
    }
  }
  function findNextSequence(current, exitCode2) {
    if (opMovesNextForExitCode(current.op, exitCode2)) {
      return current.next;
    } else {
      let next2 = current.next;
      while (next2.kind === "booleanList") {
        if (opMovesNextForExitCode(next2.op, exitCode2)) {
          return next2.next;
        } else {
          next2 = next2.next;
        }
      }
      return void 0;
    }
  }
  function opMovesNextForExitCode(op, exitCode2) {
    switch (op) {
      case "or":
        return exitCode2 !== 0;
      case "and":
        return exitCode2 === 0;
    }
  }
}
async function executeShellVar(sequence, context) {
  const value = await evaluateWord(sequence.value, context);
  return {
    code: 0,
    changes: [{
      kind: "shellvar",
      name: sequence.name,
      value
    }]
  };
}
function executePipelineInner(inner, context) {
  switch (inner.kind) {
    case "command":
      return executeCommand(inner, context);
    case "pipeSequence":
      return executePipeSequence(inner, context);
    default: {
      const _assertNever = inner;
      throw new Error(`Not implemented: ${inner.kind}`);
    }
  }
}
async function executeCommand(command, context) {
  if (command.redirect != null) {
    const redirectResult = await resolveRedirectPipe(command.redirect, context);
    let redirectPipe;
    if (redirectResult.kind === "input") {
      const { pipe } = redirectResult;
      context = context.withInner({
        stdin: pipe
      });
      redirectPipe = pipe;
    } else if (redirectResult.kind === "output") {
      const { pipe, toFd } = redirectResult;
      const writer = new ShellPipeWriter("piped", pipe);
      redirectPipe = pipe;
      if (toFd === 1) {
        context = context.withInner({
          stdout: writer
        });
      } else if (toFd === 2) {
        context = context.withInner({
          stderr: writer
        });
      } else if (toFd === "&") {
        context = context.withInner({
          stdout: writer
        }).withInner({
          stderr: writer
        });
      } else {
        const _assertNever = toFd;
        throw new Error(`Not handled fd: ${toFd}`);
      }
    } else {
      return redirectResult;
    }
    const result = await executeCommandInner(command.inner, context);
    try {
      if (isAsyncDisposable(redirectPipe)) {
        await redirectPipe[Symbol.asyncDispose]();
      } else if (isDisposable(redirectPipe)) {
        redirectPipe[Symbol.dispose]();
      }
    } catch (err) {
      if (result.code === 0) {
        return context.error(`failed disposing redirected pipe. ${errorToString(err)}`);
      }
    }
    return result;
  } else {
    return executeCommandInner(command.inner, context);
  }
}
async function resolveRedirectPipe(redirect, context) {
  function handleFileOpenError(outputPath, err) {
    return context.error(`failed opening file for redirect (${outputPath}). ${errorToString(err)}`);
  }
  const toFd = resolveRedirectToFd(redirect, context);
  if (typeof toFd !== "number" && toFd !== "&") {
    return toFd;
  }
  const { ioFile } = redirect;
  if (ioFile.kind === "fd") {
    switch (redirect.op.kind) {
      case "input": {
        if (ioFile.value === 0) {
          return {
            kind: "input",
            pipe: getStdinReader(context.stdin)
          };
        } else if (ioFile.value === 1 || ioFile.value === 2) {
          return context.error(`redirecting stdout or stderr to a command input is not supported`);
        } else {
          const pipe = context.getFdReader(ioFile.value);
          if (pipe == null) {
            return context.error(`could not find fd reader: ${ioFile.value}`);
          } else {
            return {
              kind: "input",
              pipe
            };
          }
        }
      }
      case "output": {
        if (ioFile.value === 0) {
          return context.error(`redirecting output to stdin is not supported`);
        } else if (ioFile.value === 1) {
          return {
            kind: "output",
            pipe: context.stdout.inner,
            toFd
          };
        } else if (ioFile.value === 2) {
          return {
            kind: "output",
            pipe: context.stderr.inner,
            toFd
          };
        } else {
          const pipe = context.getFdWriter(ioFile.value);
          if (pipe == null) {
            return context.error(`could not find fd: ${ioFile.value}`);
          } else {
            return {
              kind: "output",
              pipe,
              toFd
            };
          }
        }
      }
      default: {
        const _assertNever = redirect.op;
        throw new Error("not implemented redirect op.");
      }
    }
  } else if (ioFile.kind === "word") {
    const words = await evaluateWordParts(ioFile.value, context);
    if (words.length === 0) {
      return context.error("redirect path must be 1 argument, but found 0");
    } else if (words.length > 1) {
      return context.error(`redirect path must be 1 argument, but found ${words.length} (${words.join(" ")}). Did you mean to quote it (ex. "${words.join(" ")}")?`);
    }
    switch (redirect.op.kind) {
      case "input": {
        const outputPath = path4.isAbsolute(words[0]) ? words[0] : path4.join(context.getCwd(), words[0]);
        try {
          const file = await open2(outputPath, {
            read: true
          });
          return {
            kind: "input",
            pipe: file
          };
        } catch (err) {
          return handleFileOpenError(outputPath, err);
        }
      }
      case "output": {
        if (words[0] === "/dev/null") {
          return {
            kind: "output",
            pipe: new NullPipeWriter(),
            toFd
          };
        }
        const outputPath = path4.isAbsolute(words[0]) ? words[0] : path4.join(context.getCwd(), words[0]);
        try {
          const file = await open2(outputPath, {
            write: true,
            create: true,
            append: redirect.op.value === "append",
            truncate: redirect.op.value !== "append"
          });
          return {
            kind: "output",
            pipe: file,
            toFd
          };
        } catch (err) {
          return handleFileOpenError(outputPath, err);
        }
      }
      default: {
        const _assertNever = redirect.op;
        throw new Error("not implemented redirect op.");
      }
    }
  } else {
    const _assertNever = ioFile;
    throw new Error("not implemented redirect io file.");
  }
}
function getStdinReader(stdin2) {
  if (stdin2 === "inherit") {
    return stdin;
  } else if (stdin2 === "null") {
    return new NullPipeReader();
  } else {
    return stdin2;
  }
}
function resolveRedirectToFd(redirect, context) {
  const maybeFd = redirect.maybeFd;
  if (maybeFd == null) {
    return 1;
  }
  if (maybeFd.kind === "stdoutStderr") {
    return "&";
  }
  if (maybeFd.fd !== 1 && maybeFd.fd !== 2) {
    return context.error(`only redirecting to stdout (1) and stderr (2) is supported`);
  } else {
    return maybeFd.fd;
  }
}
function executeCommandInner(command, context) {
  switch (command.kind) {
    case "simple":
      return executeSimpleCommand(command, context);
    case "subshell":
      return executeSubshell(command, context);
    default: {
      const _assertNever = command;
      throw new Error(`Not implemented: ${command.kind}`);
    }
  }
}
async function executeSimpleCommand(command, parentContext) {
  const context = parentContext.clone();
  try {
    for (const envVar of command.envVars) {
      context.setEnvVar(envVar.name, await evaluateWord(envVar.value, context));
    }
    const commandArgs = await evaluateArgs(command.args, context);
    return await executeCommandArgs(commandArgs, context);
  } catch (err) {
    if (err instanceof ShellEvaluateError) {
      return context.error(err.message);
    } else {
      throw err;
    }
  }
}
function executeCommandArgs(commandArgs, context) {
  const commandName = commandArgs.shift();
  const command = context.getCommand(commandName);
  if (command != null) {
    return Promise.resolve(command(context.asCommandContext(commandArgs)));
  }
  const unresolvedCommand = {
    name: commandName,
    baseDir: context.getCwd()
  };
  return executeUnresolvedCommand(unresolvedCommand, commandArgs, context);
}
async function executeUnresolvedCommand(unresolvedCommand, commandArgs, context) {
  const resolvedCommand = await resolveCommand(unresolvedCommand, context);
  if (resolvedCommand === false) {
    context.stderr.writeLine(`dax: ${unresolvedCommand.name}: command not found`);
    return { code: 127 };
  }
  if (resolvedCommand.kind === "shebang") {
    return executeUnresolvedCommand(resolvedCommand.command, [...resolvedCommand.args, ...commandArgs], context);
  }
  const _assertIsPath = resolvedCommand.kind;
  return createExecutableCommand(resolvedCommand.path)(context.asCommandContext(commandArgs));
}
async function executeSubshell(subshell, context) {
  const result = await executeSequentialList(subshell, context);
  return { code: result.code };
}
async function pipeReaderToWriterSync(reader, writer, signal) {
  const buffer = new Uint8Array(1024);
  while (!signal.aborted) {
    const bytesRead = await reader.read(buffer);
    if (bytesRead == null || bytesRead === 0) {
      break;
    }
    const maybePromise = writer.writeAll(buffer.slice(0, bytesRead));
    if (maybePromise) {
      await maybePromise;
    }
  }
}
function pipeCommandPipeReaderToWriterSync(reader, writer, signal) {
  switch (reader) {
    case "inherit":
      return pipeReaderToWriterSync(stdin, writer, signal);
    case "null":
      return Promise.resolve();
    default: {
      return pipeReaderToWriterSync(reader, writer, signal);
    }
  }
}
async function resolveCommand(unresolvedCommand, context) {
  if (unresolvedCommand.name.includes("/") || isWindows3 && unresolvedCommand.name.includes("\\")) {
    const absolutePath = path4.isAbsolute(unresolvedCommand.name) ? unresolvedCommand.name : path4.resolve(unresolvedCommand.baseDir, unresolvedCommand.name);
    const commandPath2 = await whichFromContext(absolutePath, context);
    if (commandPath2 == null) {
      return false;
    }
    const result = await getExecutableShebangFromPath(commandPath2);
    if (result === false) {
      return false;
    } else if (result != null) {
      const args = await parseShebangArgs(result, context);
      const name = args.shift();
      args.push(commandPath2);
      return {
        kind: "shebang",
        command: {
          name,
          baseDir: path4.dirname(commandPath2)
        },
        args
      };
    } else {
      const _assertUndefined = result;
      return {
        kind: "path",
        path: commandPath2
      };
    }
  }
  const commandPath = await whichFromContext(unresolvedCommand.name, context);
  if (commandPath == null) {
    return false;
  }
  return {
    kind: "path",
    path: commandPath
  };
}
var WhichEnv = class extends RealEnvironment {
  /** Requests read permission for the provided directory under Deno. */
  requestPermission(folderPath) {
    const denoGlobal2 = globalThis.Deno;
    denoGlobal2?.permissions?.requestSync?.({
      name: "read",
      path: folderPath
    });
  }
};
var whichRealEnv = new WhichEnv();
async function whichFromContext(commandName, context) {
  return await which(commandName, {
    isWindows: isWindows3,
    stat: whichRealEnv.stat,
    lstat: whichRealEnv.lstat,
    readLink: whichRealEnv.readLink,
    env(key) {
      return context.getVar(key);
    },
    requestPermission: whichRealEnv.requestPermission
  });
}
async function executePipeSequence(sequence, context) {
  const waitTasks = [];
  let lastOutput = context.stdin;
  let nextInner = sequence;
  while (nextInner != null) {
    let innerCommand;
    switch (nextInner.kind) {
      case "pipeSequence":
        switch (nextInner.op) {
          case "stdout": {
            innerCommand = nextInner.current;
            break;
          }
          case "stdoutstderr": {
            return context.error(`piping to both stdout and stderr is not implemented (ex. |&)`);
          }
          default: {
            const _assertNever = nextInner.op;
            return context.error(`not implemented pipe sequence op: ${nextInner.op}`);
          }
        }
        nextInner = nextInner.next;
        break;
      case "command":
        innerCommand = nextInner;
        nextInner = void 0;
        break;
    }
    const buffer = new PipeSequencePipe();
    const newContext = context.withInner({
      stdout: new ShellPipeWriter("piped", buffer),
      stdin: lastOutput
    });
    const commandPromise = executeCommand(innerCommand, newContext);
    waitTasks.push(commandPromise);
    commandPromise.finally(() => {
      buffer.close();
    });
    lastOutput = buffer;
  }
  waitTasks.push(pipeCommandPipeReaderToWriterSync(lastOutput, context.stdout, context.signal).then(() => ({ code: 0 })));
  const results = await Promise.all(waitTasks);
  const shellOptions = context.getShellOptions();
  let exitCode;
  if (shellOptions.pipefail) {
    exitCode = 0;
    for (let i = results.length - 1; i >= 0; i--) {
      const code2 = results[i].code;
      if (code2 !== 0) {
        exitCode = code2;
        break;
      }
    }
  } else {
    exitCode = results[results.length - 2].code;
  }
  return { code: exitCode };
}
async function parseShebangArgs(info, context) {
  function throwUnsupported() {
    throw new Error("Unsupported shebang. Please report this as a bug.");
  }
  if (!info.stringSplit) {
    return [info.command];
  }
  const command = parseCommand(info.command);
  if (command.items.length !== 1) {
    throwUnsupported();
  }
  const item = command.items[0];
  if (item.sequence.kind !== "pipeline" || item.isAsync) {
    throwUnsupported();
  }
  const sequence = item.sequence;
  if (sequence.negated) {
    throwUnsupported();
  }
  if (sequence.inner.kind !== "command" || sequence.inner.redirect != null) {
    throwUnsupported();
  }
  const innerCommand = sequence.inner.inner;
  if (innerCommand.kind !== "simple") {
    throwUnsupported();
  }
  if (innerCommand.envVars.length > 0) {
    throwUnsupported();
  }
  return await evaluateArgs(innerCommand.args, context);
}
async function evaluateArgs(args, context) {
  const result = [];
  for (const arg of args) {
    result.push(...await evaluateWordParts(arg, context));
  }
  return result;
}
async function evaluateWord(word, context) {
  const result = await evaluateWordParts(word, context);
  return result.join(" ");
}
async function evaluateWordParts(wordParts, context) {
  const result = [];
  for (const expanded of expandBraces(wordParts)) {
    result.push(...await evaluateWordPartsInner(expanded, context, false));
  }
  return result;
}
function expandBraces(parts) {
  let results = [[]];
  for (const part of parts) {
    if (part.kind === "brace") {
      const expanded = part.value.flatMap((word) => expandBraces(word));
      if (expanded.length === 0) {
        continue;
      }
      const next = [];
      for (const prefix of results) {
        for (const alt of expanded) {
          next.push([...prefix, ...alt]);
        }
      }
      results = next;
    } else {
      for (const r of results) {
        r.push(part);
      }
    }
  }
  return results;
}
async function evaluateWordPartsInner(wordParts, context, quoted) {
  function hasGlobChar2(text, questionGlob) {
    for (let i = 0; i < text.length; i++) {
      switch (text[i]) {
        case "?":
          if (questionGlob)
            return true;
          break;
        case "*":
        case "[":
          return true;
        default:
          break;
      }
    }
    return false;
  }
  function textPartsToString(textParts) {
    return textParts.map((p) => p.value).join("");
  }
  async function evaluateWordText(textParts, isQuoted) {
    const questionGlob = context.getShellOptions().questionGlob;
    if (!isQuoted && textParts.some((part) => part.kind === "text" && hasGlobChar2(part.value, questionGlob))) {
      let currentText2 = "";
      const globEscapeChar = isWindows3 ? "`" : "\\";
      for (const textPart of textParts) {
        switch (textPart.kind) {
          case "quoted":
            for (let i = 0; i < textPart.value.length; i++) {
              const char = textPart.value[i];
              switch (char) {
                case "?":
                case "*":
                case "[":
                case "]":
                case "{":
                case "}":
                  currentText2 += `${globEscapeChar}${char}`;
                  break;
                default:
                  currentText2 += char;
                  break;
              }
            }
            break;
          case "text": {
            const textPartValue = textPart.value.replaceAll("[]]", `${globEscapeChar}]`).replaceAll("[[]", `${globEscapeChar}[`);
            for (let i = 0; i < textPartValue.length; i++) {
              const char = textPartValue[i];
              switch (char) {
                case "?":
                  if (!questionGlob) {
                    currentText2 += `${globEscapeChar}${char}`;
                  } else {
                    currentText2 += char;
                  }
                  break;
                case "{":
                case "}":
                  currentText2 += `${globEscapeChar}${char}`;
                  break;
                default:
                  currentText2 += char;
                  break;
              }
            }
            break;
          }
          default: {
            const _assertNever = textPart;
            break;
          }
        }
      }
      const cwd2 = context.getCwd();
      const shellOptions = context.getShellOptions();
      const isAbsolute7 = path4.isAbsolute(currentText2);
      let patternText = currentText2;
      if (!shellOptions.globstar && currentText2.includes("**")) {
        while (patternText.includes("**")) {
          patternText = patternText.replace("**", "*");
        }
      }
      const pattern = isAbsolute7 ? patternText : path4.join(cwd2, patternText);
      const entries = await Array.fromAsync(expandGlob(pattern, {
        // be the same on all operating systems
        caseInsensitive: true,
        followSymlinks: false,
        globstar: shellOptions.globstar,
        root: cwd2,
        includeDirs: false
      }));
      entries.sort((a, b) => a.path < b.path ? -1 : a.path > b.path ? 1 : 0);
      if (entries.length === 0) {
        if (shellOptions.failglob) {
          throw new ShellEvaluateError(`glob: no matches found '${pattern}' (run \`shopt -u failglob\` to pass unmatched glob patterns literally)`);
        } else if (shellOptions.nullglob) {
          return [];
        } else {
          return [textPartsToString(textParts)];
        }
      }
      if (isAbsolute7) {
        return entries.map((e) => e.path);
      } else {
        return entries.map((e) => path4.relative(cwd2, e.path));
      }
    } else {
      return [textPartsToString(textParts)];
    }
  }
  const result = [];
  let currentText = [];
  for (const stringPart of wordParts) {
    let evaluationResult = void 0;
    switch (stringPart.kind) {
      case "text":
        currentText.push(stringPart);
        break;
      case "variable":
        evaluationResult = context.getVar(stringPart.value);
        break;
      case "quoted": {
        const text = (await evaluateWordPartsInner(stringPart.value, context, true)).join(" ");
        currentText.push({
          kind: "quoted",
          value: text
        });
        continue;
      }
      case "tilde": {
        const envVarName = isWindows3 ? "USERPROFILE" : "HOME";
        const homeDirEnv = context.getVar(envVarName);
        if (homeDirEnv == null) {
          throw new Error(`Failed resolving home directory for tilde expansion ('${envVarName}' env var not set).`);
        }
        evaluationResult = homeDirEnv;
        break;
      }
      case "command":
        evaluationResult = await evaluateCommandSubstitution(stringPart.value, context);
        break;
      case "brace":
        throw new Error("brace parts must be expanded before evaluation");
    }
    if (evaluationResult != null) {
      const parts = evaluationResult.split(" ").map((t) => ({
        kind: "text",
        value: t.trim()
      })).filter((t) => t.value.length > 0);
      if (parts.length > 0) {
        currentText.push(...parts.splice(0, 1));
        if (parts.length > 0) {
          result.push(...await evaluateWordText(currentText, quoted));
          for (const part of parts.splice(0, parts.length - 1)) {
            result.push(...await evaluateWordText([part], quoted));
          }
          currentText = parts;
        }
      }
    }
  }
  if (currentText.length !== 0) {
    result.push(...await evaluateWordText(currentText, quoted));
  }
  return result;
}
async function evaluateCommandSubstitution(list, context) {
  const buffer = new Buffer2();
  const subContext = context.withInner({
    stdout: new ShellPipeWriter("piped", buffer)
  });
  await executeSequentialList(list, subContext);
  const text = new TextDecoder2().decode(buffer.bytes({ copy: false }));
  return text.replace(/\s+/g, " ").trim();
}
function isDisposable(value) {
  return value != null && typeof value[Symbol.dispose] === "function";
}
function isAsyncDisposable(value) {
  return value != null && typeof value[Symbol.asyncDispose] === "function";
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/commands/which.js
async function whichCommand(context) {
  try {
    return await executeWhich(context);
  } catch (err) {
    return context.error(`which: ${errorToString(err)}`);
  }
}
async function executeWhich(context) {
  let flags;
  try {
    flags = parseArgs9(context.args);
  } catch (err) {
    return await context.error(2, `which: ${errorToString(err)}`);
  }
  if (flags.commandName == null) {
    return { code: 1 };
  }
  const path6 = await whichFromContext(flags.commandName, {
    getVar(key) {
      return context.env[key];
    }
  });
  if (path6 != null) {
    await context.stdout.writeLine(path6);
    return { code: 0 };
  } else {
    return { code: 1 };
  }
}
function parseArgs9(args) {
  let commandName;
  for (const arg of parseArgKinds(args)) {
    if (arg.kind === "Arg") {
      if (commandName != null) {
        throw Error("unsupported too many arguments");
      }
      commandName = arg.arg;
    } else {
      bailUnsupported3(arg);
    }
  }
  return {
    commandName
  };
}
function bailUnsupported3(arg) {
  switch (arg.kind) {
    case "Arg":
      throw Error(`unsupported argument: ${arg.arg}`);
    case "ShortFlag":
      throw Error(`unsupported flag: -${arg.arg}`);
    case "LongFlag":
      throw Error(`unsupported flag: --${arg.arg}`);
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/byteRingBuffer.js
var ByteRingBuffer = class {
  capacity;
  #buffer;
  #size = 0;
  /** Index of the next byte to write — equivalently, the oldest retained
   * byte once the ring has wrapped. */
  #head = 0;
  constructor(capacity) {
    this.capacity = Math.max(1, Math.floor(capacity));
    this.#buffer = new Uint8Array(this.capacity);
  }
  get size() {
    return this.#size;
  }
  push(data) {
    if (data.length === 0)
      return;
    if (data.length >= this.capacity) {
      this.#buffer.set(data.subarray(data.length - this.capacity), 0);
      this.#size = this.capacity;
      this.#head = 0;
      return;
    }
    const tail = this.capacity - this.#head;
    if (data.length <= tail) {
      this.#buffer.set(data, this.#head);
    } else {
      this.#buffer.set(data.subarray(0, tail), this.#head);
      this.#buffer.set(data.subarray(tail), 0);
    }
    this.#head = (this.#head + data.length) % this.capacity;
    this.#size = Math.min(this.#size + data.length, this.capacity);
  }
  /** Return the retained bytes, oldest first, as a freshly allocated array. */
  toBytes() {
    const out = new Uint8Array(this.#size);
    if (this.#size === 0)
      return out;
    const start = this.#size < this.capacity ? 0 : this.#head;
    const tail = this.capacity - start;
    if (this.#size <= tail) {
      out.set(this.#buffer.subarray(start, start + this.#size));
    } else {
      out.set(this.#buffer.subarray(start, this.capacity), 0);
      out.set(this.#buffer.subarray(0, this.#size - tail), tail);
    }
    return out;
  }
};

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/command.js
var _a;
var Deferred = class {
  #create;
  constructor(create2) {
    this.#create = create2;
  }
  create() {
    return this.#create();
  }
};
var textDecoder = new TextDecoder2();
var builtInCommands = {
  cd: cdCommand,
  printenv: printEnvCommand,
  echo: echoCommand,
  cat: catCommand,
  exit: exitCommand,
  export: exportCommand,
  set: setCommand,
  shopt: shoptCommand,
  sleep: sleepCommand,
  test: testCommand,
  rm: rmCommand,
  mkdir: mkdirCommand,
  cp: cpCommand,
  mv: mvCommand,
  pwd: pwdCommand,
  touch: touchCommand,
  true: () => ({ code: 0 }),
  false: () => ({ code: 1 }),
  // POSIX null command: discards its arguments and always exits 0
  ":": () => ({ code: 0 }),
  unset: unsetCommand,
  which: whichCommand
};
var getRegisteredCommandNamesSymbol = Symbol();
var setCommandTextStateSymbol = Symbol();
var CommandBuilder = class {
  #state = {
    command: void 0,
    combinedStdoutStderr: false,
    stdin: "inherit",
    stdout: {
      kind: "inherit"
    },
    stderr: {
      kind: "inherit"
    },
    tailDisplay: false,
    errorTail: false,
    noThrow: false,
    env: {},
    cwd: void 0,
    commands: { ...builtInCommands },
    clearEnv: false,
    exportEnv: false,
    printCommand: false,
    printCommandLogger: new LoggerTreeBox(
      // deno-lint-ignore no-console
      (cmd) => console.error(white(">"), blue(cmd))
    ),
    timeout: void 0,
    signal: void 0,
    encoding: void 0,
    shellOptions: {},
    beforeCommand: void 0,
    beforeCommandSync: void 0
  };
  #getClonedState() {
    const state = this.#state;
    return {
      // be explicit here in order to evaluate each property on a case by case basis
      command: state.command,
      combinedStdoutStderr: state.combinedStdoutStderr,
      stdin: state.stdin,
      stdout: {
        kind: state.stdout.kind,
        options: state.stdout.options
      },
      stderr: {
        kind: state.stderr.kind,
        options: state.stderr.options
      },
      tailDisplay: state.tailDisplay === false ? false : { ...state.tailDisplay },
      errorTail: state.errorTail === false ? false : { ...state.errorTail },
      noThrow: state.noThrow instanceof Array ? [...state.noThrow] : state.noThrow,
      env: { ...state.env },
      cwd: state.cwd,
      commands: { ...state.commands },
      clearEnv: state.clearEnv,
      exportEnv: state.exportEnv,
      printCommand: state.printCommand,
      printCommandLogger: state.printCommandLogger.createChild(),
      timeout: state.timeout,
      signal: state.signal,
      encoding: state.encoding,
      shellOptions: { ...state.shellOptions },
      beforeCommand: state.beforeCommand,
      beforeCommandSync: state.beforeCommandSync
    };
  }
  #newWithState(action) {
    const builder = new _a();
    const state = this.#getClonedState();
    action(state);
    builder.#state = state;
    return builder;
  }
  /** Spawns the command and returns a promise resolving to the command result.
   *
   * Allows awaiting a `CommandBuilder` directly without calling `.spawn()`.
   */
  then(onfulfilled, onrejected) {
    const callerStack = captureCallerStack(this.then);
    return this.#resolveStateForSpawn().then((state) => parseAndSpawnCommand(state, callerStack).then(onfulfilled).catch(onrejected));
  }
  /**
   * Explicit way to spawn a command.
   *
   * This is an alias for awaiting the command builder or calling `.then(...)`
   */
  spawn() {
    if (this.#state.beforeCommand != null && this.#state.beforeCommand.length > 0) {
      throw new Error(".spawn() cannot be used when .beforeCommand() hooks are registered; await the builder, call .then(), or use .beforeCommandSync() instead.");
    }
    const callerStack = captureCallerStack(this.spawn);
    return parseAndSpawnCommand(this.#runSyncHooks(), callerStack);
  }
  #runSyncHooks() {
    const callbacks = this.#state.beforeCommandSync;
    if (callbacks == null || callbacks.length === 0) {
      return this.#getClonedState();
    }
    let builder = this.#newWithState((state) => {
      state.beforeCommandSync = void 0;
    });
    for (const cb of callbacks) {
      const result = cb(builder);
      if (result instanceof _a) {
        builder = result;
      }
    }
    return builder.#getClonedState();
  }
  async #resolveStateForSpawn() {
    let builder;
    {
      const syncState = this.#runSyncHooks();
      builder = new _a();
      builder.#state = syncState;
    }
    const callbacks = this.#state.beforeCommand;
    if (callbacks == null || callbacks.length === 0) {
      return builder.#getClonedState();
    }
    builder = builder.#newWithState((state) => {
      state.beforeCommand = void 0;
    });
    for (const cb of callbacks) {
      const proxy = wrapCommandBuilderNonThenable(builder);
      const result = await cb(proxy);
      builder = unwrapCommandBuilder(result) ?? builder;
    }
    return builder.#getClonedState();
  }
  /**
   * Register a command.
   */
  registerCommand(command, handleFn) {
    validateCommandName(command);
    return this.#newWithState((state) => {
      state.commands[command] = handleFn;
    });
  }
  /**
   * Register multilple commands.
   */
  registerCommands(commands) {
    let command = this;
    for (const [key, value] of Object.entries(commands)) {
      command = command.registerCommand(key, value);
    }
    return command;
  }
  /**
   * Unregister a command.
   */
  unregisterCommand(command) {
    return this.#newWithState((state) => {
      delete state.commands[command];
    });
  }
  /** Sets the raw command to execute. */
  command(command) {
    return this.#newWithState((state) => {
      if (command instanceof Array) {
        command = command.map(escapeArg).join(" ");
      }
      state.command = {
        text: command,
        fds: void 0
      };
    });
  }
  noThrow(value, ...additional) {
    return this.#newWithState((state) => {
      if (typeof value === "boolean" || value == null) {
        state.noThrow = value ?? true;
      } else {
        state.noThrow = [value, ...additional];
      }
    });
  }
  /** Registers a callback that runs just before each command is spawned.
   *
   * The callback receives the current builder and may return a (possibly
   * modified) builder to use for the spawn. Useful for asynchronously
   * resolving values such as auth tokens or env vars.
   *
   * ```ts
   * $`./build.sh`.beforeCommand(async (builder) => {
   *   return builder.env("AUTH_TOKEN", await getAccessToken());
   * });
   * ```
   *
   * Multiple `.beforeCommand(...)` calls compose: each registered callback runs
   * in the order it was added, with the builder produced by the previous one.
   *
   * The builder passed to the callback is in a special "passthrough" mode so
   * its `.then(...)` resolves with the builder itself (instead of spawning) —
   * this is what makes `return builder.env(...)` from an `async` function
   * safe. If you construct a fresh `new CommandBuilder()` inside the callback,
   * return it as `{ commandBuilder: ... }` to avoid an accidental spawn.
   *
   * Hooks are only resolved when the builder is awaited (or `.then()` is
   * called). Calling `.spawn()` on a builder with registered hooks throws.
   */
  beforeCommand(callback) {
    return this.#newWithState((state) => {
      state.beforeCommand = state.beforeCommand == null ? [callback] : [...state.beforeCommand, callback];
    });
  }
  /** Synchronous variant of {@link beforeCommand}. Unlike `.beforeCommand`,
   * sync hooks also run on the `.spawn()` path, so they're suitable when you
   * need streaming via `.spawn().stdout()` etc.
   *
   * The callback must return synchronously (`CommandBuilder` or nothing). The
   * thenable-unwrapping concern doesn't apply here because the return value
   * never passes through Promise machinery — `return builder.env(...)` is just
   * a function return.
   *
   * ```ts
   * const child = $`./build.sh`
   *   .beforeCommandSync((builder) => builder.env("BUILD_ID", crypto.randomUUID()))
   *   .spawn();
   * ```
   *
   * Sync hooks always run before async hooks during a single resolution pass.
   */
  beforeCommandSync(callback) {
    return this.#newWithState((state) => {
      state.beforeCommandSync = state.beforeCommandSync == null ? [callback] : [...state.beforeCommandSync, callback];
    });
  }
  /** Sets the signal that will be passed to all commands
   * created with this command builder.
   *
   * Accepts a `KillSignal` or a standard `AbortSignal`. When an
   * `AbortSignal` is provided it is internally bridged to a
   * `KillSignal` that sends `SIGTERM` on abort.
   */
  signal(signal) {
    return this.#newWithState((state) => {
      const killSignal = signal instanceof KillSignal ? signal : killSignalFromAbortSignal(signal);
      if (state.signal != null) {
        state.signal.linkChild(killSignal);
      }
      state.signal = killSignal;
    });
  }
  /**
   * Whether to capture a combined buffer of both stdout and stderr.
   *
   * This will set both stdout and stderr to "piped" if not already "piped"
   * or "inheritPiped".
   */
  captureCombined(value = true) {
    return this.#newWithState((state) => {
      state.combinedStdoutStderr = value;
      if (value) {
        if (state.stdout.kind !== "piped" && state.stdout.kind !== "inheritPiped") {
          state.stdout.kind = "piped";
        }
        if (state.stderr.kind !== "piped" && state.stderr.kind !== "inheritPiped") {
          state.stderr.kind = "piped";
        }
      }
    });
  }
  /**
   * Sets the stdin to use for the command.
   *
   * @remarks If multiple launches of a command occurs, then stdin will only be
   * read from the first consumed reader or readable stream and error otherwise.
   * For this reason, if you are setting stdin to something other than "inherit" or
   * "null", then it's recommended to set this each time you spawn a command.
   */
  stdin(reader) {
    return this.#newWithState((state) => {
      if (reader === "inherit" || reader === "null") {
        state.stdin = reader;
      } else if (reader instanceof Uint8Array) {
        state.stdin = new Deferred(() => new Buffer2(reader));
      } else if (reader instanceof Path) {
        state.stdin = new Deferred(async () => {
          const file = await reader.open();
          return file.readable;
        });
      } else if (reader instanceof _a) {
        state.stdin = new Deferred(() => {
          return reader.stdout("piped").spawn().stdout();
        });
      } else if (isAwaitableReadable(reader)) {
        const awaitable = reader;
        state.stdin = new Deferred(async () => {
          const body = await awaitable;
          if (!(body?.readable instanceof ReadableStream2)) {
            throw new TypeError("When passing an awaitable to stdin, the resolved value must have a `readable` ReadableStream.");
          }
          return body.readable;
        });
      } else {
        state.stdin = new Box(reader);
      }
    });
  }
  /**
   * Sets the stdin string to use for a command.
   *
   * @remarks See the remarks on stdin. The same applies here.
   */
  stdinText(text) {
    return this.stdin(new TextEncoder().encode(text));
  }
  stdout(kind, options) {
    return this.#newWithState((state) => {
      if (state.combinedStdoutStderr && kind !== "piped" && kind !== "inheritPiped") {
        throw new TypeError("Cannot set stdout's kind to anything but 'piped' or 'inheritPiped' when combined is true.");
      }
      if (options?.signal != null) {
        throw new TypeError("Setting a signal for a stdout WritableStream is not yet supported.");
      }
      state.stdout = {
        kind,
        options
      };
    });
  }
  stderr(kind, options) {
    return this.#newWithState((state) => {
      if (state.combinedStdoutStderr && kind !== "piped" && kind !== "inheritPiped") {
        throw new TypeError("Cannot set stderr's kind to anything but 'piped' or 'inheritPiped' when combined is true.");
      }
      if (options?.signal != null) {
        throw new TypeError("Setting a signal for a stderr WritableStream is not yet supported.");
      }
      state.stderr = {
        kind,
        options
      };
    });
  }
  tailDisplay(valueOrOptions = true) {
    return this.#newWithState((state) => {
      if (valueOrOptions === false) {
        state.tailDisplay = false;
      } else if (valueOrOptions === true) {
        state.tailDisplay = {};
      } else {
        state.tailDisplay = { ...valueOrOptions };
      }
    });
  }
  errorTail(valueOrOptions = true) {
    return this.#newWithState((state) => {
      if (valueOrOptions === false) {
        state.errorTail = false;
      } else if (valueOrOptions === true) {
        state.errorTail = {};
      } else {
        state.errorTail = { ...valueOrOptions };
      }
    });
  }
  /** Pipes the current command to the provided command returning the
   * provided command builder. When chaining, it's important to call this
   * after you are done configuring the current command or else you will
   * start modifying the provided command instead.
   *
   * @example
   * ```ts
   * const lineCount = await $`echo 1 && echo 2`
   *  .pipe($`wc -l`)
   *  .text();
   * ```
   */
  pipe(builder) {
    return builder.stdin(this.stdout("piped"));
  }
  env(nameOrItems, value) {
    return this.#newWithState((state) => {
      if (typeof nameOrItems === "string") {
        setEnv(state, nameOrItems, value);
      } else {
        for (const [key, value2] of Object.entries(nameOrItems)) {
          setEnv(state, key, value2);
        }
      }
    });
    function setEnv(state, key, value2) {
      if (isWindows3) {
        key = key.toUpperCase();
      }
      state.env[key] = value2;
    }
  }
  /** Sets the current working directory to use when executing this command. */
  cwd(dirPath) {
    return this.#newWithState((state) => {
      state.cwd = dirPath instanceof URL ? fileURLToPath(dirPath) : dirPath instanceof Path ? dirPath.resolve().toString() : path5.resolve(dirPath);
    });
  }
  /**
   * Exports the environment of the command to the executing process.
   *
   * So for example, changing the directory in a command or exporting
   * an environment variable will actually change the environment
   * of the executing process.
   *
   * ```ts
   * await $`cd src && export SOME_VALUE=5`;
   * console.log(process.env["SOME_VALUE"]); // 5
   * console.log(process.cwd()); // will be in the src directory
   * ```
   */
  exportEnv(value = true) {
    return this.#newWithState((state) => {
      state.exportEnv = value;
    });
  }
  /**
   * Clear environmental variables from parent process.
   *
   * Doesn't guarantee that only `env` variables are present, as the OS may
   * set environmental variables for processes.
   */
  clearEnv(value = true) {
    return this.#newWithState((state) => {
      state.clearEnv = value;
    });
  }
  /**
   * Prints the command text before executing the command.
   *
   * For example:
   *
   * ```ts
   * const text = "example";
   * await $`echo ${text}`.printCommand();
   * ```
   *
   * Outputs:
   *
   * ```
   * > echo example
   * example
   * ```
   */
  printCommand(value = true) {
    return this.#newWithState((state) => {
      state.printCommand = value;
    });
  }
  /**
   * Mutates the command builder to change the logger used
   * for `printCommand()`.
   */
  setPrintCommandLogger(logger2) {
    this.#state.printCommandLogger.setValue(logger2);
  }
  /**
   * Ensures stdout and stderr are piped if they have the default behaviour or are inherited.
   *
   * ```ts
   * // ensure both stdout and stderr is not logged to the console
   * await $`echo 1`.quiet();
   * // ensure stdout is not logged to the console
   * await $`echo 1`.quiet("stdout");
   * // ensure stderr is not logged to the console
   * await $`echo 1`.quiet("stderr");
   * ```
   */
  quiet(kind = "combined") {
    kind = kind === "both" ? "combined" : kind;
    return this.#newWithState((state) => {
      if (kind === "combined" || kind === "stdout") {
        state.stdout.kind = getQuietKind(state.stdout.kind);
      }
      if (kind === "combined" || kind === "stderr") {
        state.stderr.kind = getQuietKind(state.stderr.kind);
      }
    });
    function getQuietKind(kind2) {
      if (typeof kind2 === "object") {
        return kind2;
      }
      switch (kind2) {
        case "inheritPiped":
        case "inherit":
          return "piped";
        case "null":
        case "piped":
          return kind2;
        default: {
          const _assertNever = kind2;
          throw new TypeError(`Unhandled kind ${kind2}.`);
        }
      }
    }
  }
  /**
   * Specifies a timeout for the command. The command will exit with
   * exit code `124` (timeout) if it times out.
   *
   * Note that when using `.noThrow()` this won't cause an error to
   * be thrown when timing out.
   */
  timeout(delay) {
    return this.#newWithState((state) => {
      state.timeout = delay == null ? void 0 : delayToMs(delay);
    });
  }
  /**
   * Sets stdout as quiet, spawns the command, and gets stdout as a Uint8Array.
   *
   * Shorthand for:
   *
   * ```ts
   * const data = (await $`command`.quiet("stdout")).stdoutBytes;
   * ```
   */
  async bytes(kind = "stdout") {
    const command = kind === "combined" ? this.quiet(kind).captureCombined() : this.quiet(kind);
    return (await command)[`${kind}Bytes`];
  }
  /**
   * Sets the text decoder encoding to use for decoding stdout and stderr.
   *
   * This can be useful when the command output uses a specific character encoding
   * that differs from the default UTF-8 encoding.
   */
  encoding(encoding) {
    return this.#newWithState((state) => {
      state.encoding = encoding;
    });
  }
  /**
   * Sets whether pipefail is enabled. When enabled, a pipeline's exit code
   * is the rightmost non-zero exit code, or 0 if all commands succeed.
   *
   * ```ts
   * // without pipefail (default): exit code is from the last command (grep)
   * const code1 = await $`false | grep foo`.noThrow().code(); // 1 (grep's exit code)
   *
   * // with pipefail: exit code is from the first failing command
   * const code2 = await $`false | grep foo`.pipefail().noThrow().code(); // 1 (false's exit code)
   * ```
   */
  pipefail(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.pipefail = value;
    });
  }
  /**
   * Sets whether nullglob is enabled. When enabled, a glob pattern that
   * matches no files expands to nothing (empty) rather than being passed
   * through literally.
   *
   * Note: This also disables failglob since nullglob and failglob are
   * mutually exclusive behaviors.
   *
   * ```ts
   * // without nullglob (default): passes pattern literally
   * await $`echo *.nonexistent`; // outputs "*.nonexistent"
   *
   * // with nullglob: expands to nothing
   * await $`echo *.nonexistent`.nullglob(); // outputs empty line
   * ```
   */
  nullglob(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.nullglob = value;
      if (value) {
        state.shellOptions.failglob = false;
      }
    });
  }
  /**
   * Sets whether failglob is enabled. When enabled, a glob pattern
   * that matches no files causes an error. When disabled (the default),
   * unmatched patterns are passed through literally.
   *
   * ```ts
   * // without failglob (default): passes pattern literally
   * await $`echo *.nonexistent`; // outputs "*.nonexistent"
   *
   * // with failglob: throws error if no matches
   * await $`echo *.nonexistent`.failglob(); // Error: glob: no matches found
   * ```
   */
  failglob(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.failglob = value;
    });
  }
  /**
   * Sets whether globstar is enabled. When enabled (the default), the pattern `**`
   * used in a pathname expansion context will match all files and zero or more
   * directories and subdirectories. When disabled, `**` is treated as `*`.
   *
   * ```ts
   * // with globstar (default): ** matches recursively
   * await $`echo **\/*.ts`; // matches all .ts files in all subdirectories
   *
   * // without globstar: ** is treated as *
   * await $`echo **\/*.ts`.globstar(false); // matches only .ts files one level deep
   * ```
   */
  globstar(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.globstar = value;
    });
  }
  /**
   * Sets whether questionGlob is enabled. When enabled, `?` matches any
   * single character in glob patterns. When disabled (the default), `?` is
   * treated literally.
   *
   * This option is only available via the builder API, not via `shopt` or `set`.
   *
   * ```ts
   * // without questionGlob (default): ? is literal
   * await $`echo a?c`; // outputs "a?c"
   *
   * // with questionGlob: ? matches any single character
   * await $`echo a?c`.questionGlob(); // matches files like "abc", "axc", etc.
   * ```
   */
  questionGlob(value = true) {
    return this.#newWithState((state) => {
      state.shellOptions.questionGlob = value;
    });
  }
  /**
   * Sets the provided stream (stdout by default) as quiet, spawns the command, and gets the stream as a string without the last newline.
   * Can be used to get stdout, stderr, or both.
   *
   * Shorthand for:
   *
   * ```ts
   * const data = (await $`command`.quiet("stdout")).stdout.replace(/\r?\n$/, "");
   * ```
   */
  async text(kind = "stdout") {
    return (await this.#textRaw(kind)).replace(/\r?\n$/, "");
  }
  /**
   * Gets the text as an array of lines.
   *
   * Lines are split the same way as {@link CommandBuilder.linesIter} (matches
   * [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)):
   * line terminators are not included, a trailing blank line caused by a final
   * line ending is excluded, and empty output yields no lines.
   */
  async lines(kind = "stdout") {
    return splitLines2(await this.#textRaw(kind));
  }
  async #textRaw(kind) {
    const command = kind === "combined" ? this.quiet(kind).captureCombined() : this.quiet(kind);
    return (await command)[kind];
  }
  /**
   * Streams the command's output and iterates over its lines without
   * buffering everything into memory.
   *
   * Lines are split at `\n` or `\r\n`. Line terminators are not included.
   * A trailing blank line caused by a final line ending is excluded (matches
   * [Rust's `str::lines`](https://doc.rust-lang.org/std/primitive.str.html#method.lines)).
   *
   * If iteration is abandoned before the end of the output is reached, the
   * child process is killed.
   *
   * ```ts
   * for await (const line of $`cat big.txt`.linesIter()) {
   *   console.log(line);
   * }
   * ```
   */
  linesIter(kind = "stdout") {
    const child = this.quiet(kind).spawn();
    return iterateLines(child, kind);
  }
  /**
   * Sets stream (stdout by default) as quiet, spawns the command, and gets stream as JSON.
   *
   * Shorthand for:
   *
   * ```ts
   * const data = (await $`command`.quiet("stdout")).stdoutJson;
   * ```
   */
  async json(kind = "stdout") {
    return (await this.quiet(kind))[`${kind}Json`];
  }
  /**
   * Helper to get the exit code without throwing on non-zero exit codes.
   *
   * Shorthand for:
   *
   * ```ts
   * const code = (await $`command`.noThrow()).code;
   * ```
   */
  async code() {
    const result = await this.noThrow();
    return result.code;
  }
  /** @internal */
  [getRegisteredCommandNamesSymbol]() {
    return Object.keys(this.#state.commands);
  }
  /** @internal */
  [setCommandTextStateSymbol](textState) {
    return this.#newWithState((state) => {
      state.command = textState;
    });
  }
};
_a = CommandBuilder;
var CommandChild = class extends Promise {
  #pipedStdoutBuffer;
  #pipedStderrBuffer;
  #killSignalController;
  /** @internal */
  constructor(executor, options = { pipedStderrBuffer: void 0, pipedStdoutBuffer: void 0, killSignalController: void 0 }) {
    super(executor);
    this.#pipedStdoutBuffer = options.pipedStdoutBuffer;
    this.#pipedStderrBuffer = options.pipedStderrBuffer;
    this.#killSignalController = options.killSignalController;
  }
  /** Send a signal to the executing command's child process. Note that SIGTERM,
   * SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP will cause the entire command
   * to be considered "aborted" and if part of a command runs after this has occurred
   * it will return a 124 exit code. Other signals will just be forwarded to the command.
   *
   * Defaults to "SIGTERM".
   */
  kill(signal) {
    this.#killSignalController?.kill(signal);
  }
  /** Returns a `ReadableStream` of the running child's stdout. Requires the
   * stdout to have been set to `"piped"`. May only be consumed once. */
  stdout() {
    const buffer = this.#pipedStdoutBuffer;
    this.#assertBufferStreamable("stdout", buffer);
    this.#pipedStdoutBuffer = "consumed";
    this.catch(() => {
    });
    return this.#bufferToStream(buffer);
  }
  /** Returns a `ReadableStream` of the running child's stderr. Requires the
   * stderr to have been set to `"piped"`. May only be consumed once. */
  stderr() {
    const buffer = this.#pipedStderrBuffer;
    this.#assertBufferStreamable("stderr", buffer);
    this.#pipedStderrBuffer = "consumed";
    this.catch(() => {
    });
    return this.#bufferToStream(buffer);
  }
  #assertBufferStreamable(name, buffer) {
    if (buffer == null) {
      throw new Error(`No pipe available. Ensure ${name} is "piped" (not "inheritPiped") and combinedOutput is not enabled.`);
    }
    if (buffer === "consumed") {
      throw new Error(`Streamable ${name} was already consumed. Use the previously acquired stream instead.`);
    }
  }
  #bufferToStream(buffer) {
    const self = this;
    return new ReadableStream2({
      start(controller) {
        buffer.setListener({
          writeSync(data) {
            controller.enqueue(data);
            return data.length;
          },
          setError(err) {
            controller.error(err);
          },
          close() {
            controller.close();
          }
        });
      },
      cancel(_reason) {
        self.kill();
      }
    });
  }
};
function parseAndSpawnCommand(state, callerStack) {
  if (state.command == null) {
    throw new Error("A command must be set before it can be spawned.");
  }
  if (state.printCommand) {
    const tailHidesCommand = state.tailDisplay !== false && state.tailDisplay.header !== false;
    if (!tailHidesCommand) {
      state.printCommandLogger.getValue()(state.command.text);
    }
  }
  const disposables = [];
  const asyncDisposables = [];
  const parentSignal = state.signal;
  const killSignalController = new KillController();
  if (parentSignal != null) {
    const parentSignalListener = (signal2) => {
      killSignalController.kill(signal2);
    };
    parentSignal.addListener(parentSignalListener);
    if (parentSignal.aborted) {
      killSignalController.kill("SIGTERM");
    }
    disposables.push({
      [Symbol.dispose]() {
        parentSignal.removeListener(parentSignalListener);
      }
    });
  }
  let timedOut = false;
  if (state.timeout != null) {
    const timeoutId = setTimeout(() => {
      timedOut = true;
      killSignalController.kill();
    }, state.timeout);
    disposables.push({
      [Symbol.dispose]() {
        clearTimeout(timeoutId);
      }
    });
  }
  const resolvedTailWriterOptions = state.tailDisplay !== false ? resolveTailWriterOptions(state.tailDisplay, state.command.text, Boolean(state.printCommand)) : void 0;
  const [stdoutBuffer, stderrBuffer, combinedBuffer, tailWriters] = getBuffers();
  const errorTail = state.errorTail;
  const errorTailMaxBytes = errorTail === false ? 0 : errorTail.maxBytes ?? DEFAULT_ERROR_TAIL_BYTES;
  const errorTailCombined = errorTail !== false && errorTail.combined === true;
  const captureStdout = shouldCaptureForErrorTail(errorTail, "stdout", state.stdout.kind);
  const captureStderr = shouldCaptureForErrorTail(errorTail, "stderr", state.stderr.kind);
  let stdoutErrorRing;
  let stderrErrorRing;
  let combinedErrorRing;
  if (errorTailCombined && (captureStdout || captureStderr)) {
    combinedErrorRing = new ByteRingBuffer(errorTailMaxBytes);
    if (captureStdout)
      stdoutErrorRing = combinedErrorRing;
    if (captureStderr)
      stderrErrorRing = combinedErrorRing;
  } else {
    if (captureStdout)
      stdoutErrorRing = new ByteRingBuffer(errorTailMaxBytes);
    if (captureStderr)
      stderrErrorRing = new ByteRingBuffer(errorTailMaxBytes);
  }
  const tailEnabled = state.tailDisplay !== false;
  const stdoutShellKind = resolveShellKind(state.stdout.kind, tailEnabled, stdoutErrorRing != null);
  const stderrShellKind = resolveShellKind(state.stderr.kind, tailEnabled, stderrErrorRing != null);
  const stdoutInner = stdoutBuffer === "null" ? new NullPipeWriter() : stdoutBuffer === "inherit" ? stdout : stdoutBuffer;
  const stderrInner = stderrBuffer === "null" ? new NullPipeWriter() : stderrBuffer === "inherit" ? stderr : stderrBuffer;
  const stdout2 = new ShellPipeWriter(stdoutShellKind, stdoutErrorRing != null ? wrapWithErrorTailCapture(stdoutInner, stdoutErrorRing) : stdoutInner);
  const stderr2 = new ShellPipeWriter(stderrShellKind, stderrErrorRing != null ? wrapWithErrorTailCapture(stderrInner, stderrErrorRing) : stderrInner);
  const { text: commandText, fds } = state.command;
  const signal = killSignalController.signal;
  return new CommandChild(async (resolve8, reject) => {
    try {
      const list = parseCommand(commandText);
      const stdin2 = await takeStdin();
      let code2 = await spawn2(list, {
        stdin: stdin2 instanceof ReadableStream2 ? readerFromStreamReader(stdin2.getReader()) : stdin2,
        stdout: stdout2,
        stderr: stderr2,
        env: buildEnv(state.env, state.clearEnv),
        commands: state.commands,
        cwd: state.cwd ?? process.cwd(),
        exportEnv: state.exportEnv,
        clearedEnv: state.clearEnv,
        signal,
        fds,
        shellOptions: state.shellOptions
      });
      if (code2 !== 0) {
        if (timedOut) {
          code2 = 124;
        }
        const noThrow = state.noThrow instanceof Array ? state.noThrow.includes(code2) : state.noThrow;
        if (!noThrow) {
          if (stdin2 instanceof ReadableStream2) {
            if (!stdin2.locked) {
              stdin2.cancel();
            }
          }
          throw new ShellError({
            exitCode: code2,
            timedOut,
            aborted: signal.aborted,
            stdoutRing: stdoutErrorRing,
            stderrRing: stderrErrorRing,
            combinedRing: combinedErrorRing
          });
        }
      }
      for (const tw of tailWriters)
        tw.finalize();
      const result = new CommandResult(code2, finalizeCommandResultBuffer(stdoutBuffer), finalizeCommandResultBuffer(stderrBuffer), combinedBuffer instanceof Buffer2 ? combinedBuffer : void 0, state.encoding);
      const maybeError = await cleanupDisposablesAndMaybeGetError(void 0);
      if (maybeError) {
        attachCallerStack(maybeError, callerStack);
        reject(maybeError);
      } else {
        resolve8(result);
      }
    } catch (err) {
      for (const tw of tailWriters)
        tw.finalizeForError();
      finalizeCommandResultBufferForError(stdoutBuffer, err);
      finalizeCommandResultBufferForError(stderrBuffer, err);
      const rejectErr = await cleanupDisposablesAndMaybeGetError(err);
      attachCallerStack(rejectErr, callerStack);
      reject(rejectErr);
    }
  }, {
    pipedStdoutBuffer: stdoutBuffer instanceof PipedBuffer ? stdoutBuffer : void 0,
    pipedStderrBuffer: stderrBuffer instanceof PipedBuffer ? stderrBuffer : void 0,
    killSignalController
  });
  async function cleanupDisposablesAndMaybeGetError(maybeError) {
    const errors = [];
    if (maybeError) {
      errors.push(maybeError);
    }
    for (const disposable of disposables) {
      try {
        disposable[Symbol.dispose]();
      } catch (err) {
        errors.push(err);
      }
    }
    if (asyncDisposables.length > 0) {
      await Promise.all(asyncDisposables.map(async (d) => {
        try {
          await d[Symbol.asyncDispose]();
        } catch (err) {
          errors.push(err);
        }
      }));
    }
    if (errors.length === 1) {
      return errors[0];
    } else if (errors.length > 1) {
      return new AggregateError(errors);
    } else {
      return void 0;
    }
  }
  async function takeStdin() {
    if (state.stdin instanceof Box) {
      const stdin2 = state.stdin.value;
      if (stdin2 === "consumed") {
        throw new Error("Cannot spawn command. Stdin was already consumed when a previous command using the same stdin was spawned. You need to call `.stdin(...)` again with a new value before spawning.");
      }
      state.stdin.value = "consumed";
      return stdin2;
    } else if (state.stdin instanceof Deferred) {
      const stdin2 = await state.stdin.create();
      if (stdin2 instanceof ReadableStream2) {
        asyncDisposables.push({
          async [Symbol.asyncDispose]() {
            if (!stdin2.locked) {
              await stdin2.cancel();
            }
          }
        });
      }
      return stdin2;
    } else {
      return state.stdin;
    }
  }
  function getBuffers() {
    const hasProgressBars = staticText.hasText();
    const tailOpts = resolvedTailWriterOptions;
    const stdoutTail = tailOpts && canTail(state.stdout.kind) ? new InheritTailWriter(stdout, tailOpts) : void 0;
    const stderrTail = tailOpts && canTail(state.stderr.kind) ? stdoutTail != null ? new InheritTailWriter(stderr, stdoutTail) : new InheritTailWriter(stderr, tailOpts) : void 0;
    const tailWriters2 = [];
    if (stdoutTail != null)
      tailWriters2.push(stdoutTail);
    if (stderrTail != null)
      tailWriters2.push(stderrTail);
    const stdoutBuffer2 = getOutputBuffer(stdout, state.stdout, stdoutTail);
    const stderrBuffer2 = getOutputBuffer(stderr, state.stderr, stderrTail);
    if (state.combinedStdoutStderr) {
      if (typeof stdoutBuffer2 === "string" || typeof stderrBuffer2 === "string") {
        throw new Error("Internal programming error. Expected writers for stdout and stderr.");
      }
      const combinedBuffer2 = new Buffer2();
      return [
        getCapturingBuffer(stdoutBuffer2, combinedBuffer2),
        getCapturingBuffer(stderrBuffer2, combinedBuffer2),
        combinedBuffer2,
        tailWriters2
      ];
    }
    return [stdoutBuffer2, stderrBuffer2, void 0, tailWriters2];
    function canTail(kind) {
      return kind === "inherit" || kind === "inheritPiped";
    }
    function getCapturingBuffer(buffer, combinedBuffer2) {
      if ("write" in buffer) {
        return new CapturingBufferWriter(buffer, combinedBuffer2);
      } else {
        return new CapturingBufferWriterSync(buffer, combinedBuffer2);
      }
    }
    function getOutputBuffer(inheritWriter, { kind, options }, tail) {
      if (typeof kind === "object") {
        if (kind instanceof Path) {
          const file = kind.openSync({ write: true, truncate: true, create: true });
          disposables.push({
            [Symbol.dispose]() {
              file.close();
            }
          });
          return file;
        } else if (kind instanceof WritableStream2) {
          const streamWriter = kind.getWriter();
          asyncDisposables.push({
            async [Symbol.asyncDispose]() {
              streamWriter.releaseLock();
              if (!options?.preventClose) {
                try {
                  await kind.close();
                } catch {
                }
              }
            }
          });
          return writerFromStreamWriter(streamWriter);
        } else {
          return kind;
        }
      }
      switch (kind) {
        case "inherit":
          if (tail != null) {
            return tail;
          } else if (hasProgressBars) {
            return new InheritStaticTextBypassWriter(inheritWriter);
          } else {
            return "inherit";
          }
        case "piped":
          return new PipedBuffer();
        case "inheritPiped":
          return new CapturingBufferWriterSync(tail ?? inheritWriter, new Buffer2());
        case "null":
          return "null";
        default: {
          const _assertNever = kind;
          throw new TypeError("Unhandled.");
        }
      }
    }
  }
  function finalizeCommandResultBuffer(buffer) {
    if (buffer instanceof CapturingBufferWriterSync || buffer instanceof CapturingBufferWriter) {
      return buffer.getBuffer();
    } else if (buffer instanceof InheritStaticTextBypassWriter) {
      buffer.flush();
      return "inherit";
    } else if (buffer instanceof InheritTailWriter) {
      return "inherit";
    } else if (buffer instanceof PipedBuffer) {
      buffer.close();
      return buffer.getBuffer() ?? "streamed";
    } else if (typeof buffer === "object") {
      return "streamed";
    } else {
      return buffer;
    }
  }
  function finalizeCommandResultBufferForError(buffer, error) {
    if (buffer instanceof InheritStaticTextBypassWriter) {
      buffer.flush();
    } else if (buffer instanceof PipedBuffer) {
      buffer.setError(error);
    }
  }
}
var ShellError = class extends Error {
  name = "ShellError";
  /** The process exit code. */
  exitCode;
  /** Whether the command was killed because its timeout elapsed. */
  timedOut;
  /** Whether the command was aborted via its kill signal. */
  aborted;
  /** Captured trailing stdout text from the error-tail ring buffer.
   * Empty string when stdout was not captured (e.g. routed to the
   * terminal, or errorTail disabled for stdout). */
  stdout;
  /** Captured trailing stderr text from the error-tail ring buffer.
   * Empty string when stderr was not captured. */
  stderr;
  #cachedMessage;
  #baseMessage;
  /** @internal */
  constructor(options) {
    super();
    this.exitCode = options.exitCode;
    this.timedOut = options.timedOut;
    this.aborted = options.aborted;
    if (options.timedOut) {
      this.#baseMessage = `Timed out with exit code: ${options.exitCode}`;
    } else if (options.aborted) {
      this.#baseMessage = `Aborted with exit code: ${options.exitCode}`;
    } else {
      this.#baseMessage = `Exited with code: ${options.exitCode}`;
    }
    if (options.combinedRing != null && options.combinedRing.size > 0) {
      const combined = textDecoder.decode(options.combinedRing.toBytes());
      this.stdout = combined;
      this.stderr = combined;
    } else {
      this.stdout = options.stdoutRing != null && options.stdoutRing.size > 0 ? textDecoder.decode(options.stdoutRing.toBytes()) : "";
      this.stderr = options.stderrRing != null && options.stderrRing.size > 0 ? textDecoder.decode(options.stderrRing.toBytes()) : "";
    }
    delete this.message;
  }
  get message() {
    if (this.#cachedMessage == null) {
      this.#cachedMessage = this.#baseMessage + formatErrorTailSuffix(this.stdout, this.stderr);
    }
    return this.#cachedMessage;
  }
  set message(value) {
    this.#cachedMessage = value;
  }
};
var CommandResult = class {
  #stdout;
  #stderr;
  #combined;
  #textDecoder;
  /** The exit code. */
  code;
  /** @internal */
  constructor(code2, stdout2, stderr2, combined, encoding) {
    this.code = code2;
    this.#stdout = stdout2;
    this.#stderr = stderr2;
    this.#combined = combined;
    this.#textDecoder = encoding ? new TextDecoder2(encoding) : textDecoder;
  }
  #memoizedStdout;
  /** Raw decoded stdout text. */
  get stdout() {
    if (!this.#memoizedStdout) {
      this.#memoizedStdout = this.#textDecoder.decode(this.stdoutBytes);
    }
    return this.#memoizedStdout;
  }
  #memoizedStdoutJson;
  /**
   * Stdout text as JSON.
   *
   * @remarks Will throw if it can't be parsed as JSON.
   */
  get stdoutJson() {
    if (this.#memoizedStdoutJson == null) {
      this.#memoizedStdoutJson = JSON.parse(this.stdout);
    }
    return this.#memoizedStdoutJson;
  }
  /** Raw stdout bytes. */
  get stdoutBytes() {
    if (this.#stdout === "streamed") {
      throw new Error(`Stdout was streamed to another source and is no longer available.`);
    }
    if (typeof this.#stdout === "string") {
      throw new Error(`Stdout was not piped (was ${this.#stdout}). Call .stdout("piped") or .stdout("inheritPiped") when building the command.`);
    }
    return this.#stdout.bytes({ copy: false });
  }
  #memoizedStderr;
  /** Raw decoded stdout text. */
  get stderr() {
    if (!this.#memoizedStderr) {
      this.#memoizedStderr = this.#textDecoder.decode(this.stderrBytes);
    }
    return this.#memoizedStderr;
  }
  #memoizedStderrJson;
  /**
   * Stderr text as JSON.
   *
   * @remarks Will throw if it can't be parsed as JSON.
   */
  get stderrJson() {
    if (this.#memoizedStderrJson == null) {
      this.#memoizedStderrJson = JSON.parse(this.stderr);
    }
    return this.#memoizedStderrJson;
  }
  /** Raw stderr bytes. */
  get stderrBytes() {
    if (this.#stderr === "streamed") {
      throw new Error(`Stderr was streamed to another source and is no longer available.`);
    }
    if (typeof this.#stderr === "string") {
      throw new Error(`Stderr was not piped (was ${this.#stderr}). Call .stderr("piped") or .stderr("inheritPiped") when building the command.`);
    }
    return this.#stderr.bytes({ copy: false });
  }
  #memoizedCombined;
  /** Raw combined stdout and stderr text. */
  get combined() {
    if (!this.#memoizedCombined) {
      this.#memoizedCombined = textDecoder.decode(this.combinedBytes);
    }
    return this.#memoizedCombined;
  }
  /** Raw combined stdout and stderr bytes. */
  get combinedBytes() {
    if (this.#combined == null) {
      throw new Error("Stdout and stderr were not combined. Call .captureCombined() when building the command.");
    }
    return this.#combined.bytes({ copy: false });
  }
};
function shouldCaptureForErrorTail(errorTail, stream, kind) {
  if (errorTail === false)
    return false;
  if (errorTail[stream] === false)
    return false;
  if (kind === "inherit" || kind === "inheritPiped")
    return false;
  return true;
}
function resolveShellKind(userKind, tailEnabled, errorTailEnabled) {
  if (!tailEnabled && !errorTailEnabled)
    return userKind;
  if (userKind === "inherit")
    return "inheritPiped";
  if (userKind === "null" && errorTailEnabled)
    return "piped";
  return userKind;
}
function wrapWithErrorTailCapture(inner, ring) {
  if ("write" in inner) {
    return new ErrorTailCaptureWriter(inner, ring);
  }
  return new ErrorTailCaptureWriterSync(inner, ring);
}
function formatErrorTailSuffix(stdoutText, stderrText) {
  if (stdoutText.length === 0 && stderrText.length === 0)
    return "";
  if (stdoutText === stderrText) {
    return `

${stripTrailingNewline(stdoutText)}`;
  }
  let suffix = "";
  if (stderrText.length > 0 && stdoutText.length > 0) {
    suffix += `

stderr:
${stripTrailingNewline(stderrText)}`;
    suffix += `

stdout:
${stripTrailingNewline(stdoutText)}`;
  } else if (stderrText.length > 0) {
    suffix += `

${stripTrailingNewline(stderrText)}`;
  } else {
    suffix += `

${stripTrailingNewline(stdoutText)}`;
  }
  return suffix;
}
function stripTrailingNewline(text) {
  if (text.endsWith("\r\n"))
    return text.slice(0, -2);
  if (text.endsWith("\n"))
    return text.slice(0, -1);
  return text;
}
function resolveTailWriterOptions(display, command, promoteHeaderOnSuccess) {
  const headerOpt = display.header;
  let header;
  let headerVerbatim = false;
  if (headerOpt === false) {
    header = void 0;
  } else if (typeof headerOpt === "function") {
    header = ({ size }) => headerOpt({ command, size });
    headerVerbatim = true;
  } else if (typeof headerOpt === "string") {
    header = headerOpt;
    headerVerbatim = true;
  } else {
    header = command;
  }
  return {
    maxLines: display.maxLines,
    header,
    headerVerbatim,
    errorHeader: command,
    promoteHeaderOnSuccess
  };
}
function buildEnv(env, clearEnv) {
  const result = clearEnv ? {} : getRealEnvVars();
  for (const [key, value] of Object.entries(env)) {
    if (value == null) {
      delete result[key];
    } else {
      result[key] = value;
    }
  }
  return result;
}
function escapeArg(arg) {
  if (/^[A-Za-z0-9]+$/.test(arg)) {
    return arg;
  } else {
    return `'${arg.replaceAll("'", `'"'"'`)}'`;
  }
}
var RawArg = class {
  #value;
  /** Creates a new `RawArg` wrapping the provided value. */
  constructor(value) {
    this.#value = value;
  }
  /** The wrapped value that will be used as-is during template substitution. */
  get value() {
    return this.#value;
  }
};
function rawArg(arg) {
  return new RawArg(arg);
}
function validateCommandName(command) {
  if (command.match(/^[a-zA-Z0-9-_]+$/) == null) {
    throw new TypeError("Invalid command name");
  }
}
var SHELL_SIGNAL_CTOR_SYMBOL = Symbol();
var KillController = class {
  #state;
  #killSignal;
  constructor() {
    this.#state = {
      abortedCode: void 0,
      listeners: []
    };
    this.#killSignal = new KillSignal(SHELL_SIGNAL_CTOR_SYMBOL, this.#state);
  }
  /** The associated `KillSignal` to attach to commands. */
  get signal() {
    return this.#killSignal;
  }
  /** Send a signal to the downstream child process. Note that SIGTERM,
   * SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP will cause all the commands
   * to be considered "aborted" and will return a 124 exit code, while other
   * signals will just be forwarded to the commands.
   */
  kill(signal = "SIGTERM") {
    sendSignalToState(this.#state, signal);
  }
};
var KillSignal = class {
  #state;
  /** @internal */
  constructor(symbol, state) {
    if (symbol !== SHELL_SIGNAL_CTOR_SYMBOL) {
      throw new Error("Constructing instances of KillSignal is not permitted.");
    }
    this.#state = state;
  }
  /** Returns if the command signal has ever received a SIGTERM,
   * SIGKILL, SIGABRT, SIGQUIT, SIGINT, or SIGSTOP
   */
  get aborted() {
    return this.#state.abortedCode !== void 0;
  }
  /** Gets the exit code to use if aborted. */
  get abortedExitCode() {
    return this.#state.abortedCode;
  }
  /**
   * Causes the provided kill signal to be triggered when this
   * signal receives a signal.
   */
  linkChild(killSignal) {
    const listener = (signal) => {
      sendSignalToState(killSignal.#state, signal);
    };
    this.addListener(listener);
    return {
      unsubscribe: () => {
        this.removeListener(listener);
      }
    };
  }
  /** Registers a listener that will be invoked whenever a signal is sent. */
  addListener(listener) {
    this.#state.listeners.push(listener);
  }
  /** Removes a previously registered listener. */
  removeListener(listener) {
    const index = this.#state.listeners.indexOf(listener);
    if (index >= 0) {
      this.#state.listeners.splice(index, 1);
    }
  }
};
function killSignalFromAbortSignal(abortSignal) {
  const controller = new KillController();
  if (abortSignal.aborted) {
    controller.kill("SIGTERM");
  } else {
    abortSignal.addEventListener("abort", () => {
      controller.kill("SIGTERM");
    }, { once: true });
  }
  return controller.signal;
}
function sendSignalToState(state, signal) {
  const code2 = getSignalAbortCode(signal);
  if (code2 !== void 0) {
    state.abortedCode = code2;
  }
  for (const listener of state.listeners) {
    listener(signal);
  }
}
function getSignalAbortCode(signal) {
  switch (signal) {
    case "SIGTERM":
      return 128 + 15;
    case "SIGKILL":
      return 128 + 9;
    case "SIGABRT":
      return 128 + 6;
    case "SIGQUIT":
      return 128 + 3;
    case "SIGINT":
      return 128 + 2;
    case "SIGSTOP":
      return 128 + 19;
    default:
      return void 0;
  }
}
function template(strings, exprs) {
  return templateInner(strings, exprs, escapeArg);
}
function templateRaw(strings, exprs) {
  return templateInner(strings, exprs, void 0);
}
function templateInner(strings, exprs, escape) {
  let nextStreamFd = 3;
  let text = "";
  let streams;
  const exprsCount = exprs.length;
  for (let i = 0; i < Math.max(strings.length, exprs.length); i++) {
    if (strings.length > i) {
      text += strings[i];
    }
    if (exprs.length > i) {
      try {
        const expr = exprs[i];
        if (expr == null) {
          throw "Expression was null or undefined.";
        }
        const inputOrOutputRedirect = detectInputOrOutputRedirect(text);
        if (inputOrOutputRedirect === "<") {
          if (expr instanceof Path) {
            text += templateLiteralExprToString(expr, escape);
          } else if (typeof expr === "string") {
            handleReadableStream(() => new ReadableStream2({
              start(controller) {
                controller.enqueue(new TextEncoder().encode(expr));
                controller.close();
              }
            }));
          } else if (expr instanceof ReadableStream2) {
            handleReadableStream(() => expr);
          } else if (expr?.[symbols.readable]) {
            handleReadableStream(() => {
              const stream = expr[symbols.readable]?.();
              if (!(stream instanceof ReadableStream2)) {
                throw new TypeError(`Expected a ReadableStream or an object with a [$.symbols.readable] method that returns a ReadableStream at expression ${i + 1}/${exprsCount}.`);
              }
              return stream;
            });
          } else if (expr instanceof FsFileWrapper) {
            handleReadableStream(() => expr.readable);
          } else if (expr instanceof Uint8Array) {
            handleReadableStream(() => {
              return new ReadableStream2({
                start(controller) {
                  controller.enqueue(expr);
                  controller.close();
                }
              });
            });
          } else if (expr instanceof Response) {
            handleReadableStream(() => {
              return expr.body ?? new ReadableStream2({
                start(controller) {
                  controller.close();
                }
              });
            });
          } else if (expr instanceof Function) {
            handleReadableStream(() => {
              try {
                const result = expr();
                if (!(result instanceof ReadableStream2)) {
                  throw new TypeError("Function did not return a ReadableStream.");
                }
                return result;
              } catch (err) {
                throw new Error(`Error getting ReadableStream from function at expression ${i + 1}/${exprsCount}. ${errorToString(err)}`);
              }
            });
          } else {
            throw new TypeError("Unsupported object provided to input redirect.");
          }
        } else if (inputOrOutputRedirect === ">") {
          if (expr instanceof Path) {
            text += templateLiteralExprToString(expr, escape);
          } else if (expr instanceof WritableStream2) {
            handleWritableStream(() => expr);
          } else if (expr instanceof Uint8Array) {
            let pos = 0;
            handleWritableStream(() => {
              return new WritableStream2({
                write(chunk) {
                  const nextPos = chunk.length + pos;
                  if (nextPos > expr.length) {
                    const chunkLength = expr.length - pos;
                    expr.set(chunk.slice(0, chunkLength), pos);
                    throw new Error(`Overflow writing ${nextPos} bytes to Uint8Array (length: ${exprsCount}).`);
                  }
                  expr.set(chunk, pos);
                  pos = nextPos;
                }
              });
            });
          } else if (expr instanceof FsFileWrapper) {
            handleWritableStream(() => expr.writable);
          } else if (expr?.[symbols.writable]) {
            handleWritableStream(() => {
              const stream = expr[symbols.writable]?.();
              if (!(stream instanceof WritableStream2)) {
                throw new TypeError(`Expected a WritableStream or an object with a [$.symbols.writable] method that returns a WritableStream at expression ${i + 1}/${exprsCount}.`);
              }
              return stream;
            });
          } else if (expr instanceof Function) {
            handleWritableStream(() => {
              try {
                const result = expr();
                if (!(result instanceof WritableStream2)) {
                  throw new TypeError("Function did not return a WritableStream.");
                }
                return result;
              } catch (err) {
                throw new Error(`Error getting WritableStream from function at expression ${i + 1}/${exprsCount}. ${errorToString(err)}`);
              }
            });
          } else if (typeof expr === "string") {
            throw new TypeError("Cannot provide strings to output redirects. Did you mean to provide a path instead via the `$.path(...)` API?");
          } else {
            throw new TypeError("Unsupported object provided to output redirect.");
          }
        } else {
          text += templateLiteralExprToString(expr, escape);
        }
      } catch (err) {
        const startMessage = exprsCount === 1 ? "Failed resolving expression in command." : `Failed resolving expression ${i + 1}/${exprsCount} in command.`;
        const message = `${startMessage} ${errorToString(err)}`;
        if (err instanceof TypeError) {
          throw new TypeError(message);
        } else {
          throw new Error(message);
        }
      }
    }
  }
  return {
    text,
    fds: streams
  };
  function handleReadableStream(createStream) {
    streams ??= new StreamFds();
    const fd = nextStreamFd++;
    streams.insertReader(fd, () => {
      const reader = createStream().getReader();
      return {
        ...readerFromStreamReader(reader),
        [Symbol.dispose]() {
          reader.releaseLock();
        }
      };
    });
    text = text.trimEnd() + "&" + fd;
  }
  function handleWritableStream(createStream) {
    streams ??= new StreamFds();
    const fd = nextStreamFd++;
    streams.insertWriter(fd, () => {
      const stream = createStream();
      const writer = stream.getWriter();
      return {
        ...writerFromStreamWriter(writer),
        async [Symbol.asyncDispose]() {
          writer.releaseLock();
          try {
            await stream.close();
          } catch {
          }
        }
      };
    });
    text = text.trimEnd() + "&" + fd;
  }
}
function detectInputOrOutputRedirect(text) {
  text = text.trimEnd();
  if (text.endsWith(">")) {
    return ">";
  } else if (text.endsWith("<")) {
    return "<";
  } else {
    return void 0;
  }
}
function templateLiteralExprToString(expr, escape) {
  let result;
  if (typeof expr === "string") {
    result = expr;
  } else if (expr instanceof Array) {
    return expr.map((e) => templateLiteralExprToString(e, escape)).join(" ");
  } else if (expr instanceof CommandResult) {
    result = expr.stdout.replace(/\r?\n$/, "");
  } else if (expr instanceof CommandBuilder) {
    throw new TypeError("Providing a command builder is not yet supported (https://github.com/dsherret/dax/issues/239). Await the command builder's text before using it in an expression (ex. await $`cmd`.text()).");
  } else if (expr instanceof RawArg) {
    return templateLiteralExprToString(expr.value, void 0);
  } else if (typeof expr === "object" && expr.toString === Object.prototype.toString) {
    if (expr instanceof Promise) {
      throw new TypeError("Provided object was a Promise. Please await it before providing it.");
    } else {
      throw new TypeError("Provided object does not override `toString()`.");
    }
  } else {
    result = `${expr}`;
  }
  return escape ? escape(result) : result;
}
function writerFromStreamWriter(streamWriter) {
  return {
    async write(p) {
      await streamWriter.ready;
      await streamWriter.write(p);
      return p.length;
    }
  };
}
function isAwaitableReadable(value) {
  return value != null && (typeof value === "object" || typeof value === "function") && typeof value.then === "function";
}
function captureCallerStack(skipUpTo) {
  const captureFn = Error.captureStackTrace;
  if (captureFn == null) {
    return new Error().stack;
  }
  const holder = {};
  captureFn(holder, skipUpTo);
  return holder.stack;
}
var proxyToCommandBuilder = /* @__PURE__ */ new WeakMap();
function wrapCommandBuilderNonThenable(builder) {
  const proxy = new Proxy(builder, {
    get(target, prop, _receiver) {
      if (prop === "then")
        return void 0;
      const value = Reflect.get(target, prop, target);
      if (typeof value === "function") {
        return (...args) => {
          const result = value.apply(target, args);
          if (result instanceof CommandBuilder) {
            return wrapCommandBuilderNonThenable(result);
          }
          return result;
        };
      }
      return value;
    }
  });
  proxyToCommandBuilder.set(proxy, builder);
  return proxy;
}
function unwrapCommandBuilder(result) {
  if (!(result instanceof CommandBuilder))
    return void 0;
  return proxyToCommandBuilder.get(result) ?? result;
}
function attachCallerStack(err, callerStack) {
  if (callerStack == null || !(err instanceof Error)) {
    return;
  }
  const newlineIdx = callerStack.indexOf("\n");
  if (newlineIdx === -1)
    return;
  const frames = callerStack.slice(newlineIdx + 1);
  if (frames.length === 0)
    return;
  err.stack = err.stack == null ? frames : `${err.stack}
${frames}`;
}
function splitLines2(text) {
  const lines = [];
  let start = 0;
  while (true) {
    const nl = text.indexOf("\n", start);
    if (nl === -1)
      break;
    const end = nl > start && text.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
    lines.push(text.substring(start, end));
    start = nl + 1;
  }
  if (start < text.length)
    lines.push(text.substring(start));
  return lines;
}
async function* iterateLines(child, kind) {
  const stream = kind === "stdout" ? child.stdout() : child.stderr();
  const reader = stream.getReader();
  const decoder2 = new TextDecoder2();
  let buffer = "";
  let completed = false;
  try {
    while (true) {
      const { done, value } = await reader.read();
      if (done)
        break;
      if (value.length === 0)
        continue;
      buffer += decoder2.decode(value, { stream: true });
      let start = 0;
      while (true) {
        const nl = buffer.indexOf("\n", start);
        if (nl === -1)
          break;
        const end = nl > start && buffer.charCodeAt(nl - 1) === 13 ? nl - 1 : nl;
        yield buffer.substring(start, end);
        start = nl + 1;
      }
      if (start > 0)
        buffer = buffer.substring(start);
    }
    buffer += decoder2.decode();
    if (buffer !== "")
      yield buffer;
    completed = true;
  } finally {
    try {
      await reader.cancel();
    } catch {
    }
    if (!completed) {
      child.kill();
      try {
        await child;
      } catch {
      }
    } else {
      await child;
    }
  }
}

// npm/esm/deps/jsr.io/@david/shell/0.6.0/src/dollar.js
function build$FromState(state) {
  const tag = (strings, ...exprs) => state.commandBuilder.getValue()[setCommandTextStateSymbol](template(strings, exprs));
  const result = Object.assign(tag, {
    escapeArg,
    rawArg,
    raw(strings, ...exprs) {
      return state.commandBuilder.getValue()[setCommandTextStateSymbol](templateRaw(strings, exprs));
    },
    build$(opts = {}) {
      return build$FromState({
        commandBuilder: resolveCommandBuilder(opts.commandBuilder, state.commandBuilder),
        extras: { ...state.extras, ...opts.extras }
      });
    }
  }, state.extras ?? {});
  return result;
}
function resolveCommandBuilder(value, parent) {
  if (value instanceof CommandBuilder) {
    return new TreeBox(value);
  } else if (typeof value === "function") {
    const base = parent != null ? parent.getValue() : new CommandBuilder();
    return new TreeBox(value(base));
  } else {
    return parent != null ? parent.createChild() : new TreeBox(new CommandBuilder());
  }
}
function build$(opts = {}) {
  return build$FromState({
    commandBuilder: resolveCommandBuilder(opts.commandBuilder, void 0),
    extras: opts.extras
  });
}
var $ = build$();

// npm/esm/src/common.js
var TimeoutError = class extends Error {
  constructor(message) {
    super(message);
  }
  get name() {
    return "TimeoutError";
  }
};
function delayToIterator(delay) {
  if (typeof delay !== "number" && typeof delay !== "string") {
    return delay;
  }
  const ms = delayToMs(delay);
  return {
    next() {
      return ms;
    }
  };
}
function formatMillis(ms) {
  if (ms < 1e3) {
    return `${formatValue(ms)} millisecond${ms === 1 ? "" : "s"}`;
  } else if (ms < 60 * 1e3) {
    const s = ms / 1e3;
    return `${formatValue(s)} ${pluralize("second", s)}`;
  } else {
    const mins = ms / 60 / 1e3;
    return `${formatValue(mins)} ${pluralize("minute", mins)}`;
  }
  function formatValue(value) {
    const text = value.toFixed(2);
    if (text.endsWith(".00")) {
      return value.toFixed(0);
    } else if (text.endsWith("0")) {
      return value.toFixed(1);
    } else {
      return text;
    }
  }
  function pluralize(text, value) {
    const suffix = value === 1 ? "" : "s";
    return text + suffix;
  }
}
function filterEmptyRecordValues(record) {
  const result = {};
  for (const [key, value] of Object.entries(record)) {
    if (value != null) {
      result[key] = value;
    }
  }
  return result;
}
function getFileNameFromUrl(url) {
  const parsedUrl = url instanceof URL ? url : new URL(url);
  const fileName = parsedUrl.pathname.split("/").at(-1);
  return fileName?.length === 0 ? void 0 : fileName;
}

// npm/esm/src/console/logger.js
var staticTextScope = staticText.createScope();
var _renderScope = renderInterval.start();
var LoggerRefreshItemKind;
(function(LoggerRefreshItemKind2) {
  LoggerRefreshItemKind2[LoggerRefreshItemKind2["ProgressBars"] = 0] = "ProgressBars";
  LoggerRefreshItemKind2[LoggerRefreshItemKind2["Selection"] = 1] = "Selection";
})(LoggerRefreshItemKind || (LoggerRefreshItemKind = {}));
var refreshItems = {
  [LoggerRefreshItemKind.ProgressBars]: void 0,
  [LoggerRefreshItemKind.Selection]: void 0
};
function setItems(kind, items, size) {
  refreshItems[kind] = items;
  refresh(size);
}
function refresh(size) {
  if (!isOutputTty) {
    return;
  }
  const items = Object.values(refreshItems).flatMap((items2) => items2 ?? []);
  staticTextScope.setText(items);
  staticText.refresh(size);
}
var logger = {
  setItems,
  logOnce(items, size) {
    staticTextScope.logAbove(items, size);
  },
  withTempClear(action) {
    staticText.withTempClear(action);
  }
};

// npm/esm/src/console/ttyFallback.js
import * as fs10 from "node:fs";
import * as tty from "node:tty";
import process2 from "node:process";
var cached;
function tryOpen() {
  if (cached !== void 0)
    return cached;
  try {
    const path6 = process2.platform === "win32" ? "\\\\.\\CONIN$" : "/dev/tty";
    const fd = fs10.openSync(path6, "r+");
    const stream = new tty.ReadStream(fd);
    cached = { fd, stream };
  } catch {
    cached = null;
  }
  return cached;
}
function hasFallbackTty() {
  return tryOpen() != null;
}
var ttyStdin = {
  read(p, options) {
    const signal = options?.signal;
    signal?.throwIfAborted();
    const handle = tryOpen();
    if (handle == null)
      return Promise.reject(new Error("No controlling terminal available."));
    return readTty(handle.stream, p, signal);
  },
  setRaw(mode) {
    const handle = tryOpen();
    if (handle == null)
      return;
    handle.stream.setRawMode(mode);
  }
};
function readTty(stream, p, signal) {
  return new Promise((resolve8, reject) => {
    const onReadable = () => {
      const chunk = stream.read();
      if (chunk === null)
        return;
      cleanup();
      const len = Math.min(chunk.length, p.length);
      p.set(chunk.subarray(0, len));
      if (chunk.length > len)
        stream.unshift(chunk.subarray(len));
      resolve8(len);
    };
    const onEnd = () => {
      cleanup();
      resolve8(null);
    };
    const onError = (err) => {
      cleanup();
      reject(err);
    };
    const onAbort = () => {
      cleanup();
      reject(signal.reason);
    };
    const cleanup = () => {
      stream.off("readable", onReadable);
      stream.off("end", onEnd);
      stream.off("error", onError);
      signal?.removeEventListener("abort", onAbort);
    };
    stream.on("readable", onReadable);
    stream.on("end", onEnd);
    stream.on("error", onError);
    signal?.addEventListener("abort", onAbort, { once: true });
    onReadable();
  });
}

// npm/esm/src/console/utils.js
var encoder3 = new TextEncoder();
function resolvePromptInput() {
  if (isTerminal(stdin))
    return stdin;
  if (hasFallbackTty())
    return ttyStdin;
  return void 0;
}
var Keys;
(function(Keys2) {
  Keys2[Keys2["Up"] = 0] = "Up";
  Keys2[Keys2["Down"] = 1] = "Down";
  Keys2[Keys2["Left"] = 2] = "Left";
  Keys2[Keys2["Right"] = 3] = "Right";
  Keys2[Keys2["Enter"] = 4] = "Enter";
  Keys2[Keys2["Space"] = 5] = "Space";
  Keys2[Keys2["Backspace"] = 6] = "Backspace";
})(Keys || (Keys = {}));
async function* readKeys(reader, signal) {
  const decoder2 = new TextDecoder2();
  while (true) {
    const buf = new Uint8Array(8);
    const byteCount = await reader.read(buf, { signal });
    if (byteCount == null) {
      break;
    }
    if (byteCount === 3) {
      if (buf[0] === 27 && buf[1] === 91) {
        if (buf[2] === 65) {
          yield Keys.Up;
          continue;
        } else if (buf[2] === 66) {
          yield Keys.Down;
          continue;
        } else if (buf[2] === 67) {
          yield Keys.Right;
          continue;
        } else if (buf[2] === 68) {
          yield Keys.Left;
          continue;
        }
      }
    } else if (byteCount === 1) {
      if (buf[0] === 3) {
        break;
      } else if (buf[0] === 13) {
        yield Keys.Enter;
        continue;
      } else if (buf[0] === 14) {
        yield Keys.Down;
        continue;
      } else if (buf[0] === 16) {
        yield Keys.Up;
        continue;
      } else if (buf[0] === 32) {
        yield Keys.Space;
        continue;
      } else if (buf[0] === 127) {
        yield Keys.Backspace;
        continue;
      }
    }
    const text = stripAnsiCodes(decoder2.decode(buf.slice(0, byteCount ?? 0), { stream: true }));
    if (text.length > 0) {
      yield text;
    }
  }
}
function hideCursor() {
  stderr.writeSync(encoder3.encode("\x1B[?25l"));
}
function showCursor() {
  stderr.writeSync(encoder3.encode("\x1B[?25h"));
}
var isOutputTty = maybeConsoleSize() != null && isTerminal(stderr);
function isTerminal(pipe) {
  if (typeof pipe.isTerminal === "function") {
    return pipe.isTerminal();
  } else {
    throw new Error("Unsupported pipe.");
  }
}
function resultOrExit(result) {
  if (result == null) {
    process.exit(130);
  } else {
    return result;
  }
}
function undefinedOnAbort(signal, p) {
  if (signal == null)
    return p;
  return p.catch((err) => {
    if (signal.aborted && err === signal.reason)
      return void 0;
    throw err;
  });
}
var SelectionItem = class {
  index;
  value;
  constructor(index, value) {
    this.index = index;
    this.value = value;
  }
  [Symbol.toPrimitive](hint) {
    return hint === "string" ? String(this.index) : this.index;
  }
  toString() {
    return String(this.index);
  }
  valueOf() {
    return this.index;
  }
};
function createSelection(options) {
  const input = isOutputTty ? resolvePromptInput() : void 0;
  if (input == null) {
    throw new Error(`Cannot prompt when not a tty. (Prompt: '${options.message}')`);
  }
  if (maybeConsoleSize() == null) {
    throw new Error(`Cannot prompt when can't get console size. (Prompt: '${options.message}')`);
  }
  const { signal } = options;
  if (signal?.aborted) {
    return Promise.reject(signal.reason);
  }
  return ensureSingleSelection(input, async () => {
    logger.setItems(LoggerRefreshItemKind.Selection, options.render());
    try {
      for await (const key of readKeys(input, signal)) {
        const keyResult = options.onKey(key);
        if (keyResult != null)
          return keyResult;
        logger.setItems(LoggerRefreshItemKind.Selection, options.render());
      }
      return void 0;
    } finally {
      const size = {
        columns: process.stdout.columns ?? 80,
        rows: process.stdout.rows ?? 24
      };
      logger.setItems(LoggerRefreshItemKind.Selection, [], size);
      if (options.noClear) {
        logger.logOnce(options.render(), size);
      }
    }
  });
}
var lastPromise = Promise.resolve();
function ensureSingleSelection(input, action) {
  const currentLastPromise = lastPromise;
  const currentPromise = (async () => {
    try {
      await currentLastPromise;
    } catch {
    }
    hideCursor();
    try {
      input.setRaw(true);
      try {
        return await action();
      } finally {
        input.setRaw(false);
      }
    } finally {
      showCursor();
    }
  })();
  lastPromise = currentPromise;
  return currentPromise;
}

// npm/esm/src/console/alert.js
function alert(optsOrMessage, options) {
  const opts = typeof optsOrMessage === "string" ? { message: optsOrMessage, ...options } : optsOrMessage;
  return createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerAlert(opts)
  }).then(resultOrExit).then(() => void 0);
}
function innerAlert(opts) {
  const requireEnter = opts.requireEnter ?? false;
  const drawState = {
    title: opts.message,
    requireEnter,
    hasCompleted: false
  };
  return {
    render: () => render(drawState),
    onKey: (key) => {
      if (!requireEnter || key === Keys.Enter) {
        drawState.hasCompleted = true;
        return true;
      }
      return void 0;
    }
  };
}
function render(state) {
  const hint = state.hasCompleted ? "" : state.requireEnter ? " [press enter]" : " [press any key]";
  return [
    bold(blue(state.title)) + dim(hint)
  ];
}

// npm/esm/src/console/confirm.js
function confirm(optsOrMessage, options) {
  return maybeConfirm(optsOrMessage, options).then(resultOrExit);
}
function maybeConfirm(optsOrMessage, options) {
  const opts = typeof optsOrMessage === "string" ? { message: optsOrMessage, ...options } : optsOrMessage;
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerConfirm(opts)
  }));
}
function innerConfirm(opts) {
  const drawState = {
    title: opts.message,
    default: opts.default,
    inputText: "",
    hasCompleted: false
  };
  return {
    render: () => render2(drawState),
    onKey: (key) => {
      switch (key) {
        case "Y":
        case "y":
          drawState.inputText = "Y";
          break;
        case "N":
        case "n":
          drawState.inputText = "N";
          break;
        case Keys.Backspace:
          drawState.inputText = "";
          break;
        case Keys.Enter:
          if (drawState.inputText.length === 0) {
            if (drawState.default == null) {
              return void 0;
            }
            drawState.inputText = drawState.default ? "Y" : "N";
          }
          drawState.hasCompleted = true;
          return drawState.inputText === "Y" ? true : drawState.inputText === "N" ? false : drawState.default;
      }
    }
  };
}
function render2(state) {
  return [
    bold(blue(state.title)) + " " + (state.hasCompleted ? "" : state.default == null ? "(Y/N) " : state.default ? "(Y/n) " : "(y/N) ") + state.inputText + (state.hasCompleted ? "" : "\u2588")
    // (block character)
  ];
}

// npm/esm/src/console/multiSelect.js
function multiSelect(opts) {
  return maybeMultiSelect(opts).then(resultOrExit);
}
function maybeMultiSelect(opts) {
  if (opts.options.length === 0) {
    throw new Error(`You must provide at least one option. (Prompt: '${opts.message}')`);
  }
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerMultiSelect(opts)
  }));
}
function innerMultiSelect(opts) {
  const drawState = {
    title: opts.message,
    activeIndex: 0,
    items: opts.options.map((option) => {
      if (typeof option === "string") {
        option = {
          text: option
        };
      }
      return {
        selected: option.selected ?? false,
        text: option.text
      };
    }),
    hasCompleted: false
  };
  return {
    render: () => render3(drawState),
    onKey: (key) => {
      switch (key) {
        case Keys.Up:
          if (drawState.activeIndex === 0) {
            drawState.activeIndex = drawState.items.length - 1;
          } else {
            drawState.activeIndex--;
          }
          break;
        case Keys.Down:
          drawState.activeIndex = (drawState.activeIndex + 1) % drawState.items.length;
          break;
        case Keys.Space: {
          const item = drawState.items[drawState.activeIndex];
          item.selected = !item.selected;
          break;
        }
        case Keys.Enter:
          drawState.hasCompleted = true;
          return drawState.items.map((item, index) => [item, index]).filter(([item]) => item.selected).map(([item, index]) => new SelectionItem(index, item.text));
      }
      return void 0;
    }
  };
}
function render3(state) {
  const items = [];
  items.push(bold(blue(state.title)));
  if (state.hasCompleted) {
    if (state.items.some((i) => i.selected)) {
      for (const item of state.items) {
        if (item.selected) {
          items.push({
            text: ` - ${item.text}`,
            indent: 3
          });
        }
      }
    } else {
      items.push(italic(" <None>"));
    }
  } else {
    for (const [i, item] of state.items.entries()) {
      const prefix = i === state.activeIndex ? "> " : "  ";
      items.push({
        text: `${prefix}[${item.selected ? "x" : " "}] ${item.text}`,
        indent: 6
      });
    }
  }
  return items;
}

// npm/esm/src/console/progress.js
var ProgressBar = class {
  #state;
  #pb;
  #withCount = 0;
  #onLog;
  #noClear;
  /** @internal */
  constructor(onLog, opts) {
    if (arguments.length !== 2) {
      throw new Error("Invalid usage. Create the progress bar via `$.progress`.");
    }
    this.#onLog = onLog;
    this.#state = {
      message: opts.message,
      prefix: opts.prefix,
      length: opts.length,
      currentPos: 0,
      tickCount: 0,
      hasCompleted: false,
      kind: "raw"
    };
    this.#pb = addProgressBar((size) => {
      this.#state.tickCount++;
      return renderProgressBar(this.#state, size);
    });
    this.#noClear = opts.noClear ?? false;
    this.#logIfNonInteractive();
  }
  /** Sets the prefix message/word, which will be displayed in green. */
  prefix(prefix) {
    this.#state.prefix = prefix;
    if (prefix != null && prefix.length > 0) {
      this.#logIfNonInteractive();
    }
    return this;
  }
  /** Sets the message the progress bar will display after the prefix in white. */
  message(message) {
    this.#state.message = message;
    if (message != null && message.length > 0) {
      this.#logIfNonInteractive();
    }
    return this;
  }
  /** Sets how to format the length values. */
  kind(kind) {
    this.#state.kind = kind;
    return this;
  }
  #logIfNonInteractive() {
    if (isOutputTty) {
      return;
    }
    let text = this.#state.prefix ?? "";
    if (text.length > 0) {
      text += " ";
    }
    text += this.#state.message ?? "";
    if (text.length > 0) {
      this.#onLog(text);
    }
  }
  /** Sets the current position of the progress bar. */
  position(position) {
    this.#state.currentPos = position;
    return this;
  }
  /** Increments the position of the progress bar. */
  increment(inc = 1) {
    this.#state.currentPos += inc;
    return this;
  }
  /** Sets the total length of the progress bar. */
  length(size) {
    this.#state.length = size;
    return this;
  }
  /** Whether the progress bar should output a summary when finished. */
  noClear(value = true) {
    this.#noClear = value;
    return this;
  }
  /** Forces a render to the console. */
  forceRender() {
    return staticText.refresh();
  }
  /** Finish showing the progress bar. */
  finish() {
    if (removeProgressBar(this.#pb)) {
      this.#state.hasCompleted = true;
      if (this.#noClear) {
        const size = maybeConsoleSize();
        const text = renderTextItems(renderProgressBar(this.#state, size), size);
        this.#onLog(text);
      }
    }
  }
  with(action) {
    this.#withCount++;
    let wasAsync = false;
    try {
      const result = action();
      if (result instanceof Promise) {
        wasAsync = true;
        return result.finally(() => {
          this.#decrementWith();
        });
      } else {
        return result;
      }
    } finally {
      if (!wasAsync) {
        this.#decrementWith();
      }
    }
  }
  #decrementWith() {
    this.#withCount--;
    if (this.#withCount === 0) {
      this.finish();
    }
  }
};
var tickStrings = ["\u280B", "\u2819", "\u2839", "\u2838", "\u283C", "\u2834", "\u2826", "\u2827", "\u2807", "\u280F"];
function renderProgressBar(state, size) {
  if (state.hasCompleted) {
    let text = "";
    if (state.prefix != null) {
      text += green(state.prefix);
    }
    if (state.message != null) {
      if (text.length > 0) {
        text += " ";
      }
      text += state.message;
    }
    return text.length > 0 ? [text] : [];
  } else if (state.length == null || state.length === 0) {
    let text = green(tickStrings[Math.abs(state.tickCount) % tickStrings.length]);
    if (state.prefix != null) {
      text += ` ${green(state.prefix)}`;
    }
    if (state.message != null) {
      text += ` ${state.message}`;
    }
    if (state.currentPos > 0) {
      const currentPosText = state.kind === "bytes" ? humanDownloadSize(state.currentPos) : state.currentPos.toString();
      text += ` (${currentPosText}/?)`;
    }
    return [text];
  } else {
    let firstLine = "";
    if (state.prefix != null) {
      firstLine += green(state.prefix);
    }
    if (state.message != null) {
      if (firstLine.length > 0) {
        firstLine += " ";
      }
      firstLine += state.message;
    }
    const percent = Math.min(state.currentPos / state.length, 1);
    const currentPosText = state.kind === "bytes" ? humanDownloadSize(state.currentPos, state.length) : state.currentPos.toString();
    const lengthText = state.kind === "bytes" ? humanDownloadSize(state.length) : state.length.toString();
    const maxWidth = size == null ? 75 : Math.max(10, Math.min(75, size.columns - 5));
    const sameLineTextWidth = 6 + lengthText.length * 2 + state.length.toString().length * 2;
    const totalBars = Math.max(1, maxWidth - sameLineTextWidth);
    const completedBars = Math.floor(totalBars * percent);
    let secondLine = "";
    secondLine += "[";
    if (completedBars != totalBars) {
      if (completedBars > 0) {
        secondLine += cyan("#".repeat(completedBars - 1) + ">");
      }
      secondLine += blue("-".repeat(totalBars - completedBars));
    } else {
      secondLine += cyan("#".repeat(completedBars));
    }
    secondLine += `] (${currentPosText}/${lengthText})`;
    const result = [];
    if (firstLine.length > 0) {
      result.push(firstLine);
    }
    result.push(secondLine);
    return result;
  }
}
var progressBars = [];
function addProgressBar(render6) {
  progressBars.push(render6);
  refresh2();
  return render6;
}
function removeProgressBar(pb) {
  const index = progressBars.indexOf(pb);
  if (index === -1) {
    return false;
  }
  progressBars.splice(index, 1);
  refresh2();
  return true;
}
function refresh2() {
  logger.setItems(LoggerRefreshItemKind.ProgressBars, progressBars);
}
var units = ["B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB", "ZiB", "YiB"];
function humanDownloadSize(byteCount, totalBytes) {
  const exponentBasis = totalBytes ?? byteCount;
  const exponent = Math.min(units.length - 1, Math.floor(Math.log(exponentBasis) / Math.log(1024)));
  const unit = units[exponent];
  const prettyBytes = (Math.floor(byteCount / Math.pow(1024, exponent) * 100) / 100).toFixed(exponent === 0 ? 0 : 2);
  return `${prettyBytes} ${unit}`;
}

// npm/esm/src/console/prompt.js
var defaultMask = { char: "*", lastVisible: false };
function prompt(optsOrMessage, options) {
  return maybePrompt(optsOrMessage, options).then(resultOrExit);
}
function maybePrompt(optsOrMessage, options) {
  const opts = typeof optsOrMessage === "string" ? {
    message: optsOrMessage,
    ...options
  } : optsOrMessage;
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerPrompt(opts)
  }));
}
function innerPrompt(opts) {
  let mask = opts.mask ?? false;
  if (mask && typeof mask === "boolean") {
    mask = defaultMask;
  }
  const drawState = {
    title: opts.message,
    inputText: opts.default ?? "",
    mask,
    hasCompleted: false
  };
  return {
    render: () => render4(drawState),
    onKey: (key) => {
      if (typeof key === "string") {
        drawState.inputText += key;
      } else {
        switch (key) {
          case Keys.Space:
            drawState.inputText += " ";
            break;
          case Keys.Backspace:
            drawState.inputText = drawState.inputText.slice(0, -1);
            break;
          case Keys.Enter:
            drawState.hasCompleted = true;
            return drawState.inputText;
        }
      }
      return void 0;
    }
  };
}
function render4(state) {
  let { inputText } = state;
  if (state.mask) {
    const char = state.mask.char ?? defaultMask.char;
    const lastVisible = state.mask.lastVisible ?? defaultMask.lastVisible;
    const shouldShowLast = lastVisible && !state.hasCompleted;
    const safeLengthMinusOne = Math.max(0, inputText.length - 1);
    const masked = char.repeat(shouldShowLast ? safeLengthMinusOne : inputText.length);
    const unmasked = shouldShowLast ? inputText.slice(safeLengthMinusOne) : "";
    inputText = `${masked}${unmasked}`;
  }
  return [
    bold(blue(state.title)) + " " + inputText + (state.hasCompleted ? "" : "\u2588")
    // (block character)
  ];
}

// npm/esm/src/console/select.js
function select(opts) {
  return maybeSelect(opts).then(resultOrExit);
}
function maybeSelect(opts) {
  if (opts.options.length < 1) {
    throw new Error(`You must provide at least one option. (Prompt: '${opts.message}')`);
  }
  return undefinedOnAbort(opts.signal, createSelection({
    message: opts.message,
    noClear: opts.noClear,
    signal: opts.signal,
    ...innerSelect(opts)
  }));
}
function innerSelect(opts) {
  const drawState = {
    title: opts.message,
    activeIndex: (opts.initialIndex ?? 0) % opts.options.length,
    items: opts.options,
    hasCompleted: false
  };
  return {
    render: () => render5(drawState),
    onKey: (key) => {
      switch (key) {
        case Keys.Up:
          if (drawState.activeIndex === 0) {
            drawState.activeIndex = drawState.items.length - 1;
          } else {
            drawState.activeIndex--;
          }
          break;
        case Keys.Down:
          drawState.activeIndex = (drawState.activeIndex + 1) % drawState.items.length;
          break;
        case Keys.Enter:
          drawState.hasCompleted = true;
          return new SelectionItem(drawState.activeIndex, drawState.items[drawState.activeIndex]);
      }
    }
  };
}
function render5(state) {
  const items = [];
  items.push(bold(blue(state.title)));
  if (state.hasCompleted) {
    items.push({
      text: ` - ${state.items[state.activeIndex]}`,
      indent: 3
    });
  } else {
    for (const [i, text] of state.items.entries()) {
      const prefix = i === state.activeIndex ? "> " : "  ";
      items.push({
        text: `${prefix}${text}`,
        indent: 4
      });
    }
  }
  return items;
}

// npm/esm/mod.js
import { inspect as nodeInspect } from "node:util";

// npm/esm/src/request.js
var _a2;
var withProgressBarFactorySymbol = Symbol();
var RequestBuilder = class {
  #state = void 0;
  #getClonedState() {
    const state = this.#state;
    if (state == null) {
      return this.#getDefaultState();
    }
    return {
      // be explicit here in order to force evaluation
      // of each property on a case by case basis
      noThrow: typeof state.noThrow === "boolean" ? state.noThrow : [...state.noThrow],
      url: state.url,
      body: state.body,
      cache: state.cache,
      headers: state.headers,
      integrity: state.integrity,
      keepalive: state.keepalive,
      method: state.method,
      mode: state.mode,
      redirect: state.redirect,
      referrer: state.referrer,
      referrerPolicy: state.referrerPolicy,
      progressBarFactory: state.progressBarFactory,
      progressOptions: state.progressOptions == null ? void 0 : {
        ...state.progressOptions
      },
      onProgress: [...state.onProgress],
      timeout: state.timeout,
      signal: state.signal,
      beforeRequest: state.beforeRequest
    };
  }
  #getDefaultState() {
    return {
      noThrow: false,
      url: void 0,
      body: void 0,
      cache: void 0,
      headers: {},
      integrity: void 0,
      keepalive: void 0,
      method: void 0,
      mode: void 0,
      redirect: void 0,
      referrer: void 0,
      referrerPolicy: void 0,
      progressBarFactory: void 0,
      progressOptions: void 0,
      onProgress: [],
      timeout: void 0,
      signal: void 0,
      beforeRequest: void 0
    };
  }
  #newWithState(action) {
    const builder = new _a2();
    const state = this.#getClonedState();
    action(state);
    builder.#state = state;
    return builder;
  }
  [symbols.readable]() {
    const self = this;
    let streamReader;
    let response;
    let wasCancelled = false;
    let cancelledReason;
    return new ReadableStream2({
      async start() {
        response = await self.fetch();
        const readable = response.readable;
        if (wasCancelled) {
          await readable.cancel(cancelledReason);
        } else {
          streamReader = readable.getReader();
        }
      },
      async pull(controller) {
        try {
          const { done, value } = await streamReader.read();
          if (done || value == null) {
            if (response?.signal?.aborted) {
              controller.error(response?.signal?.reason);
            } else {
              controller.close();
            }
          } else {
            controller.enqueue(value);
          }
        } catch (err) {
          try {
            streamReader?.releaseLock();
          } catch {
          }
          try {
            await response?.cancelBody();
          } catch {
          }
          throw err;
        }
      },
      async cancel(reason) {
        wasCancelled = true;
        cancelledReason = reason;
        try {
          if (streamReader != null) {
            await streamReader.cancel(reason);
          }
        } catch {
        }
        try {
          await response?.cancelBody();
        } catch {
        }
      }
    });
  }
  then(onfulfilled, onrejected) {
    return this.fetch().then(onfulfilled).catch(onrejected);
  }
  /** Fetches and gets the response. */
  fetch() {
    return this.#resolveStateForRequest().then(makeRequest).catch((err) => {
      if (err instanceof TimeoutError) {
        Error.captureStackTrace(err, TimeoutError);
      }
      return Promise.reject(err);
    });
  }
  async #resolveStateForRequest() {
    const callbacks = this.#state?.beforeRequest;
    if (callbacks == null || callbacks.length === 0) {
      return this.#getClonedState();
    }
    let builder = this.#newWithState((state) => {
      state.beforeRequest = void 0;
    });
    for (const cb of callbacks) {
      const proxy = wrapNonThenable(builder);
      const result = await cb(proxy);
      builder = unwrapBuilder(result) ?? builder;
    }
    return builder.#getClonedState();
  }
  /** Specifies the URL to send the request to. */
  url(value) {
    return this.#newWithState((state) => {
      state.url = value;
    });
  }
  header(nameOrItems, value) {
    return this.#newWithState((state) => {
      if (typeof nameOrItems === "string") {
        setHeader(state, nameOrItems, value);
      } else {
        for (const [name, value2] of Object.entries(nameOrItems)) {
          setHeader(state, name, value2);
        }
      }
    });
    function setHeader(state, name, value2) {
      name = name.toUpperCase();
      state.headers[name] = value2;
    }
  }
  noThrow(value, ...additional) {
    return this.#newWithState((state) => {
      if (typeof value === "boolean" || value == null) {
        state.noThrow = value ?? true;
      } else {
        state.noThrow = [value, ...additional];
      }
    });
  }
  body(value) {
    return this.#newWithState((state) => {
      state.body = value;
    });
  }
  cache(value) {
    return this.#newWithState((state) => {
      state.cache = value;
    });
  }
  integrity(value) {
    return this.#newWithState((state) => {
      state.integrity = value;
    });
  }
  keepalive(value) {
    return this.#newWithState((state) => {
      state.keepalive = value;
    });
  }
  method(value) {
    return this.#newWithState((state) => {
      state.method = value;
    });
  }
  mode(value) {
    return this.#newWithState((state) => {
      state.mode = value;
    });
  }
  /** @internal */
  [withProgressBarFactorySymbol](factory) {
    return this.#newWithState((state) => {
      state.progressBarFactory = factory;
    });
  }
  redirect(value) {
    return this.#newWithState((state) => {
      state.redirect = value;
    });
  }
  referrer(value) {
    return this.#newWithState((state) => {
      state.referrer = value;
    });
  }
  referrerPolicy(value) {
    return this.#newWithState((state) => {
      state.referrerPolicy = value;
    });
  }
  showProgress(value) {
    return this.#newWithState((state) => {
      if (value === true || value == null) {
        state.progressOptions = { noClear: false };
      } else if (value === false) {
        state.progressOptions = void 0;
      } else {
        state.progressOptions = {
          noClear: value.noClear ?? false
        };
      }
    });
  }
  /** Adds a callback that is invoked as bytes are received from the response body.
   *
   * The callback fires once per chunk read from the network with the cumulative
   * number of bytes received and the total expected size (from the `content-length`
   * header, or `undefined` if the server didn't provide one). Multiple callbacks
   * may be registered by calling this method repeatedly; each is invoked in the
   * order it was added.
   */
  onProgress(callback) {
    return this.#newWithState((state) => {
      state.onProgress.push(callback);
    });
  }
  /** Timeout the request after the specified delay throwing a `TimeoutError`. */
  timeout(delay) {
    return this.#newWithState((state) => {
      state.timeout = delay == null ? void 0 : delayToMs(delay);
    });
  }
  /** Sets an abort signal for the request. When the signal is
   * aborted, the request will be cancelled.
   */
  signal(signal) {
    return this.#newWithState((state) => {
      state.signal = signal;
    });
  }
  /** Registers a callback that runs just before each request is sent.
   *
   * The callback receives the current builder and may return a (possibly
   * modified) builder to use for the request. Useful for asynchronously
   * resolving values such as auth tokens.
   *
   * ```ts
   * $.request(url).beforeRequest(async (builder) => {
   *   return builder.header("Authorization", `Bearer ${await getAccessToken()}`);
   * });
   * ```
   *
   * Multiple `.beforeRequest(...)` calls compose: each registered callback runs
   * in the order it was added, with the builder produced by the previous one.
   *
   * The builder passed to the callback is in a special "passthrough" mode so
   * its `.then(...)` resolves with the builder itself (instead of fetching) —
   * this is what makes `return builder.header(...)` from an `async` function
   * safe. If you construct a fresh `new RequestBuilder()` inside the callback,
   * return it as `{ requestBuilder: ... }` to avoid accidental fetching.
   */
  beforeRequest(callback) {
    return this.#newWithState((state) => {
      state.beforeRequest = state.beforeRequest == null ? [callback] : [...state.beforeRequest, callback];
    });
  }
  /** Fetches and gets the response as an array buffer. */
  async arrayBuffer() {
    const response = await this.fetch();
    return response.arrayBuffer();
  }
  /** Fetches and gets the response as a blob. */
  async blob() {
    const response = await this.fetch();
    return response.blob();
  }
  /** Fetches and gets the response as form data. */
  async formData() {
    const response = await this.fetch();
    return response.formData();
  }
  /** Fetches and gets the response as JSON additionally setting
   * a JSON accept header if not set. */
  async json() {
    let builder = this;
    const acceptHeaderName = "ACCEPT";
    if (builder.#state == null || !Object.hasOwn(builder.#state.headers, acceptHeaderName)) {
      builder = builder.header(acceptHeaderName, "application/json");
    }
    const response = await builder.fetch();
    return response.json();
  }
  /** Fetches and gets the response as text. */
  async text() {
    const response = await this.fetch();
    return response.text();
  }
  /** Pipes the response body to the provided writable stream. */
  async pipeTo(dest, options) {
    const response = await this.fetch();
    return await response.pipeTo(dest, options);
  }
  async pipeToPath(filePathOrOptions, maybeOptions) {
    const { filePath, options } = resolvePipeToPathParams(filePathOrOptions, maybeOptions, this.#state?.url);
    const response = await this.fetch();
    return await response.pipeToPath(filePath, options);
  }
  /** Pipes the response body through the provided transform. */
  async pipeThrough(transform) {
    const response = await this.fetch();
    return response.pipeThrough(transform);
  }
};
_a2 = RequestBuilder;
var RequestResponse = class {
  #response;
  #downloadResponse;
  #originalUrl;
  #abortController;
  /** @internal */
  constructor(opts) {
    this.#originalUrl = opts.originalUrl;
    this.#response = opts.response;
    this.#abortController = opts.abortController;
    if (opts.response.body == null) {
      opts.abortController.clearTimeout();
    }
    if (opts.progressBar != null || opts.onProgress.length > 0) {
      const pb = opts.progressBar;
      const onProgress = opts.onProgress;
      const total = opts.contentLength;
      this.#downloadResponse = new Response(new ReadableStream2({
        async start(controller) {
          const reader = opts.response.body?.getReader();
          if (reader == null) {
            return;
          }
          let loaded = 0;
          let lockReleased = false;
          try {
            while (true) {
              const { done, value } = await reader.read();
              if (done || value == null) {
                break;
              }
              loaded += value.byteLength;
              pb?.increment(value.byteLength);
              if (onProgress.length > 0) {
                const event = { loaded, total };
                for (const callback of onProgress) {
                  callback(event);
                }
              }
              controller.enqueue(value);
            }
            const signal = opts.abortController.controller.signal;
            if (signal.aborted) {
              controller.error(signal.reason);
            } else {
              controller.close();
            }
          } catch (err) {
            try {
              reader.releaseLock();
              lockReleased = true;
            } catch {
            }
            try {
              await opts.response.body?.cancel(err);
            } catch {
            }
            throw err;
          } finally {
            if (!lockReleased) {
              try {
                reader.releaseLock();
              } catch {
              }
            }
            pb?.finish();
          }
        },
        async cancel(reason) {
          try {
            await opts.response.body?.cancel(reason);
          } catch {
          }
        }
      }));
    } else {
      this.#downloadResponse = opts.response;
    }
  }
  /** Raw response. */
  get response() {
    return this.#response;
  }
  /** Response headers. */
  get headers() {
    return this.#response.headers;
  }
  /** If the response had a 2xx code. */
  get ok() {
    return this.#response.ok;
  }
  /** If the response is the result of a redirect. */
  get redirected() {
    return this.#response.redirected;
  }
  /** The underlying `AbortSignal` used to abort the request body
   * when a timeout is reached or when the `.abort()` method is called. */
  get signal() {
    return this.#abortController.controller.signal;
  }
  /** Status code of the response. */
  get status() {
    return this.#response.status;
  }
  /** Status text of the response. */
  get statusText() {
    return this.#response.statusText;
  }
  /** URL of the response. */
  get url() {
    return this.#response.url;
  }
  /** Aborts  */
  abort(reason) {
    this.#abortController?.controller.abort(reason);
  }
  /**
   * Throws if the response doesn't have a 2xx code.
   *
   * This might be useful if the request was built with `.noThrow()`, but
   * otherwise this is called automatically for any non-2xx response codes.
   *
   * Note: this does not consume the body. If you don't intend to read the
   * body, call `cancelBody()` first to release the underlying resources.
   */
  throwIfNotOk() {
    if (!this.ok) {
      throw new Error(`Error making request to ${this.#originalUrl}: ${this.statusText}`);
    }
  }
  /**
   * Cancels the response body, releasing the underlying resources.
   *
   * Useful in conjunction with `.noThrow()` and `throwIfNotOk()` when you
   * don't intend to read the body.
   */
  cancelBody() {
    return this.#withReturnHandling(async () => {
      await this.#response.body?.cancel();
    });
  }
  /**
   * Respose body as an array buffer.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  arrayBuffer() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return this.#downloadResponse.arrayBuffer();
    });
  }
  /**
   * Response body as a blog.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  blob() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.blob();
    });
  }
  /**
   * Response body as a form data.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  formData() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.formData();
    });
  }
  /**
   * Respose body as JSON.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  json() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.json();
    });
  }
  /**
   * Respose body as text.
   *
   * Note: Returns `undefined` when `.noThrow(404)` and status code is 404.
   */
  text() {
    return this.#withReturnHandling(async () => {
      if (this.#response.status === 404) {
        await this.#response.body?.cancel();
        return void 0;
      }
      return await this.#downloadResponse.text();
    });
  }
  /** Pipes the response body to the provided writable stream. */
  pipeTo(dest, options) {
    return this.#withReturnHandling(() => this.readable.pipeTo(dest, options));
  }
  async pipeToPath(filePathOrOptions, maybeOptions) {
    const { filePath, options } = resolvePipeToPathParams(filePathOrOptions, maybeOptions, this.#originalUrl);
    const body = this.readable;
    try {
      const file = await filePath.open({
        write: true,
        create: true,
        truncate: true,
        ...options ?? {}
      });
      try {
        await body.pipeTo(file.writable, {
          preventClose: true
        });
        await file.writable.close();
      } finally {
        try {
          file.close();
        } catch {
        }
        this.#abortController?.clearTimeout();
      }
    } catch (err) {
      await this.#response.body?.cancel();
      throw err;
    }
    return filePath;
  }
  /** Pipes the response body through the provided transform. */
  pipeThrough(transform) {
    return this.readable.pipeThrough(transform);
  }
  get readable() {
    const body = this.#downloadResponse.body;
    if (body == null) {
      throw new Error("Response had no body.");
    }
    return body;
  }
  async #withReturnHandling(action) {
    try {
      return await action();
    } catch (err) {
      if (err instanceof TimeoutError) {
        Error.captureStackTrace(err);
      }
      try {
        await this.#response.body?.cancel(err);
      } catch {
      }
      throw err;
    } finally {
      this.#abortController.clearTimeout();
    }
  }
};
async function makeRequest(state) {
  if (state.url == null) {
    throw new Error("You must specify a URL before fetching.");
  }
  const abortController = getAbortController();
  let response;
  try {
    response = await fetch(state.url, {
      body: state.body,
      // @ts-ignore not supported in Node.js yet?
      cache: state.cache,
      headers: filterEmptyRecordValues(state.headers),
      integrity: state.integrity,
      keepalive: state.keepalive,
      method: state.method,
      mode: state.mode,
      redirect: state.redirect,
      referrer: state.referrer,
      referrerPolicy: state.referrerPolicy,
      signal: abortController.controller.signal
    });
  } catch (err) {
    abortController.clearTimeout();
    throw err;
  }
  const contentLength = getContentLength();
  const result = new RequestResponse({
    response,
    originalUrl: state.url.toString(),
    progressBar: getProgressBar(contentLength),
    onProgress: state.onProgress,
    contentLength,
    abortController
  });
  const shouldThrowOnError = !response.ok && (!state.noThrow || state.noThrow instanceof Array && !state.noThrow.includes(response.status));
  if (shouldThrowOnError) {
    try {
      await result.cancelBody();
    } catch {
    }
    result.throwIfNotOk();
  }
  return result;
  function getProgressBar(contentLength2) {
    if (state.progressOptions == null || state.progressBarFactory == null) {
      return void 0;
    }
    return state.progressBarFactory(`Download ${state.url}`).noClear(state.progressOptions.noClear).kind("bytes").length(contentLength2);
  }
  function getContentLength() {
    const contentLength2 = response.headers.get("content-length");
    if (contentLength2 == null) {
      return void 0;
    }
    const length = parseInt(contentLength2, 10);
    return isNaN(length) ? void 0 : length;
  }
  function getAbortController() {
    const baseController = getTimeoutAbortController() ?? {
      controller: new AbortController(),
      clearTimeout() {
      }
    };
    if (state.signal == null) {
      return baseController;
    }
    if (state.signal.aborted) {
      baseController.controller.abort(state.signal.reason);
      return baseController;
    }
    const onAbort = () => {
      baseController.controller.abort(state.signal.reason);
    };
    state.signal.addEventListener("abort", onAbort, { once: true });
    const originalClearTimeout = baseController.clearTimeout;
    return {
      controller: baseController.controller,
      clearTimeout() {
        originalClearTimeout();
        state.signal?.removeEventListener("abort", onAbort);
      }
    };
  }
  function getTimeoutAbortController() {
    if (state.timeout == null) {
      return void 0;
    }
    const timeout = state.timeout;
    const controller = new AbortController();
    const timeoutId = setTimeout(() => controller.abort(new TimeoutError(`Request timed out after ${formatMillis(timeout)}.`)), timeout);
    return {
      controller,
      clearTimeout() {
        clearTimeout(timeoutId);
      }
    };
  }
}
var proxyToBuilder = /* @__PURE__ */ new WeakMap();
function wrapNonThenable(builder) {
  const proxy = new Proxy(builder, {
    get(target, prop, _receiver) {
      if (prop === "then")
        return void 0;
      const value = Reflect.get(target, prop, target);
      if (typeof value === "function") {
        return (...args) => {
          const result = value.apply(target, args);
          if (result instanceof RequestBuilder) {
            return wrapNonThenable(result);
          }
          return result;
        };
      }
      return value;
    }
  });
  proxyToBuilder.set(proxy, builder);
  return proxy;
}
function unwrapBuilder(result) {
  if (!(result instanceof RequestBuilder))
    return void 0;
  return proxyToBuilder.get(result) ?? result;
}
function resolvePipeToPathParams(pathOrOptions, maybeOptions, originalUrl) {
  let filePath;
  let options;
  if (typeof pathOrOptions === "string" || pathOrOptions instanceof URL) {
    filePath = new Path(pathOrOptions).resolve();
    options = maybeOptions;
  } else if (pathOrOptions instanceof Path) {
    filePath = pathOrOptions.resolve();
    options = maybeOptions;
  } else if (typeof pathOrOptions === "object") {
    options = pathOrOptions;
  } else if (pathOrOptions === void 0) {
    options = maybeOptions;
  }
  if (filePath === void 0) {
    filePath = new Path(getFileNameFromUrlOrThrow(originalUrl));
  } else if (filePath.isDirSync()) {
    filePath = filePath.join(getFileNameFromUrlOrThrow(originalUrl));
  }
  filePath = filePath.resolve();
  return {
    filePath,
    options
  };
  function getFileNameFromUrlOrThrow(url) {
    const fileName = url == null ? void 0 : getFileNameFromUrl(url);
    if (fileName == null) {
      throw new Error("Could not derive the path from the request URL. Please explicitly provide a path.");
    }
    return fileName;
  }
}

// npm/esm/src/vendor/outdent.js
function extend(target, source) {
  for (const prop in source) {
    if (Object.hasOwn(source, prop)) {
      target[prop] = source[prop];
    }
  }
  return target;
}
var reLeadingNewline = /^[ \t]*(?:\r\n|\r|\n)/;
var reTrailingNewline = /(?:\r\n|\r|\n)[ \t]*$/;
var reStartsWithNewlineOrIsEmpty = /^(?:[\r\n]|$)/;
var reDetectIndentation = /(?:\r\n|\r|\n)([ \t]*)(?:[^ \t\r\n]|$)/;
var reOnlyWhitespaceWithAtLeastOneNewline = /^[ \t]*[\r\n][ \t\r\n]*$/;
function _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options) {
  let indentationLevel = 0;
  const match = strings[0].match(reDetectIndentation);
  if (match) {
    indentationLevel = match[1].length;
  }
  const reSource = `(\\r\\n|\\r|\\n).{0,${indentationLevel}}`;
  const reMatchIndent = new RegExp(reSource, "g");
  if (firstInterpolatedValueSetsIndentationLevel) {
    strings = strings.slice(1);
  }
  const { newline, trimLeadingNewline, trimTrailingNewline } = options;
  const normalizeNewlines = typeof newline === "string";
  const l = strings.length;
  const outdentedStrings = strings.map((v, i) => {
    v = v.replace(reMatchIndent, "$1");
    if (i === 0 && trimLeadingNewline) {
      v = v.replace(reLeadingNewline, "");
    }
    if (i === l - 1 && trimTrailingNewline) {
      v = v.replace(reTrailingNewline, "");
    }
    if (normalizeNewlines) {
      v = v.replace(/\r\n|\n|\r/g, (_) => newline);
    }
    return v;
  });
  return outdentedStrings;
}
function concatStringsAndValues(strings, values) {
  let ret = "";
  for (let i = 0, l = strings.length; i < l; i++) {
    ret += strings[i];
    if (i < l - 1) {
      ret += values[i];
    }
  }
  return ret;
}
function isTemplateStringsArray(v) {
  return Object.hasOwn(v, "raw") && Object.hasOwn(v, "length");
}
function createInstance(options) {
  const arrayAutoIndentCache = /* @__PURE__ */ new WeakMap();
  const arrayFirstInterpSetsIndentCache = /* @__PURE__ */ new WeakMap();
  function outdent(stringsOrOptions, ...values) {
    if (isTemplateStringsArray(stringsOrOptions)) {
      const strings = stringsOrOptions;
      const firstInterpolatedValueSetsIndentationLevel = (values[0] === outdent || values[0] === defaultOutdent) && reOnlyWhitespaceWithAtLeastOneNewline.test(strings[0]) && reStartsWithNewlineOrIsEmpty.test(strings[1]);
      const cache = firstInterpolatedValueSetsIndentationLevel ? arrayFirstInterpSetsIndentCache : arrayAutoIndentCache;
      let renderedArray = cache.get(strings);
      if (!renderedArray) {
        renderedArray = _outdentArray(strings, firstInterpolatedValueSetsIndentationLevel, options);
        cache.set(strings, renderedArray);
      }
      if (values.length === 0) {
        return renderedArray[0];
      }
      const rendered = concatStringsAndValues(renderedArray, firstInterpolatedValueSetsIndentationLevel ? values.slice(1) : values);
      return rendered;
    } else {
      return createInstance(extend(extend({}, options), stringsOrOptions || {}));
    }
  }
  const fullOutdent = extend(outdent, {
    string(str) {
      return _outdentArray([str], false, options)[0];
    }
  });
  return fullOutdent;
}
var defaultOutdent = createInstance({
  trimLeadingNewline: true,
  trimTrailingNewline: true
});

// npm/esm/mod.js
var PathRef = Path;
function sleep(delay) {
  const ms = delayToMs(delay);
  return new Promise((resolve8) => setTimeout(resolve8, ms));
}
async function withRetries($local, errorLogger, opts) {
  const delayIterator = delayToIterator(opts.delay);
  for (let i = 0; i < opts.count; i++) {
    if (i > 0) {
      const nextDelay = delayIterator.next();
      if (!opts.quiet) {
        $local.logWarn(`Failed. Trying again in ${formatMillis(nextDelay)}...`);
      }
      await sleep(nextDelay);
      if (!opts.quiet) {
        $local.logStep(`Retrying attempt ${i + 1}/${opts.count}...`);
      }
    }
    try {
      return await opts.action();
    } catch (err) {
      errorLogger(err);
    }
  }
  throw new Error(`Failed after ${opts.count} attempts.`);
}
function buildInitial$State(opts) {
  return {
    commandBuilder: new TreeBox(resolveCommandBuilder2()),
    requestBuilder: resolveRequestBuilder(),
    // deno-lint-ignore no-console
    infoLogger: new LoggerTreeBox(console.error),
    // deno-lint-ignore no-console
    warnLogger: new LoggerTreeBox(console.error),
    // deno-lint-ignore no-console
    errorLogger: new LoggerTreeBox(console.error),
    indentLevel: new Box(0),
    extras: opts.extras
  };
  function resolveCommandBuilder2() {
    if (opts.commandBuilder instanceof CommandBuilder) {
      return opts.commandBuilder;
    } else if (opts.commandBuilder instanceof Function) {
      return opts.commandBuilder(new CommandBuilder());
    } else {
      const _assertUndefined = opts.commandBuilder;
      return new CommandBuilder();
    }
  }
  function resolveRequestBuilder() {
    if (opts.requestBuilder instanceof RequestBuilder) {
      return opts.requestBuilder;
    } else if (opts.requestBuilder instanceof Function) {
      return opts.requestBuilder(new RequestBuilder());
    } else {
      const _assertUndefined = opts.requestBuilder;
      return new RequestBuilder();
    }
  }
}
var helperObject = {
  path: createPath,
  escapeArg,
  stripAnsi(text) {
    return stripAnsiCodes(text);
  },
  dedent: defaultOutdent,
  sleep,
  which(commandName) {
    return which(commandName, whichRealEnv);
  },
  whichSync(commandName) {
    return whichSync(commandName, whichRealEnv);
  }
};
function build$FromState2(state) {
  const logDepthObj = {
    get logDepth() {
      return state.indentLevel.value;
    },
    set logDepth(value) {
      if (value < 0 || value % 1 !== 0) {
        throw new Error("Expected a positive integer.");
      }
      state.indentLevel.value = value;
    }
  };
  const result = Object.assign((strings, ...exprs) => {
    const textState = template(strings, exprs);
    return state.commandBuilder.getValue()[setCommandTextStateSymbol](textState);
  }, helperObject, logDepthObj, {
    build$(opts = {}) {
      return build$FromState2({
        commandBuilder: resolveCommandBuilder2(),
        requestBuilder: resolveRequestBuilder(),
        errorLogger: state.errorLogger.createChild(),
        infoLogger: state.infoLogger.createChild(),
        warnLogger: state.warnLogger.createChild(),
        indentLevel: state.indentLevel,
        extras: {
          ...state.extras,
          ...opts.extras
        }
      });
      function resolveCommandBuilder2() {
        if (opts.commandBuilder instanceof CommandBuilder) {
          return new TreeBox(opts.commandBuilder);
        } else if (opts.commandBuilder instanceof Function) {
          return new TreeBox(opts.commandBuilder(state.commandBuilder.getValue()));
        } else {
          const _assertUndefined = opts.commandBuilder;
          return state.commandBuilder.createChild();
        }
      }
      function resolveRequestBuilder() {
        if (opts.requestBuilder instanceof RequestBuilder) {
          return opts.requestBuilder;
        } else if (opts.requestBuilder instanceof Function) {
          return opts.requestBuilder(state.requestBuilder);
        } else {
          const _assertUndefined = opts.requestBuilder;
          return state.requestBuilder;
        }
      }
    },
    log(...data) {
      state.infoLogger.getValue()(getLogText(data));
    },
    logLight(...data) {
      state.infoLogger.getValue()(gray(getLogText(data)));
    },
    logStep(firstArg, ...data) {
      logStep(firstArg, data, (t) => bold(green(t)), state.infoLogger.getValue());
    },
    logError(firstArg, ...data) {
      logStep(firstArg, data, (t) => bold(red(t)), state.errorLogger.getValue());
    },
    logWarn(firstArg, ...data) {
      logStep(firstArg, data, (t) => bold(yellow(t)), state.warnLogger.getValue());
    },
    logGroup(labelOrAction, maybeAction) {
      const label = typeof labelOrAction === "string" ? labelOrAction : void 0;
      if (label) {
        state.infoLogger.getValue()(getLogText([label]));
      }
      state.indentLevel.value++;
      const action = label != null ? maybeAction : labelOrAction;
      if (action != null) {
        let wasPromise = false;
        try {
          const result2 = action();
          if (result2 instanceof Promise) {
            wasPromise = true;
            return result2.finally(() => {
              if (state.indentLevel.value > 0) {
                state.indentLevel.value--;
              }
            });
          } else {
            return result2;
          }
        } finally {
          if (!wasPromise) {
            if (state.indentLevel.value > 0) {
              state.indentLevel.value--;
            }
          }
        }
      }
    },
    logGroupEnd() {
      if (state.indentLevel.value > 0) {
        state.indentLevel.value--;
      }
    },
    commandExists(commandName) {
      if (state.commandBuilder.getValue()[getRegisteredCommandNamesSymbol]().includes(commandName)) {
        return Promise.resolve(true);
      }
      return helperObject.which(commandName).then((c) => c != null);
    },
    commandExistsSync(commandName) {
      if (state.commandBuilder.getValue()[getRegisteredCommandNamesSymbol]().includes(commandName)) {
        return true;
      }
      return helperObject.whichSync(commandName) != null;
    },
    alert,
    maybeConfirm,
    confirm,
    maybeSelect,
    select,
    maybeMultiSelect,
    multiSelect,
    maybePrompt,
    prompt,
    progress(messageOrText, options) {
      const opts = typeof messageOrText === "string" ? (() => {
        const words = messageOrText.split(" ");
        return {
          prefix: words[0],
          message: words.length > 1 ? words.slice(1).join(" ") : void 0,
          ...options
        };
      })() : messageOrText;
      return new ProgressBar((...data) => {
        state.infoLogger.getValue()(...data);
      }, opts);
    },
    setInfoLogger(logger2) {
      state.infoLogger.setValue(logger2);
    },
    setWarnLogger(logger2) {
      state.warnLogger.setValue(logger2);
    },
    setErrorLogger(logger2) {
      state.errorLogger.setValue(logger2);
      const commandBuilder = state.commandBuilder.getValue();
      commandBuilder.setPrintCommandLogger((cmd) => logger2(white(">"), blue(cmd)));
      state.commandBuilder.setValue(commandBuilder);
    },
    setPrintCommand(value) {
      const commandBuilder = state.commandBuilder.getValue().printCommand(value);
      state.commandBuilder.setValue(commandBuilder);
    },
    setTailDisplay(value) {
      const builder = state.commandBuilder.getValue();
      const commandBuilder = typeof value === "boolean" ? builder.tailDisplay(value) : builder.tailDisplay(value);
      state.commandBuilder.setValue(commandBuilder);
    },
    setErrorTail(value) {
      const builder = state.commandBuilder.getValue();
      const commandBuilder = typeof value === "boolean" ? builder.errorTail(value) : builder.errorTail(value);
      state.commandBuilder.setValue(commandBuilder);
    },
    symbols,
    request(url) {
      return state.requestBuilder.url(url);
    },
    raw(strings, ...exprs) {
      const textState = templateRaw(strings, exprs);
      return state.commandBuilder.getValue()[setCommandTextStateSymbol](textState);
    },
    rawArg,
    withRetries(opts) {
      return withRetries(result, state.errorLogger.getValue(), opts);
    },
    all(values, transform) {
      const items = Array.from(values);
      const count = Math.max(1, items.length);
      const maxLines = ({ size }) => Math.max(3, Math.floor((size?.rows ?? 24) * 0.9 / count));
      return Promise.all(items.map((value) => {
        if (value instanceof CommandBuilder) {
          const configured = value.tailDisplay({ maxLines });
          return transform ? transform(configured) : configured;
        }
        return value;
      }));
    }
  }, state.extras);
  const keyName = "logDepth";
  Object.defineProperty(result, keyName, Object.getOwnPropertyDescriptor(logDepthObj, keyName));
  state.requestBuilder = state.requestBuilder[withProgressBarFactorySymbol]((message) => result.progress(message));
  return result;
  function getLogText(data) {
    const combinedText = data.map((d) => {
      const typeofD = typeof d;
      if (typeofD !== "object" && typeofD !== "undefined") {
        return d;
      } else {
        return nodeInspect(d, { colors: true });
      }
    }).join(" ");
    if (state.indentLevel.value === 0) {
      return combinedText;
    } else {
      const indentText = "  ".repeat(state.indentLevel.value);
      return combinedText.split(/\n/).map((l) => `${indentText}${l}`).join("\n");
    }
  }
  function logStep(firstArg, data, colourize, logger2) {
    if (data.length === 0) {
      let i = 0;
      while (i < firstArg.length && firstArg[i] === " ") {
        i++;
      }
      while (i < firstArg.length && firstArg[i] !== " ") {
        i++;
      }
      firstArg = colourize(firstArg.substring(0, i)) + firstArg.substring(i);
    } else {
      firstArg = colourize(firstArg);
    }
    logger2(getLogText([firstArg, ...data]));
  }
}
function build$2(options = {}) {
  return build$FromState2(buildInitial$State({
    isGlobal: false,
    ...options
  }));
}
var $2 = build$FromState2(buildInitial$State({
  isGlobal: true
}));
var mod_default = $2;
function createPath(path6) {
  if (path6 instanceof Path) {
    return path6;
  } else {
    return new Path(path6);
  }
}
export {
  $2 as $,
  CommandBuilder,
  CommandChild,
  CommandResult,
  FsFileWrapper,
  KillController,
  KillSignal,
  Path,
  PathRef,
  RawArg,
  RequestBuilder,
  RequestResponse,
  SelectionItem,
  TimeoutError,
  build$2 as build$,
  createExecutableCommand,
  mod_default as default
};