{"version":3,"file":"requireParam.cjs","names":["iterateJsdoc"],"sources":["../../src/rules/requireParam.js"],"sourcesContent":["import iterateJsdoc from '../iterateJsdoc.js';\n\n/**\n * @typedef {[string, boolean, () => RootNamerReturn]} RootNamerReturn\n */\n\n/**\n * @param {string[]} desiredRoots\n * @param {number} currentIndex\n * @returns {RootNamerReturn}\n */\nconst rootNamer = (desiredRoots, currentIndex) => {\n  /** @type {string} */\n  let name;\n  let idx = currentIndex;\n  const incremented = desiredRoots.length <= 1;\n  if (incremented) {\n    const base = desiredRoots[0];\n    const suffix = idx++;\n    name = `${base}${suffix}`;\n  } else {\n    name = /** @type {string} */ (desiredRoots.shift());\n  }\n\n  return [\n    name,\n    incremented,\n    () => {\n      return rootNamer(desiredRoots, idx);\n    },\n  ];\n};\n\n/* eslint-disable complexity -- Temporary */\nexport default iterateJsdoc(({\n  context,\n  jsdoc,\n  node,\n  utils,\n}) => {\n  /* eslint-enable complexity -- Temporary */\n  if (utils.avoidDocs()) {\n    return;\n  }\n\n  // Param type is specified by type in @type\n  if (utils.hasTag('type')) {\n    return;\n  }\n\n  const {\n    autoIncrementBase = 0,\n    checkDestructured = true,\n    checkDestructuredRoots = true,\n    checkRestProperty = false,\n    checkTypesPattern = '/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/',\n    enableFixer = true,\n    enableRestElementFixer = true,\n    enableRootFixer = true,\n    ignoreWhenAllParamsMissing = false,\n    interfaceExemptsParamsCheck = false,\n    unnamedRootBase = [\n      'root',\n    ],\n    useDefaultObjectProperties = false,\n  } = context.options[0] || {};\n\n  if (interfaceExemptsParamsCheck && node &&\n    node.parent?.type === 'VariableDeclarator' &&\n    'typeAnnotation' in node.parent.id && node.parent.id.typeAnnotation) {\n    return;\n  }\n\n  const preferredTagName = /** @type {string} */ (utils.getPreferredTagName({\n    tagName: 'param',\n  }));\n  if (!preferredTagName) {\n    return;\n  }\n\n  const functionParameterNames = utils.getFunctionParameterNames(useDefaultObjectProperties, interfaceExemptsParamsCheck);\n  if (!functionParameterNames.length) {\n    return;\n  }\n\n  const jsdocParameterNames =\n    /**\n     * @type {{\n     *   idx: import('../iterateJsdoc.js').Integer;\n     *   name: string;\n     *   type: string;\n     * }[]}\n     */ (utils.getJsdocTagsDeep(preferredTagName));\n\n  if (ignoreWhenAllParamsMissing && !jsdocParameterNames.length) {\n    return;\n  }\n\n  const shallowJsdocParameterNames = jsdocParameterNames.filter((tag) => {\n    return !tag.name.includes('.');\n  }).map((tag, idx) => {\n    return {\n      ...tag,\n      idx,\n    };\n  });\n\n  const checkTypesRegex = utils.getRegexFromString(checkTypesPattern);\n\n  /**\n   * @type {{\n   *   functionParameterIdx: import('../iterateJsdoc.js').Integer,\n   *   functionParameterName: string,\n   *   inc: boolean|undefined,\n   *   remove?: true,\n   *   type?: string|undefined\n   * }[]}\n   */\n  const missingTags = [];\n  const flattenedRoots = utils.flattenRoots(functionParameterNames).names;\n\n  /**\n   * @type {{\n   *   [key: string]: import('../iterateJsdoc.js').Integer\n   * }}\n   */\n  const paramIndex = {};\n\n  /**\n   * @param {string} cur\n   * @returns {boolean}\n   */\n  const hasParamIndex = (cur) => {\n    return utils.dropPathSegmentQuotes(String(cur)) in paramIndex;\n  };\n\n  /**\n   *\n   * @param {string|number|undefined} cur\n   * @returns {import('../iterateJsdoc.js').Integer}\n   */\n  const getParamIndex = (cur) => {\n    return paramIndex[utils.dropPathSegmentQuotes(String(cur))];\n  };\n\n  /**\n   *\n   * @param {string} cur\n   * @param {import('../iterateJsdoc.js').Integer} idx\n   * @returns {void}\n   */\n  const setParamIndex = (cur, idx) => {\n    paramIndex[utils.dropPathSegmentQuotes(String(cur))] = idx;\n  };\n\n  for (const [\n    idx,\n    cur,\n  ] of flattenedRoots.entries()) {\n    setParamIndex(cur, idx);\n  }\n\n  /**\n   *\n   * @param {(import('@es-joy/jsdoccomment').JsdocTagWithInline & {\n   *   newAdd?: boolean\n   * })[]} jsdocTags\n   * @param {import('../iterateJsdoc.js').Integer} indexAtFunctionParams\n   * @returns {{\n   *   foundIndex: import('../iterateJsdoc.js').Integer,\n   *   tagLineCount: import('../iterateJsdoc.js').Integer,\n   * }}\n   */\n  const findExpectedIndex = (jsdocTags, indexAtFunctionParams) => {\n    // Get the parameters that come after the current index in the flattened order\n    const remainingFlattenedRoots = flattenedRoots.slice((indexAtFunctionParams || 0) + 1);\n\n    // Find the first existing tag that comes after the current parameter in the flattened order\n    const foundIndex = jsdocTags.findIndex(({\n      name,\n      newAdd,\n    }) => {\n      if (newAdd) {\n        return false;\n      }\n\n      // Check if the tag name matches any of the remaining flattened roots\n      return remainingFlattenedRoots.some((flattenedRoot) => {\n        // The flattened roots don't have the root prefix (e.g., \"bar\", \"bar.baz\")\n        // but JSDoc tags do (e.g., \"root0\", \"root0.bar\", \"root0.bar.baz\")\n        // So we need to check if the tag name ends with the flattened root\n\n        // Check if tag name ends with \".<flattenedRoot>\"\n        if (name.endsWith(`.${flattenedRoot}`)) {\n          return true;\n        }\n\n        // Also check if tag name exactly matches the flattenedRoot\n        //   (for single-level params)\n        if (name === flattenedRoot) {\n          return true;\n        }\n\n        return false;\n      });\n    });\n\n    const tags = foundIndex > -1 ?\n      jsdocTags.slice(0, foundIndex) :\n      jsdocTags.filter(({\n        tag,\n      }) => {\n        return tag === preferredTagName;\n      });\n\n    let tagLineCount = 0;\n    for (const {\n      source,\n    } of tags) {\n      for (const {\n        tokens: {\n          end,\n        },\n      } of source) {\n        if (!end) {\n          tagLineCount++;\n        }\n      }\n    }\n\n    return {\n      foundIndex,\n      tagLineCount,\n    };\n  };\n\n  let [\n    nextRootName,\n    incremented,\n    namer,\n  ] = rootNamer([\n    ...unnamedRootBase,\n  ], autoIncrementBase);\n\n  const thisOffset = functionParameterNames[0] === 'this' ? 1 : 0;\n\n  for (const [\n    functionParameterIdx,\n    functionParameterName,\n  ] of functionParameterNames.entries()) {\n    let inc;\n    if (Array.isArray(functionParameterName)) {\n      const matchedJsdoc = shallowJsdocParameterNames[functionParameterIdx - thisOffset];\n\n      /** @type {string} */\n      let rootName;\n      if (functionParameterName[0]) {\n        rootName = functionParameterName[0];\n      } else if (matchedJsdoc && matchedJsdoc.name) {\n        rootName = matchedJsdoc.name;\n        if (matchedJsdoc.type && matchedJsdoc.type.search(checkTypesRegex) === -1) {\n          continue;\n        }\n      } else {\n        rootName = nextRootName;\n        inc = incremented;\n      }\n\n      [\n        nextRootName,\n        incremented,\n        namer,\n      ] = namer();\n\n      const {\n        hasPropertyRest,\n        hasRestElement,\n        names,\n        rests,\n      } = /**\n           * @type {import('../jsdocUtils.js').FlattendRootInfo & {\n           *   annotationParamName?: string | undefined;\n           * }}\n           */ (functionParameterName[1]);\n      const notCheckingNames = [];\n      if (!enableRestElementFixer && hasRestElement) {\n        continue;\n      }\n\n      if (!checkDestructuredRoots) {\n        continue;\n      }\n\n      for (const [\n        idx,\n        paramName,\n      ] of names.entries()) {\n        // Add root if the root name is not in the docs (and is not already\n        //  in the tags to be fixed)\n        if (!jsdocParameterNames.find(({\n          name,\n        }) => {\n          return name === rootName;\n        }) && !missingTags.find(({\n          functionParameterName: fpn,\n        }) => {\n          return fpn === rootName;\n        })) {\n          const emptyParamIdx = jsdocParameterNames.findIndex(({\n            name,\n          }) => {\n            return !name;\n          });\n\n          if (emptyParamIdx > -1) {\n            missingTags.push({\n              functionParameterIdx: emptyParamIdx,\n              functionParameterName: rootName,\n              inc,\n              remove: true,\n            });\n          } else {\n            missingTags.push({\n              functionParameterIdx: hasParamIndex(rootName) ?\n                getParamIndex(rootName) :\n                getParamIndex(paramName),\n              functionParameterName: rootName,\n              inc,\n            });\n          }\n        }\n\n        if (!checkDestructured) {\n          continue;\n        }\n\n        if (!checkRestProperty && rests[idx]) {\n          continue;\n        }\n\n        const fullParamName = `${rootName}.${paramName}`;\n\n        const notCheckingName = jsdocParameterNames.find(({\n          name,\n          type: paramType,\n        }) => {\n          return utils.comparePaths(name)(fullParamName) && paramType.search(checkTypesRegex) === -1 && paramType !== '';\n        });\n\n        if (notCheckingName !== undefined) {\n          notCheckingNames.push(notCheckingName.name);\n        }\n\n        if (notCheckingNames.find((name) => {\n          return fullParamName.startsWith(name);\n        })) {\n          continue;\n        }\n\n        if (jsdocParameterNames && !jsdocParameterNames.find(({\n          name,\n        }) => {\n          return utils.comparePaths(name)(fullParamName);\n        })) {\n          missingTags.push({\n            functionParameterIdx: getParamIndex(\n              functionParameterName[0] ? fullParamName : paramName,\n            ),\n            functionParameterName: fullParamName,\n            inc,\n            type: hasRestElement && !hasPropertyRest ? '{...any}' : undefined,\n          });\n        }\n      }\n\n      continue;\n    }\n\n    /** @type {string} */\n    let funcParamName;\n    let type;\n    if (typeof functionParameterName === 'object') {\n      if (!enableRestElementFixer && functionParameterName.restElement) {\n        continue;\n      }\n\n      funcParamName = /** @type {string} */ (functionParameterName.name);\n      type = '{...any}';\n    } else {\n      funcParamName = /** @type {string} */ (functionParameterName);\n    }\n\n    if (jsdocParameterNames && !jsdocParameterNames.find(({\n      name,\n    }) => {\n      return name === funcParamName;\n    }) && funcParamName !== 'this') {\n      missingTags.push({\n        functionParameterIdx: getParamIndex(funcParamName),\n        functionParameterName: funcParamName,\n        inc,\n        type,\n      });\n    }\n  }\n\n  /**\n   *\n   * @param {{\n   *   functionParameterIdx: import('../iterateJsdoc.js').Integer,\n   *   functionParameterName: string,\n   *   remove?: true,\n   *   inc?: boolean,\n   *   type?: string\n   * }} cfg\n   */\n  const fix = ({\n    functionParameterIdx,\n    functionParameterName,\n    inc,\n    remove,\n    type,\n  }) => {\n    if (inc && !enableRootFixer) {\n      return;\n    }\n\n    /**\n     *\n     * @param {import('../iterateJsdoc.js').Integer} tagIndex\n     * @param {import('../iterateJsdoc.js').Integer} sourceIndex\n     * @param {import('../iterateJsdoc.js').Integer} spliceCount\n     * @returns {void}\n     */\n    const createTokens = (tagIndex, sourceIndex, spliceCount) => {\n      // console.log(sourceIndex, tagIndex, jsdoc.tags, jsdoc.source);\n      const tokens = {\n        number: sourceIndex + 1,\n        source: '',\n        tokens: {\n          delimiter: '*',\n          description: '',\n          end: '',\n          lineEnd: '',\n          name: functionParameterName,\n          newAdd: true,\n          postDelimiter: ' ',\n          postName: '',\n          postTag: ' ',\n          postType: type ? ' ' : '',\n          start: jsdoc.source[sourceIndex].tokens.start,\n          tag: `@${preferredTagName}`,\n          type: type ?? '',\n        },\n      };\n\n      /**\n       * @type {(import('@es-joy/jsdoccomment').JsdocTagWithInline & {\n       *   newAdd?: true\n       * })[]}\n       */ (jsdoc.tags).splice(tagIndex, spliceCount, {\n        description: '',\n        inlineTags: [],\n        name: functionParameterName,\n        newAdd: true,\n        optional: false,\n        problems: [],\n        source: [\n          tokens,\n        ],\n        tag: preferredTagName,\n        type: type ?? '',\n      });\n      const firstNumber = jsdoc.source[0].number;\n      jsdoc.source.splice(sourceIndex, spliceCount, tokens);\n      for (const [\n        idx,\n        src,\n      ] of jsdoc.source.slice(sourceIndex).entries()) {\n        src.number = firstNumber + sourceIndex + idx;\n      }\n    };\n\n    const offset = jsdoc.source.findIndex(({\n      tokens: {\n        end,\n        tag,\n      },\n    }) => {\n      return tag || end;\n    });\n    if (remove) {\n      createTokens(functionParameterIdx, offset + functionParameterIdx, 1);\n    } else {\n      const {\n        foundIndex,\n        tagLineCount: expectedIdx,\n      } =\n        findExpectedIndex(jsdoc.tags, functionParameterIdx);\n\n      const firstParamLine = jsdoc.source.findIndex(({\n        tokens,\n      }) => {\n        return tokens.tag === `@${preferredTagName}`;\n      });\n      const baseOffset = foundIndex > -1 || firstParamLine === -1 ?\n        offset :\n        firstParamLine;\n\n      createTokens(expectedIdx, baseOffset + expectedIdx, 0);\n    }\n  };\n\n  /**\n   * @returns {void}\n   */\n  const fixer = () => {\n    for (const missingTag of missingTags) {\n      fix(missingTag);\n    }\n  };\n\n  if (missingTags.length && jsdoc.source.length === 1) {\n    utils.makeMultiline();\n  }\n\n  for (const {\n    functionParameterName,\n  } of missingTags) {\n    utils.reportJSDoc(\n      `Missing JSDoc @${preferredTagName} \"${functionParameterName}\" declaration.`,\n      null,\n      enableFixer ? fixer : null,\n    );\n  }\n}, {\n  contextDefaults: true,\n  meta: {\n    docs: {\n      description: 'Requires that all function parameters are documented with a `@param` tag.',\n      url: 'https://github.com/gajus/eslint-plugin-jsdoc/blob/main/docs/rules/require-param.md#repos-sticky-header',\n    },\n    fixable: 'code',\n    schema: [\n      {\n        additionalProperties: false,\n        properties: {\n          autoIncrementBase: {\n            default: 0,\n            description: `Numeric to indicate the number at which to begin auto-incrementing roots.\nDefaults to \\`0\\`.`,\n            type: 'integer',\n          },\n          checkConstructors: {\n            default: true,\n            description: `A value indicating whether \\`constructor\\`s should be checked. Defaults to\n\\`true\\`.`,\n            type: 'boolean',\n          },\n          checkDestructured: {\n            default: true,\n            description: 'Whether to require destructured properties. Defaults to `true`.',\n            type: 'boolean',\n          },\n          checkDestructuredRoots: {\n            default: true,\n            description: `Whether to check the existence of a corresponding \\`@param\\` for root objects\nof destructured properties (e.g., that for \\`function ({a, b}) {}\\`, that there\nis something like \\`@param myRootObj\\` defined that can correspond to\nthe \\`{a, b}\\` object parameter).\n\nIf \\`checkDestructuredRoots\\` is \\`false\\`, \\`checkDestructured\\` will also be\nimplied to be \\`false\\` (i.e., the inside of the roots will not be checked\neither, e.g., it will also not complain if \\`a\\` or \\`b\\` do not have their own\ndocumentation). Defaults to \\`true\\`.`,\n            type: 'boolean',\n          },\n          checkGetters: {\n            default: false,\n            description: 'A value indicating whether getters should be checked. Defaults to `false`.',\n            type: 'boolean',\n          },\n          checkRestProperty: {\n            default: false,\n            description: `If set to \\`true\\`, will report (and add fixer insertions) for missing rest\nproperties. Defaults to \\`false\\`.\n\nIf set to \\`true\\`, note that you can still document the subproperties of the\nrest property using other jsdoc features, e.g., \\`@typedef\\`:\n\n\\`\\`\\`js\n/**\n * @typedef ExtraOptions\n * @property innerProp1\n * @property innerProp2\n */\n\n/**\n * @param cfg\n * @param cfg.num\n * @param {ExtraOptions} extra\n */\nfunction quux ({num, ...extra}) {\n}\n\\`\\`\\`\n\nSetting this option to \\`false\\` (the default) may be useful in cases where\nyou already have separate \\`@param\\` definitions for each of the properties\nwithin the rest property.\n\nFor example, with the option disabled, this will not give an error despite\n\\`extra\\` not having any definition:\n\n\\`\\`\\`js\n/**\n * @param cfg\n * @param cfg.num\n */\nfunction quux ({num, ...extra}) {\n}\n\\`\\`\\`\n\nNor will this:\n\n\\`\\`\\`js\n/**\n * @param cfg\n * @param cfg.num\n * @param cfg.innerProp1\n * @param cfg.innerProp2\n */\nfunction quux ({num, ...extra}) {\n}\n\\`\\`\\``,\n            type: 'boolean',\n          },\n          checkSetters: {\n            default: false,\n            description: 'A value indicating whether setters should be checked. Defaults to `false`.',\n            type: 'boolean',\n          },\n          checkTypesPattern: {\n            description: `When one specifies a type, unless it is of a generic type, like \\`object\\`\nor \\`array\\`, it may be considered unnecessary to have that object's\ndestructured components required, especially where generated docs will\nlink back to the specified type. For example:\n\n\\`\\`\\`js\n/**\n * @param {SVGRect} bbox - a SVGRect\n */\nexport const bboxToObj = function ({x, y, width, height}) {\n  return {x, y, width, height};\n};\n\\`\\`\\`\n\nBy default \\`checkTypesPattern\\` is set to\n\\`/^(?:[oO]bject|[aA]rray|PlainObject|Generic(?:Object|Array))$/v\\`,\nmeaning that destructuring will be required only if the type of the \\`@param\\`\n(the text between curly brackets) is a match for \"Object\" or \"Array\" (with or\nwithout initial caps), \"PlainObject\", or \"GenericObject\", \"GenericArray\" (or\nif no type is present). So in the above example, the lack of a match will\nmean that no complaint will be given about the undocumented destructured\nparameters.\n\nNote that the \\`/\\` delimiters are optional, but necessary to add flags.\n\nDefaults to using (only) the \\`v\\` flag, so to add your own flags, encapsulate\nyour expression as a string, but like a literal, e.g., \\`/^object$/vi\\`.\n\nYou could set this regular expression to a more expansive list, or you\ncould restrict it such that even types matching those strings would not\nneed destructuring.`,\n            type: 'string',\n          },\n          contexts: {\n            description: `Set this to an array of strings representing the AST context (or an object with\noptional \\`context\\` and \\`comment\\` properties) where you wish the rule to be applied.\n\n\\`context\\` defaults to \\`any\\` and \\`comment\\` defaults to no specific comment context.\n\nOverrides the default contexts (\\`ArrowFunctionExpression\\`, \\`FunctionDeclaration\\`,\n\\`FunctionExpression\\`). May be useful for adding such as\n\\`TSMethodSignature\\` in TypeScript or restricting the contexts\nwhich are checked.\n\nSee the [\"AST and Selectors\"](../advanced.md#ast-and-selectors)\nsection of our Advanced docs for more on the expected format.`,\n            items: {\n              anyOf: [\n                {\n                  type: 'string',\n                },\n                {\n                  additionalProperties: false,\n                  properties: {\n                    comment: {\n                      type: 'string',\n                    },\n                    context: {\n                      type: 'string',\n                    },\n                  },\n                  type: 'object',\n                },\n              ],\n            },\n            type: 'array',\n          },\n          enableFixer: {\n            description: 'Whether to enable the fixer. Defaults to `true`.',\n            type: 'boolean',\n          },\n          enableRestElementFixer: {\n            description: `Whether to enable the rest element fixer.\n\nThe fixer will automatically report/insert\n[JSDoc repeatable parameters](https://jsdoc.app/tags-param.html#multiple-types-and-repeatable-parameters)\nif missing.\n\n\\`\\`\\`js\n/**\n  * @param {GenericArray} cfg\n  * @param {number} cfg.\"0\"\n */\nfunction baar ([a, ...extra]) {\n  //\n}\n\\`\\`\\`\n\n...becomes:\n\n\\`\\`\\`js\n/**\n  * @param {GenericArray} cfg\n  * @param {number} cfg.\"0\"\n  * @param {...any} cfg.\"1\"\n */\nfunction baar ([a, ...extra]) {\n  //\n}\n\\`\\`\\`\n\nNote that the type \\`any\\` is included since we don't know of any specific\ntype to use.\n\nDefaults to \\`true\\`.`,\n            type: 'boolean',\n          },\n          enableRootFixer: {\n            description: `Whether to enable the auto-adding of incrementing roots.\n\nThe default behavior of \\`true\\` is for \"root\" to be auto-inserted for missing\nroots, followed by a 0-based auto-incrementing number.\n\nSo for:\n\n\\`\\`\\`js\nfunction quux ({foo}, {bar}, {baz}) {\n}\n\\`\\`\\`\n\n...the default JSDoc that would be added if the fixer is enabled would be:\n\n\\`\\`\\`js\n/**\n* @param root0\n* @param root0.foo\n* @param root1\n* @param root1.bar\n* @param root2\n* @param root2.baz\n*/\n\\`\\`\\`\n\nHas no effect if \\`enableFixer\\` is set to \\`false\\`.`,\n            type: 'boolean',\n          },\n          exemptedBy: {\n            description: `Array of tags (e.g., \\`['type']\\`) whose presence on the document block\navoids the need for a \\`@param\\`. Defaults to an array with\n\\`inheritdoc\\`. If you set this array, it will overwrite the default,\nso be sure to add back \\`inheritdoc\\` if you wish its presence to cause\nexemption of the rule.`,\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          ignoreWhenAllParamsMissing: {\n            description: `Set to \\`true\\` to ignore reporting when all params are missing. Defaults to\n\\`false\\`.`,\n            type: 'boolean',\n          },\n          interfaceExemptsParamsCheck: {\n            description: `Set if you wish TypeScript interfaces to exempt checks for the existence of\n\\`@param\\`'s.\n\nWill check for a type defining the function itself (on a variable\ndeclaration) or if there is a single destructured object with a type.\nDefaults to \\`false\\`.`,\n            type: 'boolean',\n          },\n          unnamedRootBase: {\n            description: `An array of root names to use in the fixer when roots are missing. Defaults\nto \\`['root']\\`. Note that only when all items in the array besides the last\nare exhausted will auto-incrementing occur. So, with\n\\`unnamedRootBase: ['arg', 'config']\\`, the following:\n\n\\`\\`\\`js\nfunction quux ({foo}, [bar], {baz}) {\n}\n\\`\\`\\`\n\n...will get the following JSDoc block added:\n\n\\`\\`\\`js\n/**\n* @param arg\n* @param arg.foo\n* @param config0\n* @param config0.\"0\" (\\`bar\\`)\n* @param config1\n* @param config1.baz\n*/\n\\`\\`\\``,\n            items: {\n              type: 'string',\n            },\n            type: 'array',\n          },\n          useDefaultObjectProperties: {\n            description: `Set to \\`true\\` if you wish to expect documentation of properties on objects\nsupplied as default values. Defaults to \\`false\\`.`,\n            type: 'boolean',\n          },\n        },\n        type: 'object',\n      },\n    ],\n    type: 'suggestion',\n  },\n\n  // We cannot cache comment nodes as the contexts may recur with the\n  //  same comment node but a different JS node, and we may need the different\n  //  JS node to ensure we iterate its context\n  noTracking: true,\n});\n"],"mappings":"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iEAAiE;UAC9E,IAAI,EAAE;QACR,CAAC;QACD,sBAAsB,EAAE;UACtB,OAAO,EAAE,IAAI;UACb,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sCAAsC;UAC1B,IAAI,EAAE;QACR,CAAC;QACD,YAAY,EAAE;UACZ,OAAO,EAAE,KAAK;UACd,WAAW,EAAE,4EAA4E;UACzF,IAAI,EAAE;QACR,CAAC;QACD,iBAAiB,EAAE;UACjB,OAAO,EAAE,KAAK;UACd,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,IAAI,EAAE;QACR,CAAC;QACD,YAAY,EAAE;UACZ,OAAO,EAAE,KAAK;UACd,WAAW,EAAE,4EAA4E;UACzF,IAAI,EAAE;QACR,CAAC;QACD,iBAAiB,EAAE;UACjB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oBAAoB;UACR,IAAI,EAAE;QACR,CAAC;QACD,QAAQ,EAAE;UACR,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,8DAA8D;UAClD,KAAK,EAAE;YACL,KAAK,EAAE,CACL;cACE,IAAI,EAAE;YACR,CAAC,EACD;cACE,oBAAoB,EAAE,KAAK;cAC3B,UAAU,EAAE;gBACV,OAAO,EAAE;kBACP,IAAI,EAAE;gBACR,CAAC;gBACD,OAAO,EAAE;kBACP,IAAI,EAAE;gBACR;cACF,CAAC;cACD,IAAI,EAAE;YACR,CAAC;UAEL,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,WAAW,EAAE;UACX,WAAW,EAAE,kDAAkD;UAC/D,IAAI,EAAE;QACR,CAAC;QACD,sBAAsB,EAAE;UACtB,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sBAAsB;UACV,IAAI,EAAE;QACR,CAAC;QACD,eAAe,EAAE;UACf,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,sDAAsD;UAC1C,IAAI,EAAE;QACR,CAAC;QACD,UAAU,EAAE;UACV,WAAW,EAAE;AACzB;AACA;AACA;AACA,uBAAuB;UACX,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,0BAA0B,EAAE;UAC1B,WAAW,EAAE;AACzB,WAAW;UACC,IAAI,EAAE;QACR,CAAC;QACD,2BAA2B,EAAE;UAC3B,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA,uBAAuB;UACX,IAAI,EAAE;QACR,CAAC;QACD,eAAe,EAAE;UACf,WAAW,EAAE;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO;UACK,KAAK,EAAE;YACL,IAAI,EAAE;UACR,CAAC;UACD,IAAI,EAAE;QACR,CAAC;QACD,0BAA0B,EAAE;UAC1B,WAAW,EAAE;AACzB,mDAAmD;UACvC,IAAI,EAAE;QACR;MACF,CAAC;MACD,IAAI,EAAE;IACR,CAAC,CACF;IACD,IAAI,EAAE;EACR,CAAC;EAED;EACA;EACA;EACA,UAAU,EAAE;AACd,CAAC,CAAC;AAAA","ignoreList":[]}