{
  "version": 3,
  "sources": ["../src/headers.ts", "../src/lib/param-values.ts", "../src/lib/utils.ts", "../src/lib/accept.ts", "../src/lib/accept-encoding.ts", "../src/lib/accept-language.ts", "../src/lib/cache-control.ts", "../src/lib/content-disposition.ts", "../src/lib/content-type.ts", "../src/lib/cookie.ts", "../src/lib/if-none-match.ts", "../src/lib/set-cookie.ts", "../src/lib/header-names.ts", "../src/lib/super-headers.ts"],
  "sourcesContent": ["export { type AcceptInit, Accept } from './lib/accept.ts';\nexport { type AcceptEncodingInit, AcceptEncoding } from './lib/accept-encoding.ts';\nexport { type AcceptLanguageInit, AcceptLanguage } from './lib/accept-language.ts';\nexport { type CacheControlInit, CacheControl } from './lib/cache-control.ts';\nexport { type ContentDispositionInit, ContentDisposition } from './lib/content-disposition.ts';\nexport { type ContentTypeInit, ContentType } from './lib/content-type.ts';\nexport { type CookieInit, Cookie } from './lib/cookie.ts';\nexport { type IfNoneMatchInit, IfNoneMatch } from './lib/if-none-match.ts';\nexport { type SetCookieInit, SetCookie } from './lib/set-cookie.ts';\n\nexport {\n  type SuperHeadersInit,\n  SuperHeaders,\n  SuperHeaders as default,\n} from './lib/super-headers.ts';\n", "export function parseParams(\n  input: string,\n  delimiter: ';' | ',' = ';',\n): [string, string | undefined][] {\n  // This parser splits on the delimiter and unquotes any quoted values\n  // like `filename=\"the\\\\ filename.txt\"`.\n  let parser =\n    delimiter === ';'\n      ? /(?:^|;)\\s*([^=;\\s]+)(\\s*=\\s*(?:\"((?:[^\"\\\\]|\\\\.)*)\"|((?:[^;]|\\\\\\;)+))?)?/g\n      : /(?:^|,)\\s*([^=,\\s]+)(\\s*=\\s*(?:\"((?:[^\"\\\\]|\\\\.)*)\"|((?:[^,]|\\\\\\,)+))?)?/g;\n\n  let params: [string, string | undefined][] = [];\n\n  let match;\n  while ((match = parser.exec(input)) !== null) {\n    let key = match[1].trim();\n\n    let value: string | undefined;\n    if (match[2]) {\n      value = (match[3] || match[4] || '').replace(/\\\\(.)/g, '$1').trim();\n    }\n\n    params.push([key, value]);\n  }\n\n  return params;\n}\n\nexport function quote(value: string): string {\n  if (value.includes('\"') || value.includes(';') || value.includes(' ')) {\n    return `\"${value.replace(/\"/g, '\\\\\"')}\"`;\n  }\n  return value;\n}\n", "export function capitalize(str: string): string {\n  return str.charAt(0).toUpperCase() + str.slice(1).toLowerCase();\n}\n\nexport function isIterable<T>(value: any): value is Iterable<T> {\n  return value != null && typeof value[Symbol.iterator] === 'function';\n}\n\nexport function isValidDate(date: unknown): boolean {\n  return date instanceof Date && !isNaN(date.getTime());\n}\n\nexport function quoteEtag(tag: string): string {\n  return tag === '*' ? tag : /^(W\\/)?\".*\"$/.test(tag) ? tag : `\"${tag}\"`;\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type AcceptInit = Iterable<string | [string, number]> | Record<string, number>;\n\n/**\n * The value of a `Accept` HTTP header.\n *\n * [MDN `Accept` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.2)\n */\nexport class Accept implements HeaderValue, Iterable<[string, number]> {\n  #map: Map<string, number>;\n\n  constructor(init?: string | AcceptInit) {\n    this.#map = new Map();\n\n    if (init) {\n      if (typeof init === 'string') {\n        for (let piece of init.split(/\\s*,\\s*/)) {\n          let params = parseParams(piece);\n          if (params.length < 1) continue;\n\n          let mediaType = params[0][0];\n          let weight = 1;\n\n          for (let i = 1; i < params.length; i++) {\n            let [key, value] = params[i];\n            if (key === 'q') {\n              weight = Number(value);\n              break;\n            }\n          }\n\n          this.#map.set(mediaType.toLowerCase(), weight);\n        }\n      } else if (isIterable(init)) {\n        for (let mediaType of init) {\n          if (Array.isArray(mediaType)) {\n            this.#map.set(mediaType[0].toLowerCase(), mediaType[1]);\n          } else {\n            this.#map.set(mediaType.toLowerCase(), 1);\n          }\n        }\n      } else {\n        for (let mediaType of Object.getOwnPropertyNames(init)) {\n          this.#map.set(mediaType.toLowerCase(), init[mediaType]);\n        }\n      }\n\n      this.#sort();\n    }\n  }\n\n  #sort() {\n    this.#map = new Map([...this.#map].sort((a, b) => b[1] - a[1]));\n  }\n\n  /**\n   * An array of all media types in the header.\n   */\n  get mediaTypes(): string[] {\n    return Array.from(this.#map.keys());\n  }\n\n  /**\n   * An array of all weights (q values) in the header.\n   */\n  get weights(): number[] {\n    return Array.from(this.#map.values());\n  }\n\n  /**\n   * The number of media types in the `Accept` header.\n   */\n  get size(): number {\n    return this.#map.size;\n  }\n\n  /**\n   * Returns `true` if the header matches the given media type (i.e. it is \"acceptable\").\n   * @param mediaType The media type to check.\n   * @returns `true` if the media type is acceptable, `false` otherwise.\n   */\n  accepts(mediaType: string): boolean {\n    return this.getWeight(mediaType) > 0;\n  }\n\n  /**\n   * Gets the weight of a given media type. Also supports wildcards, so e.g. `text/*` will match `text/html`.\n   * @param mediaType The media type to get the weight of.\n   * @returns The weight of the media type.\n   */\n  getWeight(mediaType: string): number {\n    let [type, subtype] = mediaType.toLowerCase().split('/');\n\n    for (let [key, value] of this) {\n      let [t, s] = key.split('/');\n      if (\n        (t === type || t === '*' || type === '*') &&\n        (s === subtype || s === '*' || subtype === '*')\n      ) {\n        return value;\n      }\n    }\n\n    return 0;\n  }\n\n  /**\n   * Returns the most preferred media type from the given list of media types.\n   * @param mediaTypes The list of media types to choose from.\n   * @returns The most preferred media type or `null` if none match.\n   */\n  getPreferred(mediaTypes: string[]): string | null {\n    let sorted = mediaTypes\n      .map((mediaType) => [mediaType, this.getWeight(mediaType)] as const)\n      .sort((a, b) => b[1] - a[1]);\n\n    let first = sorted[0];\n\n    return first !== undefined && first[1] > 0 ? first[0] : null;\n  }\n\n  /**\n   * Returns the weight of a media type. If it is not in the header verbatim, this returns `null`.\n   * @param mediaType The media type to get the weight of.\n   * @returns The weight of the media type, or `null` if it is not in the header.\n   */\n  get(mediaType: string): number | null {\n    return this.#map.get(mediaType.toLowerCase()) ?? null;\n  }\n\n  /**\n   * Sets a media type with the given weight.\n   * @param mediaType The media type to set.\n   * @param weight The weight of the media type. Defaults to 1.\n   */\n  set(mediaType: string, weight = 1): void {\n    this.#map.set(mediaType.toLowerCase(), weight);\n    this.#sort();\n  }\n\n  /**\n   * Removes the given media type from the header.\n   * @param mediaType The media type to remove.\n   */\n  delete(mediaType: string): void {\n    this.#map.delete(mediaType.toLowerCase());\n  }\n\n  /**\n   * Checks if a media type is in the header.\n   * @param mediaType The media type to check.\n   * @returns `true` if the media type is in the header (verbatim), `false` otherwise.\n   */\n  has(mediaType: string): boolean {\n    return this.#map.has(mediaType.toLowerCase());\n  }\n\n  /**\n   * Removes all media types from the header.\n   */\n  clear(): void {\n    this.#map.clear();\n  }\n\n  entries(): IterableIterator<[string, number]> {\n    return this.#map.entries();\n  }\n\n  [Symbol.iterator](): IterableIterator<[string, number]> {\n    return this.entries();\n  }\n\n  forEach(\n    callback: (mediaType: string, weight: number, header: Accept) => void,\n    thisArg?: any,\n  ): void {\n    for (let [mediaType, weight] of this) {\n      callback.call(thisArg, mediaType, weight, this);\n    }\n  }\n\n  toString(): string {\n    let pairs: string[] = [];\n\n    for (let [mediaType, weight] of this.#map) {\n      pairs.push(`${mediaType}${weight === 1 ? '' : `;q=${weight}`}`);\n    }\n\n    return pairs.join(',');\n  }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type AcceptEncodingInit = Iterable<string | [string, number]> | Record<string, number>;\n\n/**\n * The value of a `Accept-Encoding` HTTP header.\n *\n * [MDN `Accept-Encoding` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4)\n */\nexport class AcceptEncoding implements HeaderValue, Iterable<[string, number]> {\n  #map: Map<string, number>;\n\n  constructor(init?: string | AcceptEncodingInit) {\n    this.#map = new Map();\n\n    if (init) {\n      if (typeof init === 'string') {\n        for (let piece of init.split(/\\s*,\\s*/)) {\n          let params = parseParams(piece);\n          if (params.length < 1) continue;\n\n          let encoding = params[0][0];\n          let weight = 1;\n\n          for (let i = 1; i < params.length; i++) {\n            let [key, value] = params[i];\n            if (key === 'q') {\n              weight = Number(value);\n              break;\n            }\n          }\n\n          this.#map.set(encoding.toLowerCase(), weight);\n        }\n      } else if (isIterable(init)) {\n        for (let value of init) {\n          if (Array.isArray(value)) {\n            this.#map.set(value[0].toLowerCase(), value[1]);\n          } else {\n            this.#map.set(value.toLowerCase(), 1);\n          }\n        }\n      } else {\n        for (let encoding of Object.getOwnPropertyNames(init)) {\n          this.#map.set(encoding.toLowerCase(), init[encoding]);\n        }\n      }\n\n      this.#sort();\n    }\n  }\n\n  #sort() {\n    this.#map = new Map([...this.#map].sort((a, b) => b[1] - a[1]));\n  }\n\n  /**\n   * An array of all encodings in the header.\n   */\n  get encodings(): string[] {\n    return Array.from(this.#map.keys());\n  }\n\n  /**\n   * An array of all weights (q values) in the header.\n   */\n  get weights(): number[] {\n    return Array.from(this.#map.values());\n  }\n\n  /**\n   * The number of encodings in the header.\n   */\n  get size(): number {\n    return this.#map.size;\n  }\n\n  /**\n   * Returns `true` if the header matches the given encoding (i.e. it is \"acceptable\").\n   * @param encoding The encoding to check.\n   * @returns `true` if the encoding is acceptable, `false` otherwise.\n   */\n  accepts(encoding: string): boolean {\n    return encoding.toLowerCase() === 'identity' || this.getWeight(encoding) > 0;\n  }\n\n  /**\n   * Gets the weight an encoding. Performs wildcard matching so `*` matches all encodings.\n   * @param encoding The encoding to get.\n   * @returns The weight of the encoding, or `0` if it is not in the header.\n   */\n  getWeight(encoding: string): number {\n    let lower = encoding.toLowerCase();\n\n    for (let [enc, weight] of this) {\n      if (enc === lower || enc === '*' || lower === '*') {\n        return weight;\n      }\n    }\n\n    return 0;\n  }\n\n  /**\n   * Returns the most preferred encoding from the given list of encodings.\n   * @param encodings The encodings to choose from.\n   * @returns The most preferred encoding or `null` if none match.\n   */\n  getPreferred(encodings: string[]): string | null {\n    let sorted = encodings\n      .map((encoding) => [encoding, this.getWeight(encoding)] as const)\n      .sort((a, b) => b[1] - a[1]);\n\n    let first = sorted[0];\n\n    return first !== undefined && first[1] > 0 ? first[0] : null;\n  }\n\n  /**\n   * Gets the weight of an encoding. If it is not in the header verbatim, this returns `null`.\n   * @param encoding The encoding to get.\n   * @returns The weight of the encoding, or `null` if it is not in the header.\n   */\n  get(encoding: string): number | null {\n    return this.#map.get(encoding.toLowerCase()) ?? null;\n  }\n\n  /**\n   * Sets an encoding with the given weight.\n   * @param encoding The encoding to set.\n   * @param weight The weight of the encoding. Defaults to 1.\n   */\n  set(encoding: string, weight = 1): void {\n    this.#map.set(encoding.toLowerCase(), weight);\n    this.#sort();\n  }\n\n  /**\n   * Removes the given encoding from the header.\n   * @param encoding The encoding to remove.\n   */\n  delete(encoding: string): void {\n    this.#map.delete(encoding.toLowerCase());\n  }\n\n  /**\n   * Checks if the header contains a given encoding.\n   * @param encoding The encoding to check.\n   * @returns `true` if the encoding is in the header, `false` otherwise.\n   */\n  has(encoding: string): boolean {\n    return this.#map.has(encoding.toLowerCase());\n  }\n\n  /**\n   * Removes all encodings from the header.\n   */\n  clear(): void {\n    this.#map.clear();\n  }\n\n  entries(): IterableIterator<[string, number]> {\n    return this.#map.entries();\n  }\n\n  [Symbol.iterator](): IterableIterator<[string, number]> {\n    return this.entries();\n  }\n\n  forEach(\n    callback: (encoding: string, weight: number, header: AcceptEncoding) => void,\n    thisArg?: any,\n  ): void {\n    for (let [encoding, weight] of this) {\n      callback.call(thisArg, encoding, weight, this);\n    }\n  }\n\n  toString(): string {\n    let pairs: string[] = [];\n\n    for (let [encoding, weight] of this.#map) {\n      pairs.push(`${encoding}${weight === 1 ? '' : `;q=${weight}`}`);\n    }\n\n    return pairs.join(',');\n  }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type AcceptLanguageInit = Iterable<string | [string, number]> | Record<string, number>;\n\n/**\n * The value of a `Accept-Language` HTTP header.\n *\n * [MDN `Accept-Language` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.5)\n */\nexport class AcceptLanguage implements HeaderValue, Iterable<[string, number]> {\n  #map: Map<string, number>;\n\n  constructor(init?: string | AcceptLanguageInit) {\n    this.#map = new Map();\n\n    if (init) {\n      if (typeof init === 'string') {\n        for (let piece of init.split(/\\s*,\\s*/)) {\n          let params = parseParams(piece);\n          if (params.length < 1) continue;\n\n          let language = params[0][0];\n          let weight = 1;\n\n          for (let i = 1; i < params.length; i++) {\n            let [key, value] = params[i];\n            if (key === 'q') {\n              weight = Number(value);\n              break;\n            }\n          }\n\n          this.#map.set(language.toLowerCase(), weight);\n        }\n      } else if (isIterable(init)) {\n        for (let value of init) {\n          if (Array.isArray(value)) {\n            this.#map.set(value[0].toLowerCase(), value[1]);\n          } else {\n            this.#map.set(value.toLowerCase(), 1);\n          }\n        }\n      } else {\n        for (let language of Object.getOwnPropertyNames(init)) {\n          this.#map.set(language.toLowerCase(), init[language]);\n        }\n      }\n\n      this.#sort();\n    }\n  }\n\n  #sort() {\n    this.#map = new Map([...this.#map].sort((a, b) => b[1] - a[1]));\n  }\n\n  /**\n   * An array of all languages in the header.\n   */\n  get languages(): string[] {\n    return Array.from(this.#map.keys());\n  }\n\n  /**\n   * An array of all weights (q values) in the header.\n   */\n  get weights(): number[] {\n    return Array.from(this.#map.values());\n  }\n\n  /**\n   * The number of languages in the header.\n   */\n  get size(): number {\n    return this.#map.size;\n  }\n\n  /**\n   * Returns `true` if the header matches the given language (i.e. it is \"acceptable\").\n   * @param language The locale identifier of the language to check.\n   * @returns `true` if the language is acceptable, `false` otherwise.\n   */\n  accepts(language: string): boolean {\n    return this.getWeight(language) > 0;\n  }\n\n  /**\n   * Gets the weight of a language with the given locale identifier. Performs wildcard and subtype\n   * matching, so `en` matches `en-US` and `en-GB`, and `*` matches all languages.\n   * @param language The locale identifier of the language to get.\n   * @returns The weight of the language, or `0` if it is not in the header.\n   */\n  getWeight(language: string): number {\n    let [base, subtype] = language.toLowerCase().split('-');\n\n    for (let [key, value] of this) {\n      let [b, s] = key.split('-');\n      if (\n        (b === base || b === '*' || base === '*') &&\n        (s === subtype || s === undefined || subtype === undefined)\n      ) {\n        return value;\n      }\n    }\n\n    return 0;\n  }\n\n  /**\n   * Returns the most preferred language from the given list of languages.\n   * @param languages The locale identifiers of the languages to choose from.\n   * @returns The most preferred language or `null` if none match.\n   */\n  getPreferred(languages: string[]): string | null {\n    let sorted = languages\n      .map((language) => [language, this.getWeight(language)] as const)\n      .sort((a, b) => b[1] - a[1]);\n\n    let first = sorted[0];\n\n    return first !== undefined && first[1] > 0 ? first[0] : null;\n  }\n\n  /**\n   * Gets the weight of a language with the given locale identifier. If it is not in the header\n   * verbatim, this returns `null`.\n   * @param language The locale identifier of the language to get.\n   * @returns The weight of the language, or `null` if it is not in the header.\n   */\n  get(language: string): number | null {\n    return this.#map.get(language.toLowerCase()) ?? null;\n  }\n\n  /**\n   * Sets a language with the given weight.\n   * @param language The locale identifier of the language to set.\n   * @param weight The weight of the language. Defaults to 1.\n   */\n  set(language: string, weight = 1): void {\n    this.#map.set(language.toLowerCase(), weight);\n    this.#sort();\n  }\n\n  /**\n   * Removes a language with the given locale identifier.\n   * @param language The locale identifier of the language to remove.\n   */\n  delete(language: string): void {\n    this.#map.delete(language.toLowerCase());\n  }\n\n  /**\n   * Checks if the header contains a language with the given locale identifier.\n   * @param language The locale identifier of the language to check.\n   * @returns `true` if the language is in the header, `false` otherwise.\n   */\n  has(language: string): boolean {\n    return this.#map.has(language.toLowerCase());\n  }\n\n  /**\n   * Removes all languages from the header.\n   */\n  clear(): void {\n    this.#map.clear();\n  }\n\n  entries(): IterableIterator<[string, number]> {\n    return this.#map.entries();\n  }\n\n  [Symbol.iterator](): IterableIterator<[string, number]> {\n    return this.entries();\n  }\n\n  forEach(\n    callback: (language: string, weight: number, header: AcceptLanguage) => void,\n    thisArg?: any,\n  ): void {\n    for (let [language, weight] of this) {\n      callback.call(thisArg, language, weight, this);\n    }\n  }\n\n  toString(): string {\n    let pairs: string[] = [];\n\n    for (let [language, weight] of this.#map) {\n      pairs.push(`${language}${weight === 1 ? '' : `;q=${weight}`}`);\n    }\n\n    return pairs.join(',');\n  }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams } from './param-values.ts';\n\n// Taken from https://github.com/jjenzz/pretty-cache-header by jjenzz\n// License: MIT https://github.com/jjenzz/pretty-cache-header/blob/main/LICENSE\nexport interface CacheControlInit {\n  /**\n   * The `max-age=N` **request directive** indicates that the client allows a stored response that\n   * is generated on the origin server within _N_ seconds \u2014 where _N_ may be any non-negative\n   * integer (including `0`).\n   *\n   * The `max-age=N` **response directive** indicates that the response remains\n   * [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n   * until _N_ seconds after the response is generated.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#max-age)\n   */\n  maxAge?: number;\n  /**\n   * The `max-stale=N` **request directive** indicates that the client allows a stored response\n   * that is [stale](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n   * within _N_ seconds.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#max-stale)\n   */\n  maxStale?: number;\n  /**\n   * The `min-fresh=N` **request directive** indicates that the client allows a stored response\n   * that is [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n   * for at least _N_ seconds.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#min-fresh)\n   */\n  minFresh?: number;\n  /**\n   * The `s-maxage` **response directive** also indicates how long the response is\n   * [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age) for (similar to `max-age`) \u2014\n   * but it is specific to shared caches, and they will ignore `max-age` when it is present.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#s-maxage)\n   */\n  sMaxage?: number;\n  /**\n   * The `no-cache` **request directive** asks caches to validate the response with the origin\n   * server before reuse. If you want caches to always check for content updates while reusing\n   * stored content, `no-cache` is the directive to use.\n   *\n   * The `no-cache` **response directive** indicates that the response can be stored in caches, but\n   * the response must be validated with the origin server before each reuse, even when the cache\n   * is disconnected from the origin server.\n   *\n   * `no-cache` allows clients to request the most up-to-date response even if the cache has a\n   * [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n   * response.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-cache)\n   */\n  noCache?: true;\n  /**\n   * The `no-store` **request directive** allows a client to request that caches refrain from\n   * storing the request and corresponding response \u2014 even if the origin server's response could\n   * be stored.\n   *\n   * The `no-store` **response directive** indicates that any caches of any kind (private or shared)\n   * should not store this response.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-store)\n   */\n  noStore?: true;\n  /**\n   * `no-transform` indicates that any intermediary (regardless of whether it implements a cache)\n   * shouldn't transform the response contents.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#no-transform)\n   */\n  noTransform?: true;\n  /**\n   * The client indicates that cache should obtain an already-cached response. If a cache has\n   * stored a response, it's reused.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#only-if-cached)\n   */\n  onlyIfCached?: true;\n  /**\n   * The `must-revalidate` **response directive** indicates that the response can be stored in\n   * caches and can be reused while [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age).\n   * If the response becomes [stale](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age),\n   * it must be validated with the origin server before reuse.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#must-revalidate)\n   */\n  mustRevalidate?: true;\n  /**\n   * The `proxy-revalidate` **response directive** is the equivalent of `must-revalidate`, but\n   * specifically for shared caches only.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#proxy-revalidate)\n   */\n  proxyRevalidate?: true;\n  /**\n   * The `must-understand` **response directive** indicates that a cache should store the response\n   * only if it understands the requirements for caching based on status code.\n   *\n   * `must-understand` should be coupled with `no-store` for fallback behavior.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#must-understand)\n   */\n  mustUnderstand?: true;\n  /**\n   * The `private` **response directive** indicates that the response can be stored only in a\n   * private cache (e.g. local caches in browsers).\n   *\n   * You should add the `private` directive for user-personalized content, especially for responses\n   * received after login and for sessions managed via cookies.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#private)\n   */\n  private?: true;\n  /**\n   * The `public` **response directive** indicates that the response can be stored in a shared\n   * cache. Responses for requests with `Authorization` header fields must not be stored in a\n   * shared cache; however, the `public` directive will cause such responses to be stored in a\n   * shared cache.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#public)\n   */\n  public?: true;\n  /**\n   * The `immutable` **response directive** indicates that the response will not be updated while\n   * it's [fresh](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age).\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#public)\n   */\n  immutable?: true;\n  /**\n   * The `stale-while-revalidate` **response directive** indicates that the cache could reuse a\n   * stale response while it revalidates it to a cache.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#stale-while-revalidate)\n   */\n  staleWhileRevalidate?: number;\n  /**\n   * The `stale-if-error` **response directive** indicates that the cache can reuse a\n   * [stale response](https://developer.mozilla.org/en-US/docs/Web/HTTP/Caching#fresh_and_stale_based_on_age)\n   * when an upstream server generates an error, or when the error is generated locally. Here, an\n   * error is considered any response with a status code of 500, 502, 503, or 504.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#stale-if-error)\n   */\n  staleIfError?: number;\n}\n\n/**\n * The value of a `Cache-Control` HTTP header.\n *\n * [MDN `Cache-Control` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.2)\n */\nexport class CacheControl implements HeaderValue, CacheControlInit {\n  maxAge?: number;\n  maxStale?: number;\n  minFresh?: number;\n  sMaxage?: number;\n  noCache?: true;\n  noStore?: true;\n  noTransform?: true;\n  onlyIfCached?: true;\n  mustRevalidate?: true;\n  proxyRevalidate?: true;\n  mustUnderstand?: true;\n  private?: true;\n  public?: true;\n  immutable?: true;\n  staleWhileRevalidate?: number;\n  staleIfError?: number;\n\n  constructor(init?: string | CacheControlInit) {\n    if (init) {\n      if (typeof init === 'string') {\n        let params = parseParams(init, ',');\n        if (params.length > 0) {\n          for (let [name, value] of params) {\n            switch (name) {\n              case 'max-age':\n                this.maxAge = Number(value);\n                break;\n              case 'max-stale':\n                this.maxStale = Number(value);\n                break;\n              case 'min-fresh':\n                this.minFresh = Number(value);\n                break;\n              case 's-maxage':\n                this.sMaxage = Number(value);\n                break;\n              case 'no-cache':\n                this.noCache = true;\n                break;\n              case 'no-store':\n                this.noStore = true;\n                break;\n              case 'no-transform':\n                this.noTransform = true;\n                break;\n              case 'only-if-cached':\n                this.onlyIfCached = true;\n                break;\n              case 'must-revalidate':\n                this.mustRevalidate = true;\n                break;\n              case 'proxy-revalidate':\n                this.proxyRevalidate = true;\n                break;\n              case 'must-understand':\n                this.mustUnderstand = true;\n                break;\n              case 'private':\n                this.private = true;\n                break;\n              case 'public':\n                this.public = true;\n                break;\n              case 'immutable':\n                this.immutable = true;\n                break;\n              case 'stale-while-revalidate':\n                this.staleWhileRevalidate = Number(value);\n                break;\n              case 'stale-if-error':\n                this.staleIfError = Number(value);\n                break;\n            }\n          }\n        }\n      } else {\n        this.maxAge = init.maxAge;\n        this.maxStale = init.maxStale;\n        this.minFresh = init.minFresh;\n        this.sMaxage = init.sMaxage;\n        this.noCache = init.noCache;\n        this.noStore = init.noStore;\n        this.noTransform = init.noTransform;\n        this.onlyIfCached = init.onlyIfCached;\n        this.mustRevalidate = init.mustRevalidate;\n        this.proxyRevalidate = init.proxyRevalidate;\n        this.mustUnderstand = init.mustUnderstand;\n        this.private = init.private;\n        this.public = init.public;\n        this.immutable = init.immutable;\n        this.staleWhileRevalidate = init.staleWhileRevalidate;\n        this.staleIfError = init.staleIfError;\n      }\n    }\n  }\n\n  toString(): string {\n    let parts = [];\n\n    if (this.public) {\n      parts.push('public');\n    }\n    if (this.private) {\n      parts.push('private');\n    }\n    if (typeof this.maxAge === 'number') {\n      parts.push(`max-age=${this.maxAge}`);\n    }\n    if (typeof this.sMaxage === 'number') {\n      parts.push(`s-maxage=${this.sMaxage}`);\n    }\n    if (this.noCache) {\n      parts.push('no-cache');\n    }\n    if (this.noStore) {\n      parts.push('no-store');\n    }\n    if (this.noTransform) {\n      parts.push('no-transform');\n    }\n    if (this.onlyIfCached) {\n      parts.push('only-if-cached');\n    }\n    if (this.mustRevalidate) {\n      parts.push('must-revalidate');\n    }\n    if (this.proxyRevalidate) {\n      parts.push('proxy-revalidate');\n    }\n    if (this.mustUnderstand) {\n      parts.push('must-understand');\n    }\n    if (this.immutable) {\n      parts.push('immutable');\n    }\n    if (typeof this.staleWhileRevalidate === 'number') {\n      parts.push(`stale-while-revalidate=${this.staleWhileRevalidate}`);\n    }\n    if (typeof this.staleIfError === 'number') {\n      parts.push(`stale-if-error=${this.staleIfError}`);\n    }\n    if (typeof this.maxStale === 'number') {\n      parts.push(`max-stale=${this.maxStale}`);\n    }\n    if (typeof this.minFresh === 'number') {\n      parts.push(`min-fresh=${this.minFresh}`);\n    }\n\n    return parts.join(', ');\n  }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\n\nexport interface ContentDispositionInit {\n  /**\n   * For file uploads, the name of the file that the user selected.\n   */\n  filename?: string;\n  /**\n   * For file uploads, the name of the file that the user selected, encoded as a [RFC 8187](https://tools.ietf.org/html/rfc8187) `filename*` parameter.\n   * This parameter allows non-ASCII characters in filenames, and specifies the character encoding.\n   */\n  filenameSplat?: string;\n  /**\n   * For `multipart/form-data` requests, the name of the `<input>` field associated with this content.\n   */\n  name?: string;\n  /**\n   * The disposition type of the content, such as `attachment` or `inline`.\n   */\n  type?: string;\n}\n\n/**\n * The value of a `Content-Disposition` HTTP header.\n *\n * [MDN `Content-Disposition` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)\n *\n * [RFC 6266](https://tools.ietf.org/html/rfc6266)\n */\nexport class ContentDisposition implements HeaderValue, ContentDispositionInit {\n  filename?: string;\n  filenameSplat?: string;\n  name?: string;\n  type?: string;\n\n  constructor(init?: string | ContentDispositionInit) {\n    if (init) {\n      if (typeof init === 'string') {\n        let params = parseParams(init);\n        if (params.length > 0) {\n          this.type = params[0][0];\n          for (let [name, value] of params.slice(1)) {\n            if (name === 'filename') {\n              this.filename = value;\n            } else if (name === 'filename*') {\n              this.filenameSplat = value;\n            } else if (name === 'name') {\n              this.name = value;\n            }\n          }\n        }\n      } else {\n        this.filename = init.filename;\n        this.filenameSplat = init.filenameSplat;\n        this.name = init.name;\n        this.type = init.type;\n      }\n    }\n  }\n\n  /**\n   * The preferred filename for the content, using the `filename*` parameter if present, falling back to the `filename` parameter.\n   *\n   * From [RFC 6266](https://tools.ietf.org/html/rfc6266):\n   *\n   * Many user agent implementations predating this specification do not understand the \"filename*\" parameter.\n   * Therefore, when both \"filename\" and \"filename*\" are present in a single header field value, recipients SHOULD\n   * pick \"filename*\" and ignore \"filename\". This way, senders can avoid special-casing specific user agents by\n   * sending both the more expressive \"filename*\" parameter, and the \"filename\" parameter as fallback for legacy recipients.\n   */\n  get preferredFilename(): string | undefined {\n    let filenameSplat = this.filenameSplat;\n    if (filenameSplat) {\n      let decodedFilename = decodeFilenameSplat(filenameSplat);\n      if (decodedFilename) return decodedFilename;\n    }\n\n    return this.filename;\n  }\n\n  toString(): string {\n    if (!this.type) {\n      return '';\n    }\n\n    let parts = [this.type];\n\n    if (this.name) {\n      parts.push(`name=${quote(this.name)}`);\n    }\n    if (this.filename) {\n      parts.push(`filename=${quote(this.filename)}`);\n    }\n    if (this.filenameSplat) {\n      parts.push(`filename*=${quote(this.filenameSplat)}`);\n    }\n\n    return parts.join('; ');\n  }\n}\n\nfunction decodeFilenameSplat(value: string): string | null {\n  let match = value.match(/^([\\w-]+)'([^']*)'(.+)$/);\n  if (!match) return null;\n\n  let [, charset, , encodedFilename] = match;\n\n  let decodedFilename = percentDecode(encodedFilename);\n\n  try {\n    let decoder = new TextDecoder(charset);\n    let bytes = new Uint8Array(decodedFilename.split('').map((char) => char.charCodeAt(0)));\n    return decoder.decode(bytes);\n  } catch (error) {\n    console.warn(`Failed to decode filename from charset ${charset}:`, error);\n    return decodedFilename;\n  }\n}\n\nfunction percentDecode(value: string): string {\n  return value.replace(/\\+/g, ' ').replace(/%([0-9A-Fa-f]{2})/g, (_, hex) => {\n    return String.fromCharCode(parseInt(hex, 16));\n  });\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\n\nexport interface ContentTypeInit {\n  /**\n   * For multipart entities, the boundary that separates the different parts of the message.\n   */\n  boundary?: string;\n  /**\n   * Indicates the [character encoding](https://developer.mozilla.org/en-US/docs/Glossary/Character_encoding) of the content.\n   *\n   * For example, `utf-8`, `iso-8859-1`.\n   */\n  charset?: string;\n  /**\n   * The media type (or MIME type) of the content. This consists of a type and subtype, separated by a slash.\n   *\n   * For example, `text/html`, `application/json`, `image/png`.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types)\n   */\n  mediaType?: string;\n}\n\n/**\n * The value of a `Content-Type` HTTP header.\n *\n * [MDN `Content-Type` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-3.1.1.5)\n */\nexport class ContentType implements HeaderValue, ContentTypeInit {\n  boundary?: string;\n  charset?: string;\n  mediaType?: string;\n\n  constructor(init?: string | ContentTypeInit) {\n    if (init) {\n      if (typeof init === 'string') {\n        let params = parseParams(init);\n        if (params.length > 0) {\n          this.mediaType = params[0][0];\n          for (let [name, value] of params.slice(1)) {\n            if (name === 'boundary') {\n              this.boundary = value;\n            } else if (name === 'charset') {\n              this.charset = value;\n            }\n          }\n        }\n      } else {\n        this.boundary = init.boundary;\n        this.charset = init.charset;\n        this.mediaType = init.mediaType;\n      }\n    }\n  }\n\n  toString(): string {\n    if (!this.mediaType) {\n      return '';\n    }\n\n    let parts = [this.mediaType];\n\n    if (this.charset) {\n      parts.push(`charset=${quote(this.charset)}`);\n    }\n    if (this.boundary) {\n      parts.push(`boundary=${quote(this.boundary)}`);\n    }\n\n    return parts.join('; ');\n  }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\nimport { isIterable } from './utils.ts';\n\nexport type CookieInit = Iterable<[string, string]> | Record<string, string>;\n\n/**\n * The value of a `Cookie` HTTP header.\n *\n * [MDN `Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-4.2)\n */\nexport class Cookie implements HeaderValue, Iterable<[string, string]> {\n  #map: Map<string, string>;\n\n  constructor(init?: string | CookieInit) {\n    this.#map = new Map();\n    if (init) {\n      if (typeof init === 'string') {\n        let params = parseParams(init);\n        for (let [name, value] of params) {\n          this.#map.set(name, value ?? '');\n        }\n      } else if (isIterable(init)) {\n        for (let [name, value] of init) {\n          this.#map.set(name, value);\n        }\n      } else {\n        for (let name of Object.getOwnPropertyNames(init)) {\n          this.#map.set(name, init[name]);\n        }\n      }\n    }\n  }\n\n  /**\n   * An array of the names of the cookies in the header.\n   */\n  get names(): string[] {\n    return Array.from(this.#map.keys());\n  }\n\n  /**\n   * An array of the values of the cookies in the header.\n   */\n  get values(): string[] {\n    return Array.from(this.#map.values());\n  }\n\n  /**\n   * The number of cookies in the header.\n   */\n  get size(): number {\n    return this.#map.size;\n  }\n\n  /**\n   * Gets the value of a cookie with the given name from the header.\n   * @param name The name of the cookie.\n   * @returns The value of the cookie, or `null` if the cookie does not exist.\n   */\n  get(name: string): string | null {\n    return this.#map.get(name) ?? null;\n  }\n\n  /**\n   * Sets a cookie with the given name and value in the header.\n   * @param name The name of the cookie.\n   * @param value The value of the cookie.\n   */\n  set(name: string, value: string): void {\n    this.#map.set(name, value);\n  }\n\n  /**\n   * Removes a cookie with the given name from the header.\n   * @param name The name of the cookie.\n   */\n  delete(name: string): void {\n    this.#map.delete(name);\n  }\n\n  /**\n   * True if a cookie with the given name exists in the header.\n   * @param name The name of the cookie.\n   * @returns True if a cookie with the given name exists in the header.\n   */\n  has(name: string): boolean {\n    return this.#map.has(name);\n  }\n\n  /**\n   * Removes all cookies from the header.\n   */\n  clear(): void {\n    this.#map.clear();\n  }\n\n  entries(): IterableIterator<[string, string]> {\n    return this.#map.entries();\n  }\n\n  [Symbol.iterator](): IterableIterator<[string, string]> {\n    return this.entries();\n  }\n\n  forEach(callback: (name: string, value: string, header: Cookie) => void, thisArg?: any): void {\n    for (let [name, value] of this) {\n      callback.call(thisArg, name, value, this);\n    }\n  }\n\n  toString(): string {\n    let pairs: string[] = [];\n\n    for (let [name, value] of this.#map) {\n      pairs.push(`${name}=${quote(value)}`);\n    }\n\n    return pairs.join('; ');\n  }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { quoteEtag } from './utils.ts';\n\nexport interface IfNoneMatchInit {\n  /**\n   * The entity tags to compare against the current entity.\n   */\n  tags: string[];\n}\n\n/**\n * The value of an `If-None-Match` HTTP header.\n *\n * [MDN `If-None-Match` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.2)\n */\nexport class IfNoneMatch implements HeaderValue, IfNoneMatchInit {\n  tags: string[] = [];\n\n  constructor(init?: string | string[] | IfNoneMatchInit) {\n    if (init) {\n      if (typeof init === 'string') {\n        this.tags.push(...init.split(/\\s*,\\s*/).map(quoteEtag));\n      } else if (Array.isArray(init)) {\n        this.tags.push(...init.map(quoteEtag));\n      } else {\n        this.tags.push(...init.tags.map(quoteEtag));\n      }\n    }\n  }\n\n  /**\n   * Checks if the header contains the given entity tag.\n   *\n   * Note: This method checks only for exact matches and does not consider wildcards.\n   *\n   * @param tag The entity tag to check for.\n   * @returns `true` if the tag is present in the header, `false` otherwise.\n   */\n  has(tag: string): boolean {\n    return this.tags.includes(quoteEtag(tag));\n  }\n\n  /**\n   * Checks if this header matches the given entity tag.\n   *\n   * @param tag The entity tag to check for.\n   * @returns `true` if the tag is present in the header (or the header contains a wildcard), `false` otherwise.\n   */\n  matches(tag: string): boolean {\n    return this.has(tag) || this.tags.includes('*');\n  }\n\n  toString() {\n    return this.tags.join(', ');\n  }\n}\n", "import { type HeaderValue } from './header-value.ts';\nimport { parseParams, quote } from './param-values.ts';\nimport { capitalize, isValidDate } from './utils.ts';\n\ntype SameSiteValue = 'Strict' | 'Lax' | 'None';\n\nexport interface SetCookieInit {\n  /**\n   * The domain of the cookie. For example, `example.com`.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#domaindomain-value)\n   */\n  domain?: string;\n  /**\n   * The expiration date of the cookie. If not specified, the cookie is a session cookie.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#expiresdate)\n   */\n  expires?: Date;\n  /**\n   * Indicates this cookie should not be accessible via JavaScript.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#httponly)\n   */\n  httpOnly?: true;\n  /**\n   * The maximum age of the cookie in seconds.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#max-age)\n   */\n  maxAge?: number;\n  /**\n   * The name of the cookie.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie-namecookie-value)\n   */\n  name?: string;\n  /**\n   * The path of the cookie. For example, `/` or `/admin`.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#pathpath-value)\n   */\n  path?: string;\n  /**\n   * The `SameSite` attribute of the cookie. This attribute lets servers require that a cookie shouldn't be sent with\n   * cross-site requests, which provides some protection against cross-site request forgery attacks.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#samesitesamesite-value)\n   */\n  sameSite?: SameSiteValue;\n  /**\n   * Indicates the cookie should only be sent over HTTPS.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#secure)\n   */\n  secure?: true;\n  /**\n   * The value of the cookie.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie#cookie-namecookie-value)\n   */\n  value?: string;\n}\n\n/**\n * The value of a `Set-Cookie` HTTP header.\n *\n * [MDN `Set-Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)\n *\n * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-4.1)\n */\nexport class SetCookie implements HeaderValue, SetCookieInit {\n  domain?: string;\n  expires?: Date;\n  httpOnly?: true;\n  maxAge?: number;\n  name?: string;\n  path?: string;\n  sameSite?: SameSiteValue;\n  secure?: true;\n  value?: string;\n\n  constructor(init?: string | SetCookieInit) {\n    if (init) {\n      if (typeof init === 'string') {\n        let params = parseParams(init);\n        if (params.length > 0) {\n          this.name = params[0][0];\n          this.value = params[0][1];\n\n          for (let [key, value] of params.slice(1)) {\n            switch (key.toLowerCase()) {\n              case 'domain':\n                this.domain = value;\n                break;\n              case 'expires': {\n                if (typeof value === 'string') {\n                  let date = new Date(value);\n                  if (isValidDate(date)) {\n                    this.expires = date;\n                  }\n                }\n                break;\n              }\n              case 'httponly':\n                this.httpOnly = true;\n                break;\n              case 'max-age': {\n                if (typeof value === 'string') {\n                  let v = parseInt(value, 10);\n                  if (!isNaN(v)) this.maxAge = v;\n                }\n                break;\n              }\n              case 'path':\n                this.path = value;\n                break;\n              case 'samesite':\n                if (typeof value === 'string' && /strict|lax|none/i.test(value)) {\n                  this.sameSite = capitalize(value) as SameSiteValue;\n                }\n                break;\n              case 'secure':\n                this.secure = true;\n                break;\n            }\n          }\n        }\n      } else {\n        this.domain = init.domain;\n        this.expires = init.expires;\n        this.httpOnly = init.httpOnly;\n        this.maxAge = init.maxAge;\n        this.name = init.name;\n        this.path = init.path;\n        this.sameSite = init.sameSite;\n        this.secure = init.secure;\n        this.value = init.value;\n      }\n    }\n  }\n\n  toString(): string {\n    if (!this.name) {\n      return '';\n    }\n\n    let parts = [`${this.name}=${quote(this.value || '')}`];\n\n    if (this.domain) {\n      parts.push(`Domain=${this.domain}`);\n    }\n    if (this.path) {\n      parts.push(`Path=${this.path}`);\n    }\n    if (this.expires) {\n      parts.push(`Expires=${this.expires.toUTCString()}`);\n    }\n    if (this.maxAge) {\n      parts.push(`Max-Age=${this.maxAge}`);\n    }\n    if (this.secure) {\n      parts.push('Secure');\n    }\n    if (this.httpOnly) {\n      parts.push('HttpOnly');\n    }\n    if (this.sameSite) {\n      parts.push(`SameSite=${this.sameSite}`);\n    }\n\n    return parts.join('; ');\n  }\n}\n", "const HeaderWordCasingExceptions: Record<string, string> = {\n  ct: 'CT',\n  etag: 'ETag',\n  te: 'TE',\n  www: 'WWW',\n  x: 'X',\n  xss: 'XSS',\n};\n\nexport function canonicalHeaderName(name: string): string {\n  return name\n    .toLowerCase()\n    .split('-')\n    .map((word) => HeaderWordCasingExceptions[word] || word.charAt(0).toUpperCase() + word.slice(1))\n    .join('-');\n}\n", "import { type AcceptInit, Accept } from './accept.ts';\nimport { type AcceptEncodingInit, AcceptEncoding } from './accept-encoding.ts';\nimport { type AcceptLanguageInit, AcceptLanguage } from './accept-language.ts';\nimport { type CacheControlInit, CacheControl } from './cache-control.ts';\nimport { type ContentDispositionInit, ContentDisposition } from './content-disposition.ts';\nimport { type ContentTypeInit, ContentType } from './content-type.ts';\nimport { type CookieInit, Cookie } from './cookie.ts';\nimport { canonicalHeaderName } from './header-names.ts';\nimport { type HeaderValue } from './header-value.ts';\nimport { type IfNoneMatchInit, IfNoneMatch } from './if-none-match.ts';\nimport { type SetCookieInit, SetCookie } from './set-cookie.ts';\nimport { isIterable, quoteEtag } from './utils.ts';\n\ntype DateInit = number | Date;\n\ninterface SuperHeadersPropertyInit {\n  /**\n   * The [`Accept`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept) header value.\n   */\n  accept?: string | AcceptInit;\n  /**\n   * The [`Accept-Encoding`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding) header value.\n   */\n  acceptEncoding?: string | AcceptEncodingInit;\n  /**\n   * The [`Accept-Language`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) header value.\n   */\n  acceptLanguage?: string | AcceptLanguageInit;\n  /**\n   * The [`Accept-Ranges`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges) header value.\n   */\n  acceptRanges?: string;\n  /**\n   * The [`Age`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Age) header value.\n   */\n  age?: string | number;\n  /**\n   * The [`Cache-Control`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control) header value.\n   */\n  cacheControl?: string | CacheControlInit;\n  /**\n   * The [`Connection`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection) header value.\n   */\n  connection?: string;\n  /**\n   * The [`Content-Disposition`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition) header value.\n   */\n  contentDisposition?: string | ContentDispositionInit;\n  /**\n   * The [`Content-Encoding`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding) header value.\n   */\n  contentEncoding?: string | string[];\n  /**\n   * The [`Content-Language`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language) header value.\n   */\n  contentLanguage?: string | string[];\n  /**\n   * The [`Content-Length`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Length) header value.\n   */\n  contentLength?: string | number;\n  /**\n   * The [`Content-Type`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type) header value.\n   */\n  contentType?: string | ContentTypeInit;\n  /**\n   * The [`Cookie`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie) header value.\n   */\n  cookie?: string | CookieInit;\n  /**\n   * The [`Date`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date) header value.\n   */\n  date?: string | DateInit;\n  /**\n   * The [`ETag`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag) header value.\n   */\n  etag?: string;\n  /**\n   * The [`Expires`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires) header value.\n   */\n  expires?: string | DateInit;\n  /**\n   * The [`Host`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host) header value.\n   */\n  host?: string;\n  /**\n   * The [`If-Modified-Since`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since) header value.\n   */\n  ifModifiedSince?: string | DateInit;\n  /**\n   * The [`If-None-Match`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match) header value.\n   */\n  ifNoneMatch?: string | string[] | IfNoneMatchInit;\n  /**\n   * The [`If-Unmodified-Since`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Unmodified-Since) header value.\n   */\n  ifUnmodifiedSince?: string | DateInit;\n  /**\n   * The [`Last-Modified`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified) header value.\n   */\n  lastModified?: string | DateInit;\n  /**\n   * The [`Location`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location) header value.\n   */\n  location?: string;\n  /**\n   * The [`Referer`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer) header value.\n   */\n  referer?: string;\n  /**\n   * The [`Set-Cookie`](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie) header value(s).\n   */\n  setCookie?: string | (string | SetCookieInit)[];\n}\n\nexport type SuperHeadersInit =\n  | Iterable<[string, string]>\n  | (SuperHeadersPropertyInit & Record<string, string | HeaderValue>);\n\nconst CRLF = '\\r\\n';\n\nconst AcceptKey = 'accept';\nconst AcceptEncodingKey = 'accept-encoding';\nconst AcceptLanguageKey = 'accept-language';\nconst AcceptRangesKey = 'accept-ranges';\nconst AgeKey = 'age';\nconst CacheControlKey = 'cache-control';\nconst ConnectionKey = 'connection';\nconst ContentDispositionKey = 'content-disposition';\nconst ContentEncodingKey = 'content-encoding';\nconst ContentLanguageKey = 'content-language';\nconst ContentLengthKey = 'content-length';\nconst ContentTypeKey = 'content-type';\nconst CookieKey = 'cookie';\nconst DateKey = 'date';\nconst ETagKey = 'etag';\nconst ExpiresKey = 'expires';\nconst HostKey = 'host';\nconst IfModifiedSinceKey = 'if-modified-since';\nconst IfNoneMatchKey = 'if-none-match';\nconst IfUnmodifiedSinceKey = 'if-unmodified-since';\nconst LastModifiedKey = 'last-modified';\nconst LocationKey = 'location';\nconst RefererKey = 'referer';\nconst SetCookieKey = 'set-cookie';\n\n/**\n * An enhanced JavaScript `Headers` interface with type-safe access.\n *\n * [API Reference](https://github.com/mjackson/remix-the-web/tree/main/packages/headers)\n *\n * [MDN `Headers` Base Class Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers)\n */\nexport class SuperHeaders extends Headers {\n  #map: Map<string, string | HeaderValue>;\n  #setCookies: (string | SetCookie)[] = [];\n\n  constructor(init?: string | SuperHeadersInit | Headers) {\n    super();\n\n    this.#map = new Map();\n\n    if (init) {\n      if (typeof init === 'string') {\n        let lines = init.split(CRLF);\n        for (let line of lines) {\n          let match = line.match(/^([^:]+):(.*)/);\n          if (match) {\n            this.append(match[1].trim(), match[2].trim());\n          }\n        }\n      } else if (isIterable(init)) {\n        for (let [name, value] of init) {\n          this.append(name, value);\n        }\n      } else if (typeof init === 'object') {\n        for (let name of Object.getOwnPropertyNames(init)) {\n          let value = init[name];\n\n          let descriptor = Object.getOwnPropertyDescriptor(SuperHeaders.prototype, name);\n          if (descriptor?.set) {\n            descriptor.set.call(this, value);\n          } else {\n            this.set(name, value.toString());\n          }\n        }\n      }\n    }\n  }\n\n  /**\n   * Appends a new header value to the existing set of values for a header,\n   * or adds the header if it does not already exist.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/append)\n   */\n  append(name: string, value: string): void {\n    let key = name.toLowerCase();\n    if (key === SetCookieKey) {\n      this.#setCookies.push(value);\n    } else {\n      let existingValue = this.#map.get(key);\n      this.#map.set(key, existingValue ? `${existingValue}, ${value}` : value);\n    }\n  }\n\n  /**\n   * Removes a header.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/delete)\n   */\n  delete(name: string): void {\n    let key = name.toLowerCase();\n    if (key === SetCookieKey) {\n      this.#setCookies = [];\n    } else {\n      this.#map.delete(key);\n    }\n  }\n\n  /**\n   * Returns a string of all the values for a header, or `null` if the header does not exist.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/get)\n   */\n  get(name: string): string | null {\n    let key = name.toLowerCase();\n    if (key === SetCookieKey) {\n      return this.getSetCookie().join(', ');\n    } else {\n      let value = this.#map.get(key);\n      if (typeof value === 'string') {\n        return value;\n      } else if (value != null) {\n        let str = value.toString();\n        return str === '' ? null : str;\n      } else {\n        return null;\n      }\n    }\n  }\n\n  /**\n   * Returns an array of all values associated with the `Set-Cookie` header. This is\n   * useful when building headers for a HTTP response since multiple `Set-Cookie` headers\n   * must be sent on separate lines.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/getSetCookie)\n   */\n  getSetCookie(): string[] {\n    return this.#setCookies.map((v) => (typeof v === 'string' ? v : v.toString()));\n  }\n\n  /**\n   * Returns `true` if the header is present in the list of headers.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/has)\n   */\n  has(name: string): boolean {\n    let key = name.toLowerCase();\n    return key === SetCookieKey ? this.#setCookies.length > 0 : this.get(key) != null;\n  }\n\n  /**\n   * Sets a new value for the given header. If the header already exists, the new value\n   * will replace the existing value.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/set)\n   */\n  set(name: string, value: string): void {\n    let key = name.toLowerCase();\n    if (key === SetCookieKey) {\n      this.#setCookies = [value];\n    } else {\n      this.#map.set(key, value);\n    }\n  }\n\n  /**\n   * Returns an iterator of all header keys (lowercase).\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/keys)\n   */\n  *keys(): IterableIterator<string> {\n    for (let [key] of this) yield key;\n  }\n\n  /**\n   * Returns an iterator of all header values.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/values)\n   */\n  *values(): IterableIterator<string> {\n    for (let [, value] of this) yield value;\n  }\n\n  /**\n   * Returns an iterator of all header key/value pairs.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/entries)\n   */\n  *entries(): IterableIterator<[string, string]> {\n    for (let [key] of this.#map) {\n      let str = this.get(key);\n      if (str) yield [key, str];\n    }\n\n    for (let value of this.getSetCookie()) {\n      yield [SetCookieKey, value];\n    }\n  }\n\n  [Symbol.iterator](): IterableIterator<[string, string]> {\n    return this.entries();\n  }\n\n  /**\n   * Invokes the `callback` for each header key/value pair.\n   *\n   * [MDN Reference](https://developer.mozilla.org/en-US/docs/Web/API/Headers/forEach)\n   */\n  forEach(\n    callback: (value: string, key: string, headers: SuperHeaders) => void,\n    thisArg?: any,\n  ): void {\n    for (let [key, value] of this) {\n      callback.call(thisArg, value, key, this);\n    }\n  }\n\n  /**\n   * Returns a string representation of the headers suitable for use in a HTTP message.\n   */\n  toString(): string {\n    let lines: string[] = [];\n\n    for (let [key, value] of this) {\n      lines.push(`${canonicalHeaderName(key)}: ${value}`);\n    }\n\n    return lines.join(CRLF);\n  }\n\n  // Header-specific getters and setters\n\n  /**\n   * The `Accept` header is used by clients to indicate the media types that are acceptable\n   * in the response.\n   *\n   * [MDN `Accept` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.2)\n   */\n  get accept(): Accept {\n    return this.#getHeaderValue(AcceptKey, Accept);\n  }\n\n  set accept(value: string | AcceptInit | undefined | null) {\n    this.#setHeaderValue(AcceptKey, Accept, value);\n  }\n\n  /**\n   * The `Accept-Encoding` header contains information about the content encodings that the client\n   * is willing to accept in the response.\n   *\n   * [MDN `Accept-Encoding` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.4)\n   */\n  get acceptEncoding(): AcceptEncoding {\n    return this.#getHeaderValue(AcceptEncodingKey, AcceptEncoding);\n  }\n\n  set acceptEncoding(value: string | AcceptEncodingInit | undefined | null) {\n    this.#setHeaderValue(AcceptEncodingKey, AcceptEncoding, value);\n  }\n\n  /**\n   * The `Accept-Language` header contains information about preferred natural language for the\n   * response.\n   *\n   * [MDN `Accept-Language` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.5)\n   */\n  get acceptLanguage(): AcceptLanguage {\n    return this.#getHeaderValue(AcceptLanguageKey, AcceptLanguage);\n  }\n\n  set acceptLanguage(value: string | AcceptLanguageInit | undefined | null) {\n    this.#setHeaderValue(AcceptLanguageKey, AcceptLanguage, value);\n  }\n\n  /**\n   * The `Accept-Ranges` header indicates the server's acceptance of range requests.\n   *\n   * [MDN `Accept-Ranges` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Ranges)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7233#section-2.3)\n   */\n  get acceptRanges(): string | null {\n    return this.#getStringValue(AcceptRangesKey);\n  }\n\n  set acceptRanges(value: string | undefined | null) {\n    this.#setStringValue(AcceptRangesKey, value);\n  }\n\n  /**\n   * The `Age` header contains the time in seconds an object was in a proxy cache.\n   *\n   * [MDN `Age` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Age)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.1)\n   */\n  get age(): number | null {\n    return this.#getNumberValue(AgeKey);\n  }\n\n  set age(value: string | number | undefined | null) {\n    this.#setNumberValue(AgeKey, value);\n  }\n\n  /**\n   * The `Cache-Control` header contains directives for caching mechanisms in both requests and responses.\n   *\n   * [MDN `Cache-Control` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.2)\n   */\n  get cacheControl(): CacheControl {\n    return this.#getHeaderValue(CacheControlKey, CacheControl);\n  }\n\n  set cacheControl(value: string | CacheControlInit | undefined | null) {\n    this.#setHeaderValue(CacheControlKey, CacheControl, value);\n  }\n\n  /**\n   * The `Connection` header controls whether the network connection stays open after the current\n   * transaction finishes.\n   *\n   * [MDN `Connection` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Connection)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7230#section-6.1)\n   */\n  get connection(): string | null {\n    return this.#getStringValue(ConnectionKey);\n  }\n\n  set connection(value: string | undefined | null) {\n    this.#setStringValue(ConnectionKey, value);\n  }\n\n  /**\n   * The `Content-Disposition` header is a response-type header that describes how the payload is displayed.\n   *\n   * [MDN `Content-Disposition` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Disposition)\n   *\n   * [RFC 6266](https://datatracker.ietf.org/doc/html/rfc6266)\n   */\n  get contentDisposition(): ContentDisposition {\n    return this.#getHeaderValue(ContentDispositionKey, ContentDisposition);\n  }\n\n  set contentDisposition(value: string | ContentDispositionInit | undefined | null) {\n    this.#setHeaderValue(ContentDispositionKey, ContentDisposition, value);\n  }\n\n  /**\n   * The `Content-Encoding` header specifies the encoding of the resource.\n   *\n   * Note: If multiple encodings have been used, this value may be a comma-separated list. However, most often this\n   * header will only contain a single value.\n   *\n   * [MDN `Content-Encoding` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Encoding)\n   *\n   * [HTTP/1.1 Specification](https://httpwg.org/specs/rfc9110.html#field.content-encoding)\n   */\n  get contentEncoding(): string | null {\n    return this.#getStringValue(ContentEncodingKey);\n  }\n\n  set contentEncoding(value: string | string[] | undefined | null) {\n    this.#setStringValue(ContentEncodingKey, Array.isArray(value) ? value.join(', ') : value);\n  }\n\n  /**\n   * The `Content-Language` header describes the natural language(s) of the intended audience for the response content.\n   *\n   * Note: If the response content is intended for multiple audiences, this value may be a comma-separated list. However,\n   * most often this header will only contain a single value.\n   *\n   * [MDN `Content-Language` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Language)\n   *\n   * [HTTP/1.1 Specification](https://httpwg.org/specs/rfc9110.html#field.content-language)\n   */\n  get contentLanguage(): string | null {\n    return this.#getStringValue(ContentLanguageKey);\n  }\n\n  set contentLanguage(value: string | string[] | undefined | null) {\n    this.#setStringValue(ContentLanguageKey, Array.isArray(value) ? value.join(', ') : value);\n  }\n\n  /**\n   * The `Content-Length` header indicates the size of the entity-body in bytes.\n   *\n   * [MDN `Content-Length` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Length)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7230#section-3.3.2)\n   */\n  get contentLength(): number | null {\n    return this.#getNumberValue(ContentLengthKey);\n  }\n\n  set contentLength(value: string | number | undefined | null) {\n    this.#setNumberValue(ContentLengthKey, value);\n  }\n\n  /**\n   * The `Content-Type` header indicates the media type of the resource.\n   *\n   * [MDN `Content-Type` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-3.1.1.5)\n   */\n  get contentType(): ContentType {\n    return this.#getHeaderValue(ContentTypeKey, ContentType);\n  }\n\n  set contentType(value: string | ContentTypeInit | undefined | null) {\n    this.#setHeaderValue(ContentTypeKey, ContentType, value);\n  }\n\n  /**\n   * The `Cookie` request header contains stored HTTP cookies previously sent by the server with\n   * the `Set-Cookie` header.\n   *\n   * [MDN `Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cookie)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-5.4)\n   */\n  get cookie(): Cookie {\n    return this.#getHeaderValue(CookieKey, Cookie);\n  }\n\n  set cookie(value: string | CookieInit | undefined | null) {\n    this.#setHeaderValue(CookieKey, Cookie, value);\n  }\n\n  /**\n   * The `Date` header contains the date and time at which the message was sent.\n   *\n   * [MDN `Date` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Date)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.1.2)\n   */\n  get date(): Date | null {\n    return this.#getDateValue(DateKey);\n  }\n\n  set date(value: string | DateInit | undefined | null) {\n    this.#setDateValue(DateKey, value);\n  }\n\n  /**\n   * The `ETag` header provides a unique identifier for the current version of the resource.\n   *\n   * [MDN `ETag` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-2.3)\n   */\n  get etag(): string | null {\n    return this.#getStringValue(ETagKey);\n  }\n\n  set etag(value: string | undefined | null) {\n    this.#setStringValue(ETagKey, typeof value === 'string' ? quoteEtag(value) : value);\n  }\n\n  /**\n   * The `Expires` header contains the date/time after which the response is considered stale.\n   *\n   * [MDN `Expires` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Expires)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7234#section-5.3)\n   */\n  get expires(): Date | null {\n    return this.#getDateValue(ExpiresKey);\n  }\n\n  set expires(value: string | DateInit | undefined | null) {\n    this.#setDateValue(ExpiresKey, value);\n  }\n\n  /**\n   * The `Host` header specifies the domain name of the server and (optionally) the TCP port number.\n   *\n   * [MDN `Host` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Host)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7230#section-5.4)\n   */\n  get host(): string | null {\n    return this.#getStringValue(HostKey);\n  }\n\n  set host(value: string | undefined | null) {\n    this.#setStringValue(HostKey, value);\n  }\n\n  /**\n   * The `If-Modified-Since` header makes a request conditional on the last modification date of the\n   * requested resource.\n   *\n   * [MDN `If-Modified-Since` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.3)\n   */\n  get ifModifiedSince(): Date | null {\n    return this.#getDateValue(IfModifiedSinceKey);\n  }\n\n  set ifModifiedSince(value: string | DateInit | undefined | null) {\n    this.#setDateValue(IfModifiedSinceKey, value);\n  }\n\n  /**\n   * The `If-None-Match` header makes a request conditional on the absence of a matching ETag.\n   *\n   * [MDN `If-None-Match` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-None-Match)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.2)\n   */\n  get ifNoneMatch(): IfNoneMatch {\n    return this.#getHeaderValue(IfNoneMatchKey, IfNoneMatch);\n  }\n\n  set ifNoneMatch(value: string | string[] | IfNoneMatchInit | undefined | null) {\n    this.#setHeaderValue(IfNoneMatchKey, IfNoneMatch, value);\n  }\n\n  /**\n   * The `If-Unmodified-Since` header makes a request conditional on the last modification date of the\n   * requested resource.\n   *\n   * [MDN `If-Unmodified-Since` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Unmodified-Since)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-3.4)\n   */\n  get ifUnmodifiedSince(): Date | null {\n    return this.#getDateValue(IfUnmodifiedSinceKey);\n  }\n\n  set ifUnmodifiedSince(value: string | DateInit | undefined | null) {\n    this.#setDateValue(IfUnmodifiedSinceKey, value);\n  }\n\n  /**\n   * The `Last-Modified` header contains the date and time at which the resource was last modified.\n   *\n   * [MDN `Last-Modified` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Last-Modified)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7232#section-2.2)\n   */\n  get lastModified(): Date | null {\n    return this.#getDateValue(LastModifiedKey);\n  }\n\n  set lastModified(value: string | DateInit | undefined | null) {\n    this.#setDateValue(LastModifiedKey, value);\n  }\n\n  /**\n   * The `Location` header indicates the URL to redirect to.\n   *\n   * [MDN `Location` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Location)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-7.1.2)\n   */\n  get location(): string | null {\n    return this.#getStringValue(LocationKey);\n  }\n\n  set location(value: string | undefined | null) {\n    this.#setStringValue(LocationKey, value);\n  }\n\n  /**\n   * The `Referer` header contains the address of the previous web page from which a link to the\n   * currently requested page was followed.\n   *\n   * [MDN `Referer` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Referer)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc7231#section-5.5.2)\n   */\n  get referer(): string | null {\n    return this.#getStringValue(RefererKey);\n  }\n\n  set referer(value: string | undefined | null) {\n    this.#setStringValue(RefererKey, value);\n  }\n\n  /**\n   * The `Set-Cookie` header is used to send cookies from the server to the user agent.\n   *\n   * [MDN `Set-Cookie` Reference](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Set-Cookie)\n   *\n   * [HTTP/1.1 Specification](https://datatracker.ietf.org/doc/html/rfc6265#section-4.1)\n   */\n  get setCookie(): SetCookie[] {\n    let setCookies = this.#setCookies;\n\n    for (let i = 0; i < setCookies.length; ++i) {\n      if (typeof setCookies[i] === 'string') {\n        setCookies[i] = new SetCookie(setCookies[i]);\n      }\n    }\n\n    return setCookies as SetCookie[];\n  }\n\n  set setCookie(value: (string | SetCookieInit)[] | string | SetCookieInit | undefined | null) {\n    if (value != null) {\n      this.#setCookies = (Array.isArray(value) ? value : [value]).map((v) =>\n        typeof v === 'string' ? v : new SetCookie(v),\n      );\n    } else {\n      this.#setCookies = [];\n    }\n  }\n\n  // Helpers\n\n  #getHeaderValue<T extends HeaderValue>(key: string, ctor: new (init?: any) => T): T {\n    let value = this.#map.get(key);\n\n    if (value !== undefined) {\n      if (typeof value === 'string') {\n        let obj = new ctor(value);\n        this.#map.set(key, obj); // cache the new object\n        return obj;\n      } else {\n        return value as T;\n      }\n    }\n\n    let obj = new ctor();\n    this.#map.set(key, obj); // cache the new object\n    return obj;\n  }\n\n  #setHeaderValue(key: string, ctor: new (init?: string) => HeaderValue, value: any): void {\n    if (value != null) {\n      this.#map.set(key, typeof value === 'string' ? value : new ctor(value));\n    } else {\n      this.#map.delete(key);\n    }\n  }\n\n  #getDateValue(key: string): Date | null {\n    let value = this.#map.get(key);\n    return value === undefined ? null : new Date(value as string);\n  }\n\n  #setDateValue(key: string, value: string | DateInit | undefined | null): void {\n    if (value != null) {\n      this.#map.set(\n        key,\n        typeof value === 'string'\n          ? value\n          : (typeof value === 'number' ? new Date(value) : value).toUTCString(),\n      );\n    } else {\n      this.#map.delete(key);\n    }\n  }\n\n  #getNumberValue(key: string): number | null {\n    let value = this.#map.get(key);\n    return value === undefined ? null : parseInt(value as string, 10);\n  }\n\n  #setNumberValue(key: string, value: string | number | undefined | null): void {\n    if (value != null) {\n      this.#map.set(key, typeof value === 'string' ? value : value.toString());\n    } else {\n      this.#map.delete(key);\n    }\n  }\n\n  #getStringValue(key: string): string | null {\n    let value = this.#map.get(key);\n    return value === undefined ? null : (value as string);\n  }\n\n  #setStringValue(key: string, value: string | undefined | null): void {\n    if (value != null) {\n      this.#map.set(key, value);\n    } else {\n      this.#map.delete(key);\n    }\n  }\n}\n"],
  "mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAO,SAAS,YACd,OACA,YAAuB,KACS;AAGhC,MAAI,SACF,cAAc,MACV,6EACA;AAEN,MAAI,SAAyC,CAAC;AAE9C,MAAI;AACJ,UAAQ,QAAQ,OAAO,KAAK,KAAK,OAAO,MAAM;AAC5C,QAAI,MAAM,MAAM,CAAC,EAAE,KAAK;AAExB,QAAI;AACJ,QAAI,MAAM,CAAC,GAAG;AACZ,eAAS,MAAM,CAAC,KAAK,MAAM,CAAC,KAAK,IAAI,QAAQ,UAAU,IAAI,EAAE,KAAK;AAAA,IACpE;AAEA,WAAO,KAAK,CAAC,KAAK,KAAK,CAAC;AAAA,EAC1B;AAEA,SAAO;AACT;AAEO,SAAS,MAAM,OAAuB;AAC3C,MAAI,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,GAAG,KAAK,MAAM,SAAS,GAAG,GAAG;AACrE,WAAO,IAAI,MAAM,QAAQ,MAAM,KAAK,CAAC;AAAA,EACvC;AACA,SAAO;AACT;;;ACjCO,SAAS,WAAW,KAAqB;AAC9C,SAAO,IAAI,OAAO,CAAC,EAAE,YAAY,IAAI,IAAI,MAAM,CAAC,EAAE,YAAY;AAChE;AAEO,SAAS,WAAc,OAAkC;AAC9D,SAAO,SAAS,QAAQ,OAAO,MAAM,OAAO,QAAQ,MAAM;AAC5D;AAEO,SAAS,YAAY,MAAwB;AAClD,SAAO,gBAAgB,QAAQ,CAAC,MAAM,KAAK,QAAQ,CAAC;AACtD;AAEO,SAAS,UAAU,KAAqB;AAC7C,SAAO,QAAQ,MAAM,MAAM,eAAe,KAAK,GAAG,IAAI,MAAM,IAAI,GAAG;AACrE;;;ACDO,IAAM,SAAN,MAAgE;AAAA,EACrE;AAAA,EAEA,YAAY,MAA4B;AACtC,SAAK,OAAO,oBAAI,IAAI;AAEpB,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,iBAAS,SAAS,KAAK,MAAM,SAAS,GAAG;AACvC,cAAI,SAAS,YAAY,KAAK;AAC9B,cAAI,OAAO,SAAS;AAAG;AAEvB,cAAI,YAAY,OAAO,CAAC,EAAE,CAAC;AAC3B,cAAI,SAAS;AAEb,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,gBAAI,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC;AAC3B,gBAAI,QAAQ,KAAK;AACf,uBAAS,OAAO,KAAK;AACrB;AAAA,YACF;AAAA,UACF;AAEA,eAAK,KAAK,IAAI,UAAU,YAAY,GAAG,MAAM;AAAA,QAC/C;AAAA,MACF,WAAW,WAAW,IAAI,GAAG;AAC3B,iBAAS,aAAa,MAAM;AAC1B,cAAI,MAAM,QAAQ,SAAS,GAAG;AAC5B,iBAAK,KAAK,IAAI,UAAU,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC,CAAC;AAAA,UACxD,OAAO;AACL,iBAAK,KAAK,IAAI,UAAU,YAAY,GAAG,CAAC;AAAA,UAC1C;AAAA,QACF;AAAA,MACF,OAAO;AACL,iBAAS,aAAa,OAAO,oBAAoB,IAAI,GAAG;AACtD,eAAK,KAAK,IAAI,UAAU,YAAY,GAAG,KAAK,SAAS,CAAC;AAAA,QACxD;AAAA,MACF;AAEA,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AAAA,EAEA,QAAQ;AACN,SAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,aAAuB;AACzB,WAAO,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAoB;AACtB,WAAO,MAAM,KAAK,KAAK,KAAK,OAAO,CAAC;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,WAA4B;AAClC,WAAO,KAAK,UAAU,SAAS,IAAI;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,WAA2B;AACnC,QAAI,CAAC,MAAM,OAAO,IAAI,UAAU,YAAY,EAAE,MAAM,GAAG;AAEvD,aAAS,CAAC,KAAK,KAAK,KAAK,MAAM;AAC7B,UAAI,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,GAAG;AAC1B,WACG,MAAM,QAAQ,MAAM,OAAO,SAAS,SACpC,MAAM,WAAW,MAAM,OAAO,YAAY,MAC3C;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,YAAqC;AAChD,QAAI,SAAS,WACV,IAAI,CAAC,cAAc,CAAC,WAAW,KAAK,UAAU,SAAS,CAAC,CAAU,EAClE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAE7B,QAAI,QAAQ,OAAO,CAAC;AAEpB,WAAO,UAAU,UAAa,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAkC;AACpC,WAAO,KAAK,KAAK,IAAI,UAAU,YAAY,CAAC,KAAK;AAAA,EACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAAmB,SAAS,GAAS;AACvC,SAAK,KAAK,IAAI,UAAU,YAAY,GAAG,MAAM;AAC7C,SAAK,MAAM;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,WAAyB;AAC9B,SAAK,KAAK,OAAO,UAAU,YAAY,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,WAA4B;AAC9B,WAAO,KAAK,KAAK,IAAI,UAAU,YAAY,CAAC;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,KAAK,MAAM;AAAA,EAClB;AAAA,EAEA,UAA8C;AAC5C,WAAO,KAAK,KAAK,QAAQ;AAAA,EAC3B;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAwC;AACtD,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,QACE,UACA,SACM;AACN,aAAS,CAAC,WAAW,MAAM,KAAK,MAAM;AACpC,eAAS,KAAK,SAAS,WAAW,QAAQ,IAAI;AAAA,IAChD;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,QAAI,QAAkB,CAAC;AAEvB,aAAS,CAAC,WAAW,MAAM,KAAK,KAAK,MAAM;AACzC,YAAM,KAAK,GAAG,SAAS,GAAG,WAAW,IAAI,KAAK,MAAM,MAAM,EAAE,EAAE;AAAA,IAChE;AAEA,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AACF;;;ACtLO,IAAM,iBAAN,MAAwE;AAAA,EAC7E;AAAA,EAEA,YAAY,MAAoC;AAC9C,SAAK,OAAO,oBAAI,IAAI;AAEpB,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,iBAAS,SAAS,KAAK,MAAM,SAAS,GAAG;AACvC,cAAI,SAAS,YAAY,KAAK;AAC9B,cAAI,OAAO,SAAS;AAAG;AAEvB,cAAI,WAAW,OAAO,CAAC,EAAE,CAAC;AAC1B,cAAI,SAAS;AAEb,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,gBAAI,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC;AAC3B,gBAAI,QAAQ,KAAK;AACf,uBAAS,OAAO,KAAK;AACrB;AAAA,YACF;AAAA,UACF;AAEA,eAAK,KAAK,IAAI,SAAS,YAAY,GAAG,MAAM;AAAA,QAC9C;AAAA,MACF,WAAW,WAAW,IAAI,GAAG;AAC3B,iBAAS,SAAS,MAAM;AACtB,cAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAK,KAAK,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;AAAA,UAChD,OAAO;AACL,iBAAK,KAAK,IAAI,MAAM,YAAY,GAAG,CAAC;AAAA,UACtC;AAAA,QACF;AAAA,MACF,OAAO;AACL,iBAAS,YAAY,OAAO,oBAAoB,IAAI,GAAG;AACrD,eAAK,KAAK,IAAI,SAAS,YAAY,GAAG,KAAK,QAAQ,CAAC;AAAA,QACtD;AAAA,MACF;AAEA,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AAAA,EAEA,QAAQ;AACN,SAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAsB;AACxB,WAAO,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAoB;AACtB,WAAO,MAAM,KAAK,KAAK,KAAK,OAAO,CAAC;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,UAA2B;AACjC,WAAO,SAAS,YAAY,MAAM,cAAc,KAAK,UAAU,QAAQ,IAAI;AAAA,EAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,UAAU,UAA0B;AAClC,QAAI,QAAQ,SAAS,YAAY;AAEjC,aAAS,CAAC,KAAK,MAAM,KAAK,MAAM;AAC9B,UAAI,QAAQ,SAAS,QAAQ,OAAO,UAAU,KAAK;AACjD,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,WAAoC;AAC/C,QAAI,SAAS,UACV,IAAI,CAAC,aAAa,CAAC,UAAU,KAAK,UAAU,QAAQ,CAAC,CAAU,EAC/D,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAE7B,QAAI,QAAQ,OAAO,CAAC;AAEpB,WAAO,UAAU,UAAa,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAAiC;AACnC,WAAO,KAAK,KAAK,IAAI,SAAS,YAAY,CAAC,KAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAAkB,SAAS,GAAS;AACtC,SAAK,KAAK,IAAI,SAAS,YAAY,GAAG,MAAM;AAC5C,SAAK,MAAM;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,UAAwB;AAC7B,SAAK,KAAK,OAAO,SAAS,YAAY,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAA2B;AAC7B,WAAO,KAAK,KAAK,IAAI,SAAS,YAAY,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,KAAK,MAAM;AAAA,EAClB;AAAA,EAEA,UAA8C;AAC5C,WAAO,KAAK,KAAK,QAAQ;AAAA,EAC3B;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAwC;AACtD,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,QACE,UACA,SACM;AACN,aAAS,CAAC,UAAU,MAAM,KAAK,MAAM;AACnC,eAAS,KAAK,SAAS,UAAU,QAAQ,IAAI;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,QAAI,QAAkB,CAAC;AAEvB,aAAS,CAAC,UAAU,MAAM,KAAK,KAAK,MAAM;AACxC,YAAM,KAAK,GAAG,QAAQ,GAAG,WAAW,IAAI,KAAK,MAAM,MAAM,EAAE,EAAE;AAAA,IAC/D;AAEA,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AACF;;;AClLO,IAAM,iBAAN,MAAwE;AAAA,EAC7E;AAAA,EAEA,YAAY,MAAoC;AAC9C,SAAK,OAAO,oBAAI,IAAI;AAEpB,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,iBAAS,SAAS,KAAK,MAAM,SAAS,GAAG;AACvC,cAAI,SAAS,YAAY,KAAK;AAC9B,cAAI,OAAO,SAAS;AAAG;AAEvB,cAAI,WAAW,OAAO,CAAC,EAAE,CAAC;AAC1B,cAAI,SAAS;AAEb,mBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,gBAAI,CAAC,KAAK,KAAK,IAAI,OAAO,CAAC;AAC3B,gBAAI,QAAQ,KAAK;AACf,uBAAS,OAAO,KAAK;AACrB;AAAA,YACF;AAAA,UACF;AAEA,eAAK,KAAK,IAAI,SAAS,YAAY,GAAG,MAAM;AAAA,QAC9C;AAAA,MACF,WAAW,WAAW,IAAI,GAAG;AAC3B,iBAAS,SAAS,MAAM;AACtB,cAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,iBAAK,KAAK,IAAI,MAAM,CAAC,EAAE,YAAY,GAAG,MAAM,CAAC,CAAC;AAAA,UAChD,OAAO;AACL,iBAAK,KAAK,IAAI,MAAM,YAAY,GAAG,CAAC;AAAA,UACtC;AAAA,QACF;AAAA,MACF,OAAO;AACL,iBAAS,YAAY,OAAO,oBAAoB,IAAI,GAAG;AACrD,eAAK,KAAK,IAAI,SAAS,YAAY,GAAG,KAAK,QAAQ,CAAC;AAAA,QACtD;AAAA,MACF;AAEA,WAAK,MAAM;AAAA,IACb;AAAA,EACF;AAAA,EAEA,QAAQ;AACN,SAAK,OAAO,IAAI,IAAI,CAAC,GAAG,KAAK,IAAI,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAAA,EAChE;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,YAAsB;AACxB,WAAO,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,UAAoB;AACtB,WAAO,MAAM,KAAK,KAAK,KAAK,OAAO,CAAC;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QAAQ,UAA2B;AACjC,WAAO,KAAK,UAAU,QAAQ,IAAI;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,UAAU,UAA0B;AAClC,QAAI,CAAC,MAAM,OAAO,IAAI,SAAS,YAAY,EAAE,MAAM,GAAG;AAEtD,aAAS,CAAC,KAAK,KAAK,KAAK,MAAM;AAC7B,UAAI,CAAC,GAAG,CAAC,IAAI,IAAI,MAAM,GAAG;AAC1B,WACG,MAAM,QAAQ,MAAM,OAAO,SAAS,SACpC,MAAM,WAAW,MAAM,UAAa,YAAY,SACjD;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,aAAa,WAAoC;AAC/C,QAAI,SAAS,UACV,IAAI,CAAC,aAAa,CAAC,UAAU,KAAK,UAAU,QAAQ,CAAC,CAAU,EAC/D,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAE7B,QAAI,QAAQ,OAAO,CAAC;AAEpB,WAAO,UAAU,UAAa,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,UAAiC;AACnC,WAAO,KAAK,KAAK,IAAI,SAAS,YAAY,CAAC,KAAK;AAAA,EAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAAkB,SAAS,GAAS;AACtC,SAAK,KAAK,IAAI,SAAS,YAAY,GAAG,MAAM;AAC5C,SAAK,MAAM;AAAA,EACb;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,UAAwB;AAC7B,SAAK,KAAK,OAAO,SAAS,YAAY,CAAC;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,UAA2B;AAC7B,WAAO,KAAK,KAAK,IAAI,SAAS,YAAY,CAAC;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,KAAK,MAAM;AAAA,EAClB;AAAA,EAEA,UAA8C;AAC5C,WAAO,KAAK,KAAK,QAAQ;AAAA,EAC3B;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAwC;AACtD,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,QACE,UACA,SACM;AACN,aAAS,CAAC,UAAU,MAAM,KAAK,MAAM;AACnC,eAAS,KAAK,SAAS,UAAU,QAAQ,IAAI;AAAA,IAC/C;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,QAAI,QAAkB,CAAC;AAEvB,aAAS,CAAC,UAAU,MAAM,KAAK,KAAK,MAAM;AACxC,YAAM,KAAK,GAAG,QAAQ,GAAG,WAAW,IAAI,KAAK,MAAM,MAAM,EAAE,EAAE;AAAA,IAC/D;AAEA,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AACF;;;ACtCO,IAAM,eAAN,MAA4D;AAAA,EACjE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAkC;AAC5C,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,SAAS,YAAY,MAAM,GAAG;AAClC,YAAI,OAAO,SAAS,GAAG;AACrB,mBAAS,CAAC,MAAM,KAAK,KAAK,QAAQ;AAChC,oBAAQ,MAAM;AAAA,cACZ,KAAK;AACH,qBAAK,SAAS,OAAO,KAAK;AAC1B;AAAA,cACF,KAAK;AACH,qBAAK,WAAW,OAAO,KAAK;AAC5B;AAAA,cACF,KAAK;AACH,qBAAK,WAAW,OAAO,KAAK;AAC5B;AAAA,cACF,KAAK;AACH,qBAAK,UAAU,OAAO,KAAK;AAC3B;AAAA,cACF,KAAK;AACH,qBAAK,UAAU;AACf;AAAA,cACF,KAAK;AACH,qBAAK,UAAU;AACf;AAAA,cACF,KAAK;AACH,qBAAK,cAAc;AACnB;AAAA,cACF,KAAK;AACH,qBAAK,eAAe;AACpB;AAAA,cACF,KAAK;AACH,qBAAK,iBAAiB;AACtB;AAAA,cACF,KAAK;AACH,qBAAK,kBAAkB;AACvB;AAAA,cACF,KAAK;AACH,qBAAK,iBAAiB;AACtB;AAAA,cACF,KAAK;AACH,qBAAK,UAAU;AACf;AAAA,cACF,KAAK;AACH,qBAAK,SAAS;AACd;AAAA,cACF,KAAK;AACH,qBAAK,YAAY;AACjB;AAAA,cACF,KAAK;AACH,qBAAK,uBAAuB,OAAO,KAAK;AACxC;AAAA,cACF,KAAK;AACH,qBAAK,eAAe,OAAO,KAAK;AAChC;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,SAAS,KAAK;AACnB,aAAK,WAAW,KAAK;AACrB,aAAK,WAAW,KAAK;AACrB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,KAAK;AACpB,aAAK,UAAU,KAAK;AACpB,aAAK,cAAc,KAAK;AACxB,aAAK,eAAe,KAAK;AACzB,aAAK,iBAAiB,KAAK;AAC3B,aAAK,kBAAkB,KAAK;AAC5B,aAAK,iBAAiB,KAAK;AAC3B,aAAK,UAAU,KAAK;AACpB,aAAK,SAAS,KAAK;AACnB,aAAK,YAAY,KAAK;AACtB,aAAK,uBAAuB,KAAK;AACjC,aAAK,eAAe,KAAK;AAAA,MAC3B;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,QAAI,QAAQ,CAAC;AAEb,QAAI,KAAK,QAAQ;AACf,YAAM,KAAK,QAAQ;AAAA,IACrB;AACA,QAAI,KAAK,SAAS;AAChB,YAAM,KAAK,SAAS;AAAA,IACtB;AACA,QAAI,OAAO,KAAK,WAAW,UAAU;AACnC,YAAM,KAAK,WAAW,KAAK,MAAM,EAAE;AAAA,IACrC;AACA,QAAI,OAAO,KAAK,YAAY,UAAU;AACpC,YAAM,KAAK,YAAY,KAAK,OAAO,EAAE;AAAA,IACvC;AACA,QAAI,KAAK,SAAS;AAChB,YAAM,KAAK,UAAU;AAAA,IACvB;AACA,QAAI,KAAK,SAAS;AAChB,YAAM,KAAK,UAAU;AAAA,IACvB;AACA,QAAI,KAAK,aAAa;AACpB,YAAM,KAAK,cAAc;AAAA,IAC3B;AACA,QAAI,KAAK,cAAc;AACrB,YAAM,KAAK,gBAAgB;AAAA,IAC7B;AACA,QAAI,KAAK,gBAAgB;AACvB,YAAM,KAAK,iBAAiB;AAAA,IAC9B;AACA,QAAI,KAAK,iBAAiB;AACxB,YAAM,KAAK,kBAAkB;AAAA,IAC/B;AACA,QAAI,KAAK,gBAAgB;AACvB,YAAM,KAAK,iBAAiB;AAAA,IAC9B;AACA,QAAI,KAAK,WAAW;AAClB,YAAM,KAAK,WAAW;AAAA,IACxB;AACA,QAAI,OAAO,KAAK,yBAAyB,UAAU;AACjD,YAAM,KAAK,0BAA0B,KAAK,oBAAoB,EAAE;AAAA,IAClE;AACA,QAAI,OAAO,KAAK,iBAAiB,UAAU;AACzC,YAAM,KAAK,kBAAkB,KAAK,YAAY,EAAE;AAAA,IAClD;AACA,QAAI,OAAO,KAAK,aAAa,UAAU;AACrC,YAAM,KAAK,aAAa,KAAK,QAAQ,EAAE;AAAA,IACzC;AACA,QAAI,OAAO,KAAK,aAAa,UAAU;AACrC,YAAM,KAAK,aAAa,KAAK,QAAQ,EAAE;AAAA,IACzC;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;;;ACxRO,IAAM,qBAAN,MAAwE;AAAA,EAC7E;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAwC;AAClD,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,SAAS,YAAY,IAAI;AAC7B,YAAI,OAAO,SAAS,GAAG;AACrB,eAAK,OAAO,OAAO,CAAC,EAAE,CAAC;AACvB,mBAAS,CAAC,MAAM,KAAK,KAAK,OAAO,MAAM,CAAC,GAAG;AACzC,gBAAI,SAAS,YAAY;AACvB,mBAAK,WAAW;AAAA,YAClB,WAAW,SAAS,aAAa;AAC/B,mBAAK,gBAAgB;AAAA,YACvB,WAAW,SAAS,QAAQ;AAC1B,mBAAK,OAAO;AAAA,YACd;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,WAAW,KAAK;AACrB,aAAK,gBAAgB,KAAK;AAC1B,aAAK,OAAO,KAAK;AACjB,aAAK,OAAO,KAAK;AAAA,MACnB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,oBAAwC;AAC1C,QAAI,gBAAgB,KAAK;AACzB,QAAI,eAAe;AACjB,UAAI,kBAAkB,oBAAoB,aAAa;AACvD,UAAI;AAAiB,eAAO;AAAA,IAC9B;AAEA,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,WAAmB;AACjB,QAAI,CAAC,KAAK,MAAM;AACd,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,CAAC,KAAK,IAAI;AAEtB,QAAI,KAAK,MAAM;AACb,YAAM,KAAK,QAAQ,MAAM,KAAK,IAAI,CAAC,EAAE;AAAA,IACvC;AACA,QAAI,KAAK,UAAU;AACjB,YAAM,KAAK,YAAY,MAAM,KAAK,QAAQ,CAAC,EAAE;AAAA,IAC/C;AACA,QAAI,KAAK,eAAe;AACtB,YAAM,KAAK,aAAa,MAAM,KAAK,aAAa,CAAC,EAAE;AAAA,IACrD;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;AAEA,SAAS,oBAAoB,OAA8B;AACzD,MAAI,QAAQ,MAAM,MAAM,yBAAyB;AACjD,MAAI,CAAC;AAAO,WAAO;AAEnB,MAAI,CAAC,EAAE,SAAS,EAAE,eAAe,IAAI;AAErC,MAAI,kBAAkB,cAAc,eAAe;AAEnD,MAAI;AACF,QAAI,UAAU,IAAI,YAAY,OAAO;AACrC,QAAI,QAAQ,IAAI,WAAW,gBAAgB,MAAM,EAAE,EAAE,IAAI,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC;AACtF,WAAO,QAAQ,OAAO,KAAK;AAAA,EAC7B,SAAS,OAAO;AACd,YAAQ,KAAK,0CAA0C,OAAO,KAAK,KAAK;AACxE,WAAO;AAAA,EACT;AACF;AAEA,SAAS,cAAc,OAAuB;AAC5C,SAAO,MAAM,QAAQ,OAAO,GAAG,EAAE,QAAQ,sBAAsB,CAAC,GAAG,QAAQ;AACzE,WAAO,OAAO,aAAa,SAAS,KAAK,EAAE,CAAC;AAAA,EAC9C,CAAC;AACH;;;AC7FO,IAAM,cAAN,MAA0D;AAAA,EAC/D;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAAiC;AAC3C,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,SAAS,YAAY,IAAI;AAC7B,YAAI,OAAO,SAAS,GAAG;AACrB,eAAK,YAAY,OAAO,CAAC,EAAE,CAAC;AAC5B,mBAAS,CAAC,MAAM,KAAK,KAAK,OAAO,MAAM,CAAC,GAAG;AACzC,gBAAI,SAAS,YAAY;AACvB,mBAAK,WAAW;AAAA,YAClB,WAAW,SAAS,WAAW;AAC7B,mBAAK,UAAU;AAAA,YACjB;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,WAAW,KAAK;AACrB,aAAK,UAAU,KAAK;AACpB,aAAK,YAAY,KAAK;AAAA,MACxB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,QAAI,CAAC,KAAK,WAAW;AACnB,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,CAAC,KAAK,SAAS;AAE3B,QAAI,KAAK,SAAS;AAChB,YAAM,KAAK,WAAW,MAAM,KAAK,OAAO,CAAC,EAAE;AAAA,IAC7C;AACA,QAAI,KAAK,UAAU;AACjB,YAAM,KAAK,YAAY,MAAM,KAAK,QAAQ,CAAC,EAAE;AAAA,IAC/C;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;;;AC7DO,IAAM,SAAN,MAAgE;AAAA,EACrE;AAAA,EAEA,YAAY,MAA4B;AACtC,SAAK,OAAO,oBAAI,IAAI;AACpB,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,SAAS,YAAY,IAAI;AAC7B,iBAAS,CAAC,MAAM,KAAK,KAAK,QAAQ;AAChC,eAAK,KAAK,IAAI,MAAM,SAAS,EAAE;AAAA,QACjC;AAAA,MACF,WAAW,WAAW,IAAI,GAAG;AAC3B,iBAAS,CAAC,MAAM,KAAK,KAAK,MAAM;AAC9B,eAAK,KAAK,IAAI,MAAM,KAAK;AAAA,QAC3B;AAAA,MACF,OAAO;AACL,iBAAS,QAAQ,OAAO,oBAAoB,IAAI,GAAG;AACjD,eAAK,KAAK,IAAI,MAAM,KAAK,IAAI,CAAC;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,QAAkB;AACpB,WAAO,MAAM,KAAK,KAAK,KAAK,KAAK,CAAC;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,SAAmB;AACrB,WAAO,MAAM,KAAK,KAAK,KAAK,OAAO,CAAC;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,IAAI,OAAe;AACjB,WAAO,KAAK,KAAK;AAAA,EACnB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAA6B;AAC/B,WAAO,KAAK,KAAK,IAAI,IAAI,KAAK;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAAc,OAAqB;AACrC,SAAK,KAAK,IAAI,MAAM,KAAK;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,OAAO,MAAoB;AACzB,SAAK,KAAK,OAAO,IAAI;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAAuB;AACzB,WAAO,KAAK,KAAK,IAAI,IAAI;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAKA,QAAc;AACZ,SAAK,KAAK,MAAM;AAAA,EAClB;AAAA,EAEA,UAA8C;AAC5C,WAAO,KAAK,KAAK,QAAQ;AAAA,EAC3B;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAwC;AACtD,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,QAAQ,UAAiE,SAAqB;AAC5F,aAAS,CAAC,MAAM,KAAK,KAAK,MAAM;AAC9B,eAAS,KAAK,SAAS,MAAM,OAAO,IAAI;AAAA,IAC1C;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,QAAI,QAAkB,CAAC;AAEvB,aAAS,CAAC,MAAM,KAAK,KAAK,KAAK,MAAM;AACnC,YAAM,KAAK,GAAG,IAAI,IAAI,MAAM,KAAK,CAAC,EAAE;AAAA,IACtC;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;;;ACzGO,IAAM,cAAN,MAA0D;AAAA,EAC/D,OAAiB,CAAC;AAAA,EAElB,YAAY,MAA4C;AACtD,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,aAAK,KAAK,KAAK,GAAG,KAAK,MAAM,SAAS,EAAE,IAAI,SAAS,CAAC;AAAA,MACxD,WAAW,MAAM,QAAQ,IAAI,GAAG;AAC9B,aAAK,KAAK,KAAK,GAAG,KAAK,IAAI,SAAS,CAAC;AAAA,MACvC,OAAO;AACL,aAAK,KAAK,KAAK,GAAG,KAAK,KAAK,IAAI,SAAS,CAAC;AAAA,MAC5C;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,KAAsB;AACxB,WAAO,KAAK,KAAK,SAAS,UAAU,GAAG,CAAC;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,QAAQ,KAAsB;AAC5B,WAAO,KAAK,IAAI,GAAG,KAAK,KAAK,KAAK,SAAS,GAAG;AAAA,EAChD;AAAA,EAEA,WAAW;AACT,WAAO,KAAK,KAAK,KAAK,IAAI;AAAA,EAC5B;AACF;;;ACcO,IAAM,YAAN,MAAsD;AAAA,EAC3D;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAEA,YAAY,MAA+B;AACzC,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,SAAS,YAAY,IAAI;AAC7B,YAAI,OAAO,SAAS,GAAG;AACrB,eAAK,OAAO,OAAO,CAAC,EAAE,CAAC;AACvB,eAAK,QAAQ,OAAO,CAAC,EAAE,CAAC;AAExB,mBAAS,CAAC,KAAK,KAAK,KAAK,OAAO,MAAM,CAAC,GAAG;AACxC,oBAAQ,IAAI,YAAY,GAAG;AAAA,cACzB,KAAK;AACH,qBAAK,SAAS;AACd;AAAA,cACF,KAAK,WAAW;AACd,oBAAI,OAAO,UAAU,UAAU;AAC7B,sBAAI,OAAO,IAAI,KAAK,KAAK;AACzB,sBAAI,YAAY,IAAI,GAAG;AACrB,yBAAK,UAAU;AAAA,kBACjB;AAAA,gBACF;AACA;AAAA,cACF;AAAA,cACA,KAAK;AACH,qBAAK,WAAW;AAChB;AAAA,cACF,KAAK,WAAW;AACd,oBAAI,OAAO,UAAU,UAAU;AAC7B,sBAAI,IAAI,SAAS,OAAO,EAAE;AAC1B,sBAAI,CAAC,MAAM,CAAC;AAAG,yBAAK,SAAS;AAAA,gBAC/B;AACA;AAAA,cACF;AAAA,cACA,KAAK;AACH,qBAAK,OAAO;AACZ;AAAA,cACF,KAAK;AACH,oBAAI,OAAO,UAAU,YAAY,mBAAmB,KAAK,KAAK,GAAG;AAC/D,uBAAK,WAAW,WAAW,KAAK;AAAA,gBAClC;AACA;AAAA,cACF,KAAK;AACH,qBAAK,SAAS;AACd;AAAA,YACJ;AAAA,UACF;AAAA,QACF;AAAA,MACF,OAAO;AACL,aAAK,SAAS,KAAK;AACnB,aAAK,UAAU,KAAK;AACpB,aAAK,WAAW,KAAK;AACrB,aAAK,SAAS,KAAK;AACnB,aAAK,OAAO,KAAK;AACjB,aAAK,OAAO,KAAK;AACjB,aAAK,WAAW,KAAK;AACrB,aAAK,SAAS,KAAK;AACnB,aAAK,QAAQ,KAAK;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,WAAmB;AACjB,QAAI,CAAC,KAAK,MAAM;AACd,aAAO;AAAA,IACT;AAEA,QAAI,QAAQ,CAAC,GAAG,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC,EAAE;AAEtD,QAAI,KAAK,QAAQ;AACf,YAAM,KAAK,UAAU,KAAK,MAAM,EAAE;AAAA,IACpC;AACA,QAAI,KAAK,MAAM;AACb,YAAM,KAAK,QAAQ,KAAK,IAAI,EAAE;AAAA,IAChC;AACA,QAAI,KAAK,SAAS;AAChB,YAAM,KAAK,WAAW,KAAK,QAAQ,YAAY,CAAC,EAAE;AAAA,IACpD;AACA,QAAI,KAAK,QAAQ;AACf,YAAM,KAAK,WAAW,KAAK,MAAM,EAAE;AAAA,IACrC;AACA,QAAI,KAAK,QAAQ;AACf,YAAM,KAAK,QAAQ;AAAA,IACrB;AACA,QAAI,KAAK,UAAU;AACjB,YAAM,KAAK,UAAU;AAAA,IACvB;AACA,QAAI,KAAK,UAAU;AACjB,YAAM,KAAK,YAAY,KAAK,QAAQ,EAAE;AAAA,IACxC;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AACF;;;AC7KA,IAAM,6BAAqD;AAAA,EACzD,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,GAAG;AAAA,EACH,KAAK;AACP;AAEO,SAAS,oBAAoB,MAAsB;AACxD,SAAO,KACJ,YAAY,EACZ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,2BAA2B,IAAI,KAAK,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,KAAK,MAAM,CAAC,CAAC,EAC9F,KAAK,GAAG;AACb;;;ACuGA,IAAM,OAAO;AAEb,IAAM,YAAY;AAClB,IAAM,oBAAoB;AAC1B,IAAM,oBAAoB;AAC1B,IAAM,kBAAkB;AACxB,IAAM,SAAS;AACf,IAAM,kBAAkB;AACxB,IAAM,gBAAgB;AACtB,IAAM,wBAAwB;AAC9B,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAC3B,IAAM,mBAAmB;AACzB,IAAM,iBAAiB;AACvB,IAAM,YAAY;AAClB,IAAM,UAAU;AAChB,IAAM,UAAU;AAChB,IAAM,aAAa;AACnB,IAAM,UAAU;AAChB,IAAM,qBAAqB;AAC3B,IAAM,iBAAiB;AACvB,IAAM,uBAAuB;AAC7B,IAAM,kBAAkB;AACxB,IAAM,cAAc;AACpB,IAAM,aAAa;AACnB,IAAM,eAAe;AASd,IAAM,eAAN,MAAM,sBAAqB,QAAQ;AAAA,EACxC;AAAA,EACA,cAAsC,CAAC;AAAA,EAEvC,YAAY,MAA4C;AACtD,UAAM;AAEN,SAAK,OAAO,oBAAI,IAAI;AAEpB,QAAI,MAAM;AACR,UAAI,OAAO,SAAS,UAAU;AAC5B,YAAI,QAAQ,KAAK,MAAM,IAAI;AAC3B,iBAAS,QAAQ,OAAO;AACtB,cAAI,QAAQ,KAAK,MAAM,eAAe;AACtC,cAAI,OAAO;AACT,iBAAK,OAAO,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC;AAAA,UAC9C;AAAA,QACF;AAAA,MACF,WAAW,WAAW,IAAI,GAAG;AAC3B,iBAAS,CAAC,MAAM,KAAK,KAAK,MAAM;AAC9B,eAAK,OAAO,MAAM,KAAK;AAAA,QACzB;AAAA,MACF,WAAW,OAAO,SAAS,UAAU;AACnC,iBAAS,QAAQ,OAAO,oBAAoB,IAAI,GAAG;AACjD,cAAI,QAAQ,KAAK,IAAI;AAErB,cAAI,aAAa,OAAO,yBAAyB,cAAa,WAAW,IAAI;AAC7E,cAAI,YAAY,KAAK;AACnB,uBAAW,IAAI,KAAK,MAAM,KAAK;AAAA,UACjC,OAAO;AACL,iBAAK,IAAI,MAAM,MAAM,SAAS,CAAC;AAAA,UACjC;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,MAAc,OAAqB;AACxC,QAAI,MAAM,KAAK,YAAY;AAC3B,QAAI,QAAQ,cAAc;AACxB,WAAK,YAAY,KAAK,KAAK;AAAA,IAC7B,OAAO;AACL,UAAI,gBAAgB,KAAK,KAAK,IAAI,GAAG;AACrC,WAAK,KAAK,IAAI,KAAK,gBAAgB,GAAG,aAAa,KAAK,KAAK,KAAK,KAAK;AAAA,IACzE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,MAAoB;AACzB,QAAI,MAAM,KAAK,YAAY;AAC3B,QAAI,QAAQ,cAAc;AACxB,WAAK,cAAc,CAAC;AAAA,IACtB,OAAO;AACL,WAAK,KAAK,OAAO,GAAG;AAAA,IACtB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAA6B;AAC/B,QAAI,MAAM,KAAK,YAAY;AAC3B,QAAI,QAAQ,cAAc;AACxB,aAAO,KAAK,aAAa,EAAE,KAAK,IAAI;AAAA,IACtC,OAAO;AACL,UAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7B,UAAI,OAAO,UAAU,UAAU;AAC7B,eAAO;AAAA,MACT,WAAW,SAAS,MAAM;AACxB,YAAI,MAAM,MAAM,SAAS;AACzB,eAAO,QAAQ,KAAK,OAAO;AAAA,MAC7B,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,eAAyB;AACvB,WAAO,KAAK,YAAY,IAAI,CAAC,MAAO,OAAO,MAAM,WAAW,IAAI,EAAE,SAAS,CAAE;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,IAAI,MAAuB;AACzB,QAAI,MAAM,KAAK,YAAY;AAC3B,WAAO,QAAQ,eAAe,KAAK,YAAY,SAAS,IAAI,KAAK,IAAI,GAAG,KAAK;AAAA,EAC/E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,IAAI,MAAc,OAAqB;AACrC,QAAI,MAAM,KAAK,YAAY;AAC3B,QAAI,QAAQ,cAAc;AACxB,WAAK,cAAc,CAAC,KAAK;AAAA,IAC3B,OAAO;AACL,WAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC1B;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,CAAC,OAAiC;AAChC,aAAS,CAAC,GAAG,KAAK;AAAM,YAAM;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,CAAC,SAAmC;AAClC,aAAS,CAAC,EAAE,KAAK,KAAK;AAAM,YAAM;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,CAAC,UAA8C;AAC7C,aAAS,CAAC,GAAG,KAAK,KAAK,MAAM;AAC3B,UAAI,MAAM,KAAK,IAAI,GAAG;AACtB,UAAI;AAAK,cAAM,CAAC,KAAK,GAAG;AAAA,IAC1B;AAEA,aAAS,SAAS,KAAK,aAAa,GAAG;AACrC,YAAM,CAAC,cAAc,KAAK;AAAA,IAC5B;AAAA,EACF;AAAA,EAEA,CAAC,OAAO,QAAQ,IAAwC;AACtD,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,QACE,UACA,SACM;AACN,aAAS,CAAC,KAAK,KAAK,KAAK,MAAM;AAC7B,eAAS,KAAK,SAAS,OAAO,KAAK,IAAI;AAAA,IACzC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,WAAmB;AACjB,QAAI,QAAkB,CAAC;AAEvB,aAAS,CAAC,KAAK,KAAK,KAAK,MAAM;AAC7B,YAAM,KAAK,GAAG,oBAAoB,GAAG,CAAC,KAAK,KAAK,EAAE;AAAA,IACpD;AAEA,WAAO,MAAM,KAAK,IAAI;AAAA,EACxB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,SAAiB;AACnB,WAAO,KAAK,gBAAgB,WAAW,MAAM;AAAA,EAC/C;AAAA,EAEA,IAAI,OAAO,OAA+C;AACxD,SAAK,gBAAgB,WAAW,QAAQ,KAAK;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,iBAAiC;AACnC,WAAO,KAAK,gBAAgB,mBAAmB,cAAc;AAAA,EAC/D;AAAA,EAEA,IAAI,eAAe,OAAuD;AACxE,SAAK,gBAAgB,mBAAmB,gBAAgB,KAAK;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,iBAAiC;AACnC,WAAO,KAAK,gBAAgB,mBAAmB,cAAc;AAAA,EAC/D;AAAA,EAEA,IAAI,eAAe,OAAuD;AACxE,SAAK,gBAAgB,mBAAmB,gBAAgB,KAAK;AAAA,EAC/D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,eAA8B;AAChC,WAAO,KAAK,gBAAgB,eAAe;AAAA,EAC7C;AAAA,EAEA,IAAI,aAAa,OAAkC;AACjD,SAAK,gBAAgB,iBAAiB,KAAK;AAAA,EAC7C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,MAAqB;AACvB,WAAO,KAAK,gBAAgB,MAAM;AAAA,EACpC;AAAA,EAEA,IAAI,IAAI,OAA2C;AACjD,SAAK,gBAAgB,QAAQ,KAAK;AAAA,EACpC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,eAA6B;AAC/B,WAAO,KAAK,gBAAgB,iBAAiB,YAAY;AAAA,EAC3D;AAAA,EAEA,IAAI,aAAa,OAAqD;AACpE,SAAK,gBAAgB,iBAAiB,cAAc,KAAK;AAAA,EAC3D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,aAA4B;AAC9B,WAAO,KAAK,gBAAgB,aAAa;AAAA,EAC3C;AAAA,EAEA,IAAI,WAAW,OAAkC;AAC/C,SAAK,gBAAgB,eAAe,KAAK;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,qBAAyC;AAC3C,WAAO,KAAK,gBAAgB,uBAAuB,kBAAkB;AAAA,EACvE;AAAA,EAEA,IAAI,mBAAmB,OAA2D;AAChF,SAAK,gBAAgB,uBAAuB,oBAAoB,KAAK;AAAA,EACvE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,kBAAiC;AACnC,WAAO,KAAK,gBAAgB,kBAAkB;AAAA,EAChD;AAAA,EAEA,IAAI,gBAAgB,OAA6C;AAC/D,SAAK,gBAAgB,oBAAoB,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAYA,IAAI,kBAAiC;AACnC,WAAO,KAAK,gBAAgB,kBAAkB;AAAA,EAChD;AAAA,EAEA,IAAI,gBAAgB,OAA6C;AAC/D,SAAK,gBAAgB,oBAAoB,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK;AAAA,EAC1F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,gBAA+B;AACjC,WAAO,KAAK,gBAAgB,gBAAgB;AAAA,EAC9C;AAAA,EAEA,IAAI,cAAc,OAA2C;AAC3D,SAAK,gBAAgB,kBAAkB,KAAK;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,cAA2B;AAC7B,WAAO,KAAK,gBAAgB,gBAAgB,WAAW;AAAA,EACzD;AAAA,EAEA,IAAI,YAAY,OAAoD;AAClE,SAAK,gBAAgB,gBAAgB,aAAa,KAAK;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,SAAiB;AACnB,WAAO,KAAK,gBAAgB,WAAW,MAAM;AAAA,EAC/C;AAAA,EAEA,IAAI,OAAO,OAA+C;AACxD,SAAK,gBAAgB,WAAW,QAAQ,KAAK;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,OAAoB;AACtB,WAAO,KAAK,cAAc,OAAO;AAAA,EACnC;AAAA,EAEA,IAAI,KAAK,OAA6C;AACpD,SAAK,cAAc,SAAS,KAAK;AAAA,EACnC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,OAAsB;AACxB,WAAO,KAAK,gBAAgB,OAAO;AAAA,EACrC;AAAA,EAEA,IAAI,KAAK,OAAkC;AACzC,SAAK,gBAAgB,SAAS,OAAO,UAAU,WAAW,UAAU,KAAK,IAAI,KAAK;AAAA,EACpF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,UAAuB;AACzB,WAAO,KAAK,cAAc,UAAU;AAAA,EACtC;AAAA,EAEA,IAAI,QAAQ,OAA6C;AACvD,SAAK,cAAc,YAAY,KAAK;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,OAAsB;AACxB,WAAO,KAAK,gBAAgB,OAAO;AAAA,EACrC;AAAA,EAEA,IAAI,KAAK,OAAkC;AACzC,SAAK,gBAAgB,SAAS,KAAK;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,kBAA+B;AACjC,WAAO,KAAK,cAAc,kBAAkB;AAAA,EAC9C;AAAA,EAEA,IAAI,gBAAgB,OAA6C;AAC/D,SAAK,cAAc,oBAAoB,KAAK;AAAA,EAC9C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,cAA2B;AAC7B,WAAO,KAAK,gBAAgB,gBAAgB,WAAW;AAAA,EACzD;AAAA,EAEA,IAAI,YAAY,OAA+D;AAC7E,SAAK,gBAAgB,gBAAgB,aAAa,KAAK;AAAA,EACzD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,oBAAiC;AACnC,WAAO,KAAK,cAAc,oBAAoB;AAAA,EAChD;AAAA,EAEA,IAAI,kBAAkB,OAA6C;AACjE,SAAK,cAAc,sBAAsB,KAAK;AAAA,EAChD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,eAA4B;AAC9B,WAAO,KAAK,cAAc,eAAe;AAAA,EAC3C;AAAA,EAEA,IAAI,aAAa,OAA6C;AAC5D,SAAK,cAAc,iBAAiB,KAAK;AAAA,EAC3C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,WAA0B;AAC5B,WAAO,KAAK,gBAAgB,WAAW;AAAA,EACzC;AAAA,EAEA,IAAI,SAAS,OAAkC;AAC7C,SAAK,gBAAgB,aAAa,KAAK;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,IAAI,UAAyB;AAC3B,WAAO,KAAK,gBAAgB,UAAU;AAAA,EACxC;AAAA,EAEA,IAAI,QAAQ,OAAkC;AAC5C,SAAK,gBAAgB,YAAY,KAAK;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,IAAI,YAAyB;AAC3B,QAAI,aAAa,KAAK;AAEtB,aAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GAAG;AAC1C,UAAI,OAAO,WAAW,CAAC,MAAM,UAAU;AACrC,mBAAW,CAAC,IAAI,IAAI,UAAU,WAAW,CAAC,CAAC;AAAA,MAC7C;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,IAAI,UAAU,OAA+E;AAC3F,QAAI,SAAS,MAAM;AACjB,WAAK,eAAe,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG;AAAA,QAAI,CAAC,MAC/D,OAAO,MAAM,WAAW,IAAI,IAAI,UAAU,CAAC;AAAA,MAC7C;AAAA,IACF,OAAO;AACL,WAAK,cAAc,CAAC;AAAA,IACtB;AAAA,EACF;AAAA;AAAA,EAIA,gBAAuC,KAAa,MAAgC;AAClF,QAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAE7B,QAAI,UAAU,QAAW;AACvB,UAAI,OAAO,UAAU,UAAU;AAC7B,YAAIA,OAAM,IAAI,KAAK,KAAK;AACxB,aAAK,KAAK,IAAI,KAAKA,IAAG;AACtB,eAAOA;AAAA,MACT,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QAAI,MAAM,IAAI,KAAK;AACnB,SAAK,KAAK,IAAI,KAAK,GAAG;AACtB,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,KAAa,MAA0C,OAAkB;AACvF,QAAI,SAAS,MAAM;AACjB,WAAK,KAAK,IAAI,KAAK,OAAO,UAAU,WAAW,QAAQ,IAAI,KAAK,KAAK,CAAC;AAAA,IACxE,OAAO;AACL,WAAK,KAAK,OAAO,GAAG;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,cAAc,KAA0B;AACtC,QAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7B,WAAO,UAAU,SAAY,OAAO,IAAI,KAAK,KAAe;AAAA,EAC9D;AAAA,EAEA,cAAc,KAAa,OAAmD;AAC5E,QAAI,SAAS,MAAM;AACjB,WAAK,KAAK;AAAA,QACR;AAAA,QACA,OAAO,UAAU,WACb,SACC,OAAO,UAAU,WAAW,IAAI,KAAK,KAAK,IAAI,OAAO,YAAY;AAAA,MACxE;AAAA,IACF,OAAO;AACL,WAAK,KAAK,OAAO,GAAG;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,gBAAgB,KAA4B;AAC1C,QAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7B,WAAO,UAAU,SAAY,OAAO,SAAS,OAAiB,EAAE;AAAA,EAClE;AAAA,EAEA,gBAAgB,KAAa,OAAiD;AAC5E,QAAI,SAAS,MAAM;AACjB,WAAK,KAAK,IAAI,KAAK,OAAO,UAAU,WAAW,QAAQ,MAAM,SAAS,CAAC;AAAA,IACzE,OAAO;AACL,WAAK,KAAK,OAAO,GAAG;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,gBAAgB,KAA4B;AAC1C,QAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7B,WAAO,UAAU,SAAY,OAAQ;AAAA,EACvC;AAAA,EAEA,gBAAgB,KAAa,OAAwC;AACnE,QAAI,SAAS,MAAM;AACjB,WAAK,KAAK,IAAI,KAAK,KAAK;AAAA,IAC1B,OAAO;AACL,WAAK,KAAK,OAAO,GAAG;AAAA,IACtB;AAAA,EACF;AACF;",
  "names": ["obj"]
}
