{"version":3,"file":"index.mjs","sources":["../src/constants.ts","../src/jsx.ts","../src/vue.ts","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/utils.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/stringify.js","../node_modules/.pnpm/is-number@7.0.0/node_modules/is-number/index.js","../node_modules/.pnpm/to-regex-range@5.0.1/node_modules/to-regex-range/index.js","../node_modules/.pnpm/fill-range@7.1.1/node_modules/fill-range/index.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/parse.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/constants.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/index.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/compile.js","../node_modules/.pnpm/braces@3.0.3/node_modules/braces/lib/expand.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/constants.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/utils.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/picomatch.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/scan.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/lib/parse.js","../node_modules/.pnpm/picomatch@2.3.1/node_modules/picomatch/index.js","../node_modules/.pnpm/micromatch@4.0.8/node_modules/micromatch/index.js","../src/index.ts"],"sourcesContent":["export const HTML_TAGS = [\n  '!DOCTYPE',\n  'html',\n  'head',\n  'title',\n  'base',\n  'link',\n  'meta',\n  'style',\n  'noscript',\n  'script',\n  'template',\n  'body',\n  'h1',\n  'h2',\n  'h3',\n  'h4',\n  'h5',\n  'h6',\n  'p',\n  'hr',\n  'br',\n  'pre',\n  'blockquote',\n  'ol',\n  'ul',\n  'li',\n  'dl',\n  'dt',\n  'dd',\n  'figure',\n  'figcaption',\n  'div',\n  'main',\n  'span',\n  'a',\n  'em',\n  'strong',\n  'small',\n  'mark',\n  'abbr',\n  'cite',\n  'code',\n  'sub',\n  'sup',\n  'i',\n  'b',\n  'u',\n  's',\n  'kbd',\n  'var',\n  'time',\n  'progress',\n  'meter',\n  'wbr',\n  'bdi',\n  'bdo',\n  'header',\n  'footer',\n  'nav',\n  'section',\n  'article',\n  'aside',\n  'address',\n  'details',\n  'summary',\n  'dialog',\n  'form',\n  'input',\n  'textarea',\n  'button',\n  'select',\n  'option',\n  'optgroup',\n  'label',\n  'fieldset',\n  'legend',\n  'datalist',\n  'output',\n  'img',\n  'iframe',\n  'embed',\n  'object',\n  'param',\n  'video',\n  'audio',\n  'source',\n  'track',\n  'canvas',\n  'map',\n  'area',\n  'picture',\n  'table',\n  'caption',\n  'thead',\n  'tbody',\n  'tfoot',\n  'tr',\n  'th',\n  'td',\n  'col',\n  'colgroup',\n  'slot',\n  'acronym',\n  'applet',\n  'basefont',\n  'big',\n  'center',\n  'font',\n  'frame',\n  'frameset',\n  'noframes',\n  'strike',\n  'tt',\n];\n\nexport const EDITABLE_ELEMENT = ['label', 'span', 'button', 'p', 'div', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n","import fPath from 'path';\nimport * as babelParser from '@babel/parser';\nimport traverseModle, { NodePath } from '@babel/traverse';\nimport generateModule from '@babel/generator';\nimport * as t from '@babel/types';\nimport { TTransformer } from './type';\nimport { EDITABLE_ELEMENT } from './constants';\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst traverse = (traverseModle.default || traverseModle) as typeof traverseModle;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore\nconst generate = (generateModule.default || generateModule) as typeof generateModule;\n\n// Helper function to get text content from JSX elements\nconst getTextContent = (path: NodePath<t.JSXOpeningElement>): string => {\n  let text = '';\n  let hasDynamicContent = false;\n\n  // 获取当前元素的父节点\n  const { parent } = path;\n\n  if (!t.isJSXElement(parent)) return '';\n\n  // 遍历子节点\n  parent.children.forEach((child) => {\n    if (t.isJSXText(child)) {\n      text += child.value;\n    } else if (t.isJSXExpressionContainer(child)) {\n      hasDynamicContent = true;\n    }\n  });\n\n  // 如果包含动态内容，返回空字符串\n  return hasDynamicContent ? '' : text;\n};\n\n// Helper function to check if current element is a child of SVG\nconst isSvgChild = (path: NodePath<t.JSXOpeningElement>): boolean => {\n  if (t.isJSXIdentifier(path.node.name) && path.node.name.name === 'svg') return false;\n\n  let currentPath: NodePath | null = path.parentPath;\n\n  while (currentPath) {\n    if (t.isJSXElement(currentPath.node)) {\n      const tagName = currentPath.node.openingElement.name;\n      if (t.isJSXIdentifier(tagName) && tagName.name.toLowerCase() === 'svg') {\n        return true;\n      }\n    }\n    currentPath = currentPath.parentPath;\n  }\n\n  return false;\n};\n\n// --- JSX/TSX 处理 ---\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const transformJsx: TTransformer = (code: string, id: string, prefix: string, opts?: { attributes?: any; filterTag?: any }) => {\n  const ast = babelParser.parse(code, {\n    sourceType: 'module',\n    plugins: ['jsx', 'typescript', 'classProperties', 'decorators-legacy'],\n  });\n\n  // 获取相对于 src 上一层的路径\n  const projectRoot = fPath.resolve(process.cwd(), '..');\n  const relativePath = fPath.relative(projectRoot, id);\n\n  traverse(ast, {\n    JSXOpeningElement(path) {\n      const line = path.node.loc?.start.line;\n      const StartColumn = path.node.loc?.start.column;\n      if (!line || StartColumn === undefined) return;\n\n      // Get the actual line number from the source code\n      const sourceLines = code.split('\\n');\n      const actualLine =\n        sourceLines.findIndex((lineText, index) => {\n          const trimmedLine = lineText.trim();\n          return (\n            trimmedLine.includes(`<${path.node.name.type === 'JSXIdentifier' ? path.node.name.name : ''}`) && index >= (line as number) - 1\n          );\n        }) + 1;\n\n      const alreadyInjected = path.node.attributes.some(\n        (attr) =>\n          t.isJSXAttribute(attr) &&\n          t.isJSXIdentifier(attr.name) &&\n          (attr.name.name === `data-${prefix}-path` || attr.name.name === `data-${prefix}-line`)\n      );\n      if (alreadyInjected) return;\n\n      // 检查是否是 Fragment\n      const isFragment =\n        // 检查 <Fragment>\n        (t.isJSXIdentifier(path.node.name) && path.node.name.name === 'Fragment') ||\n        // 检查 <React.Fragment>\n        (t.isJSXMemberExpression(path.node.name) &&\n          t.isJSXIdentifier(path.node.name.object) &&\n          path.node.name.object.name === 'React' &&\n          t.isJSXIdentifier(path.node.name.property) &&\n          path.node.name.property.name === 'Fragment');\n\n      if (isFragment) return;\n\n      // 检查是否是SVG的子节点\n      if (isSvgChild(path)) return;\n\n      // 过滤标签\n      let shouldInject = true;\n      if (opts?.filterTag) {\n        if (Array.isArray(opts.filterTag)) {\n          shouldInject = opts.filterTag.includes(path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '');\n        } else if (typeof opts.filterTag === 'function') {\n          shouldInject = opts.filterTag(path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '');\n        }\n      }\n      if (!shouldInject) return;\n\n      // 获取完整的JSX开始标签内容（跨多行）\n      const getFullJSXOpeningTag = () => {\n        const startLine = path.node.loc?.start.line;\n        const startColumn = path.node.loc?.start.column;\n        const endLine = path.node.loc?.end.line;\n        const endColumn = path.node.loc?.end.column;\n\n        if (!startLine || !endLine || startColumn === undefined || endColumn === undefined) {\n          // 保留原始行内容，不使用 trim()\n          return code.split('\\n')[actualLine - 1] || '';\n        }\n\n        const srcLines = code.split('\\n');\n\n        if (startLine === endLine) {\n          // 单行标签 - 为了保留前后空格，我们需要扩展获取范围\n          const srcLine = srcLines[startLine - 1] || '';\n          // 寻找标签开始前的空格\n          let actualStart = startColumn;\n          while (actualStart > 0 && /\\s/.test(srcLine[actualStart - 1])) {\n            actualStart--;\n          }\n          // 寻找标签结束后的空格\n          let actualEnd = endColumn;\n          while (actualEnd < srcLine.length && /\\s/.test(srcLine[actualEnd])) {\n            actualEnd++;\n          }\n          return srcLine.substring(actualStart, actualEnd);\n        }\n        // 多行标签\n        let fullTag = '';\n        for (let i = startLine - 1; i <= endLine - 1; i++) {\n          const currentLine = srcLines[i] || '';\n          if (i === startLine - 1) {\n            // 第一行：寻找标签开始前的空格\n            let actualStart = startColumn;\n            while (actualStart > 0 && /\\s/.test(currentLine[actualStart - 1])) {\n              actualStart--;\n            }\n            fullTag += currentLine.substring(actualStart);\n          } else if (i === endLine - 1) {\n            // 最后一行：寻找标签结束后的空格\n            let actualEnd = endColumn;\n            while (actualEnd < currentLine.length && /\\s/.test(currentLine[actualEnd])) {\n              actualEnd++;\n            }\n            fullTag += `\\n${currentLine.substring(0, actualEnd)}`;\n          } else {\n            // 中间行：完整行\n            fullTag += `\\n${currentLine}`;\n          }\n        }\n        return fullTag;\n      };\n\n      let attrs: Record<string, string> = {};\n      if (opts?.attributes) {\n        attrs = opts.attributes({\n          relativePath,\n          line: actualLine || line,\n          column: StartColumn,\n          tag: path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '',\n        });\n      } else {\n        const tagName = path.node.name.type === 'JSXIdentifier' ? path.node.name.name : '';\n        const isTextElement = EDITABLE_ELEMENT.includes(tagName.toLowerCase());\n\n        attrs = {\n          [`data-${prefix}-path`]: `${relativePath}`,\n          [`data-${prefix}-line`]: `${actualLine || line}`,\n          [`data-${prefix}-start-column`]: `${StartColumn}`,\n          [`data-${prefix}-tag`]: `${tagName}`,\n          [`data-${prefix}-component`]: encodeURIComponent(getFullJSXOpeningTag()),\n          [`data-${prefix}-id`]: `${relativePath}:${actualLine || line}:${StartColumn}`,\n          [`data-${prefix}-project`]: 'jsx',\n          [`data-${prefix}-text`]: isTextElement ? encodeURIComponent(getTextContent(path)) : '',\n        };\n      }\n      path.node.attributes.push(\n        ...Object.entries(attrs).map(([key, value]) => t.jsxAttribute(t.jsxIdentifier(key), t.stringLiteral(value)))\n      );\n    },\n  });\n\n  const output = generate(ast, {}, code);\n\n  return {\n    code: output.code,\n    map: output.map,\n  };\n};\n","import path from 'path';\nimport MagicString from 'magic-string';\nimport { parse as parseSFC } from '@vue/compiler-sfc';\nimport { parse as parseTemplate, NodeTypes, ElementNode } from '@vue/compiler-dom';\nimport { TTransformer } from './type';\nimport { EDITABLE_ELEMENT, HTML_TAGS } from './constants';\n\n// Helper function to check if current element is a child of SVG\nconst isSvgChild = (node: ElementNode, parentStack: ElementNode[] = []): boolean => {\n  // 如果当前元素是svg本身，返回false\n  if (node?.tag?.toLowerCase() === 'svg') return false;\n\n  // 检查父节点栈中是否有svg元素\n  return parentStack.some((parent) => parent?.tag?.toLowerCase() === 'svg');\n};\n\n// --- Vue 处理 ---\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport const transformVue: TTransformer = (code: string, id: string, prefix: string, opts?: { attributes?: any; filterTag?: any }) => {\n  // 获取相对于 src 上一层的路径\n  const projectRoot = path.resolve(process.cwd(), '..');\n  const relativePath = path.relative(projectRoot, id);\n\n  const { descriptor } = parseSFC(code, {\n    filename: id,\n    sourceMap: true,\n  });\n  const { template } = descriptor;\n  if (!template) return { code, map: null };\n\n  const startOffset = template.loc.start.offset;\n  const ms = new MagicString(code);\n\n  const ast = parseTemplate(template.content, {\n    comments: false,\n    isNativeTag: (tag) => true,\n  });\n\n  const injectAttributes = (node: ElementNode, parentStack: ElementNode[] = []) => {\n    if (node.type === NodeTypes.ELEMENT) {\n      // 跳过已经注入过属性的元素\n      const hasLocatorAttr = node.props.some(\n        (prop) => prop.type === NodeTypes.ATTRIBUTE && (prop.name === `data-${prefix}-path` || prop.name === `data-${prefix}-line`)\n      );\n      if (hasLocatorAttr) {\n        return;\n      }\n\n      // 跳过 <template> 标签\n      if (node.tag === 'template') return;\n\n      // 检查是否是SVG的子节点\n      if (isSvgChild(node, parentStack)) return;\n\n      // 过滤标签\n      let shouldInject = true;\n      if (opts?.filterTag) {\n        if (Array.isArray(opts.filterTag)) {\n          shouldInject = opts.filterTag.includes(node.tag);\n        } else if (typeof opts.filterTag === 'function') {\n          shouldInject = opts.filterTag(node.tag);\n        }\n      } else {\n        shouldInject = HTML_TAGS.includes(node.tag);\n      }\n      if (!shouldInject) return;\n\n      const insertOffset = startOffset + node.loc.start.offset + node.tag.length + 1;\n      const line = template.loc.start.line + node.loc.start.line - 1;\n\n      const StartColumn = node.loc.start.column - 1;\n\n      let attrs: string[] = [];\n      if (opts?.attributes) {\n        const customAttrs = opts.attributes({ relativePath, line, column: StartColumn, tag: node.tag });\n        attrs = Object.entries(customAttrs).map(([k, v]) => ` ${k}=\"${v}\" `);\n      } else {\n        // 获取静态文本内容\n        const isTextElement = EDITABLE_ELEMENT.includes(node?.tag?.toLowerCase());\n        let staticText = '';\n\n        if (isTextElement && node.children) {\n          const hasDynamicContent = node.children.some(\n            (child) => child.type === NodeTypes.INTERPOLATION || child.type === NodeTypes.COMPOUND_EXPRESSION\n          );\n\n          if (!hasDynamicContent) {\n            staticText = node.children\n              .filter((child) => child.type === NodeTypes.TEXT)\n              // eslint-disable-next-line @typescript-eslint/no-explicit-any\n              .map((child) => (child as any).content)\n              .join('');\n          }\n        }\n\n        attrs = [\n          ` data-${prefix}-path=\"${relativePath}\" `,\n          ` data-${prefix}-line=\"${line}\" `,\n          ` data-${prefix}-start-column=\"${StartColumn}\" `,\n          ` data-${prefix}-tag=\"${node.tag}\" `,\n          ` data-${prefix}-component=\"${encodeURIComponent(template.content.split('\\n')[line - 1]?.trim() || '')}\" `,\n          ` data-${prefix}-id=\"${relativePath}:${line}:${StartColumn}\" `,\n          ` data-${prefix}-text=\"${encodeURIComponent(staticText)}\" `,\n        ];\n      }\n\n      if (HTML_TAGS.includes(node.tag)) {\n        ms.appendLeft(insertOffset, attrs.join(' '));\n      }\n    }\n\n    if (node.children) {\n      node.children.forEach((child) => {\n        if (child.type === NodeTypes.ELEMENT) {\n          injectAttributes(child, [...parentStack, node]);\n        }\n      });\n    }\n  };\n\n  // eslint-disable-next-line @typescript-eslint/no-explicit-any\n  injectAttributes(ast as any);\n\n  return {\n    code: ms.toString(),\n    map: ms.generateMap({ hires: true }),\n  };\n};\n","'use strict';\n\nexports.isInteger = num => {\n  if (typeof num === 'number') {\n    return Number.isInteger(num);\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isInteger(Number(num));\n  }\n  return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n  if (limit === false) return false;\n  if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n  return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n  const node = block.nodes[n];\n  if (!node) return;\n\n  if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n    if (node.escaped !== true) {\n      node.value = '\\\\' + node.value;\n      node.escaped = true;\n    }\n  }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n  if (node.type !== 'brace') return false;\n  if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n    node.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n  if (block.type !== 'brace') return false;\n  if (block.invalid === true || block.dollar) return true;\n  if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n    block.invalid = true;\n    return true;\n  }\n  if (block.open !== true || block.close !== true) {\n    block.invalid = true;\n    return true;\n  }\n  return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n  if (node.type === 'open' || node.type === 'close') {\n    return true;\n  }\n  return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n  if (node.type === 'text') acc.push(node.value);\n  if (node.type === 'range') node.type = 'text';\n  return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n  const result = [];\n\n  const flat = arr => {\n    for (let i = 0; i < arr.length; i++) {\n      const ele = arr[i];\n\n      if (Array.isArray(ele)) {\n        flat(ele);\n        continue;\n      }\n\n      if (ele !== undefined) {\n        result.push(ele);\n      }\n    }\n    return result;\n  };\n\n  flat(args);\n  return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n  const stringify = (node, parent = {}) => {\n    const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    let output = '';\n\n    if (node.value) {\n      if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n        return '\\\\' + node.value;\n      }\n      return node.value;\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += stringify(child);\n      }\n    }\n    return output;\n  };\n\n  return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n  if (typeof num === 'number') {\n    return num - num === 0;\n  }\n  if (typeof num === 'string' && num.trim() !== '') {\n    return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n  }\n  return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n  if (isNumber(min) === false) {\n    throw new TypeError('toRegexRange: expected the first argument to be a number');\n  }\n\n  if (max === void 0 || min === max) {\n    return String(min);\n  }\n\n  if (isNumber(max) === false) {\n    throw new TypeError('toRegexRange: expected the second argument to be a number.');\n  }\n\n  let opts = { relaxZeros: true, ...options };\n  if (typeof opts.strictZeros === 'boolean') {\n    opts.relaxZeros = opts.strictZeros === false;\n  }\n\n  let relax = String(opts.relaxZeros);\n  let shorthand = String(opts.shorthand);\n  let capture = String(opts.capture);\n  let wrap = String(opts.wrap);\n  let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n  if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n    return toRegexRange.cache[cacheKey].result;\n  }\n\n  let a = Math.min(min, max);\n  let b = Math.max(min, max);\n\n  if (Math.abs(a - b) === 1) {\n    let result = min + '|' + max;\n    if (opts.capture) {\n      return `(${result})`;\n    }\n    if (opts.wrap === false) {\n      return result;\n    }\n    return `(?:${result})`;\n  }\n\n  let isPadded = hasPadding(min) || hasPadding(max);\n  let state = { min, max, a, b };\n  let positives = [];\n  let negatives = [];\n\n  if (isPadded) {\n    state.isPadded = isPadded;\n    state.maxLen = String(state.max).length;\n  }\n\n  if (a < 0) {\n    let newMin = b < 0 ? Math.abs(b) : 1;\n    negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n    a = state.a = 0;\n  }\n\n  if (b >= 0) {\n    positives = splitToPatterns(a, b, state, opts);\n  }\n\n  state.negatives = negatives;\n  state.positives = positives;\n  state.result = collatePatterns(negatives, positives, opts);\n\n  if (opts.capture === true) {\n    state.result = `(${state.result})`;\n  } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n    state.result = `(?:${state.result})`;\n  }\n\n  toRegexRange.cache[cacheKey] = state;\n  return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n  let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n  let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n  let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n  let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n  return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n  let nines = 1;\n  let zeros = 1;\n\n  let stop = countNines(min, nines);\n  let stops = new Set([max]);\n\n  while (min <= stop && stop <= max) {\n    stops.add(stop);\n    nines += 1;\n    stop = countNines(min, nines);\n  }\n\n  stop = countZeros(max + 1, zeros) - 1;\n\n  while (min < stop && stop <= max) {\n    stops.add(stop);\n    zeros += 1;\n    stop = countZeros(max + 1, zeros) - 1;\n  }\n\n  stops = [...stops];\n  stops.sort(compare);\n  return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n  if (start === stop) {\n    return { pattern: start, count: [], digits: 0 };\n  }\n\n  let zipped = zip(start, stop);\n  let digits = zipped.length;\n  let pattern = '';\n  let count = 0;\n\n  for (let i = 0; i < digits; i++) {\n    let [startDigit, stopDigit] = zipped[i];\n\n    if (startDigit === stopDigit) {\n      pattern += startDigit;\n\n    } else if (startDigit !== '0' || stopDigit !== '9') {\n      pattern += toCharacterClass(startDigit, stopDigit, options);\n\n    } else {\n      count++;\n    }\n  }\n\n  if (count) {\n    pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n  }\n\n  return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n  let ranges = splitToRanges(min, max);\n  let tokens = [];\n  let start = min;\n  let prev;\n\n  for (let i = 0; i < ranges.length; i++) {\n    let max = ranges[i];\n    let obj = rangeToPattern(String(start), String(max), options);\n    let zeros = '';\n\n    if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n      if (prev.count.length > 1) {\n        prev.count.pop();\n      }\n\n      prev.count.push(obj.count[0]);\n      prev.string = prev.pattern + toQuantifier(prev.count);\n      start = max + 1;\n      continue;\n    }\n\n    if (tok.isPadded) {\n      zeros = padZeros(max, tok, options);\n    }\n\n    obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n    tokens.push(obj);\n    start = max + 1;\n    prev = obj;\n  }\n\n  return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n  let result = [];\n\n  for (let ele of arr) {\n    let { string } = ele;\n\n    // only push if _both_ are negative...\n    if (!intersection && !contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n\n    // or _both_ are positive\n    if (intersection && contains(comparison, 'string', string)) {\n      result.push(prefix + string);\n    }\n  }\n  return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n  let arr = [];\n  for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n  return arr;\n}\n\nfunction compare(a, b) {\n  return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n  return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n  return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n  return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n  let [start = 0, stop = ''] = digits;\n  if (stop || start > 1) {\n    return `{${start + (stop ? ',' + stop : '')}}`;\n  }\n  return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n  return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n  return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n  if (!tok.isPadded) {\n    return value;\n  }\n\n  let diff = Math.abs(tok.maxLen - String(value).length);\n  let relax = options.relaxZeros !== false;\n\n  switch (diff) {\n    case 0:\n      return '';\n    case 1:\n      return relax ? '0?' : '0';\n    case 2:\n      return relax ? '0{0,2}' : '00';\n    default: {\n      return relax ? `0{0,${diff}}` : `0{${diff}}`;\n    }\n  }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n  return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n  return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n  let value = `${input}`;\n  let index = -1;\n  if (value[0] === '-') value = value.slice(1);\n  if (value === '0') return false;\n  while (value[++index] === '0');\n  return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n  if (typeof start === 'string' || typeof end === 'string') {\n    return true;\n  }\n  return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n  if (maxLength > 0) {\n    let dash = input[0] === '-' ? '-' : '';\n    if (dash) input = input.slice(1);\n    input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n  }\n  if (toNumber === false) {\n    return String(input);\n  }\n  return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n  let negative = input[0] === '-' ? '-' : '';\n  if (negative) {\n    input = input.slice(1);\n    maxLength--;\n  }\n  while (input.length < maxLength) input = '0' + input;\n  return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n  parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n  parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n  let prefix = options.capture ? '' : '?:';\n  let positives = '';\n  let negatives = '';\n  let result;\n\n  if (parts.positives.length) {\n    positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n  }\n\n  if (parts.negatives.length) {\n    negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n  }\n\n  if (positives && negatives) {\n    result = `${positives}|${negatives}`;\n  } else {\n    result = positives || negatives;\n  }\n\n  if (options.wrap) {\n    return `(${prefix}${result})`;\n  }\n\n  return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n  if (isNumbers) {\n    return toRegexRange(a, b, { wrap: false, ...options });\n  }\n\n  let start = String.fromCharCode(a);\n  if (a === b) return start;\n\n  let stop = String.fromCharCode(b);\n  return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n  if (Array.isArray(start)) {\n    let wrap = options.wrap === true;\n    let prefix = options.capture ? '' : '?:';\n    return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n  }\n  return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n  return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n  if (options.strictRanges === true) throw rangeError([start, end]);\n  return [];\n};\n\nconst invalidStep = (step, options) => {\n  if (options.strictRanges === true) {\n    throw new TypeError(`Expected step \"${step}\" to be a number`);\n  }\n  return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n  let a = Number(start);\n  let b = Number(end);\n\n  if (!Number.isInteger(a) || !Number.isInteger(b)) {\n    if (options.strictRanges === true) throw rangeError([start, end]);\n    return [];\n  }\n\n  // fix negative zero\n  if (a === 0) a = 0;\n  if (b === 0) b = 0;\n\n  let descending = a > b;\n  let startString = String(start);\n  let endString = String(end);\n  let stepString = String(step);\n  step = Math.max(Math.abs(step), 1);\n\n  let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n  let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n  let toNumber = padded === false && stringify(start, end, options) === false;\n  let format = options.transform || transform(toNumber);\n\n  if (options.toRegex && step === 1) {\n    return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n  }\n\n  let parts = { negatives: [], positives: [] };\n  let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    if (options.toRegex === true && step > 1) {\n      push(a);\n    } else {\n      range.push(pad(format(a, index), maxLen, toNumber));\n    }\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return step > 1\n      ? toSequence(parts, options, maxLen)\n      : toRegex(range, null, { wrap: false, ...options });\n  }\n\n  return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n  if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n    return invalidRange(start, end, options);\n  }\n\n  let format = options.transform || (val => String.fromCharCode(val));\n  let a = `${start}`.charCodeAt(0);\n  let b = `${end}`.charCodeAt(0);\n\n  let descending = a > b;\n  let min = Math.min(a, b);\n  let max = Math.max(a, b);\n\n  if (options.toRegex && step === 1) {\n    return toRange(min, max, false, options);\n  }\n\n  let range = [];\n  let index = 0;\n\n  while (descending ? a >= b : a <= b) {\n    range.push(format(a, index));\n    a = descending ? a - step : a + step;\n    index++;\n  }\n\n  if (options.toRegex === true) {\n    return toRegex(range, null, { wrap: false, options });\n  }\n\n  return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n  if (end == null && isValidValue(start)) {\n    return [start];\n  }\n\n  if (!isValidValue(start) || !isValidValue(end)) {\n    return invalidRange(start, end, options);\n  }\n\n  if (typeof step === 'function') {\n    return fill(start, end, 1, { transform: step });\n  }\n\n  if (isObject(step)) {\n    return fill(start, end, 0, step);\n  }\n\n  let opts = { ...options };\n  if (opts.capture === true) opts.wrap = true;\n  step = step || opts.step || 1;\n\n  if (!isNumber(step)) {\n    if (step != null && !isObject(step)) return invalidStep(step, opts);\n    return fill(start, end, 1, step);\n  }\n\n  if (isNumber(start) && isNumber(end)) {\n    return fillNumbers(start, end, step, opts);\n  }\n\n  return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  CHAR_BACKSLASH, /* \\ */\n  CHAR_BACKTICK, /* ` */\n  CHAR_COMMA, /* , */\n  CHAR_DOT, /* . */\n  CHAR_LEFT_PARENTHESES, /* ( */\n  CHAR_RIGHT_PARENTHESES, /* ) */\n  CHAR_LEFT_CURLY_BRACE, /* { */\n  CHAR_RIGHT_CURLY_BRACE, /* } */\n  CHAR_LEFT_SQUARE_BRACKET, /* [ */\n  CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n  CHAR_DOUBLE_QUOTE, /* \" */\n  CHAR_SINGLE_QUOTE, /* ' */\n  CHAR_NO_BREAK_SPACE,\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  const opts = options || {};\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  if (input.length > max) {\n    throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n  }\n\n  const ast = { type: 'root', input, nodes: [] };\n  const stack = [ast];\n  let block = ast;\n  let prev = ast;\n  let brackets = 0;\n  const length = input.length;\n  let index = 0;\n  let depth = 0;\n  let value;\n\n  /**\n   * Helpers\n   */\n\n  const advance = () => input[index++];\n  const push = node => {\n    if (node.type === 'text' && prev.type === 'dot') {\n      prev.type = 'text';\n    }\n\n    if (prev && prev.type === 'text' && node.type === 'text') {\n      prev.value += node.value;\n      return;\n    }\n\n    block.nodes.push(node);\n    node.parent = block;\n    node.prev = prev;\n    prev = node;\n    return node;\n  };\n\n  push({ type: 'bos' });\n\n  while (index < length) {\n    block = stack[stack.length - 1];\n    value = advance();\n\n    /**\n     * Invalid chars\n     */\n\n    if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n      continue;\n    }\n\n    /**\n     * Escaped chars\n     */\n\n    if (value === CHAR_BACKSLASH) {\n      push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n      continue;\n    }\n\n    /**\n     * Right square bracket (literal): ']'\n     */\n\n    if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n      push({ type: 'text', value: '\\\\' + value });\n      continue;\n    }\n\n    /**\n     * Left square bracket: '['\n     */\n\n    if (value === CHAR_LEFT_SQUARE_BRACKET) {\n      brackets++;\n\n      let next;\n\n      while (index < length && (next = advance())) {\n        value += next;\n\n        if (next === CHAR_LEFT_SQUARE_BRACKET) {\n          brackets++;\n          continue;\n        }\n\n        if (next === CHAR_BACKSLASH) {\n          value += advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          brackets--;\n\n          if (brackets === 0) {\n            break;\n          }\n        }\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === CHAR_LEFT_PARENTHESES) {\n      block = push({ type: 'paren', nodes: [] });\n      stack.push(block);\n      push({ type: 'text', value });\n      continue;\n    }\n\n    if (value === CHAR_RIGHT_PARENTHESES) {\n      if (block.type !== 'paren') {\n        push({ type: 'text', value });\n        continue;\n      }\n      block = stack.pop();\n      push({ type: 'text', value });\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Quotes: '|\"|`\n     */\n\n    if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n      const open = value;\n      let next;\n\n      if (options.keepQuotes !== true) {\n        value = '';\n      }\n\n      while (index < length && (next = advance())) {\n        if (next === CHAR_BACKSLASH) {\n          value += next + advance();\n          continue;\n        }\n\n        if (next === open) {\n          if (options.keepQuotes === true) value += next;\n          break;\n        }\n\n        value += next;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Left curly brace: '{'\n     */\n\n    if (value === CHAR_LEFT_CURLY_BRACE) {\n      depth++;\n\n      const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n      const brace = {\n        type: 'brace',\n        open: true,\n        close: false,\n        dollar,\n        depth,\n        commas: 0,\n        ranges: 0,\n        nodes: []\n      };\n\n      block = push(brace);\n      stack.push(block);\n      push({ type: 'open', value });\n      continue;\n    }\n\n    /**\n     * Right curly brace: '}'\n     */\n\n    if (value === CHAR_RIGHT_CURLY_BRACE) {\n      if (block.type !== 'brace') {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      const type = 'close';\n      block = stack.pop();\n      block.close = true;\n\n      push({ type, value });\n      depth--;\n\n      block = stack[stack.length - 1];\n      continue;\n    }\n\n    /**\n     * Comma: ','\n     */\n\n    if (value === CHAR_COMMA && depth > 0) {\n      if (block.ranges > 0) {\n        block.ranges = 0;\n        const open = block.nodes.shift();\n        block.nodes = [open, { type: 'text', value: stringify(block) }];\n      }\n\n      push({ type: 'comma', value });\n      block.commas++;\n      continue;\n    }\n\n    /**\n     * Dot: '.'\n     */\n\n    if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n      const siblings = block.nodes;\n\n      if (depth === 0 || siblings.length === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n\n      if (prev.type === 'dot') {\n        block.range = [];\n        prev.value += value;\n        prev.type = 'range';\n\n        if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n          block.invalid = true;\n          block.ranges = 0;\n          prev.type = 'text';\n          continue;\n        }\n\n        block.ranges++;\n        block.args = [];\n        continue;\n      }\n\n      if (prev.type === 'range') {\n        siblings.pop();\n\n        const before = siblings[siblings.length - 1];\n        before.value += prev.value + value;\n        prev = before;\n        block.ranges--;\n        continue;\n      }\n\n      push({ type: 'dot', value });\n      continue;\n    }\n\n    /**\n     * Text\n     */\n\n    push({ type: 'text', value });\n  }\n\n  // Mark imbalanced braces and brackets as invalid\n  do {\n    block = stack.pop();\n\n    if (block.type !== 'root') {\n      block.nodes.forEach(node => {\n        if (!node.nodes) {\n          if (node.type === 'open') node.isOpen = true;\n          if (node.type === 'close') node.isClose = true;\n          if (!node.nodes) node.type = 'text';\n          node.invalid = true;\n        }\n      });\n\n      // get the location of the block on parent.nodes (block's siblings)\n      const parent = stack[stack.length - 1];\n      const index = parent.nodes.indexOf(block);\n      // replace the (invalid) block with it's nodes\n      parent.nodes.splice(index, 1, ...block.nodes);\n    }\n  } while (stack.length > 0);\n\n  push({ type: 'eos' });\n  return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nmodule.exports = {\n  MAX_LENGTH: 10000,\n\n  // Digits\n  CHAR_0: '0', /* 0 */\n  CHAR_9: '9', /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 'A', /* A */\n  CHAR_LOWERCASE_A: 'a', /* a */\n  CHAR_UPPERCASE_Z: 'Z', /* Z */\n  CHAR_LOWERCASE_Z: 'z', /* z */\n\n  CHAR_LEFT_PARENTHESES: '(', /* ( */\n  CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n  CHAR_ASTERISK: '*', /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: '&', /* & */\n  CHAR_AT: '@', /* @ */\n  CHAR_BACKSLASH: '\\\\', /* \\ */\n  CHAR_BACKTICK: '`', /* ` */\n  CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n  CHAR_COLON: ':', /* : */\n  CHAR_COMMA: ',', /* , */\n  CHAR_DOLLAR: '$', /* . */\n  CHAR_DOT: '.', /* . */\n  CHAR_DOUBLE_QUOTE: '\"', /* \" */\n  CHAR_EQUAL: '=', /* = */\n  CHAR_EXCLAMATION_MARK: '!', /* ! */\n  CHAR_FORM_FEED: '\\f', /* \\f */\n  CHAR_FORWARD_SLASH: '/', /* / */\n  CHAR_HASH: '#', /* # */\n  CHAR_HYPHEN_MINUS: '-', /* - */\n  CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n  CHAR_LEFT_CURLY_BRACE: '{', /* { */\n  CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n  CHAR_LINE_FEED: '\\n', /* \\n */\n  CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n  CHAR_PERCENT: '%', /* % */\n  CHAR_PLUS: '+', /* + */\n  CHAR_QUESTION_MARK: '?', /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n  CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n  CHAR_SEMICOLON: ';', /* ; */\n  CHAR_SINGLE_QUOTE: '\\'', /* ' */\n  CHAR_SPACE: ' ', /*   */\n  CHAR_TAB: '\\t', /* \\t */\n  CHAR_UNDERSCORE: '_', /* _ */\n  CHAR_VERTICAL_LINE: '|', /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n  let output = [];\n\n  if (Array.isArray(input)) {\n    for (const pattern of input) {\n      const result = braces.create(pattern, options);\n      if (Array.isArray(result)) {\n        output.push(...result);\n      } else {\n        output.push(result);\n      }\n    }\n  } else {\n    output = [].concat(braces.create(input, options));\n  }\n\n  if (options && options.expand === true && options.nodupes === true) {\n    output = [...new Set(output)];\n  }\n  return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n  if (typeof input === 'string') {\n    return stringify(braces.parse(input, options), options);\n  }\n  return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n  return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n  if (typeof input === 'string') {\n    input = braces.parse(input, options);\n  }\n\n  let result = expand(input, options);\n\n  // filter out empty strings if specified\n  if (options.noempty === true) {\n    result = result.filter(Boolean);\n  }\n\n  // filter out duplicates if specified\n  if (options.nodupes === true) {\n    result = [...new Set(result)];\n  }\n\n  return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n  if (input === '' || input.length < 3) {\n    return [input];\n  }\n\n  return options.expand !== true\n    ? braces.compile(input, options)\n    : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n  const walk = (node, parent = {}) => {\n    const invalidBlock = utils.isInvalidBrace(parent);\n    const invalidNode = node.invalid === true && options.escapeInvalid === true;\n    const invalid = invalidBlock === true || invalidNode === true;\n    const prefix = options.escapeInvalid === true ? '\\\\' : '';\n    let output = '';\n\n    if (node.isOpen === true) {\n      return prefix + node.value;\n    }\n\n    if (node.isClose === true) {\n      console.log('node.isClose', prefix, node.value);\n      return prefix + node.value;\n    }\n\n    if (node.type === 'open') {\n      return invalid ? prefix + node.value : '(';\n    }\n\n    if (node.type === 'close') {\n      return invalid ? prefix + node.value : ')';\n    }\n\n    if (node.type === 'comma') {\n      return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n    }\n\n    if (node.value) {\n      return node.value;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n      const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n      if (range.length !== 0) {\n        return args.length > 1 && range.length > 1 ? `(${range})` : range;\n      }\n    }\n\n    if (node.nodes) {\n      for (const child of node.nodes) {\n        output += walk(child, node);\n      }\n    }\n\n    return output;\n  };\n\n  return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n  const result = [];\n\n  queue = [].concat(queue);\n  stash = [].concat(stash);\n\n  if (!stash.length) return queue;\n  if (!queue.length) {\n    return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n  }\n\n  for (const item of queue) {\n    if (Array.isArray(item)) {\n      for (const value of item) {\n        result.push(append(value, stash, enclose));\n      }\n    } else {\n      for (let ele of stash) {\n        if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n        result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n      }\n    }\n  }\n  return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n  const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n  const walk = (node, parent = {}) => {\n    node.queue = [];\n\n    let p = parent;\n    let q = parent.queue;\n\n    while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n      p = p.parent;\n      q = p.queue;\n    }\n\n    if (node.invalid || node.dollar) {\n      q.push(append(q.pop(), stringify(node, options)));\n      return;\n    }\n\n    if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n      q.push(append(q.pop(), ['{}']));\n      return;\n    }\n\n    if (node.nodes && node.ranges > 0) {\n      const args = utils.reduce(node.nodes);\n\n      if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n        throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n      }\n\n      let range = fill(...args, options);\n      if (range.length === 0) {\n        range = stringify(node, options);\n      }\n\n      q.push(append(q.pop(), range));\n      node.nodes = [];\n      return;\n    }\n\n    const enclose = utils.encloseBrace(node);\n    let queue = node.queue;\n    let block = node;\n\n    while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n      block = block.parent;\n      queue = block.queue;\n    }\n\n    for (let i = 0; i < node.nodes.length; i++) {\n      const child = node.nodes[i];\n\n      if (child.type === 'comma' && node.type === 'brace') {\n        if (i === 1) queue.push('');\n        queue.push('');\n        continue;\n      }\n\n      if (child.type === 'close') {\n        q.push(append(q.pop(), queue, enclose));\n        continue;\n      }\n\n      if (child.value && child.type !== 'open') {\n        queue.push(append(queue.pop(), child.value));\n        continue;\n      }\n\n      if (child.nodes) {\n        walk(child, node);\n      }\n    }\n\n    return queue;\n  };\n\n  return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n  DOT_LITERAL,\n  PLUS_LITERAL,\n  QMARK_LITERAL,\n  SLASH_LITERAL,\n  ONE_CHAR,\n  QMARK,\n  END_ANCHOR,\n  DOTS_SLASH,\n  NO_DOT,\n  NO_DOTS,\n  NO_DOT_SLASH,\n  NO_DOTS_SLASH,\n  QMARK_NO_DOT,\n  STAR,\n  START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n  ...POSIX_CHARS,\n\n  SLASH_LITERAL: `[${WIN_SLASH}]`,\n  QMARK: WIN_NO_SLASH,\n  STAR: `${WIN_NO_SLASH}*?`,\n  DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n  NO_DOT: `(?!${DOT_LITERAL})`,\n  NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n  NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n  QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n  START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n  END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n  alnum: 'a-zA-Z0-9',\n  alpha: 'a-zA-Z',\n  ascii: '\\\\x00-\\\\x7F',\n  blank: ' \\\\t',\n  cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n  digit: '0-9',\n  graph: '\\\\x21-\\\\x7E',\n  lower: 'a-z',\n  print: '\\\\x20-\\\\x7E ',\n  punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n  space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n  upper: 'A-Z',\n  word: 'A-Za-z0-9_',\n  xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n  MAX_LENGTH: 1024 * 64,\n  POSIX_REGEX_SOURCE,\n\n  // regular expressions\n  REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n  REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n  REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n  REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n  REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n  REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n  // Replace globs with equivalent patterns to reduce parsing time.\n  REPLACEMENTS: {\n    '***': '*',\n    '**/**': '**',\n    '**/**/**': '**'\n  },\n\n  // Digits\n  CHAR_0: 48, /* 0 */\n  CHAR_9: 57, /* 9 */\n\n  // Alphabet chars.\n  CHAR_UPPERCASE_A: 65, /* A */\n  CHAR_LOWERCASE_A: 97, /* a */\n  CHAR_UPPERCASE_Z: 90, /* Z */\n  CHAR_LOWERCASE_Z: 122, /* z */\n\n  CHAR_LEFT_PARENTHESES: 40, /* ( */\n  CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n  CHAR_ASTERISK: 42, /* * */\n\n  // Non-alphabetic chars.\n  CHAR_AMPERSAND: 38, /* & */\n  CHAR_AT: 64, /* @ */\n  CHAR_BACKWARD_SLASH: 92, /* \\ */\n  CHAR_CARRIAGE_RETURN: 13, /* \\r */\n  CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n  CHAR_COLON: 58, /* : */\n  CHAR_COMMA: 44, /* , */\n  CHAR_DOT: 46, /* . */\n  CHAR_DOUBLE_QUOTE: 34, /* \" */\n  CHAR_EQUAL: 61, /* = */\n  CHAR_EXCLAMATION_MARK: 33, /* ! */\n  CHAR_FORM_FEED: 12, /* \\f */\n  CHAR_FORWARD_SLASH: 47, /* / */\n  CHAR_GRAVE_ACCENT: 96, /* ` */\n  CHAR_HASH: 35, /* # */\n  CHAR_HYPHEN_MINUS: 45, /* - */\n  CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n  CHAR_LEFT_CURLY_BRACE: 123, /* { */\n  CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n  CHAR_LINE_FEED: 10, /* \\n */\n  CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n  CHAR_PERCENT: 37, /* % */\n  CHAR_PLUS: 43, /* + */\n  CHAR_QUESTION_MARK: 63, /* ? */\n  CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n  CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n  CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n  CHAR_SEMICOLON: 59, /* ; */\n  CHAR_SINGLE_QUOTE: 39, /* ' */\n  CHAR_SPACE: 32, /*   */\n  CHAR_TAB: 9, /* \\t */\n  CHAR_UNDERSCORE: 95, /* _ */\n  CHAR_VERTICAL_LINE: 124, /* | */\n  CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n  SEP: path.sep,\n\n  /**\n   * Create EXTGLOB_CHARS\n   */\n\n  extglobChars(chars) {\n    return {\n      '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n      '?': { type: 'qmark', open: '(?:', close: ')?' },\n      '+': { type: 'plus', open: '(?:', close: ')+' },\n      '*': { type: 'star', open: '(?:', close: ')*' },\n      '@': { type: 'at', open: '(?:', close: ')' }\n    };\n  },\n\n  /**\n   * Create GLOB_CHARS\n   */\n\n  globChars(win32) {\n    return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n  }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n  REGEX_BACKSLASH,\n  REGEX_REMOVE_BACKSLASH,\n  REGEX_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n  return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n    return match === '\\\\' ? '' : match;\n  });\n};\n\nexports.supportsLookbehinds = () => {\n  const segs = process.version.slice(1).split('.').map(Number);\n  if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n    return true;\n  }\n  return false;\n};\n\nexports.isWindows = options => {\n  if (options && typeof options.windows === 'boolean') {\n    return options.windows;\n  }\n  return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n  const idx = input.lastIndexOf(char, lastIdx);\n  if (idx === -1) return input;\n  if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n  return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n  let output = input;\n  if (output.startsWith('./')) {\n    output = output.slice(2);\n    state.prefix = './';\n  }\n  return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n  const prepend = options.contains ? '' : '^';\n  const append = options.contains ? '' : '$';\n\n  let output = `${prepend}(?:${input})${append}`;\n  if (state.negated === true) {\n    output = `(?:^(?!${output}).*$)`;\n  }\n  return output;\n};\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n  if (Array.isArray(glob)) {\n    const fns = glob.map(input => picomatch(input, options, returnState));\n    const arrayMatcher = str => {\n      for (const isMatch of fns) {\n        const state = isMatch(str);\n        if (state) return state;\n      }\n      return false;\n    };\n    return arrayMatcher;\n  }\n\n  const isState = isObject(glob) && glob.tokens && glob.input;\n\n  if (glob === '' || (typeof glob !== 'string' && !isState)) {\n    throw new TypeError('Expected pattern to be a non-empty string');\n  }\n\n  const opts = options || {};\n  const posix = utils.isWindows(options);\n  const regex = isState\n    ? picomatch.compileRe(glob, options)\n    : picomatch.makeRe(glob, options, false, true);\n\n  const state = regex.state;\n  delete regex.state;\n\n  let isIgnored = () => false;\n  if (opts.ignore) {\n    const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n    isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n  }\n\n  const matcher = (input, returnObject = false) => {\n    const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n    const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n    if (typeof opts.onResult === 'function') {\n      opts.onResult(result);\n    }\n\n    if (isMatch === false) {\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (isIgnored(input)) {\n      if (typeof opts.onIgnore === 'function') {\n        opts.onIgnore(result);\n      }\n      result.isMatch = false;\n      return returnObject ? result : false;\n    }\n\n    if (typeof opts.onMatch === 'function') {\n      opts.onMatch(result);\n    }\n    return returnObject ? result : true;\n  };\n\n  if (returnState) {\n    matcher.state = state;\n  }\n\n  return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected input to be a string');\n  }\n\n  if (input === '') {\n    return { isMatch: false, output: '' };\n  }\n\n  const opts = options || {};\n  const format = opts.format || (posix ? utils.toPosixSlashes : null);\n  let match = input === glob;\n  let output = (match && format) ? format(input) : input;\n\n  if (match === false) {\n    output = format ? format(input) : input;\n    match = output === glob;\n  }\n\n  if (match === false || opts.capture === true) {\n    if (opts.matchBase === true || opts.basename === true) {\n      match = picomatch.matchBase(input, regex, options, posix);\n    } else {\n      match = regex.exec(output);\n    }\n  }\n\n  return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n  const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n  return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n  if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n  return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n *   input: '!./foo/*.js',\n *   start: 3,\n *   base: 'foo',\n *   glob: '*.js',\n *   isBrace: false,\n *   isBracket: false,\n *   isGlob: true,\n *   isExtglob: false,\n *   isGlobstar: false,\n *   negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n  if (returnOutput === true) {\n    return state.output;\n  }\n\n  const opts = options || {};\n  const prepend = opts.contains ? '' : '^';\n  const append = opts.contains ? '' : '$';\n\n  let source = `${prepend}(?:${state.output})${append}`;\n  if (state && state.negated === true) {\n    source = `^(?!${source}).*$`;\n  }\n\n  const regex = picomatch.toRegex(source, options);\n  if (returnState === true) {\n    regex.state = state;\n  }\n\n  return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n  if (!input || typeof input !== 'string') {\n    throw new TypeError('Expected a non-empty string');\n  }\n\n  let parsed = { negated: false, fastpaths: true };\n\n  if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n    parsed.output = parse.fastpaths(input, options);\n  }\n\n  if (!parsed.output) {\n    parsed = parse(input, options);\n  }\n\n  return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n  try {\n    const opts = options || {};\n    return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n  } catch (err) {\n    if (options && options.debug === true) throw err;\n    return /$^/;\n  }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n  CHAR_ASTERISK,             /* * */\n  CHAR_AT,                   /* @ */\n  CHAR_BACKWARD_SLASH,       /* \\ */\n  CHAR_COMMA,                /* , */\n  CHAR_DOT,                  /* . */\n  CHAR_EXCLAMATION_MARK,     /* ! */\n  CHAR_FORWARD_SLASH,        /* / */\n  CHAR_LEFT_CURLY_BRACE,     /* { */\n  CHAR_LEFT_PARENTHESES,     /* ( */\n  CHAR_LEFT_SQUARE_BRACKET,  /* [ */\n  CHAR_PLUS,                 /* + */\n  CHAR_QUESTION_MARK,        /* ? */\n  CHAR_RIGHT_CURLY_BRACE,    /* } */\n  CHAR_RIGHT_PARENTHESES,    /* ) */\n  CHAR_RIGHT_SQUARE_BRACKET  /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n  return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n  if (token.isPrefix !== true) {\n    token.depth = token.isGlobstar ? Infinity : 1;\n  }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n  const opts = options || {};\n\n  const length = input.length - 1;\n  const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n  const slashes = [];\n  const tokens = [];\n  const parts = [];\n\n  let str = input;\n  let index = -1;\n  let start = 0;\n  let lastIndex = 0;\n  let isBrace = false;\n  let isBracket = false;\n  let isGlob = false;\n  let isExtglob = false;\n  let isGlobstar = false;\n  let braceEscaped = false;\n  let backslashes = false;\n  let negated = false;\n  let negatedExtglob = false;\n  let finished = false;\n  let braces = 0;\n  let prev;\n  let code;\n  let token = { value: '', depth: 0, isGlob: false };\n\n  const eos = () => index >= length;\n  const peek = () => str.charCodeAt(index + 1);\n  const advance = () => {\n    prev = code;\n    return str.charCodeAt(++index);\n  };\n\n  while (index < length) {\n    code = advance();\n    let next;\n\n    if (code === CHAR_BACKWARD_SLASH) {\n      backslashes = token.backslashes = true;\n      code = advance();\n\n      if (code === CHAR_LEFT_CURLY_BRACE) {\n        braceEscaped = true;\n      }\n      continue;\n    }\n\n    if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n      braces++;\n\n      while (eos() !== true && (code = advance())) {\n        if (code === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (code === CHAR_LEFT_CURLY_BRACE) {\n          braces++;\n          continue;\n        }\n\n        if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (braceEscaped !== true && code === CHAR_COMMA) {\n          isBrace = token.isBrace = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n\n          if (scanToEnd === true) {\n            continue;\n          }\n\n          break;\n        }\n\n        if (code === CHAR_RIGHT_CURLY_BRACE) {\n          braces--;\n\n          if (braces === 0) {\n            braceEscaped = false;\n            isBrace = token.isBrace = true;\n            finished = true;\n            break;\n          }\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (code === CHAR_FORWARD_SLASH) {\n      slashes.push(index);\n      tokens.push(token);\n      token = { value: '', depth: 0, isGlob: false };\n\n      if (finished === true) continue;\n      if (prev === CHAR_DOT && index === (start + 1)) {\n        start += 2;\n        continue;\n      }\n\n      lastIndex = index + 1;\n      continue;\n    }\n\n    if (opts.noext !== true) {\n      const isExtglobChar = code === CHAR_PLUS\n        || code === CHAR_AT\n        || code === CHAR_ASTERISK\n        || code === CHAR_QUESTION_MARK\n        || code === CHAR_EXCLAMATION_MARK;\n\n      if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n        isGlob = token.isGlob = true;\n        isExtglob = token.isExtglob = true;\n        finished = true;\n        if (code === CHAR_EXCLAMATION_MARK && index === start) {\n          negatedExtglob = true;\n        }\n\n        if (scanToEnd === true) {\n          while (eos() !== true && (code = advance())) {\n            if (code === CHAR_BACKWARD_SLASH) {\n              backslashes = token.backslashes = true;\n              code = advance();\n              continue;\n            }\n\n            if (code === CHAR_RIGHT_PARENTHESES) {\n              isGlob = token.isGlob = true;\n              finished = true;\n              break;\n            }\n          }\n          continue;\n        }\n        break;\n      }\n    }\n\n    if (code === CHAR_ASTERISK) {\n      if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_QUESTION_MARK) {\n      isGlob = token.isGlob = true;\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n      break;\n    }\n\n    if (code === CHAR_LEFT_SQUARE_BRACKET) {\n      while (eos() !== true && (next = advance())) {\n        if (next === CHAR_BACKWARD_SLASH) {\n          backslashes = token.backslashes = true;\n          advance();\n          continue;\n        }\n\n        if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n          isBracket = token.isBracket = true;\n          isGlob = token.isGlob = true;\n          finished = true;\n          break;\n        }\n      }\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n\n    if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n      negated = token.negated = true;\n      start++;\n      continue;\n    }\n\n    if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n      isGlob = token.isGlob = true;\n\n      if (scanToEnd === true) {\n        while (eos() !== true && (code = advance())) {\n          if (code === CHAR_LEFT_PARENTHESES) {\n            backslashes = token.backslashes = true;\n            code = advance();\n            continue;\n          }\n\n          if (code === CHAR_RIGHT_PARENTHESES) {\n            finished = true;\n            break;\n          }\n        }\n        continue;\n      }\n      break;\n    }\n\n    if (isGlob === true) {\n      finished = true;\n\n      if (scanToEnd === true) {\n        continue;\n      }\n\n      break;\n    }\n  }\n\n  if (opts.noext === true) {\n    isExtglob = false;\n    isGlob = false;\n  }\n\n  let base = str;\n  let prefix = '';\n  let glob = '';\n\n  if (start > 0) {\n    prefix = str.slice(0, start);\n    str = str.slice(start);\n    lastIndex -= start;\n  }\n\n  if (base && isGlob === true && lastIndex > 0) {\n    base = str.slice(0, lastIndex);\n    glob = str.slice(lastIndex);\n  } else if (isGlob === true) {\n    base = '';\n    glob = str;\n  } else {\n    base = str;\n  }\n\n  if (base && base !== '' && base !== '/' && base !== str) {\n    if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n      base = base.slice(0, -1);\n    }\n  }\n\n  if (opts.unescape === true) {\n    if (glob) glob = utils.removeBackslashes(glob);\n\n    if (base && backslashes === true) {\n      base = utils.removeBackslashes(base);\n    }\n  }\n\n  const state = {\n    prefix,\n    input,\n    start,\n    base,\n    glob,\n    isBrace,\n    isBracket,\n    isGlob,\n    isExtglob,\n    isGlobstar,\n    negated,\n    negatedExtglob\n  };\n\n  if (opts.tokens === true) {\n    state.maxDepth = 0;\n    if (!isPathSeparator(code)) {\n      tokens.push(token);\n    }\n    state.tokens = tokens;\n  }\n\n  if (opts.parts === true || opts.tokens === true) {\n    let prevIndex;\n\n    for (let idx = 0; idx < slashes.length; idx++) {\n      const n = prevIndex ? prevIndex + 1 : start;\n      const i = slashes[idx];\n      const value = input.slice(n, i);\n      if (opts.tokens) {\n        if (idx === 0 && start !== 0) {\n          tokens[idx].isPrefix = true;\n          tokens[idx].value = prefix;\n        } else {\n          tokens[idx].value = value;\n        }\n        depth(tokens[idx]);\n        state.maxDepth += tokens[idx].depth;\n      }\n      if (idx !== 0 || value !== '') {\n        parts.push(value);\n      }\n      prevIndex = i;\n    }\n\n    if (prevIndex && prevIndex + 1 < input.length) {\n      const value = input.slice(prevIndex + 1);\n      parts.push(value);\n\n      if (opts.tokens) {\n        tokens[tokens.length - 1].value = value;\n        depth(tokens[tokens.length - 1]);\n        state.maxDepth += tokens[tokens.length - 1].depth;\n      }\n    }\n\n    state.slashes = slashes;\n    state.parts = parts;\n  }\n\n  return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n  MAX_LENGTH,\n  POSIX_REGEX_SOURCE,\n  REGEX_NON_SPECIAL_CHARS,\n  REGEX_SPECIAL_CHARS_BACKREF,\n  REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n  if (typeof options.expandRange === 'function') {\n    return options.expandRange(...args, options);\n  }\n\n  args.sort();\n  const value = `[${args.join('-')}]`;\n\n  try {\n    /* eslint-disable-next-line no-new */\n    new RegExp(value);\n  } catch (ex) {\n    return args.map(v => utils.escapeRegex(v)).join('..');\n  }\n\n  return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n  return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n  if (typeof input !== 'string') {\n    throw new TypeError('Expected a string');\n  }\n\n  input = REPLACEMENTS[input] || input;\n\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n  let len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n  const tokens = [bos];\n\n  const capture = opts.capture ? '' : '?:';\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const PLATFORM_CHARS = constants.globChars(win32);\n  const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n  const {\n    DOT_LITERAL,\n    PLUS_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOT_SLASH,\n    NO_DOTS_SLASH,\n    QMARK,\n    QMARK_NO_DOT,\n    STAR,\n    START_ANCHOR\n  } = PLATFORM_CHARS;\n\n  const globstar = opts => {\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const nodot = opts.dot ? '' : NO_DOT;\n  const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n  let star = opts.bash === true ? globstar(opts) : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  // minimatch options support\n  if (typeof opts.noext === 'boolean') {\n    opts.noextglob = opts.noext;\n  }\n\n  const state = {\n    input,\n    index: -1,\n    start: 0,\n    dot: opts.dot === true,\n    consumed: '',\n    output: '',\n    prefix: '',\n    backtrack: false,\n    negated: false,\n    brackets: 0,\n    braces: 0,\n    parens: 0,\n    quotes: 0,\n    globstar: false,\n    tokens\n  };\n\n  input = utils.removePrefix(input, state);\n  len = input.length;\n\n  const extglobs = [];\n  const braces = [];\n  const stack = [];\n  let prev = bos;\n  let value;\n\n  /**\n   * Tokenizing helpers\n   */\n\n  const eos = () => state.index === len - 1;\n  const peek = state.peek = (n = 1) => input[state.index + n];\n  const advance = state.advance = () => input[++state.index] || '';\n  const remaining = () => input.slice(state.index + 1);\n  const consume = (value = '', num = 0) => {\n    state.consumed += value;\n    state.index += num;\n  };\n\n  const append = token => {\n    state.output += token.output != null ? token.output : token.value;\n    consume(token.value);\n  };\n\n  const negate = () => {\n    let count = 1;\n\n    while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n      advance();\n      state.start++;\n      count++;\n    }\n\n    if (count % 2 === 0) {\n      return false;\n    }\n\n    state.negated = true;\n    state.start++;\n    return true;\n  };\n\n  const increment = type => {\n    state[type]++;\n    stack.push(type);\n  };\n\n  const decrement = type => {\n    state[type]--;\n    stack.pop();\n  };\n\n  /**\n   * Push tokens onto the tokens array. This helper speeds up\n   * tokenizing by 1) helping us avoid backtracking as much as possible,\n   * and 2) helping us avoid creating extra tokens when consecutive\n   * characters are plain text. This improves performance and simplifies\n   * lookbehinds.\n   */\n\n  const push = tok => {\n    if (prev.type === 'globstar') {\n      const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n      const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n      if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n        state.output = state.output.slice(0, -prev.output.length);\n        prev.type = 'star';\n        prev.value = '*';\n        prev.output = star;\n        state.output += prev.output;\n      }\n    }\n\n    if (extglobs.length && tok.type !== 'paren') {\n      extglobs[extglobs.length - 1].inner += tok.value;\n    }\n\n    if (tok.value || tok.output) append(tok);\n    if (prev && prev.type === 'text' && tok.type === 'text') {\n      prev.value += tok.value;\n      prev.output = (prev.output || '') + tok.value;\n      return;\n    }\n\n    tok.prev = prev;\n    tokens.push(tok);\n    prev = tok;\n  };\n\n  const extglobOpen = (type, value) => {\n    const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n    token.prev = prev;\n    token.parens = state.parens;\n    token.output = state.output;\n    const output = (opts.capture ? '(' : '') + token.open;\n\n    increment('parens');\n    push({ type, value, output: state.output ? '' : ONE_CHAR });\n    push({ type: 'paren', extglob: true, value: advance(), output });\n    extglobs.push(token);\n  };\n\n  const extglobClose = token => {\n    let output = token.close + (opts.capture ? ')' : '');\n    let rest;\n\n    if (token.type === 'negate') {\n      let extglobStar = star;\n\n      if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n        extglobStar = globstar(opts);\n      }\n\n      if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n        output = token.close = `)$))${extglobStar}`;\n      }\n\n      if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n        // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n        // In this case, we need to parse the string and use it in the output of the original pattern.\n        // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n        //\n        // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n        const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n        output = token.close = `)${expression})${extglobStar})`;\n      }\n\n      if (token.prev.type === 'bos') {\n        state.negatedExtglob = true;\n      }\n    }\n\n    push({ type: 'paren', extglob: true, value, output });\n    decrement('parens');\n  };\n\n  /**\n   * Fast paths\n   */\n\n  if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n    let backslashes = false;\n\n    let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n      if (first === '\\\\') {\n        backslashes = true;\n        return m;\n      }\n\n      if (first === '?') {\n        if (esc) {\n          return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        if (index === 0) {\n          return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n        }\n        return QMARK.repeat(chars.length);\n      }\n\n      if (first === '.') {\n        return DOT_LITERAL.repeat(chars.length);\n      }\n\n      if (first === '*') {\n        if (esc) {\n          return esc + first + (rest ? star : '');\n        }\n        return star;\n      }\n      return esc ? m : `\\\\${m}`;\n    });\n\n    if (backslashes === true) {\n      if (opts.unescape === true) {\n        output = output.replace(/\\\\/g, '');\n      } else {\n        output = output.replace(/\\\\+/g, m => {\n          return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n        });\n      }\n    }\n\n    if (output === input && opts.contains === true) {\n      state.output = input;\n      return state;\n    }\n\n    state.output = utils.wrapOutput(output, state, options);\n    return state;\n  }\n\n  /**\n   * Tokenize input until we reach end-of-string\n   */\n\n  while (!eos()) {\n    value = advance();\n\n    if (value === '\\u0000') {\n      continue;\n    }\n\n    /**\n     * Escaped characters\n     */\n\n    if (value === '\\\\') {\n      const next = peek();\n\n      if (next === '/' && opts.bash !== true) {\n        continue;\n      }\n\n      if (next === '.' || next === ';') {\n        continue;\n      }\n\n      if (!next) {\n        value += '\\\\';\n        push({ type: 'text', value });\n        continue;\n      }\n\n      // collapse slashes to reduce potential for exploits\n      const match = /^\\\\+/.exec(remaining());\n      let slashes = 0;\n\n      if (match && match[0].length > 2) {\n        slashes = match[0].length;\n        state.index += slashes;\n        if (slashes % 2 !== 0) {\n          value += '\\\\';\n        }\n      }\n\n      if (opts.unescape === true) {\n        value = advance();\n      } else {\n        value += advance();\n      }\n\n      if (state.brackets === 0) {\n        push({ type: 'text', value });\n        continue;\n      }\n    }\n\n    /**\n     * If we're inside a regex character class, continue\n     * until we reach the closing bracket.\n     */\n\n    if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n      if (opts.posix !== false && value === ':') {\n        const inner = prev.value.slice(1);\n        if (inner.includes('[')) {\n          prev.posix = true;\n\n          if (inner.includes(':')) {\n            const idx = prev.value.lastIndexOf('[');\n            const pre = prev.value.slice(0, idx);\n            const rest = prev.value.slice(idx + 2);\n            const posix = POSIX_REGEX_SOURCE[rest];\n            if (posix) {\n              prev.value = pre + posix;\n              state.backtrack = true;\n              advance();\n\n              if (!bos.output && tokens.indexOf(prev) === 1) {\n                bos.output = ONE_CHAR;\n              }\n              continue;\n            }\n          }\n        }\n      }\n\n      if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n        value = `\\\\${value}`;\n      }\n\n      if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n        value = `\\\\${value}`;\n      }\n\n      if (opts.posix === true && value === '!' && prev.value === '[') {\n        value = '^';\n      }\n\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * If we're inside a quoted string, continue\n     * until we reach the closing double quote.\n     */\n\n    if (state.quotes === 1 && value !== '\"') {\n      value = utils.escapeRegex(value);\n      prev.value += value;\n      append({ value });\n      continue;\n    }\n\n    /**\n     * Double quotes\n     */\n\n    if (value === '\"') {\n      state.quotes = state.quotes === 1 ? 0 : 1;\n      if (opts.keepQuotes === true) {\n        push({ type: 'text', value });\n      }\n      continue;\n    }\n\n    /**\n     * Parentheses\n     */\n\n    if (value === '(') {\n      increment('parens');\n      push({ type: 'paren', value });\n      continue;\n    }\n\n    if (value === ')') {\n      if (state.parens === 0 && opts.strictBrackets === true) {\n        throw new SyntaxError(syntaxError('opening', '('));\n      }\n\n      const extglob = extglobs[extglobs.length - 1];\n      if (extglob && state.parens === extglob.parens + 1) {\n        extglobClose(extglobs.pop());\n        continue;\n      }\n\n      push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n      decrement('parens');\n      continue;\n    }\n\n    /**\n     * Square brackets\n     */\n\n    if (value === '[') {\n      if (opts.nobracket === true || !remaining().includes(']')) {\n        if (opts.nobracket !== true && opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('closing', ']'));\n        }\n\n        value = `\\\\${value}`;\n      } else {\n        increment('brackets');\n      }\n\n      push({ type: 'bracket', value });\n      continue;\n    }\n\n    if (value === ']') {\n      if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      if (state.brackets === 0) {\n        if (opts.strictBrackets === true) {\n          throw new SyntaxError(syntaxError('opening', '['));\n        }\n\n        push({ type: 'text', value, output: `\\\\${value}` });\n        continue;\n      }\n\n      decrement('brackets');\n\n      const prevValue = prev.value.slice(1);\n      if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n        value = `/${value}`;\n      }\n\n      prev.value += value;\n      append({ value });\n\n      // when literal brackets are explicitly disabled\n      // assume we should match with a regex character class\n      if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n        continue;\n      }\n\n      const escaped = utils.escapeRegex(prev.value);\n      state.output = state.output.slice(0, -prev.value.length);\n\n      // when literal brackets are explicitly enabled\n      // assume we should escape the brackets to match literal characters\n      if (opts.literalBrackets === true) {\n        state.output += escaped;\n        prev.value = escaped;\n        continue;\n      }\n\n      // when the user specifies nothing, try to match both\n      prev.value = `(${capture}${escaped}|${prev.value})`;\n      state.output += prev.value;\n      continue;\n    }\n\n    /**\n     * Braces\n     */\n\n    if (value === '{' && opts.nobrace !== true) {\n      increment('braces');\n\n      const open = {\n        type: 'brace',\n        value,\n        output: '(',\n        outputIndex: state.output.length,\n        tokensIndex: state.tokens.length\n      };\n\n      braces.push(open);\n      push(open);\n      continue;\n    }\n\n    if (value === '}') {\n      const brace = braces[braces.length - 1];\n\n      if (opts.nobrace === true || !brace) {\n        push({ type: 'text', value, output: value });\n        continue;\n      }\n\n      let output = ')';\n\n      if (brace.dots === true) {\n        const arr = tokens.slice();\n        const range = [];\n\n        for (let i = arr.length - 1; i >= 0; i--) {\n          tokens.pop();\n          if (arr[i].type === 'brace') {\n            break;\n          }\n          if (arr[i].type !== 'dots') {\n            range.unshift(arr[i].value);\n          }\n        }\n\n        output = expandRange(range, opts);\n        state.backtrack = true;\n      }\n\n      if (brace.comma !== true && brace.dots !== true) {\n        const out = state.output.slice(0, brace.outputIndex);\n        const toks = state.tokens.slice(brace.tokensIndex);\n        brace.value = brace.output = '\\\\{';\n        value = output = '\\\\}';\n        state.output = out;\n        for (const t of toks) {\n          state.output += (t.output || t.value);\n        }\n      }\n\n      push({ type: 'brace', value, output });\n      decrement('braces');\n      braces.pop();\n      continue;\n    }\n\n    /**\n     * Pipes\n     */\n\n    if (value === '|') {\n      if (extglobs.length > 0) {\n        extglobs[extglobs.length - 1].conditions++;\n      }\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Commas\n     */\n\n    if (value === ',') {\n      let output = value;\n\n      const brace = braces[braces.length - 1];\n      if (brace && stack[stack.length - 1] === 'braces') {\n        brace.comma = true;\n        output = '|';\n      }\n\n      push({ type: 'comma', value, output });\n      continue;\n    }\n\n    /**\n     * Slashes\n     */\n\n    if (value === '/') {\n      // if the beginning of the glob is \"./\", advance the start\n      // to the current index, and don't add the \"./\" characters\n      // to the state. This greatly simplifies lookbehinds when\n      // checking for BOS characters like \"!\" and \".\" (not \"./\")\n      if (prev.type === 'dot' && state.index === state.start + 1) {\n        state.start = state.index + 1;\n        state.consumed = '';\n        state.output = '';\n        tokens.pop();\n        prev = bos; // reset \"prev\" to the first token\n        continue;\n      }\n\n      push({ type: 'slash', value, output: SLASH_LITERAL });\n      continue;\n    }\n\n    /**\n     * Dots\n     */\n\n    if (value === '.') {\n      if (state.braces > 0 && prev.type === 'dot') {\n        if (prev.value === '.') prev.output = DOT_LITERAL;\n        const brace = braces[braces.length - 1];\n        prev.type = 'dots';\n        prev.output += value;\n        prev.value += value;\n        brace.dots = true;\n        continue;\n      }\n\n      if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n        push({ type: 'text', value, output: DOT_LITERAL });\n        continue;\n      }\n\n      push({ type: 'dot', value, output: DOT_LITERAL });\n      continue;\n    }\n\n    /**\n     * Question marks\n     */\n\n    if (value === '?') {\n      const isGroup = prev && prev.value === '(';\n      if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('qmark', value);\n        continue;\n      }\n\n      if (prev && prev.type === 'paren') {\n        const next = peek();\n        let output = value;\n\n        if (next === '<' && !utils.supportsLookbehinds()) {\n          throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n        }\n\n        if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n          output = `\\\\${value}`;\n        }\n\n        push({ type: 'text', value, output });\n        continue;\n      }\n\n      if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n        push({ type: 'qmark', value, output: QMARK_NO_DOT });\n        continue;\n      }\n\n      push({ type: 'qmark', value, output: QMARK });\n      continue;\n    }\n\n    /**\n     * Exclamation\n     */\n\n    if (value === '!') {\n      if (opts.noextglob !== true && peek() === '(') {\n        if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n          extglobOpen('negate', value);\n          continue;\n        }\n      }\n\n      if (opts.nonegate !== true && state.index === 0) {\n        negate();\n        continue;\n      }\n    }\n\n    /**\n     * Plus\n     */\n\n    if (value === '+') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        extglobOpen('plus', value);\n        continue;\n      }\n\n      if ((prev && prev.value === '(') || opts.regex === false) {\n        push({ type: 'plus', value, output: PLUS_LITERAL });\n        continue;\n      }\n\n      if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n        push({ type: 'plus', value });\n        continue;\n      }\n\n      push({ type: 'plus', value: PLUS_LITERAL });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value === '@') {\n      if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n        push({ type: 'at', extglob: true, value, output: '' });\n        continue;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Plain text\n     */\n\n    if (value !== '*') {\n      if (value === '$' || value === '^') {\n        value = `\\\\${value}`;\n      }\n\n      const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n      if (match) {\n        value += match[0];\n        state.index += match[0].length;\n      }\n\n      push({ type: 'text', value });\n      continue;\n    }\n\n    /**\n     * Stars\n     */\n\n    if (prev && (prev.type === 'globstar' || prev.star === true)) {\n      prev.type = 'star';\n      prev.star = true;\n      prev.value += value;\n      prev.output = star;\n      state.backtrack = true;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    let rest = remaining();\n    if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n      extglobOpen('star', value);\n      continue;\n    }\n\n    if (prev.type === 'star') {\n      if (opts.noglobstar === true) {\n        consume(value);\n        continue;\n      }\n\n      const prior = prev.prev;\n      const before = prior.prev;\n      const isStart = prior.type === 'slash' || prior.type === 'bos';\n      const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n      if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n      const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n      if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n        push({ type: 'star', value, output: '' });\n        continue;\n      }\n\n      // strip consecutive `/**/`\n      while (rest.slice(0, 3) === '/**') {\n        const after = input[state.index + 4];\n        if (after && after !== '/') {\n          break;\n        }\n        rest = rest.slice(3);\n        consume('/**', 3);\n      }\n\n      if (prior.type === 'bos' && eos()) {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = globstar(opts);\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n        prev.value += value;\n        state.globstar = true;\n        state.output += prior.output + prev.output;\n        consume(value);\n        continue;\n      }\n\n      if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n        const end = rest[1] !== void 0 ? '|$' : '';\n\n        state.output = state.output.slice(0, -(prior.output + prev.output).length);\n        prior.output = `(?:${prior.output}`;\n\n        prev.type = 'globstar';\n        prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n        prev.value += value;\n\n        state.output += prior.output + prev.output;\n        state.globstar = true;\n\n        consume(value + advance());\n\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      if (prior.type === 'bos' && rest[0] === '/') {\n        prev.type = 'globstar';\n        prev.value += value;\n        prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n        state.output = prev.output;\n        state.globstar = true;\n        consume(value + advance());\n        push({ type: 'slash', value: '/', output: '' });\n        continue;\n      }\n\n      // remove single star from output\n      state.output = state.output.slice(0, -prev.output.length);\n\n      // reset previous token to globstar\n      prev.type = 'globstar';\n      prev.output = globstar(opts);\n      prev.value += value;\n\n      // reset output with globstar\n      state.output += prev.output;\n      state.globstar = true;\n      consume(value);\n      continue;\n    }\n\n    const token = { type: 'star', value, output: star };\n\n    if (opts.bash === true) {\n      token.output = '.*?';\n      if (prev.type === 'bos' || prev.type === 'slash') {\n        token.output = nodot + token.output;\n      }\n      push(token);\n      continue;\n    }\n\n    if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n      token.output = value;\n      push(token);\n      continue;\n    }\n\n    if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n      if (prev.type === 'dot') {\n        state.output += NO_DOT_SLASH;\n        prev.output += NO_DOT_SLASH;\n\n      } else if (opts.dot === true) {\n        state.output += NO_DOTS_SLASH;\n        prev.output += NO_DOTS_SLASH;\n\n      } else {\n        state.output += nodot;\n        prev.output += nodot;\n      }\n\n      if (peek() !== '*') {\n        state.output += ONE_CHAR;\n        prev.output += ONE_CHAR;\n      }\n    }\n\n    push(token);\n  }\n\n  while (state.brackets > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n    state.output = utils.escapeLast(state.output, '[');\n    decrement('brackets');\n  }\n\n  while (state.parens > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n    state.output = utils.escapeLast(state.output, '(');\n    decrement('parens');\n  }\n\n  while (state.braces > 0) {\n    if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n    state.output = utils.escapeLast(state.output, '{');\n    decrement('braces');\n  }\n\n  if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n    push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n  }\n\n  // rebuild the output if we had to backtrack at any point\n  if (state.backtrack === true) {\n    state.output = '';\n\n    for (const token of state.tokens) {\n      state.output += token.output != null ? token.output : token.value;\n\n      if (token.suffix) {\n        state.output += token.suffix;\n      }\n    }\n  }\n\n  return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n  const opts = { ...options };\n  const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n  const len = input.length;\n  if (len > max) {\n    throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n  }\n\n  input = REPLACEMENTS[input] || input;\n  const win32 = utils.isWindows(options);\n\n  // create constants based on platform, for windows or posix\n  const {\n    DOT_LITERAL,\n    SLASH_LITERAL,\n    ONE_CHAR,\n    DOTS_SLASH,\n    NO_DOT,\n    NO_DOTS,\n    NO_DOTS_SLASH,\n    STAR,\n    START_ANCHOR\n  } = constants.globChars(win32);\n\n  const nodot = opts.dot ? NO_DOTS : NO_DOT;\n  const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n  const capture = opts.capture ? '' : '?:';\n  const state = { negated: false, prefix: '' };\n  let star = opts.bash === true ? '.*?' : STAR;\n\n  if (opts.capture) {\n    star = `(${star})`;\n  }\n\n  const globstar = opts => {\n    if (opts.noglobstar === true) return star;\n    return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n  };\n\n  const create = str => {\n    switch (str) {\n      case '*':\n        return `${nodot}${ONE_CHAR}${star}`;\n\n      case '.*':\n        return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*.*':\n        return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '*/*':\n        return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n      case '**':\n        return nodot + globstar(opts);\n\n      case '**/*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n      case '**/*.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      case '**/.*':\n        return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n      default: {\n        const match = /^(.*?)\\.(\\w+)$/.exec(str);\n        if (!match) return;\n\n        const source = create(match[1]);\n        if (!source) return;\n\n        return source + DOT_LITERAL + match[2];\n      }\n    }\n  };\n\n  const output = utils.removePrefix(input, state);\n  let source = create(output);\n\n  if (source && opts.strictSlashes !== true) {\n    source += `${SLASH_LITERAL}?`;\n  }\n\n  return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n  const index = v.indexOf('{');\n  return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n  patterns = [].concat(patterns);\n  list = [].concat(list);\n\n  let omit = new Set();\n  let keep = new Set();\n  let items = new Set();\n  let negatives = 0;\n\n  let onResult = state => {\n    items.add(state.output);\n    if (options && options.onResult) {\n      options.onResult(state);\n    }\n  };\n\n  for (let i = 0; i < patterns.length; i++) {\n    let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n    let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n    if (negated) negatives++;\n\n    for (let item of list) {\n      let matched = isMatch(item, true);\n\n      let match = negated ? !matched.isMatch : matched.isMatch;\n      if (!match) continue;\n\n      if (negated) {\n        omit.add(matched.output);\n      } else {\n        omit.delete(matched.output);\n        keep.add(matched.output);\n      }\n    }\n  }\n\n  let result = negatives === patterns.length ? [...items] : [...keep];\n  let matches = result.filter(item => !omit.has(item));\n\n  if (options && matches.length === 0) {\n    if (options.failglob === true) {\n      throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n    }\n\n    if (options.nonull === true || options.nullglob === true) {\n      return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n    }\n  }\n\n  return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n  patterns = [].concat(patterns).map(String);\n  let result = new Set();\n  let items = [];\n\n  let onResult = state => {\n    if (options.onResult) options.onResult(state);\n    items.push(state.output);\n  };\n\n  let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n  for (let item of items) {\n    if (!matches.has(item)) {\n      result.add(item);\n    }\n  }\n  return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  if (Array.isArray(pattern)) {\n    return pattern.some(p => micromatch.contains(str, p, options));\n  }\n\n  if (typeof pattern === 'string') {\n    if (isEmptyString(str) || isEmptyString(pattern)) {\n      return false;\n    }\n\n    if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n      return true;\n    }\n  }\n\n  return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n  if (!utils.isObject(obj)) {\n    throw new TypeError('Expected the first argument to be an object');\n  }\n  let keys = micromatch(Object.keys(obj), patterns, options);\n  let res = {};\n  for (let key of keys) res[key] = obj[key];\n  return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (items.some(item => isMatch(item))) {\n      return true;\n    }\n  }\n  return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n  let items = [].concat(list);\n\n  for (let pattern of [].concat(patterns)) {\n    let isMatch = picomatch(String(pattern), options);\n    if (!items.every(item => isMatch(item))) {\n      return false;\n    }\n  }\n  return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n  if (typeof str !== 'string') {\n    throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n  }\n\n  return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n  let posix = utils.isWindows(options);\n  let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n  let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n  if (match) {\n    return match.slice(1).map(v => v === void 0 ? '' : v);\n  }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n  let res = [];\n  for (let pattern of [].concat(patterns || [])) {\n    for (let str of braces(String(pattern), options)) {\n      res.push(picomatch.parse(str, options));\n    }\n  }\n  return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n    return [pattern];\n  }\n  return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n  if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n  return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","import path from 'path';\nimport * as pluginInfo from '../package.json';\nimport { transformJsx } from './jsx';\nimport { transformVue } from './vue';\nimport { PluginOptions, TTransformer } from './type';\nimport crypto from 'node:crypto';\nimport micromatch from 'micromatch';\n\nconst transformerFileTypes: Record<string, string[]> = {\n  vue: ['vue'],\n  jsx: ['jsx', 'tsx', 'js', 'ts'],\n};\n\nconst transformers: Record<string, TTransformer> = {\n  vue: transformVue,\n  jsx: transformJsx,\n};\n\nconst PREFIX = 'locator';\nconst DEFAULT_INCLUDE = ['src/**/*.{vue,jsx,tsx,js,ts}'];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst cache = new Map<string, { code: string; map?: any }>();\n\nfunction getHash(code: string) {\n  return crypto.createHash('md5').update(code).digest('hex');\n}\n\nexport function viteSourceLocator(options: PluginOptions = {}) {\n  const { include = DEFAULT_INCLUDE, exclude = [], prefix = PREFIX, enable = true, attributes, filterTag } = options;\n\n  const includeArr = Array.isArray(include) ? include : [include];\n  const excludeArr = Array.isArray(exclude) ? exclude : [exclude];\n\n  function isIncluded(file: string) {\n    const matched = includeArr.some((pattern) => {\n      return micromatch.isMatch(file, pattern);\n    });\n\n    const excluded = excludeArr.length > 0 && excludeArr.some((pattern) => micromatch.isMatch(file, pattern));\n    return matched && !excluded;\n  }\n\n  return {\n    name: pluginInfo.name,\n    enforce: 'pre' as const,\n    apply: 'serve' as const,\n    version: pluginInfo.version,\n    async transform(code: string, id: string) {\n      if (!enable) return;\n      const relativePath = path.relative(process.cwd(), id);\n\n      if (!isIncluded(relativePath)) return;\n      const hash = getHash(code);\n      const cacheKey = `${id}:${hash}`;\n      if (cache.has(cacheKey)) {\n        const value = cache.get(cacheKey);\n        // eslint-disable-next-line consistent-return\n        return value;\n      }\n      const transformer = Object.keys(transformers).find((key) => {\n        const fileTypes = transformerFileTypes[key];\n        return fileTypes.some((type) => id.endsWith(`.${type}`));\n      });\n\n      if (!transformer) {\n        return;\n      }\n      const result = transformers[transformer]?.(code, id, prefix, { attributes, filterTag });\n      cache.set(cacheKey, result);\n      // eslint-disable-next-line consistent-return\n      return result;\n    },\n  };\n}\n"],"names":["HTML_TAGS","EDITABLE_ELEMENT","_optionalChain","ops","lastAccessLHS","value","i","length","op","fn","args","call","undefined","traverse","traverseModle","default","generate","generateModule","getTextContent","path","text","hasDynamicContent","parent","t","isJSXElement","children","forEach","child","isJSXText","isJSXExpressionContainer","isInteger","num","Number","trim","exports","find","node","type","nodes","exceedsLimit","min","max","step","limit","escapeNode","block","n","escaped","encloseBrace","commas","ranges","invalid","isInvalidBrace","dollar","open","close","isOpenOrClose","reduce","acc","push","flatten","result","flat","arr","ele","Array","isArray","utils","require$$0","stringify","ast","options","invalidBlock","escapeInvalid","invalidNode","output","isNumber","isFinite","toRegexRange","TypeError","String","opts","relaxZeros","strictZeros","cacheKey","shorthand","capture","wrap","cache","hasOwnProperty","a","Math","b","abs","isPadded","hasPadding","state","positives","negatives","maxLen","splitToPatterns","neg","pos","onlyNegative","filterPatterns","onlyPositive","intersected","concat","join","collatePatterns","rangeToPattern","start","stop","pattern","count","digits","zipped","zip","startDigit","stopDigit","toCharacterClass","tok","prev","nines","zeros","countNines","stops","Set","add","countZeros","sort","compare","splitToRanges","tokens","obj","padZeros","string","toQuantifier","pop","comparison","prefix","intersection","contains","key","val","some","len","slice","repeat","integer","pow","str","test","diff","relax","clearCache","toRegexRange_1","util","require$$1","isObject","isValidValue","input","index","pad","maxLength","toNumber","dash","padStart","toMaxLen","negative","toRange","isNumbers","fromCharCode","toRegex","end","rangeError","RangeError","inspect","invalidRange","strictRanges","fillNumbers","descending","startString","endString","stepString","padded","format","transform","parts","range","map","v","toSequence","fill","charCodeAt","fillLetters","invalidStep","fillRange","MAX_LENGTH","CHAR_BACKSLASH","CHAR_BACKTICK","CHAR_COMMA","CHAR_DOT","CHAR_LEFT_PARENTHESES","CHAR_RIGHT_PARENTHESES","CHAR_LEFT_CURLY_BRACE","CHAR_RIGHT_CURLY_BRACE","CHAR_LEFT_SQUARE_BRACKET","CHAR_RIGHT_SQUARE_BRACKET","CHAR_DOUBLE_QUOTE","CHAR_SINGLE_QUOTE","CHAR_NO_BREAK_SPACE","CHAR_ZERO_WIDTH_NOBREAK_SPACE","constants","CHAR_0","CHAR_9","CHAR_UPPERCASE_A","CHAR_LOWERCASE_A","CHAR_UPPERCASE_Z","CHAR_LOWERCASE_Z","CHAR_ASTERISK","CHAR_AMPERSAND","CHAR_AT","CHAR_CARRIAGE_RETURN","CHAR_CIRCUMFLEX_ACCENT","CHAR_COLON","CHAR_DOLLAR","CHAR_EQUAL","CHAR_EXCLAMATION_MARK","CHAR_FORM_FEED","CHAR_FORWARD_SLASH","CHAR_HASH","CHAR_HYPHEN_MINUS","CHAR_LEFT_ANGLE_BRACKET","CHAR_LINE_FEED","CHAR_PERCENT","CHAR_PLUS","CHAR_QUESTION_MARK","CHAR_RIGHT_ANGLE_BRACKET","CHAR_SEMICOLON","CHAR_SPACE","CHAR_TAB","CHAR_UNDERSCORE","CHAR_VERTICAL_LINE","parse_1","SyntaxError","stack","brackets","depth","advance","shift","siblings","before","next","keepQuotes","keepEscaping","isOpen","isClose","indexOf","splice","compile","compile_1","walk","console","log","expand","require$$2","append","queue","stash","enclose","item","expand_1","rangeLimit","p","q","parse","require$$3","braces","create","nodupes","noempty","filter","Boolean","braces_1","WIN_SLASH","WIN_NO_SLASH","DOT_LITERAL","SLASH_LITERAL","QMARK","END_ANCHOR","START_ANCHOR","DOTS_SLASH","POSIX_CHARS","PLUS_LITERAL","QMARK_LITERAL","ONE_CHAR","NO_DOT","NO_DOTS","NO_DOT_SLASH","NO_DOTS_SLASH","QMARK_NO_DOT","STAR","WINDOWS_CHARS","POSIX_REGEX_SOURCE","alnum","alpha","ascii","blank","cntrl","digit","graph","lower","print","punct","space","upper","word","xdigit","REGEX_BACKSLASH","REGEX_NON_SPECIAL_CHARS","REGEX_SPECIAL_CHARS","REGEX_SPECIAL_CHARS_BACKREF","REGEX_SPECIAL_CHARS_GLOBAL","REGEX_REMOVE_BACKSLASH","REPLACEMENTS","CHAR_BACKWARD_SLASH","CHAR_GRAVE_ACCENT","SEP","sep","extglobChars","chars","globChars","win32","process","platform","hasRegexChars","isRegexChar","escapeRegex","replace","toPosixSlashes","removeBackslashes","match","supportsLookbehinds","segs","version","split","isWindows","windows","escapeLast","char","lastIdx","idx","lastIndexOf","removePrefix","startsWith","wrapOutput","negated","scan","isPathSeparator","code","token","isPrefix","isGlobstar","Infinity","scan_1","scanToEnd","slashes","lastIndex","isBrace","isBracket","isGlob","isExtglob","braceEscaped","backslashes","negatedExtglob","finished","eos","noext","nonegate","noparen","base","glob","unescape","maxDepth","prevIndex","expandRange","RegExp","ex","syntaxError","bos","prepend","PLATFORM_CHARS","EXTGLOB_CHARS","globstar","dot","nodot","qmarkNoDot","star","bash","noextglob","consumed","backtrack","parens","quotes","extglobs","peek","remaining","consume","negate","increment","decrement","extglob","inner","extglobOpen","conditions","extglobClose","rest","extglobStar","includes","expression","fastpaths","m","esc","first","exec","posix","pre","strictBrackets","nobracket","prevValue","literalBrackets","nobrace","outputIndex","tokensIndex","brace","dots","unshift","comma","out","toks","Error","regex","noglobstar","prior","isStart","afterStar","after","strictSlashes","suffix","slashDot","source","require$$4","picomatch","returnState","fns","arrayMatcher","isMatch","isState","compileRe","makeRe","isIgnored","ignore","ignoreOpts","onMatch","onResult","matcher","returnObject","onIgnore","matchBase","basename","patterns","returnOutput","parsed","flags","nocase","err","debug","picomatch_1","isEmptyString","hasBraces","micromatch","list","omit","keep","items","matched","delete","matches","has","failglob","nonull","nullglob","any","not","matchKeys","keys","Object","res","every","all","braceExpand","micromatch_1","transformerFileTypes","vue","jsx","transformers","id","projectRoot","resolve","cwd","relativePath","relative","descriptor","parseSFC","filename","sourceMap","template","startOffset","loc","offset","ms","MagicString","parseTemplate","content","comments","isNativeTag","tag","injectAttributes","parentStack","NodeTypes","ELEMENT","props","prop","ATTRIBUTE","name","_","_2","toLowerCase","_3","_4","_5","isSvgChild","shouldInject","_7","filterTag","insertOffset","line","StartColumn","column","attrs","_8","attributes","customAttrs","entries","k","staticText","_9","_10","_11","INTERPOLATION","COMPOUND_EXPRESSION","TEXT","encodeURIComponent","_12","_14","_15","_16","_17","appendLeft","toString","generateMap","hires","babelParser","sourceType","plugins","fPath","JSXOpeningElement","_6","actualLine","findIndex","lineText","attr","isJSXAttribute","isJSXIdentifier","isJSXMemberExpression","object","property","currentPath","parentPath","tagName","openingElement","getFullJSXOpeningTag","startLine","_13","startColumn","endLine","_18","_19","_20","_21","endColumn","_22","_23","_24","_25","srcLines","srcLine","actualStart","actualEnd","substring","fullTag","currentLine","_26","isTextElement","jsxAttribute","jsxIdentifier","stringLiteral","PREFIX","DEFAULT_INCLUDE","Map","viteSourceLocator","include","exclude","enable","includeArr","excludeArr","enforce","apply","file","excluded","isIncluded","hash","crypto","createHash","update","digest","getHash","get","transformer","endsWith","set"],"mappings":";;;;gUAAO,MAAMA,EAAY,CACvB,WACA,OACA,OACA,QACA,OACA,OACA,OACA,QACA,WACA,SACA,WACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,IACA,KACA,KACA,MACA,aACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,aACA,MACA,OACA,OACA,IACA,KACA,SACA,QACA,OACA,OACA,OACA,OACA,MACA,MACA,IACA,IACA,IACA,IACA,MACA,MACA,OACA,WACA,QACA,MACA,MACA,MACA,SACA,SACA,MACA,UACA,UACA,QACA,UACA,UACA,UACA,SACA,OACA,QACA,WACA,SACA,SACA,SACA,WACA,QACA,WACA,SACA,WACA,SACA,MACA,SACA,QACA,SACA,QACA,QACA,QACA,SACA,QACA,SACA,MACA,OACA,UACA,QACA,UACA,QACA,QACA,QACA,KACA,KACA,KACA,MACA,WACA,OACA,UACA,SACA,WACA,MACA,SACA,OACA,QACA,WACA,WACA,SACA,MAGWC,EAAmB,CAAC,QAAS,OAAQ,SAAU,IAAK,MAAO,KAAM,KAAM,KAAM,KAAM,KAAM,MCpH/F,SAAAC,EAAAC,GAAA,IAAAC,EAAAC,EAAAF,EAAA,GAAAG,EAAA,EAAA,KAAAA,EAAAH,EAAAI,QAAA,CAAA,MAAAC,EAAAL,EAAAG,GAAAG,EAAAN,EAAAG,EAAA,GAAA,GAAAA,GAAA,GAAA,mBAAAE,GAAA,iBAAAA,IAAA,MAAAH,EAAA,OAAA,WAAAG,GAAA,mBAAAA,GAAAJ,EAAAC,EAAAA,EAAAI,EAAAJ,IAAA,SAAAG,GAAA,iBAAAA,IAAAH,EAAAI,GAAA,IAAAC,IAAAL,EAAAM,KAAAP,KAAAM,KAAAN,OAAAQ,EAAA,CAAA,OAAAP,CAAA,CAUP,MAAMQ,EAAYC,EAAcC,SAAWD,EAGrCE,EAAYC,EAAeF,SAAWE,EAGtCC,EAAkBC,IACtB,IAAIC,EAAO,GACPC,GAAoB,EAGxB,MAAMC,OAAEA,GAAWH,EAEnB,OAAKI,EAAEC,aAAaF,IAGpBA,EAAOG,SAASC,SAASC,IACnBJ,EAAEK,UAAUD,GACdP,GAAQO,EAAMtB,MACLkB,EAAEM,yBAAyBF,KACpCN,GAAoB,EAC1B,IAISA,EAAoB,GAAKD,GAZI,EAYA,ECnC/B,SAAAlB,EAAAC,GAAA,IAAAC,EAAAC,EAAAF,EAAA,GAAAG,EAAA,EAAA,KAAAA,EAAAH,EAAAI,QAAA,CAAA,MAAAC,EAAAL,EAAAG,GAAAG,EAAAN,EAAAG,EAAA,GAAA,GAAAA,GAAA,GAAA,mBAAAE,GAAA,iBAAAA,IAAA,MAAAH,EAAA,OAAA,WAAAG,GAAA,mBAAAA,GAAAJ,EAAAC,EAAAA,EAAAI,EAAAJ,IAAA,SAAAG,GAAA,iBAAAA,IAAAH,EAAAI,GAAA,IAAAC,IAAAL,EAAAM,KAAAP,KAAAM,KAAAN,OAAAQ,EAAA,CAAA,OAAAP,CAAA,sLCEPyB,UAAoBC,GACC,iBAARA,EACFC,OAAOF,UAAUC,GAEP,iBAARA,GAAmC,KAAfA,EAAIE,QAC1BD,OAAOF,UAAUE,OAAOD,IASnCG,EAAAC,KAAe,CAACC,EAAMC,IAASD,EAAKE,MAAMH,MAAKC,GAAQA,EAAKC,OAASA,IAMrEH,EAAuBK,aAAA,CAACC,EAAKC,EAAKC,EAAO,EAAGC,KAC5B,IAAVA,MACCT,EAAQJ,UAAUU,KAASN,EAAQJ,UAAUW,MACzCT,OAAOS,GAAOT,OAAOQ,IAAQR,OAAOU,IAAUC,EAOzDT,EAAqBU,WAAA,CAACC,EAAOC,EAAI,EAAGT,KAClC,MAAMD,EAAOS,EAAMP,MAAMQ,GACpBV,IAEAC,GAAQD,EAAKC,OAASA,GAAuB,SAAdD,EAAKC,MAAiC,UAAdD,EAAKC,QAC1C,IAAjBD,EAAKW,UACPX,EAAK/B,MAAQ,KAAO+B,EAAK/B,MACzB+B,EAAKW,SAAU,EAErB,EAOAb,EAAAc,aAAuBZ,KACH,UAAdA,EAAKC,MACJD,EAAKa,QAAU,EAAIb,EAAKc,SAC3Bd,EAAKe,SAAU,EACR,IASXjB,EAAAkB,eAAyBP,KACJ,UAAfA,EAAMR,OACY,IAAlBQ,EAAMM,UAAoBN,EAAMQ,SAC/BR,EAAMI,QAAU,EAAIJ,EAAMK,SAIZ,IAAfL,EAAMS,OAAiC,IAAhBT,EAAMU,QAH/BV,EAAMM,SAAU,EACT,KAaXjB,EAAAsB,cAAwBpB,GACJ,SAAdA,EAAKC,MAAiC,UAAdD,EAAKC,OAGZ,IAAdD,EAAKkB,OAAgC,IAAflB,EAAKmB,MAOpCrB,EAAiBuB,OAAAnB,GAASA,EAAMmB,QAAO,CAACC,EAAKtB,KACzB,SAAdA,EAAKC,MAAiBqB,EAAIC,KAAKvB,EAAK/B,OACtB,UAAd+B,EAAKC,OAAkBD,EAAKC,KAAO,QAChCqB,IACN,IAMHxB,EAAkB0B,QAAA,IAAIlD,KACpB,MAAMmD,EAAS,GAETC,EAAOC,IACX,IAAK,IAAIzD,EAAI,EAAGA,EAAIyD,EAAIxD,OAAQD,IAAK,CACnC,MAAM0D,EAAMD,EAAIzD,GAEZ2D,MAAMC,QAAQF,GAChBF,EAAKE,QAIKpD,IAARoD,GACFH,EAAOF,KAAKK,EAEpB,CACI,OAAOH,CAAM,EAIf,OADAC,EAAKpD,GACEmD,CAAM,0CCtHf,MAAMM,EAAQC,WAEdC,EAAiB,CAACC,EAAKC,EAAU,MAC/B,MAAMF,EAAY,CAACjC,EAAMd,EAAS,CAAA,KAChC,MAAMkD,EAAeD,EAAQE,eAAiBN,EAAMf,eAAe9B,GAC7DoD,GAA+B,IAAjBtC,EAAKe,UAA8C,IAA1BoB,EAAQE,cACrD,IAAIE,EAAS,GAEb,GAAIvC,EAAK/B,MACP,OAAKmE,GAAgBE,IAAgBP,EAAMX,cAAcpB,GAChD,KAAOA,EAAK/B,MAEd+B,EAAK/B,MAGd,GAAI+B,EAAK/B,MACP,OAAO+B,EAAK/B,MAGd,GAAI+B,EAAKE,MACP,IAAK,MAAMX,KAASS,EAAKE,MACvBqC,GAAUN,EAAU1C,GAGxB,OAAOgD,CAAM,EAGf,OAAON,EAAUC,EAAI;;;;;;gCCpBTM,EAAG,SAAS7C,GACxB,MAAmB,iBAARA,EACFA,EAAMA,GAAQ,EAEJ,iBAARA,GAAmC,KAAfA,EAAIE,SAC1BD,OAAO6C,SAAW7C,OAAO6C,UAAU9C,GAAO8C,UAAU9C,GAG9D;;;;;;kCCRD,MAAM6C,EAAWR,IAEXU,EAAe,CAACtC,EAAKC,EAAK8B,KAC9B,IAAsB,IAAlBK,EAASpC,GACX,MAAM,IAAIuC,UAAU,4DAGtB,QAAY,IAARtC,GAAkBD,IAAQC,EAC5B,OAAOuC,OAAOxC,GAGhB,IAAsB,IAAlBoC,EAASnC,GACX,MAAM,IAAIsC,UAAU,8DAGtB,IAAIE,EAAO,CAAEC,YAAY,KAASX,GACF,kBAArBU,EAAKE,cACdF,EAAKC,YAAkC,IAArBD,EAAKE,aAGzB,IAIIC,EAAW5C,EAAM,IAAMC,EAAM,IAJrBuC,OAAOC,EAAKC,YACRF,OAAOC,EAAKI,WACdL,OAAOC,EAAKK,SACfN,OAAOC,EAAKM,MAGvB,GAAIT,EAAaU,MAAMC,eAAeL,GACpC,OAAON,EAAaU,MAAMJ,GAAUvB,OAGtC,IAAI6B,EAAIC,KAAKnD,IAAIA,EAAKC,GAClBmD,EAAID,KAAKlD,IAAID,EAAKC,GAEtB,GAAwB,IAApBkD,KAAKE,IAAIH,EAAIE,GAAU,CACzB,IAAI/B,EAASrB,EAAM,IAAMC,EACzB,OAAIwC,EAAKK,QACA,IAAIzB,MAEK,IAAdoB,EAAKM,KACA1B,EAEF,MAAMA,IACjB,CAEE,IAAIiC,EAAWC,EAAWvD,IAAQuD,EAAWtD,GACzCuD,EAAQ,CAAExD,MAAKC,MAAKiD,IAAGE,KACvBK,EAAY,GACZC,EAAY,GAOhB,GALIJ,IACFE,EAAMF,SAAWA,EACjBE,EAAMG,OAASnB,OAAOgB,EAAMvD,KAAKlC,QAG/BmF,EAAI,EAAG,CAETQ,EAAYE,EADCR,EAAI,EAAID,KAAKE,IAAID,GAAK,EACCD,KAAKE,IAAIH,GAAIM,EAAOf,GACxDS,EAAIM,EAAMN,EAAI,CAClB,CAiBE,OAfIE,GAAK,IACPK,EAAYG,EAAgBV,EAAGE,EAAGI,EAAOf,IAG3Ce,EAAME,UAAYA,EAClBF,EAAMC,UAAYA,EAClBD,EAAMnC,OAYR,SAAyBwC,EAAKC,GAC5B,IAAIC,EAAeC,EAAeH,EAAKC,EAAK,KAAK,IAAmB,GAChEG,EAAeD,EAAeF,EAAKD,EAAK,IAAI,IAAmB,GAC/DK,EAAcF,EAAeH,EAAKC,EAAK,MAAM,IAAkB,GAEnE,OADkBC,EAAaI,OAAOD,GAAaC,OAAOF,GACvCG,KAAK,IAC1B,CAlBiBC,CAAgBX,EAAWD,IAErB,IAAjBhB,EAAKK,QACPU,EAAMnC,OAAS,IAAImC,EAAMnC,WACF,IAAdoB,EAAKM,MAAmBU,EAAU1F,OAAS2F,EAAU3F,OAAU,IACxEyF,EAAMnC,OAAS,MAAMmC,EAAMnC,WAG7BiB,EAAaU,MAAMJ,GAAYY,EACxBA,EAAMnC,MAAM,EA4CrB,SAASiD,EAAeC,EAAOC,EAAMzC,GACnC,GAAIwC,IAAUC,EACZ,MAAO,CAAEC,QAASF,EAAOG,MAAO,GAAIC,OAAQ,GAG9C,IAAIC,EAoFN,SAAa1B,EAAGE,GACd,IAAI7B,EAAM,GACV,IAAK,IAAIzD,EAAI,EAAGA,EAAIoF,EAAEnF,OAAQD,IAAKyD,EAAIJ,KAAK,CAAC+B,EAAEpF,GAAIsF,EAAEtF,KACrD,OAAOyD,CACT,CAxFesD,CAAIN,EAAOC,GACpBG,EAASC,EAAO7G,OAChB0G,EAAU,GACVC,EAAQ,EAEZ,IAAK,IAAI5G,EAAI,EAAGA,EAAI6G,EAAQ7G,IAAK,CAC/B,IAAKgH,EAAYC,GAAaH,EAAO9G,GAEjCgH,IAAeC,EACjBN,GAAWK,EAEa,MAAfA,GAAoC,MAAdC,EAC/BN,GAAWO,EAAiBF,EAAYC,GAGxCL,GAEN,CAME,OAJIA,IACFD,IAAiC,IAAtB1C,EAAQc,UAAqB,MAAQ,SAG3C,CAAE4B,UAASC,MAAO,CAACA,GAAQC,SACpC,CAEA,SAASf,EAAgB5D,EAAKC,EAAKgF,EAAKlD,GACtC,IAGImD,EAHAxE,EAjEN,SAAuBV,EAAKC,GAC1B,IAAIkF,EAAQ,EACRC,EAAQ,EAERZ,EAAOa,EAAWrF,EAAKmF,GACvBG,EAAQ,IAAIC,IAAI,CAACtF,IAErB,KAAOD,GAAOwE,GAAQA,GAAQvE,GAC5BqF,EAAME,IAAIhB,GACVW,GAAS,EACTX,EAAOa,EAAWrF,EAAKmF,GAKzB,IAFAX,EAAOiB,EAAWxF,EAAM,EAAGmF,GAAS,EAE7BpF,EAAMwE,GAAQA,GAAQvE,GAC3BqF,EAAME,IAAIhB,GACVY,GAAS,EACTZ,EAAOiB,EAAWxF,EAAM,EAAGmF,GAAS,EAKtC,OAFAE,EAAQ,IAAIA,GACZA,EAAMI,KAAKC,GACJL,CACT,CAyCeM,CAAc5F,EAAKC,GAC5B4F,EAAS,GACTtB,EAAQvE,EAGZ,IAAK,IAAIlC,EAAI,EAAGA,EAAI4C,EAAO3C,OAAQD,IAAK,CACtC,IAAImC,EAAMS,EAAO5C,GACbgI,EAAMxB,EAAe9B,OAAO+B,GAAQ/B,OAAOvC,GAAM8B,GACjDqD,EAAQ,GAEPH,EAAI3B,WAAY4B,GAAQA,EAAKT,UAAYqB,EAAIrB,SAW9CQ,EAAI3B,WACN8B,EAAQW,EAAS9F,EAAKgF,EAAKlD,IAG7B+D,EAAIE,OAASZ,EAAQU,EAAIrB,QAAUwB,EAAaH,EAAIpB,OACpDmB,EAAO1E,KAAK2E,GACZvB,EAAQtE,EAAM,EACdiF,EAAOY,IAjBDZ,EAAKR,MAAM3G,OAAS,GACtBmH,EAAKR,MAAMwB,MAGbhB,EAAKR,MAAMvD,KAAK2E,EAAIpB,MAAM,IAC1BQ,EAAKc,OAASd,EAAKT,QAAUwB,EAAaf,EAAKR,OAC/CH,EAAQtE,EAAM,EAYpB,CAEE,OAAO4F,CACT,CAEA,SAAS7B,EAAezC,EAAK4E,EAAYC,EAAQC,EAActE,GAC7D,IAAIV,EAAS,GAEb,IAAK,IAAIG,KAAOD,EAAK,CACnB,IAAIyE,OAAEA,GAAWxE,EAGZ6E,GAAiBC,EAASH,EAAY,SAAUH,IACnD3E,EAAOF,KAAKiF,EAASJ,GAInBK,GAAgBC,EAASH,EAAY,SAAUH,IACjD3E,EAAOF,KAAKiF,EAASJ,EAE3B,CACE,OAAO3E,CACT,CAYA,SAASsE,EAAQzC,EAAGE,GAClB,OAAOF,EAAIE,EAAI,EAAIA,EAAIF,GAAI,EAAK,CAClC,CAEA,SAASoD,EAAS/E,EAAKgF,EAAKC,GAC1B,OAAOjF,EAAIkF,MAAKjF,GAAOA,EAAI+E,KAASC,GACtC,CAEA,SAASnB,EAAWrF,EAAK0G,GACvB,OAAOlH,OAAOgD,OAAOxC,GAAK2G,MAAM,GAAID,GAAO,IAAIE,OAAOF,GACxD,CAEA,SAASjB,EAAWoB,EAASzB,GAC3B,OAAOyB,EAAWA,EAAU1D,KAAK2D,IAAI,GAAI1B,EAC3C,CAEA,SAASa,EAAatB,GACpB,IAAKJ,EAAQ,EAAGC,EAAO,IAAMG,EAC7B,OAAIH,GAAQD,EAAQ,EACX,IAAIA,GAASC,EAAO,IAAMA,EAAO,OAEnC,EACT,CAEA,SAASQ,EAAiB9B,EAAGE,EAAGrB,GAC9B,MAAO,IAAImB,IAAKE,EAAIF,GAAM,EAAK,GAAK,MAAME,IAC5C,CAEA,SAASG,EAAWwD,GAClB,MAAO,YAAYC,KAAKD,EAC1B,CAEA,SAAShB,EAASlI,EAAOoH,EAAKlD,GAC5B,IAAKkD,EAAI3B,SACP,OAAOzF,EAGT,IAAIoJ,EAAO9D,KAAKE,IAAI4B,EAAItB,OAASnB,OAAO3E,GAAOE,QAC3CmJ,GAA+B,IAAvBnF,EAAQW,WAEpB,OAAQuE,GACN,KAAK,EACH,MAAO,GACT,KAAK,EACH,OAAOC,EAAQ,KAAO,IACxB,KAAK,EACH,OAAOA,EAAQ,SAAW,KAC5B,QACE,OAAOA,EAAQ,OAAOD,KAAU,KAAKA,KAG3C,QAMA3E,EAAaU,MAAQ,CAAE,EACvBV,EAAa6E,WAAa,IAAO7E,EAAaU,MAAQ,CAAA,EAMtDoE,EAAiB9E;;;;;;kCCtRjB,MAAM+E,EAAOzF,EACPU,EAAegF,IAEfC,EAAWf,GAAe,OAARA,GAA+B,iBAARA,IAAqB/E,MAAMC,QAAQ8E,GAM5EgB,EAAe3J,GACK,iBAAVA,GAAwC,iBAAVA,GAAgC,KAAVA,EAG9DuE,EAAW7C,GAAOC,OAAOF,WAAWC,GAEpC6F,EAAQqC,IACZ,IAAI5J,EAAQ,GAAG4J,IACXC,GAAU,EAEd,GADiB,MAAb7J,EAAM,KAAYA,EAAQA,EAAM8I,MAAM,IAC5B,MAAV9I,EAAe,OAAO,EAC1B,KAA0B,MAAnBA,IAAQ6J,KACf,OAAOA,EAAQ,CAAC,EAUZC,EAAM,CAACF,EAAOG,EAAWC,KAC7B,GAAID,EAAY,EAAG,CACjB,IAAIE,EAAoB,MAAbL,EAAM,GAAa,IAAM,GAChCK,IAAML,EAAQA,EAAMd,MAAM,IAC9Bc,EAASK,EAAOL,EAAMM,SAASD,EAAOF,EAAY,EAAIA,EAAW,IACrE,CACE,OAAiB,IAAbC,EACKrF,OAAOiF,GAETA,CAAK,EAGRO,EAAW,CAACP,EAAOG,KACvB,IAAIK,EAAwB,MAAbR,EAAM,GAAa,IAAM,GAKxC,IAJIQ,IACFR,EAAQA,EAAMd,MAAM,GACpBiB,KAEKH,EAAM1J,OAAS6J,GAAWH,EAAQ,IAAMA,EAC/C,OAAOQ,EAAY,IAAMR,EAASA,CAAK,EAiCnCS,EAAU,CAAChF,EAAGE,EAAG+E,EAAWpG,KAChC,GAAIoG,EACF,OAAO7F,EAAaY,EAAGE,EAAG,CAAEL,MAAM,KAAUhB,IAG9C,IAAIwC,EAAQ/B,OAAO4F,aAAalF,GAChC,OAAIA,IAAME,EAAUmB,EAGb,IAAIA,KADA/B,OAAO4F,aAAahF,KACJ,EAGvBiF,EAAU,CAAC9D,EAAO+D,EAAKvG,KAC3B,GAAIN,MAAMC,QAAQ6C,GAAQ,CACxB,IAAIxB,GAAwB,IAAjBhB,EAAQgB,KACfqD,EAASrE,EAAQe,QAAU,GAAK,KACpC,OAAOC,EAAO,IAAIqD,IAAS7B,EAAMH,KAAK,QAAUG,EAAMH,KAAK,IAC/D,CACE,OAAO9B,EAAaiC,EAAO+D,EAAKvG,EAAQ,EAGpCwG,EAAa,IAAIrK,IACd,IAAIsK,WAAW,4BAA8BnB,EAAKoB,WAAWvK,IAGhEwK,EAAe,CAACnE,EAAO+D,EAAKvG,KAChC,IAA6B,IAAzBA,EAAQ4G,aAAuB,MAAMJ,EAAW,CAAChE,EAAO+D,IAC5D,MAAO,EAAE,EAULM,EAAc,CAACrE,EAAO+D,EAAKpI,EAAO,EAAG6B,EAAU,MACnD,IAAImB,EAAI1D,OAAO+E,GACXnB,EAAI5D,OAAO8I,GAEf,IAAK9I,OAAOF,UAAU4D,KAAO1D,OAAOF,UAAU8D,GAAI,CAChD,IAA6B,IAAzBrB,EAAQ4G,aAAuB,MAAMJ,EAAW,CAAChE,EAAO+D,IAC5D,MAAO,EACX,CAGY,IAANpF,IAASA,EAAI,GACP,IAANE,IAASA,EAAI,GAEjB,IAAIyF,EAAa3F,EAAIE,EACjB0F,EAActG,OAAO+B,GACrBwE,EAAYvG,OAAO8F,GACnBU,EAAaxG,OAAOtC,GACxBA,EAAOiD,KAAKlD,IAAIkD,KAAKE,IAAInD,GAAO,GAEhC,IAAI+I,EAAS7D,EAAM0D,IAAgB1D,EAAM2D,IAAc3D,EAAM4D,GACzDrF,EAASsF,EAAS9F,KAAKlD,IAAI6I,EAAY/K,OAAQgL,EAAUhL,OAAQiL,EAAWjL,QAAU,EACtF8J,GAAsB,IAAXoB,IAAuD,IArHtD,EAAC1E,EAAO+D,EAAKvG,IACR,iBAAVwC,GAAqC,iBAAR+D,IAGX,IAAtBvG,EAAQF,UAiHoBA,CAAU0C,EAAO+D,EAAKvG,GACrDmH,EAASnH,EAAQoH,WAzILtB,IACThK,IAAsB,IAAbgK,EAAoBrI,OAAO3B,GAAS2E,OAAO3E,GAwIzBsL,CAAUtB,GAE5C,GAAI9F,EAAQsG,SAAoB,IAATnI,EACrB,OAAOgI,EAAQF,EAASzD,EAAOZ,GAASqE,EAASM,EAAK3E,IAAS,EAAM5B,GAGvE,IAAIqH,EAAQ,CAAE1F,UAAW,GAAID,UAAW,IAEpC4F,EAAQ,GACR3B,EAAQ,EAEZ,KAAOmB,EAAa3F,GAAKE,EAAIF,GAAKE,IACR,IAApBrB,EAAQsG,SAAoBnI,EAAO,EALvBkJ,GAAP7J,EAMF2D,GANqB,EAAI,YAAc,aAAa/B,KAAKgC,KAAKE,IAAI9D,IAQvE8J,EAAMlI,KAAKwG,EAAIuB,EAAOhG,EAAGwE,GAAQ/D,EAAQkE,IAE3C3E,EAAI2F,EAAa3F,EAAIhD,EAAOgD,EAAIhD,EAChCwH,IAXSnI,MAcX,OAAwB,IAApBwC,EAAQsG,QACHnI,EAAO,EA/GC,EAACkJ,EAAOrH,EAAS4B,KAClCyF,EAAM1F,UAAUgC,MAAK,CAACxC,EAAGE,IAAMF,EAAIE,GAAM,EAAGF,EAAIE,EAAI,EAAI,IACxDgG,EAAM3F,UAAUiC,MAAK,CAACxC,EAAGE,IAAMF,EAAIE,GAAM,EAAGF,EAAIE,EAAI,EAAI,IAExD,IAGI/B,EAHA+E,EAASrE,EAAQe,QAAU,GAAK,KAChCW,EAAY,GACZC,EAAY,GAiBhB,OAdI0F,EAAM3F,UAAU1F,SAClB0F,EAAY2F,EAAM3F,UAAU6F,KAAIC,GAAKvB,EAASxF,OAAO+G,GAAI5F,KAASS,KAAK,MAGrEgF,EAAM1F,UAAU3F,SAClB2F,EAAY,KAAK0C,IAASgD,EAAM1F,UAAU4F,KAAIC,GAAKvB,EAASxF,OAAO+G,GAAI5F,KAASS,KAAK,SAIrF/C,EADEoC,GAAaC,EACN,GAAGD,KAAaC,IAEhBD,GAAaC,EAGpB3B,EAAQgB,KACH,IAAIqD,IAAS/E,KAGfA,CAAM,EAqFPmI,CAAWJ,EAAOrH,EAAS4B,GAC3B0E,EAAQgB,EAAO,KAAM,CAAEtG,MAAM,KAAUhB,IAGtCsH,CAAK,EAoCRI,EAAO,CAAClF,EAAO+D,EAAKpI,EAAM6B,EAAU,MACxC,GAAW,MAAPuG,GAAed,EAAajD,GAC9B,MAAO,CAACA,GAGV,IAAKiD,EAAajD,KAAWiD,EAAac,GACxC,OAAOI,EAAanE,EAAO+D,EAAKvG,GAGlC,GAAoB,mBAAT7B,EACT,OAAOuJ,EAAKlF,EAAO+D,EAAK,EAAG,CAAEa,UAAWjJ,IAG1C,GAAIqH,EAASrH,GACX,OAAOuJ,EAAKlF,EAAO+D,EAAK,EAAGpI,GAG7B,IAAIuC,EAAO,IAAKV,GAIhB,OAHqB,IAAjBU,EAAKK,UAAkBL,EAAKM,MAAO,GACvC7C,EAAOA,GAAQuC,EAAKvC,MAAQ,EAEvBkC,EAASlC,GAKVkC,EAASmC,IAAUnC,EAASkG,GACvBM,EAAYrE,EAAO+D,EAAKpI,EAAMuC,GA5DrB,EAAC8B,EAAO+D,EAAKpI,EAAO,EAAG6B,EAAU,MACnD,IAAMK,EAASmC,IAAUA,EAAMxG,OAAS,IAAQqE,EAASkG,IAAQA,EAAIvK,OAAS,EAC5E,OAAO2K,EAAanE,EAAO+D,EAAKvG,GAGlC,IAAImH,EAASnH,EAAQoH,WAAS,CAAK3C,GAAOhE,OAAO4F,aAAa5B,IAC1DtD,EAAI,GAAGqB,IAAQmF,WAAW,GAC1BtG,EAAI,GAAGkF,IAAMoB,WAAW,GAExBb,EAAa3F,EAAIE,EACjBpD,EAAMmD,KAAKnD,IAAIkD,EAAGE,GAClBnD,EAAMkD,KAAKlD,IAAIiD,EAAGE,GAEtB,GAAIrB,EAAQsG,SAAoB,IAATnI,EACrB,OAAOgI,EAAQlI,EAAKC,GAAK,EAAO8B,GAGlC,IAAIsH,EAAQ,GACR3B,EAAQ,EAEZ,KAAOmB,EAAa3F,GAAKE,EAAIF,GAAKE,GAChCiG,EAAMlI,KAAK+H,EAAOhG,EAAGwE,IACrBxE,EAAI2F,EAAa3F,EAAIhD,EAAOgD,EAAIhD,EAChCwH,IAGF,OAAwB,IAApB3F,EAAQsG,QACHA,EAAQgB,EAAO,KAAM,CAAEtG,MAAM,EAAOhB,YAGtCsH,CAAK,EAiCLM,CAAYpF,EAAO+D,EAAKnF,KAAKlD,IAAIkD,KAAKE,IAAInD,GAAO,GAAIuC,GAR9C,MAARvC,GAAiBqH,EAASrH,GACvBuJ,EAAKlF,EAAO+D,EAAK,EAAGpI,GAnHX,EAACA,EAAM6B,KACzB,IAA6B,IAAzBA,EAAQ4G,aACV,MAAM,IAAIpG,UAAU,kBAAkBrC,qBAExC,MAAO,EAAE,EA8GqC0J,CAAY1J,EAAMuC,EAQC,SAGnEoH,EAAiBJ,iCCrPjB,MAAM5H,EAAYD,KAMZkI,WACJA,EAAUC,eACVA,EAAcC,cACdA,EAAaC,WACbA,EAAUC,SACVA,EAAQC,sBACRA,EAAqBC,uBACrBA,EAAsBC,sBACtBA,EAAqBC,uBACrBA,EAAsBC,yBACtBA,EAAwBC,0BACxBA,EAAyBC,kBACzBA,EAAiBC,kBACjBA,EAAiBC,oBACjBA,EAAmBC,8BACnBA,YCrBFC,EAAiB,CACff,WAAY,IAGZgB,OAAQ,IACRC,OAAQ,IAGRC,iBAAkB,IAClBC,iBAAkB,IAClBC,iBAAkB,IAClBC,iBAAkB,IAElBhB,sBAAuB,IACvBC,uBAAwB,IAExBgB,cAAe,IAGfC,eAAgB,IAChBC,QAAS,IACTvB,eAAgB,KAChBC,cAAe,IACfuB,qBAAsB,KACtBC,uBAAwB,IACxBC,WAAY,IACZxB,WAAY,IACZyB,YAAa,IACbxB,SAAU,IACVO,kBAAmB,IACnBkB,WAAY,IACZC,sBAAuB,IACvBC,eAAgB,KAChBC,mBAAoB,IACpBC,UAAW,IACXC,kBAAmB,IACnBC,wBAAyB,IACzB5B,sBAAuB,IACvBE,yBAA0B,IAC1B2B,eAAgB,KAChBvB,oBAAqB,IACrBwB,aAAc,IACdC,UAAW,IACXC,mBAAoB,IACpBC,yBAA0B,IAC1BhC,uBAAwB,IACxBE,0BAA2B,IAC3B+B,eAAgB,IAChB7B,kBAAmB,IACnB8B,WAAY,IACZC,SAAU,KACVC,gBAAiB,IACjBC,mBAAoB,IACpB/B,8BAA+B,kBDmRjCgC,EA5Sc,CAACnF,EAAO1F,EAAU,CAAA,KAC9B,GAAqB,iBAAV0F,EACT,MAAM,IAAIlF,UAAU,qBAGtB,MAAME,EAAOV,GAAW,CAAE,EACpB9B,EAAgC,iBAAnBwC,EAAKmF,UAAyBzE,KAAKnD,IAAI8J,EAAYrH,EAAKmF,WAAakC,EACxF,GAAIrC,EAAM1J,OAASkC,EACjB,MAAM,IAAI4M,YAAY,iBAAiBpF,EAAM1J,oCAAoCkC,MAGnF,MAAM6B,EAAM,CAAEjC,KAAM,OAAQ4H,QAAO3H,MAAO,IACpCgN,EAAQ,CAAChL,GACf,IAAIzB,EAAQyB,EACRoD,EAAOpD,EACPiL,EAAW,EACf,MAAMhP,EAAS0J,EAAM1J,OACrB,IAEIF,EAFA6J,EAAQ,EACRsF,EAAQ,EAOZ,MAAMC,EAAU,IAAMxF,EAAMC,KACtBvG,EAAOvB,IAKX,GAJkB,SAAdA,EAAKC,MAAiC,QAAdqF,EAAKrF,OAC/BqF,EAAKrF,KAAO,SAGVqF,GAAsB,SAAdA,EAAKrF,MAAiC,SAAdD,EAAKC,KASzC,OAJAQ,EAAMP,MAAMqB,KAAKvB,GACjBA,EAAKd,OAASuB,EACdT,EAAKsF,KAAOA,EACZA,EAAOtF,EACAA,EARLsF,EAAKrH,OAAS+B,EAAK/B,KAQV,EAKb,IAFAsD,EAAK,CAAEtB,KAAM,QAEN6H,EAAQ3J,GAQb,GAPAsC,EAAQyM,EAAMA,EAAM/O,OAAS,GAC7BF,EAAQoP,IAMJpP,IAAU+M,GAAiC/M,IAAU8M,EAQzD,GAAI9M,IAAUkM,EASd,GAAIlM,IAAU2M,EASd,GAAI3M,IAAU0M,EAmCd,GAAI1M,IAAUsM,EAOd,GAAItM,IAAUuM,EAed,GAAIvM,IAAU4M,GAAqB5M,IAAU6M,GAAqB7M,IAAUmM,EA8B5E,GAAInM,IAAUwM,EAyBd,GAAIxM,IAAUyM,EAqBd,GAAIzM,IAAUoM,GAAc+C,EAAQ,EAApC,CACE,GAAI3M,EAAMK,OAAS,EAAG,CACpBL,EAAMK,OAAS,EACf,MAAMI,EAAOT,EAAMP,MAAMoN,QACzB7M,EAAMP,MAAQ,CAACgB,EAAM,CAAEjB,KAAM,OAAQhC,MAAOgE,EAAUxB,IAC9D,CAEMc,EAAK,CAAEtB,KAAM,QAAShC,UACtBwC,EAAMI,QAEZ,MAMI,GAAI5C,IAAUqM,GAAY8C,EAAQ,GAAsB,IAAjB3M,EAAMI,OAA7C,CACE,MAAM0M,EAAW9M,EAAMP,MAEvB,GAAc,IAAVkN,GAAmC,IAApBG,EAASpP,OAAc,CACxCoD,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACR,CAEM,GAAkB,QAAdqH,EAAKrF,KAAgB,CAKvB,GAJAQ,EAAMgJ,MAAQ,GACdnE,EAAKrH,OAASA,EACdqH,EAAKrF,KAAO,QAEe,IAAvBQ,EAAMP,MAAM/B,QAAuC,IAAvBsC,EAAMP,MAAM/B,OAAc,CACxDsC,EAAMM,SAAU,EAChBN,EAAMK,OAAS,EACfwE,EAAKrF,KAAO,OACZ,QACV,CAEQQ,EAAMK,SACNL,EAAMnC,KAAO,GACb,QACR,CAEM,GAAkB,UAAdgH,EAAKrF,KAAkB,CACzBsN,EAASjH,MAET,MAAMkH,EAASD,EAASA,EAASpP,OAAS,GAC1CqP,EAAOvP,OAASqH,EAAKrH,MAAQA,EAC7BqH,EAAOkI,EACP/M,EAAMK,SACN,QACR,CAEMS,EAAK,CAAEtB,KAAM,MAAOhC,SAE1B,MAMIsD,EAAK,CAAEtB,KAAM,OAAQhC,cAhFrB,CACE,GAAmB,UAAfwC,EAAMR,KAAkB,CAC1BsB,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACR,CAEM,MAAMgC,EAAO,QACbQ,EAAQyM,EAAM5G,MACd7F,EAAMU,OAAQ,EAEdI,EAAK,CAAEtB,OAAMhC,UACbmP,IAEA3M,EAAQyM,EAAMA,EAAM/O,OAAS,EAEnC,KAxCI,CACEiP,IAEA,MAAMnM,EAASqE,EAAKrH,OAAkC,MAAzBqH,EAAKrH,MAAM8I,OAAM,KAAgC,IAAjBtG,EAAMQ,OAYnER,EAAQc,EAXM,CACZtB,KAAM,QACNiB,MAAM,EACNC,OAAO,EACPF,SACAmM,QACAvM,OAAQ,EACRC,OAAQ,EACRZ,MAAO,KAITgN,EAAM3L,KAAKd,GACXc,EAAK,CAAEtB,KAAM,OAAQhC,SAE3B,KAjDI,CACE,MAAMiD,EAAOjD,EACb,IAAIwP,EAMJ,KAJ2B,IAAvBtL,EAAQuL,aACVzP,EAAQ,IAGH6J,EAAQ3J,IAAWsP,EAAOJ,MAC/B,GAAII,IAAStD,EAAb,CAKA,GAAIsD,IAASvM,EAAM,EACU,IAAvBiB,EAAQuL,aAAqBzP,GAASwP,GAC1C,KACV,CAEQxP,GAASwP,CAPjB,MAFUxP,GAASwP,EAAOJ,IAYpB9L,EAAK,CAAEtB,KAAM,OAAQhC,SAE3B,KAvCI,CACE,GAAmB,UAAfwC,EAAMR,KAAkB,CAC1BsB,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACR,CACMwC,EAAQyM,EAAM5G,MACd/E,EAAK,CAAEtB,KAAM,OAAQhC,UACrBwC,EAAQyM,EAAMA,EAAM/O,OAAS,EAEnC,MAfMsC,EAAQc,EAAK,CAAEtB,KAAM,QAASC,MAAO,KACrCgN,EAAM3L,KAAKd,GACXc,EAAK,CAAEtB,KAAM,OAAQhC,cAtCvB,CAGE,IAAIwP,EAEJ,IAJAN,IAIOrF,EAAQ3J,IAAWsP,EAAOJ,MAG/B,GAFApP,GAASwP,EAELA,IAAS9C,EAKb,GAAI8C,IAAStD,GAKb,GAAIsD,IAAS7C,IACXuC,IAEiB,IAAbA,GACF,WARFlP,GAASoP,SALTF,IAkBJ5L,EAAK,CAAEtB,KAAM,OAAQhC,SAE3B,MArCMsD,EAAK,CAAEtB,KAAM,OAAQhC,MAAO,KAAOA,SATnCsD,EAAK,CAAEtB,KAAM,OAAQhC,OAAQkE,EAAQwL,aAAe1P,EAAQ,IAAMoP,MAqNtE,GAGE,GAFA5M,EAAQyM,EAAM5G,MAEK,SAAf7F,EAAMR,KAAiB,CACzBQ,EAAMP,MAAMZ,SAAQU,IACbA,EAAKE,QACU,SAAdF,EAAKC,OAAiBD,EAAK4N,QAAS,GACtB,UAAd5N,EAAKC,OAAkBD,EAAK6N,SAAU,GACrC7N,EAAKE,QAAOF,EAAKC,KAAO,QAC7BD,EAAKe,SAAU,EACzB,IAIM,MAAM7B,EAASgO,EAAMA,EAAM/O,OAAS,GAC9B2J,EAAQ5I,EAAOgB,MAAM4N,QAAQrN,GAEnCvB,EAAOgB,MAAM6N,OAAOjG,EAAO,KAAMrH,EAAMP,MAC7C,QACWgN,EAAM/O,OAAS,GAGxB,OADAoD,EAAK,CAAEtB,KAAM,QACNiC,CAAG,iCErUZ,MAAMD,EAAYD,IACZgM,+BCDN,MAAMnE,EAAO7H,IACPD,EAAQ2F,WAwDduG,EAtDgB,CAAC/L,EAAKC,EAAU,CAAA,KAC9B,MAAM+L,EAAO,CAAClO,EAAMd,EAAS,CAAA,KAC3B,MAAMkD,EAAeL,EAAMf,eAAe9B,GACpCoD,GAA+B,IAAjBtC,EAAKe,UAA8C,IAA1BoB,EAAQE,cAC/CtB,GAA2B,IAAjBqB,IAAyC,IAAhBE,EACnCkE,GAAmC,IAA1BrE,EAAQE,cAAyB,KAAO,GACvD,IAAIE,EAAS,GAEb,IAAoB,IAAhBvC,EAAK4N,OACP,OAAOpH,EAASxG,EAAK/B,MAGvB,IAAqB,IAAjB+B,EAAK6N,QAEP,OADAM,QAAQC,IAAI,eAAgB5H,EAAQxG,EAAK/B,OAClCuI,EAASxG,EAAK/B,MAGvB,GAAkB,SAAd+B,EAAKC,KACP,OAAOc,EAAUyF,EAASxG,EAAK/B,MAAQ,IAGzC,GAAkB,UAAd+B,EAAKC,KACP,OAAOc,EAAUyF,EAASxG,EAAK/B,MAAQ,IAGzC,GAAkB,UAAd+B,EAAKC,KACP,MAA0B,UAAnBD,EAAKsF,KAAKrF,KAAmB,GAAKc,EAAUf,EAAK/B,MAAQ,IAGlE,GAAI+B,EAAK/B,MACP,OAAO+B,EAAK/B,MAGd,GAAI+B,EAAKE,OAASF,EAAKc,OAAS,EAAG,CACjC,MAAMxC,EAAOyD,EAAMV,OAAOrB,EAAKE,OACzBuJ,EAAQI,KAAQvL,EAAM,IAAK6D,EAASgB,MAAM,EAAOsF,SAAS,EAAM1F,aAAa,IAEnF,GAAqB,IAAjB0G,EAAMtL,OACR,OAAOG,EAAKH,OAAS,GAAKsL,EAAMtL,OAAS,EAAI,IAAIsL,KAAWA,CAEpE,CAEI,GAAIzJ,EAAKE,MACP,IAAK,MAAMX,KAASS,EAAKE,MACvBqC,GAAU2L,EAAK3O,EAAOS,GAI1B,OAAOuC,CAAM,EAGf,OAAO2L,EAAKhM,EAAI,EDrDFwF,GACV2G,+BEFN,MAAMxE,EAAO7H,IACPC,EAAYyF,IACZ3F,EAAQuM,IAERC,EAAS,CAACC,EAAQ,GAAIC,EAAQ,GAAIC,GAAU,KAChD,MAAMjN,EAAS,GAKf,GAHA+M,EAAQ,GAAGjK,OAAOiK,KAClBC,EAAQ,GAAGlK,OAAOkK,IAEPtQ,OAAQ,OAAOqQ,EAC1B,IAAKA,EAAMrQ,OACT,OAAOuQ,EAAU3M,EAAMP,QAAQiN,GAAO/E,KAAI9H,GAAO,IAAIA,OAAU6M,EAGjE,IAAK,MAAME,KAAQH,EACjB,GAAI3M,MAAMC,QAAQ6M,GAChB,IAAK,MAAM1Q,KAAS0Q,EAClBlN,EAAOF,KAAKgN,EAAOtQ,EAAOwQ,EAAOC,SAGnC,IAAK,IAAI9M,KAAO6M,GACE,IAAZC,GAAmC,iBAAR9M,IAAkBA,EAAM,IAAIA,MAC3DH,EAAOF,KAAKM,MAAMC,QAAQF,GAAO2M,EAAOI,EAAM/M,EAAK8M,GAAWC,EAAO/M,GAI3E,OAAOG,EAAMP,QAAQC,EAAO,SAmF9BmN,EAhFe,CAAC1M,EAAKC,EAAU,CAAA,KAC7B,MAAM0M,OAAoCrQ,IAAvB2D,EAAQ0M,WAA2B,IAAO1M,EAAQ0M,WAE/DX,EAAO,CAAClO,EAAMd,EAAS,CAAA,KAC3Bc,EAAKwO,MAAQ,GAEb,IAAIM,EAAI5P,EACJ6P,EAAI7P,EAAOsP,MAEf,KAAkB,UAAXM,EAAE7O,MAA+B,SAAX6O,EAAE7O,MAAmB6O,EAAE5P,QAClD4P,EAAIA,EAAE5P,OACN6P,EAAID,EAAEN,MAGR,GAAIxO,EAAKe,SAAWf,EAAKiB,OAEvB,YADA8N,EAAExN,KAAKgN,EAAOQ,EAAEzI,MAAOrE,EAAUjC,EAAMmC,KAIzC,GAAkB,UAAdnC,EAAKC,OAAqC,IAAjBD,EAAKe,SAA0C,IAAtBf,EAAKE,MAAM/B,OAE/D,YADA4Q,EAAExN,KAAKgN,EAAOQ,EAAEzI,MAAO,CAAC,QAI1B,GAAItG,EAAKE,OAASF,EAAKc,OAAS,EAAG,CACjC,MAAMxC,EAAOyD,EAAMV,OAAOrB,EAAKE,OAE/B,GAAI6B,EAAM5B,gBAAgB7B,EAAM6D,EAAQ7B,KAAMuO,GAC5C,MAAM,IAAIjG,WAAW,uGAGvB,IAAIa,EAAQI,KAAQvL,EAAM6D,GAO1B,OANqB,IAAjBsH,EAAMtL,SACRsL,EAAQxH,EAAUjC,EAAMmC,IAG1B4M,EAAExN,KAAKgN,EAAOQ,EAAEzI,MAAOmD,SACvBzJ,EAAKE,MAAQ,GAEnB,CAEI,MAAMwO,EAAU3M,EAAMnB,aAAaZ,GACnC,IAAIwO,EAAQxO,EAAKwO,MACb/N,EAAQT,EAEZ,KAAsB,UAAfS,EAAMR,MAAmC,SAAfQ,EAAMR,MAAmBQ,EAAMvB,QAC9DuB,EAAQA,EAAMvB,OACdsP,EAAQ/N,EAAM+N,MAGhB,IAAK,IAAItQ,EAAI,EAAGA,EAAI8B,EAAKE,MAAM/B,OAAQD,IAAK,CAC1C,MAAMqB,EAAQS,EAAKE,MAAMhC,GAEN,UAAfqB,EAAMU,MAAkC,UAAdD,EAAKC,KAMhB,UAAfV,EAAMU,KAKNV,EAAMtB,OAAwB,SAAfsB,EAAMU,KACvBuO,EAAMjN,KAAKgN,EAAOC,EAAMlI,MAAO/G,EAAMtB,QAInCsB,EAAMW,OACRgO,EAAK3O,EAAOS,GAVZ+O,EAAExN,KAAKgN,EAAOQ,EAAEzI,MAAOkI,EAAOE,KANpB,IAANxQ,GAASsQ,EAAMjN,KAAK,IACxBiN,EAAMjN,KAAK,IAiBnB,CAEI,OAAOiN,CAAK,EAGd,OAAOzM,EAAMP,QAAQ0M,EAAKhM,GAAK,EFzGlBoM,GACTU,EAAQC,IAgBRC,EAAS,CAACrH,EAAO1F,EAAU,CAAA,KAC/B,IAAII,EAAS,GAEb,GAAIV,MAAMC,QAAQ+F,GAChB,IAAK,MAAMhD,KAAWgD,EAAO,CAC3B,MAAMpG,EAASyN,EAAOC,OAAOtK,EAAS1C,GAClCN,MAAMC,QAAQL,GAChBc,EAAOhB,QAAQE,GAEfc,EAAOhB,KAAKE,EAEpB,MAEIc,EAAS,GAAGgC,OAAO2K,EAAOC,OAAOtH,EAAO1F,IAM1C,OAHIA,IAA8B,IAAnBA,EAAQkM,SAAuC,IAApBlM,EAAQiN,UAChD7M,EAAS,IAAI,IAAIoD,IAAIpD,KAEhBA,CAAM,SAiBf2M,EAAOF,MAAQ,CAACnH,EAAO1F,EAAU,CAAA,IAAO6M,EAAMnH,EAAO1F,GAgBrD+M,EAAOjN,UAAY,CAAC4F,EAAO1F,EAAU,CAAA,IAE1BF,EADY,iBAAV4F,EACQqH,EAAOF,MAAMnH,EAAO1F,GAEtB0F,EAFgC1F,GAoBnD+M,EAAOlB,QAAU,CAACnG,EAAO1F,EAAU,CAAA,KACZ,iBAAV0F,IACTA,EAAQqH,EAAOF,MAAMnH,EAAO1F,IAEvB6L,EAAQnG,EAAO1F,IAoBxB+M,EAAOb,OAAS,CAACxG,EAAO1F,EAAU,CAAA,KACX,iBAAV0F,IACTA,EAAQqH,EAAOF,MAAMnH,EAAO1F,IAG9B,IAAIV,EAAS4M,EAAOxG,EAAO1F,GAY3B,OATwB,IAApBA,EAAQkN,UACV5N,EAASA,EAAO6N,OAAOC,WAID,IAApBpN,EAAQiN,UACV3N,EAAS,IAAI,IAAIkE,IAAIlE,KAGhBA,CAAM,EAmBfyN,EAAOC,OAAS,CAACtH,EAAO1F,EAAU,CAAA,IAClB,KAAV0F,GAAgBA,EAAM1J,OAAS,EAC1B,CAAC0J,IAGgB,IAAnB1F,EAAQkM,OACXa,EAAOlB,QAAQnG,EAAO1F,GACtB+M,EAAOb,OAAOxG,EAAO1F,GAO3BqN,EAAiBN,2EGvKjB,MAAMnQ,EAAOiD,EACPyN,EAAY,QACZC,EAAe,KAAKD,KAMpBE,EAAc,MAGdC,EAAgB,MAEhBC,EAAQ,OACRC,EAAa,MAAMF,OACnBG,EAAe,QAAQH,KACvBI,EAAa,GAAGL,SAAmBG,IAQnCG,EAAc,CAClBN,cACAO,aAjBmB,MAkBnBC,cAjBoB,MAkBpBP,gBACAQ,SAjBe,QAkBfP,QACAC,aACAE,aACAK,OAhBa,MAAMV,KAiBnBW,QAhBc,MAAMP,IAAeC,KAiBnCO,aAhBmB,MAAMZ,SAAmBG,KAiB5CU,cAhBoB,MAAMR,KAiB1BS,aAhBmB,MAAMb,KAiBzBc,KAhBW,GAAGb,MAiBdE,gBAOIY,EAAgB,IACjBV,EAEHL,cAAe,IAAIH,KACnBI,MAAOH,EACPgB,KAAM,GAAGhB,MACTM,WAAY,GAAGL,aAAuBF,QACtCY,OAAQ,MAAMV,KACdW,QAAS,YAAYb,MAAcE,aAAuBF,SAC1Dc,aAAc,MAAMZ,aAAuBF,SAC3Ce,cAAe,MAAMb,aAAuBF,SAC5CgB,aAAc,MAAMhB,KACpBM,aAAc,SAASN,MACvBK,WAAY,OAAOL,gBAwBrBxE,EAAiB,CACff,WAAY,MACZ0G,mBAnByB,CACzBC,MAAO,YACPC,MAAO,SACPC,MAAO,cACPC,MAAO,OACPC,MAAO,mBACPC,MAAO,MACPC,MAAO,cACPC,MAAO,MACPC,MAAO,eACPC,MAAO,yCACPC,MAAO,mBACPC,MAAO,MACPC,KAAM,aACNC,OAAQ,aAQRC,gBAAiB,yBACjBC,wBAAyB,4BACzBC,oBAAqB,oBACrBC,4BAA6B,oBAC7BC,2BAA4B,uBAC5BC,uBAAwB,4BAGxBC,aAAc,CACZ,MAAO,IACP,QAAS,KACT,WAAY,MAId/G,OAAQ,GACRC,OAAQ,GAGRC,iBAAkB,GAClBC,iBAAkB,GAClBC,iBAAkB,GAClBC,iBAAkB,IAElBhB,sBAAuB,GACvBC,uBAAwB,GAExBgB,cAAe,GAGfC,eAAgB,GAChBC,QAAS,GACTwG,oBAAqB,GACrBvG,qBAAsB,GACtBC,uBAAwB,GACxBC,WAAY,GACZxB,WAAY,GACZC,SAAU,GACVO,kBAAmB,GACnBkB,WAAY,GACZC,sBAAuB,GACvBC,eAAgB,GAChBC,mBAAoB,GACpBiG,kBAAmB,GACnBhG,UAAW,GACXC,kBAAmB,GACnBC,wBAAyB,GACzB5B,sBAAuB,IACvBE,yBAA0B,GAC1B2B,eAAgB,GAChBvB,oBAAqB,IACrBwB,aAAc,GACdC,UAAW,GACXC,mBAAoB,GACpBC,yBAA0B,GAC1BhC,uBAAwB,IACxBE,0BAA2B,GAC3B+B,eAAgB,GAChB7B,kBAAmB,GACnB8B,WAAY,GACZC,SAAU,EACVC,gBAAiB,GACjBC,mBAAoB,IACpB/B,8BAA+B,MAE/BoH,IAAKrT,EAAKsT,IAMVC,aAAaC,IACJ,CACL,IAAK,CAAEtS,KAAM,SAAUiB,KAAM,YAAaC,MAAO,KAAKoR,EAAM7B,SAC5D,IAAK,CAAEzQ,KAAM,QAASiB,KAAM,MAAOC,MAAO,MAC1C,IAAK,CAAElB,KAAM,OAAQiB,KAAM,MAAOC,MAAO,MACzC,IAAK,CAAElB,KAAM,OAAQiB,KAAM,MAAOC,MAAO,MACzC,IAAK,CAAElB,KAAM,KAAMiB,KAAM,MAAOC,MAAO,OAQ3CqR,UAAUC,IACS,IAAVA,EAAiB9B,EAAgBV,4CC9K5C,MAAMlR,EAAOiD,EACPyQ,EAA6B,UAArBC,QAAQC,UAChBhB,gBACJA,EAAeK,uBACfA,EAAsBH,oBACtBA,EAAmBE,2BACnBA,GACErK,KAEJ5H,EAAA6H,SAAmBf,GAAe,OAARA,GAA+B,iBAARA,IAAqB/E,MAAMC,QAAQ8E,GACpF9G,EAAA8S,cAAwBzL,GAAO0K,EAAoBzK,KAAKD,GACxDrH,EAAA+S,YAAsB1L,GAAsB,IAAfA,EAAIhJ,QAAgB2B,EAAQ8S,cAAczL,GACvErH,EAAsBgT,YAAA3L,GAAOA,EAAI4L,QAAQhB,EAA4B,QACrEjS,EAAyBkT,eAAA7L,GAAOA,EAAI4L,QAAQpB,EAAiB,KAE7D7R,EAAAmT,kBAA4B9L,GACnBA,EAAI4L,QAAQf,GAAwBkB,GACxB,OAAVA,EAAiB,GAAKA,IAIjCpT,EAAAqT,oBAA8B,KAC5B,MAAMC,EAAOV,QAAQW,QAAQtM,MAAM,GAAGuM,MAAM,KAAK5J,IAAI9J,QACrD,OAAoB,IAAhBwT,EAAKjV,QAAgBiV,EAAK,IAAM,GAAkB,IAAZA,EAAK,IAAYA,EAAK,IAAM,EAG1D,EAGdtT,EAAAyT,UAAoBpR,GACdA,GAAsC,kBAApBA,EAAQqR,QACrBrR,EAAQqR,SAEA,IAAVf,GAA+B,OAAb1T,EAAKsT,IAGhCvS,EAAA2T,WAAqB,CAAC5L,EAAO6L,EAAMC,KACjC,MAAMC,EAAM/L,EAAMgM,YAAYH,EAAMC,GACpC,OAAc,IAAVC,EAAmB/L,EACA,OAAnBA,EAAM+L,EAAM,GAAoB9T,EAAQ2T,WAAW5L,EAAO6L,EAAME,EAAM,GACnE,GAAG/L,EAAMd,MAAM,EAAG6M,OAAS/L,EAAMd,MAAM6M,IAAM,EAGtD9T,EAAAgU,aAAuB,CAACjM,EAAOjE,EAAQ,CAAA,KACrC,IAAIrB,EAASsF,EAKb,OAJItF,EAAOwR,WAAW,QACpBxR,EAASA,EAAOwE,MAAM,GACtBnD,EAAM4C,OAAS,MAEVjE,CAAM,EAGfzC,EAAqBkU,WAAA,CAACnM,EAAOjE,EAAQ,CAAE,EAAEzB,EAAU,MAIjD,IAAII,EAAS,GAHGJ,EAAQuE,SAAW,GAAK,SAGXmB,KAFd1F,EAAQuE,SAAW,GAAK,MAMvC,OAHsB,IAAlB9C,EAAMqQ,UACR1R,EAAS,UAAUA,UAEdA,CAAM,6CC5Df,MAAMxD,EAAOiD,EACPkS,+BCDN,MAAMnS,EAAQC,MACRwJ,cACJA,EAAaE,QACbA,EAAOwG,oBACPA,EAAmB7H,WACnBA,EAAUC,SACVA,EAAQ0B,sBACRA,EAAqBE,mBACrBA,EAAkBzB,sBAClBA,EAAqBF,sBACrBA,EAAqBI,yBACrBA,EAAwB6B,UACxBA,EAASC,mBACTA,EAAkB/B,uBAClBA,EAAsBF,uBACtBA,EAAsBI,0BACtBA,GACElD,KAEEyM,EAAkBC,GACfA,IAASlI,GAAsBkI,IAASlC,EAG3C9E,EAAQiH,KACW,IAAnBA,EAAMC,WACRD,EAAMjH,MAAQiH,EAAME,WAAaC,IAAW,EAChD,SA0WAC,EAtVa,CAAC5M,EAAO1F,KACnB,MAAMU,EAAOV,GAAW,CAAE,EAEpBhE,EAAS0J,EAAM1J,OAAS,EACxBuW,GAA2B,IAAf7R,EAAK2G,QAAqC,IAAnB3G,EAAK6R,UACxCC,EAAU,GACV1O,EAAS,GACTuD,EAAQ,GAEd,IAeIlE,EACA8O,EAhBAjN,EAAMU,EACNC,GAAU,EACVnD,EAAQ,EACRiQ,EAAY,EACZC,GAAU,EACVC,GAAY,EACZC,GAAS,EACTC,GAAY,EACZT,GAAa,EACbU,GAAe,EACfC,GAAc,EACdjB,GAAU,EACVkB,GAAiB,EACjBC,GAAW,EACXlG,EAAS,EAGTmF,EAAQ,CAAEpW,MAAO,GAAImP,MAAO,EAAG2H,QAAQ,GAE3C,MAAMM,EAAM,IAAMvN,GAAS3J,EAErBkP,EAAU,KACd/H,EAAO8O,EACAjN,EAAI2C,aAAahC,IAG1B,KAAOA,EAAQ3J,GAAQ,CAErB,IAAIsP,EAEJ,GAHA2G,EAAO/G,IAGH+G,IAASlC,EAAb,CAUA,IAAqB,IAAjB+C,GAAyBb,IAAS3J,EAAuB,CAG3D,IAFAyE,KAEiB,IAAVmG,MAAmBjB,EAAO/G,MAC/B,GAAI+G,IAASlC,EAMb,GAAIkC,IAAS3J,EAAb,CAKA,IAAqB,IAAjBwK,GAAyBb,IAAS9J,IAAa8J,EAAO/G,OAAe/C,EAAU,CAKjF,GAJAuK,EAAUR,EAAMQ,SAAU,EAC1BE,EAASV,EAAMU,QAAS,EACxBK,GAAW,GAEO,IAAdV,EACF,SAGF,KACV,CAEQ,IAAqB,IAAjBO,GAAyBb,IAAS/J,EAAY,CAKhD,GAJAwK,EAAUR,EAAMQ,SAAU,EAC1BE,EAASV,EAAMU,QAAS,EACxBK,GAAW,GAEO,IAAdV,EACF,SAGF,KACV,CAEQ,GAAIN,IAAS1J,IACXwE,IAEe,IAAXA,GAAc,CAChB+F,GAAe,EACfJ,EAAUR,EAAMQ,SAAU,EAC1BO,GAAW,EACX,KACZ,CAlCA,MAFUlG,SANAgG,EAAcb,EAAMa,aAAc,EAClC7H,IA6CJ,IAAkB,IAAdqH,EACF,SAGF,KACN,CAEI,GAAIN,IAASlI,EAAb,CAeA,IAAmB,IAAfrJ,EAAKyS,QAOe,IANAlB,IAAS5H,GAC1B4H,IAAS1I,GACT0I,IAAS5I,GACT4I,IAAS3H,GACT2H,IAASpI,IAlGC7E,EAAI2C,WAAWhC,EAAQ,KAoGGyC,EAAuB,CAQ9D,GAPAwK,EAASV,EAAMU,QAAS,EACxBC,EAAYX,EAAMW,WAAY,EAC9BI,GAAW,EACPhB,IAASpI,GAAyBlE,IAAUnD,IAC9CwQ,GAAiB,IAGD,IAAdT,EAAoB,CACtB,MAAiB,IAAVW,MAAmBjB,EAAO/G,MAC/B,GAAI+G,IAASlC,GAMb,GAAIkC,IAAS5J,EAAwB,CACnCuK,EAASV,EAAMU,QAAS,EACxBK,GAAW,EACX,KACd,OATcF,EAAcb,EAAMa,aAAc,EAClCd,EAAO/G,IAUX,QACV,CACQ,KACR,CAGI,GAAI+G,IAAS5I,EAAe,CAK1B,GAJIlG,IAASkG,IAAe+I,EAAaF,EAAME,YAAa,GAC5DQ,EAASV,EAAMU,QAAS,EACxBK,GAAW,GAEO,IAAdV,EACF,SAEF,KACN,CAEI,GAAIN,IAAS3H,EAAoB,CAI/B,GAHAsI,EAASV,EAAMU,QAAS,EACxBK,GAAW,GAEO,IAAdV,EACF,SAEF,KACN,CAEI,GAAIN,IAASzJ,EAA0B,CACrC,MAAiB,IAAV0K,MAAmB5H,EAAOJ,MAC/B,GAAII,IAASyE,GAMb,GAAIzE,IAAS7C,EAA2B,CACtCkK,EAAYT,EAAMS,WAAY,EAC9BC,EAASV,EAAMU,QAAS,EACxBK,GAAW,EACX,KACV,OAVUF,EAAcb,EAAMa,aAAc,EAClC7H,IAYJ,IAAkB,IAAdqH,EACF,SAGF,KACN,CAEI,IAAsB,IAAlB7R,EAAK0S,UAAqBnB,IAASpI,GAAyBlE,IAAUnD,EAA1E,CAMA,IAAqB,IAAjB9B,EAAK2S,SAAoBpB,IAAS7J,EAAuB,CAG3D,GAFAwK,EAASV,EAAMU,QAAS,GAEN,IAAdL,EAAoB,CACtB,MAAiB,IAAVW,MAAmBjB,EAAO/G,MAC/B,GAAI+G,IAAS7J,GAMb,GAAI6J,IAAS5J,EAAwB,CACnC4K,GAAW,EACX,KACZ,OARYF,EAAcb,EAAMa,aAAc,EAClCd,EAAO/G,IASX,QACR,CACM,KACN,CAEI,IAAe,IAAX0H,EAAiB,CAGnB,GAFAK,GAAW,GAEO,IAAdV,EACF,SAGF,KACN,CA/BA,MAHMT,EAAUI,EAAMJ,SAAU,EAC1BtP,GAnFN,KAbI,CAKE,GAJAgQ,EAAQpT,KAAKuG,GACb7B,EAAO1E,KAAK8S,GACZA,EAAQ,CAAEpW,MAAO,GAAImP,MAAO,EAAG2H,QAAQ,IAEtB,IAAbK,EAAmB,SACvB,GAAI9P,IAASgF,GAAYxC,IAAWnD,EAAQ,EAAI,CAC9CA,GAAS,EACT,QACR,CAEMiQ,EAAY9M,EAAQ,CAE1B,CAzEA,MAPMoN,EAAcb,EAAMa,aAAc,EAClCd,EAAO/G,IAEH+G,IAAS3J,IACXwK,GAAe,EAiMvB,EAEqB,IAAfpS,EAAKyS,QACPN,GAAY,EACZD,GAAS,GAGX,IAAIU,EAAOtO,EACPX,EAAS,GACTkP,EAAO,GAEP/Q,EAAQ,IACV6B,EAASW,EAAIJ,MAAM,EAAGpC,GACtBwC,EAAMA,EAAIJ,MAAMpC,GAChBiQ,GAAajQ,GAGX8Q,IAAmB,IAAXV,GAAmBH,EAAY,GACzCa,EAAOtO,EAAIJ,MAAM,EAAG6N,GACpBc,EAAOvO,EAAIJ,MAAM6N,KACG,IAAXG,GACTU,EAAO,GACPC,EAAOvO,GAEPsO,EAAOtO,EAGLsO,GAAiB,KAATA,GAAwB,MAATA,GAAgBA,IAAStO,GAC9CgN,EAAgBsB,EAAK3L,WAAW2L,EAAKtX,OAAS,MAChDsX,EAAOA,EAAK1O,MAAM,GAAG,KAIH,IAAlBlE,EAAK8S,WACHD,IAAMA,EAAO3T,EAAMkR,kBAAkByC,IAErCD,IAAwB,IAAhBP,IACVO,EAAO1T,EAAMkR,kBAAkBwC,KAInC,MAAM7R,EAAQ,CACZ4C,SACAqB,QACAlD,QACA8Q,OACAC,OACAb,UACAC,YACAC,SACAC,YACAT,aACAN,UACAkB,kBAWF,IARoB,IAAhBtS,EAAKoD,SACPrC,EAAMgS,SAAW,EACZzB,EAAgBC,IACnBnO,EAAO1E,KAAK8S,GAEdzQ,EAAMqC,OAASA,IAGE,IAAfpD,EAAK2G,QAAkC,IAAhB3G,EAAKoD,OAAiB,CAC/C,IAAI4P,EAEJ,IAAK,IAAIjC,EAAM,EAAGA,EAAMe,EAAQxW,OAAQyV,IAAO,CAC7C,MAAMlT,EAAImV,EAAYA,EAAY,EAAIlR,EAChCzG,EAAIyW,EAAQf,GACZ3V,EAAQ4J,EAAMd,MAAMrG,EAAGxC,GACzB2E,EAAKoD,SACK,IAAR2N,GAAuB,IAAVjP,GACfsB,EAAO2N,GAAKU,UAAW,EACvBrO,EAAO2N,GAAK3V,MAAQuI,GAEpBP,EAAO2N,GAAK3V,MAAQA,EAEtBmP,EAAMnH,EAAO2N,IACbhQ,EAAMgS,UAAY3P,EAAO2N,GAAKxG,OAEpB,IAARwG,GAAuB,KAAV3V,GACfuL,EAAMjI,KAAKtD,GAEb4X,EAAY3X,CAClB,CAEI,GAAI2X,GAAaA,EAAY,EAAIhO,EAAM1J,OAAQ,CAC7C,MAAMF,EAAQ4J,EAAMd,MAAM8O,EAAY,GACtCrM,EAAMjI,KAAKtD,GAEP4E,EAAKoD,SACPA,EAAOA,EAAO9H,OAAS,GAAGF,MAAQA,EAClCmP,EAAMnH,EAAOA,EAAO9H,OAAS,IAC7ByF,EAAMgS,UAAY3P,EAAOA,EAAO9H,OAAS,GAAGiP,MAEpD,CAEIxJ,EAAM+Q,QAAUA,EAChB/Q,EAAM4F,MAAQA,CAClB,CAEE,OAAO5F,CAAK,EDhYD8D,GACPsH,+BEFN,MAAM/D,EAAYjJ,KACZD,EAAQ2F,MAMRwC,WACJA,EAAU0G,mBACVA,EAAkBgB,wBAClBA,EAAuBE,4BACvBA,EAA2BG,aAC3BA,GACEhH,EAME6K,EAAc,CAACxX,EAAM6D,KACzB,GAAmC,mBAAxBA,EAAQ2T,YACjB,OAAO3T,EAAQ2T,eAAexX,EAAM6D,GAGtC7D,EAAKwH,OACL,MAAM7H,EAAQ,IAAIK,EAAKkG,KAAK,QAE5B,IAEE,IAAIuR,OAAO9X,EACZ,CAAC,MAAO+X,GACP,OAAO1X,EAAKoL,KAAIC,GAAK5H,EAAM+Q,YAAYnJ,KAAInF,KAAK,KACpD,CAEE,OAAOvG,CAAK,EAORgY,EAAc,CAAChW,EAAMyT,IAClB,WAAWzT,OAAUyT,iBAAoBA,iCAU5C1E,EAAQ,CAACnH,EAAO1F,KACpB,GAAqB,iBAAV0F,EACT,MAAM,IAAIlF,UAAU,qBAGtBkF,EAAQoK,EAAapK,IAAUA,EAE/B,MAAMhF,EAAO,IAAKV,GACZ9B,EAAgC,iBAAnBwC,EAAKmF,UAAyBzE,KAAKnD,IAAI8J,EAAYrH,EAAKmF,WAAakC,EAExF,IAAIpD,EAAMe,EAAM1J,OAChB,GAAI2I,EAAMzG,EACR,MAAM,IAAI4M,YAAY,iBAAiBnG,sCAAwCzG,KAGjF,MAAM6V,EAAM,CAAEjW,KAAM,MAAOhC,MAAO,GAAIsE,OAAQM,EAAKsT,SAAW,IACxDlQ,EAAS,CAACiQ,GAEVhT,EAAUL,EAAKK,QAAU,GAAK,KAC9BuP,EAAQ1Q,EAAMwR,UAAUpR,GAGxBiU,EAAiBnL,EAAUuH,UAAUC,GACrC4D,EAAgBpL,EAAUqH,aAAa8D,IAEvCzG,YACJA,EAAWO,aACXA,EAAYN,cACZA,EAAaQ,SACbA,EAAQJ,WACRA,EAAUK,OACVA,EAAME,aACNA,EAAYC,cACZA,EAAaX,MACbA,EAAKY,aACLA,EAAYC,KACZA,EAAIX,aACJA,GACEqG,EAEEE,EAAWzT,GACR,IAAIK,UAAgB6M,IAAelN,EAAK0T,IAAMvG,EAAaL,UAG9D6G,EAAQ3T,EAAK0T,IAAM,GAAKlG,EACxBoG,EAAa5T,EAAK0T,IAAM1G,EAAQY,EACtC,IAAIiG,GAAqB,IAAd7T,EAAK8T,KAAgBL,EAASzT,GAAQ6N,EAE7C7N,EAAKK,UACPwT,EAAO,IAAIA,MAIa,kBAAf7T,EAAKyS,QACdzS,EAAK+T,UAAY/T,EAAKyS,OAGxB,MAAM1R,EAAQ,CACZiE,QACAC,OAAS,EACTnD,MAAO,EACP4R,KAAkB,IAAb1T,EAAK0T,IACVM,SAAU,GACVtU,OAAQ,GACRiE,OAAQ,GACRsQ,WAAW,EACX7C,SAAS,EACT9G,SAAU,EACV+B,OAAQ,EACR6H,OAAQ,EACRC,OAAQ,EACRV,UAAU,EACVrQ,UAGF4B,EAAQ9F,EAAM+R,aAAajM,EAAOjE,GAClCkD,EAAMe,EAAM1J,OAEZ,MAAM8Y,EAAW,GACX/H,EAAS,GACThC,EAAQ,GACd,IACIjP,EADAqH,EAAO4Q,EAOX,MAAMb,EAAM,IAAMzR,EAAMkE,QAAUhB,EAAM,EAClCoQ,EAAOtT,EAAMsT,KAAO,CAACxW,EAAI,IAAMmH,EAAMjE,EAAMkE,MAAQpH,GACnD2M,EAAUzJ,EAAMyJ,QAAU,IAAMxF,IAAQjE,EAAMkE,QAAU,GACxDqP,EAAY,IAAMtP,EAAMd,MAAMnD,EAAMkE,MAAQ,GAC5CsP,EAAU,CAACnZ,EAAQ,GAAI0B,EAAM,KACjCiE,EAAMiT,UAAY5Y,EAClB2F,EAAMkE,OAASnI,CAAG,EAGd4O,EAAS8F,IACbzQ,EAAMrB,QAA0B,MAAhB8R,EAAM9R,OAAiB8R,EAAM9R,OAAS8R,EAAMpW,MAC5DmZ,EAAQ/C,EAAMpW,MAAM,EAGhBoZ,EAAS,KACb,IAAIvS,EAAQ,EAEZ,KAAkB,MAAXoS,MAA+B,MAAZA,EAAK,IAA0B,MAAZA,EAAK,KAChD7J,IACAzJ,EAAMe,QACNG,IAGF,OAAIA,EAAQ,GAAM,IAIlBlB,EAAMqQ,SAAU,EAChBrQ,EAAMe,SACC,EAAI,EAGP2S,EAAYrX,IAChB2D,EAAM3D,KACNiN,EAAM3L,KAAKtB,EAAK,EAGZsX,EAAYtX,IAChB2D,EAAM3D,KACNiN,EAAM5G,KAAK,EAWP/E,EAAO8D,IACX,GAAkB,aAAdC,EAAKrF,KAAqB,CAC5B,MAAM4U,EAAUjR,EAAMsL,OAAS,IAAmB,UAAb7J,EAAIpF,MAAiC,UAAboF,EAAIpF,MAC3D+U,GAA4B,IAAhB3P,EAAImS,SAAqBP,EAAS9Y,SAAwB,SAAbkH,EAAIpF,MAAgC,UAAboF,EAAIpF,MAEzE,UAAboF,EAAIpF,MAAiC,UAAboF,EAAIpF,MAAqB4U,GAAYG,IAC/DpR,EAAMrB,OAASqB,EAAMrB,OAAOwE,MAAM,GAAIzB,EAAK/C,OAAOpE,QAClDmH,EAAKrF,KAAO,OACZqF,EAAKrH,MAAQ,IACbqH,EAAK/C,OAASmU,EACd9S,EAAMrB,QAAU+C,EAAK/C,OAE7B,CAOI,GALI0U,EAAS9Y,QAAuB,UAAbkH,EAAIpF,OACzBgX,EAASA,EAAS9Y,OAAS,GAAGsZ,OAASpS,EAAIpH,QAGzCoH,EAAIpH,OAASoH,EAAI9C,SAAQgM,EAAOlJ,GAChCC,GAAsB,SAAdA,EAAKrF,MAAgC,SAAboF,EAAIpF,KAGtC,OAFAqF,EAAKrH,OAASoH,EAAIpH,WAClBqH,EAAK/C,QAAU+C,EAAK/C,QAAU,IAAM8C,EAAIpH,OAI1CoH,EAAIC,KAAOA,EACXW,EAAO1E,KAAK8D,GACZC,EAAOD,CAAG,EAGNqS,EAAc,CAACzX,EAAMhC,KACzB,MAAMoW,EAAQ,IAAKgC,EAAcpY,GAAQ0Z,WAAY,EAAGF,MAAO,IAE/DpD,EAAM/O,KAAOA,EACb+O,EAAM0C,OAASnT,EAAMmT,OACrB1C,EAAM9R,OAASqB,EAAMrB,OACrB,MAAMA,GAAUM,EAAKK,QAAU,IAAM,IAAMmR,EAAMnT,KAEjDoW,EAAU,UACV/V,EAAK,CAAEtB,OAAMhC,QAAOsE,OAAQqB,EAAMrB,OAAS,GAAK6N,IAChD7O,EAAK,CAAEtB,KAAM,QAASuX,SAAS,EAAMvZ,MAAOoP,IAAW9K,WACvD0U,EAAS1V,KAAK8S,EAAM,EAGhBuD,GAAevD,IACnB,IACIwD,EADAtV,EAAS8R,EAAMlT,OAAS0B,EAAKK,QAAU,IAAM,IAGjD,GAAmB,WAAfmR,EAAMpU,KAAmB,CAC3B,IAAI6X,EAAcpB,EAUlB,GARIrC,EAAMoD,OAASpD,EAAMoD,MAAMtZ,OAAS,GAAKkW,EAAMoD,MAAMM,SAAS,OAChED,EAAcxB,EAASzT,KAGrBiV,IAAgBpB,GAAQrB,KAAS,QAAQjO,KAAK+P,QAChD5U,EAAS8R,EAAMlT,MAAQ,OAAO2W,KAG5BzD,EAAMoD,MAAMM,SAAS,OAASF,EAAOV,MAAgB,eAAe/P,KAAKyQ,GAAO,CAMlF,MAAMG,EAAahJ,EAAM6I,EAAM,IAAK1V,EAAS8V,WAAW,IAAS1V,OAEjEA,EAAS8R,EAAMlT,MAAQ,IAAI6W,KAAcF,IACjD,CAE8B,QAApBzD,EAAM/O,KAAKrF,OACb2D,EAAMuR,gBAAiB,EAE/B,CAEI5T,EAAK,CAAEtB,KAAM,QAASuX,SAAS,EAAMvZ,QAAOsE,WAC5CgV,EAAU,SAAS,EAOrB,IAAuB,IAAnB1U,EAAKoV,YAAwB,sBAAsB7Q,KAAKS,GAAQ,CAClE,IAAIqN,GAAc,EAEd3S,EAASsF,EAAMkL,QAAQjB,GAA6B,CAACoG,EAAGC,EAAK5F,EAAO6F,EAAOP,EAAM/P,IACrE,OAAVsQ,GACFlD,GAAc,EACPgD,GAGK,MAAVE,EACED,EACKA,EAAMC,GAASP,EAAOhI,EAAM7I,OAAO6Q,EAAK1Z,QAAU,IAE7C,IAAV2J,EACK2O,GAAcoB,EAAOhI,EAAM7I,OAAO6Q,EAAK1Z,QAAU,IAEnD0R,EAAM7I,OAAOuL,EAAMpU,QAGd,MAAVia,EACKzI,EAAY3I,OAAOuL,EAAMpU,QAGpB,MAAVia,EACED,EACKA,EAAMC,GAASP,EAAOnB,EAAO,IAE/BA,EAEFyB,EAAMD,EAAI,KAAKA,MAaxB,OAVoB,IAAhBhD,IAEA3S,GADoB,IAAlBM,EAAK8S,SACEpT,EAAOwQ,QAAQ,MAAO,IAEtBxQ,EAAOwQ,QAAQ,QAAQmF,GACvBA,EAAE/Z,OAAS,GAAM,EAAI,OAAU+Z,EAAI,KAAO,MAKnD3V,IAAWsF,IAA2B,IAAlBhF,EAAK6D,UAC3B9C,EAAMrB,OAASsF,EACRjE,IAGTA,EAAMrB,OAASR,EAAMiS,WAAWzR,EAAQqB,EAAOzB,GACxCyB,EACX,CAME,MAAQyR,KAAO,CAGb,GAFApX,EAAQoP,IAEM,OAAVpP,EACF,SAOF,GAAc,OAAVA,EAAgB,CAClB,MAAMwP,EAAOyJ,IAEb,GAAa,MAATzJ,IAA8B,IAAd5K,EAAK8T,KACvB,SAGF,GAAa,MAATlJ,GAAyB,MAATA,EAClB,SAGF,IAAKA,EAAM,CACTxP,GAAS,KACTsD,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACR,CAGM,MAAMiV,EAAQ,OAAOmF,KAAKlB,KAC1B,IAAIxC,EAAU,EAgBd,GAdIzB,GAASA,EAAM,GAAG/U,OAAS,IAC7BwW,EAAUzB,EAAM,GAAG/U,OACnByF,EAAMkE,OAAS6M,EACXA,EAAU,GAAM,IAClB1W,GAAS,QAIS,IAAlB4E,EAAK8S,SACP1X,EAAQoP,IAERpP,GAASoP,IAGY,IAAnBzJ,EAAMuJ,SAAgB,CACxB5L,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACR,CACA,CAOI,GAAI2F,EAAMuJ,SAAW,IAAgB,MAAVlP,GAAgC,MAAfqH,EAAKrH,OAAgC,OAAfqH,EAAKrH,OAAiB,CACtF,IAAmB,IAAf4E,EAAKyV,OAA6B,MAAVra,EAAe,CACzC,MAAMwZ,EAAQnS,EAAKrH,MAAM8I,MAAM,GAC/B,GAAI0Q,EAAMM,SAAS,OACjBzS,EAAKgT,OAAQ,EAETb,EAAMM,SAAS,MAAM,CACvB,MAAMnE,EAAMtO,EAAKrH,MAAM4V,YAAY,KAC7B0E,EAAMjT,EAAKrH,MAAM8I,MAAM,EAAG6M,GAC1BiE,EAAOvS,EAAKrH,MAAM8I,MAAM6M,EAAM,GAC9B0E,EAAQ1H,EAAmBiH,GACjC,GAAIS,EAAO,CACThT,EAAKrH,MAAQsa,EAAMD,EACnB1U,EAAMkT,WAAY,EAClBzJ,IAEK6I,EAAI3T,QAAmC,IAAzB0D,EAAO6H,QAAQxI,KAChC4Q,EAAI3T,OAAS6N,GAEf,QACd,CACA,CAEA,EAEqB,MAAVnS,GAA4B,MAAXiZ,KAA8B,MAAVjZ,GAA4B,MAAXiZ,OACzDjZ,EAAQ,KAAKA,KAGD,MAAVA,GAAiC,MAAfqH,EAAKrH,OAAgC,OAAfqH,EAAKrH,QAC/CA,EAAQ,KAAKA,MAGI,IAAf4E,EAAKyV,OAA4B,MAAVra,GAAgC,MAAfqH,EAAKrH,QAC/CA,EAAQ,KAGVqH,EAAKrH,OAASA,EACdsQ,EAAO,CAAEtQ,UACT,QACN,CAOI,GAAqB,IAAjB2F,EAAMoT,QAA0B,MAAV/Y,EAAe,CACvCA,EAAQ8D,EAAM+Q,YAAY7U,GAC1BqH,EAAKrH,OAASA,EACdsQ,EAAO,CAAEtQ,UACT,QACN,CAMI,GAAc,MAAVA,EAAe,CACjB2F,EAAMoT,OAA0B,IAAjBpT,EAAMoT,OAAe,EAAI,GAChB,IAApBnU,EAAK6K,YACPnM,EAAK,CAAEtB,KAAM,OAAQhC,UAEvB,QACN,CAMI,GAAc,MAAVA,EAAe,CACjBqZ,EAAU,UACV/V,EAAK,CAAEtB,KAAM,QAAShC,UACtB,QACN,CAEI,GAAc,MAAVA,EAAe,CACjB,GAAqB,IAAjB2F,EAAMmT,SAAwC,IAAxBlU,EAAK2V,eAC7B,MAAM,IAAIvL,YAAYgJ,EAAY,UAAW,MAG/C,MAAMuB,EAAUP,EAASA,EAAS9Y,OAAS,GAC3C,GAAIqZ,GAAW5T,EAAMmT,SAAWS,EAAQT,OAAS,EAAG,CAClDa,GAAaX,EAAS3Q,OACtB,QACR,CAEM/E,EAAK,CAAEtB,KAAM,QAAShC,QAAOsE,OAAQqB,EAAMmT,OAAS,IAAM,QAC1DQ,EAAU,UACV,QACN,CAMI,GAAc,MAAVtZ,EAAe,CACjB,IAAuB,IAAnB4E,EAAK4V,WAAuBtB,IAAYY,SAAS,KAOnDT,EAAU,gBAP+C,CACzD,IAAuB,IAAnBzU,EAAK4V,YAA8C,IAAxB5V,EAAK2V,eAClC,MAAM,IAAIvL,YAAYgJ,EAAY,UAAW,MAG/ChY,EAAQ,KAAKA,GACrB,CAIMsD,EAAK,CAAEtB,KAAM,UAAWhC,UACxB,QACN,CAEI,GAAc,MAAVA,EAAe,CACjB,IAAuB,IAAnB4E,EAAK4V,WAAuBnT,GAAsB,YAAdA,EAAKrF,MAA4C,IAAtBqF,EAAKrH,MAAME,OAAe,CAC3FoD,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,OAAQ,KAAKtE,MACzC,QACR,CAEM,GAAuB,IAAnB2F,EAAMuJ,SAAgB,CACxB,IAA4B,IAAxBtK,EAAK2V,eACP,MAAM,IAAIvL,YAAYgJ,EAAY,UAAW,MAG/C1U,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,OAAQ,KAAKtE,MACzC,QACR,CAEMsZ,EAAU,YAEV,MAAMmB,EAAYpT,EAAKrH,MAAM8I,MAAM,GAUnC,IATmB,IAAfzB,EAAKgT,OAAmC,MAAjBI,EAAU,IAAeA,EAAUX,SAAS,OACrE9Z,EAAQ,IAAIA,KAGdqH,EAAKrH,OAASA,EACdsQ,EAAO,CAAEtQ,WAIoB,IAAzB4E,EAAK8V,iBAA6B5W,EAAM6Q,cAAc8F,GACxD,SAGF,MAAM/X,EAAUoB,EAAM+Q,YAAYxN,EAAKrH,OAKvC,GAJA2F,EAAMrB,OAASqB,EAAMrB,OAAOwE,MAAM,GAAIzB,EAAKrH,MAAME,SAIpB,IAAzB0E,EAAK8V,gBAA0B,CACjC/U,EAAMrB,QAAU5B,EAChB2E,EAAKrH,MAAQ0C,EACb,QACR,CAGM2E,EAAKrH,MAAQ,IAAIiF,IAAUvC,KAAW2E,EAAKrH,SAC3C2F,EAAMrB,QAAU+C,EAAKrH,MACrB,QACN,CAMI,GAAc,MAAVA,IAAkC,IAAjB4E,EAAK+V,QAAkB,CAC1CtB,EAAU,UAEV,MAAMpW,EAAO,CACXjB,KAAM,QACNhC,QACAsE,OAAQ,IACRsW,YAAajV,EAAMrB,OAAOpE,OAC1B2a,YAAalV,EAAMqC,OAAO9H,QAG5B+Q,EAAO3N,KAAKL,GACZK,EAAKL,GACL,QACN,CAEI,GAAc,MAAVjD,EAAe,CACjB,MAAM8a,EAAQ7J,EAAOA,EAAO/Q,OAAS,GAErC,IAAqB,IAAjB0E,EAAK+V,UAAqBG,EAAO,CACnCxX,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,OAAQtE,IACpC,QACR,CAEM,IAAIsE,EAAS,IAEb,IAAmB,IAAfwW,EAAMC,KAAe,CACvB,MAAMrX,EAAMsE,EAAOc,QACb0C,EAAQ,GAEd,IAAK,IAAIvL,EAAIyD,EAAIxD,OAAS,EAAGD,GAAK,IAChC+H,EAAOK,MACa,UAAhB3E,EAAIzD,GAAG+B,MAFwB/B,IAKf,SAAhByD,EAAIzD,GAAG+B,MACTwJ,EAAMwP,QAAQtX,EAAIzD,GAAGD,OAIzBsE,EAASuT,EAAYrM,EAAO5G,GAC5Be,EAAMkT,WAAY,CAC1B,CAEM,IAAoB,IAAhBiC,EAAMG,QAAiC,IAAfH,EAAMC,KAAe,CAC/C,MAAMG,EAAMvV,EAAMrB,OAAOwE,MAAM,EAAGgS,EAAMF,aAClCO,EAAOxV,EAAMqC,OAAOc,MAAMgS,EAAMD,aACtCC,EAAM9a,MAAQ8a,EAAMxW,OAAS,MAC7BtE,EAAQsE,EAAS,MACjBqB,EAAMrB,OAAS4W,EACf,IAAK,MAAMha,KAAKia,EACdxV,EAAMrB,QAAWpD,EAAEoD,QAAUpD,EAAElB,KAEzC,CAEMsD,EAAK,CAAEtB,KAAM,QAAShC,QAAOsE,WAC7BgV,EAAU,UACVrI,EAAO5I,MACP,QACN,CAMI,GAAc,MAAVrI,EAAe,CACbgZ,EAAS9Y,OAAS,GACpB8Y,EAASA,EAAS9Y,OAAS,GAAGwZ,aAEhCpW,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACN,CAMI,GAAc,MAAVA,EAAe,CACjB,IAAIsE,EAAStE,EAEb,MAAM8a,EAAQ7J,EAAOA,EAAO/Q,OAAS,GACjC4a,GAAqC,WAA5B7L,EAAMA,EAAM/O,OAAS,KAChC4a,EAAMG,OAAQ,EACd3W,EAAS,KAGXhB,EAAK,CAAEtB,KAAM,QAAShC,QAAOsE,WAC7B,QACN,CAMI,GAAc,MAAVtE,EAAe,CAKjB,GAAkB,QAAdqH,EAAKrF,MAAkB2D,EAAMkE,QAAUlE,EAAMe,MAAQ,EAAG,CAC1Df,EAAMe,MAAQf,EAAMkE,MAAQ,EAC5BlE,EAAMiT,SAAW,GACjBjT,EAAMrB,OAAS,GACf0D,EAAOK,MACPhB,EAAO4Q,EACP,QACR,CAEM3U,EAAK,CAAEtB,KAAM,QAAShC,QAAOsE,OAAQqN,IACrC,QACN,CAMI,GAAc,MAAV3R,EAAe,CACjB,GAAI2F,EAAMsL,OAAS,GAAmB,QAAd5J,EAAKrF,KAAgB,CACxB,MAAfqF,EAAKrH,QAAeqH,EAAK/C,OAASoN,GACtC,MAAMoJ,EAAQ7J,EAAOA,EAAO/Q,OAAS,GACrCmH,EAAKrF,KAAO,OACZqF,EAAK/C,QAAUtE,EACfqH,EAAKrH,OAASA,EACd8a,EAAMC,MAAO,EACb,QACR,CAEM,GAAKpV,EAAMsL,OAAStL,EAAMmT,SAAY,GAAmB,QAAdzR,EAAKrF,MAAgC,UAAdqF,EAAKrF,KAAkB,CACvFsB,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,OAAQoN,IACpC,QACR,CAEMpO,EAAK,CAAEtB,KAAM,MAAOhC,QAAOsE,OAAQoN,IACnC,QACN,CAMI,GAAc,MAAV1R,EAAe,CAEjB,KADgBqH,GAAuB,MAAfA,EAAKrH,SACM,IAAnB4E,EAAK+T,WAAiC,MAAXM,KAA8B,MAAZA,EAAK,GAAY,CAC5EQ,EAAY,QAASzZ,GACrB,QACR,CAEM,GAAIqH,GAAsB,UAAdA,EAAKrF,KAAkB,CACjC,MAAMwN,EAAOyJ,IACb,IAAI3U,EAAStE,EAEb,GAAa,MAATwP,IAAiB1L,EAAMoR,sBACzB,MAAM,IAAIkG,MAAM,4DAGE,MAAf/T,EAAKrH,QAAkB,SAASmJ,KAAKqG,IAAoB,MAATA,IAAiB,eAAerG,KAAK+P,QACxF5U,EAAS,KAAKtE,KAGhBsD,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,WAC5B,QACR,CAEM,IAAiB,IAAbM,EAAK0T,MAA+B,UAAdjR,EAAKrF,MAAkC,QAAdqF,EAAKrF,MAAiB,CACvEsB,EAAK,CAAEtB,KAAM,QAAShC,QAAOsE,OAAQkO,IACrC,QACR,CAEMlP,EAAK,CAAEtB,KAAM,QAAShC,QAAOsE,OAAQsN,IACrC,QACN,CAMI,GAAc,MAAV5R,EAAe,CACjB,IAAuB,IAAnB4E,EAAK+T,WAAiC,MAAXM,MACb,MAAZA,EAAK,KAAe,SAAS9P,KAAK8P,EAAK,KAAK,CAC9CQ,EAAY,SAAUzZ,GACtB,QACV,CAGM,IAAsB,IAAlB4E,EAAK0S,UAAqC,IAAhB3R,EAAMkE,MAAa,CAC/CuP,IACA,QACR,CACA,CAMI,GAAc,MAAVpZ,EAAe,CACjB,IAAuB,IAAnB4E,EAAK+T,WAAiC,MAAXM,KAA8B,MAAZA,EAAK,GAAY,CAChEQ,EAAY,OAAQzZ,GACpB,QACR,CAEM,GAAKqH,GAAuB,MAAfA,EAAKrH,QAAiC,IAAf4E,EAAKyW,MAAiB,CACxD/X,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,OAAQ2N,IACpC,QACR,CAEM,GAAK5K,IAAuB,YAAdA,EAAKrF,MAAoC,UAAdqF,EAAKrF,MAAkC,UAAdqF,EAAKrF,OAAsB2D,EAAMmT,OAAS,EAAG,CAC7GxV,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACR,CAEMsD,EAAK,CAAEtB,KAAM,OAAQhC,MAAOiS,IAC5B,QACN,CAMI,GAAc,MAAVjS,EAAe,CACjB,IAAuB,IAAnB4E,EAAK+T,WAAiC,MAAXM,KAA8B,MAAZA,EAAK,GAAY,CAChE3V,EAAK,CAAEtB,KAAM,KAAMuX,SAAS,EAAMvZ,QAAOsE,OAAQ,KACjD,QACR,CAEMhB,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACN,CAMI,GAAc,MAAVA,EAAe,CACH,MAAVA,GAA2B,MAAVA,IACnBA,EAAQ,KAAKA,KAGf,MAAMiV,EAAQtB,EAAwByG,KAAKlB,KACvCjE,IACFjV,GAASiV,EAAM,GACftP,EAAMkE,OAASoL,EAAM,GAAG/U,QAG1BoD,EAAK,CAAEtB,KAAM,OAAQhC,UACrB,QACN,CAMI,GAAIqH,IAAuB,aAAdA,EAAKrF,OAAqC,IAAdqF,EAAKoR,MAAgB,CAC5DpR,EAAKrF,KAAO,OACZqF,EAAKoR,MAAO,EACZpR,EAAKrH,OAASA,EACdqH,EAAK/C,OAASmU,EACd9S,EAAMkT,WAAY,EAClBlT,EAAM0S,UAAW,EACjBc,EAAQnZ,GACR,QACN,CAEI,IAAI4Z,EAAOV,IACX,IAAuB,IAAnBtU,EAAK+T,WAAsB,UAAUxP,KAAKyQ,GAAO,CACnDH,EAAY,OAAQzZ,GACpB,QACN,CAEI,GAAkB,SAAdqH,EAAKrF,KAAiB,CACxB,IAAwB,IAApB4C,EAAK0W,WAAqB,CAC5BnC,EAAQnZ,GACR,QACR,CAEM,MAAMub,EAAQlU,EAAKA,KACbkI,EAASgM,EAAMlU,KACfmU,EAAyB,UAAfD,EAAMvZ,MAAmC,QAAfuZ,EAAMvZ,KAC1CyZ,EAAYlM,IAA2B,SAAhBA,EAAOvN,MAAmC,aAAhBuN,EAAOvN,MAE9D,IAAkB,IAAd4C,EAAK8T,QAAmB8C,GAAY5B,EAAK,IAAkB,MAAZA,EAAK,IAAc,CACpEtW,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,OAAQ,KACpC,QACR,CAEM,MAAMsS,EAAUjR,EAAMsL,OAAS,IAAqB,UAAfsK,EAAMvZ,MAAmC,UAAfuZ,EAAMvZ,MAC/D+U,EAAYiC,EAAS9Y,SAA0B,SAAfqb,EAAMvZ,MAAkC,UAAfuZ,EAAMvZ,MACrE,IAAKwZ,GAA0B,UAAfD,EAAMvZ,OAAqB4U,IAAYG,EAAW,CAChEzT,EAAK,CAAEtB,KAAM,OAAQhC,QAAOsE,OAAQ,KACpC,QACR,CAGM,KAA4B,QAArBsV,EAAK9Q,MAAM,EAAG,IAAc,CACjC,MAAM4S,EAAQ9R,EAAMjE,EAAMkE,MAAQ,GAClC,GAAI6R,GAAmB,MAAVA,EACX,MAEF9B,EAAOA,EAAK9Q,MAAM,GAClBqQ,EAAQ,MAAO,EACvB,CAEM,GAAmB,QAAfoC,EAAMvZ,MAAkBoV,IAAO,CACjC/P,EAAKrF,KAAO,WACZqF,EAAKrH,OAASA,EACdqH,EAAK/C,OAAS+T,EAASzT,GACvBe,EAAMrB,OAAS+C,EAAK/C,OACpBqB,EAAM0S,UAAW,EACjBc,EAAQnZ,GACR,QACR,CAEM,GAAmB,UAAfub,EAAMvZ,MAAwC,QAApBuZ,EAAMlU,KAAKrF,OAAmByZ,GAAarE,IAAO,CAC9EzR,EAAMrB,OAASqB,EAAMrB,OAAOwE,MAAM,IAAKyS,EAAMjX,OAAS+C,EAAK/C,QAAQpE,QACnEqb,EAAMjX,OAAS,MAAMiX,EAAMjX,SAE3B+C,EAAKrF,KAAO,WACZqF,EAAK/C,OAAS+T,EAASzT,IAASA,EAAK+W,cAAgB,IAAM,OAC3DtU,EAAKrH,OAASA,EACd2F,EAAM0S,UAAW,EACjB1S,EAAMrB,QAAUiX,EAAMjX,OAAS+C,EAAK/C,OACpC6U,EAAQnZ,GACR,QACR,CAEM,GAAmB,UAAfub,EAAMvZ,MAAwC,QAApBuZ,EAAMlU,KAAKrF,MAA8B,MAAZ4X,EAAK,GAAY,CAC1E,MAAMnP,OAAkB,IAAZmP,EAAK,GAAgB,KAAO,GAExCjU,EAAMrB,OAASqB,EAAMrB,OAAOwE,MAAM,IAAKyS,EAAMjX,OAAS+C,EAAK/C,QAAQpE,QACnEqb,EAAMjX,OAAS,MAAMiX,EAAMjX,SAE3B+C,EAAKrF,KAAO,WACZqF,EAAK/C,OAAS,GAAG+T,EAASzT,KAAQ+M,KAAiBA,IAAgBlH,KACnEpD,EAAKrH,OAASA,EAEd2F,EAAMrB,QAAUiX,EAAMjX,OAAS+C,EAAK/C,OACpCqB,EAAM0S,UAAW,EAEjBc,EAAQnZ,EAAQoP,KAEhB9L,EAAK,CAAEtB,KAAM,QAAShC,MAAO,IAAKsE,OAAQ,KAC1C,QACR,CAEM,GAAmB,QAAfiX,EAAMvZ,MAA8B,MAAZ4X,EAAK,GAAY,CAC3CvS,EAAKrF,KAAO,WACZqF,EAAKrH,OAASA,EACdqH,EAAK/C,OAAS,QAAQqN,KAAiB0G,EAASzT,KAAQ+M,KACxDhM,EAAMrB,OAAS+C,EAAK/C,OACpBqB,EAAM0S,UAAW,EACjBc,EAAQnZ,EAAQoP,KAChB9L,EAAK,CAAEtB,KAAM,QAAShC,MAAO,IAAKsE,OAAQ,KAC1C,QACR,CAGMqB,EAAMrB,OAASqB,EAAMrB,OAAOwE,MAAM,GAAIzB,EAAK/C,OAAOpE,QAGlDmH,EAAKrF,KAAO,WACZqF,EAAK/C,OAAS+T,EAASzT,GACvByC,EAAKrH,OAASA,EAGd2F,EAAMrB,QAAU+C,EAAK/C,OACrBqB,EAAM0S,UAAW,EACjBc,EAAQnZ,GACR,QACN,CAEI,MAAMoW,EAAQ,CAAEpU,KAAM,OAAQhC,QAAOsE,OAAQmU,IAE3B,IAAd7T,EAAK8T,MASLrR,GAAuB,YAAdA,EAAKrF,MAAoC,UAAdqF,EAAKrF,OAAoC,IAAf4C,EAAKyW,OAMnE1V,EAAMkE,QAAUlE,EAAMe,OAAuB,UAAdW,EAAKrF,MAAkC,QAAdqF,EAAKrF,OAC7C,QAAdqF,EAAKrF,MACP2D,EAAMrB,QAAUgO,EAChBjL,EAAK/C,QAAUgO,IAEO,IAAb1N,EAAK0T,KACd3S,EAAMrB,QAAUiO,EAChBlL,EAAK/C,QAAUiO,IAGf5M,EAAMrB,QAAUiU,EAChBlR,EAAK/C,QAAUiU,GAGF,MAAXU,MACFtT,EAAMrB,QAAU6N,EAChB9K,EAAK/C,QAAU6N,IAInB7O,EAAK8S,KAzBHA,EAAM9R,OAAStE,EACfsD,EAAK8S,KAVLA,EAAM9R,OAAS,MACG,QAAd+C,EAAKrF,MAAgC,UAAdqF,EAAKrF,OAC9BoU,EAAM9R,OAASiU,EAAQnC,EAAM9R,QAE/BhB,EAAK8S,GA+BX,CAEE,KAAOzQ,EAAMuJ,SAAW,GAAG,CACzB,IAA4B,IAAxBtK,EAAK2V,eAAyB,MAAM,IAAIvL,YAAYgJ,EAAY,UAAW,MAC/ErS,EAAMrB,OAASR,EAAM0R,WAAW7P,EAAMrB,OAAQ,KAC9CgV,EAAU,WACd,CAEE,KAAO3T,EAAMmT,OAAS,GAAG,CACvB,IAA4B,IAAxBlU,EAAK2V,eAAyB,MAAM,IAAIvL,YAAYgJ,EAAY,UAAW,MAC/ErS,EAAMrB,OAASR,EAAM0R,WAAW7P,EAAMrB,OAAQ,KAC9CgV,EAAU,SACd,CAEE,KAAO3T,EAAMsL,OAAS,GAAG,CACvB,IAA4B,IAAxBrM,EAAK2V,eAAyB,MAAM,IAAIvL,YAAYgJ,EAAY,UAAW,MAC/ErS,EAAMrB,OAASR,EAAM0R,WAAW7P,EAAMrB,OAAQ,KAC9CgV,EAAU,SACd,CAOE,IAL2B,IAAvB1U,EAAK+W,eAAyC,SAAdtU,EAAKrF,MAAiC,YAAdqF,EAAKrF,MAC/DsB,EAAK,CAAEtB,KAAM,cAAehC,MAAO,GAAIsE,OAAQ,GAAGqN,QAI5B,IAApBhM,EAAMkT,UAAoB,CAC5BlT,EAAMrB,OAAS,GAEf,IAAK,MAAM8R,KAASzQ,EAAMqC,OACxBrC,EAAMrB,QAA0B,MAAhB8R,EAAM9R,OAAiB8R,EAAM9R,OAAS8R,EAAMpW,MAExDoW,EAAMwF,SACRjW,EAAMrB,QAAU8R,EAAMwF,OAG9B,CAEE,OAAOjW,CAAK,SASdoL,EAAMiJ,UAAY,CAACpQ,EAAO1F,KACxB,MAAMU,EAAO,IAAKV,GACZ9B,EAAgC,iBAAnBwC,EAAKmF,UAAyBzE,KAAKnD,IAAI8J,EAAYrH,EAAKmF,WAAakC,EAClFpD,EAAMe,EAAM1J,OAClB,GAAI2I,EAAMzG,EACR,MAAM,IAAI4M,YAAY,iBAAiBnG,sCAAwCzG,KAGjFwH,EAAQoK,EAAapK,IAAUA,EAC/B,MAAM4K,EAAQ1Q,EAAMwR,UAAUpR,IAGxBwN,YACJA,EAAWC,cACXA,EAAaQ,SACbA,EAAQJ,WACRA,EAAUK,OACVA,EAAMC,QACNA,EAAOE,cACPA,EAAaE,KACbA,EAAIX,aACJA,GACE9E,EAAUuH,UAAUC,GAElB+D,EAAQ3T,EAAK0T,IAAMjG,EAAUD,EAC7ByJ,EAAWjX,EAAK0T,IAAM/F,EAAgBH,EACtCnN,EAAUL,EAAKK,QAAU,GAAK,KAEpC,IAAIwT,GAAqB,IAAd7T,EAAK8T,KAAgB,MAAQjG,EAEpC7N,EAAKK,UACPwT,EAAO,IAAIA,MAGb,MAAMJ,EAAWzT,IACS,IAApBA,EAAK0W,WAA4B7C,EAC9B,IAAIxT,UAAgB6M,IAAelN,EAAK0T,IAAMvG,EAAaL,UAG9DR,EAAShI,IACb,OAAQA,GACN,IAAK,IACH,MAAO,GAAGqP,IAAQpG,IAAWsG,IAE/B,IAAK,KACH,MAAO,GAAG/G,IAAcS,IAAWsG,IAErC,IAAK,MACH,MAAO,GAAGF,IAAQE,IAAO/G,IAAcS,IAAWsG,IAEpD,IAAK,MACH,MAAO,GAAGF,IAAQE,IAAO9G,IAAgBQ,IAAW0J,IAAWpD,IAEjE,IAAK,KACH,OAAOF,EAAQF,EAASzT,GAE1B,IAAK,OACH,MAAO,MAAM2T,IAAQF,EAASzT,KAAQ+M,MAAkBkK,IAAW1J,IAAWsG,IAEhF,IAAK,SACH,MAAO,MAAMF,IAAQF,EAASzT,KAAQ+M,MAAkBkK,IAAWpD,IAAO/G,IAAcS,IAAWsG,IAErG,IAAK,QACH,MAAO,MAAMF,IAAQF,EAASzT,KAAQ+M,MAAkBD,IAAcS,IAAWsG,IAEnF,QAAS,CACP,MAAMxD,EAAQ,iBAAiBmF,KAAKlR,GACpC,IAAK+L,EAAO,OAEZ,MAAM6G,EAAS5K,EAAO+D,EAAM,IAC5B,IAAK6G,EAAQ,OAEb,OAAOA,EAASpK,EAAcuD,EAAM,EAC5C,EACA,EAGQ3Q,EAASR,EAAM+R,aAAajM,EAlDpB,CAAEoM,SAAS,EAAOzN,OAAQ,KAmDxC,IAAIuT,EAAS5K,EAAO5M,GAMpB,OAJIwX,IAAiC,IAAvBlX,EAAK+W,gBACjBG,GAAU,GAAGnK,MAGRmK,CAAM,EAGf/M,EAAiBgC,EF9jCHV,GACRvM,EAAQkN,KACRhE,EAAY+O,KAyBZC,EAAY,CAACvE,EAAMvT,EAAS+X,GAAc,KAC9C,GAAIrY,MAAMC,QAAQ4T,GAAO,CACvB,MAAMyE,EAAMzE,EAAKhM,KAAI7B,GAASoS,EAAUpS,EAAO1F,EAAS+X,KAClDE,EAAejT,IACnB,IAAK,MAAMkT,KAAWF,EAAK,CACzB,MAAMvW,EAAQyW,EAAQlT,GACtB,GAAIvD,EAAO,OAAOA,CAC1B,CACM,OAAO,CAAK,EAEd,OAAOwW,CACX,CAEE,MAAME,GArCS1T,EAqCU8O,IArCmB,iBAAR9O,IAAqB/E,MAAMC,QAAQ8E,IAqCrC8O,EAAKzP,QAAUyP,EAAK7N,MArCvCjB,MAuCf,GAAa,KAAT8O,GAAgC,iBAATA,IAAsB4E,EAC/C,MAAM,IAAI3X,UAAU,6CAGtB,MAAME,EAAOV,GAAW,CAAE,EACpBmW,EAAQvW,EAAMwR,UAAUpR,GACxBmX,EAAQgB,EACVL,EAAUM,UAAU7E,EAAMvT,GAC1B8X,EAAUO,OAAO9E,EAAMvT,GAAS,GAAO,GAErCyB,EAAQ0V,EAAM1V,aACb0V,EAAM1V,MAEb,IAAI6W,EAAY,KAAM,EACtB,GAAI5X,EAAK6X,OAAQ,CACf,MAAMC,EAAa,IAAKxY,EAASuY,OAAQ,KAAME,QAAS,KAAMC,SAAU,MACxEJ,EAAYR,EAAUpX,EAAK6X,OAAQC,EAAYT,EACnD,CAEE,MAAMY,EAAU,CAACjT,EAAOkT,GAAe,KACrC,MAAMV,QAAEA,EAAOnH,MAAEA,EAAK3Q,OAAEA,GAAW0X,EAAU7S,KAAKS,EAAOyR,EAAOnX,EAAS,CAAEuT,OAAM4C,UAC3E7W,EAAS,CAAEiU,OAAM9R,QAAO0V,QAAOhB,QAAOzQ,QAAOtF,SAAQ2Q,QAAOmH,WAMlE,MAJ6B,mBAAlBxX,EAAKgY,UACdhY,EAAKgY,SAASpZ,IAGA,IAAZ4Y,GACF5Y,EAAO4Y,SAAU,IACVU,GAAetZ,GAGpBgZ,EAAU5S,IACiB,mBAAlBhF,EAAKmY,UACdnY,EAAKmY,SAASvZ,GAEhBA,EAAO4Y,SAAU,IACVU,GAAetZ,IAGI,mBAAjBoB,EAAK+X,SACd/X,EAAK+X,QAAQnZ,IAERsZ,GAAetZ,EAAa,EAOrC,OAJIyY,IACFY,EAAQlX,MAAQA,GAGXkX,CAAO,SAoBhBb,EAAU7S,KAAO,CAACS,EAAOyR,EAAOnX,GAAWuT,OAAM4C,SAAU,MACzD,GAAqB,iBAAVzQ,EACT,MAAM,IAAIlF,UAAU,iCAGtB,GAAc,KAAVkF,EACF,MAAO,CAAEwS,SAAS,EAAO9X,OAAQ,IAGnC,MAAMM,EAAOV,GAAW,CAAE,EACpBmH,EAASzG,EAAKyG,SAAWgP,EAAQvW,EAAMiR,eAAiB,MAC9D,IAAIE,EAAQrL,IAAU6N,EAClBnT,EAAU2Q,GAAS5J,EAAUA,EAAOzB,GAASA,EAejD,OAbc,IAAVqL,IACF3Q,EAAS+G,EAASA,EAAOzB,GAASA,EAClCqL,EAAQ3Q,IAAWmT,IAGP,IAAVxC,IAAoC,IAAjBrQ,EAAKK,UAExBgQ,GADqB,IAAnBrQ,EAAKoY,YAAwC,IAAlBpY,EAAKqY,SAC1BjB,EAAUgB,UAAUpT,EAAOyR,EAAOnX,EAASmW,GAE3CgB,EAAMjB,KAAK9V,IAIhB,CAAE8X,QAAS9K,QAAQ2D,GAAQA,QAAO3Q,SAAQ,EAiBnD0X,EAAUgB,UAAY,CAACpT,EAAO6N,EAAMvT,EAASmW,EAAQvW,EAAMwR,UAAUpR,MACrDuT,aAAgBK,OAASL,EAAOuE,EAAUO,OAAO9E,EAAMvT,IACxDiF,KAAKrI,EAAKmc,SAASrT,IAoBlCoS,EAAUI,QAAU,CAAClT,EAAKgU,EAAUhZ,IAAY8X,EAAUkB,EAAUhZ,EAApB8X,CAA6B9S,GAgB7E8S,EAAUjL,MAAQ,CAACnK,EAAS1C,IACtBN,MAAMC,QAAQ+C,GAAiBA,EAAQ6E,KAAIoF,GAAKmL,EAAUjL,MAAMF,EAAG3M,KAChE6M,EAAMnK,EAAS,IAAK1C,EAAS8V,WAAW,IA8BjDgC,EAAU/F,KAAO,CAACrM,EAAO1F,IAAY+R,EAAKrM,EAAO1F,GAcjD8X,EAAUM,UAAY,CAAC3W,EAAOzB,EAASiZ,GAAe,EAAOlB,GAAc,KACzE,IAAqB,IAAjBkB,EACF,OAAOxX,EAAMrB,OAGf,MAAMM,EAAOV,GAAW,CAAE,EACpBgU,EAAUtT,EAAK6D,SAAW,GAAK,IAC/B6H,EAAS1L,EAAK6D,SAAW,GAAK,IAEpC,IAAIqT,EAAS,GAAG5D,OAAavS,EAAMrB,UAAUgM,IACzC3K,IAA2B,IAAlBA,EAAMqQ,UACjB8F,EAAS,OAAOA,SAGlB,MAAMT,EAAQW,EAAUxR,QAAQsR,EAAQ5X,GAKxC,OAJoB,IAAhB+X,IACFZ,EAAM1V,MAAQA,GAGT0V,CAAK,EAsBdW,EAAUO,OAAS,CAAC3S,EAAO1F,EAAU,CAAE,EAAEiZ,GAAe,EAAOlB,GAAc,KAC3E,IAAKrS,GAA0B,iBAAVA,EACnB,MAAM,IAAIlF,UAAU,+BAGtB,IAAI0Y,EAAS,CAAEpH,SAAS,EAAOgE,WAAW,GAU1C,OAR0B,IAAtB9V,EAAQ8V,WAAqC,MAAbpQ,EAAM,IAA2B,MAAbA,EAAM,KAC5DwT,EAAO9Y,OAASyM,EAAMiJ,UAAUpQ,EAAO1F,IAGpCkZ,EAAO9Y,SACV8Y,EAASrM,EAAMnH,EAAO1F,IAGjB8X,EAAUM,UAAUc,EAAQlZ,EAASiZ,EAAclB,EAAY,EAoBxED,EAAUxR,QAAU,CAACsR,EAAQ5X,KAC3B,IACE,MAAMU,EAAOV,GAAW,CAAE,EAC1B,OAAO,IAAI4T,OAAOgE,EAAQlX,EAAKyY,QAAUzY,EAAK0Y,OAAS,IAAM,IAC9D,CAAC,MAAOC,GACP,GAAIrZ,IAA6B,IAAlBA,EAAQsZ,MAAgB,MAAMD,EAC7C,MAAO,IACX,GAQAvB,EAAUhP,UAAYA,EAMtByQ,EAAiBzB,mCGnVjBA,GAAiBjY,6CCAjB,MAAMyF,EAAOzF,EACPkN,EAASxH,IACTuS,EAAY3L,KACZvM,EAAQkN,KAER0M,EAAgBhS,GAAW,KAANA,GAAkB,OAANA,EACjCiS,EAAYjS,IAChB,MAAM7B,EAAQ6B,EAAEmE,QAAQ,KACxB,OAAOhG,GAAQ,GAAM6B,EAAEmE,QAAQ,IAAKhG,IAAW,CAAA,EAqB3C+T,EAAa,CAACC,EAAMX,EAAUhZ,KAClCgZ,EAAW,GAAG5W,OAAO4W,GACrBW,EAAO,GAAGvX,OAAOuX,GAEjB,IAAIC,EAAO,IAAIpW,IACXqW,EAAO,IAAIrW,IACXsW,EAAQ,IAAItW,IACZ7B,EAAY,EAEZ+W,EAAWjX,IACbqY,EAAMrW,IAAIhC,EAAMrB,QACZJ,GAAWA,EAAQ0Y,UACrB1Y,EAAQ0Y,SAASjX,EACvB,EAGE,IAAK,IAAI1F,EAAI,EAAGA,EAAIid,EAAShd,OAAQD,IAAK,CACxC,IAAImc,EAAUJ,EAAUrX,OAAOuY,EAASjd,IAAK,IAAKiE,EAAS0Y,aAAY,GACnE5G,EAAUoG,EAAQzW,MAAMqQ,SAAWoG,EAAQzW,MAAMuR,eACjDlB,GAASnQ,IAEb,IAAK,IAAI6K,KAAQmN,EAAM,CACrB,IAAII,EAAU7B,EAAQ1L,GAAM,IAEhBsF,GAAWiI,EAAQ7B,QAAU6B,EAAQ7B,WAG7CpG,EACF8H,EAAKnW,IAAIsW,EAAQ3Z,SAEjBwZ,EAAKI,OAAOD,EAAQ3Z,QACpByZ,EAAKpW,IAAIsW,EAAQ3Z,SAEzB,CACA,CAEE,IACI6Z,GADStY,IAAcqX,EAAShd,OAAS,IAAI8d,GAAS,IAAID,IACzC1M,QAAOX,IAASoN,EAAKM,IAAI1N,KAE9C,GAAIxM,GAA8B,IAAnBia,EAAQje,OAAc,CACnC,IAAyB,IAArBgE,EAAQma,SACV,MAAM,IAAIjD,MAAM,yBAAyB8B,EAAS3W,KAAK,UAGzD,IAAuB,IAAnBrC,EAAQoa,SAAwC,IAArBpa,EAAQqa,SACrC,OAAOra,EAAQwT,SAAWwF,EAASzR,KAAIoF,GAAKA,EAAEiE,QAAQ,MAAO,MAAOoI,CAE1E,CAEE,OAAOiB,CAAO,SAOhBP,EAAW3I,MAAQ2I,EAqBnBA,EAAWf,QAAU,CAACjW,EAAS1C,IAAY8X,EAAUpV,EAAS1C,GAyB9D0Z,EAAWY,IANXZ,EAAWxB,QAAU,CAAClT,EAAKgU,EAAUhZ,IAAY8X,EAAUkB,EAAUhZ,EAApB8X,CAA6B9S,GAyB9E0U,EAAWa,IAAM,CAACZ,EAAMX,EAAUhZ,EAAU,CAAA,KAC1CgZ,EAAW,GAAG5W,OAAO4W,GAAUzR,IAAI9G,QACnC,IAAInB,EAAS,IAAIkE,IACbsW,EAAQ,GAORG,EAAU,IAAIzW,IAAIkW,EAAWC,EAAMX,EAAU,IAAKhZ,EAAS0Y,SALhDjX,IACTzB,EAAQ0Y,UAAU1Y,EAAQ0Y,SAASjX,GACvCqY,EAAM1a,KAAKqC,EAAMrB,OAAO,KAK1B,IAAK,IAAIoM,KAAQsN,EACVG,EAAQC,IAAI1N,IACflN,EAAOmE,IAAI+I,GAGf,MAAO,IAAIlN,EAAO,EAuBpBoa,EAAWnV,SAAW,CAACS,EAAKtC,EAAS1C,KACnC,GAAmB,iBAARgF,EACT,MAAM,IAAIxE,UAAU,uBAAuB8E,EAAKoB,QAAQ1B,OAG1D,GAAItF,MAAMC,QAAQ+C,GAChB,OAAOA,EAAQgC,MAAKiI,GAAK+M,EAAWnV,SAASS,EAAK2H,EAAG3M,KAGvD,GAAuB,iBAAZ0C,EAAsB,CAC/B,GAAI8W,EAAcxU,IAAQwU,EAAc9W,GACtC,OAAO,EAGT,GAAIsC,EAAI4Q,SAASlT,IAAasC,EAAI4M,WAAW,OAAS5M,EAAIJ,MAAM,GAAGgR,SAASlT,GAC1E,OAAO,CAEb,CAEE,OAAOgX,EAAWxB,QAAQlT,EAAKtC,EAAS,IAAK1C,EAASuE,UAAU,GAAO,EAuBzEmV,EAAWc,UAAY,CAACzW,EAAKiV,EAAUhZ,KACrC,IAAKJ,EAAM4F,SAASzB,GAClB,MAAM,IAAIvD,UAAU,+CAEtB,IAAIia,EAAOf,EAAWgB,OAAOD,KAAK1W,GAAMiV,EAAUhZ,GAC9C2a,EAAM,CAAE,EACZ,IAAK,IAAInW,KAAOiW,EAAME,EAAInW,GAAOT,EAAIS,GACrC,OAAOmW,CAAG,EAsBZjB,EAAWhV,KAAO,CAACiV,EAAMX,EAAUhZ,KACjC,IAAI8Z,EAAQ,GAAG1X,OAAOuX,GAEtB,IAAK,IAAIjX,IAAW,GAAGN,OAAO4W,GAAW,CACvC,IAAId,EAAUJ,EAAUrX,OAAOiC,GAAU1C,GACzC,GAAI8Z,EAAMpV,MAAK8H,GAAQ0L,EAAQ1L,KAC7B,OAAO,CAEb,CACE,OAAO,CAAK,EA2BdkN,EAAWkB,MAAQ,CAACjB,EAAMX,EAAUhZ,KAClC,IAAI8Z,EAAQ,GAAG1X,OAAOuX,GAEtB,IAAK,IAAIjX,IAAW,GAAGN,OAAO4W,GAAW,CACvC,IAAId,EAAUJ,EAAUrX,OAAOiC,GAAU1C,GACzC,IAAK8Z,EAAMc,OAAMpO,GAAQ0L,EAAQ1L,KAC/B,OAAO,CAEb,CACE,OAAO,CAAI,EA8BbkN,EAAWmB,IAAM,CAAC7V,EAAKgU,EAAUhZ,KAC/B,GAAmB,iBAARgF,EACT,MAAM,IAAIxE,UAAU,uBAAuB8E,EAAKoB,QAAQ1B,OAG1D,MAAO,GAAG5C,OAAO4W,GAAU4B,OAAMjO,GAAKmL,EAAUnL,EAAG3M,EAAb8X,CAAsB9S,IAAK,EAsBnE0U,EAAW3Y,QAAU,CAACwS,EAAM7N,EAAO1F,KACjC,IAAImW,EAAQvW,EAAMwR,UAAUpR,GAExB+Q,EADQ+G,EAAUO,OAAO5X,OAAO8S,GAAO,IAAKvT,EAASe,SAAS,IAChDmV,KAAKC,EAAQvW,EAAMiR,eAAenL,GAASA,GAE7D,GAAIqL,EACF,OAAOA,EAAMnM,MAAM,GAAG2C,KAAIC,QAAW,IAANA,EAAe,GAAKA,GACvD,EAmBAkS,EAAWrB,OAAS,IAAIlc,IAAS2b,EAAUO,UAAUlc,GAgBrDud,EAAW3H,KAAO,IAAI5V,IAAS2b,EAAU/F,QAAQ5V,GAgBjDud,EAAW7M,MAAQ,CAACmM,EAAUhZ,KAC5B,IAAI2a,EAAM,GACV,IAAK,IAAIjY,IAAW,GAAGN,OAAO4W,GAAY,IACxC,IAAK,IAAIhU,KAAO+H,EAAOtM,OAAOiC,GAAU1C,GACtC2a,EAAIvb,KAAK0Y,EAAUjL,MAAM7H,EAAKhF,IAGlC,OAAO2a,CAAG,EAoBZjB,EAAW3M,OAAS,CAACrK,EAAS1C,KAC5B,GAAuB,iBAAZ0C,EAAsB,MAAM,IAAIlC,UAAU,qBACrD,OAAKR,IAA+B,IAApBA,EAAQyW,UAAsBgD,EAAU/W,GAC/C,CAACA,GAEHqK,EAAOrK,EAAS1C,EAAQ,EAOjC0Z,EAAWoB,YAAc,CAACpY,EAAS1C,KACjC,GAAuB,iBAAZ0C,EAAsB,MAAM,IAAIlC,UAAU,qBACrD,OAAOkZ,EAAW3M,OAAOrK,EAAS,IAAK1C,EAASkM,QAAQ,GAAO,EAQjEwN,EAAWD,UAAYA,EACvBsB,GAAiBrB,cCjdjB,MAAMsB,GAAiD,CACrDC,IAAK,CAAC,OACNC,IAAK,CAAC,MAAO,MAAO,KAAM,OAGtBC,GAA6C,CACjDF,IlBIwC,CAAChJ,EAAcmJ,EAAY/W,EAAgB3D,KAEnF,MAAM2a,EAAcze,EAAK0e,QAAQ/K,QAAQgL,MAAO,MAC1CC,EAAe5e,EAAK6e,SAASJ,EAAaD,IAE1CM,WAAEA,GAAeC,EAAS1J,EAAM,CACpC2J,SAAUR,EACVS,WAAW,KAEPC,SAAEA,GAAaJ,EACrB,IAAKI,EAAU,MAAO,CAAE7J,OAAM1K,IAAK,MAEnC,MAAMwU,EAAcD,EAASE,IAAIxZ,MAAMyZ,OACjCC,EAAK,IAAIC,EAAYlK,GAErBlS,EAAMqc,EAAcN,EAASO,QAAS,CAC1CC,UAAU,EACVC,YAAcC,IAAQ,IAGlBC,EAAmB,CAAC5e,EAAmB6e,EAA6B,MACxE,GAAI7e,EAAKC,OAAS6e,EAAUC,QAAS,CAKnC,GAHuB/e,EAAKgf,MAAMnY,MAC/BoY,GAASA,EAAKhf,OAAS6e,EAAUI,YAAcD,EAAKE,OAAS,QAAQ3Y,UAAiByY,EAAKE,OAAS,QAAQ3Y,YAG7G,OAIF,GAAiB,aAAbxG,EAAK2e,IAAoB,OAG7B,GA5Ca,EAAC3e,EAAmB6e,EAA6B,KAEjC,QAA9B/gB,EAAA,CAACkC,EAAI,iBAAAof,GAAAA,EAAET,IAAG,iBAAAU,GAAAA,EAAEC,YAAW,OAAAC,GAAAA,OAGnBV,EAAYhY,MAAM3H,GAA0C,QAAlCpB,EAAA,CAAGoB,EAAM,iBAAAsgB,GAAAA,EAAEb,IAAK,iBAAAc,GAAAA,EAAAH,8BAuCzCI,CAAW1f,EAAM6e,GAAc,OAGnC,IAAIc,GAAe,EAUnB,GATG7hB,EAAA,CAAC+E,EAAI,iBAAA+c,GAAAA,EAAEC,YACJhe,MAAMC,QAAQe,EAAKgd,WACrBF,EAAe9c,EAAKgd,UAAU9H,SAAS/X,EAAK2e,KACT,mBAAnB9b,EAAKgd,YACrBF,EAAe9c,EAAKgd,UAAU7f,EAAK2e,MAGrCgB,EAAe/hB,EAAUma,SAAS/X,EAAK2e,MAEpCgB,EAAc,OAEnB,MAAMG,EAAe5B,EAAcle,EAAKme,IAAIxZ,MAAMyZ,OAASpe,EAAK2e,IAAIxgB,OAAS,EACvE4hB,EAAO9B,EAASE,IAAIxZ,MAAMob,KAAO/f,EAAKme,IAAIxZ,MAAMob,KAAO,EAEvDC,EAAchgB,EAAKme,IAAIxZ,MAAMsb,OAAS,EAE5C,IAAIC,EAAkB,GACtB,GAAGpiB,EAAA,CAAC+E,EAAI,iBAAAsd,GAAAA,EAAEC,aAAY,CACpB,MAAMC,EAAcxd,EAAKud,WAAW,CAAEzC,eAAcoC,OAAME,OAAQD,EAAarB,IAAK3e,EAAK2e,MACzFuB,EAAQrD,OAAOyD,QAAQD,GAAa3W,KAAI,EAAE6W,EAAG5W,KAAO,IAAI4W,MAAM5W,OACtE,KAAa,CAGL,IAAI6W,EAAa,GAEjB,GAHsB3iB,EAAiBka,SAAQja,EAAA,CAACkC,EAAI,iBAAAygB,GAAAA,EAAE9B,IAAG,iBAAA+B,GAAAA,EAAEpB,YAAW,OAAAqB,GAAAA,QAGjD3gB,EAAKX,SAAU,CACRW,EAAKX,SAASwH,MACrCtH,GAAUA,EAAMU,OAAS6e,EAAU8B,eAAiBrhB,EAAMU,OAAS6e,EAAU+B,wBAI9EL,EAAaxgB,EAAKX,SACfiQ,QAAQ/P,GAAUA,EAAMU,OAAS6e,EAAUgC,OAE3CpX,KAAKnK,GAAU,EAAeif,UAC9Bha,KAAK,IAEpB,CAEQ0b,EAAQ,CACN,SAAS1Z,WAAgBmX,MACzB,SAASnX,WAAgBuZ,MACzB,SAASvZ,mBAAwBwZ,MACjC,SAASxZ,UAAexG,EAAK2e,QAC7B,SAASnY,gBAAqBua,mBAAmBjjB,EAAA,CAAAmgB,EAAS,SAAA+C,GAAAA,EAAAxC,sBAAQlL,MAAK,OAAA2N,GAAAA,EAAC,MAAM,SAAAC,GAAAA,EAAAnB,EAAO,GAAI,iBAAAoB,GAAAA,EAAAthB,KAAK,OAAAuhB,GAAAA,OAAK,QACnG,SAAS5a,SAAcmX,KAAgBoC,KAAQC,MAC/C,SAASxZ,WAAgBua,mBAAmBP,OAEtD,CAEU5iB,EAAUma,SAAS/X,EAAK2e,MAC1BN,EAAGgD,WAAWvB,EAAcI,EAAM1b,KAAK,KAE/C,CAEQxE,EAAKX,UACPW,EAAKX,SAASC,SAASC,IACjBA,EAAMU,OAAS6e,EAAUC,SAC3BH,EAAiBrf,EAAO,IAAIsf,EAAa7e,GACnD,GAEA,EAME,OAFA4e,EAAiB1c,GAEV,CACLkS,KAAMiK,EAAGiD,WACT5X,IAAK2U,EAAGkD,YAAY,CAAEC,OAAO,IAC9B,EkB/GDnE,InB4CwC,CAACjJ,EAAcmJ,EAAY/W,EAAgB3D,KACnF,MAAMX,EAAMuf,EAAYzS,MAAMoF,EAAM,CAClCsN,WAAY,SACZC,QAAS,CAAC,MAAO,aAAc,kBAAmB,uBAI9CnE,EAAcoE,EAAMnE,QAAQ/K,QAAQgL,MAAO,MAC3CC,EAAeiE,EAAMhE,SAASJ,EAAaD,GAEjD9e,EAASyD,EAAK,CACZ,iBAAA2f,CAAkB9iB,GAChB,MAAMghB,EAAKjiB,EAAA,CAAEiB,EAAI,SAAAqgB,GAAAA,EAACpf,KAAI,SAAAqf,GAAAA,EAAClB,IAAG,iBAAAoB,GAAAA,EAAE5a,MAAK,SAAA6a,GAAAA,EAACO,OAC5BC,EAAYliB,EAAA,CAAEiB,EAAI,SAAA0gB,GAAAA,EAACzf,KAAI,SAAA8hB,GAAAA,EAAC3D,IAAG,iBAAAyB,GAAAA,EAAEjb,MAAK,SAAAwb,GAAAA,EAACF,SACzC,IAAKF,QAAwBvhB,IAAhBwhB,EAA2B,OAGxC,MACM+B,EADc3N,EAAKd,MAAM,MAEjB0O,WAAU,CAACC,EAAUna,IACXma,EAASpiB,OAEfkY,SAAS,IAA4B,kBAAxBhZ,EAAKiB,KAAKmf,KAAKlf,KAA2BlB,EAAKiB,KAAKmf,KAAKA,KAAO,OAAGrX,GAAA,EAAA,IAEA,EAQA,GANA/I,EAAAiB,KAAAogB,WAAAvZ,MACAqb,GACA/iB,EAAAgjB,eAAAD,IACA/iB,EAAAijB,gBAAAF,EAAA/C,QACA+C,EAAA/C,KAAAA,OAAA,QAAA3Y,UAAA0b,EAAA/C,KAAAA,OAAA,QAAA3Y,YAEA,OAaA,GARArH,EAAAijB,gBAAArjB,EAAAiB,KAAAmf,OAAA,aAAApgB,EAAAiB,KAAAmf,KAAAA,MAEAhgB,EAAAkjB,sBAAAtjB,EAAAiB,KAAAmf,OACAhgB,EAAAijB,gBAAArjB,EAAAiB,KAAAmf,KAAAmD,SACA,UAAAvjB,EAAAiB,KAAAmf,KAAAmD,OAAAnD,MACAhgB,EAAAijB,gBAAArjB,EAAAiB,KAAAmf,KAAAoD,WACA,aAAAxjB,EAAAiB,KAAAmf,KAAAoD,SAAApD,KAEA,OAGA,GApErF,CAACpgB,IAClB,GAAII,EAAEijB,gBAAgBrjB,EAAKiB,KAAKmf,OAAiC,QAAxBpgB,EAAKiB,KAAKmf,KAAKA,KAAgB,OAAO,EAE/E,IAAIqD,EAA+BzjB,EAAK0jB,WAExC,KAAOD,GAAa,CAClB,GAAIrjB,EAAEC,aAAaojB,EAAYxiB,MAAO,CACpC,MAAM0iB,EAAUF,EAAYxiB,KAAK2iB,eAAexD,KAChD,GAAIhgB,EAAEijB,gBAAgBM,IAA2C,QAA/BA,EAAQvD,KAAKG,cAC7C,OAAO,CAEf,CACIkD,EAAcA,EAAYC,UAC9B,CAEE,OAAO,CAAK,EAqD0F/C,CAAA3gB,GAAA,OAGA,IAAA4gB,GAAA,EAQA,GAPA7hB,EAAA,CAAA+E,EAAA,iBAAA4d,GAAAA,EAAAZ,cACAhe,MAAAC,QAAAe,EAAAgd,WACAF,EAAA9c,EAAAgd,UAAA9H,SAAA,kBAAAhZ,EAAAiB,KAAAmf,KAAAlf,KAAAlB,EAAAiB,KAAAmf,KAAAA,KAAA,IACA,mBAAAtc,EAAAgd,YACAF,EAAA9c,EAAAgd,UAAA,kBAAA9gB,EAAAiB,KAAAmf,KAAAlf,KAAAlB,EAAAiB,KAAAmf,KAAAA,KAAA,OAGAQ,EAAA,OAGA,MAAAiD,EAAA,KACA,MAAAC,EAAA/kB,EAAA,CAAAiB,EAAA,SAAA2hB,GAAAA,EAAA1gB,KAAA,SAAA2gB,GAAAA,EAAAxC,IAAA,iBAAA6C,GAAAA,EAAArc,MAAA,SAAAme,GAAAA,EAAA/C,OACAgD,EAAAjlB,EAAA,CAAAiB,EAAA,SAAAkiB,GAAAA,EAAAjhB,KAAA,SAAAkhB,GAAAA,EAAA/C,IAAA,iBAAAgD,GAAAA,EAAAxc,MAAA,SAAAyc,GAAAA,EAAAnB,SACA+C,EAAAllB,EAAA,CAAAiB,EAAA,SAAAkkB,GAAAA,EAAAjjB,KAAA,SAAAkjB,GAAAA,EAAA/E,IAAA,iBAAAgF,GAAAA,EAAAza,IAAA,SAAA0a,GAAAA,EAAArD,OACAsD,EAAAvlB,EAAA,CAAAiB,EAAA,SAAAukB,GAAAA,EAAAtjB,KAAA,SAAAujB,GAAAA,EAAApF,IAAA,iBAAAqF,GAAAA,EAAA9a,IAAA,SAAA+a,GAAAA,EAAAxD,SAEA,IAAA4C,IAAAG,QAAAxkB,IAAAukB,QAAAvkB,IAAA6kB,EAEA,OAAAjP,EAAAd,MAAA,MAAAyO,EAAA,IAAA,GAGA,MAAA2B,EAAAtP,EAAAd,MAAA,MAEA,GAAAuP,IAAAG,EAAA,CAEA,MAAAW,EAAAD,EAAAb,EAAA,IAAA,GAEA,IAAAe,EAAAb,EACA,KAAAa,EAAA,GAAA,KAAAxc,KAAAuc,EAAAC,EAAA,KACAA,IAGA,IAAAC,EAAAR,EACA,KAAAQ,EAAAF,EAAAxlB,QAAA,KAAAiJ,KAAAuc,EAAAE,KACAA,IAEA,OAAAF,EAAAG,UAAAF,EAAAC,EACA,CAEA,IAAAE,EAAA,GACA,IAAA,IAAA7lB,EAAA2kB,EAAA,EAAA3kB,GAAA8kB,EAAA,EAAA9kB,IAAA,CACA,MAAA8lB,EAAAN,EAAAxlB,IAAA,GACA,GAAAA,IAAA2kB,EAAA,EAAA,CAEA,IAAAe,EAAAb,EACA,KAAAa,EAAA,GAAA,KAAAxc,KAAA4c,EAAAJ,EAAA,KACAA,IAEAG,GAAAC,EAAAF,UAAAF,EACA,MAAA,GAAA1lB,IAAA8kB,EAAA,EAAA,CAEA,IAAAa,EAAAR,EACA,KAAAQ,EAAAG,EAAA7lB,QAAA,KAAAiJ,KAAA4c,EAAAH,KACAA,IAEAE,GAAA,KAAAC,EAAAF,UAAA,EAAAD,IACA,MAEAE,GAAA,KAAAC,GAEA,CACA,OAAAD,CAAA,EAGA,IAAA7D,EAAA,CAAA,EACA,GAAApiB,EAAA,CAAA+E,EAAA,iBAAAohB,GAAAA,EAAA7D,aACAF,EAAArd,EAAAud,WAAA,CACAzC,eACAoC,KAAAgC,GAAAhC,EACAE,OAAAD,EACArB,IAAA,kBAAA5f,EAAAiB,KAAAmf,KAAAlf,KAAAlB,EAAAiB,KAAAmf,KAAAA,KAAA,SAEA,CACA,MAAAuD,EAAA,kBAAA3jB,EAAAiB,KAAAmf,KAAAlf,KAAAlB,EAAAiB,KAAAmf,KAAAA,KAAA,GACA+E,EAAArmB,EAAAka,SAAA2K,EAAApD,eAEAY,EAAA,CACA,CAAA,QAAA1Z,UAAA,GAAAmX,IACA,CAAA,QAAAnX,UAAA,GAAAub,GAAAhC,IACA,CAAA,QAAAvZ,kBAAA,GAAAwZ,IACA,CAAA,QAAAxZ,SAAA,GAAAkc,IACA,CAAA,QAAAlc,eAAAua,mBAAA6B,KACA,CAAA,QAAApc,QAAA,GAAAmX,KAAAoE,GAAAhC,KAAAC,IACA,CAAA,QAAAxZ,aAAA,MACA,CAAA,QAAAA,UAAA0d,EAAAnD,mBAAAjiB,EAAAC,IAAA,GAEA,CACAA,EAAAiB,KAAAogB,WAAA7e,QACAsb,OAAAyD,QAAAJ,GAAAxW,KAAA,EAAA/C,EAAA1I,KAAAkB,EAAAglB,aAAAhlB,EAAAilB,cAAAzd,GAAAxH,EAAAklB,cAAApmB,MAEA,IAGA,MAAAsE,EAAA3D,EAAAsD,EAAA,CAAA,EAAAkS,GAEA,MAAA,CACAA,KAAA7R,EAAA6R,KACA1K,IAAAnH,EAAAmH,IACA,GmB/LlG4a,GAAS,UACTC,GAAkB,CAAC,gCAGnBnhB,GAAQ,IAAIohB,IAMX,SAASC,GAAkBtiB,EAAyB,IACzD,MAAMuiB,QAAEA,EAAUH,GAAeI,QAAEA,EAAU,GAAEne,OAAEA,EAAS8d,GAAMM,OAAEA,GAAS,EAAIxE,WAAEA,EAAUP,UAAEA,GAAc1d,EAErG0iB,EAAahjB,MAAMC,QAAQ4iB,GAAWA,EAAU,CAACA,GACjDI,EAAajjB,MAAMC,QAAQ6iB,GAAWA,EAAU,CAACA,GAWvD,MAAO,CACLxF,4CACA4F,QAAS,MACTC,MAAO,QACP3R,gBACA,eAAM9J,CAAU6K,EAAcmJ,GAC5B,IAAKqH,EAAQ,OAGb,IAlBJ,SAAoBK,GAClB,MAAM/I,EAAU2I,EAAWhe,MAAMhC,GACxBgX,GAAWxB,QAAQ4K,EAAMpgB,KAG5BqgB,EAAWJ,EAAW3mB,OAAS,GAAK2mB,EAAWje,MAAMhC,GAAYgX,GAAWxB,QAAQ4K,EAAMpgB,KAChG,OAAOqX,IAAYgJ,CACvB,CAWWC,CAFgBpmB,EAAK6e,SAASlL,QAAQgL,MAAOH,IAEnB,OAC/B,MAAM6H,EA7BZ,SAAiBhR,GACf,OAAOiR,EAAOC,WAAW,OAAOC,OAAOnR,GAAMoR,OAAO,MACtD,CA2BmBC,CAAQrR,GACfpR,EAAW,GAACua,KAAA6H,IACA,GAAAhiB,GAAAiZ,IAAArZ,GAAA,CAGA,OAFAI,GAAAsiB,IAAA1iB,EAGA,CACA,MAAA2iB,EAAA9I,OAAAD,KAAAU,IAAAvd,MAAA4G,GACAwW,GAAAxW,GACAE,MAAA5G,GAAAsd,EAAAqI,SAAA,IAAA3lB,SAGA,IAAA0lB,EACA,OAEA,MAAAlkB,EApEjB,SAAA1D,GAAA,IAAAC,EAAAC,EAAAF,EAAA,GAAAG,EAAA,EAAA,KAAAA,EAAAH,EAAAI,QAAA,CAAA,MAAAC,EAAAL,EAAAG,GAAAG,EAAAN,EAAAG,EAAA,GAAA,GAAAA,GAAA,GAAA,mBAAAE,GAAA,iBAAAA,IAAA,MAAAH,EAAA,OAAA,WAAAG,GAAA,mBAAAA,GAAAJ,EAAAC,EAAAA,EAAAI,EAAAJ,IAAA,SAAAG,GAAA,iBAAAA,IAAAH,EAAAI,GAAA,IAAAC,IAAAL,EAAAM,KAAAP,KAAAM,KAAAN,OAAAQ,EAAA,CAAA,OAAAP,CAAA,CAoEiBH,CAAA,CAAAwf,GAAA,SAAA8B,GAAAA,EAAAuG,GAAA,eAAAtG,GAAAA,EAAAjL,EAAAmJ,EAAA/W,EAAA,CAAA4Z,aAAAP,gBAGA,OAFAzc,GAAAyiB,IAAA7iB,EAAAvB,GAEAA,CACA,EAEA","x_google_ignoreList":[3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19]}