diff --git a/.azure-pipelines/ci.yml b/.azure-pipelines/ci.yml new file mode 100644 index 00000000..7602a73e --- /dev/null +++ b/.azure-pipelines/ci.yml @@ -0,0 +1,70 @@ +name: $(Date:yyyyMMdd).$(Rev:r) +variables: + - name: Codeql.Enabled + value: true +resources: + repositories: + - repository: self + type: git + ref: refs/heads/main + - repository: 1esPipelines + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release +trigger: + branches: + include: + - main +extends: + template: v1/1ES.Unofficial.PipelineTemplate.yml@1esPipelines + parameters: + pool: + os: linux + name: 1ES_JavaTooling_Pool + image: 1ES_JavaTooling_Ubuntu-2004 + sdl: + sourceAnalysisPool: + name: 1ES_JavaTooling_Pool + image: 1ES_JavaTooling_Windows_2022 + os: windows + customBuildTags: + - MigrationTooling-mseng-VSJava-9181-Tool + stages: + - stage: Build + jobs: + - job: Job_1 + displayName: VSCode-Java-Debug-CI + templateContext: + outputs: + - output: pipelineArtifact + artifactName: vsix + targetPath: $(Build.ArtifactStagingDirectory)/vsix + displayName: "Publish Artifact: vsix" + steps: + - checkout: self + fetchTags: true + - task: JavaToolInstaller@0 + displayName: Use Java 17 + inputs: + versionSpec: "17" + jdkArchitectureOption: x64 + jdkSourceOption: PreInstalled + - task: Npm@1 + displayName: npm install + inputs: + verbose: false + - task: CmdLine@2 + displayName: build server + inputs: + script: |- + git clone https://github.com/microsoft/java-debug ../java-debug + npm run build-server + - task: CmdLine@2 + displayName: vsce package + inputs: + script: npx @vscode/vsce@latest package + - task: CopyFiles@2 + displayName: "Copy Files to: $(Build.ArtifactStagingDirectory)/vsix" + inputs: + Contents: "*.vsix" + TargetFolder: $(Build.ArtifactStagingDirectory)/vsix diff --git a/.azure-pipelines/nightly.yml b/.azure-pipelines/nightly.yml new file mode 100644 index 00000000..4329eb7a --- /dev/null +++ b/.azure-pipelines/nightly.yml @@ -0,0 +1,125 @@ +name: $(Date:yyyyMMdd).$(Rev:r) +variables: + - name: Codeql.Enabled + value: true +schedules: + - cron: 0 7 * * 1,2,3,4,5 + branches: + include: + - refs/heads/main +resources: + pipelines: + - pipeline: microsoft.java-debug.signjars.nightly + source: microsoft.java-debug.signjars.nightly + trigger: + branches: + include: + - refs/heads/main + repositories: + - repository: self + type: git + ref: refs/heads/main + - repository: CustomPipelineTemplates + type: git + name: 1ESPipelineTemplates/MicroBuildTemplate + ref: refs/tags/release +trigger: none +extends: + template: azure-pipelines/MicroBuild.1ES.Official.yml@CustomPipelineTemplates + parameters: + pool: + name: MSEngSS-MicroBuild2022-1ES + stages: + - stage: Build + jobs: + - job: Job_1 + displayName: VSCode-Java-Debug-Nightly + templateContext: + mb: + signing: + enabled: true + signType: real + signWithProd: true + zipSources: false + feedSource: 'https://mseng.pkgs.visualstudio.com/DefaultCollection/_packaging/MicroBuildToolset/nuget/v3/index.json' + outputs: + - output: pipelineArtifact + artifactName: vsix + targetPath: $(Build.ArtifactStagingDirectory)/vsix + displayName: "Publish Artifact: vsix" + steps: + - checkout: self + fetchTags: false + - task: NodeTool@0 + displayName: Use Node 20.x + inputs: + versionSpec: 20.x + - task: DownloadBuildArtifacts@1 + displayName: Download Build Artifacts + inputs: + buildType: specific + project: a4d27ce2-a42d-4b71-8eef-78cee9a9728e + definition: "16485" + specificBuildWithTriggering: true + downloadType: specific + itemPattern: plugin/jars/com.microsoft.java.debug.plugin-*.jar + extractTars: false + - task: CopyFiles@2 + displayName: 'cp plugin.jar to server' + inputs: + SourceFolder: '$(System.ArtifactsDirectory)/plugin/jars' + Contents: 'com.microsoft.java.debug.plugin-*.jar' + TargetFolder: $(Build.SourcesDirectory)/server + - task: Npm@1 + displayName: npm install + inputs: + verbose: false + - task: CmdLine@2 + displayName: Update nightly vsix version + inputs: + script: node scripts/build/prepare-nightly-build.js + - task: CmdLine@2 + displayName: Replace AI key + inputs: + script: npx json@9.0.6 -I -f package.json -e "this.aiKey=\"%AI_KEY%\"" + - task: CmdLine@2 + displayName: vsce package --pre-release -o extension.vsix + inputs: + script: npx @vscode/vsce@latest package --pre-release -o extension.vsix + ### Copy files for APIScan + - task: CopyFiles@2 + displayName: "Copy Files for APIScan" + inputs: + Contents: "*.vsix" + TargetFolder: $(Agent.TempDirectory)/APIScanFiles + condition: and(succeeded(), ne(variables['DisableAPIScan'], 'true')) + ### Run latest version of APIScan listed at https://www.1eswiki.com/wiki/APIScan_Build_Task + - task: APIScan@2 + displayName: Run APIScan + inputs: + softwareFolder: $(Agent.TempDirectory)/APIScanFiles + softwareName: "vscode-java-debug" + softwareVersionNum: "$(Build.BuildId)" + isLargeApp: false + toolVersion: "Latest" + condition: and(succeeded(), ne(variables['DisableAPIScan'], 'true')) + env: + AzureServicesAuthConnectionString: runAs=App;AppId=$(ApiScanClientId);TenantId=$(ApiScanTenant);AppKey=$(ApiScanSecret) + - script: npx @vscode/vsce@latest generate-manifest -i extension.vsix -o extension.manifest + displayName: 'Generate extension manifest' + - script: copy extension.manifest extension.signature.p7s + displayName: 'Prepare manifest for signing' + - task: CmdLine@2 + displayName: Sign extension + inputs: + script: dotnet %MBSIGN_APPFOLDER%/ddsignfiles.dll /file:extension.signature.p7s /certs:4014052 + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + - task: CopyFiles@2 + displayName: "Copy Files to: $(Build.ArtifactStagingDirectory)/vsix" + inputs: + Contents: | + extension.vsix + extension.manifest + extension.signature.p7s + TargetFolder: $(Build.ArtifactStagingDirectory)/vsix \ No newline at end of file diff --git a/.azure-pipelines/rc.yml b/.azure-pipelines/rc.yml new file mode 100644 index 00000000..c17dd6b7 --- /dev/null +++ b/.azure-pipelines/rc.yml @@ -0,0 +1,123 @@ +name: $(Date:yyyyMMdd).$(Rev:r) +variables: + - name: Codeql.Enabled + value: true +resources: + pipelines: + - pipeline: microsoft.java-debug.signjars.rc + source: microsoft.java-debug.signjars.rc + trigger: + branches: + include: + - main + repositories: + - repository: self + type: git + ref: refs/heads/main + - repository: CustomPipelineTemplates + type: git + name: 1ESPipelineTemplates/MicroBuildTemplate + ref: refs/tags/release +trigger: none +extends: + template: azure-pipelines/MicroBuild.1ES.Official.yml@CustomPipelineTemplates + parameters: + pool: + name: MSEngSS-MicroBuild2022-1ES + stages: + - stage: Build + jobs: + - job: Job_1 + displayName: VSCode-Java-Debug-RC + templateContext: + mb: + signing: + enabled: true + signType: real + signWithProd: true + zipSources: false + feedSource: 'https://mseng.pkgs.visualstudio.com/DefaultCollection/_packaging/MicroBuildToolset/nuget/v3/index.json' + outputs: + - output: pipelineArtifact + artifactName: vsix + targetPath: $(Build.ArtifactStagingDirectory)/vsix + displayName: "Publish Artifact: vsix" + steps: + - checkout: self + fetchTags: true + - task: NodeTool@0 + displayName: Use Node 20.x + inputs: + versionSpec: 20.x + - task: DownloadBuildArtifacts@1 + displayName: Download Build Artifacts + inputs: + buildType: specific + project: a4d27ce2-a42d-4b71-8eef-78cee9a9728e + definition: "16486" + specificBuildWithTriggering: true + downloadType: specific + itemPattern: m2/com.microsoft.java.debug.plugin/com.microsoft.java.debug.plugin-*.jar + extractTars: false + - task: CopyFiles@2 + displayName: 'cp plugin.jar to server' + inputs: + SourceFolder: '$(System.ArtifactsDirectory)/m2/com.microsoft.java.debug.plugin' + Contents: | + com.microsoft.java.debug.plugin-*.jar + TargetFolder: $(Build.SourcesDirectory)/server + - task: CmdLine@2 + displayName: Delete sources.jar and javadoc.jar from server + inputs: + script: | + del server\com.microsoft.java.debug.plugin-*-sources.jar + del server\com.microsoft.java.debug.plugin-*-javadoc.jar + - task: Npm@1 + displayName: npm install + inputs: + verbose: false + - task: CmdLine@2 + displayName: Replace AI key + inputs: + script: npx json@9.0.6 -I -f package.json -e "this.aiKey=\"%AI_KEY%\"" + - task: CmdLine@2 + displayName: vsce package + inputs: + script: npx @vscode/vsce@latest package -o extension.vsix + ### Copy files for APIScan + - task: CopyFiles@2 + displayName: "Copy Files for APIScan" + inputs: + Contents: "*.vsix" + TargetFolder: $(Agent.TempDirectory)/APIScanFiles + condition: and(succeeded(), ne(variables['DisableAPIScan'], 'true')) + ### Run latest version of APIScan listed at https://www.1eswiki.com/wiki/APIScan_Build_Task + - task: APIScan@2 + displayName: Run APIScan + inputs: + softwareFolder: $(Agent.TempDirectory)/APIScanFiles + softwareName: "vscode-java-debug" + softwareVersionNum: "$(Build.BuildId)" + isLargeApp: false + toolVersion: "Latest" + condition: and(succeeded(), ne(variables['DisableAPIScan'], 'true')) + env: + AzureServicesAuthConnectionString: runAs=App;AppId=$(ApiScanClientId);TenantId=$(ApiScanTenant);AppKey=$(ApiScanSecret) + - script: npx @vscode/vsce@latest generate-manifest -i extension.vsix -o extension.manifest + displayName: 'Generate extension manifest' + - script: copy extension.manifest extension.signature.p7s + displayName: 'Prepare manifest for signing' + - task: CmdLine@2 + displayName: Sign extension + inputs: + script: dotnet %MBSIGN_APPFOLDER%/ddsignfiles.dll /file:extension.signature.p7s /certs:4014052 + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + - task: CopyFiles@2 + displayName: "Copy Files to: $(Build.ArtifactStagingDirectory)/vsix" + inputs: + Contents: | + extension.vsix + extension.manifest + extension.signature.p7s + TargetFolder: $(Build.ArtifactStagingDirectory)/vsix diff --git a/.azure-pipelines/release-nightly.yml b/.azure-pipelines/release-nightly.yml new file mode 100644 index 00000000..119d9e1f --- /dev/null +++ b/.azure-pipelines/release-nightly.yml @@ -0,0 +1,55 @@ +# This pipeline is used to release the VS Code Java Debug extension from the nightly/stable build. +# It contains following steps: +# 1. Download the plugin artifact from the nightly/stable build pipeline. +# 2. Publish the plugin to the marketplace. + +name: $(Date:yyyyMMdd).$(Rev:r) # Use the current date and a revision number for the build name. + +variables: + - name: Codeql.Enabled + value: true +resources: + repositories: + - repository: self + type: git + ref: refs/heads/main + - repository: 1esPipelines + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release +trigger: none +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines + parameters: + pool: + os: linux + name: 1ES_JavaTooling_Pool + image: 1ES_JavaTooling_Ubuntu-2004 + stages: + - stage: Release + jobs: + - job: Job + displayName: Release VS Code Java Debug Extension + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + buildType: specific + project: $(AzDo.ProjectId) # Azure DevOps project ID + definition: $(AzDo.BuildPipelineId) # artifact build pipeline ID + artifactName: vsix + downloadType: specific + targetPath: '$(Build.SourcesDirectory)' + steps: + - task: UseNode@1 + displayName: 'Use Node.js 20.x' + inputs: + version: '20.x' + - task: AzureCLI@2 + displayName: 'Publish Extension' + inputs: + azureSubscription: 'VSCode-Ext-Publishing' + scriptType: pscore + scriptLocation: inlineScript + inlineScript: 'npx @vscode/vsce@latest publish -i ''$(Build.SourcesDirectory)/extension.vsix'' --manifestPath ''$(Build.SourcesDirectory)/extension.manifest'' --signaturePath ''$(Build.SourcesDirectory)/extension.signature.p7s'' --azure-credential' \ No newline at end of file diff --git a/.azure-pipelines/release.yml b/.azure-pipelines/release.yml new file mode 100644 index 00000000..119d9e1f --- /dev/null +++ b/.azure-pipelines/release.yml @@ -0,0 +1,55 @@ +# This pipeline is used to release the VS Code Java Debug extension from the nightly/stable build. +# It contains following steps: +# 1. Download the plugin artifact from the nightly/stable build pipeline. +# 2. Publish the plugin to the marketplace. + +name: $(Date:yyyyMMdd).$(Rev:r) # Use the current date and a revision number for the build name. + +variables: + - name: Codeql.Enabled + value: true +resources: + repositories: + - repository: self + type: git + ref: refs/heads/main + - repository: 1esPipelines + type: git + name: 1ESPipelineTemplates/1ESPipelineTemplates + ref: refs/tags/release +trigger: none +extends: + template: v1/1ES.Official.PipelineTemplate.yml@1esPipelines + parameters: + pool: + os: linux + name: 1ES_JavaTooling_Pool + image: 1ES_JavaTooling_Ubuntu-2004 + stages: + - stage: Release + jobs: + - job: Job + displayName: Release VS Code Java Debug Extension + templateContext: + type: releaseJob + isProduction: true + inputs: + - input: pipelineArtifact + buildType: specific + project: $(AzDo.ProjectId) # Azure DevOps project ID + definition: $(AzDo.BuildPipelineId) # artifact build pipeline ID + artifactName: vsix + downloadType: specific + targetPath: '$(Build.SourcesDirectory)' + steps: + - task: UseNode@1 + displayName: 'Use Node.js 20.x' + inputs: + version: '20.x' + - task: AzureCLI@2 + displayName: 'Publish Extension' + inputs: + azureSubscription: 'VSCode-Ext-Publishing' + scriptType: pscore + scriptLocation: inlineScript + inlineScript: 'npx @vscode/vsce@latest publish -i ''$(Build.SourcesDirectory)/extension.vsix'' --manifestPath ''$(Build.SourcesDirectory)/extension.manifest'' --signaturePath ''$(Build.SourcesDirectory)/extension.signature.p7s'' --azure-credential' \ No newline at end of file diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 00000000..0fffee03 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @testforstephen @jdneo @wenytang-ms @chagong \ No newline at end of file diff --git a/.github/llms.md b/.github/llms.md new file mode 100644 index 00000000..f0c0521e --- /dev/null +++ b/.github/llms.md @@ -0,0 +1,43 @@ +# Extension Pack for Java + +Extension Pack for Java is a collection of popular extensions that can help write, test and debug Java applications in Visual Studio Code. By installing Extension Pack for Java, the following extensions are installed: + +- [📦 Language Support for Java™ by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java) + - Code Navigation + - Auto Completion + - Refactoring + - Code Snippets +- [📦 Debugger for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug) + - Debugging +- [📦 Test Runner for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-test) + - Run & Debug JUnit/TestNG Test Cases +- [📦 Maven for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-maven) + - Project Scaffolding + - Custom Goals +- [📦 Gradle for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-gradle) + - View Gradle tasks and project dependencies + - Gradle file authoring + - Import Gradle projects via [Gradle Build Server](https://github.com/microsoft/build-server-for-gradle) +- [📦 Project Manager for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-dependency) + - Manage Java projects, referenced libraries, resource files, packages, classes, and class members +- [📦 Visual Studio IntelliCode](https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode) + - AI-assisted development + - Completion list ranked by AI + +## Label + +When labeling an issue, follow the rules below per label category: + +### General Rules + +- Analyze if the issue is related with the scope of using extensions for Java development. If not, STOP labelling IMMEDIATELY. +- Assign label per category. +- If a category is not applicable or you're unsure, you may skip it. +- Do not assign multiple labels within the same category, unless explicitly allowed as an exception. + +### Issue Type Labels + +- [bug]: Primary label for real bug issues +- [enhancement]: Primary label for enhancement issues +- [documentation]: Primary label for documentation issues +- [question]: Primary label for question issues diff --git a/.github/no-response.yml b/.github/no-response.yml deleted file mode 100644 index d34a2c5e..00000000 --- a/.github/no-response.yml +++ /dev/null @@ -1,4 +0,0 @@ -daysUntilClose: 14 -responseRequiredLabel: needs more info -closeComment: > - This issue has been closed automatically because it needs more information and has not had recent activity. Please reach out if you have or find the answers we need so that we can investigate further. \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 3c5f39c1..e5747134 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,7 +12,7 @@ jobs: runs-on: ubuntu-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - name: Setup Build Environment run: | @@ -21,24 +21,25 @@ jobs: sudo /usr/bin/Xvfb :99 -screen 0 1024x768x24 > /dev/null 2>&1 & sleep 3 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: - java-version: '11' + java-version: '21' + distribution: 'temurin' - name: Setup Node.js environment - uses: actions/setup-node@v2 + uses: actions/setup-node@v5 with: - node-version: 12 + node-version: 20 - name: Install Node.js modules run: npm install - name: Install build tools - run: npm install -g vsce gulp typescript + run: npm install -g @vscode/vsce typescript - name: Lint - run: gulp tslint + run: npm run tslint - name: Package run: vsce package @@ -55,26 +56,27 @@ jobs: runs-on: windows-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: - java-version: '11' + java-version: '21' + distribution: 'temurin' - name: Setup Node.js environment - uses: actions/setup-node@v2 + uses: actions/setup-node@v5 with: - node-version: 12 + node-version: 20 - name: Install Node.js modules run: npm install - name: Install build tools - run: npm install -g vsce gulp typescript --force + run: npm install -g @vscode/vsce typescript --force - name: Lint - run: gulp tslint + run: npm run tslint - name: Package run: vsce package @@ -91,26 +93,27 @@ jobs: runs-on: macos-latest timeout-minutes: 30 steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v5 - - name: Set up JDK 11 - uses: actions/setup-java@v1 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: - java-version: '11' + java-version: '21' + distribution: 'temurin' - name: Setup Node.js environment - uses: actions/setup-node@v2 + uses: actions/setup-node@v5 with: - node-version: 12 + node-version: 20 - name: Install Node.js modules run: npm install - name: Install build tools - run: npm install -g vsce gulp typescript + run: npm install -g @vscode/vsce typescript - name: Lint - run: gulp tslint + run: npm run tslint - name: Package run: vsce package diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml new file mode 100644 index 00000000..4cc4c9fc --- /dev/null +++ b/.github/workflows/no-response.yml @@ -0,0 +1,26 @@ +name: No Response + +# **What it does**: Closes issues where the original author doesn't respond to a request for information. +# **Why we have it**: To remove the need for maintainers to remember to check back on issues periodically to see if contributors have responded. +# **Who does it impact**: Everyone that works on docs or docs-internal. + +on: + issue_comment: + types: [created] + schedule: + # every morning at 00:00 am + - cron: '0 0 * * *' + +jobs: + noResponse: + runs-on: ubuntu-latest + permissions: + issues: write + steps: + - uses: lee-dohm/no-response@9bb0a4b5e6a45046f00353d5de7d90fb8bd773bb #v0.5.0 + with: + token: ${{ github.token }} + daysUntilClose: 14 # Number of days of inactivity before an Issue is closed for lack of response + responseRequiredLabel: "needs more info" # Label indicating that a response from the original author is required + closeComment: > + This issue has been closed automatically because it needs more information and has not had recent activity. Please reach out if you have or find the answers we need so that we can investigate further. diff --git a/.github/workflows/triage-agent.yml b/.github/workflows/triage-agent.yml new file mode 100644 index 00000000..0e0cb45e --- /dev/null +++ b/.github/workflows/triage-agent.yml @@ -0,0 +1,126 @@ +name: AI Triage + +on: + issues: + types: [opened] + workflow_dispatch: + inputs: + issue_number: + description: 'Issue number to triage (manual run). e.g. 123' + required: true + +run-name: >- + AI Triage for Issue #${{ github.event.issue.number || github.event.inputs.issue_number }} + +permissions: + issues: write + contents: read + +jobs: + label_and_comment: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Get issue data + id: get_issue + uses: actions/github-script@v6 + with: + script: | + const eventName = context.eventName; + let issue; + if (eventName === 'workflow_dispatch') { + const inputs = context.payload.inputs || {}; + const issueNumber = inputs.issue_number || inputs.issueNumber; + if (!issueNumber) core.setFailed('Input issue_number is required for manual run.'); + const { data } = await github.rest.issues.get({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: parseInt(issueNumber, 10), + }); + issue = data; + } else if (context.payload.issue) { + issue = context.payload.issue; + } else { + core.setFailed('No issue information found in the event payload.'); + } + core.setOutput('id', String(issue.number)); + core.setOutput('user', String((issue.user && issue.user.login) || '')); + core.setOutput('title', String(issue.title || '')); + core.setOutput('body', String(issue.body || '')); + const labelNames = (issue.labels || []).map(label => label.name); + core.setOutput('labels', JSON.stringify(labelNames)); + + - name: Call Azure Function + id: call_azure_function + env: + PAYLOAD: >- + { + "authToken": "${{ secrets.GITHUB_TOKEN }}", + "repoId": "microsoft/vscode-java-debug", + "issueData": { + "id": ${{ steps.get_issue.outputs.id }}, + "user": ${{ toJson(steps.get_issue.outputs.user) }}, + "title": ${{ toJson(steps.get_issue.outputs.title) }}, + "body": ${{ toJson(steps.get_issue.outputs.body) }}, + "labels": ${{ steps.get_issue.outputs.labels }} + }, + "mode": "DirectUpdate" + } + + run: | + # Make the HTTP request with improved error handling and timeouts + echo "Making request to triage agent..." + + # Add timeout handling and better error detection + set +e # Don't exit on curl failure + response=$(timeout ${{ vars.TRIAGE_AGENT_TIMEOUT }} curl \ + --max-time 0 \ + --connect-timeout 30 \ + --fail-with-body \ + --silent \ + --show-error \ + --write-out "HTTPSTATUS:%{http_code}" \ + --header "Content-Type: application/json" \ + --request POST \ + --data "$PAYLOAD" \ + ${{ secrets.TRIAGE_FUNCTION_LINK }} 2>&1) + + curl_exit_code=$? + set -e # Re-enable exit on error + + echo "Curl exit code: $curl_exit_code" + + # Check if curl command timed out or failed + if [ $curl_exit_code -eq 124 ]; then + echo "❌ Request timed out after 650 seconds" + exit 1 + elif [ $curl_exit_code -ne 0 ]; then + echo "❌ Curl command failed with exit code: $curl_exit_code" + echo "Response: $response" + exit 1 + fi + + # Extract HTTP status code and response body + http_code=$(echo "$response" | grep -o "HTTPSTATUS:[0-9]*" | cut -d: -f2) + response_body=$(echo "$response" | sed 's/HTTPSTATUS:[0-9]*$//') + + echo "HTTP Status Code: $http_code" + + # Validate HTTP status code + if [ -z "$http_code" ]; then + echo "❌ Failed to extract HTTP status code from response" + echo "Raw response: $response" + exit 1 + fi + + # Check if the request was successful + if [ "$http_code" -ge 200 ] && [ "$http_code" -lt 300 ]; then + echo "✅ Azure Function call succeeded" + else + echo "❌ Azure Function call failed with status code: $http_code" + echo "Response: $response_body" + exit 1 + fi diff --git a/.github/workflows/triage-all-open-issues.yml b/.github/workflows/triage-all-open-issues.yml new file mode 100644 index 00000000..f2600deb --- /dev/null +++ b/.github/workflows/triage-all-open-issues.yml @@ -0,0 +1,145 @@ +name: AI Triage - Process All Open Issues +on: + workflow_dispatch: + inputs: + dry_run: + description: 'Dry run mode - only list issues without processing' + required: false + default: false + type: boolean + max_issues: + description: 'Maximum number of issues to process (0 = all)' + required: false + default: '0' + type: string + +permissions: + issues: write + contents: read + actions: write + +jobs: + get_open_issues: + runs-on: ubuntu-latest + outputs: + issue_numbers: ${{ steps.get_issues.outputs.issue_numbers }} + total_count: ${{ steps.get_issues.outputs.total_count }} + + steps: + - name: Get all open issues + id: get_issues + uses: actions/github-script@v6 + with: + script: | + // Use Search API to filter issues at API level + const { data } = await github.rest.search.issuesAndPullRequests({ + q: `repo:${context.repo.owner}/${context.repo.repo} is:issue is:open -label:ai-triaged -label:invalid`, + sort: 'created', + order: 'desc', + per_page: 100 + }); + + const actualIssues = data.items; + + let issuesToProcess = actualIssues; + const maxIssues = parseInt('${{ inputs.max_issues }}' || '0'); + + if (maxIssues > 0 && actualIssues.length > maxIssues) { + issuesToProcess = actualIssues.slice(0, maxIssues); + console.log(`Limiting to first ${maxIssues} issues out of ${actualIssues.length} total`); + } + + const issueNumbers = issuesToProcess.map(issue => issue.number); + const totalCount = issuesToProcess.length; + + console.log(`Found ${actualIssues.length} open issues, processing ${totalCount}:`); + issuesToProcess.forEach(issue => { + console.log(` #${issue.number}: ${issue.title}`); + }); + + core.setOutput('issue_numbers', JSON.stringify(issueNumbers)); + core.setOutput('total_count', totalCount); + + process_issues: + runs-on: ubuntu-latest + needs: get_open_issues + if: needs.get_open_issues.outputs.total_count > 0 + + strategy: + # Process issues one by one (max-parallel: 1) + max-parallel: 1 + matrix: + issue_number: ${{ fromJSON(needs.get_open_issues.outputs.issue_numbers) }} + + steps: + - name: Log current issue being processed + run: | + echo "🔄 Processing issue #${{ matrix.issue_number }}" + echo "Total issues to process: ${{ needs.get_open_issues.outputs.total_count }}" + + - name: Check if dry run mode + if: inputs.dry_run == true + run: | + echo "🔍 DRY RUN MODE: Would process issue #${{ matrix.issue_number }}" + echo "Skipping actual triage processing" + + - name: Trigger triage workflow for issue + if: inputs.dry_run != true + uses: actions/github-script@v6 + with: + script: | + const issueNumber = '${{ matrix.issue_number }}'; + + try { + console.log(`Triggering triage workflow for issue #${issueNumber}`); + + const response = await github.rest.actions.createWorkflowDispatch({ + owner: context.repo.owner, + repo: context.repo.repo, + workflow_id: 'triage-agent.yml', + ref: 'main', + inputs: { + issue_number: issueNumber + } + }); + + console.log(`✅ Successfully triggered triage workflow for issue #${issueNumber}`); + + } catch (error) { + console.error(`❌ Failed to trigger triage workflow for issue #${issueNumber}:`, error); + core.setFailed(`Failed to process issue #${issueNumber}: ${error.message}`); + } + + - name: Wait for workflow completion + if: inputs.dry_run != true + run: | + echo "⏳ Waiting for triage workflow to complete for issue #${{ matrix.issue_number }}..." + echo "Timeout: ${{ vars.TRIAGE_AGENT_TIMEOUT }} seconds" + sleep ${{ vars.TRIAGE_AGENT_TIMEOUT }} # Wait for triage workflow completion + + summary: + runs-on: ubuntu-latest + needs: [get_open_issues, process_issues] + if: always() + + steps: + - name: Print summary + run: | + echo "## Triage Processing Summary" + echo "Total open issues found: ${{ needs.get_open_issues.outputs.total_count }}" + + if [ "${{ inputs.dry_run }}" == "true" ]; then + echo "Mode: DRY RUN (no actual processing performed)" + else + echo "Mode: FULL PROCESSING" + fi + + if [ "${{ needs.process_issues.result }}" == "success" ]; then + echo "✅ All issues processed successfully" + elif [ "${{ needs.process_issues.result }}" == "failure" ]; then + echo "❌ Some issues failed to process" + elif [ "${{ needs.process_issues.result }}" == "skipped" ]; then + echo "⏭️ Processing was skipped (no open issues found)" + else + echo "⚠️ Processing completed with status: ${{ needs.process_issues.result }}" + fi diff --git a/.vscode/launch.json b/.vscode/launch.json index 92250879..0ac35d26 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -10,7 +10,7 @@ "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], "stopOnEntry": false, "sourceMaps": true, - "outFiles": [ "${workspaceRoot}/out/src/**/*.js" ], + "outFiles": [ "${workspaceRoot}/dist/**/*.js" ], "preLaunchTask": "npm: watch", "env": { "DEBUG_VSCODE_JAVA":"true" diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 279d3ceb..114cae50 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -25,8 +25,8 @@ ], "background": { "activeOnStart": true, - "beginsPattern": "Compilation \\w+ starting…", - "endsPattern": "Compilation\\s+finished" + "beginsPattern": "Compiler '[^']+' starting", + "endsPattern": "Compiler '[^']+' finished" } }, "isBackground": true, diff --git a/.vscodeignore b/.vscodeignore index 4b313096..9c5a198b 100644 --- a/.vscodeignore +++ b/.vscodeignore @@ -5,7 +5,7 @@ test/** src/** **/*.map tsconfig.json -gulpfile.js +scripts/build/** .gitignore images/docs/** testprojects/** @@ -17,4 +17,5 @@ packages package-lock.json node_modules webpack.config.js -.DS_Store \ No newline at end of file +.DS_Store +.azure-pipelines/** \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index c8c6cc12..c2638cc9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,242 @@ All notable changes to the "vscode-java-debugger" extension will be documented i The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## 0.58.5 - 2026-01-06 +### Fixed +- Fix `lspFrame.source.path` is null. [java-debug#618](https://github.com/microsoft/java-debug/pull/618). + +## 0.58.4 - 2025-12-09 +### Added +- Add command to manage breakpoint exception types in command palette. [#1566](https://github.com/microsoft/vscode-java-debug/pull/1566). Thanks to [Roland Schaer](https://github.com/roele) for contribution. + +### Fixed +- Fix `lspFrame.source` NPE on stackTrace request. [java-debug#616](https://github.com/microsoft/java-debug/pull/616). Thanks to [Mathias Fußenegger](https://github.com/mfussenegger) for contribution. +- Handle unavailable sources in compliance with DAP spec. [java-debug#609](https://github.com/microsoft/java-debug/pull/609), [java-debug#614](https://github.com/microsoft/java-debug/pull/614). Thanks to [Karl-Erik Enkelmann](https://github.com/playdohface) for contribution. + + +## 0.58.3 - 2025-11-03 +### Added +- No config debug [[#1530](https://github.com/microsoft/vscode-java-debug/issues/1530)] + +## 0.58.2 - 2025-04-28 +### Fixed +- Provide graceful shutdown on debug stop action. [#1274](https://github.com/microsoft/vscode-java-debug/issues/1274). Thanks to [Dave Syer](https://github.com/dsyer) for contribution. + +### Changed +- Update Apache Commons IO from 2.11.0 to 2.19.0. [java-debug#585](https://github.com/microsoft/java-debug/pull/585). Thanks to [Roland Grunberg](https://github.com/rgrunber) for contribution. + +## 0.58.1 - 2024-10-31 +### Added +- The launch config `envFile` now supports an array of env files. [#1505](https://github.com/microsoft/vscode-java-debug/issues/1505). Thanks to [Ed Hillmann](https://github.com/hildo) for contribution. + +### Fixed +- Fail to debug with java 23 - Unrecognized option: -Xnoagent. [java-debug#561](https://github.com/microsoft/java-debug/issues/561). + +## 0.58.0 - 2024-06-27 +### Fixed +- Latest Gradle Language Support extension cause hot code replace to fail. [#1402](https://github.com/microsoft/vscode-java-debug/issues/1402). +- Hot Code Replace returns "Cannot find any changed classes for hot replace!" message. [#1481](https://github.com/microsoft/vscode-java-debug/issues/1481). + +## 0.57.0 - 2024-03-26 +### Added +- Add support for running Java 21 "Unnamed classes and Instance main method". [#1444](https://github.com/microsoft/vscode-java-debug/issues/1444). + +## 0.56.2 - 2024-02-28 +### Changed +- Move 'Run/Debug Java' menus to the same group as the other Java menus within File Explorer. [#1447](https://github.com/microsoft/vscode-java-debug/pull/1447). + +## 0.56.1 - 2024-02-19 +### Fixed +- Fix the java.lang.NoClassDefFoundError when triggering code completion in DEBUG CONSOLE. See [java-debug#534](https://github.com/microsoft/java-debug/issues/534). + +## 0.56.0 - 2024-01-31 +### Fixed +- Breakpoint doesn't work on lambdas which returns a generic type. See [java-debug#498](https://github.com/microsoft/java-debug/issues/498), [#1413](https://github.com/microsoft/vscode-java-debug/issues/1413) and [#1414](https://github.com/microsoft/vscode-java-debug/issues/1414). +- Breakpoint with inline lambdas work only with last one. See [#1410](https://github.com/microsoft/vscode-java-debug/issues/1410). +- StepInto method target doesn't work if the method is part of wrapped expression. See [java-debug#519](https://github.com/microsoft/java-debug/issues/519). + + Thanks to [Gayan Perera](https://github.com/gayanper) for contribution in fixing multiple bugs. + +## 0.55.0 - 2023-11-01 +### Changed +- Don't duplicate build reference projects when building a Gradle project managed by Build Server. [java-debug#511](https://github.com/microsoft/java-debug/pull/511). + +### Fixed +- Cannot find Java process when using "Attach by Process ID". [#1388](https://github.com/microsoft/vscode-java-debug/issues/1388). Thanks to [owl-from-hogvarts](https://github.com/owl-from-hogvarts) for contribution. + +## 0.54.0 - 2023-08-29 +### Added +- Code completion in DEBUG CONSOLE now adds fully qualified names for unimported classes. See [#1246](https://github.com/microsoft/vscode-java-debug/issues/1246). +- Code completion in DEBUG CONSOLE now displays package names for suggested types. See [java-debug#505](https://github.com/microsoft/java-debug/pull/505). +- Integrate the build support for Gradle build server project. See [#1372](https://github.com/microsoft/vscode-java-debug/pull/1372), [java-debug#503](https://github.com/microsoft/java-debug/pull/503) + +### Changed +- Respect the setting 'java.debug.settings.forceBuildBeforeLaunch' even if autobuild is disabled. See [#1380](https://github.com/microsoft/vscode-java-debug/pull/1380). + +## 0.53.0 - 2023-08-01 +### Added +- Automatically refresh the CALL STACK view when the attached sources for frames have changed. See [#1370](https://github.com/microsoft/vscode-java-debug/pull/1370). + +### Changed +- Remove marketplace preview flag. See [#1369](https://github.com/microsoft/vscode-java-debug/pull/1369). + +## 0.52.0 - 2023-06-30 +### Added +- Use the setting `java.debug.settings.debugSupportOnDecompiledSource` to enable/disable debugging support on the decompiled source code. This feature requires [Language Support for Java by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java)@1.20.0 or higher. See [#1356](https://github.com/microsoft/vscode-java-debug/pull/1356). + +## 0.51.0 - 2023-05-31 +### Fixed +- NPE when adding lambda breakpoints in reactive projects. See [java-debug#477](https://github.com/microsoft/java-debug/issues/477). Thanks to [Gayan Perera](https://github.com/gayanper) for contribution. +- Lambda breakpoint on the first line of a method does not work. See [java-debug#488](https://github.com/microsoft/java-debug/issues/488). Thanks to [Gayan Perera](https://github.com/gayanper) for contribution. + +## 0.50.0 - 2023-04-26 +### Added +- Support specifying the exception types you want to break on. See [#1175](https://github.com/microsoft/vscode-java-debug/issues/1175) and [#295](https://github.com/microsoft/vscode-java-debug/issues/295). + +## 0.49.1 - 2023-03-28 +### Added +- Add context menus "Auto/Manual Expand Lazy Variables" to Variables view to auto show 'toString()' value. See [#1316](https://github.com/microsoft/vscode-java-debug/pull/1316). + +### Fixed +- Fix the error 'compareVersions is not a function'. See [#1307](https://github.com/microsoft/vscode-java-debug/pull/1307). + +## 0.49.0 - 2023-02-28 +### Added +- Enable Hot Code Replace when autobuild is disabled. See [#1296](https://github.com/microsoft/vscode-java-debug/pull/1296), [#1302](https://github.com/microsoft/vscode-java-debug/pull/1302). + +### Changed +- Display the running launch config name in progress bar for transparency. See [#1299](https://github.com/microsoft/vscode-java-debug/pull/1299). +- launch previously launched application if the current file isn't executable. See [#1036](https://github.com/microsoft/vscode-java-debug/issues/1036). + +## 0.48.0 - 2023-02-01 +### Changed +- Reject invalid DAP request. See [java-debug#466](https://github.com/microsoft/java-debug/pull/466). + +### Fixed +- Prioritize lookup the project source code during debugging. See [#1215](https://github.com/microsoft/vscode-java-debug/issues/1215). Thanks to [mozhuanzuojing](https://github.com/mozhuanzuojing) for contribution. + +## 0.47.0 - 2022-11-29 +### Changed +- Optimize the build error report of "Build failed, do you want to continue?". [#1214](https://github.com/microsoft/vscode-java-debug/issues/1214). + +### Fixed +- Use the system encoding to generate the *.argfile. [#1112](https://github.com/microsoft/vscode-java-debug/issues/1112). +- "shortenCommandLine": "argfile|auto" should include "vmArgs". [#1254](https://github.com/microsoft/vscode-java-debug/issues/1254). + +## 0.46.0 - 2022-11-02 +### Added +- Add "Step Into Target" feature to allow stepping directly into a specific function call when paused on a line. See [#1192](https://github.com/microsoft/vscode-java-debug/issues/1192). Thanks to [Gayan Perera](https://github.com/gayanper) for contribution. + +### Changed +- Exclude **/node_modules/** from .vscode/launch.json searches. See [#1234](https://github.com/microsoft/vscode-java-debug/pull/1234). Thanks to [Brandon Cheng](https://github.com/gluxon) for contribution. + +### Fixed +- Conditional Breakpoint got error code in reply:504. See [#1250](https://github.com/microsoft/vscode-java-debug/issues/1250). + +## 0.45.0 - 2022-10-12 +### Added +- Visualize the inline breakpoint locations. See [#1193](https://github.com/microsoft/vscode-java-debug/issues/1193). +- Show an extra column cursor when an inline breakpoint is hit. See [#1202](https://github.com/microsoft/vscode-java-debug/issues/1202). +- Support JEP 425: Virtual Threads (JDK 19). See [#1159](https://github.com/microsoft/vscode-java-debug/issues/1159). + +### Changed +- Enable async jdwp based on network latency for auto mode. See [java-debug#447](https://github.com/microsoft/java-debug/pull/447). + +### Fixed +- NPE when stopping JDT.LS. See [java-debug#448](https://github.com/microsoft/java-debug/issues/448). + +## 0.44.0 - 2022-09-01 +### Added +- **Experimental**: Support processing JDWP commands asynchronously to improve response speed of remote debugging. It's only enabled by default on VS Code Insiders. You can also opt-in by setting `java.debug.settings.jdwp.async`. See [#1208](https://github.com/microsoft/vscode-java-debug/pull/1208) and [java-debug#436](https://github.com/microsoft/java-debug/pull/436). +- Add support to specify Java executable via the property `javaExec` in launch.json. See [#1198](https://github.com/microsoft/vscode-java-debug/pull/1198). Thanks to [Gayan Perera](https://github.com/gayanper) for contribution. +- Add support for lambda breakpoints. See [java-debug#427](https://github.com/microsoft/java-debug/pull/427). Thanks to [Gayan Perera](https://github.com/gayanper) for contribution. + +## 0.43.0 - 2022-07-27 +### Added +- Support adding function breakpoints from the editor gutter. [java-debug#426](https://github.com/microsoft/java-debug/pull/426). Thanks to [Gayan Perera](https://github.com/gayanper) for contribution. + +### Changed +- Show target VM exceptions as result in evaluate requests. [java-debug#428](https://github.com/microsoft/java-debug/pull/428). Thanks to [Mathias Fußenegger](https://github.com/mfussenegger) for contribution. + +## 0.42.0 - 2022-06-29 +### Added +- Support function breakpoints, see [#258](https://github.com/microsoft/vscode-java-debug/issues/258). The current version support adding a function breakpoint with the syntax as `FullyQualifiedClassName#methodName` (e.g. `java.util.ArrayList#add`). Thanks to [Gayan Perera](https://github.com/gayanper) for contribution. + +### Changed +- Mark native frames and unavailable methods as subtle. [java-debug#409](https://github.com/microsoft/java-debug/pull/409). Thanks to [Mathias Fußenegger](https://github.com/mfussenegger) for contribution. + +### Fixed +- fix artifactId typo in Troubleshooting.md. [#1180](https://github.com/microsoft/vscode-java-debug/pull/1180). Thanks to [btoo](https://github.com/btoo) for contribution. + +## 0.41.0- 2022-06-01 +### Added +- Provide "Stop Java" button when triggering "Run Java" action. [#1166](https://github.com/microsoft/vscode-java-debug/issues/1166). +- [API] Support DAP request `processId` and event `processid` to get the exact pid of current running Java process. [java-debug#413](https://github.com/microsoft/java-debug/pull/413). + +### Changed +- Naming Java terminals with different names. [#1164](https://github.com/microsoft/vscode-java-debug/issues/1164). +- Enable Java terminal link provider on all terminals. [#1168](https://github.com/microsoft/vscode-java-debug/pull/1168). +- Disable HCR button when running Java without debugging. [#1167](https://github.com/microsoft/vscode-java-debug/pull/1167). + +## 0.40.1- 2022-04-15 +### Fixed +- Update command id to 'java.project.addToSourcePath.command'. [#1152](https://github.com/microsoft/vscode-java-debug/issues/1152). + +## 0.40.0 - 2022-03-28 +### Fixed +- Fix extension version. [#1146](https://github.com/microsoft/vscode-java-debug/pull/1146). + +## 0.39.0 - 2022-03-28 +### Added +- Support lazy loading object values from toString(). [java-debug#401](https://github.com/microsoft/java-debug/pull/401). +- API - Provide an api to query the processId of the debugging Java process. [java-debug#399](https://github.com/microsoft/java-debug/pull/399). + +### Changed +- Print logpoints to debug console. [#710](https://github.com/microsoft/vscode-java-debug/issues/710). Thanks to [James Clark](https://github.com/sbj42) for contribution. + +### Fixed +- VM launch failure doesn't report a useful error. [java-debug#397](https://github.com/microsoft/java-debug/issues/397). Thanks to [Karl von Randow](https://github.com/karlvr) for contribution. +- Engineering - Fix problemMatcher patterns for the watch task. [#1137](https://github.com/microsoft/vscode-java-debug/pull/1137). Thanks to [James Clark](https://github.com/sbj42) for contribution. + +## 0.38.0 - 2022-01-26 +### Added +- Thanks for the contribution from [Mu-Tsun Tsai](https://github.com/MuTsunTsai). Add zh-tw locale. [#1087](https://github.com/microsoft/vscode-java-debug/pull/1087). + +### Changed +- Change the inline button to debug icon. [#1108](https://github.com/microsoft/vscode-java-debug/pull/1108). + +### Fixed +- Improve the search performance of resolving main class. [java-debug#395](https://github.com/microsoft/java-debug/pull/395). +- If mainClass not specified, it will find main classes not belonging to current workspace. [#1098](https://github.com/microsoft/vscode-java-debug/issues/1098). +- Update CONTRIBUTING docs. [#1105](https://github.com/microsoft/vscode-java-debug/issues/1105). + +## 0.37.0 - 2021-11-24 +### Added +- Troubleshooting Guide for Encoding Issues on Windows. See [Troubleshooting_encoding](https://github.com/microsoft/vscode-java-debug/blob/main/Troubleshooting_encoding.md). + +### Fixed +- Address encoding issues on Windows. [#1077](https://github.com/microsoft/vscode-java-debug/pull/1077). +- Encoding - launcher.bat could not pass on redirected input into the java program being debugged. [microsoft/vscode-java-pack#756](https://github.com/microsoft/vscode-java-pack/issues/756). +- Encoding - Launching BAT for UTF-8 fix is incompatible with Security Policies disallowing BAT execution. [#646](https://github.com/microsoft/vscode-java-debug/issues/646). +- Encoding - Non-ASCII char support for Windows terminals. [#622](https://github.com/microsoft/vscode-java-debug/issues/622). +- Encoding - [Windows non-ASCII folder] Error: Could not find or load main class. [#623](https://github.com/microsoft/vscode-java-debug/issues/623). +- Step filter in the settings.json is not working. [#1085](https://github.com/microsoft/vscode-java-debug/issues/1085). +- Contribution from [ +John Grant](https://github.com/cyrfer): Support multiline values in envFile. [#1061](https://github.com/microsoft/vscode-java-debug/issues/1061). +- Contribution from [ +Adrien Piquerez](https://github.com/adpi2). Fix NPE when using step filter. [microsoft/java-debug#387](https://github.com/microsoft/java-debug/pull/387). +- Contribution from [Douglas M. Barcellos](https://github.com/dougmbarcellos). Update telemetry setting declaration in README. [#1084](https://github.com/microsoft/vscode-java-debug/pull/1084). + +## 0.36.0 - 2021-09-23 +### Changed +- Adopt new createStatusBarItem API for id and name properties. [#1020](https://github.com/microsoft/vscode-java-debug/issues/1020). + +### Fixed +- Unicode character in class name will fail to run. [#780](https://github.com/microsoft/vscode-java-debug/issues/780). +- Launching apps which require both a modulepath and a classpath doesn't work with shortenCommandLine="argfile". [#1047](https://github.com/microsoft/vscode-java-debug/issues/1047). +- Debugger fails to load variable values due to java.lang.OutOfMemoryError. [#1044](https://github.com/microsoft/vscode-java-debug/issues/1044). +- Fix privacy in the logger. [PR#1048](https://github.com/microsoft/vscode-java-debug/pull/1048). + ## 0.35.0 - 2021-07-28 ### Changed - Add link to check detatils while reporting debugging progress. [PR#1034](https://github.com/microsoft/vscode-java-debug/pull/1034). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index aa02a24f..cae7a2a0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -25,10 +25,10 @@ javaDebugger/ ``` ### Prerequisites -- [JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html), (version 1.8.0 or later) -- [VS Code](https://code.visualstudio.com/), (version 1.19.0 or later) -- [Node.JS](https://nodejs.org/en/), (>= 8.9.1, < 9.0.0) -- [Language Support for Java by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java), (version 0.14.0 or later) +- [JDK](http://www.oracle.com/technetwork/java/javase/downloads/index.html), (version 11 or later) +- [VS Code](https://code.visualstudio.com/), (version 1.44.0 or later) +- [Node.JS](https://nodejs.org/en/), (>= 12.8.1) +- [Language Support for Java by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java), (version 0.60.0 or later) Install all the dependencies using `npm` (supposed to be installed together with [Node.JS](https://nodejs.org/en/)). ```bash @@ -38,11 +38,11 @@ npm install ### Build and Run #### Build the Debug Server -For convenience, there is task `build_server` defined in `gulpfile.js`. It builds the Java Debug Server and then copies the .jar file into folder `vscode-java-debug/server`. +For convenience, there is a build script `buildJdtlsExt.js` defined in `scripts/build`. It builds the Java Debug Server and then copies the .jar file into folder `vscode-java-debug/server`. ```bash -npx gulp build_server +npm run build-server ``` -**NOTE**: If you didn't follow the steps to check out [vscode-java-debug](https://github.com/Microsoft/vscode-java-debug) and [java-debug](https://github.com/Microsoft/java-debug) in the same folder, please specify a correct `server_dir` in your [gulpfile.js](https://github.com/Microsoft/vscode-java-debug/blob/master/gulpfile.js#L5). +**NOTE**: If you didn't follow the steps to check out [vscode-java-debug](https://github.com/Microsoft/vscode-java-debug) and [java-debug](https://github.com/Microsoft/java-debug) in the same folder, please specify a correct `server_dir` in your [buildJdtlsExt.js](https://github.com/Microsoft/vscode-java-debug/blob/master/scripts/build/buildJdtlsExt.js#L8). #### Debug the Extension Open folder `vscode-java-debug` in VS Code, or simply execute following commands if you have `code` in your system PATH. @@ -61,4 +61,4 @@ Since we have checked in a valid [launch.json](https://github.com/Microsoft/java ## Pull Requests Before we can accept a pull request from you, you'll need to sign a [Contributor License Agreement (CLA)](https://github.com/Microsoft/vscode/wiki/Contributor-License-Agreement). It is an automated process and you only need to do it once. -To enable us to quickly review and accept your pull requests, always create one pull request per issue and [link the issue in the pull request](https://github.com/blog/957-introducing-issue-mentions). \ No newline at end of file +To enable us to quickly review and accept your pull requests, always create one pull request per issue and [link the issue in the pull request](https://github.com/blog/957-introducing-issue-mentions). diff --git a/Configuration.md b/Configuration.md index f830407c..12e07c21 100644 --- a/Configuration.md +++ b/Configuration.md @@ -36,6 +36,9 @@ When you run the program via `Run|Debug` CodeLens or `Run`/`Debug` context menu, ![runMenu](https://user-images.githubusercontent.com/14052197/67181889-715bb380-f410-11e9-9aef-c27ce697daa0.gif) ## Modify the launch.json +If you don't see `.vscode/launch.json` in your VS Code window, you can go to "Run and Debug" viewlet to create an initial launch.json. +![create launch.json](https://user-images.githubusercontent.com/14052197/172300183-7758eb9b-5e61-485b-b238-a63a98a9fb11.png) + On the other hand, the debugger provides multiple configuration templates to help you to easily add a new configuration. When you type `"java"` or `""` in launch.json, it will trigger auto-completion suggestions. ![launchConfig](https://user-images.githubusercontent.com/14052197/67182212-3908a500-f411-11e9-9467-48ba2f6e0e39.gif) @@ -59,7 +62,7 @@ In case you want to manually edit the configuration, below are the explanation a * When you open a gradle project, the project name is the `baseName` or the root folder name. * When you open other Java files, leave the launch.json empty and allow the debugger auto generates the project name for you. - Pro Tip: The easiest way to get the project name is to install [Java Dependency Viewer](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-dependency) extension, the top node in the JAVA DEPENDENCIES view is your project name. + > Pro Tip: The easiest way to get the project name is to install [Java Dependency Viewer](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-dependency) extension, the top node in the JAVA DEPENDENCIES view is your project name. ![java-dependency-viewer](https://user-images.githubusercontent.com/14052197/67185034-7cfea880-f417-11e9-8a3b-a3af1a9e86bb.png) ### Arguments @@ -96,15 +99,35 @@ In case you want to manually edit the configuration, below are the explanation a - `env` - The extra environment variables for the program. It's accessible via `System.getenv(key)`. It accepts key-value pairs. ```json - "env": { - "HOST": "127.0.0.1", - "PORT": 8080 + { + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Launch Hello", + "request": "launch", + "env": { + "HOST": "127.0.0.1", + "PORT": 8080 + } + } + ] } ``` -- `envFile` - Absolute path to a file containing environment variable definitions. +- `envFile` - Absolute path to a file containing environment variable definitions. Multiple files can be specified by providing an array of absolute paths ```json - "envFile": "${workspaceFolder}/.env" + { + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Launch Hello", + "request": "launch", + "envFile": "${workspaceFolder}/.env" + } + ] + } ``` ### Don't step into the specified classes or methods @@ -112,9 +135,19 @@ In case you want to manually edit the configuration, below are the explanation a - `stepFilters` - Skip the specified classes or methods you don't want to step into. Class names should be fully qualified. Wildcard is supported. - Skip the class loader. ```json - "stepFilters": { - "classNameFilters": [ - "java.lang.ClassLoader", + { + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Launch Hello", + "request": "launch", + "stepFilters": { + "skipClasses": [ + "java.lang.ClassLoader", + ] + } + } ] } ``` @@ -122,14 +155,19 @@ In case you want to manually edit the configuration, below are the explanation a - Skip the JDK classes. ```json - "stepFilters": { - "classNameFilters": [ - "java.*", - "javax.*", - "com.sun.*", - "sun.*", - "sunw.*", - "org.omg.*" + { + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Launch Hello", + "request": "launch", + "stepFilters": { + "skipClasses": [ + "$JDK" + ] + } + } ] } ``` @@ -137,10 +175,20 @@ In case you want to manually edit the configuration, below are the explanation a - Skip the constructors and the synthetic methods. ```json - "stepFilters": { - "skipSynthetics": true, - "skipStaticInitializers": true, - "skipConstructors": true + { + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Launch Hello", + "request": "launch", + "stepFilters": { + "skipSynthetics": true, + "skipStaticInitializers": true, + "skipConstructors": true + } + } + ] } ``` ![skipMethods](https://user-images.githubusercontent.com/14052197/67255209-83daf900-f4b3-11e9-8533-70f6ff941e8d.gif) diff --git a/README.md b/README.md index dddebe00..767764ad 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # Debugger for Java [![Gitter](https://badges.gitter.im/Microsoft/vscode-java-debug.svg)](https://gitter.im/Microsoft/vscode-java-debug) -[![GitHub Actions](https://img.shields.io/github/workflow/status/microsoft/vscode-java-debug/CI/master)](https://github.com/microsoft/vscode-java-debug/actions?query=workflow%3ACI+branch%3Amaster) +[![GitHub Actions](https://img.shields.io/github/actions/workflow/status/microsoft/vscode-java-debug/build.yml)](https://github.com/microsoft/vscode-java-debug/actions/workflows/build.yml?query=branch%3Amain) ## Overview A lightweight Java Debugger based on [Java Debug Server](https://github.com/Microsoft/java-debug) which extends the [Language Support for Java by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java). It allows users to debug Java code using Visual Studio Code (VS Code). Here's a list of features: @@ -17,6 +17,8 @@ A lightweight Java Debugger based on [Java Debug Server](https://github.com/Micr - Debug console - Evaluation - Hot Code Replace +- No-Config Debug (debug Java apps without launch.json) +- **[AI]** AI-Assisted Debugging (GitHub Copilot integration) ## Requirements - JDK (version 1.8.0 or later) @@ -35,30 +37,75 @@ ext install vscode-java-debug ## Use - Launch VS Code -- Open a Java project (Maven/Gradle/Eclipse) +- Open a Java project (Maven/Gradle/Eclipse/Single Java file) - Open a Java file to activate the extensions -- Add debug configurations and edit launch.json - - To launch: specify `mainClass` - - To attach: specify `hostName` and `port` -- Press F5 +- Press `F5` Please also check the documentation of [Language Support for Java by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java) if you have trouble setting up your project. +## No-Config Debug + +You can now debug Java applications without creating a `launch.json` file! Simply open a terminal in VS Code and use the `debugjava` command: + +```bash +# Debug a main class +debugjava -cp bin com.example.Main + +# Debug a JAR file +debugjava -jar target/myapp.jar + +# Debug with arguments +debugjava -cp bin com.example.Main arg1 arg2 +``` + +The debugger will automatically attach. See [No-Config Debug Documentation](bundled/scripts/noConfigScripts/README.md) for more details. + +## AI-Assisted Debugging + +When using GitHub Copilot Chat, you can now ask AI to help you debug Java applications! The extension provides a Language Model Tool that enables natural language debugging: + +- "Debug my Spring Boot application" +- "Debug the Main class in this project" +- "Debug Calculator with arguments 10 and 5" + +The AI will automatically: +1. Detect your project type (Maven/Gradle/VS Code) +2. Build/compile your project +3. Start debugging with appropriate configuration + +See [Language Model Tool Documentation](bundled/agents/README.md) for more details. + ## Options ### Launch -- `mainClass` (required) - The fully qualified class name (e.g. [java module name/]com.xyz.MainApp) or the java file path of the program entry. -- `args` - The command line arguments passed to the program. Use `"${command:SpecifyProgramArgs}"` to prompt for program arguments. It accepts a string or an array of string. +- `mainClass` - The fully qualified name of the class containing the main method. If not specified, the debugger automatically resolves the possible main class from current project. + - `${file}` - Current Java file. + - `com.mypackage.Main` - The fully qualified class name. + - `com.java9.mymodule/com.mypackage.Main` - The fully qualified module name and class name. + - `/path/to/Main.java` - The file path of the main class. +- `args` - The command line arguments passed to the program. + - `"${command:SpecifyProgramArgs}"` - Prompt user for program arguments. + - A space-separated string or an array of string. - `sourcePaths` - The extra source directories of the program. The debugger looks for source code from project settings by default. This option allows the debugger to look for source code in extra directories. -- `modulePaths` - The modulepaths for launching the JVM. If not specified, the debugger will automatically resolve from current project. -- `classPaths` - The classpaths for launching the JVM. If not specified, the debugger will automatically resolve from current project. -- `encoding` - The `file.encoding` setting for the JVM. If not specified, 'UTF-8' will be used. Possible values can be found in https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html. +- `modulePaths` - The modulepaths for launching the JVM. If not specified, the debugger will automatically resolve from current project. If multiple values are specified, the debugger will merge them together. + - `$Auto` - Automatically resolve the modulepaths of current project. + - `$Runtime` - The modulepaths within 'runtime' scope of current project. + - `$Test` - The modulepaths within 'test' scope of current project. + - `!/path/to/exclude` - Exclude the specified path from modulepaths. + - `/path/to/append` - Append the specified path to the modulepaths. +- `classPaths` - The classpaths for launching the JVM. If not specified, the debugger will automatically resolve from current project. If multiple values are specified, the debugger will merge them together. + - `$Auto` - Automatically resolve the classpaths of current project. + - `$Runtime` - The classpaths within 'runtime' scope of current project. + - `$Test` - The classpaths within 'test' scope of current project. + - `!/path/to/exclude` - Exclude the specified path from classpaths. + - `/path/to/append` - Append the specified path to the classpaths. +- `encoding` - The `file.encoding` setting for the JVM. Possible values can be found in https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html. - `vmArgs` - The extra options and system properties for the JVM (e.g. -Xms\ -Xmx\ -D\=\), it accepts a string or an array of string. - `projectName` - The preferred project in which the debugger searches for classes. There could be duplicated class names in different projects. This setting also works when the debugger looks for the specified main class when launching a program. It is required when the workspace has multiple java projects, otherwise the expression evaluation and conditional breakpoint may not work. - `cwd` - The working directory of the program. Defaults to `${workspaceFolder}`. - `env` - The extra environment variables for the program. -- `envFile` - Absolute path to a file containing environment variable definitions. +- `envFile` - Absolute path to a file containing environment variable definitions. Multiple files can be specified by providing an array of absolute paths - `stopOnEntry` - Automatically pause the program after launching. - `console` - The specified console to launch the program. If not specified, use the console specified by the `java.debug.settings.console` user setting. - `internalConsole` - VS Code debug console (input stream not supported). @@ -71,10 +118,15 @@ Please also check the documentation of [Language Support for Java by Red Hat](ht - `auto` - Automatically detect the command line length and determine whether to shorten the command line via an appropriate approach. - `stepFilters` - Skip specified classes or methods when stepping. - `classNameFilters` - [**Deprecated** - replaced by `skipClasses`] Skip the specified classes when stepping. Class names should be fully qualified. Wildcard is supported. - - `skipClasses` - Skip the specified classes when stepping. You could use the built-in variables such as '$JDK' and '$Libraries' to skip a group of classes, or add a specific class name expression, e.g. java.*, *.Foo + - `skipClasses` - Skip the specified classes when stepping. + - `$JDK` - Skip the JDK classes from the default system bootstrap classpath, such as rt.jar, jrt-fs.jar. + - `$Libraries` - Skip the classes from application libraries, such as Maven, Gradle dependencies. + - `java.*` - Skip the specified classes. Wildcard is supported. + - `java.lang.ClassLoader` - Skip the classloaders. - `skipSynthetics` - Skip synthetic methods when stepping. - `skipStaticInitializers` - Skip static initializer methods when stepping. - `skipConstructors` - Skip constructor methods when stepping. +- `javaExec` - The path to java executable to use. By default, the project JDK's java executable is used. ### Attach @@ -88,7 +140,11 @@ Please also check the documentation of [Language Support for Java by Red Hat](ht - `projectName` - The preferred project in which the debugger searches for classes. There could be duplicated class names in different projects. It is required when the workspace has multiple java projects, otherwise the expression evaluation and conditional breakpoint may not work. - `stepFilters` - Skip specified classes or methods when stepping. - `classNameFilters` - [**Deprecated** - replaced by `skipClasses`] Skip the specified classes when stepping. Class names should be fully qualified. Wildcard is supported. - - `skipClasses` - Skip the specified classes when stepping. You could use the built-in variables such as '$JDK' and '$Libraries' to skip a group of classes, or add a specific class name expression, e.g. java.*, *.Foo + - `skipClasses` - Skip the specified classes when stepping. + - `$JDK` - Skip the JDK classes from the default system bootstrap classpath, such as rt.jar, jrt-fs.jar. + - `$Libraries` - Skip the classes from application libraries, such as Maven, Gradle dependencies. + - `java.*` - Skip the specified classes. Wildcard is supported. + - `java.lang.ClassLoader` - Skip the classloaders. - `skipSynthetics` - Skip synthetic methods when stepping. - `skipStaticInitializers` - Skip static initializer methods when stepping. - `skipConstructors` - Skip constructor methods when stepping. @@ -103,10 +159,10 @@ Please also check the documentation of [Language Support for Java by Red Hat](ht - `java.debug.settings.showToString`: show 'toString()' value for all classes that override 'toString' method in "Variables" viewlet, defaults to `true`. - `java.debug.settings.maxStringLength`: the maximum length of string displayed in "Variables" or "Debug Console" viewlet, the string longer than this length will be trimmed, defaults to `0` which means no trim is performed. - `java.debug.settings.numericPrecision`: the precision when formatting doubles in "Variables" or "Debug Console" viewlet. -- `java.debug.settings.hotCodeReplace`: Reload the changed Java classes during debugging, defaults to `manual`. Make sure `java.autobuild.enabled` is not disabled for [VSCode Java](https://github.com/redhat-developer/vscode-java). See the [wiki page](https://github.com/Microsoft/vscode-java-debug/wiki/Hot-Code-Replace) for more information about usages and limitations. - - manual - Click the toolbar to apply the changes. - - auto - Automatically apply the changes after compilation. - - never - Never apply the changes. +- `java.debug.settings.hotCodeReplace`: Reload the changed Java classes during debugging, defaults to `manual`. See the [wiki page](https://github.com/Microsoft/vscode-java-debug/wiki/Hot-Code-Replace) for more information about usages and limitations. + - `manual` - Click the toolbar to apply the changes. + - `auto` - Automatically apply the changes after compilation. This only works when `'java.autobuild.enabled'` is on. + - `never` - Never apply the changes. - `java.debug.settings.enableRunDebugCodeLens`: enable the code lens provider for the run and debug buttons over main entry points, defaults to `true`. - `java.debug.settings.forceBuildBeforeLaunch`: force building the workspace before launching java program, defaults to `true`. - `java.debug.settings.onBuildFailureProceed`: Force to proceed when build fails, defaults to false. @@ -114,20 +170,40 @@ Please also check the documentation of [Language Support for Java by Red Hat](ht - `internalConsole` - VS Code debug console (input stream not supported). - `integratedTerminal` - VS Code integrated terminal. - `externalTerminal` - External terminal that can be configured in user settings. -- `java.debug.settings.exceptionBreakpoint.skipClasses`: Skip the specified classes when breaking on exception. You could use the built-in variables such as '$JDK' and '$Libraries' to skip a group of classes, or add a specific class name expression, e.g. java.*, *.Foo -- `java.debug.settings.stepping.skipClasses`: Skip the specified classes when stepping. You could use the built-in variables such as '$JDK' and '$Libraries' to skip a group of classes, or add a specific class name expression, e.g. java.*, *.Foo +- `java.debug.settings.exceptionBreakpoint.exceptionTypes`: Specifies a set of exception types you want to break on, e.g. `java.lang.NullPointerException`. A specific exception type and its subclasses can be selected for caught exceptions, uncaught exceptions, or both can be selected. +- `java.debug.settings.exceptionBreakpoint.allowClasses`: Specifies the allowed locations where the exception breakpoint can break on. Wildcard is supported, e.g. `java.*`, `*.Foo`. +- `java.debug.settings.exceptionBreakpoint.skipClasses`: Skip the specified classes when breaking on exception. + - `$JDK` - Skip the JDK classes from the default system bootstrap classpath, such as rt.jar, jrt-fs.jar. + - `$Libraries` - Skip the classes from application libraries, such as Maven, Gradle dependencies. + - `java.*` - Skip the specified classes. Wildcard is supported. + - `java.lang.ClassLoader` - Skip the classloaders. +- `java.debug.settings.stepping.skipClasses`: Skip the specified classes when stepping. + - `$JDK` - Skip the JDK classes from the default system bootstrap classpath, such as rt.jar, jrt-fs.jar. + - `$Libraries` - Skip the classes from application libraries, such as Maven, Gradle dependencies. + - `java.*` - Skip the specified classes. Wildcard is supported. + - `java.lang.ClassLoader` - Skip the classloaders. - `java.debug.settings.stepping.skipSynthetics`: Skip synthetic methods when stepping. - `java.debug.settings.stepping.skipStaticInitializers`: Skip static initializer methods when stepping. - `java.debug.settings.stepping.skipConstructors`: Skip constructor methods when stepping. - `java.debug.settings.jdwp.limitOfVariablesPerJdwpRequest`: The maximum number of variables or fields that can be requested in one JDWP request. The higher the value, the less frequently debuggee will be requested when expanding the variable view. Also a large number can cause JDWP request timeout. Defaults to 100. - `java.debug.settings.jdwp.requestTimeout`: The timeout (ms) of JDWP request when the debugger communicates with the target JVM. Defaults to 3000. +- `java.debug.settings.jdwp.async`: Experimental: Controls whether the debugger is allowed to send JDWP commands asynchronously. Async mode can improve remote debugging response speed on high-latency networks. Defaults to `auto`, and automatically switch to async mode when the latency of a single jdwp request exceeds 15ms during attach debugging. + - `auto` (Default) + - `on` + - `off` - `java.debug.settings.vmArgs`: The default VM arguments to launch the Java program. Eg. Use '-Xmx1G -ea' to increase the heap size to 1GB and enable assertions. If you want to customize the VM arguments for a specific debug session, please modify the 'vmArgs' config in launch.json. +- `java.debug.settings.debugSupportOnDecompiledSource`: [Experimental]: Enable debugging support on the decompiled source code. Be aware that this feature may affect the loading speed of Call Stack Viewlet. You also need [Language Support for Java by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java)@1.20.0 or higher to use this feature. +- `java.debug.settings.suspendAllThreads`: Suspend all threads when hitting a breakpoint or stopping for an exception. Takes effect only for new debug sessions; changes during a running session don’t apply. - `java.silentNotification`: Controls whether notifications can be used to report progress. If true, use status bar to report progress instead. Defaults to `false`. -Pro Tip: The documentation [Configuration.md](https://github.com/microsoft/vscode-java-debug/blob/master/Configuration.md) provides lots of samples to demonstrate how to use these debug configurations, recommend to take a look. +> Pro Tip: The documentation [Configuration.md](https://github.com/microsoft/vscode-java-debug/blob/master/Configuration.md) provides lots of samples to demonstrate how to use these debug configurations, recommend to take a look. ## Troubleshooting -Reference the [troubleshooting guide](https://github.com/Microsoft/vscode-java-debug/blob/master/Troubleshooting.md) for common errors. +Reference the [Troubleshooting Guide](https://github.com/Microsoft/vscode-java-debug/blob/master/Troubleshooting.md) for common errors. +Reference the [Troubleshooting Guide for Encoding Issues](https://github.com/Microsoft/vscode-java-debug/blob/master/Troubleshooting_encoding.md) for encoding issues. + +## Contributing +If you are interested in fixing issues and contributing directly to the code base, please see the document [How to Contribute](https://github.com/microsoft/vscode-java-debug/blob/main/CONTRIBUTING.md). ## Feedback and Questions You can find the full list of issues at [Issue Tracker](https://github.com/Microsoft/vscode-java-debug/issues). You can submit a [bug or feature suggestion](https://github.com/Microsoft/vscode-java-debug/issues/new), and participate community driven [![Gitter](https://badges.gitter.im/Microsoft/vscode-java-debug.svg)](https://gitter.im/Microsoft/vscode-java-debug) @@ -136,4 +212,4 @@ You can find the full list of issues at [Issue Tracker](https://github.com/Micro This extension is licensed under [MIT License](https://github.com/Microsoft/vscode-java-debug/blob/master/LICENSE.txt). ## Data/Telemetry -VS Code collects usage data and sends it to Microsoft to help improve our products and services. Read our [privacy statement](https://go.microsoft.com/fwlink/?LinkID=528096&clcid=0x409) to learn more. If you don't wish to send usage data to Microsoft, you can set the `telemetry.enableTelemetry` setting to `false`. Learn more in our [FAQ](https://code.visualstudio.com/docs/supporting/faq#_how-to-disable-telemetry-reporting). +VS Code collects usage data and sends it to Microsoft to help improve our products and services. Read our [privacy statement](https://go.microsoft.com/fwlink/?LinkID=528096&clcid=0x409) to learn more. If you don't wish to send usage data to Microsoft, you can set the `telemetry.telemetryLevel` setting to `"off"`. Learn more in our [FAQ](https://code.visualstudio.com/docs/supporting/faq#_how-to-disable-telemetry-reporting). diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000..e138ec5d --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). + + diff --git a/TestPlan.md b/TestPlan.md deleted file mode 100644 index 4070f2eb..00000000 --- a/TestPlan.md +++ /dev/null @@ -1,547 +0,0 @@ -# Test Plan -## Hello World - - 1. Create a new folder `helloworld`, create a file named `App.java` in this folder and filling the following codes: -
-public class App 
-{
-    public static void main( String[] args )
-    {        
-        System.out.println( "Hello World!" );
-    }
-}
-
- -2. Set BP on println -3. Press F5, verify for launch.json generated with right `mainClass` -4. Press F5, verify for BP to be hit, verify variable args shows like `String[0] (id=%d)` -5. Add watch `args.toString() + " test"`, verify the result like `[Ljava.lang.String;@726f3b58 test` -6. Input `args.toString() + " test"` in debug console, verify the same result in debug console and it is expandable. -7. Verify stack with thread list and on paused thread and one stack: - `App.main(String[]) (App.java:5)` -8. Press F10, verify `Hello World!` in debug console. -9. Press F5, verify program terminates. - -## Call Stack -1. Open test project `2.callstack` -2. Open `Bar.java`, set BP on line 3 -1. Press F5, verify for launch.json generated with right `projectName` and `mainClass` -4. Press F5, verify for BP to be hit, verify variable args shows `i: 20` and `this: Bar (id=^d)` - -1. Verify the stackframe shows: -
-    Bar.testBar(int) (Bar.java:3)
-    Foo.testFoo(int) (Foo.java:6)
-    CallStack.main(String[]) (CallStack.java:4)
-    
-1. Click the testFoo line in the call stack view, verify vscode views verify variable args shows `j: 10` and `this: Foo (id=^d)` and `this` is expandable with only member `bar: Bar (id=^d)`, the bar should not be expandable. -1. Change `j` to `32` and switch to stackframe `Bar.testBar(int) (Bar.java:3)` and switch back to `Foo.testFoo(int) (Foo.java:6)`, input `j + 1` in debug console and verify `33` is diplayed. -1. Add watch `this.bar.toString()` and verify the result `"Bar@^d" (id=^d)` -1. Add watch `"test" + new Bar().hashCode()` and verify the result `"test^d" (id=^d)` -1. Add watch `bar.testBar(j + 10)` and verify there is a message `This is test method in bar.` printed in debug console. -9. Press F5, verify program terminates. - -## Call Stack -1. Open test project `2.callstack` -2. Open `Bar.java`, set BP on line 3 -1. Press F5, verify for launch.json generated with right `projectName` and `mainClass` -4. Press F5, verify for BP to be hit, verify variable args shows `i: 20` and `this: Bar (id=^d)` - -1. Verify the stackframe shows: -
-    Bar.testBar(int) (Bar.java:3)
-    Foo.testFoo(int) (Foo.java:6)
-    CallStack.main(String[]) (CallStack.java:4)
-    
-1. Click the testFoo line in the call stack view, verify vscode views verify variable args shows `j: 10` and `this: Foo (id=^d)` and `this` is expandable with only member `bar: Bar (id=^d)`, the bar should not be expandable. -1. Change `j` to `32` and switch to stackframe `Bar.testBar(int) (Bar.java:3)` and switch back to `Foo.testFoo(int) (Foo.java:6)`, input `j + 1` in debug console and verify `33` is diplayed. -1. Add watch `this.bar.toString()` and verify the result `"Bar@^d" (id=^d)` -1. Add watch `"test" + new Bar().hashCode()` and verify the result `"test^d" (id=^d)` -1. Add watch `bar.testBar(j + 10)` and verify there is a message `This is test method in bar.` printed in debug console. -9. Press F5, verify program terminates. - -## Variables -1. Open test project `4.variable` - -1. Set BP on the last statement of `VariableTest#test` -1. Press F5 to generate `launch.json` and press F5 again to start debug and wait for BP to be hit -1. Verify - 1. `i` should be `111` - 1. `nullstr` should be `null` - 1. `str` should be full displayed with 1000 `a` - 1. `object` should be `Object (id=^d)` and not expandable - 1. `test` should be `VariableTest (id=^d)` and expandable with `x (VariableTest): 100`, `i:19099` and `x (Foo): 0` - 1. `a` is not expandable - 1. `b` is displayed as `Class (A) (id=^d)` and expand `b->classLoader`, there should be no errors on logs - 1. `intarray` should have 3 integers `1, 2, 3` - 1. `strList` should have children `size: 2` and expandable `elementData`, expand `elementData`, a long string `string test aaaaaaa...` should be displayed - 1. `map` should have `size: 1` and expandable `table` with a `HashMap$Node` child. - 1. `t` should have one element `hello` - 1. `genericArray` should be displayed `String[10][] (id=^d)` with first non-empty element - 1. `multi` should be displayed `String[5][][] (id=^d)` and two levels expandable tree nodes. - 1. `d` should not be expandable - 1. `dd` should be displayed as `GenericsFoo (id=^d)` and should have one child `x: Foo (id=^d)` with only one child `x: 0` - 1. `list` should have only one element of `int[1] (id=^d)` at index `0` - 1. `this` variable should be displayed -1. -1. set value on `test->x (VariableTest)`, input value `1`, verify `this->x (VariableTest)` has also been changed to `1` - -1. Open user settings and set -
"java.debug.settings.showHex": true,
-    "java.debug.settings.maxStringLength": 10,
-    "java.debug.settings.showQualifiedNames": true,
-    "java.debug.settings.showStaticVariables": false, 
-1. verify - 1. numbers are displayed in hex, and static variable is hiden and class names have been changed to fully qualified, `str` should be changed to `"string ..." (id=0x^d)` -2. add watch `this.hashCode()` verify the result should be hex format. -1. add watch `str + str.length()` in debug console, verify the result `"string ..." (id=0x^d)` -1. Press F5, verify program terminates. - -## Big stack frame -1. Open test project `6. recursivefunction` -2. Open `RecursiveTest.java`, and set BP on line 8: return 1 -1. Press F5 to generate `launch.json` and press F5 again to start debug and wait for BP to be hit -1. Add watch `number + 100` and verify the call stack list is a long list, and you can switch between them freely with changed arguments number and changed watch values -1. click on the Load More Stack Frames button, verify you can click on it continually. (The total stack frame count is 1000, and vscode will load 20 of them in one page, so you can click Load More Stack Frames button about 50 times), verify there is no PERFORMANCE issue (no delay more than 1 second during the test steps). -1. Press F5, verify program terminates. - -## Breakpoint and innner class -1. Open test project `5.breakpoint` -1. Change the code to: -``` -class A { - - void m() { - System.out.println("outer"); - } - - String n() { - return "outer"; - } -} - -public class BreakPointTest { - public static void main(String[] args) { - new BreakPointTest().go(); - int j = 0; - new A() { - @Override - void m() { - System.out.println("anonymous"); - } - }.m(); - for (int i = 1; i <= 100; i++) { - if (i <= 99) { - j++; - } else { - System.out.println(j); - } - - } - } - - void go() { - new A().m(); - class A { - String n() { - return "inner"; - } - - void m() { - System.out.println("inner"); - } - } - new A().m(); - } - - static class A { - String n() { - return "middle"; - } - - void m() { - System.out.println("middle"); - } - } -} -``` - -1. Set BP on each `println` statement -1. Add watch `new A().n()` -1. Press F5 to start debug, verify the line `System.out.println("middle");` is hit, verify the watch result is `middle` -1. Press F5 again, verify the line `System.out.println("inner");` is hit, verify the watch result is displayed with red error message -1. press F5 again and verify the line `System.out.println("anonymous");` is hit and the watch result is `middle` -1. press F5 again and verify the line `System.out.println(j);` is hit and the watch result is `middle` -1. Press F5, verify the program stops, verify no error in logs. -1. verify the following messages in debug console
-middle
-inner
-anonymous
-99
-
- -## Variable Performance Test -1. Open test project `7.variableperformance` -2. Open `TooManyVariables.java`, and set BP on `System.out.println("variable perf test.")` -1. Press F5 to generate `launch.json` and press F5 again to start debug -1. Open debug view and expand the ‘this’ variable in variable view. -1. Verify the time for expanding are less than 5 seconds -1. Press F5, verify program terminates. - -## No Debug Information Test -1. Open test project `8.nosource` -1. Open `NoSourceTest.java`, and set breakpoint on line 4: `System.out.println(i+10);` -1. Press F5 to generate `launch.json` and press F5 again to start debug, verify the BP is hit -1. Verify the following stack frames: -
-    NoSourceTest.lambda$0(Integer) (NoSourceTest.java:4)
-    ^d.accept(Object) (Unknown Source:-1)
-    Foo.bar(int,int,Consumer) (Unknown Source:-1)
-    NoSourceTest.main(String[]) (NoSourceTest.java:3)
-    
-1. Select stack frame `Foo.bar(int,int,Consumer) (Unknown Source:-1)`, add watch `this.hashCode() - arg0` and verify an integer as the result, verify watch `new Foo()` results in `Foo (id=^d)` -1. Press F5, verify program terminates. - -## Maven Test -1. Open cmd.exe and create an empty folder and run `mvn archetype:generate –DarchetypeArtifactId:maven-archetype-quickstart` - 1. On `Define value for property 'groupId'` please input `com.ms.samples` - 1. On `Define value for property 'artifactId'` please input `simple-app` - 1. For other options, press Enter -1. Open generated `simple-app` folder using vscode -1. Wait and verify `.project` and `.classpath` files and `target` folder are generated. -1. Set BP on the `println` -1. Press F5 to generate `launch.json` and press F5 again to start debug, verify the BP is hit -1. Press F5, verify program terminates with output `Hello World!` - -## Gradle Test -1. create a new folder and create file `build.gradle` with the following text: -
-    apply plugin: 'java'
-
-    // Redefine where to look for app and test code 
-    // In this example, our code is structured as:
-    // project
-    //   └── src
-    //       ├── main
-    //       │   ├── java
-    //       │   └── resources
-    sourceSets {
-        main.java.srcDirs = ['src/main/java']     
-    }
-    
-1. copy the src/main folder from prevous test case `Maven Test` to this folder. -1. Set BP on the `println` -1. Press F5 to generate `launch.json` and press F5 again to start debug, verify the BP is hit -1. Press F5, verify program terminates with output `Hello World!` - -## PetClinic -1. Clone code from `https://github.com/spring-projects/spring-petclinic.git` -1. Open the cloned project and verify `.project` and `.classpath` files and `target` folder are generated. -1. Set BP on `WelcomeController.java` on line `return "welcome";` and `main` on `PetClinicApplication.java` -1. Press F5 to generate `launch.json` and press F5 again to start debug, verify the BP on `main` is hit. -1. Press F5 and verify the BP on `main` is hit again. -1. Wait for output `2017-11-23 20:23:25.230 INFO 9448 --- [ restartedMain] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http) -` -1. Open IE and navigate to `http://localhost:8080`, verify the `welcome` method is hit -1. Press F5 and verify page like `spring-petclinic/target/classes/templates/welcome.html` is displayed on IE with `bad` css. -1. STOP debug and do the test again from step 4 - -## TODO application -1. Clone code from `https://github.com/Microsoft/todo-app-java-on-azure.git` -1. Open the cloned project and verify `.project` and `.classpath` files and `target` folder are generated. -1. Open file `todo-app-java-on-azure\src\main\resources\application.properties` and replaces it with a test configuration(see my email attachment) -1. Set BP on `TodoListController.java` on `addNewTodoItem(@RequestBody TodoItem item)` and `main` on `TodoApplication.java` -1. Press F5 to generate `launch.json` and press F5 again to start debug, verify the BP on `main` is hit. -1. Press F5 to continue, open IE and open `http://localhost:8080/#/TodoList` and add a todo, press Button `Add` and verify the BP on addNewTodoItem is hit, wait a little time to load the stack frame. -1. Press F10 and then Press F5, verify the todo item is added. - - -## Single file build -1. Open file in folder `21.single-file`.(`Open folder` or `Open file`) -2. Press F5, make sure it debugs well. -3. update the src to introduce a compilation error. For example, change `String s = "1";` to `String s = 1;`. Then hit F5, check whether vscode pop out an error message "Build fails, do you want to proceed", click `abort`, make sure there is no more error message. - -## Console application - -1. Open project `23.console-app` in vscode. -2. Press `F5` choose java and make sure `launch.json` is generated. -3. Press `F5` again to start debug. -4. See VSCode `DEBUG CONSOLE` view, verify the program is blocking at the line `Please input your name:`. -5. Terminate debugger. -6. Go to `launch.json`, change the option `console` to `integratedTerminal`. -7. Press `F5` again. -8. See VSCode `TERMINAL` view, and user can input his/her name there and the program continue to run. -9. Terminate debugger. -10.Go to `launch.json`, change the option `console` to `externalTerminal`. -11. Press `F5` again, and the debugger will pop up an external terminal (e.g. cmd.exe). -12. User can input his/her name there and the program continue to run. - -## Java 9 modular application - -1. In your PC, install latest java 9 JDK, configure `JAVA_HOME`. -2. Open project `19.java9-app` in vscode. -3. Press `F5` choose java and verify `launch.json` is auto generated. -4. Press `F5` to start debug. -5. Verify `breakpoint` and `step` work. -6. Click `Call Stack`, it will open the associated source file in VSCode correctly. - -## Multi-root - -1. Clone code from https://github.com/spring-projects/spring-petclinic.git -2. Clone code https://github.com/Microsoft/todo-app-java-on-azure.git -3. Open both above projects in the same VSCode windows under workspace features -4. Navigate to the Debug view -5. Generate configuration for sprintclinic -6. Generate configuration for TODO -7. Check both launch.json to see the selected project's main are generated. - -# Step Filters - -1. Open project `19.java9-app` in vscode. -2. Follow gif to verify step filters feature. -![stepfilter](images/docs/33868694-673f14b0-df3f-11e7-9983-b3cff5842020.gif) - -The new gif: -![stepfilters](images/docs/34507770-69597114-f074-11e7-8f32-027ad1d7a4fd.gif) - -## Hot Code Replace -- Manually trigger hot code replace -1. Open project `24.hotCodeReplace` in vscode. -2. Set breakpoints: NameProvider.java line 12; Person.java line 13. -3. Press `F5` to start debug. -4. The program stopped at the Person.java line 13. -5. Change the value of the line "old" to "new", and save the document. -6. Click the "Hot Code Replace" icon in the debug toolbar to trigger HCR. Check the breakpoint will stop at line 12 . -7. Click F10 to step over, check the value of `res` on the debug view of local variable which should be `new`. - -- Automatically trigger hot code replace -1. Repeat step 1 ~ 4 above. -2. Change `java.debug.settings.hotCodeReplace` to `auto`. -3. Change the value of the line "old" to "new", and save the document. -4. HCR will be automatically triggered. Check the breakpoint will stop at line 12 . -5. Click F10 to step over, check the value of `res` on the debug view of local variable which should be `new`. - -- Disable hot code replace -1. Repeat step 1 ~ 4 above. -2. Change `java.debug.settings.hotCodeReplace` to `never`. -3. Change the value of the line "old" to "new", and save the document. -4. Click F10 to step over, check the value of `res` on the debug view of local variable which should be `old`. - -## Conditional Breakpoints - -1. Open project `simple-java` in vscode, write the following code: -
-package com.ms.samples;
-
-/**
- * Hello world!
- *
- */
-public class App
-{
-    public static void main( String[] args )
-    {
-        int i = 0;
-        for (; i <= 1000; i++) {
-            if (i == 1000)  {
-                System.out.println( "Hello World!" );        
-            }
-        }
-        System.out.println( "Hello World!" );
-    }
-}  
-
-
- -2. set conditional breakpoint on line 13 with condition `i ==1000`, F5 and wait the breakpoint to be hit - -![java-conditional-bp-demo](images/docs/37269785-0ffef8e6-2607-11e8-955f-93548ad5a0ad.gif) - -3. verify i equals 1000 in variable window. -4. F5 and wait for program to exit. - -## Restart Frame - -1. Open project `25.restartFrame` in vscode. -2. Set breakpoint: Person.java line 28 -3. Press `F5` to start debug. -4. The program stopped at the Person.java line 28 -5. Open the debug view, find the call stack of current breakpoint -6. Right click the `HelloWorld$1.run()`, choose `Restart Frame`. Result: It should fail with error message in the right corner. -7. Right click the `Persona.getInternalName()`, choose `Restart Frame`. Result: The program stop at the entry of getInternalName -7. Right click the `Persona.getName()`, choose `Restart Frame`. Result: The program stop at the entry of getName. The above call stacks are popped. - -## Encoding Test for project under chinese directory - -1. Find some project under chinese characters directory. -2. Open it in vscode. -3. Press `F5` to start debug. -4. Verify the program can be launched normally. - - -## Encoding Test for text file encoding - -1. Open a hello world project, and print `System.out.println("中文字符3323")`. -2. Press F5 to start debug. -3. Verify the output in DEBUG CONSOLE view is correctly displayed. - - -## Caught and Uncaught exceptions test - -1. Open project `simple-java` in vscode, change code from line12 to line16 with following code: -``` -for (; i <= 1000; i++) { - if (i == 1) { - throw new IllegalStateException(); - } - } -``` -2. Open debug view and tick both Uncaught exceptions and Caught exeptions -3. Press F5, verify progress stop at line 14 -4. Press F5 again, verify following messages in debug console -``` -Exception in thread "main" java.lang.IllegalStateException - at com.ms.samples.App.main(App.java:14) -``` - - -## Restart Frame - -1. Open project `25.restartFrame` in vscode. -2. Set breakpoint: Person.java line 28 -3. Press `F5` to start debug. -4. The program stopped at the Person.java line 28 -5. Open the debug console, input `s` or `g` , the auto complete window will pop up with intellisense support. - -## Logpoint - -1. Open a project in vscode, and add a logpoint. The log message is the simple text message. If you want to print the expression, you need wrap it with a curly bracket `{ javaExpression }`. -2. Launch java debugger and continue your program. -3. When the logpoint code branch is hit, it just log the message to the console and doesn't stop your program. - -![logpoint](images/docs/41949312-77627a40-79f3-11e8-9fd2-def4fa06e28d.gif) - - -## Start without debugging -1. Open a Hello world project in VS Code. -2. Set a breakpoint. -3. Press Ctrl+F5 to start without debugging. -4. Verify that the program starts without hitting the breakpoint. -5. Open a spring-boot project in VS Code. -6. Press Ctrl+F5 to start without debugging. -7. Verify that the program starts, and there is no information in "watch" and "callstack" view. -8. Click the "pause" button in the toolbar, it should NOT pause the program. -9. Click the "stop" button in the toolbar, it should stop the program. - - -## Environment Variables -1. Open `26.environmentVariables` in vscode. -2. Press F5 to start. -3. Verify the output in Debug Console should be as following: - ``` - CustomEnv: This env is for test plan. - SystemPath: - FileEnv: Successfully loaded an env from a file. - ``` - -## Runtime classpath entry -1. Open `27.runtimeClassEntry` in vscode. -2. Press F5 to start. -3. Verify the output in Debug Console should be as following: - ``` - Tomcat started on port(s): 8080 (http) - ``` - - - -## Resolve Variables -1. Open `17.argstest` in vscode. -2. Change the launch.json as following: -``` -"mainClass": "test.${fileBasenameNoExtension}", -"args": [ "\"${execPath}\"", - "${env:APPDATA}", - "${fileExtname}", - "${workspaceRootFolderName}"] -] -``` -3. Make a BP at line one of main method, Keep ArgsTest.java open and press F5 to start. -3. Verify the `args` has the values: - - "C:\Users\andxu\AppData\Local\Programs\Microsoft VS Code\Code.exe" - - "C:\Users\andxu\AppData\Roaming" - - ".json" - - "17.argstest" - -## Args and vmArgs -1. Open `17.argstest` in vscode. -2. Change the launch.json as following: -``` - "mainClass": "test.ArgsTest", - "args": ["a b", "foo \\\"bar"], - "vmArgs": ["-Xms64M", "-Xmx128M", "-Dfoo= \\bar"] -``` -3. Add the following statement to get the properties: -``` - String foo = (String) System.getProperties().get("foo"); -``` -4. Press F5 to verify the variables should be like this: - - ![args](images/docs/args.PNG) - -## Classpath shortener for long classpath project -1. Open `longclasspath` project in VS Code. -2. Append the following config to the launch.json: -``` - "shortenCommandLine": "none" -``` -3. Click Run or Debug CodeLens. - - On Windows, it should pop up an error box saying "CreateProcess error"=206, The filename or extension is too long". - - On Linux and Macos, it may succeed. -4. On Windows/Linux/Macos, modify the launch.json with the following combinations. Click Run/Debug both should succeed. -``` - "shortenCommandLine": ""/"auto"/"jarmanifest"/"argfile", // argfile requires your Java version is 9 and higher. - "console": ""/"internalConsole"/"integratedTerminal"/"externalTerminal" - -``` - -## Jump to source code when clicking stack trace in DEBUG CONSOLE -1. Open `28.debugfeatures` project in VS Code. -2. Open `StackTrace.java` file. -3. Click Run or Debug CodeLens, check the DEBUG CONSOLE. It's expected to render the source link for each stack trace line, and clicking the link should open the associated Java file in the editor. - -![image](https://user-images.githubusercontent.com/14052197/56104487-7ecc4880-5f6a-11e9-89aa-b9c66b6f318b.png) - -## Show the logical structure view for the Map and List variables -1. Open `28.debugfeatures` project in VS Code. -2. Open `LogicalStructure.java` file, and add a breakpoint at line 30. -3. Click Debug CodeLens, check the Variable viewlet. -- emptyMap - non-expandable -- bookset - Show two children (0: LinkedHashMap$Entry, 1: LinkedHashMap$Entry) -- bigStore - Lazy loading the children and show the index range first `[0..9999]` ... -- emptyList - non-expandable -- list - Show two children (0: LogicalStructure$Foo, 1: LogicalStructure$Foo). -- bigList - Lazy loading the children and show the index range first `[0..9999]` ... - -![image](https://user-images.githubusercontent.com/14052197/56104630-1e89d680-5f6b-11e9-87a5-8a17a2ed33b5.png) - -## Show toString object view -1. Open `28.debugfeatures` project in VS Code. -2. Open `Variables.java` file, and add a breakpoint at line 39. -3. Click Debug CodeLens, check the Variable viewlet. -4. Verify the highlight value in the screenshot below. -![image](https://user-images.githubusercontent.com/14052197/58676978-c9741980-838c-11e9-9f0e-48658fa06bd7.png) - -## Enable Java 12 preview for standalone Java files -1. Install JDK-12. -2. Open `28.debugfeatures` project in VS Code, and open `Java12Preview.java` file. -3. Uncomment `"java.home"` in `./vscode/settings.json`. -4. Run VS Code commmand `Java: clean Java language server workspace`, and click `Restart and delete` button in the prompted message box to reload VS Code. -5. Add a breakpoint at line 7 of `Java12Preview.java`, and click Debug CodeLens. The debugger should run successfully. -6. Open VS Code menu `Help -> Open Process Explorer`, find the Java Debuggger process in the `Process Explorer`. And its command line string should contain `--enable-preview` flag. - -![image](https://user-images.githubusercontent.com/14052197/56105328-40d12380-5f6e-11e9-94bc-8f3f3d298750.png) - -## Auto resolve classpath for maven projects -1. Open `resolveClasspath` project in VS Code and wait for Java extensions are activated. -2. Open `kie-client/src/main/java/client/EmbedMain.java` file, and click `Run` or `Debug` CodeLens to launch the application. Check DEBUG CONSOLE view to verify it is launched successfully. -3. Open `insurance-decision/src/test/java/testscenario/Launch.java` file, and click `Run` or `Debug` CodeLens to launch the application. Check whether the message `Main Class in Test Folder!` is printed in DEBUG CONSOLE view. \ No newline at end of file diff --git a/ThirdPartyNotices.txt b/ThirdPartyNotices.txt new file mode 100644 index 00000000..063da394 --- /dev/null +++ b/ThirdPartyNotices.txt @@ -0,0 +1,174 @@ +vscode-java-debug + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +This project incorporates components from the projects listed below. The original copyright notices and the licenses under which Microsoft received such components are set forth below. Microsoft reserves all rights not expressly granted herein, whether by implication, estoppel or otherwise. + +1. omichelsen/compare-versions (https://github.com/omichelsen/compare-versions) +2. motdotla/dotenv (https://github.com/motdotla/dotenv) +3. lodash/lodash (https://github.com/lodash/lodash) +4. uuidjs/uuid (https://github.com/uuidjs/uuid) +5. Eskibear/vscode-extension-telemetry-wrapper (https://github.com/Eskibear/vscode-extension-telemetry-wrapper) +6. Microsoft/vscode-languageserver-node (https://github.com/Microsoft/vscode-languageserver-node) + + +%% omichelsen/compare-versions NOTICES AND INFORMATION BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2015-2017 Ole Michelsen + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +========================================= +END OF omichelsen/compare-versions NOTICES AND INFORMATION + +%% motdotla/dotenv NOTICES AND INFORMATION BEGIN HERE +========================================= +BSD-2-Clause License + +Copyright (c) 2015, Scott Motte +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +========================================= +END OF motdotla/dotenv NOTICES AND INFORMATION + +%% lodash/lodash NOTICES AND INFORMATION BEGIN HERE +========================================= +The MIT License + +Copyright JS Foundation and other contributors + +Based on Underscore.js, copyright Jeremy Ashkenas, +DocumentCloud and Investigative Reporters & Editors + +This software consists of voluntary contributions made by many +individuals. For exact contribution history, see the revision history +available at https://github.com/lodash/lodash + +The following license applies to all parts of this software except as +documented below: + +==== + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +==== + +Copyright and related rights for sample code are waived via CC0. Sample +code is defined as all source code displayed within the prose of the +documentation. + +CC0: http://creativecommons.org/publicdomain/zero/1.0/ + +==== + +Files located in the node_modules and vendor directories are externally +maintained libraries used by this software which have their own +licenses; we recommend you read them, as their terms may differ from the +terms above. +========================================= +END OF lodash/lodash NOTICES AND INFORMATION + +%% uuidjs/uuid NOTICES AND INFORMATION BEGIN HERE +========================================= +The MIT License (MIT) + +Copyright (c) 2010-2020 Robert Kieffer and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF uuidjs/uuid NOTICES AND INFORMATION + +%% Eskibear/vscode-extension-telemetry-wrapper NOTICES AND INFORMATION BEGIN HERE +========================================= +MIT License + +Copyright 2018 Yan Zhang + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF Eskibear/vscode-extension-telemetry-wrapper NOTICES AND INFORMATION + +%% Microsoft/vscode-languageserver-node NOTICES AND INFORMATION BEGIN HERE +========================================= +Copyright (c) Microsoft Corporation + +All rights reserved. + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software +is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT +OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +========================================= +END OF Microsoft/vscode-languageserver-node NOTICES AND INFORMATION \ No newline at end of file diff --git a/Troubleshooting.md b/Troubleshooting.md index 7807341e..b47793cb 100644 --- a/Troubleshooting.md +++ b/Troubleshooting.md @@ -126,7 +126,7 @@ In launch mode, the debugger resolves the classpaths automatically based on the ### Try: 1. Check whether the class name specified in `mainClass` exists and is in the right form. The debugger only works with fully qualified class names, e.g. `com.microsoft.app.Main`. -2. Check whether the `projectName` is correct. The actual project name is not always the same to the folder name you see in the File Explorer. Please check the value specified by `projectDescription/name` in the *.project* file, or the `artificatId` in the *pom.xml* for maven project, or the folder name for gradle project. +2. Check whether the `projectName` is correct. The actual project name is not always the same to the folder name you see in the File Explorer. Please check the value specified by `projectDescription/name` in the *.project* file, or the `artifactId` in the *pom.xml* for maven project, or the folder name for gradle project. 3. If the problem persists, please try to use the debugger to regenerate the debug configurations in *launch.json*. Remove the existing *launch.json* file and press F5. The debugger will automatically generate a new *launch.json* with the right debug configurations. ## Request type "xyz" is not supported. Only "launch" and "attach" are supported. diff --git a/Troubleshooting_encoding.md b/Troubleshooting_encoding.md new file mode 100644 index 00000000..834d3972 --- /dev/null +++ b/Troubleshooting_encoding.md @@ -0,0 +1,84 @@ +# Troubleshooting Guide for Encoding Issues + +This document provides a guide mostly for Windows users to solve common Java encoding issues. + +## 1. Background +Computers can only understand the binary data such as 0 and 1, and it uses charset to encode/decode the data into real-world characters. When two processes interact with each other for I/O, they have to use the compatible charset for encoding and decoding, otherwise garbled characters will probably appear. macOS and Linux use UTF-8 everywhere and encoding is not a problem for them. For Windows, however, the default charset is not UTF-8 and is platform-dependent, which can lead to inconsistent encoding between different tools. + +## 2. Common Problems +Below are the typical encoding problems when running a Java program on Windows terminal. + +2.1) The file or directory name contains unicode characters, Java launcher cannot find the corresponding classpath or main class well. +``` +C:\Test>java -cp 中文目录 Hello +Error: Could not find or load main class Hello +``` + +``` +C:\Test>java -cp ./Exercises 练习 +Error: Could not find or load main class ?? +Caused by: java.lang.ClassNotFoundException: ?? +``` + +2.2) The string literals with unicode characters appear garbled when printed to the terminal. +```java +public class Hello { + public static void main(String[] args) { + System.out.println("你好!"); + } +} +``` + +``` +C:\Test>java -cp ./Exercises Hello +??! +``` + +2.3) Garbled characters when Java program interacts with terminal for I/O. + +```java +import java.util.Scanner; + +public class Hello { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.println(scanner.nextLine()); + } +} +``` + +``` +C:\Test>chcp +65001 + +C:\Test>java -Dfile.encoding=UTF-8 -cp ./Exercises Hello +你好 +�� +``` + +## 3.Troubleshooting Suggestions +The following diagram shows the parts of encoding that may be involved when writing and running Java in VS Code. +

+ encoding_diagram +
+ Encoding on Windows +

+ +- During the compilation phase, VS Code Java extension uses the file encoding from VS Code settings to read .java source files and compile .class files. Encoding is consistent between editor and Java extension. + +- During the run/debug phase, Java extension launches the application in the terminal by default. Most encoding problems occur because the terminal and JVM use incompatible charsets for data processing, or use charsets that do not support the target unicode characters. + - JVM - Uses a default charset compatible with the system locale of Windows platform, and you can change it by using the JVM argument `"-Dfile.encoding"`, or by using `"encoding"` setting in launch.json when running through Java debugger extension. + - Windows Terminals - Uses code page to handle encoding, and you can use `"chcp"` command to view and change the code page. + +To solve the encoding problems, the straightforward idea is to use UTF-8 in all toolchains. But unfortunately Windows terminals (such as cmd) do not support UTF-8 perfectly. Therefore, the alternative idea is to let the terminal and JVM use compatible character sets for data processing. + +### 3.1) Fix Suggestion : Change system locale to the target language. + +On Windows, when you change the system locale, the default Java charset will be changed to one compatible with the system locale, and the terminal's (e.g. cmd) code page will be automatically updated to be consistent as well. Therefore, changing system locale to the target language can solve most encoding issues on Windows. This is also suggested by Java site https://www.java.com/en/download/help/locale.html. + +The following screenshot shows how to change the system locale in Windows. for example, if I want to use a terminal to enter Chinese characters into a Java program, I can set the Windows system locale to Chinese. The default Java charset will be `"GBK"` and the cmd codepage will be `"936"`, which will support Chinese characters nicely. +

+ change_system_locale +
+ Change System Locale +

diff --git a/bundled/agents/README.md b/bundled/agents/README.md new file mode 100644 index 00000000..3dab2c1d --- /dev/null +++ b/bundled/agents/README.md @@ -0,0 +1,195 @@ +# Java Debug Agent + +The Java Debug Agent is an AI-powered debugging assistant that integrates with GitHub Copilot Chat to help you debug Java applications using natural language. + +## Overview + +Instead of manually setting breakpoints and inspecting variables, you can simply describe your debugging task in natural language. The agent will: + +1. Analyze your code to form hypotheses +2. Set targeted breakpoints +3. Inspect variables and evaluate expressions +4. Find the root cause of bugs + +## Requirements + +- VS Code 1.95.0 or later +- [Language Support for Java by Red Hat](https://marketplace.visualstudio.com/items?itemName=redhat.java) +- [Debugger for Java](https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-debug) +- GitHub Copilot Chat extension + +## Getting Started + +### 1. Open Copilot Chat + +Press `Ctrl+Shift+I` (Windows/Linux) or `Cmd+Shift+I` (macOS) to open Copilot Chat. + +### 2. Switch to JavaDebug Agent Mode + +In the Copilot Chat panel, click on the agent selector (usually shows "Copilot" or current agent name) and select **JavaDebug** from the dropdown list. + +![Select Agent](images/javadebug.png) + + +### 3. Enter Your Debugging Request + +Once in JavaDebug mode, simply type your debugging request: + +``` +Why am I getting a NullPointerException in OrderService? +``` + +![Invoke Agent](images/invoke-agent.png) + + +### 4. Let the Agent Work + +The agent will: +- Read relevant code files +- Form a hypothesis about the bug +- Set breakpoints at strategic locations +- Start or attach to a debug session +- Inspect variables to verify the hypothesis +- Report the root cause + +![Agent Working](images/agent-working.png) + + +## Example Usage + +### Debug a NullPointerException + +``` +I'm getting NPE when calling userService.getUser() +``` + +The agent will: +1. Read `UserService.java` +2. Hypothesize which variable might be null +3. Set a breakpoint before the NPE +4. Check variable values +5. Report: "The `user` variable is null because `findById()` returns null when ID doesn't exist" + +### Debug Wrong Calculation Result + +``` +The calculateTotal() method returns wrong value +``` + +### Debug with Specific Input + +``` +Debug processOrder with orderId=456 +``` + +### Debug Multi-threaded Issues + +``` +I suspect a race condition in the worker threads +``` + +## Agent Capabilities + +| Capability | Description | +|------------|-------------| +| **Start Debug Session** | Launch or attach to Java applications | +| **Set Breakpoints** | Set conditional or unconditional breakpoints | +| **Inspect Variables** | View local variables, fields, and objects | +| **Evaluate Expressions** | Execute Java expressions in debug context | +| **Step Through Code** | Step over, step into, step out | +| **Multi-thread Support** | Debug concurrent applications | +| **Stack Trace Analysis** | View and navigate call stacks | + +## How It Works + +The agent uses **hypothesis-driven debugging**: + +``` +┌─────────────────────────────────────────┐ +│ 1. STATIC ANALYSIS │ +│ Read code, understand the problem │ +└─────────────────┬───────────────────────┘ + ↓ +┌─────────────────────────────────────────┐ +│ 2. FORM HYPOTHESIS │ +│ "Variable X is null at line Y" │ +└─────────────────┬───────────────────────┘ + ↓ +┌─────────────────────────────────────────┐ +│ 3. SET BREAKPOINT │ +│ At the location to verify │ +└─────────────────┬───────────────────────┘ + ↓ +┌─────────────────────────────────────────┐ +│ 4. VERIFY │ +│ Check if hypothesis is correct │ +│ ├─ YES → Report root cause │ +│ └─ NO → Form new hypothesis │ +└─────────────────────────────────────────┘ +``` + +## Tips for Best Results + +### Stay in Agent Mode + +Make sure you're in **JavaDebug** agent mode (check the agent selector in Chat panel). If you switch back to default Copilot mode, the debugging tools won't be available. + +### Be Specific + +``` +✅ Good: "Why does getUserById return null when id=123?" +❌ Vague: "Something is wrong" +``` + +### Mention the Error + +``` +✅ Good: "Getting ArrayIndexOutOfBoundsException in processItems()" +❌ Vague: "Debug processItems" +``` + +### Provide Context + +``` +✅ Good: "The order total is $0 instead of $150 for order 456" +❌ Vague: "Wrong calculation" +``` + +## Troubleshooting + +### Agent Can't Find the File + +Make sure the Java project is properly loaded. Check that: +- The Java extension is activated (look for Java icon in status bar) +- The project is imported (check Java Projects view) + +### Debug Session Won't Start + +Ensure: +- Your project compiles successfully +- No other debug session is running +- The main class can be found + +### Breakpoint Not Hit + +The agent will tell you to trigger the scenario. You need to: +1. Run the part of your application that executes the code +2. The breakpoint will be hit when the code path is executed + +## Limitations + +- Requires an active Java project with proper configuration +- Cannot debug remote applications without proper attach configuration +- Performance may vary with large codebases + +## Feedback + +If you encounter issues or have suggestions, please: +- File an issue on [GitHub](https://github.com/microsoft/vscode-java-debug/issues) +- Include the agent's response and your debugging request + +## See Also + +- [Debugger for Java Documentation](https://github.com/microsoft/vscode-java-debug) +- [No-Config Debug](../scripts/noConfigScripts/README.md) +- [Troubleshooting Guide](../../Troubleshooting.md) diff --git a/bundled/agents/debug.agent.md b/bundled/agents/debug.agent.md new file mode 100644 index 00000000..168dd465 --- /dev/null +++ b/bundled/agents/debug.agent.md @@ -0,0 +1,723 @@ +--- +description: An expert Java debugging assistant that uses hypothesis-driven debugging to find root causes systematically +tools: ['execute/getTerminalOutput', 'execute/runInTerminal', 'read/problems', 'read/readFile', 'read/terminalLastCommand', 'search', 'vscjava.vscode-java-debug/debugJavaApplication', 'vscjava.vscode-java-debug/setJavaBreakpoint', 'vscjava.vscode-java-debug/debugStepOperation', 'vscjava.vscode-java-debug/getDebugVariables', 'vscjava.vscode-java-debug/getDebugStackTrace', 'vscjava.vscode-java-debug/evaluateDebugExpression', 'vscjava.vscode-java-debug/getDebugThreads', 'vscjava.vscode-java-debug/removeJavaBreakpoints', 'vscjava.vscode-java-debug/stopDebugSession', 'vscjava.vscode-java-debug/getDebugSessionInfo'] +--- + +# Java Debugging Agent + +You are an expert Java debugging assistant using **hypothesis-driven debugging**. You systematically form hypotheses, set targeted breakpoints, and verify assumptions through runtime inspection. + +## ⚠️ CRITICAL RULES + +1. **NO BREAKPOINT = NO DEBUG** - Only proceed with debug operations AFTER setting at least one breakpoint +2. **HYPOTHESIS FIRST** - Always state your hypothesis BEFORE setting a breakpoint +3. **TARGETED INSPECTION** - Don't dump all variables; only inspect what's relevant to your hypothesis +4. **ONE HYPOTHESIS AT A TIME** - Verify one hypothesis before moving to the next +5. **CLEANUP BASED ON LAUNCH METHOD** - Check `Launch Method` field: if "Can be safely stopped" → cleanup. If "Stopping will disconnect" → do NOT cleanup + +--- + +## The Hypothesis-Driven Debugging Loop + +``` +┌─────────────────────────────────────────────────────────────────────────┐ +│ HYPOTHESIS-DRIVEN DEBUGGING │ +├─────────────────────────────────────────────────────────────────────────┤ +│ │ +│ ╔═══════════════════════════════════════════════════════════════════╗ │ +│ ║ PHASE 1: STATIC ANALYSIS ║ │ +│ ║ • Read and understand the code ║ │ +│ ║ • Form specific hypothesis about the bug ║ │ +│ ╚═══════════════════════════════════════════════════════════════════╝ │ +│ ↓ │ +│ ╔═══════════════════════════════════════════════════════════════════╗ │ +│ ║ PHASE 2: SETUP ║ │ +│ ║ • Set breakpoint at location relevant to hypothesis ║ │ +│ ║ • Check/wait for debug session ║ │ +│ ╚═══════════════════════════════════════════════════════════════════╝ │ +│ ↓ │ +│ ╔═══════════════════════════════════════════════════════════════════╗ │ +│ ║ PHASE 3: DYNAMIC VERIFICATION ║ │ +│ ║ • Inspect ONLY variables relevant to hypothesis ║ │ +│ ║ • Evaluate specific expressions to test hypothesis ║ │ +│ ║ ║ │ +│ ║ Result A: Hypothesis CONFIRMED → Root cause found! Report & Exit ║ │ +│ ║ Result B: Hypothesis REJECTED → Form new hypothesis, loop back ║ │ +│ ╚═══════════════════════════════════════════════════════════════════╝ │ +│ ↓ │ +│ ╔═══════════════════════════════════════════════════════════════════╗ │ +│ ║ PHASE 4: CLEANUP (check Launch Method) ║ │ +│ ║ • If "Can be safely stopped": Remove breakpoints, stop session ║ │ +│ ║ • If "Stopping will disconnect": Do NOT cleanup ║ │ +│ ╚═══════════════════════════════════════════════════════════════════╝ │ +│ │ +└─────────────────────────────────────────────────────────────────────────┘ +``` + +--- + +## Phase 1: Static Analysis (ALWAYS DO THIS FIRST) + +### 1.1 Read and Understand the Code + +``` +search/codebase("method name or error keyword") +readFile("ClassName.java") +``` + +### 1.2 Form a Specific Hypothesis + +**This is the most critical step!** State your hypothesis explicitly: + +```markdown +## My Hypothesis + +Based on code analysis, I believe the bug is: +- **What**: `user` variable is null when `user.getName()` is called +- **Where**: Line 52 in OrderService.java +- **Why**: The `findById()` might return null when ID doesn't exist + +I will verify this by setting a breakpoint at line 52 and checking if `user == null`. +``` + +### 1.3 Hypothesis Types for Common Bugs + +| Bug Type | Hypothesis Template | +|----------|-------------------| +| NullPointerException | "Variable X is null at line Y because Z" | +| Wrong Result | "The calculation at line Y produces wrong value because condition Z is incorrect" | +| Array Index Out of Bounds | "Index X exceeds array length at line Y because loop condition is wrong" | +| Infinite Loop | "Loop at line Y never terminates because condition Z is always true" | +| Concurrency | "Thread A modifies X while Thread B reads it without synchronization" | + +--- + +## Phase 2: Setup (Breakpoint Gates All Debug Actions) + +### 2.1 Set Breakpoint Based on Hypothesis + +``` +vscjava.vscode-java-debug/setJavaBreakpoint(filePath="OrderService.java", lineNumber=52) +``` + +**Remember your breakpoint location** - you'll compare it with the paused location later. + +### 2.2 Check Session State (Call ONCE, Then Act!) + +``` +vscjava.vscode-java-debug/getDebugSessionInfo() +``` + +**⚠️ CRITICAL: Call this tool ONCE, read the response, then take action. DO NOT call it in a loop!** + +The tool will return one of these states: + +**State A: 🔴 PAUSED at breakpoint** +``` +═══════════════════════════════════════════ +🔴 DEBUG SESSION PAUSED +═══════════════════════════════════════════ +🔴 Status: PAUSED (breakpoint) + +📍 Current Location: +• File: /path/to/OrderService.java +• Line: 52 +• Method: OrderService.java:52 in processOrder +• Thread: main (ID: 1) +``` +→ **Action**: Proceed immediately to Phase 3 (Inspect variables) + +**State B: 🟢 RUNNING (Not at breakpoint yet)** +``` +═══════════════════════════════════════════ +🟢 DEBUG SESSION RUNNING +═══════════════════════════════════════════ +🟢 Status: RUNNING + +⏳ WAITING - Session is running, not yet at breakpoint +``` +→ **Action**: PAUSE your tool calls (do NOT end the debugging workflow). Tell user: "Breakpoint set. Program is running but hasn't hit the breakpoint yet. Please trigger the relevant operation. Let me know when done, and I'll continue the analysis." + +**⚠️ IMPORTANT: This is NOT the end of debugging! The workflow is PAUSED, waiting for the breakpoint to be hit.** + +**State C: ❌ NO SESSION** +``` +❌ No active debug session found. +``` +→ **Action**: STOP calling tools. Tell user: "Please start a debug session first, or use vscjava.vscode-java-debug/debugJavaApplication to start one." + +### 2.3 Decision Matrix (STRICT!) + +| Tool Response | Your Action | +|--------------|-------------| +| Shows `🔴 DEBUG SESSION PAUSED` with file/line | ✅ Immediately call `vscjava.vscode-java-debug/evaluateDebugExpression` or `vscjava.vscode-java-debug/getDebugVariables` | +| Shows `🟢 DEBUG SESSION RUNNING` | ⏸️ PAUSE & WAIT! Tell user to trigger the scenario, then **continue** when user confirms | +| Shows `❌ No active debug session` | ⛔ STOP! Tell user to start debug session | + +**🚫 NEVER DO THIS:** +``` +vscjava.vscode-java-debug/getDebugSessionInfo() // Returns RUNNING +vscjava.vscode-java-debug/getDebugSessionInfo() // Still RUNNING +vscjava.vscode-java-debug/getDebugSessionInfo() // Still RUNNING... (LOOP!) +``` + +**✅ CORRECT BEHAVIOR:** +``` +vscjava.vscode-java-debug/getDebugSessionInfo() // Returns RUNNING +// PAUSE HERE! Tell user: "Waiting for breakpoint. Please trigger the scenario and let me know when done." +// WAIT FOR USER RESPONSE - debugging is NOT finished, just waiting for user action +``` + +**When user confirms they triggered the scenario:** +``` +vscjava.vscode-java-debug/getDebugSessionInfo() // Check again - should now be PAUSED +// If PAUSED → Continue to Phase 3 (inspect variables) +// If still RUNNING → Ask user to verify the scenario triggers the breakpoint location +// If NO SESSION → Program may have terminated; you can safely restart debugging +``` + +### 2.4 Automatic Cleanup on Restart + +**Good news:** The `debugJavaApplication` tool automatically cleans up before starting: +- Stops any existing Java debug session (avoids JDWP port conflicts) +- Closes existing "Java Debug" terminals (avoids confusion) + +This means you can safely call `debugJavaApplication` again without manually stopping the previous session. The tool handles cleanup for you. + +### 2.5 Fallback: When debugJavaApplication Fails or Times Out + +When `debugJavaApplication` returns timeout or failure, follow this recovery workflow: + +**Step 1: Check terminal output for errors** +``` +execute/getTerminalOutput(id="Java Debug") +``` + +Look for common errors: +- `ClassNotFoundException` → Wrong class name or classpath +- `NoClassDefFoundError` → Missing dependencies +- `Error: Could not find or load main class` → Compilation issue +- Build errors from Maven/Gradle + +**Step 2: Report findings and ask user to start manually** + +Based on terminal output, tell the user what went wrong and ask them to start the debug session manually: + +```markdown +"Debug session failed to start automatically. + +**Error found**: [describe error from terminal] + +Please start a debug session manually: +1. Fix the error above, OR +2. Use VS Code's 'Run and Debug' (F5) with your own launch configuration, OR +3. Use 'Run > Attach to Java Process' if your application is already running with debug enabled + +Let me know when the debug session is ready, and I'll continue the analysis." +``` + +**Step 3: Wait for user confirmation** + +⛔ **STOP HERE and end your response.** Wait for user to reply (e.g., "ready", "started", "continue"). + +**Step 4: Verify session after user confirms** + +When user says the session is ready: +``` +vscjava.vscode-java-debug/getDebugSessionInfo() +``` + +Then proceed based on session state: +- 🔴 PAUSED → Continue to Phase 3 +- 🟢 RUNNING → Tell user to trigger the scenario +- ❌ NO SESSION → Ask user to try again + +**Complete Fallback Example:** +``` +1. vscjava.vscode-java-debug/setJavaBreakpoint(filePath="App.java", lineNumber=25) + → ✓ Breakpoint set + +2. vscjava.vscode-java-debug/debugJavaApplication(target="App", workspacePath="...") + → ⚠️ Timeout: session not detected within 15 seconds + +3. execute/getTerminalOutput(id="Java Debug") + → "Error: Could not find or load main class App" + +4. Tell user: + "The debug session failed to start. Terminal shows: 'Could not find or load main class App'. + This usually means the class wasn't compiled or the classpath is incorrect. + + Please either: + - Run 'mvn compile' or 'gradle build' first, then try again + - Or start a debug session manually using VS Code's Run and Debug + + Let me know when ready." + +5. [STOP - Wait for user response] + +6. User: "ok, started" + +7. vscjava.vscode-java-debug/getDebugSessionInfo() + → 🔴 PAUSED at App.java:25 + +8. Continue with Phase 3 (hypothesis verification)... +``` + +--- + +## Phase 3: Dynamic Verification (Hypothesis Testing) + +### 3.1 TARGETED Inspection (Don't Dump Everything!) + +❌ **BAD** - Dumping all variables: +``` +vscjava.vscode-java-debug/getDebugVariables(scopeType="all") // Returns 50+ variables, wastes context +``` + +✅ **GOOD** - Targeted inspection based on hypothesis: +``` +// Hypothesis: "user is null" +vscjava.vscode-java-debug/evaluateDebugExpression(expression="user == null") // Returns: true + +// Only if needed, get specific details: +vscjava.vscode-java-debug/evaluateDebugExpression(expression="orderId") // Returns: 456 +vscjava.vscode-java-debug/evaluateDebugExpression(expression="orderRepository.findById(orderId).isPresent()") // Returns: false +``` + +### 3.2 Verify Your Hypothesis + +**If Hypothesis CONFIRMED:** +```markdown +## Hypothesis Verified ✓ + +My hypothesis was correct: +- `user` is indeed null at line 52 +- `orderRepository.findById(456)` returns Optional.empty() +- Root cause: Order ID 456 doesn't exist in database + +**Fix**: Add null check or use `orElseThrow()` with meaningful exception. +``` +→ Proceed to Phase 4 (Cleanup) + +**If Hypothesis REJECTED:** +```markdown +## Hypothesis Rejected ✗ + +My hypothesis was wrong: +- `user` is NOT null (user = User@abc123) +- Need to form new hypothesis... + +**New Hypothesis**: The NPE occurs inside `user.getOrders()` because `orders` list is null. +``` +→ Remove old breakpoint, set new one, loop back to Phase 2 + +### 3.3 Step Strategically (Not Aimlessly!) + +Only step when you have a reason: + +``` +// I need to see what happens AFTER this line executes +vscjava.vscode-java-debug/debugStepOperation(operation="stepOver") + +// I need to see what happens INSIDE this method call +vscjava.vscode-java-debug/debugStepOperation(operation="stepInto") +``` + +**Never step without stating why:** +```markdown +I'm stepping over line 52 to see the result of `processOrder()` call. +After this step, I'll check if `result` is null. +``` + +--- + +## Phase 4: Cleanup (Based on Launch Method) + +After finding root cause OR when giving up, cleanup depends on how the debug session was started. + +Check the `Launch Method` field from `vscjava.vscode-java-debug/getDebugSessionInfo()` output: + +### If Launch Method shows: `✅ Can be safely stopped` + +This includes: +- `debugjava (No-Config)` - Started by the debug_java_application tool +- `VS Code launch` - Started via VS Code's launch configuration + +You can safely cleanup: + +``` +vscjava.vscode-java-debug/removeJavaBreakpoints() +vscjava.vscode-java-debug/stopDebugSession(reason="Analysis complete - root cause identified") +``` + +### If Launch Method shows: `⚠️ Stopping will disconnect from process` + +This means user manually attached to an existing Java process. + +**Do NOT cleanup.** Keep breakpoints and keep the session connected: +- The user attached to a running process they want to keep running +- Stopping the session would disconnect from the process +- Removing breakpoints might interfere with their ongoing debugging + +Simply report your findings and let the user decide what to do next. + +--- + +## Context Management Best Practices + +### Don't Overflow LLM Context + +Java objects can be huge. Use targeted evaluation: + +| Instead of... | Use... | +|--------------|--------| +| `vscjava.vscode-java-debug/getDebugVariables(scopeType="all")` | `vscjava.vscode-java-debug/evaluateDebugExpression("specificVar")` | +| Dumping entire List | `vscjava.vscode-java-debug/evaluateDebugExpression("list.size()")` then `vscjava.vscode-java-debug/evaluateDebugExpression("list.get(0)")` | +| Viewing entire object | `vscjava.vscode-java-debug/evaluateDebugExpression("obj.getClass().getName()")` then specific fields | + +### Evaluate Expressions to Test Hypotheses + +``` +// Test null hypothesis +vscjava.vscode-java-debug/evaluateDebugExpression(expression="user == null") + +// Test collection state +vscjava.vscode-java-debug/evaluateDebugExpression(expression="orders != null && !orders.isEmpty()") + +// Test calculation +vscjava.vscode-java-debug/evaluateDebugExpression(expression="total == price * quantity") + +// Check object type +vscjava.vscode-java-debug/evaluateDebugExpression(expression="obj instanceof ExpectedType") +``` + +--- + +## Multi-Threading Debugging + +### Understanding Thread States + +**Debugger-Level States** (from `getDebugThreads`): + +``` +vscjava.vscode-java-debug/getDebugThreads() +``` + +Returns thread list with debugger states: +``` +═══════════════════════════════════════════ +THREADS (4 total) +═══════════════════════════════════════════ + +Thread #1: main [🔴 SUSPENDED] at App.java:25 +Thread #14: worker-1 [🟢 RUNNING] +Thread #15: worker-2 [🔴 SUSPENDED] at Worker.java:42 +Thread #16: pool-1-thread-1 [🟢 RUNNING] +``` + +⚠️ **Limitation**: Debugger states only show SUSPENDED or RUNNING. Threads showing as 🟢 RUNNING without stack frames might actually be BLOCKED, WAITING, or TIMED_WAITING in Java terms. + +### Getting Detailed JVM Thread States (Using jstack) + +When you need to diagnose deadlocks, lock contention, or blocking issues, use the **jstack** JVM tool via terminal: + +```bash +# Step 1: Find the Java process ID +jps -l + +# Step 2: Get complete thread dump with lock info and deadlock detection +jstack +``` + +**Why jstack instead of a debugger tool?** +- ✅ **Complete stack traces** for ALL threads (including BLOCKED ones) +- ✅ **Automatic deadlock detection** with detailed lock ownership +- ✅ **Works reliably** - no evaluate expression limitations +- ✅ **Shows native frames** and JVM internal threads + +**Example jstack output:** +``` +Found one Java-level deadlock: +============================= +"worker-1": + waiting to lock monitor 0x00007f9b2c003f08 (object 0x00000000d6e30208, a java.lang.Object), + which is held by "worker-2" +"worker-2": + waiting to lock monitor 0x00007f9b2c004018 (object 0x00000000d6e30210, a java.lang.Object), + which is held by "worker-1" + +"worker-1" #14 prio=5 os_prio=0 tid=0x00007f9b28001000 nid=0x5f03 waiting for monitor entry + java.lang.Thread.State: BLOCKED (on object monitor) + at com.example.Service.methodA(Service.java:30) + - waiting to lock <0x00000000d6e30208> (a java.lang.Object) + - locked <0x00000000d6e30210> (a java.lang.Object) + at com.example.Worker.run(Worker.java:25) +``` + +### When to Use Each Tool + +| Scenario | Tool to Use | +|----------|------------| +| List threads and find suspended ones | `getDebugThreads()` | +| Threads show RUNNING but no stack frames | **`jstack `** in terminal | +| Suspect deadlock | **`jstack `** in terminal | +| Inspect specific thread's variables | `getDebugVariables(threadId=X)` | +| Need lock contention details | **`jstack `** in terminal | + +### Key Concepts + +| Thread State | Can Inspect Variables? | Can Evaluate Expressions? | +|--------------|------------------------|---------------------------| +| 🔴 SUSPENDED | ✅ Yes | ✅ Yes | +| 🟢 RUNNING | ❌ No | ❌ No | + +**Only SUSPENDED threads can be inspected!** + +### Inspecting Specific Threads + +``` +// Inspect variables in thread #15 (worker-2) +vscjava.vscode-java-debug/getDebugVariables(threadId=15) + +// Get stack trace of thread #1 (main) +vscjava.vscode-java-debug/getDebugStackTrace(threadId=1) + +// Evaluate expression in thread #15's context +vscjava.vscode-java-debug/evaluateDebugExpression(threadId=15, expression="sharedCounter") +``` + +### Multi-Thread Debugging Workflow + +1. **List all threads and identify suspended ones:** + ``` + vscjava.vscode-java-debug/getDebugThreads() + → Find threads with 🔴 SUSPENDED status + ``` + +2. **Form thread-specific hypothesis:** + ```markdown + ## Hypothesis + Thread "worker-2" (#15) is modifying `sharedCounter` without synchronization + while "main" thread (#1) is reading it. + ``` + +3. **Inspect each suspended thread:** + ``` + // Check main thread's view + vscjava.vscode-java-debug/evaluateDebugExpression(threadId=1, expression="sharedCounter") + → Result: 42 + + // Check worker-2's view + vscjava.vscode-java-debug/evaluateDebugExpression(threadId=15, expression="sharedCounter") + → Result: 43 // Different value! Race condition confirmed! + ``` + +4. **Step specific thread:** + ``` + vscjava.vscode-java-debug/debugStepOperation(operation="stepOver", threadId=15) + ``` + +### Common Multi-Threading Bugs + +| Bug Type | What to Look For | Diagnostic Tool | +|----------|------------------|-----------------| +| Race Condition | Same variable has different values in different threads | `getDebugVariables` on each thread | +| Deadlock | Multiple threads stuck, program hangs | **`jstack `** in terminal | +| Thread Starvation | One thread always RUNNING, others stuck | **`jstack `** in terminal | +| Lock Contention | Threads waiting for same lock | **`jstack `** in terminal | +| Memory Visibility | Thread sees stale value (check `volatile` keyword) | `evaluateDebugExpression` | + +### Deadlock Diagnosis Workflow + +**Use jstack for reliable deadlock detection:** + +``` +=== STEP 1: Detect the hang === +User: "Program seems frozen/stuck" + +=== STEP 2: Find the Java process === +Run in terminal: +$ jps -l +12345 com.example.MainApp ← This is the target PID + +=== STEP 3: Get thread dump === +Run in terminal: +$ jstack 12345 + +=== STEP 4: jstack automatically detects deadlock === +Found one Java-level deadlock: +============================= +"worker-1": + waiting to lock monitor 0x00007f9b2c003f08 (a java.lang.Object), + which is held by "worker-2" +"worker-2": + waiting to lock monitor 0x00007f9b2c004018 (a java.lang.Object), + which is held by "worker-1" + +Java stack information for the threads listed above: +=================================================== +"worker-1": + at com.example.Service.methodA(Service.java:30) + - waiting to lock <0x00000000d6e30208> (a java.lang.Object) + - locked <0x00000000d6e30210> (a java.lang.Object) + +"worker-2": + at com.example.Service.methodB(Service.java:50) + - waiting to lock <0x00000000d6e30210> (a java.lang.Object) + - locked <0x00000000d6e30208> (a java.lang.Object) + +=== STEP 5: Analyze the deadlock === +Diagnosis: Classic deadlock! +- worker-1 holds lock @210, wants lock @208 +- worker-2 holds lock @208, wants lock @210 +- Circular wait = DEADLOCK + +=== STEP 6: Report fix === +Fix: Ensure consistent lock ordering - always acquire locks in same order +``` + +### Alternative Thread Dump Methods + +If jstack is not available, use these alternatives: + +**Option 1: JConsole/VisualVM** +```bash +# Launch JConsole +jconsole +# Connect to the Java process → Go to "Threads" tab → "Detect Deadlock" +``` + +**Option 2: Add diagnostic code** +```java +// Add before suspected deadlock area +Thread.dumpStack(); +// Or for full dump: +ManagementFactory.getThreadMXBean().dumpAllThreads(true, true); +``` + +### Key Thread States in jstack Output + +| State | Meaning | +|-------|---------| +| `BLOCKED (on object monitor)` | Thread waiting for a monitor lock - **potential deadlock** | +| `WAITING (on object monitor)` | Thread waiting for notification (wait()) | +| `TIMED_WAITING (sleeping/parking)` | Thread waiting with timeout | +| `RUNNABLE` | Thread running or ready to run | + +--- + +## Example: Complete Hypothesis-Driven Debug Session + +``` +User: "Getting NPE when calling OrderService.processOrder()" + +=== PHASE 1: STATIC ANALYSIS === + +1. Read code: + search/codebase("OrderService processOrder") + readFile("OrderService.java") + +2. Form hypothesis: + "Looking at line 52: `order.getItems().forEach(...)` - I hypothesize that + either `order` is null OR `order.getItems()` returns null. + + I'll verify by checking both conditions at line 52." + +=== PHASE 2: SETUP === + +3. Set breakpoint: + vscjava.vscode-java-debug/setJavaBreakpoint(filePath="OrderService.java", lineNumber=52) + +4. Check session: + vscjava.vscode-java-debug/getDebugSessionInfo() + → ❌ No session + + "Breakpoint set. Please trigger the failing scenario." + +[User triggers scenario, breakpoint hits] + +5. Verify location: + vscjava.vscode-java-debug/getDebugSessionInfo() + → 🔴 PAUSED at OrderService.java:52 ✓ + +=== PHASE 3: DYNAMIC VERIFICATION === + +6. Test hypothesis with TARGETED evaluation: + vscjava.vscode-java-debug/evaluateDebugExpression(expression="order == null") + → false (order is NOT null) + + vscjava.vscode-java-debug/evaluateDebugExpression(expression="order.getItems() == null") + → true ✓ FOUND IT! + +7. Gather supporting evidence: + vscjava.vscode-java-debug/evaluateDebugExpression(expression="order.getId()") + → 456 + + vscjava.vscode-java-debug/evaluateDebugExpression(expression="order.getStatus()") + → "PENDING" + +8. Report: + "## Root Cause Found + + **Hypothesis CONFIRMED**: `order.getItems()` returns null for order 456. + + The order exists but its `items` field was never initialized. + This happens for orders with status='PENDING' before items are added. + + **Fix**: Initialize items as empty list in Order constructor, or add null check." + +=== PHASE 4: CLEANUP (for launch sessions only) === + +9. Check session type and cleanup if needed: + vscjava.vscode-java-debug/getDebugSessionInfo() // Check Launch Method field + + // If Launch Method shows "✅ Can be safely stopped": + vscjava.vscode-java-debug/removeJavaBreakpoints() + vscjava.vscode-java-debug/stopDebugSession(reason="Root cause identified - items field is null") + + // If Launch Method shows "⚠️ Stopping will disconnect": + // Do NOT cleanup - just report findings +``` + +--- + +## What NOT To Do + +❌ **Don't debug without a hypothesis:** +``` +// BAD - aimless debugging +vscjava.vscode-java-debug/setJavaBreakpoint(filePath="...", lineNumber=1) // Why line 1? +vscjava.vscode-java-debug/getDebugVariables(scopeType="all") // Looking for what? +``` + +❌ **Don't dump all variables:** +``` +// BAD - context overflow +vscjava.vscode-java-debug/getDebugVariables(scopeType="all") // 100+ variables +``` + +❌ **Don't step aimlessly:** +``` +// BAD - stepping without purpose +vscjava.vscode-java-debug/debugStepOperation(operation="stepOver") +vscjava.vscode-java-debug/debugStepOperation(operation="stepOver") +vscjava.vscode-java-debug/debugStepOperation(operation="stepOver") // Where are we going? +``` + +✅ **DO: Hypothesis-driven, targeted debugging:** +``` +// GOOD +"Hypothesis: user is null at line 52" +vscjava.vscode-java-debug/setJavaBreakpoint(filePath="Service.java", lineNumber=52) +vscjava.vscode-java-debug/evaluateDebugExpression(expression="user == null") // Verify hypothesis +``` + +--- + +## Remember + +1. **Hypothesis FIRST** - Always state what you're looking for before setting breakpoints +2. **Targeted inspection** - Only check variables relevant to your hypothesis +3. **Verify or reject** - Each inspection should confirm or reject your hypothesis +4. **Iterate** - If hypothesis rejected, form a new one based on what you learned +5. **Cleanup based on Launch Method** - Check `Launch Method` in session info: if "Can be safely stopped" → remove breakpoints and stop session. If "Stopping will disconnect" → do NOT cleanup (keep breakpoints, keep session connected) diff --git a/bundled/agents/images/agent-working.png b/bundled/agents/images/agent-working.png new file mode 100644 index 00000000..affe97bd Binary files /dev/null and b/bundled/agents/images/agent-working.png differ diff --git a/bundled/agents/images/invoke-agent.png b/bundled/agents/images/invoke-agent.png new file mode 100644 index 00000000..e9c46cce Binary files /dev/null and b/bundled/agents/images/invoke-agent.png differ diff --git a/bundled/agents/images/javadebug.png b/bundled/agents/images/javadebug.png new file mode 100644 index 00000000..60f631f3 Binary files /dev/null and b/bundled/agents/images/javadebug.png differ diff --git a/bundled/scripts/noConfigScripts/README.md b/bundled/scripts/noConfigScripts/README.md new file mode 100644 index 00000000..021f0553 --- /dev/null +++ b/bundled/scripts/noConfigScripts/README.md @@ -0,0 +1,102 @@ +# Java No-Config Debug + +This feature enables configuration-less debugging for Java applications, similar to the JavaScript Debug Terminal in VS Code. + +## How It Works + +When you open a terminal in VS Code with this extension installed, the following environment variables are automatically set: + +- `VSCODE_JDWP_ADAPTER_ENDPOINTS`: Path to a communication file for port exchange +- `PATH`: Includes the `debugjava` command wrapper + +Note: `JAVA_TOOL_OPTIONS` is NOT set globally to avoid affecting other Java tools (javac, maven, gradle). Instead, it's set only when you run the `debugjava` command. + +## Usage + +### Basic Usage + +Instead of running: +```bash +java -cp . com.example.Main +``` + +Simply run: +```bash +debugjava -cp . com.example.Main +``` + +The debugger will automatically attach, and breakpoints will work without any launch.json configuration! + +### Maven Projects + +```bash +debugjava -jar target/myapp.jar +``` + +### Gradle Projects + +```bash +debugjava -jar build/libs/myapp.jar +``` + +### With Arguments + +```bash +debugjava -cp . com.example.Main arg1 arg2 --flag=value +``` + +### Spring Boot + +```bash +debugjava -jar myapp.jar --spring.profiles.active=dev +``` + +## Advantages + +1. **No Configuration Required**: No need to create or maintain launch.json +2. **Rapid Prototyping**: Perfect for quick debugging sessions +3. **Script Debugging**: Debug applications launched by complex shell scripts +4. **Environment Consistency**: Inherits all terminal environment variables +5. **Parameter Flexibility**: Easy to change arguments using terminal history (↑ key) + +## How It Works Internally + +1. When you run `debugjava`, the wrapper script temporarily sets `JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0` +2. The wrapper determines which Java executable to use (priority order): + - First: `JAVA_HOME/bin/java` if JAVA_HOME environment variable is set (user's explicit choice) + - Second: `VSCODE_JAVA_EXEC` environment variable (Java path from VS Code's Java Language Server) + - Third: `java` command from system PATH +3. The wrapper launches the Java process with JDWP enabled +4. JVM starts and outputs: "Listening for transport dt_socket at address: 12345" +5. The wrapper captures the JDWP port from this output +6. The port is written to a communication file +7. VS Code's file watcher detects the file and automatically starts an attach debug session + +## Troubleshooting + +### Port Already in Use + +If you see "Address already in use", another Java debug session is running. Terminate it first. + +### No Breakpoints Hit + +1. Ensure you're running with `debugjava` command (not plain `java`) +2. Check that the `debugjava` command is available: `which debugjava` (Unix) or `Get-Command debugjava` (PowerShell) +3. Verify the terminal was opened AFTER the extension activated +4. Check the Debug Console for error messages + +### Node.js Not Found + +The wrapper script requires Node.js to be installed and available in PATH. + +## Limitations + +- Requires Node.js to be installed and available in PATH +- Only works in terminals opened within VS Code +- Requires using the `debugjava` command instead of `java` +- The Java process will suspend (hang) until the debugger attaches + +## See Also + +- [Debugger for Java Documentation](https://github.com/microsoft/vscode-java-debug) +- [JDWP Documentation](https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/jdwp-spec.html) diff --git a/bundled/scripts/noConfigScripts/debugjava b/bundled/scripts/noConfigScripts/debugjava new file mode 100644 index 00000000..881a9211 --- /dev/null +++ b/bundled/scripts/noConfigScripts/debugjava @@ -0,0 +1,12 @@ +#!/bin/bash +# Java No-Config Debug Wrapper Script for Unix/Linux/macOS +# This script intercepts java commands and automatically enables JDWP debugging + +# Get the directory of this script +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" + +# Set environment variables only for the node process, not the current shell +# This ensures JAVA_TOOL_OPTIONS doesn't affect subsequent commands in the terminal +JDWP_ADAPTER_ENDPOINTS=$VSCODE_JDWP_ADAPTER_ENDPOINTS \ +JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0" \ +exec node "$SCRIPT_DIR/jdwp-wrapper.js" "$@" diff --git a/bundled/scripts/noConfigScripts/debugjava.bat b/bundled/scripts/noConfigScripts/debugjava.bat new file mode 100644 index 00000000..3606188c --- /dev/null +++ b/bundled/scripts/noConfigScripts/debugjava.bat @@ -0,0 +1,19 @@ +@echo off +REM Java No-Config Debug Wrapper Script for Windows +REM This script intercepts java commands and automatically enables JDWP debugging + +REM Use setlocal to ensure environment variables don't persist after this script exits +setlocal + +REM Export the endpoint file path for JDWP port communication +set JDWP_ADAPTER_ENDPOINTS=%VSCODE_JDWP_ADAPTER_ENDPOINTS% + +REM Set JDWP options only for this debugjava invocation +REM This overrides the global JAVA_TOOL_OPTIONS to avoid affecting other Java processes +set JAVA_TOOL_OPTIONS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0 + +REM Use Node.js wrapper to capture JDWP port +node "%~dp0jdwp-wrapper.js" %* + +REM endlocal is implicit at script exit, but we can call it explicitly for clarity +endlocal diff --git a/bundled/scripts/noConfigScripts/debugjava.fish b/bundled/scripts/noConfigScripts/debugjava.fish new file mode 100644 index 00000000..47d7cf75 --- /dev/null +++ b/bundled/scripts/noConfigScripts/debugjava.fish @@ -0,0 +1,12 @@ +#!/usr/bin/env fish +# Java No-Config Debug Wrapper Script for Fish Shell +# This script intercepts java commands and automatically enables JDWP debugging + +# Get the directory of this script +set script_dir (dirname (status -f)) + +# Set environment variables only for the node process, not the current shell +# This ensures JAVA_TOOL_OPTIONS doesn't affect subsequent commands in the terminal +env JDWP_ADAPTER_ENDPOINTS=$VSCODE_JDWP_ADAPTER_ENDPOINTS \ + JAVA_TOOL_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0" \ + node "$script_dir/jdwp-wrapper.js" $argv diff --git a/bundled/scripts/noConfigScripts/debugjava.ps1 b/bundled/scripts/noConfigScripts/debugjava.ps1 new file mode 100644 index 00000000..0404a860 --- /dev/null +++ b/bundled/scripts/noConfigScripts/debugjava.ps1 @@ -0,0 +1,32 @@ +# Java No-Config Debug Wrapper Script for PowerShell +# This script intercepts java commands and automatically enables JDWP debugging + +# Get the directory of this script +$scriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path + +# Save current environment variables to restore later +$oldJavaToolOptions = $env:JAVA_TOOL_OPTIONS +$oldJdwpAdapterEndpoints = $env:JDWP_ADAPTER_ENDPOINTS + +try { + # Set environment variables only for this debugjava invocation + $env:JDWP_ADAPTER_ENDPOINTS = $env:VSCODE_JDWP_ADAPTER_ENDPOINTS + $env:JAVA_TOOL_OPTIONS = "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=0" + + # Use Node.js wrapper to capture JDWP port + & node (Join-Path $scriptDir "jdwp-wrapper.js") $args +} +finally { + # Restore original environment variables to avoid affecting subsequent commands + if ($null -eq $oldJavaToolOptions) { + Remove-Item Env:\JAVA_TOOL_OPTIONS -ErrorAction SilentlyContinue + } else { + $env:JAVA_TOOL_OPTIONS = $oldJavaToolOptions + } + + if ($null -eq $oldJdwpAdapterEndpoints) { + Remove-Item Env:\JDWP_ADAPTER_ENDPOINTS -ErrorAction SilentlyContinue + } else { + $env:JDWP_ADAPTER_ENDPOINTS = $oldJdwpAdapterEndpoints + } +} diff --git a/bundled/scripts/noConfigScripts/jdwp-wrapper.js b/bundled/scripts/noConfigScripts/jdwp-wrapper.js new file mode 100644 index 00000000..cae86170 --- /dev/null +++ b/bundled/scripts/noConfigScripts/jdwp-wrapper.js @@ -0,0 +1,144 @@ +#!/usr/bin/env node +/** + * JDWP Port Listener and Communication Wrapper + * + * This script wraps Java process execution and captures the JDWP port + * from the JVM output, then writes it to the endpoint file for VS Code + * to pick up and attach the debugger. + * + * JDWP Output Format: + * "Listening for transport dt_socket at address: 12345" + */ + +const { spawn } = require('child_process'); +const fs = require('fs'); +const path = require('path'); + +// Get environment variables +const endpointFile = process.env.JDWP_ADAPTER_ENDPOINTS || process.env.VSCODE_JDWP_ADAPTER_ENDPOINTS; +const javaToolOptions = process.env.JAVA_TOOL_OPTIONS || ''; + +// Check if debugging is enabled +const isDebugEnabled = javaToolOptions.includes('jdwp') && endpointFile; + +// Helper function to find java command +function getJavaCommand() { + // Priority 1: Try JAVA_HOME environment variable first (user's explicit choice) + const javaHome = process.env.JAVA_HOME; + if (javaHome) { + const javaPath = path.join(javaHome, 'bin', 'java'); + const javaPathExe = process.platform === 'win32' ? `${javaPath}.exe` : javaPath; + + // Check if the file exists + if (fs.existsSync(javaPathExe)) { + return javaPath; + } + if (fs.existsSync(javaPath)) { + return javaPath; + } + + console.warn(`[Java Debug] JAVA_HOME is set to '${javaHome}', but java command not found there. Falling back to VS Code's Java.`); + } + + // Priority 2: Use VSCODE_JAVA_EXEC if provided by VS Code (from Java Language Server) + const vscodeJavaExec = process.env.VSCODE_JAVA_EXEC; + if (vscodeJavaExec && fs.existsSync(vscodeJavaExec)) { + return vscodeJavaExec; + } + + // Priority 3: Fall back to 'java' in PATH + return 'java'; +} + +const javaCmd = getJavaCommand(); + +// Helper function to setup signal handlers for graceful termination +function setupSignalHandlers(child) { + const signals = ['SIGINT', 'SIGTERM']; + signals.forEach(signal => { + process.on(signal, () => { + child.kill(signal); + }); + }); +} + +if (!isDebugEnabled) { + // No debugging, just run java normally + const child = spawn(javaCmd, process.argv.slice(2), { + stdio: 'inherit', + shell: false + }); + setupSignalHandlers(child); + // Use 'close' event to ensure stdio streams are closed before exiting + child.on('close', (code) => process.exit(code || 0)); + child.on('error', (err) => { + console.error(`[Java Debug] Failed to start java: ${err.message}`); + console.error(`[Java Debug] Make sure Java is installed and either JAVA_HOME is set correctly or 'java' is in your PATH.`); + process.exit(1); + }); +} else { + // Debugging enabled, capture JDWP port + const child = spawn(javaCmd, process.argv.slice(2), { + stdio: ['inherit', 'pipe', 'pipe'], + shell: false + }); + setupSignalHandlers(child); + + let portCaptured = false; + const jdwpPortRegex = /Listening for transport dt_socket at address:\s*(\d+)/; + + // Shared function to capture JDWP port from output + const capturePort = (output) => { + if (portCaptured) return; + + const match = output.match(jdwpPortRegex); + if (match && match[1]) { + const port = parseInt(match[1], 10); + + // Validate port range + if (port < 1 || port > 65535) { + console.error(`[Java Debug] Invalid port number: ${port}`); + return; + } + + console.log(`[Java Debug] Captured JDWP port: ${port}`); + + // Write port to endpoint file + const endpointData = JSON.stringify({ + client: { + host: 'localhost', + port: port + } + }); + + try { + fs.writeFileSync(endpointFile, endpointData, 'utf8'); + console.log(`[Java Debug] Wrote endpoint file: ${endpointFile}`); + portCaptured = true; + } catch (err) { + console.error(`[Java Debug] Failed to write endpoint file: ${err}`); + } + } + }; + + // Monitor stdout for JDWP port + child.stdout.on('data', (data) => { + const output = data.toString(); + process.stdout.write(data); + capturePort(output); + }); + + // Monitor stderr for JDWP port (it might appear on stderr) + child.stderr.on('data', (data) => { + const output = data.toString(); + process.stderr.write(data); + capturePort(output); + }); + + // Use 'close' event to ensure stdio streams are closed before exiting + child.on('close', (code) => process.exit(code || 0)); + child.on('error', (err) => { + console.error(`[Java Debug] Failed to start java: ${err}`); + process.exit(1); + }); +} diff --git a/gulpfile.js b/gulpfile.js deleted file mode 100644 index 5ce97db4..00000000 --- a/gulpfile.js +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT license. - -const gulp = require("gulp"); -const cp = require('child_process'); -const tslint = require("gulp-tslint"); - -const server_dir = '../java-debug'; - -gulp.task("tslint", () => { - return gulp.src(["**/*.ts", "!**/*.d.ts", "!node_modules/**", "!./src/views/node_modules/**"]) - .pipe(tslint({formatter: "verbose"})) - .pipe(tslint.report()); -}); - -gulp.task('build_server', () => { - cp.execSync(mvnw() + ' clean package', { - cwd: server_dir, - stdio: [0, 1, 2] - }); - return gulp.src(server_dir + '/com.microsoft.java.debug.plugin/target/com.microsoft.java.debug.*.jar') - .pipe(gulp.dest('./server')); -}); - -function isWin() { - return /^win/.test(process.platform); -} - -function isMac() { - return /^darwin/.test(process.platform); -} - -function isLinux() { - return /^linux/.test(process.platform); -} - -function mvnw() { - return isWin() ? "mvnw.cmd" : "./mvnw"; -} diff --git a/package-lock.json b/package-lock.json index 6152707a..a780d905 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,4565 +1,5095 @@ { "name": "vscode-java-debug", - "version": "0.35.0", - "lockfileVersion": 1, + "version": "0.58.5", + "lockfileVersion": 2, "requires": true, - "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "packages": { + "": { + "name": "vscode-java-debug", + "version": "0.58.5", + "license": "SEE LICENSE IN LICENSE.txt", + "dependencies": { + "compare-versions": "^4.1.4", + "dotenv": "^16.4.5", + "lodash": "^4.17.23", + "uuid": "^8.3.2", + "vscode-extension-telemetry-wrapper": "^0.14.0", + "vscode-languageclient": "6.0.0-next.9", + "vscode-languageserver-types": "3.16.0", + "vscode-tas-client": "^0.1.84" + }, + "devDependencies": { + "@types/glob": "^7.2.0", + "@types/lodash": "^4.17.13", + "@types/mocha": "^10.0.9", + "@types/node": "^14.18.63", + "@types/uuid": "^8.3.4", + "@types/vscode": "1.95.0", + "@vscode/test-electron": "^2.4.1", + "mocha": "^10.8.2", + "ts-loader": "^9.5.1", + "tslint": "^6.1.3", + "typescript": "^4.9.5", + "webpack": "^5.105.0", + "webpack-cli": "^4.10.0" + }, + "engines": { + "vscode": "^1.95.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, - "requires": { - "@babel/highlight": "^7.0.0" + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "requires": { - "chalk": "^2.0.0", - "esutils": "^2.0.2", - "js-tokens": "^4.0.0" + "engines": { + "node": ">=6.9.0" } }, - "@types/eslint": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.2.6.tgz", - "integrity": "sha512-I+1sYH+NPQ3/tVqCeUSBwTE/0heyvtXqpIopUUArlBm0Kpocb8FbMa3AZ/ASKIFpN3rnEx932TTXDbt9OXsNDw==", + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, - "requires": { + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@microsoft/1ds-core-js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-4.3.4.tgz", + "integrity": "sha512-3gbDUQgAO8EoyQTNcAEkxpuPnioC0May13P1l1l0NKZ128L9Ts/sj8QsfwCRTjHz0HThlA+4FptcAJXNYUy3rg==", + "dependencies": { + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "node_modules/@microsoft/1ds-post-js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-4.3.4.tgz", + "integrity": "sha512-nlKjWricDj0Tn68Dt0P8lX9a+X7LYrqJ6/iSfQwMfDhRIGLqW+wxx8gxS+iGWC/oc8zMQAeiZaemUpCwQcwpRQ==", + "dependencies": { + "@microsoft/1ds-core-js": "4.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "node_modules/@microsoft/applicationinsights-channel-js": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.3.4.tgz", + "integrity": "sha512-Z4nrxYwGKP9iyrYtm7iPQXVOFy4FsEsX0nDKkAi96Qpgw+vEh6NH4ORxMMuES0EollBQ3faJyvYCwckuCVIj0g==", + "dependencies": { + "@microsoft/applicationinsights-common": "3.3.4", + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + }, + "peerDependencies": { + "tslib": ">= 1.0.0" + } + }, + "node_modules/@microsoft/applicationinsights-common": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.3.4.tgz", + "integrity": "sha512-4ms16MlIvcP4WiUPqopifNxcWCcrXQJ2ADAK/75uok2mNQe6ZNRsqb/P+pvhUxc8A5HRlvoXPP1ptDSN5Girgw==", + "dependencies": { + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + }, + "peerDependencies": { + "tslib": ">= 1.0.0" + } + }, + "node_modules/@microsoft/applicationinsights-core-js": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.3.4.tgz", + "integrity": "sha512-MummANF0mgKIkdvVvfmHQTBliK114IZLRhTL0X0Ep+zjDwWMHqYZgew0nlFKAl6ggu42abPZFK5afpE7qjtYJA==", + "dependencies": { + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + }, + "peerDependencies": { + "tslib": ">= 1.0.0" + } + }, + "node_modules/@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } + }, + "node_modules/@microsoft/applicationinsights-web-basic": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.3.4.tgz", + "integrity": "sha512-OpEPXr8vU/t/M8T9jvWJzJx/pCyygIiR1nGM/2PTde0wn7anl71Gxl5fWol7K/WwFEORNjkL3CEyWOyDc+28AA==", + "dependencies": { + "@microsoft/applicationinsights-channel-js": "3.3.4", + "@microsoft/applicationinsights-common": "3.3.4", + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + }, + "peerDependencies": { + "tslib": ">= 1.0.0" + } + }, + "node_modules/@microsoft/dynamicproto-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.3.tgz", + "integrity": "sha512-JTWTU80rMy3mdxOjjpaiDQsTLZ6YSGGqsjURsY6AUQtIj0udlF/jYmhdLZu8693ZIC0T1IwYnFa0+QeiMnziBA==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.10.4 < 2.x" + } + }, + "node_modules/@nevware21/ts-async": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.5.3.tgz", + "integrity": "sha512-UsF7eerLsVfid7iV1oXF80qXBwHNBeqSqfh/nPZgirRU1MACmSsj83EZKS2ViFHVfSGG6WIuXMGBP6KciXfYhA==", + "dependencies": { + "@nevware21/ts-utils": ">= 0.11.5 < 2.x" + } + }, + "node_modules/@nevware21/ts-utils": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.11.5.tgz", + "integrity": "sha512-7nIzWKR50mf3htOg53kwPLqD5iJaRfVyBvb1NJhlIncyP1WzK8vAQbU9rqIsRtv7td1CnqspdP6IWNEjOjaeug==" + }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", + "dev": true, + "dependencies": { "@types/estree": "*", "@types/json-schema": "*" } }, - "@types/eslint-scope": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.0.tgz", - "integrity": "sha512-O/ql2+rrCUe2W2rs7wMR+GqPRcgB6UiqN5RhrR5xruFlY7l9YLMn0ZkDzjoHLeiFkR8MCQZVudUuuvQ2BLC9Qw==", + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, - "requires": { + "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, - "@types/estree": { - "version": "0.0.45", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.45.tgz", - "integrity": "sha512-jnqIUKDUqJbDIUxm0Uj7bnlMnRm1T/eZ9N+AVMqhPgzrba2GhGG5o/jCTwmdPK709nEZsGoMzXEDUjcXHa3W0g==", - "dev": true - }, - "@types/fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha512-mQjDxyOM1Cpocd+vm1kZBP7smwKZ4TNokFeds9LV7OZibmPJFEzY3+xZMrKfUdNT71lv8GoCPD6upKwHxubClw==", + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", "dev": true }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", "dev": true, - "requires": { + "dependencies": { "@types/minimatch": "*", "@types/node": "*" } }, - "@types/json-schema": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.6.tgz", - "integrity": "sha512-3c+yGKvVP5Y9TYBEibGNR+kLtijnj7mYrXRg+WpFb2X9xm04g/DXYkfg4hmzJQosc9snFNUPkbYIhu+KAm6jJw==", + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", + "node_modules/@types/lodash": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", "dev": true }, - "@types/minimatch": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", - "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", "dev": true }, - "@types/mocha": { - "version": "5.2.7", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-5.2.7.tgz", - "integrity": "sha512-NYrtPht0wGzhwe9+/idPaBB+TqkY9AhTvOLMkThm0IoEfLaiVQZwBwyJ5puCkO3AUCWrmcoePjp2mbFocKy4SQ==", + "node_modules/@types/mocha": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", + "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", "dev": true }, - "@types/node": { - "version": "14.14.10", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.10.tgz", - "integrity": "sha512-J32dgx2hw8vXrSbu4ZlVhn1Nm3GbeCFNw2FWL8S5QKucHGY0cyNwjdQdO+KMBZ4wpmC7KhLCiNsdk1RFRIYUQQ==", + "node_modules/@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", "dev": true }, - "@types/uuid": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.0.tgz", - "integrity": "sha512-eQ9qFW/fhfGJF8WKHGEHZEyVWfZxrT+6CLIJGBcZPfxUh/+BnEj+UCGYMlr9qZuX/2AltsvwrGqp0LhEW8D0zQ==", + "node_modules/@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", "dev": true }, - "@types/vscode": { - "version": "1.55.0", - "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.55.0.tgz", - "integrity": "sha512-49hysH7jneTQoSC8TWbAi7nKK9Lc5osQNjmDHVosrcU8o3jecD9GrK0Qyul8q4aGPSXRfNGqIp9CBdb13akETg==", - "dev": true + "node_modules/@types/vscode": { + "version": "1.95.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.95.0.tgz", + "integrity": "sha512-0LBD8TEiNbet3NvWsmn59zLzOFu/txSlGxnv5yAFHCrhG9WvAnR3IvfHzMOs2aeWqgvNjq9pO99IUw8d3n+unw==", + "dev": true, + "license": "MIT" }, - "@webassemblyjs/ast": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.1.tgz", - "integrity": "sha512-uMu1nCWn2Wxyy126LlGqRVlhdTOsO/bsBRI4dNq3+6SiSuRKRQX6ejjKgh82LoGAPSq72lDUiQ4FWVaf0PecYw==", + "node_modules/@vscode/extension-telemetry": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-0.9.7.tgz", + "integrity": "sha512-2GQbcfDUTg0QC1v0HefkHNwYrE5LYKzS3Zb0+uA6Qn1MBDzgiSh23ddOZF/JRqhqBFOG0mE70XslKSGQ5v9KwQ==", + "dependencies": { + "@microsoft/1ds-core-js": "^4.3.0", + "@microsoft/1ds-post-js": "^4.3.0", + "@microsoft/applicationinsights-web-basic": "^3.3.0" + }, + "engines": { + "vscode": "^1.75.0" + } + }, + "node_modules/@vscode/test-electron": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.1.tgz", + "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==", "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1" + "dependencies": { + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^7.0.1", + "semver": "^7.6.2" + }, + "engines": { + "node": ">=16" } }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.1.tgz", - "integrity": "sha512-5VEKu024RySmLKTTBl9q1eO/2K5jk9ZS+2HXDBLA9s9p5IjkaXxWiDb/+b7wSQp6FRdLaH1IVGIfOex58Na2pg==", - "dev": true + "node_modules/@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } }, - "@webassemblyjs/helper-api-error": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.1.tgz", - "integrity": "sha512-y1lGmfm38djrScwpeL37rRR9f1D6sM8RhMpvM7CYLzOlHVboouZokXK/G88BpzW0NQBSvCCOnW5BFhten4FPfA==", + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", "dev": true }, - "@webassemblyjs/helper-buffer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.1.tgz", - "integrity": "sha512-uS6VSgieHbk/m4GSkMU5cqe/5TekdCzQso4revCIEQ3vpGZgqSSExi4jWpTWwDpAHOIAb1Jfrs0gUB9AA4n71w==", + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", "dev": true }, - "@webassemblyjs/helper-code-frame": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.1.tgz", - "integrity": "sha512-ZQ2ZT6Evk4DPIfD+92AraGYaFIqGm4U20e7FpXwl7WUo2Pn1mZ1v8VGH8i+Y++IQpxPbQo/UyG0Khs7eInskzA==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.9.1" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.1.tgz", - "integrity": "sha512-J32HGpveEqqcKFS0YbgicB0zAlpfIxJa5MjxDxhu3i5ltPcVfY5EPvKQ1suRguFPehxiUs+/hfkwPEXom/l0lw==", + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", "dev": true }, - "@webassemblyjs/helper-module-context": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.1.tgz", - "integrity": "sha512-IEH2cMmEQKt7fqelLWB5e/cMdZXf2rST1JIrzWmf4XBt3QTxGdnnLvV4DYoN8pJjOx0VYXsWg+yF16MmJtolZg==", + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1" + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.1.tgz", - "integrity": "sha512-i2rGTBqFUcSXxyjt2K4vm/3kkHwyzG6o427iCjcIKjOqpWH8SEem+xe82jUk1iydJO250/CvE5o7hzNAMZf0dQ==", + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", "dev": true }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.1.tgz", - "integrity": "sha512-FetqzjtXZr2d57IECK+aId3D0IcGweeM0CbAnJHkYJkcRTHP+YcMb7Wmc0j21h5UWBpwYGb9dSkK/93SRCTrGg==", + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "@webassemblyjs/ieee754": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.1.tgz", - "integrity": "sha512-EvTG9M78zP1MmkBpUjGQHZc26DzPGZSLIPxYHCjQsBMo60Qy2W34qf8z0exRDtxBbRIoiKa5dFyWer/7r1aaSQ==", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, - "requires": { + "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, - "@webassemblyjs/leb128": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.1.tgz", - "integrity": "sha512-Oc04ub0vFfLnF+2/+ki3AE+anmW4sv9uNBqb+79fgTaPv6xJsOT0dhphNfL3FrME84CbX/D1T9XT8tjFo0IIiw==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, - "requires": { + "dependencies": { "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/utf8": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.1.tgz", - "integrity": "sha512-llkYtppagjCodFjo0alWOUhAkfOiQPQDIc5oA6C9sFAXz7vC9QhZf/f8ijQIX+A9ToM3c9Pq85X0EX7nx9gVhg==", + "node_modules/@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true }, - "@webassemblyjs/wasm-edit": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.1.tgz", - "integrity": "sha512-S2IaD6+x9B2Xi8BCT0eGsrXXd8UxAh2LVJpg1ZMtHXnrDcsTtIX2bDjHi40Hio6Lc62dWHmKdvksI+MClCYbbw==", + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/helper-wasm-section": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-opt": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", - "@webassemblyjs/wast-printer": "1.9.1" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, - "@webassemblyjs/wasm-gen": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.1.tgz", - "integrity": "sha512-bqWI0S4lBQsEN5FTZ35vYzfKUJvtjNnBobB1agCALH30xNk1LToZ7Z8eiaR/Z5iVECTlBndoRQV3F6mbEqE/fg==", + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "@webassemblyjs/wasm-opt": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.1.tgz", - "integrity": "sha512-gSf7I7YWVXZ5c6XqTEqkZjVs8K1kc1k57vsB6KBQscSagDNbAdxt6MwuJoMjsE1yWY1tsuL+pga268A6u+Fdkg==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-buffer": "1.9.1", - "@webassemblyjs/wasm-gen": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, - "@webassemblyjs/wasm-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.1.tgz", - "integrity": "sha512-ImM4N2T1MEIond0MyE3rXvStVxEmivQrDKf/ggfh5pP6EHu3lL/YTAoSrR7shrbKNPpeKpGesW1LIK/L4kqduw==", + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-wasm-bytecode": "1.9.1", - "@webassemblyjs/ieee754": "1.9.1", - "@webassemblyjs/leb128": "1.9.1", - "@webassemblyjs/utf8": "1.9.1" + "dependencies": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "@webassemblyjs/wast-parser": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.1.tgz", - "integrity": "sha512-2xVxejXSvj3ls/o2TR/zI6p28qsGupjHhnHL6URULQRcXmryn3w7G83jQMcT7PHqUfyle65fZtWLukfdLdE7qw==", + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/floating-point-hex-parser": "1.9.1", - "@webassemblyjs/helper-api-error": "1.9.1", - "@webassemblyjs/helper-code-frame": "1.9.1", - "@webassemblyjs/helper-fsm": "1.9.1", + "dependencies": { + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, - "@webassemblyjs/wast-printer": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.1.tgz", - "integrity": "sha512-tDV8V15wm7mmbAH6XvQRU1X+oPGmeOzYsd6h7hlRLz6QpV4Ec/KKxM8OpLtFmQPLCreGxTp+HuxtH4pRIZyL9w==", + "node_modules/@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", "dev": true, - "requires": { - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/wast-parser": "1.9.1", - "@xtuc/long": "4.2.2" + "peerDependencies": { + "webpack": "4.x.x || 5.x.x", + "webpack-cli": "4.x.x" } }, - "@webpack-cli/info": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.1.0.tgz", - "integrity": "sha512-uNWSdaYHc+f3LdIZNwhdhkjjLDDl3jP2+XBqAq9H8DjrJUvlOKdP8TNruy1yEaDfgpAIgbSAN7pye4FEHg9tYQ==", + "node_modules/@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", "dev": true, - "requires": { + "dependencies": { "envinfo": "^7.7.3" + }, + "peerDependencies": { + "webpack-cli": "4.x.x" } }, - "@webpack-cli/serve": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.1.0.tgz", - "integrity": "sha512-7RfnMXCpJ/NThrhq4gYQYILB18xWyoQcBey81oIyVbmgbc6m5ZHHyFK+DyH7pLHJf0p14MxL4mTsoPAgBSTpIg==", - "dev": true + "node_modules/@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "peerDependencies": { + "webpack-cli": "4.x.x" + }, + "peerDependenciesMeta": { + "webpack-dev-server": { + "optional": true + } + } }, - "@xtuc/ieee754": { + "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "@xtuc/long": { + "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "acorn": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.0.4.tgz", - "integrity": "sha512-XNP0PqF1XD19ZlLKvB7cMmnZswW4C/03pRHgirB30uSJTaS3A3V1/P4sS3HPvFmjoriPCJQs+JDSbm4bL1TxGQ==", - "dev": true - }, - "agent-base": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", - "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true, - "requires": { - "es6-promisify": "^5.0.0" + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "engines": { + "node": ">=10.13.0" + }, + "peerDependencies": { + "acorn": "^8.14.0" } }, - "ajv-keywords": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", - "dev": true - }, - "ansi-colors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz", - "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==", + "node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, - "requires": { - "ansi-wrap": "^0.1.0" + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "ansi-gray": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", - "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "requires": { - "ansi-wrap": "0.1.0" + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "ansi-regex": { + "node_modules/ajv-formats": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "ansi-wrap": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", - "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", - "dev": true - }, - "anymatch": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", - "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, - "requires": { - "micromatch": "^3.1.4", - "normalize-path": "^2.1.1" - }, "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true } } }, - "append-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", - "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, - "requires": { - "buffer-equal": "^1.0.0" + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" } }, - "applicationinsights": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/applicationinsights/-/applicationinsights-1.7.4.tgz", - "integrity": "sha512-XFLsNlcanpjFhHNvVWEfcm6hr7lu9znnb6Le1Lk5RE03YUV9X2B2n2MfM4kJZRrUdV+C0hdHxvWyv+vWoLfY7A==", - "requires": { - "cls-hooked": "^4.2.2", - "continuation-local-storage": "^3.2.1", - "diagnostic-channel": "0.2.0", - "diagnostic-channel-publishers": "^0.3.3" + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" } }, - "archy": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", - "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=", - "dev": true - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "requires": { - "sprintf-js": "~1.0.2" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-filter": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz", - "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=", + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-map": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz", - "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=", + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, - "requires": { - "make-iterator": "^1.0.0" + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-back": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.1.tgz", - "integrity": "sha512-Z/JnaVEXv+A9xabHzN43FiiiWEE7gPCRXMrVmRm00tWbjZRul1iHm7ECzlyNq1p4a4ATXz+G9FJ3GqGOkOV3fg==", + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, - "array-initial": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz", - "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=", + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "dev": true, - "requires": { - "array-slice": "^1.0.0", - "is-number": "^4.0.0" - }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } + ] + }, + "node_modules/baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true, + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, - "array-last": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz", - "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==", + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true, - "requires": { - "is-number": "^4.0.0" + "engines": { + "node": ">=8" }, - "dependencies": { - "is-number": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", - "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-sort": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz", - "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==", + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dev": true, - "requires": { - "default-compare": "^1.0.0", - "get-value": "^2.0.6", - "kind-of": "^5.0.2" - }, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } }, - "async-done": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz", - "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.2", - "process-nextick-args": "^2.0.0", - "stream-exhaust": "^1.0.1" + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "async-each": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", "dev": true }, - "async-hook-jl": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/async-hook-jl/-/async-hook-jl-1.7.6.tgz", - "integrity": "sha512-gFaHkFfSxTjvoxDMYqDuGHlcRyUuamF8s+ZTtJdDzqjws4mCt7v0vuV79/E2Wr2/riMQgtG4/yUtXWs1gZ7JMg==", - "requires": { - "stack-chain": "^1.3.7" - } - }, - "async-listener": { - "version": "0.6.10", - "resolved": "https://registry.npmjs.org/async-listener/-/async-listener-0.6.10.tgz", - "integrity": "sha512-gpuo6xOyF4D5DE5WvyqZdPA3NGhiT6Qf07l7DCB0wwDEsLvDIbCr6j9S5aj5Ch96dLace5tXVzWBZkxU/c5ohw==", - "requires": { - "semver": "^5.3.0", - "shimmer": "^1.1.0" + "node_modules/browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "async-settle": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz", - "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=", + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, - "requires": { - "async-done": "^1.2.2" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "dev": true }, - "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", - "requires": { - "follow-redirects": "^1.10.0" + "node_modules/builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" } }, - "bach": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz", - "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=", + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, - "requires": { - "arr-filter": "^1.1.1", - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "array-each": "^1.0.0", - "array-initial": "^1.0.0", - "array-last": "^1.1.1", - "async-done": "^1.2.2", - "async-settle": "^1.0.0", - "now-and-later": "^2.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "node_modules/caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", "dev": true, - "requires": { - "cache-base": "^1.0.1", - "class-utils": "^0.3.5", - "component-emitter": "^1.2.1", - "define-property": "^1.0.0", - "isobject": "^3.0.1", - "mixin-deep": "^1.2.0", - "pascalcase": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } + { + "type": "github", + "url": "https://github.com/sponsors/ai" } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "big.js": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", - "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", - "dev": true + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } }, - "binary-extensions": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", - "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", - "dev": true + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } }, - "bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "node_modules/chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, - "optional": true, - "requires": { - "file-uri-to-path": "1.0.0" + "engines": { + "node": ">=6.0" } }, - "brace-expansion": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", - "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", + "node_modules/cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "dependencies": { + "restore-cursor": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", "dev": true, - "requires": { - "arr-flatten": "^1.1.0", - "array-unique": "^0.3.2", - "extend-shallow": "^2.0.1", - "fill-range": "^4.0.0", - "isobject": "^3.0.1", - "repeat-element": "^1.1.2", - "snapdragon": "^0.8.1", - "snapdragon-node": "^2.0.1", - "split-string": "^3.0.2", - "to-regex": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "browserslist": { - "version": "4.16.6", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", - "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001219", - "colorette": "^1.2.2", - "electron-to-chromium": "^1.3.723", - "escalade": "^3.1.1", - "node-releases": "^1.1.71" + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { - "colorette": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", - "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", - "dev": true - } + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "buffer-equal": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", - "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "collection-visit": "^1.0.0", - "component-emitter": "^1.2.1", - "get-value": "^2.0.6", - "has-value": "^1.0.0", - "isobject": "^3.0.1", - "set-value": "^2.0.0", - "to-object-path": "^0.3.0", - "union-value": "^1.0.0", - "unset-value": "^1.0.0" - } + "node_modules/compare-versions": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", + "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==" }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, - "caniuse-lite": { - "version": "1.0.30001243", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz", - "integrity": "sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA==", + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", "dev": true }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" } }, - "chokidar": { - "version": "2.1.8", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", - "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-each": "^1.0.1", - "braces": "^2.3.2", - "fsevents": "^1.2.7", - "glob-parent": "^3.1.0", - "inherits": "^2.0.3", - "is-binary-path": "^1.0.0", - "is-glob": "^4.0.0", - "normalize-path": "^3.0.0", - "path-is-absolute": "^1.0.0", - "readdirp": "^2.2.1", - "upath": "^1.1.1" - }, "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true } } }, - "chrome-trace-event": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.2.tgz", - "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", + "node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true, - "requires": { - "tslib": "^1.9.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "engines": { + "node": ">=0.3.1" } }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", - "dev": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "clone-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", - "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "node_modules/electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, - "clone-stats": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", - "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, - "cloneable-readable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", - "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "node_modules/enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "dev": true, - "requires": { - "inherits": "^2.0.1", - "process-nextick-args": "^2.0.0", - "readable-stream": "^2.3.5" + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" + }, + "engines": { + "node": ">=10.13.0" } }, - "cls-hooked": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/cls-hooked/-/cls-hooked-4.2.2.tgz", - "integrity": "sha512-J4Xj5f5wq/4jAvcdgoGsL3G103BtWpZrMo8NEinRltN+xpTZdI+M38pyQqhuFU/P792xkMFvnKSf+Lm81U1bxw==", - "requires": { - "async-hook-jl": "^1.7.6", - "emitter-listener": "^1.0.1", - "semver": "^5.4.1" + "node_modules/envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" } }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "node_modules/es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true }, - "collection-map": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz", - "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=", + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, - "requires": { - "arr-map": "^2.0.2", - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "engines": { + "node": ">=6" } }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, - "requires": { - "color-name": "1.1.3" + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" } }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", - "dev": true + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } }, - "colorette": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.1.tgz", - "integrity": "sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw==", - "dev": true + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } }, - "command-line-usage": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", - "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "requires": { - "array-back": "^4.0.1", - "chalk": "^2.4.2", - "table-layout": "^1.0.1", - "typical": "^5.2.0" + "engines": { + "node": ">=4.0" } }, - "commander": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", - "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", - "dev": true + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } }, - "compare-versions": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-3.6.0.tgz", - "integrity": "sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA==" + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ] }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" + "engines": { + "node": ">= 4.9.1" } }, - "continuation-local-storage": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/continuation-local-storage/-/continuation-local-storage-3.2.1.tgz", - "integrity": "sha512-jx44cconVqkCEEyLSKWwkvUXwO561jXMa3LPjTPsm5QR22PA0/mhe33FT4Xb5y74JDvt/Cq+5lm8S8rskLv9ZA==", - "requires": { - "async-listener": "^0.6.0", - "emitter-listener": "^1.1.1" + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "convert-source-map": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", - "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, - "requires": { - "safe-buffer": "~5.1.1" + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "copy-props": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.4.tgz", - "integrity": "sha512-7cjuUME+p+S3HZlbllgsn2CDwS+5eCCX16qBgNC4jgSTf49qR1VKy/Zhl400m0IQXl/bPGEVqncgUUMjrr4s8A==", + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, - "requires": { - "each-props": "^1.3.0", - "is-plain-object": "^2.0.1" + "bin": { + "flat": "cli.js" } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", "dev": true }, - "cross-env": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", - "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "requires": { - "cross-spawn": "^6.0.5", - "is-windows": "^1.0.0" - }, - "dependencies": { - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - } + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "dependencies": { - "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", - "dev": true - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "d": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", - "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, - "requires": { - "es5-ext": "^0.10.50", - "type": "^1.0.1" + "engines": { + "node": "6.* || 8.* || >= 10.*" } }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { - "ms": "2.0.0" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "requires": { - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "engines": { + "node": ">=8" } }, - "default-resolution": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz", - "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=", - "dev": true + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true, - "requires": { - "object-keys": "^1.0.12" + "bin": { + "he": "bin/he" } }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" } }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "diagnostic-channel": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/diagnostic-channel/-/diagnostic-channel-0.2.0.tgz", - "integrity": "sha1-zJmvlhLCP7H/8TYSxy8sv6qNWhc=", - "requires": { - "semver": "^5.3.0" + "node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" } }, - "diagnostic-channel-publishers": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/diagnostic-channel-publishers/-/diagnostic-channel-publishers-0.3.4.tgz", - "integrity": "sha512-SZ1zMfFiEabf4Qx0Og9V1gMsRoqz3O+5ENkVcNOfI+SMJ3QhQsdEoKX99r0zvreagXot2parPxmrwwUM/ja8ug==" + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] }, - "diff": { - "version": "3.5.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", - "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "node_modules/immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", "dev": true }, - "duplexify": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", - "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "node_modules/import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, - "requires": { - "end-of-stream": "^1.0.0", - "inherits": "^2.0.1", - "readable-stream": "^2.0.0", - "stream-shift": "^1.0.0" + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "each-props": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz", - "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==", + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dev": true, - "requires": { - "is-plain-object": "^2.0.1", - "object.defaults": "^1.1.0" + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" } }, - "electron-to-chromium": { - "version": "1.3.774", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.774.tgz", - "integrity": "sha512-Fggh17Q1yyv1uMzq8Qn1Ci58P50qcRXMXd2MBcB9sxo6rJxjUutWcNw8uCm3gFWMdcblBO6mDT5HzX/RVRRECA==", + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, - "emitter-listener": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/emitter-listener/-/emitter-listener-1.1.2.tgz", - "integrity": "sha512-Bt1sBAGFHY9DKY+4/2cV6izcKJUf5T7/gkdmkxzX/qv9CcGH8xSwVRW5mtX03SWJtRTWSOpzCuWN9rBFYZepZQ==", - "requires": { - "shimmer": "^1.2.0" + "node_modules/interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true, + "engines": { + "node": ">= 0.10" } }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "emojis-list": { + "node_modules/is-binary-path": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=", - "dev": true - }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { - "once": "^1.4.0" + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" } }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "memory-fs": "^0.4.0", - "tapable": "^1.0.0" + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - } + "engines": { + "node": ">=0.10.0" } }, - "envinfo": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.7.3.tgz", - "integrity": "sha512-46+j5QxbPWza0PB1i15nZx0xQ4I/EfQxg9J8Had3b408SV63nEtor2e+oiY63amTo9KTuh2a3XLObNwduxYwwA==", - "dev": true + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "errno": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", - "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, - "requires": { - "prr": "~1.0.1" + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", "dev": true, - "requires": { - "is-arrayish": "^0.2.1" + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "es-abstract": { - "version": "1.17.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", - "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, - "requires": { - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1", - "is-callable": "^1.1.5", - "is-regex": "^1.0.5", - "object-inspect": "^1.7.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.0", - "string.prototype.trimleft": "^2.1.1", - "string.prototype.trimright": "^2.1.1" - }, - "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } + "engines": { + "node": ">=0.12.0" } }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "engines": { + "node": ">=8" } }, - "es5-ext": { - "version": "0.10.53", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", - "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, - "requires": { - "es6-iterator": "~2.0.3", - "es6-symbol": "~3.1.3", - "next-tick": "~1.0.0" + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "es6-iterator": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", - "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.35", - "es6-symbol": "^3.1.1" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "es6-promise": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", - "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "es6-promisify": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", - "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, - "requires": { - "es6-promise": "^4.0.3" + "engines": { + "node": ">=0.10.0" } }, - "es6-symbol": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", - "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, - "requires": { - "d": "^1.0.1", - "ext": "^1.1.2" + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" } }, - "es6-weak-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", - "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, - "requires": { - "d": "1", - "es5-ext": "^0.10.46", - "es6-iterator": "^2.0.3", - "es6-symbol": "^3.1.1" + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", "dev": true, - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" } }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, - "requires": { - "estraverse": "^5.2.0" - }, "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", - "dev": true - } + "immediate": "~3.0.5" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "node_modules/loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", + "dev": true, + "engines": { + "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "events": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.2.0.tgz", - "integrity": "sha512-/46HWwbfCX2xTawVfkKLGxMifJYQBWMwY1mjywRtb4c9x8l5NP3KoJtnIOiL1hfdRkIuYhETxQlo62IF8tcnlg==", - "dev": true + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" }, - "execa": { + "node_modules/log-symbols": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, - "requires": { - "cross-spawn": "^7.0.0", - "get-stream": "^5.0.0", - "human-signals": "^1.1.1", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.0", - "onetime": "^5.1.0", - "signal-exit": "^3.0.2", - "strip-final-newline": "^2.0.0" - }, "dependencies": { - "cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "requires": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - } - }, - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - }, - "shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "requires": { - "shebang-regex": "^3.0.0" - } - }, - "shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - } + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, - "requires": { - "debug": "^2.3.3", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "posix-character-classes": "^0.1.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" } }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" + "engines": { + "node": ">= 0.6" } }, - "ext": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", - "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, - "requires": { - "type": "^2.0.0" - }, "dependencies": { - "type": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", - "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", - "dev": true - } + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" } }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, - "requires": { - "array-unique": "^0.3.2", - "define-property": "^1.0.0", - "expand-brackets": "^2.1.4", - "extend-shallow": "^2.0.1", - "fragment-cache": "^0.2.1", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "fancy-log": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz", - "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==", + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, - "requires": { - "ansi-gray": "^0.1.1", - "color-support": "^1.1.3", - "parse-node-version": "^1.0.0", - "time-stamp": "^1.0.0" + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" } }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "node_modules/mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, - "fast-levenshtein": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz", - "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=", + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true }, - "file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, - "optional": true + "engines": { + "node": ">=0.10.0" + } }, - "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } + "wrappy": "1" } }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "findup-sync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz", - "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==", + "node_modules/ora": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^4.0.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.3.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "string-width": "^6.1.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", + "node_modules/ora/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "flat": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz", - "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==", + "node_modules/ora/node_modules/log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", "dev": true, - "requires": { - "is-buffer": "~2.0.3" + "dependencies": { + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" + }, + "engines": { + "node": ">=12" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "dependencies": { - "is-buffer": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz", - "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==", - "dev": true - } + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "flush-write-stream": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", - "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^2.3.6" + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "follow-redirects": { - "version": "1.13.3", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.3.tgz", - "integrity": "sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA==" + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "requires": { - "for-in": "^1.0.1" + "engines": { + "node": ">=8" } }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, - "requires": { - "map-cache": "^0.2.2" + "engines": { + "node": ">=0.10.0" } }, - "fs-mkdirp-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", - "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "requires": { - "graceful-fs": "^4.1.11", - "through2": "^2.0.3" + "engines": { + "node": ">=8" } }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, - "fsevents": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", - "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "dev": true, - "optional": true, - "requires": { - "bindings": "^1.5.0", - "nan": "^2.12.1" - } - }, - "function-bind": { + "node_modules/picocolors": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, - "requires": { - "pump": "^3.0.0" + "engines": { + "node": ">=8.6" }, - "dependencies": { - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - } + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "glob": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", - "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "glob-stream": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", - "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, - "requires": { - "extend": "^3.0.0", - "glob": "^7.1.1", - "glob-parent": "^3.1.0", - "is-negated-glob": "^1.0.0", - "ordered-read-streams": "^1.0.0", - "pumpify": "^1.3.5", - "readable-stream": "^2.1.5", - "remove-trailing-separator": "^1.0.1", - "to-absolute-glob": "^2.0.0", - "unique-stream": "^2.0.2" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true - }, - "glob-watcher": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz", - "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==", + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, - "requires": { - "anymatch": "^2.0.0", - "async-done": "^1.2.0", - "chokidar": "^2.0.0", - "is-negated-glob": "^1.0.0", - "just-debounce": "^1.0.0", - "normalize-path": "^3.0.0", - "object.defaults": "^1.1.0" + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" } }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "glogg": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz", - "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==", + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, - "requires": { - "sparkles": "^1.0.0" + "dependencies": { + "safe-buffer": "^5.1.0" } }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", - "dev": true - }, - "growl": { - "version": "1.10.5", - "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", - "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", - "dev": true + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } }, - "gulp": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz", - "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==", + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, - "requires": { - "glob-watcher": "^5.0.3", - "gulp-cli": "^2.2.0", - "undertaker": "^1.2.1", - "vinyl-fs": "^3.0.0" + "dependencies": { + "picomatch": "^2.2.1" }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", + "dev": true, "dependencies": { - "gulp-cli": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz", - "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==", - "dev": true, - "requires": { - "ansi-colors": "^1.0.1", - "archy": "^1.0.0", - "array-sort": "^1.0.0", - "color-support": "^1.1.3", - "concat-stream": "^1.6.0", - "copy-props": "^2.0.1", - "fancy-log": "^1.3.2", - "gulplog": "^1.0.0", - "interpret": "^1.4.0", - "isobject": "^3.0.1", - "liftoff": "^3.1.0", - "matchdep": "^2.0.0", - "mute-stdout": "^1.0.0", - "pretty-hrtime": "^1.0.0", - "replace-homedir": "^1.0.0", - "semver-greatest-satisfied-range": "^1.1.0", - "v8flags": "^3.2.0", - "yargs": "^7.1.0" - } - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - } + "resolve": "^1.9.0" + }, + "engines": { + "node": ">= 0.10" } }, - "gulp-tslint": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/gulp-tslint/-/gulp-tslint-8.1.4.tgz", - "integrity": "sha512-wBoZIEMJRz9urHwolsvQpngA9l931p6g/Liwz1b/KrsVP6jEBFZv/o0NS1TFCQZi/l8mXxz8+v3twhf4HOXxPQ==", + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, - "requires": { - "@types/fancy-log": "1.3.0", - "ansi-colors": "^1.0.1", - "fancy-log": "1.3.3", - "map-stream": "~0.0.7", - "plugin-error": "1.0.1", - "through": "~2.3.8" + "engines": { + "node": ">=0.10.0" } }, - "gulplog": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", - "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, - "requires": { - "glogg": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, - "requires": { - "function-bind": "^1.1.1" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "has-flag": { + "node_modules/resolve-cwd": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" + "engines": { + "node": ">=8" } }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "node_modules/restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", + "node_modules/schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, - "requires": { - "parse-passwd": "^1.0.0" + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "http-proxy-agent": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", - "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "requires": { - "agent-base": "4", - "debug": "3.1.0" + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "https-proxy-agent": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", - "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "node_modules/serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, - "requires": { - "agent-base": "^4.3.0", - "debug": "^3.1.0" + "dependencies": { + "randombytes": "^2.1.0" } }, - "human-signals": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", "dev": true }, - "import-local": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", - "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, - "requires": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" } }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" } }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "interpret": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz", - "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==", - "dev": true + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" + "engines": { + "node": ">= 8" } }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-binary-path": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", - "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, - "requires": { - "binary-extensions": "^1.0.0" + "engines": { + "node": ">=0.10.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-callable": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", - "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==", + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "node_modules/stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "bl": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "is-date-object": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", - "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==", - "dev": true + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "node_modules/string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } }, - "is-fullwidth-code-point": { + "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "requires": { - "number-is-nan": "^1.0.0" + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "is-negated-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", - "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", - "dev": true + "node_modules/tas-client": { + "version": "0.2.33", + "resolved": "https://registry.npmjs.org/tas-client/-/tas-client-0.2.33.tgz", + "integrity": "sha512-V+uqV66BOQnWxvI6HjDnE4VkInmYZUQ4dgB7gzaDyFyFSK1i1nF/j7DpS9UbQAgV9NaF1XpcyuavnM1qOeiEIg==" }, - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "node_modules/terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" } }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "node_modules/terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "dev": true, - "requires": { - "isobject": "^3.0.1" + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "is-regex": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", - "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, - "requires": { - "has": "^1.0.3" + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "node_modules/ts-loader": { + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, - "requires": { - "is-unc-path": "^1.0.0" + "dependencies": { + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "typescript": "*", + "webpack": "^5.0.0" } }, - "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", - "dev": true + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, - "is-symbol": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz", - "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==", + "node_modules/tslint": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", + "deprecated": "TSLint has been deprecated in favor of ESLint. Please see https://github.com/palantir/tslint/issues/4534 for more information.", "dev": true, - "requires": { - "has-symbols": "^1.0.1" - }, "dependencies": { - "has-symbols": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", - "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", - "dev": true - } + "@babel/code-frame": "^7.0.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^4.0.1", + "glob": "^7.1.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.3", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.13.0", + "tsutils": "^2.29.0" + }, + "bin": { + "tslint": "bin/tslint" + }, + "engines": { + "node": ">=4.8.0" + }, + "peerDependencies": { + "typescript": ">=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >=3.0.0-dev || >= 3.1.0-dev || >= 3.2.0-dev || >= 4.0.0-dev" } }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "node_modules/tslint/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" } }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-valid-glob": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", - "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "node_modules/tslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } + "sprintf-js": "~1.0.2" } }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", + "node_modules/tslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "node_modules/tslint/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, - "requires": { - "minimist": "^1.2.0" - }, "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" } }, - "just-debounce": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.0.0.tgz", - "integrity": "sha1-h/zPrv/AtozRnVX2cilD+SnqNeo=", - "dev": true + "node_modules/tslint/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } }, - "kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "node_modules/tslint/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", "dev": true }, - "last-run": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz", - "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=", + "node_modules/tslint/node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, - "requires": { - "default-resolution": "^2.0.0", - "es6-weak-map": "^2.0.1" + "engines": { + "node": ">=0.3.1" } }, - "lazystream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", - "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "node_modules/tslint/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "requires": { - "readable-stream": "^2.0.5" + "engines": { + "node": ">=0.8.0" } }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "node_modules/tslint/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "requires": { - "invert-kv": "^1.0.0" + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "lead": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", - "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "node_modules/tslint/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, - "requires": { - "flush-write-stream": "^1.0.2" + "engines": { + "node": ">=4" } }, - "leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true - }, - "liftoff": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz", - "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==", + "node_modules/tslint/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^3.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "node_modules/tslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "loader-runner": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.1.0.tgz", - "integrity": "sha512-oR4lB4WvwFoC70ocraKhn5nkKSs23t57h9udUgw8o0iH8hMXeEoRuUgfcvgUwAJ1ZpRqBvcou4N2SMvM1DwMrA==", - "dev": true - }, - "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "node_modules/tslint/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, - "requires": { - "big.js": "^5.2.2", - "emojis-list": "^2.0.0", - "json5": "^1.0.1" + "bin": { + "semver": "bin/semver" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "node_modules/tslint/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" } }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "node_modules/tsutils": { + "version": "2.29.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", + "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", "dev": true, - "requires": { - "chalk": "^2.4.2" + "dependencies": { + "tslib": "^1.8.1" + }, + "peerDependencies": { + "typescript": ">=2.1.0 || >=2.1.0-dev || >=2.2.0-dev || >=2.3.0-dev || >=2.4.0-dev || >=2.5.0-dev || >=2.6.0-dev || >=2.7.0-dev || >=2.8.0-dev || >=2.9.0-dev || >= 3.0.0-dev || >= 3.1.0-dev" } }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", + "node_modules/typescript": { + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true, - "requires": { - "kind-of": "^6.0.2" + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" } }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } }, - "map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=", + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" } }, - "matchdep": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz", - "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=", - "dev": true, - "requires": { - "findup-sync": "^2.0.0", - "micromatch": "^3.0.4", - "resolve": "^1.4.0", - "stack-trace": "0.0.10" - }, + "node_modules/vscode-extension-telemetry-wrapper": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/vscode-extension-telemetry-wrapper/-/vscode-extension-telemetry-wrapper-0.14.0.tgz", + "integrity": "sha512-EYr1hqiYVSGfupchDN405zSwuvA8V3tJ62KcLIRDr/4ongOc2AvSZ0BlRq8a0w950tadsMlXTKEheB97fZBttg==", "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - }, - "is-glob": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", - "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", - "dev": true, - "requires": { - "is-extglob": "^2.1.0" - } - } + "@vscode/extension-telemetry": "^0.9.6", + "uuid": "^8.3.2" } }, - "memory-fs": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", - "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", - "dev": true, - "requires": { - "errno": "^0.1.3", - "readable-stream": "^2.0.1" + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "engines": { + "node": ">=14.0.0" } }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/vscode-languageclient": { + "version": "6.0.0-next.9", + "resolved": "https://registry.npmjs.org/vscode-languageclient/-/vscode-languageclient-6.0.0-next.9.tgz", + "integrity": "sha512-NEpeeFM9FKrrRqlBHXGfwpkhtnjruDz3zfFBP+Cymr10qigAEtE/JsODJsIG/ErGqjh3/JXxu8SUOVTGu5oK+w==", + "dependencies": { + "semver": "^6.3.0", + "vscode-languageserver-protocol": "^3.15.0-next.14" + }, + "engines": { + "vscode": "^1.40.0" + } + }, + "node_modules/vscode-languageclient/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-protocol/node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.16.0", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.16.0.tgz", + "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" + }, + "node_modules/vscode-tas-client": { + "version": "0.1.84", + "resolved": "https://registry.npmjs.org/vscode-tas-client/-/vscode-tas-client-0.1.84.tgz", + "integrity": "sha512-rUTrUopV+70hvx1hW5ebdw1nd6djxubkLvVxjGdyD/r5v/wcVF41LIfiAtbm5qLZDtQdsMH1IaCuDoluoIa88w==", + "dependencies": { + "tas-client": "0.2.33" + }, + "engines": { + "vscode": "^1.85.0" + } + }, + "node_modules/watchpack": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack": { + "version": "5.105.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", + "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-cli": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "dependencies": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", + "import-local": "^3.0.2", + "interpret": "^2.2.0", + "rechoir": "^0.7.0", + "webpack-merge": "^5.7.3" + }, + "bin": { + "webpack-cli": "bin/cli.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "4.x.x || 5.x.x" + }, + "peerDependenciesMeta": { + "@webpack-cli/generators": { + "optional": true + }, + "@webpack-cli/migrate": { + "optional": true + }, + "webpack-bundle-analyzer": { + "optional": true + }, + "webpack-dev-server": { + "optional": true + } + } + }, + "node_modules/webpack-cli/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/webpack-merge": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "node_modules/workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "braces": "^2.3.1", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "extglob": "^2.0.4", - "fragment-cache": "^0.2.1", - "kind-of": "^6.0.2", - "nanomatch": "^1.2.9", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.2" + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" } }, - "mime-db": { - "version": "1.44.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true }, - "mime-types": { - "version": "2.1.27", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", - "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true + }, + "@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", "dev": true, "requires": { - "mime-db": "1.44.0" + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" } }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", "dev": true, "requires": { - "brace-expansion": "^1.1.7" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", "dev": true, "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "mkdirp": { + "@microsoft/1ds-core-js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-core-js/-/1ds-core-js-4.3.4.tgz", + "integrity": "sha512-3gbDUQgAO8EoyQTNcAEkxpuPnioC0May13P1l1l0NKZ128L9Ts/sj8QsfwCRTjHz0HThlA+4FptcAJXNYUy3rg==", + "requires": { + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "@microsoft/1ds-post-js": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/1ds-post-js/-/1ds-post-js-4.3.4.tgz", + "integrity": "sha512-nlKjWricDj0Tn68Dt0P8lX9a+X7LYrqJ6/iSfQwMfDhRIGLqW+wxx8gxS+iGWC/oc8zMQAeiZaemUpCwQcwpRQ==", + "requires": { + "@microsoft/1ds-core-js": "4.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "@microsoft/applicationinsights-channel-js": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-channel-js/-/applicationinsights-channel-js-3.3.4.tgz", + "integrity": "sha512-Z4nrxYwGKP9iyrYtm7iPQXVOFy4FsEsX0nDKkAi96Qpgw+vEh6NH4ORxMMuES0EollBQ3faJyvYCwckuCVIj0g==", + "requires": { + "@microsoft/applicationinsights-common": "3.3.4", + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "@microsoft/applicationinsights-common": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-common/-/applicationinsights-common-3.3.4.tgz", + "integrity": "sha512-4ms16MlIvcP4WiUPqopifNxcWCcrXQJ2ADAK/75uok2mNQe6ZNRsqb/P+pvhUxc8A5HRlvoXPP1ptDSN5Girgw==", + "requires": { + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "@microsoft/applicationinsights-core-js": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-core-js/-/applicationinsights-core-js-3.3.4.tgz", + "integrity": "sha512-MummANF0mgKIkdvVvfmHQTBliK114IZLRhTL0X0Ep+zjDwWMHqYZgew0nlFKAl6ggu42abPZFK5afpE7qjtYJA==", + "requires": { + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "@microsoft/applicationinsights-shims": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-shims/-/applicationinsights-shims-3.0.1.tgz", + "integrity": "sha512-DKwboF47H1nb33rSUfjqI6ryX29v+2QWcTrRvcQDA32AZr5Ilkr7whOOSsD1aBzwqX0RJEIP1Z81jfE3NBm/Lg==", + "requires": { + "@nevware21/ts-utils": ">= 0.9.4 < 2.x" + } + }, + "@microsoft/applicationinsights-web-basic": { + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@microsoft/applicationinsights-web-basic/-/applicationinsights-web-basic-3.3.4.tgz", + "integrity": "sha512-OpEPXr8vU/t/M8T9jvWJzJx/pCyygIiR1nGM/2PTde0wn7anl71Gxl5fWol7K/WwFEORNjkL3CEyWOyDc+28AA==", + "requires": { + "@microsoft/applicationinsights-channel-js": "3.3.4", + "@microsoft/applicationinsights-common": "3.3.4", + "@microsoft/applicationinsights-core-js": "3.3.4", + "@microsoft/applicationinsights-shims": "3.0.1", + "@microsoft/dynamicproto-js": "^2.0.3", + "@nevware21/ts-async": ">= 0.5.2 < 2.x", + "@nevware21/ts-utils": ">= 0.11.3 < 2.x" + } + }, + "@microsoft/dynamicproto-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@microsoft/dynamicproto-js/-/dynamicproto-js-2.0.3.tgz", + "integrity": "sha512-JTWTU80rMy3mdxOjjpaiDQsTLZ6YSGGqsjURsY6AUQtIj0udlF/jYmhdLZu8693ZIC0T1IwYnFa0+QeiMnziBA==", + "requires": { + "@nevware21/ts-utils": ">= 0.10.4 < 2.x" + } + }, + "@nevware21/ts-async": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.3.tgz", - "integrity": "sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg==", + "resolved": "https://registry.npmjs.org/@nevware21/ts-async/-/ts-async-0.5.3.tgz", + "integrity": "sha512-UsF7eerLsVfid7iV1oXF80qXBwHNBeqSqfh/nPZgirRU1MACmSsj83EZKS2ViFHVfSGG6WIuXMGBP6KciXfYhA==", + "requires": { + "@nevware21/ts-utils": ">= 0.11.5 < 2.x" + } + }, + "@nevware21/ts-utils": { + "version": "0.11.5", + "resolved": "https://registry.npmjs.org/@nevware21/ts-utils/-/ts-utils-0.11.5.tgz", + "integrity": "sha512-7nIzWKR50mf3htOg53kwPLqD5iJaRfVyBvb1NJhlIncyP1WzK8vAQbU9rqIsRtv7td1CnqspdP6IWNEjOjaeug==" + }, + "@types/eslint": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, "requires": { - "minimist": "^1.2.5" - }, - "dependencies": { - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - } + "@types/estree": "*", + "@types/json-schema": "*" } }, - "mocha": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-7.1.1.tgz", - "integrity": "sha512-3qQsu3ijNS3GkWcccT5Zw0hf/rWvu1fTN9sPvEd81hlwsr30GX2GcDSSoBxo24IR8FelmrAydGC6/1J5QQP4WA==", + "@types/eslint-scope": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", + "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, "requires": { - "ansi-colors": "3.2.3", - "browser-stdout": "1.3.1", - "chokidar": "3.3.0", - "debug": "3.2.6", - "diff": "3.5.0", - "escape-string-regexp": "1.0.5", - "find-up": "3.0.0", - "glob": "7.1.3", - "growl": "1.10.5", - "he": "1.2.0", - "js-yaml": "3.13.1", - "log-symbols": "3.0.0", - "minimatch": "3.0.4", - "mkdirp": "0.5.3", - "ms": "2.1.1", - "node-environment-flags": "1.0.6", - "object.assign": "4.1.0", - "strip-json-comments": "2.0.1", - "supports-color": "6.0.0", - "which": "1.3.1", - "wide-align": "1.1.3", - "yargs": "13.3.2", - "yargs-parser": "13.1.2", - "yargs-unparser": "1.6.0" - }, - "dependencies": { - "ansi-colors": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.2.3.tgz", - "integrity": "sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw==", - "dev": true - }, - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "anymatch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", - "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "binary-extensions": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz", - "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", - "dev": true - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chokidar": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.0.tgz", - "integrity": "sha512-dGmKLDdT3Gdl7fBUe8XK+gAtGmzy5Fn0XkkWQuYxGIgWVPPse2CxFA5mtrlD0TOHaHjEUqkWNyP1XdHoJES/4A==", - "dev": true, - "requires": { - "anymatch": "~3.1.1", - "braces": "~3.0.2", - "fsevents": "~2.1.1", - "glob-parent": "~5.1.0", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.2.0" - }, - "dependencies": { - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - } - } - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", - "dev": true, - "optional": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "readdirp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.2.0.tgz", - "integrity": "sha512-crk4Qu3pmXwgxdSgGhgA/eXiJAPQiX4GMOZZMXnqKxHX7TaoL+3gQVo/WeuAiogr07DpnfjIMpXXa+PAIvwPGQ==", - "dev": true, - "requires": { - "picomatch": "^2.0.4" - } - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "supports-color": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz", - "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "@types/lodash": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.13.tgz", + "integrity": "sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==", + "dev": true + }, + "@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "@types/mocha": { + "version": "10.0.9", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.9.tgz", + "integrity": "sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==", + "dev": true + }, + "@types/node": { + "version": "14.18.63", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.63.tgz", + "integrity": "sha512-fAtCfv4jJg+ExtXhvCkCqUKZ+4ok/JQk01qDKhL5BDDoS3AxKXhV5/MAVUZyQnSEd2GT92fkgZl0pz0Q0AzcIQ==", + "dev": true + }, + "@types/uuid": { + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-8.3.4.tgz", + "integrity": "sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==", + "dev": true + }, + "@types/vscode": { + "version": "1.95.0", + "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.95.0.tgz", + "integrity": "sha512-0LBD8TEiNbet3NvWsmn59zLzOFu/txSlGxnv5yAFHCrhG9WvAnR3IvfHzMOs2aeWqgvNjq9pO99IUw8d3n+unw==", + "dev": true + }, + "@vscode/extension-telemetry": { + "version": "0.9.7", + "resolved": "https://registry.npmjs.org/@vscode/extension-telemetry/-/extension-telemetry-0.9.7.tgz", + "integrity": "sha512-2GQbcfDUTg0QC1v0HefkHNwYrE5LYKzS3Zb0+uA6Qn1MBDzgiSh23ddOZF/JRqhqBFOG0mE70XslKSGQ5v9KwQ==", + "requires": { + "@microsoft/1ds-core-js": "^4.3.0", + "@microsoft/1ds-post-js": "^4.3.0", + "@microsoft/applicationinsights-web-basic": "^3.3.0" + } + }, + "@vscode/test-electron": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@vscode/test-electron/-/test-electron-2.4.1.tgz", + "integrity": "sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ==", + "dev": true, + "requires": { + "http-proxy-agent": "^7.0.2", + "https-proxy-agent": "^7.0.5", + "jszip": "^3.10.1", + "ora": "^7.0.1", + "semver": "^7.6.2" + } + }, + "@webassemblyjs/ast": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", + "dev": true, + "requires": { + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true + }, + "@webassemblyjs/helper-numbers": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", + "dev": true, + "requires": { + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "@webassemblyjs/ieee754": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } }, - "mute-stdout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz", - "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==", + "@webassemblyjs/leb128": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", "dev": true }, - "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "@webassemblyjs/wasm-edit": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, - "optional": true + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" + } }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "@webassemblyjs/wasm-gen": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, "requires": { - "arr-diff": "^4.0.0", - "array-unique": "^0.3.2", - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "fragment-cache": "^0.2.1", - "is-windows": "^1.0.2", - "kind-of": "^6.0.2", - "object.pick": "^1.3.0", - "regex-not": "^1.0.0", - "snapdragon": "^0.8.1", - "to-regex": "^3.0.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, - "neo-async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "@webassemblyjs/wasm-opt": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.14.1", + "@xtuc/long": "4.2.2" + } + }, + "@webpack-cli/configtest": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-1.2.0.tgz", + "integrity": "sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==", + "dev": true, + "requires": {} + }, + "@webpack-cli/info": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-1.5.0.tgz", + "integrity": "sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==", + "dev": true, + "requires": { + "envinfo": "^7.7.3" + } + }, + "@webpack-cli/serve": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-1.7.0.tgz", + "integrity": "sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==", + "dev": true, + "requires": {} + }, + "@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "next-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", - "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, - "nice-try": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.4.tgz", - "integrity": "sha512-2NpiFHqC87y/zFke0fC0spBXL3bBsoh/p5H1EFhshxjCR5+0g2d6BiXbUFz9v1sAcxsk2htp2eQnNIci2dIYcA==", + "acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "dev": true }, - "node-environment-flags": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.6.tgz", - "integrity": "sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==", + "acorn-import-phases": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/acorn-import-phases/-/acorn-import-phases-1.0.4.tgz", + "integrity": "sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, "requires": { - "object.getownpropertydescriptors": "^2.0.3", - "semver": "^5.7.0" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } + "debug": "^4.3.4" } }, - "node-releases": { - "version": "1.1.73", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", - "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", - "dev": true + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "ajv": "^8.0.0" } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.3" + } + }, + "ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true }, - "now-and-later": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", - "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "once": "^1.3.2" + "color-convert": "^2.0.1" } }, - "npm-run-path": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "requires": { - "path-key": "^3.0.0" - }, - "dependencies": { - "path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true - } + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" } }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "baseline-browser-mapping": { + "version": "2.9.19", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.19.tgz", + "integrity": "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg==", + "dev": true + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, + "bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", "dev": true, "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" }, "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { - "is-buffer": "^1.1.5" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, - "object-inspect": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", - "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "isobject": "^3.0.0" + "balanced-match": "^1.0.0" } }, - "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "function-bind": "^1.1.1", - "has-symbols": "^1.0.0", - "object-keys": "^1.0.11" + "fill-range": "^7.1.1" } }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } + "browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true }, - "object.getownpropertydescriptors": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", - "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", + "browserslist": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "es-abstract": "^1.17.0-next.1" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" } }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" } }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha512-wxXCdllwGhI2kCC0MnvTGYTMvnVZTvqgypkiTI8Pa5tcz2i6VqsqwYGgqwXji+4RgCzms6EajE4IxiUH6HH8nQ==", + "dev": true + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001769", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001769.tgz", + "integrity": "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "isobject": "^3.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } } }, - "object.reduce": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz", - "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=", + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", "dev": true, "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "chrome-trace-event": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", + "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "dev": true + }, + "cli-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-4.0.0.tgz", + "integrity": "sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==", "dev": true, "requires": { - "wrappy": "1" + "restore-cursor": "^4.0.0" } }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "mimic-fn": "^2.1.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, - "ordered-read-streams": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", - "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "readable-stream": "^2.0.1" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "lcid": "^1.0.0" + "color-name": "~1.1.4" } }, - "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "compare-versions": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-4.1.4.tgz", + "integrity": "sha512-FemMreK9xNyL8gQevsdRMrvO4lFCkQP7qbuktn1q8ndcNk1+0mz7lgE7b/sNvbhVgY4w6tMN1FDp6aADjqw2rw==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", "dev": true, "requires": { - "p-try": "^2.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, "requires": { - "p-limit": "^2.0.0" + "ms": "^2.1.3" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", "dev": true }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } + "diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, - "parse-node-version": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", - "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", "dev": true }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", + "electron-to-chromium": { + "version": "1.5.286", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.286.tgz", + "integrity": "sha512-9tfDXhJ4RKFNerfjdCcZfufu49vg620741MNs26a9+bhLThdB+plgMeou98CAaHu/WATj2iHOOHTp1hWtABj2A==", "dev": true }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", "dev": true }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "enhanced-resolve": { + "version": "5.19.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.19.0.tgz", + "integrity": "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg==", "dev": true, "requires": { - "pinkie-promise": "^2.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.3.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "envinfo": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.14.0.tgz", + "integrity": "sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg==", "dev": true }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "es-module-lexer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, "requires": { - "path-root-regex": "^0.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" } }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + } } }, - "picomatch": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", - "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true + }, + "fastest-levenshtein": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", + "integrity": "sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==", + "dev": true + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { - "pinkie": "^2.0.0" + "to-regex-range": "^5.0.1" } }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - } + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" } }, - "plugin-error": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz", - "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==", + "flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "requires": { - "ansi-colors": "^1.0.1", - "arr-diff": "^4.0.0", - "arr-union": "^3.1.0", - "extend-shallow": "^3.0.2" + "is-glob": "^4.0.1" } }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", "dev": true }, - "pretty-hrtime": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", - "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "requires": { + "function-bind": "^1.1.2" + } + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", "dev": true }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "agent-base": "^7.1.0", + "debug": "^4.3.4" } }, - "pumpify": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", - "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, "requires": { - "duplexify": "^3.6.0", - "inherits": "^2.0.3", - "pump": "^2.0.0" + "agent-base": "^7.0.2", + "debug": "4" } }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "dev": true }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==", + "dev": true + }, + "import-local": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.2.0.tgz", + "integrity": "sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==", "dev": true, "requires": { - "safe-buffer": "^5.1.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dev": true, "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" + "once": "^1.3.0", + "wrappy": "1" } }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", + "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" + "binary-extensions": "^2.0.0" } }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "hasown": "^2.0.2" } }, - "readdirp": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", - "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "dev": true, "requires": { - "graceful-fs": "^4.1.11", - "micromatch": "^3.1.10", - "readable-stream": "^2.0.2" + "is-extglob": "^2.1.1" } }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "resolve": "^1.1.6" + "isobject": "^3.0.1" } }, - "reduce-flatten": { + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "isexe": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true }, - "remove-bom-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", - "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "requires": { - "is-buffer": "^1.1.5", - "is-utf8": "^0.2.1" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" } }, - "remove-bom-stream": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", - "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { - "remove-bom-buffer": "^3.0.0", - "safe-buffer": "^5.1.0", - "through2": "^2.0.3" + "argparse": "^2.0.1" } }, - "remove-trailing-separator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true + "jszip": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.10.1.tgz", + "integrity": "sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } }, - "replace-ext": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", - "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==", + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, - "replace-homedir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz", - "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=", + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", "dev": true, "requires": { - "homedir-polyfill": "^1.0.1", - "is-absolute": "^1.0.0", - "remove-trailing-separator": "^1.1.0" + "immediate": "~3.0.5" } }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "loader-runner": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "path-parse": "^1.0.6" + "p-locate": "^5.0.0" } }, - "resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==" + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "requires": { - "resolve-from": "^5.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" } }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" + "braces": "^3.0.3", + "picomatch": "^2.3.1" } }, - "resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true }, - "resolve-options": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", - "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, "requires": { - "value-or-function": "^3.0.0" + "mime-db": "1.52.0" } }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } + "brace-expansion": "^2.0.1" } }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "ret": "~0.1.10" + "minimist": "^1.2.6" } }, - "schema-utils": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.0.0.tgz", - "integrity": "sha512-6D82/xSzO094ajanoOSbe4YvXWMfn2A//8Y1+MUqFAJul5Bs+yn36xbK9OtNDcRVSBJ9jjeoXftM6CfztsjOAA==", - "dev": true, - "requires": { - "@types/json-schema": "^7.0.6", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "mocha": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz", + "integrity": "sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" } }, - "semver": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", - "integrity": "sha1-4FnAnYVx8FQII3M0M1BdOi8AsY4=" + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true }, - "semver-greatest-satisfied-range": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz", - "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=", + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, "requires": { - "sver-compat": "^1.5.0" + "wrappy": "1" } }, - "serialize-javascript": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-5.0.1.tgz", - "integrity": "sha512-SaaNal9imEO737H2c05Og0/8LUXG7EnsZyMa8MzkmuHoELfT6txuj0cMqRj6zfPKnmQ1yasR4PCJc8x+M4JSPA==", + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "randombytes": "^2.1.0" + "mimic-fn": "^2.1.0" } }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "ora": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-7.0.1.tgz", + "integrity": "sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==", "dev": true, "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" + "chalk": "^5.3.0", + "cli-cursor": "^4.0.0", + "cli-spinners": "^2.9.0", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^1.3.0", + "log-symbols": "^5.1.0", + "stdin-discarder": "^0.1.0", + "string-width": "^6.1.0", + "strip-ansi": "^7.1.0" }, "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true + }, + "is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "dev": true + }, + "log-symbols": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-5.1.0.tgz", + "integrity": "sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==", "dev": true, "requires": { - "is-extendable": "^0.1.0" + "chalk": "^5.0.0", + "is-unicode-supported": "^1.1.0" } } } }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, "requires": { - "shebang-regex": "^1.0.0" + "yocto-queue": "^0.1.0" } }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shelljs": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.3.tgz", - "integrity": "sha512-fc0BKlAWiLpwZljmOvAOTE/gXawtCoNrP5oaY7KIaQbbyHeQVg01pSEuEGvGh3HEdBU4baCD7wQBwADmM/7f7A==", + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" + "p-limit": "^3.0.2" } }, - "shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, - "signal-exit": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", - "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", "dev": true }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "base": "^0.11.1", - "debug": "^2.2.0", - "define-property": "^0.2.5", - "extend-shallow": "^2.0.1", - "map-cache": "^0.2.2", - "source-map": "^0.5.6", - "source-map-resolve": "^0.5.0", - "use": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "dev": true, - "requires": { - "is-extendable": "^0.1.0" - } - } - } + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" + "find-up": "^4.0.0" }, "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "requires": { - "is-descriptor": "^1.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" } }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "p-locate": "^4.1.0" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "kind-of": "^6.0.0" + "p-try": "^2.0.0" } }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-list-map": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz", - "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==", - "dev": true - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "requires": { + "p-limit": "^2.2.0" + } } } }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "sparkles": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz", - "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==", + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", "dev": true }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" + "safe-buffer": "^5.1.0" } }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "spdx-license-ids": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", - "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "dev": true, "requires": { - "extend-shallow": "^3.0.0" + "picomatch": "^2.2.1" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "stack-chain": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/stack-chain/-/stack-chain-1.3.7.tgz", - "integrity": "sha1-0ZLJ/06moiyUxN1FkXHj8AzqEoU=" - }, - "stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=", - "dev": true - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "rechoir": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.1.tgz", + "integrity": "sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==", "dev": true, "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } + "resolve": "^1.9.0" } }, - "stream-exhaust": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz", - "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==", + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true }, - "stream-shift": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", - "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, - "string.prototype.trimleft": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz", - "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==", + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "resolve-from": "^5.0.0" } }, - "string.prototype.trimright": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz", - "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==", - "dev": true, - "requires": { - "define-properties": "^1.1.3", - "function-bind": "^1.1.1" - } + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "restore-cursor": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-4.0.0.tgz", + "integrity": "sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "schema-utils": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "requires": { - "is-utf8": "^0.2.0" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" } }, - "strip-final-newline": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", - "dev": true - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true }, - "supports-color": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", - "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "serialize-javascript": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "requires": { - "has-flag": "^3.0.0" + "randombytes": "^2.1.0" } }, - "sver-compat": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz", - "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=", + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "dev": true + }, + "shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "es6-iterator": "^2.0.1", - "es6-symbol": "^3.1.1" + "kind-of": "^6.0.2" } }, - "table-layout": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.1.tgz", - "integrity": "sha512-dEquqYNJiGwY7iPfZ3wbXDI944iqanTSchrACLL2nOB+1r+h1Nzu2eH+DuPPvWvm5Ry7iAPeFlgEtP5bIp5U7Q==", + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + "shebang-regex": "^3.0.0" } }, - "tapable": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.1.3.tgz", - "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "tas-client": { - "version": "0.1.21", - "resolved": "https://registry.npmjs.org/tas-client/-/tas-client-0.1.21.tgz", - "integrity": "sha512-7UuIwOXarCYoCTrQHY5n7M+63XuwMC0sVUdbPQzxqDB9wMjIW0JF39dnp3yoJnxr4jJUVhPtvkkXZbAD0BxCcA==", - "requires": { - "axios": "^0.21.1" - } + "signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true }, - "terser": { - "version": "5.5.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", - "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - } - } + "source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true }, - "terser-webpack-plugin": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.0.3.tgz", - "integrity": "sha512-zFdGk8Lh9ZJGPxxPE6jwysOlATWB8GMW8HcfGULWA/nPal+3VdATflQvSBSLQJRCmYZnfFJl6vkRTiwJGNgPiQ==", + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { - "jest-worker": "^26.6.1", - "p-limit": "^3.0.2", - "schema-utils": "^3.0.0", - "serialize-javascript": "^5.0.1", - "source-map": "^0.6.1", - "terser": "^5.3.8" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -4568,137 +5098,275 @@ } } }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "through2": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "stdin-discarder": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.1.0.tgz", + "integrity": "sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==", "dev": true, "requires": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "bl": "^5.0.0" } }, - "through2-filter": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", - "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, "requires": { - "through2": "~2.0.0", - "xtend": "~4.0.0" + "safe-buffer": "~5.1.0" } }, - "time-stamp": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", - "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", - "dev": true + "string-width": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-6.1.0.tgz", + "integrity": "sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^10.2.1", + "strip-ansi": "^7.0.1" + } }, - "to-absolute-glob": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", - "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, "requires": { - "is-absolute": "^1.0.0", - "is-negated-glob": "^1.0.0" + "ansi-regex": "^6.0.1" } }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } + "has-flag": "^4.0.0" } }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true + }, + "tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", + "dev": true + }, + "tas-client": { + "version": "0.2.33", + "resolved": "https://registry.npmjs.org/tas-client/-/tas-client-0.2.33.tgz", + "integrity": "sha512-V+uqV66BOQnWxvI6HjDnE4VkInmYZUQ4dgB7gzaDyFyFSK1i1nF/j7DpS9UbQAgV9NaF1XpcyuavnM1qOeiEIg==" + }, + "terser": { + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "dev": true, "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" } }, - "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "terser-webpack-plugin": { + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "dev": true, "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" } }, - "to-through": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", - "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "dev": true, "requires": { - "through2": "^2.0.3" + "is-number": "^7.0.0" } }, "ts-loader": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-5.4.5.tgz", - "integrity": "sha512-XYsjfnRQCBum9AMRZpk2rTYSVpdZBpZK+kDh0TeT3kxmQNBDVIeUjdPjY5RZry4eIAb8XHc4gYSUiUWPYvzSRw==", + "version": "9.5.1", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", + "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, "requires": { - "chalk": "^2.3.0", - "enhanced-resolve": "^4.0.0", - "loader-utils": "^1.0.2", - "micromatch": "^3.1.4", - "semver": "^5.0.1" + "chalk": "^4.1.0", + "enhanced-resolve": "^5.0.0", + "micromatch": "^4.0.0", + "semver": "^7.3.4", + "source-map": "^0.7.4" } }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", - "dev": true + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "tslint": { - "version": "5.18.0", - "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.18.0.tgz", - "integrity": "sha512-Q3kXkuDEijQ37nXZZLKErssQVnwCV/+23gFEMROi8IlbaBG6tXqLPQJ5Wjcyt/yHPKBC+hD5SzuGaMora+ZS6w==", + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", + "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "builtin-modules": "^1.1.1", "chalk": "^2.3.0", "commander": "^2.12.1", - "diff": "^3.2.0", + "diff": "^4.0.1", "glob": "^7.1.1", "js-yaml": "^3.13.1", "minimatch": "^3.0.4", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "resolve": "^1.3.2", "semver": "^5.3.0", - "tslib": "^1.8.0", + "tslib": "^1.13.0", "tsutils": "^2.29.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } } }, "tsutils": { @@ -4710,284 +5378,46 @@ "tslib": "^1.8.1" } }, - "type": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", - "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "typescript": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", - "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "undertaker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz", - "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==", - "dev": true, - "requires": { - "arr-flatten": "^1.0.1", - "arr-map": "^2.0.0", - "bach": "^1.0.0", - "collection-map": "^1.0.0", - "es6-weak-map": "^2.0.1", - "fast-levenshtein": "^1.0.0", - "last-run": "^1.1.0", - "object.defaults": "^1.0.0", - "object.reduce": "^1.0.0", - "undertaker-registry": "^1.0.0" - } - }, - "undertaker-registry": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz", - "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=", - "dev": true - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unique-stream": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", - "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", - "dev": true, - "requires": { - "json-stable-stringify-without-jsonify": "^1.0.1", - "through2-filter": "^3.0.0" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "upath": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "version": "4.9.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", + "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", "dev": true }, - "uri-js": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.0.tgz", - "integrity": "sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g==", + "update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "requires": { - "punycode": "^2.1.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" } }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, "uuid": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.1.tgz", - "integrity": "sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg==" - }, - "v8-compile-cache": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.2.0.tgz", - "integrity": "sha512-gTpR5XQNKFwOd4clxfnhaqvfqMpqEwr4tOtCyz4MtYZX2JYhfr1JvBFKdS+7K/9rfpZR3VLX+YWBbKoxCgS43Q==", - "dev": true - }, - "v8flags": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz", - "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "value-or-function": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", - "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", - "dev": true - }, - "vinyl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", - "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", - "dev": true, - "requires": { - "clone": "^2.1.1", - "clone-buffer": "^1.0.0", - "clone-stats": "^1.0.0", - "cloneable-readable": "^1.0.0", - "remove-trailing-separator": "^1.0.1", - "replace-ext": "^1.0.0" - } - }, - "vinyl-fs": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", - "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", - "dev": true, - "requires": { - "fs-mkdirp-stream": "^1.0.0", - "glob-stream": "^6.1.0", - "graceful-fs": "^4.0.0", - "is-valid-glob": "^1.0.0", - "lazystream": "^1.0.0", - "lead": "^1.0.0", - "object.assign": "^4.0.4", - "pumpify": "^1.3.5", - "readable-stream": "^2.3.3", - "remove-bom-buffer": "^3.0.0", - "remove-bom-stream": "^1.2.0", - "resolve-options": "^1.1.0", - "through2": "^2.0.0", - "to-through": "^2.0.0", - "value-or-function": "^3.0.0", - "vinyl": "^2.0.0", - "vinyl-sourcemap": "^1.1.0" - } - }, - "vinyl-sourcemap": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", - "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", - "dev": true, - "requires": { - "append-buffer": "^1.0.2", - "convert-source-map": "^1.5.0", - "graceful-fs": "^4.1.6", - "normalize-path": "^2.1.1", - "now-and-later": "^2.0.0", - "remove-bom-buffer": "^3.0.0", - "vinyl": "^2.0.0" - }, - "dependencies": { - "normalize-path": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", - "dev": true, - "requires": { - "remove-trailing-separator": "^1.0.1" - } - } - } - }, - "vscode-extension-telemetry": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/vscode-extension-telemetry/-/vscode-extension-telemetry-0.1.6.tgz", - "integrity": "sha512-rbzSg7k4NnsCdF4Lz0gI4jl3JLXR0hnlmfFgsY8CSDYhXgdoIxcre8jw5rjkobY0xhSDhbG7xCjP8zxskySJ/g==", - "requires": { - "applicationinsights": "1.7.4" - } + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" }, "vscode-extension-telemetry-wrapper": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/vscode-extension-telemetry-wrapper/-/vscode-extension-telemetry-wrapper-0.9.0.tgz", - "integrity": "sha512-QQvCn40hryS1U0Vob/fxqDX+kc7oYn+viiYpq0QOMp7q6aNaFFmjL9Wv5QfBIC/h2Jb083LFF0Xz38hhX8nCVQ==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/vscode-extension-telemetry-wrapper/-/vscode-extension-telemetry-wrapper-0.14.0.tgz", + "integrity": "sha512-EYr1hqiYVSGfupchDN405zSwuvA8V3tJ62KcLIRDr/4ongOc2AvSZ0BlRq8a0w950tadsMlXTKEheB97fZBttg==", "requires": { - "uuid": "^3.4.0", - "vscode-extension-telemetry": "^0.1.6" - }, - "dependencies": { - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - } + "@vscode/extension-telemetry": "^0.9.6", + "uuid": "^8.3.2" } }, "vscode-jsonrpc": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz", - "integrity": "sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==" }, "vscode-languageclient": { "version": "6.0.0-next.9", @@ -4999,19 +5429,26 @@ }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" } } }, "vscode-languageserver-protocol": { - "version": "3.16.0", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.16.0.tgz", - "integrity": "sha512-sdeUoAawceQdgIfTI+sdcwkiK2KU+2cbEYA0agzM2uqaUy2UpnnGHtWTHVEtS0ES4zHU0eMFRGN+oQgDxlD66A==", + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", "requires": { - "vscode-jsonrpc": "6.0.0", - "vscode-languageserver-types": "3.16.0" + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + }, + "dependencies": { + "vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==" + } } }, "vscode-languageserver-types": { @@ -5020,28 +5457,17 @@ "integrity": "sha512-k8luDIWJWyenLc5ToFQQMaSrqCHiLwyKPHKPQZ5zz21vM+vIVUSvsRpcbiECH4WR88K2XZqc4ScRcZ7nk/jbeA==" }, "vscode-tas-client": { - "version": "0.1.22", - "resolved": "https://registry.npmjs.org/vscode-tas-client/-/vscode-tas-client-0.1.22.tgz", - "integrity": "sha512-1sYH73nhiSRVQgfZkLQNJW7VzhKM9qNbCe8QyXgiKkLhH4GflDXRPAK4yy4P41jUgula+Fc9G7i5imj1dlKfaw==", - "requires": { - "tas-client": "0.1.21" - } - }, - "vscode-test": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.2.0.tgz", - "integrity": "sha512-aowqgc8gZe0eflzVUXsBjBrlsJ8eC35kfgfSEeHu9PKA1vQKm/3rVK43TlbxGue8hKtZBElNAJ5QuYklR/vLJA==", - "dev": true, + "version": "0.1.84", + "resolved": "https://registry.npmjs.org/vscode-tas-client/-/vscode-tas-client-0.1.84.tgz", + "integrity": "sha512-rUTrUopV+70hvx1hW5ebdw1nd6djxubkLvVxjGdyD/r5v/wcVF41LIfiAtbm5qLZDtQdsMH1IaCuDoluoIa88w==", "requires": { - "http-proxy-agent": "^2.1.0", - "https-proxy-agent": "^2.2.1", - "rimraf": "^2.6.3" + "tas-client": "0.2.33" } }, "watchpack": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.1.0.tgz", - "integrity": "sha512-UjgD1mqjkG99+3lgG36at4wPnUXNvis2v1utwTgQ43C22c4LD71LsYMExdWXh4HZ+RmW+B0t1Vrg2GpXAkTOQw==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.1.tgz", + "integrity": "sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -5049,411 +5475,228 @@ } }, "webpack": { - "version": "5.10.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.10.3.tgz", - "integrity": "sha512-KFPEbpNKfNU4t2CDsUZJ7KpuUbzDqGUCZqLmz4667KSUWMc9BuR3a8jpa72Emv7JUbdGwISD9OZjoI9S5BnHig==", - "dev": true, - "requires": { - "@types/eslint-scope": "^3.7.0", - "@types/estree": "^0.0.45", - "@webassemblyjs/ast": "1.9.1", - "@webassemblyjs/helper-module-context": "1.9.1", - "@webassemblyjs/wasm-edit": "1.9.1", - "@webassemblyjs/wasm-parser": "1.9.1", - "acorn": "^8.0.4", - "browserslist": "^4.14.5", + "version": "5.105.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.0.tgz", + "integrity": "sha512-gX/dMkRQc7QOMzgTe6KsYFM7DxeIONQSui1s0n/0xht36HvrgbxtM1xBlgx596NbpHuQU8P7QpKwrZYwUX48nw==", + "dev": true, + "requires": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.3.1", - "eslint-scope": "^5.1.1", + "enhanced-resolve": "^5.19.0", + "es-module-lexer": "^2.0.0", + "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.4", - "json-parse-better-errors": "^1.0.2", - "loader-runner": "^4.1.0", + "graceful-fs": "^4.2.11", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "pkg-dir": "^5.0.0", - "schema-utils": "^3.0.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.0.3", - "watchpack": "^2.0.0", - "webpack-sources": "^2.1.1" - }, - "dependencies": { - "enhanced-resolve": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.4.0.tgz", - "integrity": "sha512-ZmqfWURB2lConOBM1JdCVfPyMRv5RdKWktLXO6123p97ovVm2CLBgw9t5MBj3jJWA6eHyOeIws9iJQoGFR4euQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.4", - "tapable": "^2.0.0" - } - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "graceful-fs": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", - "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "pkg-dir": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", - "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", - "dev": true, - "requires": { - "find-up": "^5.0.0" - } - }, - "tapable": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.0.tgz", - "integrity": "sha512-FBk4IesMV1rBxX2tfiK8RAmogtWn53puLOQlvO8XuwlgxcYbP4mVPS9Ph4aeamSyyVjOl24aYWAuc8U5kCVwMw==", - "dev": true - } + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.5.1", + "webpack-sources": "^3.3.3" } }, "webpack-cli": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.2.0.tgz", - "integrity": "sha512-EIl3k88vaF4fSxWSgtAQR+VwicfLMTZ9amQtqS4o+TDPW9HGaEpbFBbAZ4A3ZOT5SOnMxNOzROsSTPiE8tBJPA==", - "dev": true, - "requires": { - "@webpack-cli/info": "^1.1.0", - "@webpack-cli/serve": "^1.1.0", - "colorette": "^1.2.1", - "command-line-usage": "^6.1.0", - "commander": "^6.2.0", - "enquirer": "^2.3.6", - "execa": "^4.1.0", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.10.0.tgz", + "integrity": "sha512-NLhDfH/h4O6UOy+0LSso42xvYypClINuMNBVVzX4vX98TmTaTUxwRbXdhucbFMd2qLaCTcLq/PdYrvi8onw90w==", + "dev": true, + "requires": { + "@discoveryjs/json-ext": "^0.5.0", + "@webpack-cli/configtest": "^1.2.0", + "@webpack-cli/info": "^1.5.0", + "@webpack-cli/serve": "^1.7.0", + "colorette": "^2.0.14", + "commander": "^7.0.0", + "cross-spawn": "^7.0.3", + "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^2.2.0", - "leven": "^3.1.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", - "webpack-merge": "^4.2.2" + "webpack-merge": "^5.7.3" }, "dependencies": { "commander": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", - "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", - "dev": true - }, - "interpret": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-2.2.0.tgz", - "integrity": "sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true - }, - "rechoir": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.7.0.tgz", - "integrity": "sha512-ADsDEH2bvbjltXEP+hTIAmeFekTFK0V2BTxMkok6qILyAJEXV0AFfoWcAq4yfll5VdIMd/RVXq0lR+wQi5ZU3Q==", - "dev": true, - "requires": { - "resolve": "^1.9.0" - } } } }, "webpack-merge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz", - "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", + "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, "requires": { - "lodash": "^4.17.15" + "clone-deep": "^4.0.1", + "flat": "^5.0.2", + "wildcard": "^2.0.0" } }, "webpack-sources": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-2.2.0.tgz", - "integrity": "sha512-bQsA24JLwcnWGArOKUxYKhX3Mz/nK1Xf6hxullKERyktjNMC4x8koOeaDNTA2fEJ09BdWLbM/iTW0ithREUP0w==", - "dev": true, - "requires": { - "source-list-map": "^2.0.1", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.3.tgz", + "integrity": "sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==", + "dev": true }, "which": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", - "integrity": "sha1-/wS9/AEO5UfXgL7DjhrBwnd9JTo=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, "requires": { "isexe": "^2.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wordwrapjs": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.0.tgz", - "integrity": "sha512-Svqw723a3R34KvsMgpjFBYCgNOSdcW3mQFK4wIfhGQhtaFVOJmdYoXgi63ne3dTlWgatVcUc7t4HtQ/+bUVIzQ==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.0.0" - } + "workerpool": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz", + "integrity": "sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==", + "dev": true }, "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } } }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, "yargs": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.1.tgz", - "integrity": "sha512-huO4Fr1f9PmiJJdll5kwoS2e4GqzGSsMT3PPMpOwoVkOK8ckqAewMTZyA6LXVQWflleb/Z8oPBEvNsMft0XE+g==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "camelcase": "^3.0.0", - "cliui": "^3.2.0", - "decamelize": "^1.1.1", - "get-caller-file": "^1.0.1", - "os-locale": "^1.4.0", - "read-pkg-up": "^1.0.1", + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", - "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "5.0.0-security.0" - } - }, - "yargs-parser": { - "version": "5.0.0-security.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0-security.0.tgz", - "integrity": "sha512-T69y4Ps64LNesYxeYGYPvfoMTt/7y1XtfpIslUeK4um+9Hu7hlGoRtaDLvdXb7+/tfq4opVa2HRY5xGip022rQ==", - "dev": true, - "requires": { - "camelcase": "^3.0.0", - "object.assign": "^4.1.0" - } - }, - "yargs-unparser": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz", - "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==", - "dev": true, - "requires": { - "flat": "^4.1.0", - "lodash": "^4.17.15", - "yargs": "^13.3.0" + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "13.3.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", - "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.2" - } - }, - "yargs-parser": { - "version": "13.1.2", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", - "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" + "ansi-regex": "^5.0.1" } } } }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true + }, + "yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "requires": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + } + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 0431ba0a..38de66c8 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "vscode-java-debug", "displayName": "Debugger for Java", "description": "A lightweight Java debugger for Visual Studio Code", - "version": "0.35.0", + "version": "0.58.5", "publisher": "vscjava", - "preview": true, + "preview": false, "aiKey": "67d4461e-ccba-418e-8082-1bd0acfe8516", "icon": "logo.png", "workspaceTrust": { @@ -21,7 +21,7 @@ "debugger" ], "engines": { - "vscode": "^1.55.0" + "vscode": "^1.95.0" }, "license": "SEE LICENSE IN LICENSE.txt", "repository": { @@ -43,8 +43,7 @@ "onDebugResolve:java", "onCommand:JavaDebug.SpecifyProgramArgs", "onCommand:JavaDebug.PickJavaProcess", - "onCommand:java.debug.runJavaFile", - "onCommand:java.debug.debugJavaFile" + "onLanguageModelTool:debug_java_application" ], "main": "./dist/extension", "contributes": { @@ -54,7 +53,7 @@ } ], "javaExtensions": [ - "./server/com.microsoft.java.debug.plugin-0.32.0.jar" + "./server/com.microsoft.java.debug.plugin-0.53.2.jar" ], "commands": [ { @@ -82,7 +81,8 @@ }, { "command": "java.debug.debugFromProjectView", - "title": "Debug" + "title": "Debug", + "icon": "$(debug-alt-small)" }, { "command": "java.debug.continueAll", @@ -100,6 +100,10 @@ "command": "java.debug.pauseOthers", "title": "Pause Others" }, + { + "command": "java.debug.breakpoints.exceptionTypes", + "title": "Manage Java Breakpoint Exception Types" + }, { "command": "java.debug.variables.showHex", "title": "Show as Hex" @@ -139,14 +143,22 @@ { "command": "java.debug.variables.notShowToString", "title": "Disable 'toString()' Object View" + }, + { + "command": "java.debug.variables.autoExpandLazyVariables", + "title": "Auto Expand Lazy Variables" + }, + { + "command": "java.debug.variables.manualExpandLazyVariables", + "title": "Manual Expand Lazy Variables" } ], "menus": { "view/item/context": [ { - "command": "java.debug.runFromProjectView", + "command": "java.debug.debugFromProjectView", "when": "view == javaProjectExplorer && viewItem =~ /java:project(?=.*?\\b\\+java\\b)(?=.*?\\b\\+uri\\b)/", - "group": "inline@run_0" + "group": "inline@100" }, { "command": "java.debug.runFromProjectView", @@ -163,12 +175,12 @@ { "command": "java.debug.runJavaFile", "when": "resourceExtname == .java", - "group": "javadebug@1" + "group": "1_javaactions@90" }, { "command": "java.debug.debugJavaFile", "when": "resourceExtname == .java", - "group": "javadebug@2" + "group": "1_javaactions@91" } ], "editor/context": [ @@ -199,7 +211,7 @@ { "command": "java.debug.hotCodeReplace", "group": "navigation@100", - "when": "inDebugMode && debugType == java && javaHotReload == 'manual'" + "when": "inDebugMode && debugType == java && javaHotReload == 'manual' && javaHotReloadOn" } ], "debug/callstack/context": [ @@ -296,6 +308,14 @@ { "command": "java.debug.variables.notShowToString", "when": "false" + }, + { + "command": "java.debug.variables.autoExpandLazyVariables", + "when": "false" + }, + { + "command": "java.debug.variables.manualExpandLazyVariables", + "when": "false" } ], "debug/variables/context": [ @@ -340,14 +360,14 @@ "group": "1_view@4" }, { - "command": "java.debug.variables.showToString", - "when": "debugType == 'java' && javadebug:showToString == 'off'", - "group": "1_view@5" + "command": "java.debug.variables.autoExpandLazyVariables", + "when": "debugType == 'java' && javadebug:expandLazyVariable == 'off'", + "group": "1_view@6" }, { - "command": "java.debug.variables.notShowToString", - "when": "debugType == 'java' && javadebug:showToString == 'on'", - "group": "1_view@5" + "command": "java.debug.variables.manualExpandLazyVariables", + "when": "debugType == 'java' && javadebug:expandLazyVariable == 'on'", + "group": "1_view@6" } ] }, @@ -378,6 +398,11 @@ "description": "%java.debugger.launch.mainClass.description%", "default": "" }, + "javaExec": { + "type": "string", + "description": "%java.debugger.launch.javaExec.description%", + "default": "" + }, "args": { "type": [ "array", @@ -466,7 +491,10 @@ "default": {} }, "envFile": { - "type": "string", + "type": [ + "array", + "string" + ], "description": "%java.debugger.launch.envFile.description%", "default": "${workspaceFolder}/.env" }, @@ -841,6 +869,22 @@ "description": "%java.debugger.configuration.console%", "default": "integratedTerminal" }, + "java.debug.settings.exceptionBreakpoint.exceptionTypes": { + "type": "array", + "description": "%java.debugger.configuration.exceptionBreakpoint.exceptionTypes%", + "items": { + "type": "string" + }, + "default": [] + }, + "java.debug.settings.exceptionBreakpoint.allowClasses": { + "type": "array", + "description": "%java.debugger.configuration.exceptionBreakpoint.allowClasses%", + "items": { + "type": "string" + }, + "default": [] + }, "java.debug.settings.exceptionBreakpoint.skipClasses": { "type": "array", "description": "%java.debugger.configuration.exceptionBreakpoint.skipClasses%", @@ -916,56 +960,416 @@ "default": 3000, "minimum": 100 }, + "java.debug.settings.jdwp.async": { + "type": "string", + "enum": [ + "auto", + "on", + "off" + ], + "description": "%java.debugger.configuration.jdwp.async.description%", + "default": "auto" + }, "java.debug.settings.vmArgs": { "type": "string", "description": "%java.debugger.configuration.vmArgs.description%", "default": "" }, + "java.debug.settings.debugSupportOnDecompiledSource": { + "type": "string", + "enum": [ + "on", + "off" + ], + "description": "%java.debugger.configuration.debugSupportOnDecompiledSource.description%", + "default": "on" + }, + "java.debug.settings.suspendAllThreads": { + "type": "boolean", + "description": "%java.debugger.configuration.suspendAllThreads.description%", + "default": false + }, "java.silentNotification": { "type": "boolean", "description": "%java.debugger.configuration.silentNotification%", "default": false } } - } - }, - "resolutions": { - "glob-parent": "^5.1.2" + }, + "languageModelTools": [ + { + "name": "debug_java_application", + "displayName": "Debug Java Application", + "modelDescription": "Launch or attach to a Java application in debug mode with automatic compilation and classpath resolution. The tool handles building the project, resolving dependencies, starting the JVM with JDWP enabled, and auto-attaching the VS Code debugger. Use this as the first step to establish a debug session. The debug process runs in the background until stopped. Example usage: Debug a main class ('com.example.Main'), a JAR file ('target/app.jar'), or with program arguments (['--port=8080']).", + "toolReferenceName": "debugJavaApplication", + "tags": [ + "java", + "debug", + "debugger", + "build", + "compile" + ], + "icon": "$(debug-alt)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "target": { + "type": "string", + "description": "What to debug: 1) Main class name - simple ('App') or fully qualified ('com.example.Main'). Tool auto-detects package from source files. 2) JAR file path ('target/app.jar'). 3) Raw Java command arguments ('-cp bin com.example.Main'). The tool automatically finds the .class file for simple class names." + }, + "workspacePath": { + "type": "string", + "description": "Absolute path to the Java project root directory containing pom.xml, build.gradle, or .java source files. This is the working directory for compilation and debugging." + }, + "args": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Optional command-line arguments to pass to the Java main method (e.g., ['arg1', 'arg2', '--flag=value']). These are program arguments, not JVM arguments." + }, + "skipBuild": { + "type": "boolean", + "description": "Whether to skip compilation before debugging. DEFAULT: false (tool will automatically compile the project). Set to true only when you have already compiled the project and want to use an explicit classpath. In most cases, leave this as false to let the tool handle compilation automatically.", + "default": false + }, + "classpath": { + "type": "string", + "description": "Explicit classpath to use for debugging. REQUIRED when skipBuild is true. Format: absolute paths separated by system path delimiter (';' on Windows, ':' on Unix). Example: 'C:\\project\\target\\classes;C:\\project\\lib\\dep.jar' or '/project/target/classes:/project/lib/dep.jar'. If not provided and skipBuild is false, the tool will automatically resolve the classpath." + }, + "waitForSession": { + "type": "boolean", + "description": "Whether to wait for the debug session to start before returning. DEFAULT: false (returns immediately after sending debug command). Set to true to wait up to 30 seconds for VS Code to confirm the debug session has started and is ready. Useful when you need to ensure the debugger is attached before proceeding with breakpoint operations.", + "default": false + } + }, + "required": [ + "target", + "workspacePath" + ] + } + }, + { + "name": "set_java_breakpoint", + "displayName": "Set Java Breakpoint", + "modelDescription": "Set a breakpoint at a specific line in Java source code to pause execution and inspect program state. Supports conditional breakpoints (break only when condition is true), hit count conditions (break after N hits), and logpoints (log messages without stopping). REQUIRES: Active debug session. Start with 1-2 strategic breakpoints; prefer stepping over setting multiple breakpoints.", + "toolReferenceName": "setJavaBreakpoint", + "tags": [ + "java", + "debug", + "breakpoint" + ], + "icon": "$(debug-breakpoint)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "filePath": { + "type": "string", + "description": "Absolute path to the Java source file where the breakpoint should be set. Example: 'C:/project/src/main/java/com/example/Main.java' or use ${workspaceFolder} variable." + }, + "lineNumber": { + "type": "number", + "description": "The line number (1-based) where the breakpoint should be set. Must be a valid executable line (not a comment or blank line)." + }, + "condition": { + "type": "string", + "description": "Optional condition expression. Breakpoint only triggers when condition evaluates to true. Example: 'count > 10' or 'userName.equals(\"admin\")'. Leave empty for unconditional breakpoint." + }, + "hitCondition": { + "type": "string", + "description": "Optional hit count condition. Example: '>5' (break after 5th hit), '==3' (break on 3rd hit), '%2' (break every 2nd hit). Leave empty to break on every hit." + }, + "logMessage": { + "type": "string", + "description": "Optional log message. If provided, instead of breaking, the message will be logged to debug console. Use {expression} for interpolation. Example: 'Counter value: {count}'. This creates a logpoint instead of a breakpoint." + } + }, + "required": [ + "filePath", + "lineNumber" + ] + } + }, + { + "name": "debug_step_operation", + "displayName": "Debug Step Operation", + "modelDescription": "Control program execution flow: stepIn (enter method calls), stepOut (exit current method), stepOver (execute current line), continue (run to next breakpoint), pause (halt execution). REQUIRES: Active debug session in paused state. Prefer stepping through code over setting multiple breakpoints for efficient debugging.", + "toolReferenceName": "debugStepOperation", + "tags": [ + "java", + "debug", + "step", + "continue" + ], + "icon": "$(debug-step-over)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "operation": { + "type": "string", + "enum": [ + "stepIn", + "stepOut", + "stepOver", + "continue", + "pause" + ], + "description": "The step operation to perform: 'stepIn' - step into method calls, 'stepOut' - step out of current method, 'stepOver' - execute current line and move to next, 'continue' - resume execution until next breakpoint, 'pause' - pause running execution." + }, + "threadId": { + "type": "number", + "description": "Optional thread ID to perform operation on. If not specified, operates on the currently selected thread. Use get_debug_threads to get available thread IDs." + } + }, + "required": [ + "operation" + ] + } + }, + { + "name": "get_debug_variables", + "displayName": "Get Debug Variables", + "modelDescription": "Inspect variables in a specific thread's stack frame: local variables, method parameters, static fields, and instance fields. Returns variable names, types, and values. Supports filtering by scope type or name pattern. REQUIRES: Active debug session with at least one SUSPENDED thread. For multi-threaded debugging, use threadId to specify which thread's variables to inspect. If no threadId is provided, uses the first suspended thread.", + "toolReferenceName": "getDebugVariables", + "tags": [ + "java", + "debug", + "variables", + "inspect" + ], + "icon": "$(symbol-variable)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "threadId": { + "type": "number", + "description": "Thread ID to inspect. Use get_debug_threads() to list available threads with their IDs and states. Only SUSPENDED threads can be inspected. If omitted, uses the first suspended thread found." + }, + "frameId": { + "type": "number", + "description": "Optional stack frame ID. Default is 0 (current/top frame). Use get_debug_stack_trace to get available frame IDs. Higher numbers are deeper in the call stack." + }, + "scopeType": { + "type": "string", + "enum": [ + "local", + "static", + "all" + ], + "description": "Type of variables to retrieve: 'local' - only local variables and parameters, 'static' - only static class variables, 'all' - both local and static. Default: 'all'." + }, + "filter": { + "type": "string", + "description": "Optional filter pattern to match variable names. Supports wildcards (*). Example: 'user*' matches 'userName', 'userId'. Leave empty to get all variables." + } + }, + "required": [] + } + }, + { + "name": "get_debug_stack_trace", + "displayName": "Get Debug Stack Trace", + "modelDescription": "Retrieve the call stack showing all method calls leading to the current execution point. Returns method names, source files, and line numbers for each frame. REQUIRES: Active debug session in paused state. Essential for understanding program flow, tracing how code was reached, and identifying unexpected execution paths.", + "toolReferenceName": "getDebugStackTrace", + "tags": [ + "java", + "debug", + "stack", + "callstack" + ], + "icon": "$(call-hierarchy)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "threadId": { + "type": "number", + "description": "Optional thread ID. If not specified, uses the currently selected thread. Use get_debug_threads to list available threads." + }, + "maxDepth": { + "type": "number", + "description": "Maximum number of stack frames to retrieve. Default: 50. Use smaller values for shallow inspection, larger for deep call stacks.", + "default": 50 + } + }, + "required": [] + } + }, + { + "name": "evaluate_debug_expression", + "displayName": "Evaluate Debug Expression", + "modelDescription": "Evaluate a Java expression in a specific thread's debug context. Access local variables, parameters, fields, and invoke methods. Returns the result with type information. REQUIRES: Active debug session with at least one SUSPENDED thread. For multi-threaded debugging, use threadId to specify which thread's context to use. If no threadId is provided, uses the first suspended thread. Examples: 'user.getName()', 'list.size() > 10', 'counter == null'.", + "toolReferenceName": "evaluateDebugExpression", + "tags": [ + "java", + "debug", + "evaluate", + "expression" + ], + "icon": "$(symbol-method)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "expression": { + "type": "string", + "description": "The Java expression to evaluate. Can be a variable name, field access, method call, or complex expression. Example: 'user.age', 'calculateTotal()', 'count > 0 && !items.isEmpty()'." + }, + "threadId": { + "type": "number", + "description": "Thread ID for evaluation context. Use get_debug_threads() to list available threads with their IDs and states. Only SUSPENDED threads can evaluate expressions. If omitted, uses the first suspended thread found." + }, + "frameId": { + "type": "number", + "description": "Optional stack frame ID for evaluation context. Default: 0 (current frame). Variables and methods from the specified frame will be accessible.", + "default": 0 + }, + "context": { + "type": "string", + "enum": [ + "watch", + "repl", + "hover" + ], + "description": "Evaluation context: 'watch' - for watch expressions, 'repl' - for debug console input, 'hover' - for hover tooltips. Affects how side effects are handled. Default: 'repl'.", + "default": "repl" + } + }, + "required": [ + "expression" + ] + } + }, + { + "name": "get_debug_threads", + "displayName": "Get Debug Threads", + "modelDescription": "List all threads in the debugged Java application with their IDs, names, and states (🔴 SUSPENDED or 🟢 RUNNING). For SUSPENDED threads, also shows the current location (file:line). REQUIRES: Active debug session. IMPORTANT: Only SUSPENDED threads can have their variables inspected or expressions evaluated. Use the returned thread IDs with get_debug_variables(threadId=X) or evaluate_debug_expression(threadId=X) to inspect specific threads.", + "toolReferenceName": "getDebugThreads", + "tags": [ + "java", + "debug", + "threads", + "concurrent" + ], + "icon": "$(list-tree)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": {}, + "required": [] + } + }, + { + "name": "remove_java_breakpoints", + "displayName": "Remove Java Breakpoints", + "modelDescription": "Remove breakpoints: specific breakpoint by file and line, all breakpoints in a file, or all breakpoints globally. Use this to clean up after investigation or before setting new breakpoints. Best practice: keep only 1-2 active breakpoints at a time; remove old ones before adding new ones.", + "toolReferenceName": "removeJavaBreakpoints", + "tags": [ + "java", + "debug", + "breakpoint" + ], + "icon": "$(debug-breakpoint-unverified)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "filePath": { + "type": "string", + "description": "Absolute path to the Java source file. If not provided, removes all breakpoints from all files." + }, + "lineNumber": { + "type": "number", + "description": "Optional line number. If provided, removes only the breakpoint at this line. If omitted, removes all breakpoints in the specified file." + } + }, + "required": [] + } + }, + { + "name": "stop_debug_session", + "displayName": "Stop Debug Session", + "modelDescription": "Stop the active Java debug session when investigation is complete or when you need to restart debugging. This terminates the running Java process and closes the debug session. Use this to clean up after debugging or when you've identified the root cause and want to end the session. Optional: Provide a reason for stopping (e.g., 'Investigation complete', 'Root cause identified').", + "toolReferenceName": "stopDebugSession", + "tags": [ + "java", + "debug", + "stop", + "terminate" + ], + "icon": "$(debug-stop)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": { + "reason": { + "type": "string", + "description": "Optional reason for stopping the debug session (e.g., 'Investigation complete', 'Root cause identified', 'Need to restart'). Default: 'Investigation complete'." + } + }, + "required": [] + } + }, + { + "name": "get_debug_session_info", + "displayName": "Get Debug Session Info", + "modelDescription": "Get information about the currently active Java debug session, including whether it's PAUSED at a breakpoint or RUNNING. CRITICAL: Check status before using inspection tools (get_debug_variables, get_debug_stack_trace, evaluate_debug_expression) or control operations (continue, step). PAUSED status (🔴) means stopped at breakpoint - inspection and control tools available. RUNNING status (🟢) means executing code - only breakpoint setting or session stop available. Returns session ID, name, type, configuration details, and status-specific available actions.", + "toolReferenceName": "getDebugSessionInfo", + "tags": [ + "java", + "debug", + "session", + "info", + "status", + "paused", + "running" + ], + "icon": "$(info)", + "canBeReferencedInPrompt": true, + "inputSchema": { + "type": "object", + "properties": {}, + "required": [] + } + } + ] }, "scripts": { - "preinstall": "npx npm-force-resolutions", "vscode:prepublish": "npm run build", "compile": "tsc -p . && webpack --config webpack.config.js", "watch": "webpack --config webpack.config.js --watch", "build": "webpack --config webpack.config.js --mode=\"production\"", + "tslint": "tslint -t verbose --project tsconfig.json", + "build-server": "node scripts/build/buildJdtlsExt.js", "test": "npm run compile && node ./out/test/index.js" }, "devDependencies": { - "@types/glob": "^7.1.3", - "@types/lodash": "^4.14.168", - "@types/mocha": "^5.2.7", - "@types/node": "^14.14.10", - "@types/uuid": "^8.3.0", - "@types/vscode": "1.55.0", - "cross-env": "^5.2.0", - "gulp": "^4.0.2", - "gulp-tslint": "^8.1.4", - "mocha": "^7.1.1", - "shelljs": "^0.8.3", - "ts-loader": "^5.4.5", - "tslint": "^5.18.0", - "typescript": "^4.1.2", - "vscode-test": "^1.2.0", - "webpack": "^5.10.3", - "webpack-cli": "^4.2.0" + "@types/glob": "^7.2.0", + "@types/lodash": "^4.17.13", + "@types/mocha": "^10.0.9", + "@types/node": "^14.18.63", + "@types/uuid": "^8.3.4", + "@types/vscode": "1.95.0", + "@vscode/test-electron": "^2.4.1", + "mocha": "^10.8.2", + "ts-loader": "^9.5.1", + "tslint": "^6.1.3", + "typescript": "^4.9.5", + "webpack": "^5.105.0", + "webpack-cli": "^4.10.0" }, "dependencies": { - "compare-versions": "^3.6.0", - "lodash": "^4.17.21", - "uuid": "^8.3.1", - "vscode-extension-telemetry-wrapper": "^0.9.0", + "compare-versions": "^4.1.4", + "dotenv": "^16.4.5", + "lodash": "^4.17.23", + "uuid": "^8.3.2", + "vscode-extension-telemetry-wrapper": "^0.14.0", "vscode-languageclient": "6.0.0-next.9", "vscode-languageserver-types": "3.16.0", - "vscode-tas-client": "^0.1.22" + "vscode-tas-client": "^0.1.84" } } diff --git a/package.nls.es.json b/package.nls.es.json index 4609bd25..06b87c18 100644 --- a/package.nls.es.json +++ b/package.nls.es.json @@ -6,7 +6,7 @@ "java.debugger.launch.modulePaths.description": "Los modulepaths para el lanzamiento de la JVM. Si no se especifica, el depurador se resolverá automáticamente a partir del proyecto actual.", "java.debugger.launch.classPaths.description": "Los classpath para el lanzamiento de la JVM. Si no se especifica, el depurador se resolverá automáticamente a partir del proyecto actual.", "java.debugger.launch.sourcePaths.description": "Los directorios de fuentes extras del programa. El depurador busca el código fuente de los ajustes del proyecto por defecto. Esta opción permite al depurador buscar el código fuente en directorios extra.", - "java.debugger.launch.encoding.description": "La configuración de codificación de archivos para la JVM. Si no se especifica, se usará 'UTF-8'. Los posibles valores se pueden encontrar en https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html.", + "java.debugger.launch.encoding.description": "La configuración de codificación de archivos para la JVM. Los posibles valores se pueden encontrar en https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html.", "java.debugger.launch.cwd.description": "El directorio de trabajo del programa. Por defecto es la raíz del área de trabajo actual.", "java.debugger.launch.env.description": "Las variables de entorno adicionales para el programa.", "java.debugger.launch.stopOnEntry.description": "Pausar automáticamente el programa después del lanzamiento.", @@ -58,5 +58,6 @@ "java.debugger.configuration.exceptionBreakpoint.skipClasses": "Omitir las clases especificadas al parar por una excepción. Puedes usar las variables incorporadas como '$JDK' y '$Libraries' para omitir un grupo de clases, o añadir una expresión específica de nombre de clase, por ejemplo, java.*, *.Pepe", "java.debugger.configuration.jdwp.limitOfVariablesPerJdwpRequest.description": "El máximo número de variables o campos que pueden ser solicitados en una solicitud de JDWP. Cuanto más alto sea el valor, menos frecuentemente se solicitará la depuración al expandir la vista de la variable. Además, un número grande puede causar un límite de tiempo de espera de la solicitud JDWP.", "java.debugger.configuration.jdwp.requestTimeout.description": "El límite de tiempo (ms) de la solicitud de JDWP cuando el depurador se comunica con el JVM objetivo.", - "java.debugger.configuration.vmArgs.description": "Los argumentos por defecto de la VM para lanzar el programa Java. Por ejemplo, usa '-Xmx1G -ea' para aumentar el tamaño de la pila a 1GB y habilitar los asertos. Si quieres personalizar los argumentos de la máquina virtual para una sesión de depuración específica, modifica la configuración de 'vmArgs' en launch.json." + "java.debugger.configuration.vmArgs.description": "Los argumentos por defecto de la VM para lanzar el programa Java. Por ejemplo, usa '-Xmx1G -ea' para aumentar el tamaño de la pila a 1GB y habilitar los asertos. Si quieres personalizar los argumentos de la máquina virtual para una sesión de depuración específica, modifica la configuración de 'vmArgs' en launch.json.", + "java.debugger.configuration.suspendAllThreads.description": "Suspenda todos los hilos al alcanzar un punto de interrupción o detenerse por una excepción. Solo tiene efecto en nuevas sesiones de depuración; los cambios durante una sesión en ejecución no se aplican." } \ No newline at end of file diff --git a/package.nls.it.json b/package.nls.it.json index e7654964..9279a2bd 100644 --- a/package.nls.it.json +++ b/package.nls.it.json @@ -5,5 +5,6 @@ "java.debugger.configuration.showStaticVariables.description": "Mostra variabili statiche nella scheda \"variabili\".", "java.debugger.configuration.showQualifiedNames.description": "Mostra nome completo delle classi nella scheda \"variabili\".", "java.debugger.configuration.maxStringLength.description": "Lunghezza massima delle stringhe visualizzate nella scheda \"Variabili\" o \"Console di Debug\", stringhe più lunghe di questo numero verranno tagliate, se 0 nessun taglio viene eseguito.", - "java.debugger.configuration.enableRunDebugCodeLens.description": "Abilitare i provider di lenti di codice run e debug sui metodi principali." + "java.debugger.configuration.enableRunDebugCodeLens.description": "Abilitare i provider di lenti di codice run e debug sui metodi principali.", + "java.debugger.configuration.suspendAllThreads.description": "Sospende tutti i thread quando si raggiunge un punto di interruzione o ci si ferma per un'eccezione. Ha effetto solo nelle nuove sessioni di debug; le modifiche durante una sessione in esecuzione non si applicano." } diff --git a/package.nls.json b/package.nls.json index f4026053..8634a297 100644 --- a/package.nls.json +++ b/package.nls.json @@ -1,6 +1,7 @@ { "java.debugger.launch.projectName.description": "The preferred project in which the debugger searches for classes. There could be duplicated class names in different projects. This setting also works when the debugger looks for the specified main class when launching a program. It is required for expression evaluation.", "java.debugger.launch.mainClass.description": "The fully qualified class name (e.g. [java module name/]com.xyz.MainApp) or the java file path of the program entry.", + "java.debugger.launch.javaExec.description": "The path to java executable to use. If unset project JDK's java executable is used.", "java.debugger.launch.args.description": "The command line arguments passed to the program.", "java.debugger.launch.vmArgs.description": "The extra options and system properties for the JVM (e.g. -Xms -Xmx -D=).", "java.debugger.launch.modulePaths.description": "The modulepaths for launching the JVM. If not specified, the debugger will automatically resolve from current project.", @@ -14,10 +15,10 @@ "java.debugger.launch.classPaths.test": "The classpaths within 'test' scope of current project.", "java.debugger.launch.classPaths.exclude": "The path after '!' will be excluded from the classpaths.", "java.debugger.launch.sourcePaths.description": "The extra source directories of the program. The debugger looks for source code from project settings by default. This option allows the debugger to look for source code in extra directories.", - "java.debugger.launch.encoding.description": "The file.encoding setting for the JVM. If not specified, 'UTF-8' will be used. Possible values can be found in https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html.", + "java.debugger.launch.encoding.description": "The file.encoding setting for the JVM. Possible values can be found in https://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html.", "java.debugger.launch.cwd.description": "The working directory of the program. Defaults to the current workspace root.", "java.debugger.launch.env.description": "The extra environment variables for the program.", - "java.debugger.launch.envFile.description": "Absolute path to a file containing environment variable definitions.", + "java.debugger.launch.envFile.description": "Absolute path to a file containing environment variable definitions. Multiple files can be specified by providing an array of absolute paths.", "java.debugger.launch.stopOnEntry.description": "Automatically pause the program after launching.", "java.debugger.launch.internalConsole.description": "VS Code debug console (input stream not supported).", "java.debugger.launch.integratedTerminal.description": "VS Code integrated terminal.", @@ -59,14 +60,19 @@ "java.debugger.configuration.showToString.description": "Show 'toString()' value for all classes that override 'toString' method in \"Variables\" viewlet.", "java.debugger.configuration.maxStringLength.description": "The maximum length of strings displayed in \"Variables\" or \"Debug Console\" viewlet, strings longer than this length will be trimmed, if 0 no trim is performed.", "java.debugger.configuration.numericPrecision.description": "The precision when formatting doubles in \"Variables\" or \"Debug Console\" viewlet.", - "java.debugger.configuration.hotCodeReplace.description": "Reload the changed Java classes during debugging. Make sure 'java.autobuild.enabled' is not disabled.", + "java.debugger.configuration.hotCodeReplace.description": "Reload the changed Java classes during debugging.", "java.debugger.configuration.enableRunDebugCodeLens.description": "Enable the run and debug code lens providers over main methods.", "java.debugger.configuration.forceBuildBeforeLaunch": "Force building the workspace before launching java program.", "java.debugger.configuration.onBuildFailureProceed": "Force to proceed when build fails", "java.debugger.configuration.console": "The specified console to launch Java program. If you want to customize the console for a specific debug session, please modify the 'console' config in launch.json.", + "java.debugger.configuration.exceptionBreakpoint.exceptionTypes": "Specifies a set of exception types you want to break on, e.g. java.lang.NullPointerException. A specific exception type and its subclasses can be selected for caught exceptions, uncaught exceptions, or both can be selected.", + "java.debugger.configuration.exceptionBreakpoint.allowClasses": "Specifies the allowed locations where the exception breakpoint can break on. Wildcard is supported, e.g. java.*, *.Foo", "java.debugger.configuration.exceptionBreakpoint.skipClasses": "Skip the specified classes when breaking on exception. You could use the built-in variables such as '$JDK' and '$Libraries' to skip a group of classes, or add a specific class name expression, e.g. java.*, *.Foo", "java.debugger.configuration.jdwp.limitOfVariablesPerJdwpRequest.description": "The maximum number of variables or fields that can be requested in one JDWP request. The higher the value, the less frequently debuggee will be requested when expanding the variable view. Also a large number can cause JDWP request timeout.", "java.debugger.configuration.jdwp.requestTimeout.description": "The timeout (ms) of JDWP request when the debugger communicates with the target JVM.", "java.debugger.configuration.vmArgs.description": "The default VM arguments to launch the Java program. Eg. Use '-Xmx1G -ea' to increase the heap size to 1GB and enable assertions. If you want to customize the VM arguments for a specific debug session, please modify the 'vmArgs' config in launch.json.", - "java.debugger.configuration.silentNotification": "Controls whether notifications can be used to report progress. If true, use status bar to report progress instead." + "java.debugger.configuration.silentNotification": "Controls whether notifications can be used to report progress. If true, use status bar to report progress instead.", + "java.debugger.configuration.jdwp.async.description": "Experimental: Controls whether the debugger is allowed to send JDWP commands asynchronously. Async mode can improve remote debugging response speed on high-latency networks.", + "java.debugger.configuration.debugSupportOnDecompiledSource.description": "[Experimental]: Enable debugging support on the decompiled source code. Be aware that this feature may affect the loading speed of Call Stack Viewlet.", + "java.debugger.configuration.suspendAllThreads.description": "Suspend all threads when hitting a breakpoint or stopping for an exception. Takes effect only for new debug sessions; changes during a running session don’t apply." } diff --git a/package.nls.zh.json b/package.nls.zh-cn.json similarity index 86% rename from package.nls.zh.json rename to package.nls.zh-cn.json index 7c9f8e7f..75d1406a 100644 --- a/package.nls.zh.json +++ b/package.nls.zh-cn.json @@ -14,7 +14,7 @@ "java.debugger.launch.classPaths.test": "当前工程中属于 test 作用域的类路径。", "java.debugger.launch.classPaths.exclude": "'!' 之后的路径将会从类路径中去除。", "java.debugger.launch.sourcePaths.description": "应用程序的额外源代码目录。调试器默认从工程配置中查找源代码。此选项允许调试器在额外目录中查找源代码。", - "java.debugger.launch.encoding.description": "JVM的file.encoding设置。如果未指定,将使用“UTF-8”。可以在http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html中找到可能的值。", + "java.debugger.launch.encoding.description": "JVM的file.encoding设置。可以在http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html中找到可能的值。", "java.debugger.launch.cwd.description": "应用程序的工作目录。默认为当前工作空间根目录。", "java.debugger.launch.env.description": "启动应用程序时自定义的环境变量。", "java.debugger.launch.envFile.description": "环境变量文件绝对路径。", @@ -58,13 +58,18 @@ "java.debugger.configuration.showLogicalStructure.description": "在“变量”视图中显示Collection和Map类的逻辑结构。", "java.debugger.configuration.showToString.description": "在“变量”视图中显示所有重载过'toString'方法的类的'toString()'值。", "java.debugger.configuration.maxStringLength.description": "设定“变量”或“调试控制台”视图中显示的字符串最大长度,长度超过部分将被剪掉。如果值为0,则不执行修剪。", - "java.debugger.configuration.hotCodeReplace.description": "在调试期间重新加载已更改的Java类。确保未禁用'java.autobuild.enabled'。", + "java.debugger.configuration.hotCodeReplace.description": "在调试期间重新加载已更改的Java类。", "java.debugger.configuration.enableRunDebugCodeLens.description": "在main方法上启用CodeLens标记。", "java.debugger.configuration.forceBuildBeforeLaunch": "在启动java程序之前强制编译整个工作空间。", "java.debugger.configuration.console": "指定的控制台用于启动Java程序。如果要为特定的调试会话自定义控制台,请修改launch.json中的“console”配置。", + "java.debugger.configuration.exceptionBreakpoint.exceptionTypes": "指定要中断的一组异常类型,例如 java.lang.NullPointerException。可以为捕获的异常、未捕获的异常或两者都选择一个特定的异常类型及其子类。", + "java.debugger.configuration.exceptionBreakpoint.allowClasses": "指定允许异常断点中断的位置。支持通配符,例如 java.,.Foo", "java.debugger.configuration.exceptionBreakpoint.skipClasses": "当发生异常时,跳过指定的类。你可以使用内置变量,如'$JDK'和'$Libraries'来跳过一组类,或者添加一个特定的类名表达式,如java.*,*.Foo。", "java.debugger.configuration.jdwp.limitOfVariablesPerJdwpRequest.description": "一次JDWP请求中可以请求的变量或字段的最大数量。该值越高,在展开变量视图时,请求debuggee的频率就越低。同时数量过大也会导致JDWP请求超时。", "java.debugger.configuration.jdwp.requestTimeout.description": "调试器与目标JVM通信时JDWP请求的超时时间(ms)。", "java.debugger.configuration.vmArgs.description": "启动Java程序的默认VM参数。例如,使用'-Xmx1G -ea'将堆大小增加到1GB并启用断言。如果要为特定的调试会话定制VM参数,请修改launch.json中的'vmArgs'配置。", - "java.debugger.configuration.silentNotification": "控制是否可以使用通知来报告进度。如果为真,则使用状态栏来报告进度。" + "java.debugger.configuration.silentNotification": "控制是否可以使用通知来报告进度。如果为真,则使用状态栏来报告进度。", + "java.debugger.configuration.jdwp.async.description": "实验性的:控制是否允许调试器以异步方式发送JDWP命令。异步模式可以提高高延迟网络上的远程调试响应速度。", + "java.debugger.configuration.debugSupportOnDecompiledSource.description": "[实验性的]: 在反编译的源代码上启用调试支持。请注意,该功能可能会影响Call Stack试图的加载速度。", + "java.debugger.configuration.suspendAllThreads.description": "当命中断点或因异常停止时暂停所有线程。仅对新的调试会话生效;在运行中的会话内更改不会生效。" } \ No newline at end of file diff --git a/package.nls.zh-tw.json b/package.nls.zh-tw.json new file mode 100644 index 00000000..4261c873 --- /dev/null +++ b/package.nls.zh-tw.json @@ -0,0 +1,71 @@ +{ + "java.debugger.launch.projectName.description": "偵錯器搜索類別名時的偏好專案。不同專案中可能存在重復的類別名。當偵錯器在啟動應用程式時查找指定的主類別,此設定也有效。當使用表達式求值功能時,需要此選項。", + "java.debugger.launch.mainClass.description": "主類別的全名(例如 [java module name /] com.xyz.MainApp)或主類別對應的 Java 檔案路徑。", + "java.debugger.launch.args.description": "啟動應用程式的命令列參數。", + "java.debugger.launch.vmArgs.description": "用於啟動 JVM 的額外選項和系統屬性(例如-Xms -Xmx -D = )。", + "java.debugger.launch.modulePaths.description": "用於啟動 JVM 的模組路徑。如果未指定,偵錯器將自動從當前專案中解析。", + "java.debugger.launch.modulePaths.auto": "自動從當前專案中解析模組路徑。", + "java.debugger.launch.modulePaths.runtime": "當前專案中屬於 runtime 範圍的模組路徑。", + "java.debugger.launch.modulePaths.test": "當前專案中屬於 test 範圍的模組路徑。", + "java.debugger.launch.modulePaths.exclude": "'!' 之後的路徑將會從模組路徑中去除。", + "java.debugger.launch.classPaths.description": "用於啟動 JVM 的類別路徑。如果未指定,偵錯器將自動從當前專案中解析。", + "java.debugger.launch.classPaths.auto": "自動從當前專案中解析類別路徑。", + "java.debugger.launch.classPaths.runtime": "當前專案中屬於 runtime 範圍的類別路徑。", + "java.debugger.launch.classPaths.test": "當前專案中屬於 test 範圍的類別路徑。", + "java.debugger.launch.classPaths.exclude": "'!' 之後的路徑將會從類別路徑中去除。", + "java.debugger.launch.sourcePaths.description": "應用程式的額外原始碼目錄。偵錯器預設從專案設定中查找原始碼。此選項允許偵錯器在額外目錄中查找原始碼。", + "java.debugger.launch.encoding.description": "JVM 的 file.encoding 設定。可以在 http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html 中找到可能的值。", + "java.debugger.launch.cwd.description": "應用程式的工作目錄。預設為當前工作空間根目錄。", + "java.debugger.launch.env.description": "啟動應用程式時自定義的環境變數。", + "java.debugger.launch.envFile.description": "環境變數檔案絕對路徑。", + "java.debugger.launch.stopOnEntry.description": "啟動後自動暫停應用程式。", + "java.debugger.launch.internalConsole.description": "VS Code 偵錯主控台(不支援輸入串流)。", + "java.debugger.launch.integratedTerminal.description": "VS Code 整合終端。", + "java.debugger.launch.externalTerminal.description": "外部終端(可在用戶設定中修改)。", + "java.debugger.launch.console.description": "用於啟動應用程式的主控台。", + "java.debugger.launch.shortenCommandLine.auto": "自動檢測命令列長度並決定是否通過適當的方法縮短命令列。", + "java.debugger.launch.shortenCommandLine.none": "使用標準命令列 'java [options] classname [args]' 啟動應用程式。", + "java.debugger.launch.shortenCommandLine.jarmanifest": "將類別路徑參數生成到臨時 classpath.jar 檔案中,並使用命令列 'java -cp classpath.jar classname [args]' 啟動應用程式。", + "java.debugger.launch.shortenCommandLine.argfile": "將類別路徑參數生成到臨時 argument 檔案中, 並使用命令列 'java @argfile [args]' 啟動應用程式。該值僅適用於 Java 9 及以上版本。", + "java.debugger.launch.shortenCommandLine.description": "當項目具有較長的類別路徑或較大的 VM 參數時,啟動程式的命令列可能會超出OS允許的最大命令列字元串限制。此選項提供了多種縮短命令列的方法。", + "java.debugger.launch.stepFilters.description": "Step 時跳過指定的類別或方法。", + "java.debugger.launch.skipClasses.description": "Step 時跳過指定的類別。你可以使用內建變數,如 '$JDK' 和 '$Libraries' 來跳過一組類別,或者添加一個特定的類別名表達式,如 java.*,*.Foo。", + "java.debugger.launch.skipClasses.skipJDK": "跳過系統預設的啟動路徑中的 JDK 類別,如 rt.jar、jrt-fs.jar。", + "java.debugger.launch.skipClasses.skipLibraries": "跳過應用程式庫中的類別,如 Maven、Gradle 相依性。", + "java.debugger.launch.skipClasses.skipClassLoader": "跳過類別載入器。", + "java.debugger.launch.skipClasses.skipClassPattern": "跳過指定的類別。僅支援全名,以及萬用字元,如 java.*,*.Foo。", + "java.debugger.launch.skipSynthetics.description": "Step 時跳過合成方法。", + "java.debugger.launch.skipStaticInitializers.description": "Step 時跳過靜態初始化方法。", + "java.debugger.launch.skipConstructors.description": "Step 時跳過建構函數。", + "java.debugger.attach.hostName.description": "遠端偵錯程序所在的主機名或 IP 地址。", + "java.debugger.attach.port.description": "遠端偵錯程序的偵錯埠。", + "java.debugger.attach.processPicker.description": "使用程序選取器選擇要附加的程序,或直接設定程序 ID。", + "java.debugger.attach.processId.description": "要附加到的本地程序的 ID。", + "java.debugger.attach.timeout.description": "重新連接前的超時值,以毫秒為單位(預設為 30000ms)。", + "java.debugger.attach.projectName.description": "偵錯器搜索類別的偏好專案。不同專案中可能存在重復的類別名。", + "java.debugger.snippet.launch.description": "啟動 Java 程式。", + "java.debugger.snippet.launchInExternalTerminal.description": "在外部終端中啟動 Java 程式。", + "java.debugger.snippet.launchCurrentFile.description": "啟動當前 Java 檔案中的程式。", + "java.debugger.snippet.launchWithArgumentsPrompt.description": "啟動 Java 程式時動態提示命令列參數。", + "java.debugger.snippet.attach.description": "附加到正在運行的 Java 程式。", + "java.debugger.snippet.attachProcess.description": "使用程序選擇器選擇要附加的 Java 程序。", + "java.debugger.snippet.attachRemote.description": "附加到遠端 Java 程式。", + "java.debugger.configuration.title": "Java 偵錯器", + "java.debugger.configuration.logLevel.description": "Java 偵錯器的記錄級別。", + "java.debugger.configuration.showHex.description": "在「變數」視圖中以十六進位格式顯示數值。", + "java.debugger.configuration.showStaticVariables.description": "在「變數」視圖中顯示靜態變數。", + "java.debugger.configuration.showQualifiedNames.description": "在「變數」視圖中顯示類別的全名。", + "java.debugger.configuration.showLogicalStructure.description": "在「變數」視圖中顯示 Collection 和 Map 類別的邏輯結構。", + "java.debugger.configuration.showToString.description": "在「變數」視圖中顯示所有覆寫過 'toString' 方法的類別的 'toString()' 值。", + "java.debugger.configuration.maxStringLength.description": "設定「變數」或「偵錯主控台」視圖中顯示的字元串最大長度,長度超過部分將被剪掉。如果值為0,則不執行修剪。", + "java.debugger.configuration.hotCodeReplace.description": "在偵錯期間重新載入已更改的 Java 類別。確保未停用 'java.autobuild.enabled'。", + "java.debugger.configuration.enableRunDebugCodeLens.description": "在 main 方法上啟用 CodeLens 標記。", + "java.debugger.configuration.forceBuildBeforeLaunch": "在啟動 Java 程式之前強制編譯整個工作空間。", + "java.debugger.configuration.console": "指定用於啟動 Java 程式的主控台。如果要為特定的偵錯會話自訂義主控台,請修改 launch.json 中的「console」設定。", + "java.debugger.configuration.exceptionBreakpoint.skipClasses": "當發生異常時,跳過指定的類別。你可以使用內建變數,如 '$JDK' 和 '$Libraries' 來跳過一組類別,或者添加一個特定的類別名表達式,如 java.*,*.Foo。", + "java.debugger.configuration.jdwp.limitOfVariablesPerJdwpRequest.description": "一次 JDWP 請求中可以請求的變數或欄位的最大數量。該值越高,在展開變數視圖時,請求偵錯對象的頻率就越低。同時數量過大也會導致 JDWP 請求超時。", + "java.debugger.configuration.jdwp.requestTimeout.description": "偵錯器與目標 JVM 連線時 JDWP 請求的超時時間(ms)。", + "java.debugger.configuration.vmArgs.description": "啟動 Java 程式的預設 VM 參數。例如,使用 '-Xmx1G -ea' 將堆大小增加到 1GB 並啟用斷言。如果要為特定的偵錯會話定製 VM 參數,請修改launch.json 中的 'vmArgs' 設定。", + "java.debugger.configuration.silentNotification": "控制是否可以使用通知來回報進度。如果為真,則使用狀態欄來回報進度。", + "java.debugger.configuration.suspendAllThreads.description": "當命中斷點或因異常停止時暫停所有執行緒。僅對新的偵錯工作階段生效;在執行中的工作階段內變更不會生效。" +} \ No newline at end of file diff --git a/scripts/build/buildJdtlsExt.js b/scripts/build/buildJdtlsExt.js new file mode 100644 index 00000000..fb323b87 --- /dev/null +++ b/scripts/build/buildJdtlsExt.js @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +const cp = require('child_process'); +const path = require('path'); +const fs = require('fs'); + +const server_dir = path.resolve('../java-debug'); + +cp.execSync(mvnw() + ' clean package', { + cwd: server_dir, + stdio: [0, 1, 2] +}); +copy(path.join(server_dir, 'com.microsoft.java.debug.plugin/target'), path.resolve('server'), (file) => { + return /^com.microsoft.java.debug.*.jar$/.test(file); +}); + +function copy(sourceFolder, targetFolder, fileFilter) { + const jars = fs.readdirSync(sourceFolder).filter(file => fileFilter(file)); + if (!fs.existsSync(targetFolder)) { + fs.mkdirSync(targetFolder); + } + for (const jar of jars) { + fs.copyFileSync(path.join(sourceFolder, jar), path.join(targetFolder, path.basename(jar))); + } +} + +function isWin() { + return /^win/.test(process.platform); +} + +function isMac() { + return /^darwin/.test(process.platform); +} + +function isLinux() { + return /^linux/.test(process.platform); +} + +function mvnw() { + return isWin() ? "mvnw.cmd" : "./mvnw"; +} diff --git a/scripts/build/prepare-nightly-build.js b/scripts/build/prepare-nightly-build.js new file mode 100644 index 00000000..8dcbf3f2 --- /dev/null +++ b/scripts/build/prepare-nightly-build.js @@ -0,0 +1,25 @@ +const fs = require("fs"); + +const json = JSON.parse(fs.readFileSync("./package.json").toString()); +const stableVersion = json.version.match(/(\d+)\.(\d+)\.(\d+)/); +const major = stableVersion[1]; +const minor = stableVersion[2]; + +function prependZero(number) { + if (number > 99) { + throw "Unexpected value to prepend with zero"; + } + return `${number < 10 ? "0" : ""}${number}`; +} + +const date = new Date(); +const month = date.getMonth() + 1; +const day = date.getDate(); +const hours = date.getHours(); +patch = `${date.getFullYear()}${prependZero(month)}${prependZero(day)}${prependZero(hours)}`; + +const insiderPackageJson = Object.assign(json, { + version: `${major}.${minor}.${patch}`, +}); + +fs.writeFileSync("./package.json", JSON.stringify(insiderPackageJson, null, 2)); diff --git a/scripts/launcher.bat b/scripts/launcher.bat deleted file mode 100644 index 10617f9c..00000000 --- a/scripts/launcher.bat +++ /dev/null @@ -1,7 +0,0 @@ -@echo off - -REM Change code page to UTF-8 for better compatibility. -@chcp.com 65001 > NUL - -REM Execute real command passed by args -%* diff --git a/src/JavaInlineValueProvider.ts b/src/JavaInlineValueProvider.ts index 74537f6a..87979c75 100644 --- a/src/JavaInlineValueProvider.ts +++ b/src/JavaInlineValueProvider.ts @@ -1,18 +1,13 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -import * as compareVersions from "compare-versions"; import { debug, InlineValue, InlineValueContext, InlineValueEvaluatableExpression, InlineValuesProvider, InlineValueText, InlineValueVariableLookup, - Range, TextDocument, version } from "vscode"; + Range, TextDocument } from "vscode"; import { instrumentOperation, instrumentOperationStep, sendInfo } from "vscode-extension-telemetry-wrapper"; import * as CodeConverter from "vscode-languageclient/lib/codeConverter"; import * as ProtocolConverter from "vscode-languageclient/lib/protocolConverter"; import { InlineKind, InlineVariable, resolveInlineVariables } from "./languageServerPlugin"; -// In VS Code 1.55.0, viewport doesn't change while scrolling the editor and it's fixed in 1.56.0. -// So dynamically enable viewport support based on the user's VS Code version. -const isViewPortSupported = compareVersions(version.replace(/-insider$/i, ""), "1.56.0") >= 0; - const protoConverter: ProtocolConverter.Converter = ProtocolConverter.createConverter(); const codeConverter: CodeConverter.Converter = CodeConverter.createConverter(); @@ -23,7 +18,7 @@ export class JavaInlineValuesProvider implements InlineValuesProvider { const resolveInlineVariablesStep = instrumentOperationStep(operationId, "resolveInlineVariables", async () => { return (await resolveInlineVariables({ uri: document.uri.toString(), - viewPort: isViewPortSupported ? codeConverter.asRange(viewPort) : undefined, + viewPort: codeConverter.asRange(viewPort), stoppedLocation: codeConverter.asRange(context.stoppedLocation), })); }); diff --git a/src/breakpointCommands.ts b/src/breakpointCommands.ts new file mode 100644 index 00000000..84ee9e22 --- /dev/null +++ b/src/breakpointCommands.ts @@ -0,0 +1,124 @@ +import * as vscode from "vscode"; + +export function registerBreakpointCommands(context: vscode.ExtensionContext): void { + context.subscriptions.push(vscode.commands.registerCommand('java.debug.breakpoints.exceptionTypes', exceptionTypes)); +} + +async function exceptionTypes() { + const config = vscode.workspace.getConfiguration('java.debug.settings.exceptionBreakpoint'); + let currentTypes = config.get('exceptionTypes', []); + const addExceptionTypeItem: vscode.QuickPickItem = { + label: '$(add) Add Exception Types...', + alwaysShow: true, + }; + const removeExceptionTypeItem: any = (type: string): any => ({ + label: type, + buttons: [{ + iconPath: new vscode.ThemeIcon('close'), + tooltip: 'Remove this Exception Type' + }] + }); + + // Step 1: Show Breakpoint Exception Types + const pickStep = async (state: any) => { + return new Promise((resolve) => { + const items: vscode.QuickPickItem[] = [ + addExceptionTypeItem, + ...currentTypes.map(type => removeExceptionTypeItem(type)) + ]; + const quickPick = vscode.window.createQuickPick(); + quickPick.items = items; + quickPick.title = 'Breakpoint Exception Types'; + quickPick.canSelectMany = false; + quickPick.matchOnDescription = false; + quickPick.matchOnDetail = false; + + quickPick.onDidAccept(() => { + const selected = quickPick.selectedItems[0]; + if (selected.label.includes('Add Exception Types')) { + quickPick.hide(); + // go to next step + resolve(state); + } + }); + + quickPick.onDidTriggerItemButton(async (e) => { + const typeToRemove = e.item.label; + currentTypes = currentTypes.filter(type => type !== typeToRemove); + await config.update('exceptionTypes', currentTypes, vscode.ConfigurationTarget.Global); + quickPick.items = [ + addExceptionTypeItem, + ...currentTypes.map(type => removeExceptionTypeItem(type)) + ]; + }); + quickPick.onDidHide(() => { + quickPick.dispose(); + }); + quickPick.show(); + }); + }; + + // Step 2: Add Exception Type(s) + const inputStep = async (state: any) => { + return new Promise((resolve, reject) => { + const input = vscode.window.createInputBox(); + input.title = 'Add Breakpoint Exception Type(s)'; + input.placeholder = 'Enter exception type(s) (comma or space separated). "java.lang.NullPointerException" e.g.'; + input.prompt = 'Input exception types'; + input.buttons = [vscode.QuickInputButtons.Back]; + input.onDidAccept(async () => { + const exceptionType = input.value; + if (exceptionType) { + const types = exceptionType.split(/[,\s]+/).map(type => type.trim()).filter(type => type.length > 0); + let updated = false; + for (const type of types) { + if (!currentTypes.includes(type)) { + currentTypes.push(type); + updated = true; + } + } + if (updated) { + await config.update('exceptionTypes', currentTypes, vscode.ConfigurationTarget.Global); + } + } + input.hide(); + // go back to pick step + resolve(state); + }); + input.onDidTriggerButton((btn) => { + if (btn === vscode.QuickInputButtons.Back) { + input.hide(); + reject({ stepBack: true }); + } + }); + input.onDidHide(() => { + input.dispose(); + }); + input.show(); + }); + }; + + while (true) { + await multiStepInput([pickStep, inputStep], {}); + } +} + +async function multiStepInput(steps: ((input: T) => Promise)[], initial: T): Promise { + let state = initial; + let currentStep = 0; + while (currentStep < steps.length) { + try { + state = await steps[currentStep](state); + currentStep++; + } catch (err) { + if (err?.stepBack) { + if (currentStep > 0) { + currentStep--; + } + } else { + throw err; + } + } + } + return state; +} diff --git a/src/build.ts b/src/build.ts index 627a0d7a..ebf38e7e 100644 --- a/src/build.ts +++ b/src/build.ts @@ -1,6 +1,5 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -import * as path from "path"; import * as vscode from "vscode"; import { instrumentOperation, sendInfo, sendOperationError, setErrorCode } from "vscode-extension-telemetry-wrapper"; @@ -12,33 +11,54 @@ import * as utility from "./utility"; const JAVA_DEBUG_CONFIGURATION = "java.debug.settings"; const ON_BUILD_FAILURE_PROCEED = "onBuildFailureProceed"; +const CANCELLED_CODE = -32800; enum CompileWorkspaceStatus { FAILED = 0, SUCCEED = 1, WITHERROR = 2, CANCELLED = 3, + GRADLE_BS_COMPILATION_ERROR = 100, } -export async function buildWorkspace(progressReporter: IProgressReporter): Promise { +export interface BuildParams { + readonly mainClass: string; + readonly projectName?: string; + readonly filePath?: string; + readonly isFullBuild: boolean; +} + +export async function buildWorkspace(params: BuildParams, progressReporter: IProgressReporter): Promise { + const startAt = new Date().getTime(); const buildResult = await instrumentOperation("build", async (operationId: string) => { - let error; + let status; try { - await commands.executeJavaExtensionCommand(commands.JAVA_BUILD_WORKSPACE, false, progressReporter.getCancellationToken()); + status = await commands.executeJavaLanguageServerCommand(commands.JAVA_BUILD_WORKSPACE, + JSON.stringify(params), + progressReporter.getCancellationToken()); } catch (err) { - error = err; + status = (err && err.code === CANCELLED_CODE) ? CompileWorkspaceStatus.CANCELLED : err; } return { - error, + status, operationId, }; })(); - if (progressReporter.isCancelled() || buildResult.error === CompileWorkspaceStatus.CANCELLED) { + if (progressReporter.isCancelled() || buildResult.status === CompileWorkspaceStatus.CANCELLED) { return false; + } else if (buildResult.status === CompileWorkspaceStatus.SUCCEED) { + return true; } else { - return handleBuildFailure(buildResult.operationId, buildResult.error, progressReporter); + const elapsed = new Date().getTime() - startAt; + const humanVisibleDelay = elapsed < 150 ? 150 : 0; + await new Promise(resolve => { + setTimeout(() => { // set a timeout so user still can see a compiling message. + resolve(null); + }, humanVisibleDelay); + }); + return handleBuildFailure(buildResult.operationId, buildResult.status, progressReporter); } } @@ -56,18 +76,24 @@ async function handleBuildFailure(operationId: string, err: any, progressReporte }); setErrorCode(error, Number(err)); sendOperationError(operationId, "build", error); + const errorDiagnostics = traceErrorTypes(operationId); if (!onBuildFailureProceed && err) { - if (checkErrorsReportedByJavaExtension()) { + // build failure information is not displayed in PROBLEMS panel for build server project. + if (errorDiagnostics && err !== CompileWorkspaceStatus.GRADLE_BS_COMPILATION_ERROR) { vscode.commands.executeCommand("workbench.actions.view.problems"); } progressReporter.hide(true); - const ans = await vscode.window.showErrorMessage("Build failed, do you want to continue?", "Proceed", "Fix...", "Cancel"); + const ans = await vscode.window.showErrorMessage("Build failed, do you want to continue?", "Continue", "Always Continue", "Fix..."); sendInfo(operationId, { operationName: "build", choiceForBuildError: ans || "esc", }); - if (ans === "Proceed") { + if (ans === "Continue") { + return true; + } else if (ans === "Always Continue") { + const debugSettings: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); + debugSettings?.update("onBuildFailureProceed", true); return true; } else if (ans === "Fix...") { showFixSuggestions(operationId); @@ -79,18 +105,28 @@ async function handleBuildFailure(operationId: string, err: any, progressReporte return true; } -function checkErrorsReportedByJavaExtension(): boolean { +function traceErrorTypes(operationId: string): boolean { const problems = vscode.languages.getDiagnostics() || []; + const errorTypes: {[key: string]: number} = {}; + let errorCount = 0; for (const problem of problems) { - const fileName = path.basename(problem[0].fsPath || ""); - if (fileName.endsWith(".java") || fileName === "pom.xml" || fileName.endsWith(".gradle")) { - if (problem[1].filter((diagnostic) => diagnostic.severity === vscode.DiagnosticSeverity.Error).length) { - return true; + for (const diagnostic of problem[1]) { + if (diagnostic.severity === vscode.DiagnosticSeverity.Error && diagnostic.source === "Java") { + const errorCode = typeof diagnostic.code === 'object' ? String(diagnostic.code.value) : String(diagnostic.code); + errorTypes[errorCode] = (errorTypes[errorCode] || 0) + 1; + errorCount++; } } } - return false; + if (errorCount) { + sendInfo(operationId, { + buildErrorTypes: JSON.stringify(errorTypes), + buildErrorCount: errorCount, + }); + } + + return errorCount > 0; } async function showFixSuggestions(operationId: string) { diff --git a/src/commands.ts b/src/commands.ts index b1368447..2419ec8f 100644 --- a/src/commands.ts +++ b/src/commands.ts @@ -16,7 +16,7 @@ export const JAVA_RESOLVE_MAINCLASS = "vscode.java.resolveMainClass"; export const JAVA_VALIDATE_LAUNCHCONFIG = "vscode.java.validateLaunchConfig"; -export const JAVA_BUILD_WORKSPACE = "java.workspace.compile"; +export const JAVA_BUILD_WORKSPACE = "vscode.java.buildWorkspace"; export const JAVA_EXECUTE_WORKSPACE_COMMAND = "java.execute.workspaceCommand"; diff --git a/src/configurationProvider.ts b/src/configurationProvider.ts index 9c88ce2c..92db8e11 100644 --- a/src/configurationProvider.ts +++ b/src/configurationProvider.ts @@ -6,7 +6,9 @@ import * as os from "os"; import * as path from "path"; import * as vscode from "vscode"; -import { instrumentOperation, sendInfo } from "vscode-extension-telemetry-wrapper"; +import * as dotenv from 'dotenv'; + +import { instrumentOperation, sendError, sendInfo, setUserError } from "vscode-extension-telemetry-wrapper"; import * as anchor from "./anchor"; import { buildWorkspace } from "./build"; import { populateStepFilters, substituteFilterVariables } from "./classFilter"; @@ -28,11 +30,24 @@ const platformNameMappings: { [key: string]: string } = { }; const platformName = platformNameMappings[process.platform]; +export let lastUsedLaunchConfig: vscode.DebugConfiguration | undefined; + export class JavaDebugConfigurationProvider implements vscode.DebugConfigurationProvider { private isUserSettingsDirty: boolean = true; constructor() { + const packageJson: {[key: string]: any} = require("../package.json"); + const debugConfigNames = Object.keys(packageJson?.contributes?.configuration?.properties || {}); vscode.workspace.onDidChangeConfiguration((event) => { if (event.affectsConfiguration("java.debug")) { + for (const key of debugConfigNames) { + if (event.affectsConfiguration(key)) { + sendInfo("", { + operationName: "changeJavaDebugSettings", + configName: key, + }); + } + } + if (vscode.debug.activeDebugSession) { this.isUserSettingsDirty = false; return updateDebugSettings(event); @@ -62,6 +77,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration config.type = "java"; config.name = "Java Debug"; config.request = "launch"; + config.__origin = "internal"; } return config; @@ -95,7 +111,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration progressReporter.observe(token); const defaultLaunchConfig = { type: "java", - name: "Launch Current File", + name: "Current File", request: "launch", // tslint:disable-next-line mainClass: "${file}", @@ -156,7 +172,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration } private constructLaunchConfigName(mainClass: string, cache: { [key: string]: any }) { - const name = `Launch ${mainClass.substr(mainClass.lastIndexOf(".") + 1)}`; + const name = `${mainClass.substr(mainClass.lastIndexOf(".") + 1)}`; if (cache[name] === undefined) { cache[name] = 0; return name; @@ -171,10 +187,20 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration let result = baseEnv; if (config.envFile) { try { - result = { - ...baseEnv, - ...readEnvFile(config.envFile), - }; + if (typeof config.envFile === 'string') { + result = { + ...result, + ...readEnvFile(config.envFile) + }; + } + if (Array.isArray(config.envFile)) { + config.envFile.forEach((f) => { + result = { + ...result, + ...readEnvFile(f) + }; + }); + } } catch (e) { throw new utility.UserError({ message: "Cannot load environment file.", @@ -187,11 +213,20 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration private async resolveAndValidateDebugConfiguration(folder: vscode.WorkspaceFolder | undefined, config: vscode.DebugConfiguration, token?: vscode.CancellationToken) { + let configCopy: vscode.DebugConfiguration | undefined; + const isConfigFromInternal = config.__origin === "internal" /** in-memory configuration from debugger */ + || config.__configurationTarget /** configuration from launch.json */; + if (config.request === "launch" && isConfigFromInternal) { + configCopy = _.cloneDeep(config); + delete configCopy.__progressId; + delete configCopy.noDebug; + } + let progressReporter = progressProvider.getProgressReporter(config.__progressId); if (!progressReporter && config.__progressId) { return undefined; } else if (!progressReporter) { - progressReporter = progressProvider.createProgressReporter(config.noDebug ? "Run" : "Debug"); + progressReporter = progressProvider.createProgressReporter(utility.launchJobName(config.name, config.noDebug)); } progressReporter.observe(token); @@ -218,26 +253,33 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration } if (config.request === "launch") { - this.mergeEnvFile(config); + const mainClassOption = await this.resolveAndValidateMainClass(folder && folder.uri, config, progressReporter); + if (!mainClassOption || !mainClassOption.mainClass) { // Exit silently if the user cancels the prompt fix by ESC. + // Exit the debug session. + return undefined; + } - // If the user doesn't specify 'vmArgs' in launch.json, use the global setting to get the default vmArgs. - if (config.vmArgs === undefined) { - const debugSettings: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); - config.vmArgs = debugSettings.vmArgs; + config.mainClass = mainClassOption.mainClass; + config.projectName = mainClassOption.projectName; + if (config.__workspaceFolder && config.__workspaceFolder !== folder) { + folder = config.__workspaceFolder; } - // If the user doesn't specify 'console' in launch.json, use the global setting to get the launch console. - if (!config.console) { - const debugSettings: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); - config.console = debugSettings.console; + // Update the job name if the main class is changed during the resolving of configuration provider. + if (configCopy && configCopy.mainClass !== config.mainClass) { + config.name = config.mainClass.substr(config.mainClass.lastIndexOf(".") + 1); + progressReporter.setJobName(utility.launchJobName(config.name, config.noDebug)); } - // If the console is integratedTerminal, don't auto switch the focus to DEBUG CONSOLE. - if (config.console === "integratedTerminal" && !config.internalConsoleOptions) { - config.internalConsoleOptions = "neverOpen"; + if (progressReporter.isCancelled()) { + return undefined; } if (needsBuildWorkspace()) { progressReporter.report("Compiling..."); - const proceed = await buildWorkspace(progressReporter); + const proceed = await buildWorkspace({ + mainClass: mainClassOption.mainClass, + projectName: mainClassOption.projectName, + isFullBuild: false, + }, progressReporter); if (!proceed) { return undefined; } @@ -246,20 +288,23 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration if (progressReporter.isCancelled()) { return undefined; } - if (!config.mainClass) { - progressReporter.report("Resolving main class..."); - } else { - progressReporter.report("Resolving launch configuration..."); - } - const mainClassOption = await this.resolveAndValidateMainClass(folder && folder.uri, config, progressReporter); - if (!mainClassOption || !mainClassOption.mainClass) { // Exit silently if the user cancels the prompt fix by ESC. - // Exit the debug session. - return undefined; - } progressReporter.report("Resolving launch configuration..."); - config.mainClass = mainClassOption.mainClass; - config.projectName = mainClassOption.projectName; + this.mergeEnvFile(config); + // If the user doesn't specify 'vmArgs' in launch.json, use the global setting to get the default vmArgs. + if (config.vmArgs === undefined) { + const debugSettings: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); + config.vmArgs = debugSettings.vmArgs; + } + // If the user doesn't specify 'console' in launch.json, use the global setting to get the launch console. + if (!config.console) { + const debugSettings: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); + config.console = debugSettings.console; + } + // If the console is integratedTerminal, don't auto switch the focus to DEBUG CONSOLE. + if (config.console === "integratedTerminal" && !config.internalConsoleOptions) { + config.internalConsoleOptions = "neverOpen"; + } if (progressReporter.isCancelled()) { return undefined; @@ -282,7 +327,17 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration }); } - config.javaExec = await lsPlugin.resolveJavaExecutable(config.mainClass, config.projectName); + if (_.isEmpty(config.javaExec)) { + config.javaExec = await lsPlugin.resolveJavaExecutable(config.mainClass, config.projectName); + } else { + if (!fs.existsSync(config.javaExec)) { + throw new utility.UserError({ + message: "Java executable file path cannot be accessed, please specify a valid path in the launch.json.", + type: Type.USAGEERROR, + }); + } + } + // Add the default launch options to the config. config.cwd = config.cwd || _.get(folder, "uri.fsPath"); if (Array.isArray(config.args)) { @@ -313,11 +368,9 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration config.shortenCommandLine = await getShortenApproachForCLI(config, targetJavaVersion); } - if (process.platform === "win32" && config.console !== "internalConsole") { - const launcherScript: string = utility.getLauncherScriptPath(); - if (!launcherScript.includes(" ") || !utility.isGitBash(config.console === "integratedTerminal")) { - config.launcherScript = launcherScript; - } + // VS Code internal console uses UTF-8 to display output by default. + if (config.console === "internalConsole" && !config.encoding) { + config.encoding = "UTF-8"; } } else if (config.request === "attach") { if (config.hostName && config.port && Number.isInteger(Number(config.port))) { @@ -384,6 +437,14 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration utility.showErrorMessageWithTroubleshooting(utility.convertErrorToMessage(ex)); return undefined; } finally { + if (configCopy && config.mainClass) { + configCopy.name = config.name; + configCopy.mainClass = config.mainClass; + configCopy.projectName = config.projectName; + configCopy.__workspaceFolder = folder; + lastUsedLaunchConfig = configCopy; + } + progressReporter.done(); } } @@ -410,14 +471,16 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration const paths: string[] = []; let replaced: boolean = false; for (const p of pathArray) { - if (pathVariables.includes(p)) { - if (!replaced) { - paths.push(...resolvedPaths); - replaced = true; + for (const splitPath of p.split(process.platform === 'win32' ? ';' : ':')) { + if (pathVariables.includes(splitPath)) { + if (!replaced) { + paths.push(...resolvedPaths); + replaced = true; + } + continue; } - continue; + paths.push(splitPath); } - paths.push(p); } return this.filterExcluded(folder, paths); } @@ -432,7 +495,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration exclude = path.join(folder?.uri.fsPath || "", exclude); } // use Uri to normalize the fs path - excludes.set(vscode.Uri.file(exclude).fsPath, this.isFile(exclude)); + excludes.set(vscode.Uri.file(exclude).fsPath, this.isFilePath(exclude)); continue; } @@ -496,10 +559,32 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration private async resolveAndValidateMainClass(folder: vscode.Uri | undefined, config: vscode.DebugConfiguration, progressReporter: IProgressReporter): Promise { - if (!config.mainClass || this.isFile(config.mainClass)) { - const currentFile = config.mainClass || _.get(vscode.window.activeTextEditor, "document.uri.fsPath"); - if (currentFile) { - const mainEntries = await lsPlugin.resolveMainMethod(vscode.Uri.file(currentFile)); + // Validate it if the mainClass is already set in launch configuration. + if (config.mainClass && !this.isFilePath(config.mainClass)) { + progressReporter.report("Resolving main class..."); + const containsExternalClasspaths = !_.isEmpty(config.classPaths) || !_.isEmpty(config.modulePaths); + const validationResponse = await lsPlugin.validateLaunchConfig(config.mainClass, config.projectName, containsExternalClasspaths, folder); + if (progressReporter.isCancelled()) { + return undefined; + } else if (!validationResponse.mainClass.isValid || !validationResponse.projectName.isValid) { + return this.fixMainClass(folder, config, validationResponse, progressReporter); + } + + return { + mainClass: config.mainClass, + projectName: config.projectName, + }; + } + + return this.resolveMainClass(config, progressReporter); + } + + private async resolveMainClass(config: vscode.DebugConfiguration, progressReporter: IProgressReporter): + Promise { + if (config.projectName) { + progressReporter.report("Resolving main class..."); + if (this.isFilePath(config.mainClass)) { + const mainEntries = await lsPlugin.resolveMainMethod(vscode.Uri.file(config.mainClass)); if (progressReporter.isCancelled()) { return undefined; } else if (mainEntries.length) { @@ -510,27 +595,46 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration } } - const hintMessage = currentFile ? - `The file '${path.basename(currentFile)}' is not executable, please select a main class you want to run.` : - "Please select a main class you want to run."; - return this.promptMainClass(folder, progressReporter, hintMessage); + return this.promptMainClassUnderProject(config.projectName, progressReporter, "Please select a main class you wan to run"); } - const containsExternalClasspaths = !_.isEmpty(config.classPaths) || !_.isEmpty(config.modulePaths); - const validationResponse = await lsPlugin.validateLaunchConfig(config.mainClass, config.projectName, containsExternalClasspaths, folder); - if (progressReporter.isCancelled()) { - return undefined; - } else if (!validationResponse.mainClass.isValid || !validationResponse.projectName.isValid) { - return this.fixMainClass(folder, config, validationResponse, progressReporter); + // Try to resolve main class from current file + const currentFile = config.mainClass || vscode.window.activeTextEditor?.document.uri.fsPath; + if (currentFile) { + const mainEntries = await lsPlugin.resolveMainMethod(vscode.Uri.file(currentFile)); + if (progressReporter.isCancelled()) { + return undefined; + } else if (mainEntries.length) { + if (!mainClassPicker.isAutoPicked(mainEntries)) { + progressReporter.hide(true); + } + return mainClassPicker.showQuickPick(mainEntries, "Please select a main class you want to run."); + } } - return { - mainClass: config.mainClass, - projectName: config.projectName, - }; + // If current file is not executable, run previously used launch config. + if (lastUsedLaunchConfig) { + Object.assign(config, lastUsedLaunchConfig); + progressReporter.setJobName(utility.launchJobName(config.name, config.noDebug)); + progressReporter.report("Resolving main class..."); + return { + mainClass: config.mainClass, + projectName: config.projectName, + }; + } + + progressReporter.report("Resolving main class..."); + const hintMessage = currentFile ? + `The file '${path.basename(currentFile)}' is not executable, please select a main class you want to run.` : + "Please select a main class you want to run."; + return this.promptMainClassUnderPath(undefined, progressReporter, hintMessage); } - private isFile(filePath: string): boolean { + private isFilePath(filePath: string): boolean { + if (!filePath) { + return false; + } + try { return fs.lstatSync(filePath).isFile(); } catch (error) { @@ -539,16 +643,43 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration } } + private getValidationErrorMessage(error: lsPlugin.IValidationResult): string { + switch (error.kind) { + case lsPlugin.CONFIGERROR_INVALID_CLASS_NAME: + return "ConfigError: mainClass was configured with an invalid class name."; + case lsPlugin.CONFIGERROR_MAIN_CLASS_NOT_EXIST: + return "ConfigError: mainClass does not exist."; + case lsPlugin.CONFIGERROR_MAIN_CLASS_NOT_UNIQUE: + return "ConfigError: mainClass is not unique in the workspace"; + case lsPlugin.CONFIGERROR_INVALID_JAVA_PROJECT: + return "ConfigError: could not find a Java project with the configured projectName."; + } + + return "ConfigError: Invalid mainClass/projectName configs."; + } + private async fixMainClass(folder: vscode.Uri | undefined, config: vscode.DebugConfiguration, validationResponse: lsPlugin.ILaunchValidationResponse, progressReporter: IProgressReporter): Promise { const errors: string[] = []; if (!validationResponse.mainClass.isValid) { errors.push(String(validationResponse.mainClass.message)); + const errorLog: Error = { + name: "error", + message: this.getValidationErrorMessage(validationResponse.mainClass), + }; + setUserError(errorLog); + sendError(errorLog); } if (!validationResponse.projectName.isValid) { errors.push(String(validationResponse.projectName.message)); + const errorLog: Error = { + name: "error", + message: this.getValidationErrorMessage(validationResponse.projectName), + }; + setUserError(errorLog); + sendError(errorLog); } if (validationResponse.proposals && validationResponse.proposals.length) { @@ -557,6 +688,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration message: errors.join(os.EOL), type: Type.USAGEERROR, anchor: anchor.FAILED_TO_RESOLVE_CLASSPATH, + bypassLog: true, // Avoid logging the raw user input in the logger for privacy. }, "Fix"); if (answer === "Fix") { const selectedFix = await mainClassPicker.showQuickPick(validationResponse.proposals, @@ -564,7 +696,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration if (selectedFix) { sendInfo("", { fix: "yes", - fixMessage: errors.join(os.EOL), + fixMessage: "Fix the configs of mainClass and projectName", }); await this.persistMainClassOption(folder, config, selectedFix); } @@ -579,6 +711,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration message: errors.join(os.EOL), type: Type.USAGEERROR, anchor: anchor.FAILED_TO_RESOLVE_CLASSPATH, + bypassLog: true, // Avoid logging the raw user input in the logger for privacy. }); } @@ -602,7 +735,7 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration } } - private async promptMainClass(folder: vscode.Uri | undefined, progressReporter: IProgressReporter, hintMessage?: string): + private async promptMainClassUnderPath(folder: vscode.Uri | undefined, progressReporter: IProgressReporter, hintMessage?: string): Promise { const res = await lsPlugin.resolveMainClass(folder); if (progressReporter.isCancelled()) { @@ -621,6 +754,25 @@ export class JavaDebugConfigurationProvider implements vscode.DebugConfiguration } return mainClassPicker.showQuickPickWithRecentlyUsed(res, hintMessage || "Select main class"); } + + private async promptMainClassUnderProject(projectName: string, progressReporter: IProgressReporter, hintMessage?: string): + Promise { + const res = await lsPlugin.resolveMainClassFromProject(projectName); + if (progressReporter.isCancelled()) { + return undefined; + } else if (res.length === 0) { + throw new utility.UserError({ + message: `Cannot find a class with the main method in the project '${projectName}'.`, + type: Type.USAGEERROR, + anchor: anchor.CANNOT_FIND_MAIN_CLASS, + }); + } + + if (!mainClassPicker.isAutoPicked(res)) { + progressReporter.hide(true); + } + return mainClassPicker.showQuickPickWithRecentlyUsed(res, hintMessage || "Select main class"); + } } async function updateDebugSettings(event?: vscode.ConfigurationChangeEvent) { @@ -634,13 +786,17 @@ async function updateDebugSettings(event?: vscode.ConfigurationChangeEvent) { try { const stepFilters = { skipClasses: await substituteFilterVariables(debugSettingsRoot.settings.stepping.skipClasses), - skipSynthetics: debugSettingsRoot.settings.skipSynthetics, - skipStaticInitializers: debugSettingsRoot.settings.skipStaticInitializers, - skipConstructors: debugSettingsRoot.settings.skipConstructors, + skipSynthetics: debugSettingsRoot.settings.stepping.skipSynthetics, + skipStaticInitializers: debugSettingsRoot.settings.stepping.skipStaticInitializers, + skipConstructors: debugSettingsRoot.settings.stepping.skipConstructors, }; const exceptionFilters = { + exceptionTypes: debugSettingsRoot.settings.exceptionBreakpoint.exceptionTypes, + allowClasses: debugSettingsRoot.settings.exceptionBreakpoint.allowClasses, skipClasses: await substituteFilterVariables(debugSettingsRoot.settings.exceptionBreakpoint.skipClasses), }; + + const asyncJDWP: string = debugSettingsRoot.settings.jdwp.async; const settings = await commands.executeJavaLanguageServerCommand(commands.JAVA_UPDATE_DEBUG_SETTINGS, JSON.stringify( { ...debugSettingsRoot.settings, @@ -648,9 +804,13 @@ async function updateDebugSettings(event?: vscode.ConfigurationChangeEvent) { javaHome, stepFilters, exceptionFilters, - exceptionFiltersUpdated: event && event.affectsConfiguration("java.debug.settings.exceptionBreakpoint.skipClasses"), + exceptionFiltersUpdated: event && + (event.affectsConfiguration("java.debug.settings.exceptionBreakpoint.skipClasses") + || event.affectsConfiguration("java.debug.settings.exceptionBreakpoint.allowClasses") + || event.affectsConfiguration("java.debug.settings.exceptionBreakpoint.exceptionTypes")), limitOfVariablesPerJdwpRequest: Math.max(debugSettingsRoot.settings.jdwp.limitOfVariablesPerJdwpRequest, 1), jdwpRequestTimeout: Math.max(debugSettingsRoot.settings.jdwp.requestTimeout, 100), + asyncJDWP, })); if (logLevel === "FINE") { // tslint:disable-next-line:no-console @@ -665,8 +825,8 @@ async function updateDebugSettings(event?: vscode.ConfigurationChangeEvent) { } function needsBuildWorkspace(): boolean { - const debugSettingsRoot: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); - return debugSettingsRoot ? debugSettingsRoot.forceBuildBeforeLaunch : true; + const javaConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java"); + return javaConfig?.debug?.settings?.forceBuildBeforeLaunch; } function convertLogLevel(commonLogLevel: string) { @@ -692,20 +852,7 @@ function readEnvFile(file: string): { [key: string]: string } { } const buffer = stripBOM(fs.readFileSync(file, "utf8")); - const env: { [key: string]: string } = {}; - for (const line of buffer.split("\n")) { - const r = line.match(/^\s*([\w\.\-]+)\s*=\s*(.*)?\s*$/); - if (!r) { - continue; - } - - let value = r[2] || ""; - // .env variables never overwrite existing variables (see #21169) - if (value.length > 0 && value.charAt(0) === '"' && value.charAt(value.length - 1) === '"') { - value = value.replace(/\\n/gm, "\n"); - } - env[r[1]] = value.replace(/(^['"]|['"]$)/g, ""); - } + const env = dotenv.parse(Buffer.from(buffer)); return env; } diff --git a/src/constants.ts b/src/constants.ts index 0226a5e6..206dd470 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,6 +2,7 @@ // Licensed under the MIT license. export const JAVA_LANGID: string = "java"; +export const TELEMETRY_EVENT = "telemetry"; export const HCR_EVENT = "hotcodereplace"; export const USER_NOTIFICATION_EVENT = "usernotification"; diff --git a/src/customWidget.ts b/src/customWidget.ts index 80bcc674..a4f4b88e 100644 --- a/src/customWidget.ts +++ b/src/customWidget.ts @@ -7,8 +7,9 @@ export class NotificationBar implements vscode.Disposable { private statusBar: vscode.StatusBarItem; private lastUpdateTime: number; - constructor() { - this.statusBar = vscode.window.createStatusBarItem(vscode.StatusBarAlignment.Left, Number.POSITIVE_INFINITY); + constructor(id: string, name: string) { + this.statusBar = vscode.window.createStatusBarItem(id, vscode.StatusBarAlignment.Left, 1); + this.statusBar.name = name; } public show(text: string, duration?: number) { diff --git a/src/debugCodeLensProvider.ts b/src/debugCodeLensProvider.ts index 09c71ec4..110d2946 100644 --- a/src/debugCodeLensProvider.ts +++ b/src/debugCodeLensProvider.ts @@ -4,7 +4,7 @@ import * as _ from "lodash"; import * as path from "path"; import * as vscode from "vscode"; -import { instrumentOperationAsVsCodeCommand } from "vscode-extension-telemetry-wrapper"; +import { instrumentOperationAsVsCodeCommand, sendInfo } from "vscode-extension-telemetry-wrapper"; import { JAVA_LANGID } from "./constants"; import { initializeHoverProvider } from "./hoverProvider"; @@ -152,7 +152,7 @@ async function constructDebugConfig(mainClass: string, projectName: string, work if (!debugConfig) { debugConfig = { type: "java", - name: `Launch ${mainClass.substr(mainClass.lastIndexOf(".") + 1)}`, + name: `${mainClass.substr(mainClass.lastIndexOf(".") + 1)}`, request: "launch", mainClass, projectName, @@ -181,7 +181,9 @@ async function launchJsonExists(workspace?: vscode.Uri): Promise { } const workspaceFolder = vscode.workspace.getWorkspaceFolder(workspace); - const results: vscode.Uri[] = await vscode.workspace.findFiles(".vscode/launch.json"); + // Excluding "**/node_modules/**" as a common cause of excessive CPU usage. + // https://github.com/microsoft/vscode/issues/75314#issuecomment-503195666 + const results: vscode.Uri[] = await vscode.workspace.findFiles(".vscode/launch.json", "**/node_modules/**"); return !!results.find((launchJson) => vscode.workspace.getWorkspaceFolder(launchJson) === workspaceFolder); } @@ -198,6 +200,7 @@ export async function startDebugging(mainClass: string, projectName: string, uri debugConfig.projectName = projectName; debugConfig.noDebug = noDebug; debugConfig.__progressId = progressReporter?.getId(); + debugConfig.__origin = "internal"; return vscode.debug.startDebugging(workspaceFolder, debugConfig); } @@ -214,12 +217,14 @@ async function addToClasspath(uri: vscode.Uri): Promise { if (parentPath === parentUri.fsPath) { parentPath = path.basename(parentFsPath); } + sendInfo("", {operationName: "notOnClasspath"}); const ans = await vscode.window.showWarningMessage(`The file ${fileName} isn't on the classpath, the runtime may throw class not found error. ` + `Do you want to add the parent folder "${parentPath}" to Java source path?`, "Add to Source Path", "Skip"); if (ans === "Skip") { return true; } else if (ans === "Add to Source Path") { - vscode.commands.executeCommand("java.project.addToSourcePath", parentUri); + sendInfo("", {operationName: "addToSourcePath"}); + vscode.commands.executeCommand("java.project.addToSourcePath.command", parentUri); } return false; diff --git a/src/extension.ts b/src/extension.ts index 721e332a..e3a75eb0 100644 --- a/src/extension.ts +++ b/src/extension.ts @@ -6,17 +6,19 @@ import * as _ from "lodash"; import * as path from "path"; import * as vscode from "vscode"; import { dispose as disposeTelemetryWrapper, initializeFromJsonFile, instrumentOperation, - instrumentOperationAsVsCodeCommand, setUserError } from "vscode-extension-telemetry-wrapper"; + instrumentOperationAsVsCodeCommand, sendInfo, setUserError } from "vscode-extension-telemetry-wrapper"; import * as commands from "./commands"; -import { JavaDebugConfigurationProvider } from "./configurationProvider"; -import { HCR_EVENT, JAVA_LANGID, USER_NOTIFICATION_EVENT } from "./constants"; +import { JavaDebugConfigurationProvider, lastUsedLaunchConfig } from "./configurationProvider"; +import { HCR_EVENT, JAVA_LANGID, TELEMETRY_EVENT, USER_NOTIFICATION_EVENT } from "./constants"; import { NotificationBar } from "./customWidget"; import { initializeCodeLensProvider, startDebugging } from "./debugCodeLensProvider"; import { initExpService } from "./experimentationService"; +import { registerNoConfigDebug } from "./noConfigDebugInit"; import { handleHotCodeReplaceCustomEvent, initializeHotCodeReplace, NO_BUTTON, YES_BUTTON } from "./hotCodeReplace"; import { JavaDebugAdapterDescriptorFactory } from "./javaDebugAdapterDescriptorFactory"; import { JavaInlineValuesProvider } from "./JavaInlineValueProvider"; import { logJavaException, logJavaInfo } from "./javaLogger"; +import { registerLanguageModelTool, registerDebugSessionTools } from "./languageModelTool"; import { IMainClassOption, IMainMethod, resolveMainMethod } from "./languageServerPlugin"; import { mainClassPicker } from "./mainClassPicker"; import { pickJavaProcess } from "./processPicker"; @@ -25,18 +27,30 @@ import { progressProvider } from "./progressImpl"; import { JavaTerminalLinkProvder } from "./terminalLinkProvider"; import { initializeThreadOperations } from "./threadOperations"; import * as utility from "./utility"; +import { registerBreakpointCommands } from "./breakpointCommands"; import { registerVariableMenuCommands } from "./variableMenu"; +import { promisify } from "util"; export async function activate(context: vscode.ExtensionContext): Promise { - await initializeFromJsonFile(context.asAbsolutePath("./package.json"), { - firstParty: true, - }); + await initializeFromJsonFile(context.asAbsolutePath("./package.json")); await initExpService(context); + + // Register No-Config Debug functionality + const noConfigDisposable = await registerNoConfigDebug( + context.environmentVariableCollection, + context.extensionPath + ); + context.subscriptions.push(noConfigDisposable); + + // Register Language Model Tools after Java Language Server is ready + registerLanguageModelToolsWhenReady(context); + return instrumentOperation("activation", initializeExtension)(context); } function initializeExtension(_operationId: string, context: vscode.ExtensionContext): any { registerDebugEventListener(context); + registerBreakpointCommands(context); registerVariableMenuCommands(context); context.subscriptions.push(vscode.window.registerTerminalLinkProvider(new JavaTerminalLinkProvder())); context.subscriptions.push(vscode.debug.registerDebugConfigurationProvider("java", new JavaDebugConfigurationProvider())); @@ -55,7 +69,7 @@ function initializeExtension(_operationId: string, context: vscode.ExtensionCont // tslint:disable-next-line return javaProcess ? String(javaProcess.pid) : "${command:PickJavaProcess}"; })); - const hcrStatusBar: NotificationBar = new NotificationBar(); + const hcrStatusBar: NotificationBar = new NotificationBar("java.hcrStatusBar", "Java HotCodeReplace"); context.subscriptions.push(hcrStatusBar); context.subscriptions.push(instrumentOperationAsVsCodeCommand("java.debug.hotCodeReplace", async () => { await applyHCR(hcrStatusBar); @@ -75,6 +89,7 @@ function initializeExtension(_operationId: string, context: vscode.ExtensionCont initializeHotCodeReplace(context); initializeCodeLensProvider(context); initializeThreadOperations(context); + subscribeToJavaExtensionEvents(); context.subscriptions.push(vscode.languages.registerInlineValuesProvider("java", new JavaInlineValuesProvider())); return { @@ -87,6 +102,58 @@ export async function deactivate() { await disposeTelemetryWrapper(); } +const delay = promisify(setTimeout); + +/** + * Register Language Model Tools after Java Language Server is ready. + * The debug tools depend on JDT.LS for compilation, classpath resolution, + * and executing debug server commands. + */ +async function registerLanguageModelToolsWhenReady(context: vscode.ExtensionContext): Promise { + // Check if Language Model API is available + if (!vscode.lm || typeof vscode.lm.registerTool !== 'function') { + return; + } + + const javaExt = vscode.extensions.getExtension("redhat.java"); + if (!javaExt) { + return; + } + + // Register Language Model Tools for AI-assisted debugging + registerLanguageModelTool(context); + const debugToolsDisposables = registerDebugSessionTools(context); + context.subscriptions.push(...debugToolsDisposables); +} + +async function subscribeToJavaExtensionEvents(): Promise { + const javaExt = vscode.extensions.getExtension("redhat.java"); + if (!javaExt) { + return; + } + + // wait javaExt to activate + const timeout = 30 * 60 * 1000; // wait 30 min at most + let count = 0; + while (!javaExt.isActive && count < timeout) { + await delay(1000); + count += 1000; + } + + if (javaExt.isActive) { + javaExt.exports?.onDidSourceInvalidate?.((event: any) => { + if (event?.affectedRootPaths?.length) { + const activeDebugSession = vscode.debug.activeDebugSession; + if (activeDebugSession?.type === "java") { + activeDebugSession.customRequest("refreshFrames", { + affectedRootPaths: event.affectedRootPaths, + }); + } + } + }); + } +} + function registerDebugEventListener(context: vscode.ExtensionContext) { const measureKeys = ["duration"]; context.subscriptions.push(vscode.debug.onDidTerminateDebugSession((e) => { @@ -120,7 +187,12 @@ function registerDebugEventListener(context: vscode.ExtensionContext) { if (t !== JAVA_LANGID) { return; } - if (customEvent.event === HCR_EVENT) { + if (customEvent.event === TELEMETRY_EVENT) { + sendInfo("", { + operationName: customEvent.body?.name, + ...customEvent.body?.properties, + }); + } else if (customEvent.event === HCR_EVENT) { handleHotCodeReplaceCustomEvent(customEvent); } else if (customEvent.event === USER_NOTIFICATION_EVENT) { handleUserNotification(customEvent); @@ -188,17 +260,14 @@ async function applyHCR(hcrStatusBar: NotificationBar) { const autobuildConfig: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.autobuild"); if (!autobuildConfig.enabled) { - const ans = await vscode.window.showWarningMessage( - "The hot code replace feature requires you to enable the autobuild flag, do you want to enable it?", - "Yes", "No"); - if (ans === "Yes") { - await autobuildConfig.update("enabled", true); - // Force an incremental build to avoid auto build is not finishing during HCR. - try { - await commands.executeJavaExtensionCommand(commands.JAVA_BUILD_WORKSPACE, false); - } catch (err) { - // do nothing. - } + // If autobuild is disabled, force an incremental build before HCR. + try { + hcrStatusBar.show("$(sync~spin)Compiling..."); + await commands.executeJavaExtensionCommand(commands.JAVA_BUILD_WORKSPACE, JSON.stringify({ + isFullBuild: false + })); + } catch (err) { + // do nothing. } } @@ -254,14 +323,23 @@ async function runJavaFile(uri: vscode.Uri, noDebug: boolean) { const defaultPlaceHolder: string = "Select the main class to run"; if (!hasMainMethods && !canRunTests) { - progressReporter.report("Resolving main class..."); - const mainClasses: IMainClassOption[] = await utility.searchMainMethods(); - if (progressReporter.isCancelled()) { - throw new utility.OperationCancelledError(""); + // If current file is not a main class, "Run Java" will run previously used launch config. + if (lastUsedLaunchConfig) { + progressReporter.setJobName(utility.launchJobName(lastUsedLaunchConfig.name, noDebug)); + progressReporter.report("Resolving launch configuration..."); + lastUsedLaunchConfig.noDebug = noDebug; + lastUsedLaunchConfig.__progressId = progressReporter.getId(); + vscode.debug.startDebugging(lastUsedLaunchConfig.__workspaceFolder, lastUsedLaunchConfig); + } else { + progressReporter.report("Resolving main class..."); + const mainClasses: IMainClassOption[] = await utility.searchMainMethods(); + if (progressReporter.isCancelled()) { + throw new utility.OperationCancelledError(""); + } + + const placeHolder: string = `The file '${path.basename(uri.fsPath)}' is not executable, please select a main class you want to run.`; + await launchMain(mainClasses, uri, noDebug, progressReporter, placeHolder, false /*autoPick*/); } - - const placeHolder: string = `The file '${path.basename(uri.fsPath)}' is not executable, please select a main class you want to run.`; - await launchMain(mainClasses, uri, noDebug, progressReporter, placeHolder, false /*autoPick*/); } else if (hasMainMethods && !canRunTests) { await launchMain(mainMethods, uri, noDebug, progressReporter, defaultPlaceHolder); } else if (!hasMainMethods && canRunTests) { @@ -306,7 +384,7 @@ async function canDelegateToJavaTestRunner(uri: vscode.Uri): Promise { function launchTesting(uri: vscode.Uri, noDebug: boolean, progressReporter: IProgressReporter) { const command: string = noDebug ? "java.test.editor.run" : "java.test.editor.debug"; vscode.commands.executeCommand(command, uri, progressReporter); - if (compareVersions(getTestExtensionVersion(), "0.26.1") <= 0) { + if (compareVersions.compare(getTestExtensionVersion(), "0.26.1", "<=")) { throw new utility.OperationCancelledError(""); } } @@ -333,6 +411,13 @@ async function launchMain(mainMethods: IMainClassOption[], uri: vscode.Uri, noDe throw new utility.OperationCancelledError(""); } + const existConfig: vscode.DebugConfiguration | undefined = findLaunchConfiguration( + pick.mainClass, pick.projectName, uri.fsPath); + if (existConfig) { + progressReporter.setJobName(utility.launchJobName(existConfig.name, noDebug)); + } else { + progressReporter.setJobName(utility.launchJobNameByMainClass(pick.mainClass, noDebug)); + } progressReporter.report("Launching main class..."); startDebugging(pick.mainClass, pick.projectName || "", uri, noDebug, progressReporter); } @@ -369,26 +454,24 @@ async function runJavaProject(node: any, noDebug: boolean) { throw new utility.OperationCancelledError(""); } - progressReporter.report("Launching main class..."); const projectName: string | undefined = pick.projectName; const mainClass: string = pick.mainClass; const filePath: string | undefined = pick.filePath; const workspaceFolder: vscode.WorkspaceFolder | undefined = filePath ? vscode.workspace.getWorkspaceFolder(vscode.Uri.file(filePath)) : undefined; - const launchConfigurations: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("launch", workspaceFolder); - const existingConfigs: vscode.DebugConfiguration[] = launchConfigurations.configurations; - const existConfig: vscode.DebugConfiguration | undefined = _.find(existingConfigs, (config) => { - return config.mainClass === mainClass && _.toString(config.projectName) === _.toString(projectName); - }); + const existConfig: vscode.DebugConfiguration | undefined = findLaunchConfiguration(mainClass, projectName, filePath); const debugConfig = existConfig || { type: "java", - name: `Launch ${mainClass.substr(mainClass.lastIndexOf(".") + 1)}`, + name: `${mainClass.substr(mainClass.lastIndexOf(".") + 1)}`, request: "launch", mainClass, projectName, }; debugConfig.noDebug = noDebug; debugConfig.__progressId = progressReporter.getId(); + debugConfig.__origin = "internal"; + progressReporter.setJobName(utility.launchJobName(debugConfig.name, noDebug)); + progressReporter.report("Launching main class..."); vscode.debug.startDebugging(workspaceFolder, debugConfig); } catch (ex) { progressReporter.done(); @@ -399,3 +482,15 @@ async function runJavaProject(node: any, noDebug: boolean) { throw ex; } } + +function findLaunchConfiguration(mainClass: string, projectName: string | undefined, filePath?: string): vscode.DebugConfiguration | undefined { + const workspaceFolder: vscode.WorkspaceFolder | undefined = + filePath ? vscode.workspace.getWorkspaceFolder(vscode.Uri.file(filePath)) : undefined; + const launchConfigurations: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("launch", workspaceFolder); + const existingConfigs: vscode.DebugConfiguration[] = launchConfigurations.configurations; + const existConfig: vscode.DebugConfiguration | undefined = _.find(existingConfigs, (config) => { + return config.mainClass === mainClass && _.toString(config.projectName) === _.toString(projectName); + }); + + return existConfig; +} diff --git a/src/hotCodeReplace.ts b/src/hotCodeReplace.ts index e14408d7..03ee077b 100644 --- a/src/hotCodeReplace.ts +++ b/src/hotCodeReplace.ts @@ -30,6 +30,14 @@ export function initializeHotCodeReplace(context: vscode.ExtensionContext) { vscode.commands.executeCommand("setContext", "javaHotReload", getHotReloadFlag()); } }); + vscode.debug.onDidStartDebugSession((session) => { + if (session?.configuration.noDebug && !vscode.debug.activeDebugSession) { + vscode.commands.executeCommand("setContext", "javaHotReloadOn", false); + } + }); + vscode.debug.onDidChangeActiveDebugSession((session) => { + vscode.commands.executeCommand("setContext", "javaHotReloadOn", session && !session.configuration.noDebug); + }); context.subscriptions.push(vscode.debug.onDidTerminateDebugSession((session) => { const t = session ? session.type : undefined; if (t === JAVA_LANGID) { diff --git a/src/languageModelTool.ts b/src/languageModelTool.ts new file mode 100644 index 00000000..ad803d25 --- /dev/null +++ b/src/languageModelTool.ts @@ -0,0 +1,1577 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +import * as fs from 'fs'; +import * as path from 'path'; +import * as vscode from 'vscode'; +import { sendError, sendInfo } from "vscode-extension-telemetry-wrapper"; + +// ============================================================================ +// Constants +// ============================================================================ +const CONSTANTS = { + /** Timeout for waitForSession mode (ms) */ + SESSION_WAIT_TIMEOUT: 45000, + /** Maximum wait time for smart polling (ms) */ + SMART_POLLING_MAX_WAIT: 15000, + /** Interval between polling checks (ms) */ + SMART_POLLING_INTERVAL: 300, + /** Timeout for build tasks (ms) */ + BUILD_TIMEOUT: 60000, + /** Maximum number of Java files to check for compilation errors */ + MAX_JAVA_FILES_TO_CHECK: 100, + /** Default stack trace depth */ + DEFAULT_STACK_DEPTH: 50, + /** Maximum depth for recursive file search */ + MAX_FILE_SEARCH_DEPTH: 10 +}; + +interface DebugJavaApplicationInput { + target: string; + workspacePath: string; + args?: string[]; + skipBuild?: boolean; + classpath?: string; + waitForSession?: boolean; +} + +interface DebugJavaApplicationResult { + success: boolean; + message: string; + terminalName?: string; + status?: 'started' | 'timeout' | 'sent'; // More specific status + sessionId?: string; // Session ID if detected +} + +// Type definitions for Language Model API (these will be in future VS Code versions) +// For now, we use 'any' to allow compilation with older VS Code types +interface LanguageModelTool { + invoke(options: { input: T }, token: vscode.CancellationToken): Promise; +} + +/** + * Registers the Language Model Tool for debugging Java applications. + * This allows AI assistants to help users debug Java code by invoking the debugjava command. + */ +export function registerLanguageModelTool(context: vscode.ExtensionContext): vscode.Disposable | undefined { + // Check if the Language Model API is available + const lmApi = (vscode as any).lm; + if (!lmApi || typeof lmApi.registerTool !== 'function') { + // Language Model API not available in this VS Code version + return undefined; + } + + const tool: LanguageModelTool = { + async invoke(options: { input: DebugJavaApplicationInput }, token: vscode.CancellationToken): Promise { + sendInfo('', { + operationName: 'languageModelTool.debugJavaApplication.invoke', + target: options.input.target, + skipBuild: options.input.skipBuild?.toString() || 'false', + }); + + try { + const result = await debugJavaApplication(options.input, token); + + // Format the message for AI - use simple text, not JSON + const message = result.success + ? `✓ ${result.message}` + : `✗ ${result.message}`; + + // Return result in the expected format - simple text part + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(message) + ]); + } catch (error) { + sendError(error as Error); + + const errorMessage = error instanceof Error ? error.message : String(error); + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Debug failed: ${errorMessage}`) + ]); + } + } + }; + + const disposable = lmApi.registerTool('debug_java_application', tool); + context.subscriptions.push(disposable); + return disposable; +} + +/** + * Main function to debug a Java application. + * This function handles: + * 1. Cleanup any existing debug session (to avoid port conflicts) + * 2. Project type detection + * 3. Building the project if needed + * 4. Executing the debugjava command + */ +async function debugJavaApplication( + input: DebugJavaApplicationInput, + token: vscode.CancellationToken +): Promise { + if (token.isCancellationRequested) { + return { + success: false, + message: 'Operation cancelled by user' + }; + } + + // Step 0: Cleanup any existing Java debug session to avoid port conflicts + const existingSession = vscode.debug.activeDebugSession; + if (existingSession && existingSession.type === 'java') { + sendInfo('', { + operationName: 'languageModelTool.cleanupExistingSession', + sessionId: existingSession.id, + sessionName: existingSession.name + }); + try { + await vscode.debug.stopDebugging(existingSession); + // Give VS Code a moment to clean up the session + await new Promise(resolve => setTimeout(resolve, 500)); + } catch (error) { + // Log but continue - the old session might already be dead + sendInfo('', { + operationName: 'languageModelTool.cleanupExistingSessionFailed', + error: String(error) + }); + } + } + + // Also close any existing "Java Debug" terminals to avoid confusion + for (const existingTerminal of vscode.window.terminals) { + if (existingTerminal.name === 'Java Debug') { + existingTerminal.dispose(); + } + } + + // Validate workspace path + const workspaceUri = vscode.Uri.file(input.workspacePath); + if (!fs.existsSync(input.workspacePath)) { + return { + success: false, + message: `Workspace path does not exist: ${input.workspacePath}` + }; + } + + // Step 1: Detect project type + const projectType = detectProjectType(input.workspacePath); + + // Step 2: Build the project if needed + if (!input.skipBuild) { + const buildResult = await buildProject(workspaceUri, projectType, token); + if (!buildResult.success) { + return buildResult; + } + } + + // Step 3: Construct and execute the debugjava command + const debugCommand = constructDebugCommand(input, projectType); + + // Validate that we can construct a valid command + if (!debugCommand || debugCommand === 'debugjava') { + return { + success: false, + message: 'Failed to construct debug command. Please check the target parameter.' + }; + } + + // Step 4: Execute in terminal and optionally wait for debug session + const terminal = vscode.window.createTerminal({ + name: 'Java Debug', + cwd: input.workspacePath, + hideFromUser: false, + isTransient: false // Keep terminal alive even after process exits + }); + + terminal.show(); + + // Build info message for AI + let targetInfo = input.target; + let warningNote = ''; + + if (input.target.endsWith('.jar')) { + targetInfo = input.target; + } else if (input.target.includes('.')) { + targetInfo = input.target; + } else { + // Simple class name - check if we successfully detected the full name + const detectedClassName = findFullyQualifiedClassName(input.workspacePath, input.target, projectType); + if (detectedClassName) { + targetInfo = `${detectedClassName} (detected from ${input.target})`; + } else { + targetInfo = input.target; + warningNote = ' ⚠️ Note: Could not auto-detect package name. If you see "ClassNotFoundException", please provide the fully qualified class name (e.g., "com.example.App" instead of "App").'; + } + } + + // If waitForSession is true, wait for the debug session to start + if (input.waitForSession) { + return new Promise((resolve) => { + let sessionStarted = false; + + // Listen for debug session start + const sessionDisposable = vscode.debug.onDidStartDebugSession((session) => { + if (session.type === 'java' && !sessionStarted) { + sessionStarted = true; + sessionDisposable.dispose(); + if (timeoutHandle) { + clearTimeout(timeoutHandle); + } + + sendInfo('', { + operationName: 'languageModelTool.debugSessionStarted.eventBased', + sessionId: session.id, + sessionName: session.name + }); + + resolve({ + success: true, + status: 'started', + sessionId: session.id, + message: `✓ Debug session started for ${targetInfo}. Session ID: ${session.id}. The debugger is now attached and ready. Any breakpoints you set will be active.${warningNote}`, + terminalName: terminal.name + }); + } + }); + + // Send the command after setting up the listener + terminal.sendText(debugCommand); + + // Set a timeout for large applications + const timeoutHandle = setTimeout(() => { + if (!sessionStarted) { + sessionDisposable.dispose(); + + sendInfo('', { + operationName: 'languageModelTool.debugSessionTimeout.eventBased', + target: targetInfo + }); + + resolve({ + success: false, + status: 'timeout', + message: `❌ Debug session failed to start within ${CONSTANTS.SESSION_WAIT_TIMEOUT / 1000} seconds for ${targetInfo}.\n\n` + + `This usually indicates a problem:\n` + + `• Compilation errors preventing startup\n` + + `• ClassNotFoundException or NoClassDefFoundError\n` + + `• Application crashed during initialization\n` + + `• Incorrect main class or classpath configuration\n\n` + + `Action required:\n` + + `1. Check terminal '${terminal.name}' for error messages\n` + + `2. Verify the target class name is correct\n` + + `3. Ensure the project is compiled successfully\n` + + `4. Use get_debug_session_info() to confirm session status${warningNote}`, + terminalName: terminal.name + }); + } + }, CONSTANTS.SESSION_WAIT_TIMEOUT); + }); + } else { + // Default behavior: send command and use smart polling to detect session start + terminal.sendText(debugCommand); + + // Smart polling to detect session start + const maxWaitTime = CONSTANTS.SMART_POLLING_MAX_WAIT; + const pollInterval = CONSTANTS.SMART_POLLING_INTERVAL; + const startTime = Date.now(); + + while (Date.now() - startTime < maxWaitTime) { + // Check if debug session has started + const session = vscode.debug.activeDebugSession; + if (session && session.type === 'java') { + const elapsedTime = ((Date.now() - startTime) / 1000).toFixed(1); + + sendInfo('', { + operationName: 'languageModelTool.debugSessionDetected', + sessionId: session.id, + elapsedTime + }); + + return { + success: true, + status: 'started', + sessionId: session.id, + message: `✓ Debug session started for ${targetInfo} (detected in ${elapsedTime}s). Session ID: ${session.id}. The debugger is attached and ready.${warningNote}`, + terminalName: terminal.name + }; + } + + // Wait before next check + await new Promise(resolve => setTimeout(resolve, pollInterval)); + } + + // Timeout: session not detected within 15 seconds + sendInfo('', { + operationName: 'languageModelTool.debugSessionTimeout.smartPolling', + target: targetInfo, + maxWaitTime + }); + + return { + success: true, + status: 'timeout', + message: `⚠️ Debug command sent for ${targetInfo}, but session not detected within ${CONSTANTS.SMART_POLLING_MAX_WAIT / 1000} seconds.\n\n` + + `Possible reasons:\n` + + `• Application is still starting (large projects may take longer)\n` + + `• Compilation errors (check terminal '${terminal.name}' for errors)\n` + + `• Application may have started and already terminated\n\n` + + `Next steps:\n` + + `• Use get_debug_session_info() to check if session is now active\n` + + `• Check terminal '${terminal.name}' for error messages\n` + + `• If starting slowly, wait a bit longer and check again${warningNote}`, + terminalName: terminal.name + }; + } +} + +/** + * Detects the type of Java project based on build files present. + */ +function detectProjectType(workspacePath: string): 'maven' | 'gradle' | 'vscode' | 'unknown' { + if (fs.existsSync(path.join(workspacePath, 'pom.xml'))) { + return 'maven'; + } + + if (fs.existsSync(path.join(workspacePath, 'build.gradle')) || + fs.existsSync(path.join(workspacePath, 'build.gradle.kts'))) { + return 'gradle'; + } + + // Check if VS Code Java extension is likely managing compilation + const workspaceFolder = vscode.workspace.getWorkspaceFolder(vscode.Uri.file(workspacePath)); + if (workspaceFolder) { + const javaExt = vscode.extensions.getExtension('redhat.java'); + if (javaExt?.isActive) { + return 'vscode'; + } + } + + return 'unknown'; +} + +/** + * Builds the Java project based on its type. + */ +async function buildProject( + workspaceUri: vscode.Uri, + projectType: 'maven' | 'gradle' | 'vscode' | 'unknown', + _token: vscode.CancellationToken +): Promise { + switch (projectType) { + case 'maven': + return buildMavenProject(workspaceUri); + + case 'gradle': + return buildGradleProject(workspaceUri); + + case 'vscode': + return ensureVSCodeCompilation(workspaceUri); + + case 'unknown': + // Try to proceed anyway - user might have manually compiled + return { + success: true, + message: 'Unknown project type. Skipping build step. Ensure your Java files are compiled.' + }; + } +} + +/** + * Executes a shell task and waits for completion. + * This is a common function used by both Maven and Gradle builds. + */ +async function executeShellTask( + workspaceUri: vscode.Uri, + taskId: string, + taskName: string, + command: string, + successMessage: string, + timeoutMessage: string, + failureMessagePrefix: string +): Promise { + return new Promise((resolve) => { + const workspaceFolder = vscode.workspace.getWorkspaceFolder(workspaceUri); + if (!workspaceFolder) { + resolve({ + success: false, + message: `Cannot find workspace folder for ${workspaceUri.fsPath}` + }); + return; + } + + const task = new vscode.Task( + { type: 'shell', task: taskId }, + workspaceFolder, + taskName, + 'Java Debug', + new vscode.ShellExecution(command, { cwd: workspaceUri.fsPath }) + ); + + let resolved = false; + let taskDisposable: vscode.Disposable | undefined; + let errorDisposable: vscode.Disposable | undefined; + + const cleanup = () => { + clearTimeout(timeoutHandle); + taskDisposable?.dispose(); + errorDisposable?.dispose(); + }; + + // Set a timeout to avoid hanging indefinitely + const timeoutHandle = setTimeout(() => { + if (!resolved) { + resolved = true; + cleanup(); + resolve({ + success: true, + message: timeoutMessage + }); + } + }, CONSTANTS.BUILD_TIMEOUT); + + vscode.tasks.executeTask(task).then( + (execution) => { + taskDisposable = vscode.tasks.onDidEndTask((e) => { + if (e.execution === execution && !resolved) { + resolved = true; + cleanup(); + resolve({ + success: true, + message: successMessage + }); + } + }); + + errorDisposable = vscode.tasks.onDidEndTaskProcess((e) => { + if (e.execution === execution && e.exitCode !== 0 && !resolved) { + resolved = true; + cleanup(); + resolve({ + success: false, + message: `${failureMessagePrefix} with exit code ${e.exitCode}. Please check the terminal output.` + }); + } + }); + }, + (error: Error) => { + if (!resolved) { + resolved = true; + cleanup(); + resolve({ + success: false, + message: `Failed to execute task: ${error.message}` + }); + } + } + ); + }); +} + +/** + * Builds a Maven project using mvn compile. + */ +async function buildMavenProject( + workspaceUri: vscode.Uri +): Promise { + return executeShellTask( + workspaceUri, + 'maven-compile', + 'Maven Compile', + 'mvn compile', + 'Maven project compiled successfully', + 'Maven compile command sent. Build may still be in progress.', + 'Maven build failed' + ); +} + +/** + * Builds a Gradle project using gradle classes. + */ +async function buildGradleProject( + workspaceUri: vscode.Uri +): Promise { + const gradleWrapper = process.platform === 'win32' ? 'gradlew.bat' : './gradlew'; + const gradleCommand = fs.existsSync(path.join(workspaceUri.fsPath, gradleWrapper)) + ? gradleWrapper + : 'gradle'; + + return executeShellTask( + workspaceUri, + 'gradle-classes', + 'Gradle Classes', + `${gradleCommand} classes`, + 'Gradle project compiled successfully', + 'Gradle compile command sent. Build may still be in progress.', + 'Gradle build failed' + ); +} + +/** + * Ensures VS Code Java Language Server has compiled the files. + */ +async function ensureVSCodeCompilation(workspaceUri: vscode.Uri): Promise { + try { + // Check for compilation errors using VS Code diagnostics + const javaFiles = await vscode.workspace.findFiles( + new vscode.RelativePattern(workspaceUri, '**/*.java'), + '**/node_modules/**', + CONSTANTS.MAX_JAVA_FILES_TO_CHECK + ); + + let hasErrors = false; + for (const file of javaFiles) { + const diagnostics = vscode.languages.getDiagnostics(file); + const errors = diagnostics.filter(d => d.severity === vscode.DiagnosticSeverity.Error); + if (errors.length > 0) { + hasErrors = true; + break; + } + } + + if (hasErrors) { + return { + success: false, + message: 'Compilation errors detected in the project. Please fix the errors before debugging.' + }; + } + + // Check if Java extension is active and in standard mode + const javaExt = vscode.extensions.getExtension('redhat.java'); + if (!javaExt?.isActive) { + return { + success: true, + message: 'Java Language Server is not active. Proceeding with debug, but ensure your code is compiled.' + }; + } + + return { + success: true, + message: 'VS Code Java compilation verified' + }; + } catch (error) { + // If we can't verify, proceed anyway + return { + success: true, + message: 'Unable to verify compilation status. Proceeding with debug.' + }; + } +} + +/** + * Constructs the debugjava command based on input parameters. + */ +function constructDebugCommand( + input: DebugJavaApplicationInput, + projectType: 'maven' | 'gradle' | 'vscode' | 'unknown' +): string { + let command = 'debugjava'; + + // Handle JAR files + if (input.target.endsWith('.jar')) { + command += ` -jar ${input.target}`; + } + // Handle raw java command arguments (starts with - like -cp, -jar, etc) + else if (input.target.startsWith('-')) { + command += ` ${input.target}`; + } + // Handle class name (with or without package) + else { + let className = input.target; + + // If target doesn't contain a dot and we can find the Java file, + // try to detect the fully qualified class name + if (!input.target.includes('.')) { + const detectedClassName = findFullyQualifiedClassName(input.workspacePath, input.target, projectType); + if (detectedClassName) { + sendInfo('', { + operationName: 'languageModelTool.classNameDetection', + simpleClassName: input.target, + detectedClassName, + projectType + }); + className = detectedClassName; + } else { + // No package detected - class is in default package + sendInfo('', { + operationName: 'languageModelTool.classNameDetection.noPackage', + simpleClassName: input.target, + projectType + }); + } + } + + // Use provided classpath if available, otherwise infer it + const classpath = input.classpath || inferClasspath(input.workspacePath, projectType); + + command += ` -cp "${classpath}" ${className}`; + } + + // Add arguments if provided + if (input.args && input.args.length > 0) { + command += ' ' + input.args.join(' '); + } + + return command; +} + +/** + * Tries to find the fully qualified class name by searching for the Java file. + * This helps when user provides just "App" instead of "com.example.App". + */ +function findFullyQualifiedClassName( + workspacePath: string, + simpleClassName: string, + projectType: 'maven' | 'gradle' | 'vscode' | 'unknown' +): string | null { + // Determine source directories based on project type + const sourceDirs: string[] = []; + + switch (projectType) { + case 'maven': + sourceDirs.push(path.join(workspacePath, 'src', 'main', 'java')); + break; + case 'gradle': + sourceDirs.push(path.join(workspacePath, 'src', 'main', 'java')); + break; + case 'vscode': + sourceDirs.push(path.join(workspacePath, 'src')); + break; + case 'unknown': + // Try all common locations + sourceDirs.push( + path.join(workspacePath, 'src', 'main', 'java'), + path.join(workspacePath, 'src'), + workspacePath + ); + break; + } + + // Search for the Java file + for (const srcDir of sourceDirs) { + if (!fs.existsSync(srcDir)) { + continue; + } + + try { + const javaFile = findJavaFile(srcDir, simpleClassName, 0); + if (javaFile) { + // Extract package name from the file + const packageName = extractPackageName(javaFile); + if (packageName) { + return `${packageName}.${simpleClassName}`; + } else { + // No package, use simple name + return simpleClassName; + } + } + } catch (error) { + // Continue searching in other directories + } + } + + return null; +} + +/** + * Recursively searches for a Java file with the given class name. + * @param depth Current recursion depth (for limiting search depth) + */ +function findJavaFile(dir: string, className: string, depth: number = 0): string | null { + // Limit recursion depth to prevent performance issues + if (depth > CONSTANTS.MAX_FILE_SEARCH_DEPTH) { + return null; + } + + try { + const files = fs.readdirSync(dir); + + for (const file of files) { + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + + if (stat.isDirectory()) { + // Skip common non-source directories + if (file === 'node_modules' || file === '.git' || file === 'target' || file === 'build') { + continue; + } + const found = findJavaFile(filePath, className, depth + 1); + if (found) { + return found; + } + } else if (file === `${className}.java`) { + return filePath; + } + } + } catch (error) { + // Ignore permission errors or other file system issues + } + + return null; +} + +/** + * Extracts the package name from a Java source file. + */ +function extractPackageName(javaFilePath: string): string | null { + try { + const content = fs.readFileSync(javaFilePath, 'utf-8'); + const packageMatch = content.match(/^\s*package\s+([\w.]+)\s*;/m); + return packageMatch ? packageMatch[1] : null; + } catch (error) { + return null; + } +} + +/** + * Checks if a directory contains any .class files. + * @param depth Current recursion depth (for limiting search depth) + */ +function hasClassFiles(dir: string, depth: number = 0): boolean { + // Limit recursion depth to prevent performance issues + if (depth > CONSTANTS.MAX_FILE_SEARCH_DEPTH) { + return false; + } + + try { + const files = fs.readdirSync(dir); + for (const file of files) { + const filePath = path.join(dir, file); + const stat = fs.statSync(filePath); + + if (stat.isFile() && file.endsWith('.class')) { + return true; + } else if (stat.isDirectory()) { + if (hasClassFiles(filePath, depth + 1)) { + return true; + } + } + } + } catch (error) { + // Ignore errors + } + return false; +} + +/** + * Infers the classpath based on project type and common conventions. + */ +function inferClasspath(workspacePath: string, projectType: 'maven' | 'gradle' | 'vscode' | 'unknown'): string { + const classpaths: string[] = []; + + switch (projectType) { + case 'maven': + // Maven standard output directory + const mavenTarget = path.join(workspacePath, 'target', 'classes'); + if (fs.existsSync(mavenTarget)) { + classpaths.push(mavenTarget); + } + break; + + case 'gradle': + // Gradle standard output directories + const gradleMain = path.join(workspacePath, 'build', 'classes', 'java', 'main'); + if (fs.existsSync(gradleMain)) { + classpaths.push(gradleMain); + } + break; + + case 'vscode': + // VS Code Java extension default output + const vscodeOut = path.join(workspacePath, 'bin'); + if (fs.existsSync(vscodeOut)) { + classpaths.push(vscodeOut); + } + break; + } + + // Fallback to common locations + if (classpaths.length === 0) { + const commonPaths = [ + path.join(workspacePath, 'bin'), // VS Code default + path.join(workspacePath, 'out'), // IntelliJ default + path.join(workspacePath, 'target', 'classes'), // Maven + path.join(workspacePath, 'build', 'classes', 'java', 'main'), // Gradle + path.join(workspacePath, 'build', 'classes'), + ]; + + // Check each common path + for (const p of commonPaths) { + if (fs.existsSync(p)) { + // Check if there are actually .class files in this directory + if (hasClassFiles(p)) { + classpaths.push(p); + break; + } + } + } + } + + // If still no classpath found, use current directory + // This is common for simple projects where .class files are alongside .java files + if (classpaths.length === 0) { + classpaths.push('.'); + } + + return classpaths.join(path.delimiter); +} + +// ============================================================================ +// Debug Session Control Tools +// ============================================================================ + +interface SetBreakpointInput { + filePath: string; + lineNumber: number; + condition?: string; + hitCondition?: string; + logMessage?: string; +} + +interface StepOperationInput { + operation: 'stepIn' | 'stepOut' | 'stepOver' | 'continue' | 'pause'; + threadId?: number; +} + +interface GetVariablesInput { + threadId?: number; + frameId?: number; + scopeType?: 'local' | 'static' | 'all'; + filter?: string; +} + +interface GetStackTraceInput { + threadId?: number; + maxDepth?: number; +} + +interface EvaluateExpressionInput { + expression: string; + threadId?: number; + frameId?: number; + context?: 'watch' | 'repl' | 'hover'; +} + +interface RemoveBreakpointsInput { + filePath?: string; + lineNumber?: number; +} + +interface StopDebugSessionInput { + reason?: string; +} + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +type GetDebugSessionInfoInput = Record; + +/** + * Result of finding a suspended thread + */ +interface SuspendedThreadInfo { + threadId: number; + frameId: number; +} + +/** + * Finds the first suspended thread in the debug session. + * Returns the thread ID and top frame ID, or null if no suspended thread is found. + */ +async function findFirstSuspendedThread(session: vscode.DebugSession): Promise { + try { + const threadsResponse = await session.customRequest('threads'); + for (const thread of threadsResponse.threads || []) { + try { + const stackResponse = await session.customRequest('stackTrace', { + threadId: thread.id, + startFrame: 0, + levels: 1 + }); + if (stackResponse?.stackFrames?.length > 0) { + return { + threadId: thread.id, + frameId: stackResponse.stackFrames[0].id + }; + } + } catch { + // Thread is running, continue to next + continue; + } + } + } catch { + // Failed to get threads + } + return null; +} + +/** + * Registers all debug session control tools + */ +export function registerDebugSessionTools(_context: vscode.ExtensionContext): vscode.Disposable[] { + const lmApi = (vscode as any).lm; + if (!lmApi || typeof lmApi.registerTool !== 'function') { + return []; + } + + const disposables: vscode.Disposable[] = []; + + // Tool 1: Set Breakpoint + const setBreakpointTool: LanguageModelTool = { + async invoke(options: { input: SetBreakpointInput }, _token: vscode.CancellationToken): Promise { + try { + const { filePath, lineNumber, condition, hitCondition, logMessage } = options.input; + + // Set breakpoint through VS Code API (no active session required) + const uri = vscode.Uri.file(filePath); + const breakpoint = new vscode.SourceBreakpoint( + new vscode.Location(uri, new vscode.Position(lineNumber - 1, 0)), + true, // enabled + condition, + hitCondition, + logMessage + ); + + vscode.debug.addBreakpoints([breakpoint]); + + const bpType = logMessage ? 'Logpoint' : 'Breakpoint'; + const session = vscode.debug.activeDebugSession; + const sessionInfo = (session && session.type === 'java') + ? ' (active in current session)' + : ' (will activate when debugging starts)'; + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + `✓ ${bpType} set at ${path.basename(filePath)}:${lineNumber}${condition ? ` (condition: ${condition})` : ''}${sessionInfo}` + ) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Failed to set breakpoint: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('set_java_breakpoint', setBreakpointTool)); + + // Tool 2: Step Operations + const stepOperationTool: LanguageModelTool = { + async invoke(options: { input: StepOperationInput }, _token: vscode.CancellationToken): Promise { + try { + const session = vscode.debug.activeDebugSession; + if (!session || session.type !== 'java') { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No active Java debug session.') + ]); + } + + const { operation, threadId } = options.input; + + // Map operation to VS Code debug commands + const commandMap: { [key: string]: string } = { + stepIn: 'workbench.action.debug.stepInto', + stepOut: 'workbench.action.debug.stepOut', + stepOver: 'workbench.action.debug.stepOver', + continue: 'workbench.action.debug.continue', + pause: 'workbench.action.debug.pause' + }; + + const command = commandMap[operation]; + if (threadId !== undefined) { + // For thread-specific operations, use custom request + await session.customRequest(operation, { threadId }); + } else { + // Use VS Code command for current thread + await vscode.commands.executeCommand(command); + } + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✓ Executed ${operation}`) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Step operation failed: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('debug_step_operation', stepOperationTool)); + + // Tool 3: Get Variables + const getVariablesTool: LanguageModelTool = { + async invoke(options: { input: GetVariablesInput }, _token: vscode.CancellationToken): Promise { + try { + const session = vscode.debug.activeDebugSession; + if (!session || session.type !== 'java') { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No active Java debug session.') + ]); + } + + const { threadId, frameId = 0, scopeType = 'all', filter } = options.input; + + // Find the target thread - either specified or find first suspended thread + let targetThreadId = threadId; + if (!targetThreadId) { + const suspendedThread = await findFirstSuspendedThread(session); + if (suspendedThread) { + targetThreadId = suspendedThread.threadId; + } + } + + if (!targetThreadId) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No suspended thread found. Use get_debug_threads() to see thread states.') + ]); + } + + // Get stack trace to access frame + const stackResponse = await session.customRequest('stackTrace', { + threadId: targetThreadId, + startFrame: frameId, + levels: 1 + }); + + if (!stackResponse.stackFrames || stackResponse.stackFrames.length === 0) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No stack frame available.') + ]); + } + + const frame = stackResponse.stackFrames[0]; + + // Get scopes for the frame + const scopesResponse = await session.customRequest('scopes', { frameId: frame.id }); + + const variables: string[] = []; + for (const scope of scopesResponse.scopes) { + // Filter by scope type + if (scopeType === 'local' && scope.name !== 'Local' && scope.name !== 'Locals') { + continue; + } + if (scopeType === 'static' && scope.name !== 'Static') { + continue; + } + + // Get variables for this scope + const varsResponse = await session.customRequest('variables', { + variablesReference: scope.variablesReference + }); + + for (const v of varsResponse.variables) { + if (!filter || v.name.includes(filter) || matchWildcard(v.name, filter)) { + variables.push(`${v.name}: ${v.type || ''} = ${v.value}`); + } + } + } + + if (variables.length === 0) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('No variables found.') + ]); + } + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + `Variables (Thread #${targetThreadId}, Frame ${frameId}):\n${variables.join('\n')}` + ) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Failed to get variables: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('get_debug_variables', getVariablesTool)); + + // Tool 4: Get Stack Trace + const getStackTraceTool: LanguageModelTool = { + async invoke(options: { input: GetStackTraceInput }, _token: vscode.CancellationToken): Promise { + try { + const session = vscode.debug.activeDebugSession; + if (!session || session.type !== 'java') { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No active Java debug session.') + ]); + } + + const { threadId, maxDepth = CONSTANTS.DEFAULT_STACK_DEPTH } = options.input; + + const stackResponse = await session.customRequest('stackTrace', { + threadId: threadId || (session as any).threadId || 1, + startFrame: 0, + levels: maxDepth + }); + + if (!stackResponse.stackFrames || stackResponse.stackFrames.length === 0) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('No stack frames available.') + ]); + } + + const frames = stackResponse.stackFrames.map((frame: any, index: number) => { + const location = frame.source ? + `${frame.source.name}:${frame.line}` : + 'unknown location'; + return `#${index} ${frame.name} at ${location}`; + }); + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + `Call Stack:\n${frames.join('\n')}` + ) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Failed to get stack trace: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('get_debug_stack_trace', getStackTraceTool)); + + // Tool 5: Evaluate Expression + const evaluateExpressionTool: LanguageModelTool = { + async invoke(options: { input: EvaluateExpressionInput }, _token: vscode.CancellationToken): Promise { + try { + const session = vscode.debug.activeDebugSession; + if (!session || session.type !== 'java') { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No active Java debug session.') + ]); + } + + const { expression, threadId, frameId = 0, context = 'repl' } = options.input; + + // Find the target thread and frame for evaluation + let targetFrameId: number = frameId; + let targetThreadId = threadId; + + // If no threadId specified, find first suspended thread + if (!targetThreadId) { + const suspendedThread = await findFirstSuspendedThread(session); + if (suspendedThread) { + targetThreadId = suspendedThread.threadId; + // Use the actual frame ID from the stack if frameId is 0 + if (frameId === 0) { + targetFrameId = suspendedThread.frameId; + } + } + } else { + // Get the frame ID for the specified thread + try { + const stackResponse = await session.customRequest('stackTrace', { + threadId: targetThreadId, + startFrame: frameId, + levels: 1 + }); + if (stackResponse?.stackFrames?.length > 0) { + targetFrameId = stackResponse.stackFrames[0].id; + } + } catch { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Thread #${targetThreadId} is not suspended. Cannot evaluate expression.`) + ]); + } + } + + if (!targetThreadId) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No suspended thread found. Use get_debug_threads() to see thread states.') + ]); + } + + const evalResponse = await session.customRequest('evaluate', { + expression, + frameId: targetFrameId, + context + }); + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + `Expression: ${expression}\n` + + `Thread: #${targetThreadId}\n` + + `Result: ${evalResponse.result}${evalResponse.type ? ` (${evalResponse.type})` : ''}` + ) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Evaluation failed: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('evaluate_debug_expression', evaluateExpressionTool)); + + // Tool 6: Get Threads + const getThreadsTool: LanguageModelTool<{}> = { + async invoke(_options: { input: {} }, _token: vscode.CancellationToken): Promise { + try { + const session = vscode.debug.activeDebugSession; + if (!session || session.type !== 'java') { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('✗ No active Java debug session.') + ]); + } + + const threadsResponse = await session.customRequest('threads'); + + if (!threadsResponse.threads || threadsResponse.threads.length === 0) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('No threads found.') + ]); + } + + // Check each thread's state by trying to get its stack trace + const threadInfos: string[] = []; + for (const thread of threadsResponse.threads) { + let state = '🟢 RUNNING'; + let location = ''; + + try { + const stackResponse = await session.customRequest('stackTrace', { + threadId: thread.id, + startFrame: 0, + levels: 1 + }); + + if (stackResponse?.stackFrames?.length > 0) { + state = '🔴 SUSPENDED'; + const topFrame = stackResponse.stackFrames[0]; + if (topFrame.source) { + location = ` at ${topFrame.source.name}:${topFrame.line}`; + } + } + } catch { + // Thread is running, can't get stack + state = '🟢 RUNNING'; + } + + threadInfos.push(`Thread #${thread.id}: ${thread.name} [${state}]${location}`); + } + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + `═══════════════════════════════════════════\n` + + `THREADS (${threadsResponse.threads.length} total)\n` + + `═══════════════════════════════════════════\n\n` + + `${threadInfos.join('\n')}\n\n` + + `───────────────────────────────────────────\n` + + `💡 Use threadId parameter to inspect a specific thread:\n` + + `• get_debug_variables(threadId=X)\n` + + `• get_debug_stack_trace(threadId=X)\n` + + `• evaluate_debug_expression(threadId=X, expression="...")\n` + + `───────────────────────────────────────────` + ) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Failed to get threads: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('get_debug_threads', getThreadsTool)); + + // Tool 7: Remove Breakpoints + const removeBreakpointsTool: LanguageModelTool = { + async invoke(options: { input: RemoveBreakpointsInput }, _token: vscode.CancellationToken): Promise { + try { + const { filePath, lineNumber } = options.input; + + const breakpoints = vscode.debug.breakpoints; + + if (!filePath) { + // Remove all breakpoints (no active session required) + const count = breakpoints.length; + vscode.debug.removeBreakpoints(breakpoints); + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✓ Removed all ${count} breakpoint(s).`) + ]); + } + + const uri = vscode.Uri.file(filePath); + const toRemove = breakpoints.filter(bp => { + if (bp instanceof vscode.SourceBreakpoint) { + const match = bp.location.uri.fsPath === uri.fsPath; + if (lineNumber !== undefined) { + return match && bp.location.range.start.line === lineNumber - 1; + } + return match; + } + return false; + }); + + if (toRemove.length > 0) { + vscode.debug.removeBreakpoints(toRemove); + } + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + toRemove.length > 0 + ? `✓ Removed ${toRemove.length} breakpoint(s) from ${path.basename(filePath)}${lineNumber ? `:${lineNumber}` : ''}` + : 'No matching breakpoints found.' + ) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Failed to remove breakpoints: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('remove_java_breakpoints', removeBreakpointsTool)); + + // Tool 9: Stop Debug Session + const stopDebugSessionTool: LanguageModelTool = { + async invoke(options: { input: StopDebugSessionInput }, _token: vscode.CancellationToken): Promise { + try { + const session = vscode.debug.activeDebugSession; + + if (!session) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart('No active debug session to stop.') + ]); + } + + const sessionInfo = `${session.name} (${session.type})`; + const reason = options.input.reason || 'Investigation complete'; + + // Stop the debug session + await vscode.debug.stopDebugging(session); + + sendInfo('', { + operationName: 'languageModelTool.stopDebugSession', + sessionId: session.id, + sessionName: session.name, + reason + }); + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + `✓ Stopped debug session: ${sessionInfo}. Reason: ${reason}` + ) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Failed to stop debug session: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('stop_debug_session', stopDebugSessionTool)); + + // Tool 10: Get Debug Session Info + const getDebugSessionInfoTool: LanguageModelTool = { + async invoke(_options: { input: GetDebugSessionInfoInput }, _token: vscode.CancellationToken): Promise { + try { + const session = vscode.debug.activeDebugSession; + + if (!session) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart( + '❌ No active debug session found.\n\n' + + 'You can:\n' + + '• Start a new debug session using debug_java_application\n' + + '• Set breakpoints before or after starting a session\n' + + '• Wait for an existing session to hit a breakpoint' + ) + ]); + } + + // Gather session information + const sessionInfo = { + id: session.id, + name: session.name, + type: session.type, + workspaceFolder: session.workspaceFolder?.name || 'N/A', + configuration: { + name: session.configuration.name, + type: session.configuration.type, + request: session.configuration.request, + mainClass: session.configuration.mainClass, + projectName: session.configuration.projectName + } + }; + + // Check if session is paused and get current location + // Strategy: Get all threads first, then try to get stack trace for each + // A thread is paused if we can successfully get its stack trace + let isPaused = false; + let stoppedReason = 'unknown'; + let currentLocation = ''; + let currentFile = ''; + let currentLine = 0; + let stoppedThreadId: number | undefined; + let stoppedThreadName = ''; + + try { + // Step 1: Get all threads + const threadsResponse = await session.customRequest('threads'); + const threads = threadsResponse?.threads || []; + + // Step 2: Try to get stack trace for each thread to find paused one + // In Java debug, only paused threads can provide stack traces + for (const thread of threads) { + try { + const stackResponse = await session.customRequest('stackTrace', { + threadId: thread.id, + startFrame: 0, + levels: 1 + }); + + // If we got stack frames, this thread is paused + if (stackResponse?.stackFrames?.length > 0) { + isPaused = true; + stoppedThreadId = thread.id; + stoppedThreadName = thread.name || `Thread-${thread.id}`; + + const topFrame = stackResponse.stackFrames[0]; + + // Extract current location details + if (topFrame.source) { + currentFile = topFrame.source.path || topFrame.source.name || 'unknown'; + currentLine = topFrame.line || 0; + const methodName = topFrame.name || 'unknown'; + const fileName = topFrame.source.name || path.basename(currentFile); + currentLocation = `${fileName}:${currentLine} in ${methodName}`; + } + + // Try to determine stop reason from thread name or default to breakpoint + stoppedReason = 'breakpoint'; + + // Found a paused thread, no need to check others for basic info + break; + } + } catch { + // This thread is running, not paused - continue to next + continue; + } + } + + // If no thread had stack frames, all are running + if (!isPaused && threads.length > 0) { + // Session exists but all threads are running + isPaused = false; + } + } catch (error) { + // If we can't even get threads, something is wrong + // But session exists, so mark as running + isPaused = false; + sendInfo('', { + operationName: 'languageModelTool.getDebugSessionInfo.threadError', + error: String(error) + }); + } + + // Build status line with location info + let statusLine: string; + let locationInfo = ''; + + if (isPaused) { + statusLine = `🔴 Status: PAUSED (${stoppedReason})`; + locationInfo = [ + '', + '📍 Current Location:', + `• File: ${currentFile}`, + `• Line: ${currentLine}`, + `• Method: ${currentLocation}`, + `• Thread: ${stoppedThreadName} (ID: ${stoppedThreadId})` + ].join('\n'); + } else { + statusLine = '🟢 Status: RUNNING'; + } + + // Build clear action guidance based on state + let actionGuidance: string; + if (isPaused) { + actionGuidance = [ + '✅ READY FOR INSPECTION - Session is paused at breakpoint', + '', + 'You can now:', + '• evaluate_debug_expression - Test your hypothesis (e.g., "user == null")', + '• get_debug_variables - Inspect specific variables', + '• get_debug_stack_trace - See full call stack', + '• debug_step_operation - Step through code (stepOver, stepIn, stepOut)', + '• debug_step_operation(continue) - Resume to next breakpoint', + '• stop_debug_session - End debugging when done' + ].join('\n'); + } else { + actionGuidance = [ + '⏳ WAITING - Session is running, not yet at breakpoint', + '', + 'The program is executing. To pause:', + '• Wait for it to hit your breakpoint', + '• Or use debug_step_operation(pause) to pause immediately', + '', + 'Inspection tools (get_debug_variables, evaluate_debug_expression) ', + 'will NOT work until the session is PAUSED.' + ].join('\n'); + } + + // Determine if this is a debugjava (No-Config) session that can be safely stopped + const isNoConfigSession = sessionInfo.name.includes('No-Config') || + sessionInfo.name.includes('debugjava'); + const launchMethod = isNoConfigSession + ? 'debugjava (No-Config) - ✅ Can be safely stopped' + : sessionInfo.configuration.request === 'attach' + ? 'External attach - ⚠️ Stopping will disconnect from process' + : 'VS Code launch - ✅ Can be safely stopped'; + + const message = [ + '═══════════════════════════════════════════', + isPaused ? '🔴 DEBUG SESSION PAUSED' : '🟢 DEBUG SESSION RUNNING', + '═══════════════════════════════════════════', + '', + statusLine, + locationInfo, + '', + '───────────────────────────────────────────', + 'Session Details:', + `• Session ID: ${sessionInfo.id}`, + `• Name: ${sessionInfo.name}`, + `• Type: ${sessionInfo.type}`, + `• Request: ${sessionInfo.configuration.request || 'N/A'}`, + `• Launch Method: ${launchMethod}`, + `• Main Class: ${sessionInfo.configuration.mainClass || 'N/A'}`, + '', + '───────────────────────────────────────────', + actionGuidance, + '═══════════════════════════════════════════' + ].join('\n'); + + sendInfo('', { + operationName: 'languageModelTool.getDebugSessionInfo', + sessionId: session.id, + sessionType: session.type, + isPaused: String(isPaused), + stoppedThreadId: String(stoppedThreadId || ''), + currentFile, + currentLine: String(currentLine) + }); + + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(message) + ]); + } catch (error) { + return new (vscode as any).LanguageModelToolResult([ + new (vscode as any).LanguageModelTextPart(`✗ Failed to get debug session info: ${error}`) + ]); + } + } + }; + disposables.push(lmApi.registerTool('get_debug_session_info', getDebugSessionInfoTool)); + + return disposables; +} + +/** + * Simple wildcard matching helper + */ +function matchWildcard(text: string, pattern: string): boolean { + const regex = new RegExp('^' + pattern.split('*').map(escapeRegex).join('.*') + '$'); + return regex.test(text); +} + +function escapeRegex(str: string): string { + return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); +} diff --git a/src/languageServerPlugin.ts b/src/languageServerPlugin.ts index ea1cbd6f..bbafd573 100644 --- a/src/languageServerPlugin.ts +++ b/src/languageServerPlugin.ts @@ -23,9 +23,14 @@ export interface IMainMethod extends IMainClassOption { range: vscode.Range; } +export const CONFIGERROR_INVALID_CLASS_NAME = 1; +export const CONFIGERROR_MAIN_CLASS_NOT_EXIST = 2; +export const CONFIGERROR_MAIN_CLASS_NOT_UNIQUE = 3; +export const CONFIGERROR_INVALID_JAVA_PROJECT = 4; export interface IValidationResult { readonly isValid: boolean; readonly message?: string; + readonly kind?: number; } export interface ILaunchValidationResponse { @@ -57,6 +62,10 @@ export function resolveMainClass(workspaceUri?: vscode.Uri): Promise>commands.executeJavaLanguageServerCommand(commands.JAVA_RESOLVE_MAINCLASS); } +export function resolveMainClassFromProject(projectName: string): Promise { + return >commands.executeJavaLanguageServerCommand(commands.JAVA_RESOLVE_MAINCLASS, projectName); +} + export function validateLaunchConfig(mainClass: string, projectName: string, containsExternalClasspaths: boolean, workspaceUri?: vscode.Uri): Promise { return >commands.executeJavaLanguageServerCommand(commands.JAVA_VALIDATE_LAUNCHCONFIG, diff --git a/src/mainClassPicker.ts b/src/mainClassPicker.ts index 38bd13be..d34121d5 100644 --- a/src/mainClassPicker.ts +++ b/src/mainClassPicker.ts @@ -96,7 +96,7 @@ class MainClassPicker { }; const isFromActiveEditor = (option: IMainClassOption): boolean => { const activeEditor: TextEditor | undefined = window.activeTextEditor; - const currentActiveFile: string = _.get(activeEditor, "document.uri.fsPath"); + const currentActiveFile: string | undefined = _.get(activeEditor, "document.uri.fsPath"); if (option.filePath && currentActiveFile) { return path.relative(option.filePath, currentActiveFile) === ""; } diff --git a/src/noConfigDebugInit.ts b/src/noConfigDebugInit.ts new file mode 100644 index 00000000..b0da4f01 --- /dev/null +++ b/src/noConfigDebugInit.ts @@ -0,0 +1,247 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT license. + +import * as fs from 'fs'; +import * as path from 'path'; +import * as crypto from 'crypto'; +import * as vscode from 'vscode'; + +import { sendInfo, sendError } from "vscode-extension-telemetry-wrapper"; +import { getJavaHome } from "./utility"; + +/** + * Registers the configuration-less debugging setup for the extension. + * + * This function sets up environment variables and a file system watcher to + * facilitate debugging without requiring a pre-configured launch.json file. + * + * @param envVarCollection - The collection of environment variables to be modified. + * @param extPath - The path to the extension directory. + * + * Environment Variables: + * - `VSCODE_JDWP_ADAPTER_ENDPOINTS`: Path to the file containing the debugger adapter endpoint. + * - `JAVA_TOOL_OPTIONS`: JDWP configuration for automatic debugging. + * - `PATH`: Appends the path to the noConfigScripts directory. + */ +export async function registerNoConfigDebug( + envVarCollection: vscode.EnvironmentVariableCollection, + extPath: string, +): Promise { + const collection = envVarCollection; + + // create a temp directory for the noConfigDebugAdapterEndpoints + // file path format: extPath/.noConfigDebugAdapterEndpoints/endpoint-stableWorkspaceHash.txt + let workspaceString = vscode.workspace.workspaceFile?.fsPath; + if (!workspaceString) { + workspaceString = vscode.workspace.workspaceFolders?.map((e) => e.uri.fsPath).join(';'); + } + if (!workspaceString) { + const error: Error = { + name: "NoConfigDebugError", + message: '[Java Debug] No workspace folder found', + }; + sendError(error); + return Promise.resolve(new vscode.Disposable(() => { })); + } + + // create a stable hash for the workspace folder, reduce terminal variable churn + const hash = crypto.createHash('sha256'); + hash.update(workspaceString.toString()); + const stableWorkspaceHash = hash.digest('hex').slice(0, 16); + + const tempDirPath = path.join(extPath, '.noConfigDebugAdapterEndpoints'); + const tempFilePath = path.join(tempDirPath, `endpoint-${stableWorkspaceHash}.txt`); + + // create the temp directory if it doesn't exist + if (!fs.existsSync(tempDirPath)) { + fs.mkdirSync(tempDirPath, { recursive: true }); + } else { + // remove endpoint file in the temp directory if it exists (async to avoid blocking) + if (fs.existsSync(tempFilePath)) { + fs.promises.unlink(tempFilePath).catch((err) => { + const error: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] Failed to cleanup old endpoint file: ${err}`, + }; + sendError(error); + }); + } + } + + // clear the env var collection to remove any existing env vars + collection.clear(); + + // Add env var for VSCODE_JDWP_ADAPTER_ENDPOINTS + // Note: We do NOT set JAVA_TOOL_OPTIONS globally to avoid affecting all Java processes + // (javac, maven, gradle, language server, etc.). Instead, JAVA_TOOL_OPTIONS is set + // only in the debugjava wrapper scripts (debugjava.ps1, debugjava.bat, debugjava) + collection.replace('VSCODE_JDWP_ADAPTER_ENDPOINTS', tempFilePath); + + // Try to get Java executable from Java Language Server + // This ensures we use the same Java version as the project is compiled with + try { + const javaHome = await getJavaHome(); + if (javaHome) { + const javaExec = path.join(javaHome, 'bin', 'java'); + collection.replace('VSCODE_JAVA_EXEC', javaExec); + } + } catch (error) { + // If we can't get Java from Language Server, that's okay + // The wrapper script will fall back to JAVA_HOME or PATH + } + + const noConfigScriptsDir = path.join(extPath, 'bundled', 'scripts', 'noConfigScripts'); + const pathSeparator = process.platform === 'win32' ? ';' : ':'; + + // Check if the current PATH already ends with a path separator to avoid double separators + const currentPath = process.env.PATH || ''; + const needsSeparator = currentPath.length > 0 && !currentPath.endsWith(pathSeparator); + const pathValueToAppend = needsSeparator ? `${pathSeparator}${noConfigScriptsDir}` : noConfigScriptsDir; + + collection.append('PATH', pathValueToAppend); + + // create file system watcher for the debuggerAdapterEndpointFolder for when the communication port is written + const fileSystemWatcher = vscode.workspace.createFileSystemWatcher( + new vscode.RelativePattern(tempDirPath, '**/*.txt') + ); + + // Track active debug sessions to prevent duplicates + const activeDebugSessions = new Set(); + + // Handle both file creation and modification to support multiple runs + const handleEndpointFile = async (uri: vscode.Uri) => { + const filePath = uri.fsPath; + + // Add a small delay to ensure file is fully written + // File system events can fire before write is complete + await new Promise(resolve => setTimeout(resolve, 100)); + + fs.readFile(filePath, (err, data) => { + if (err) { + const error: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] No-config debug failed: file_read_error - ${err}`, + }; + sendError(error); + return; + } + try { + // parse the client port + const dataParse = data.toString(); + const jsonData = JSON.parse(dataParse); + + // Validate JSON structure + if (!jsonData || typeof jsonData !== 'object' || !jsonData.client) { + const error: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] No-config debug failed: invalid_format - ${dataParse}`, + }; + sendError(error); + return; + } + + const clientPort = jsonData.client.port; + + // Validate port number + if (!clientPort || typeof clientPort !== 'number' || clientPort < 1 || clientPort > 65535) { + const error: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] No-config debug failed: invalid_port - ${clientPort}`, + }; + sendError(error); + return; + } + + // Check if we already have an active session for this port + if (activeDebugSessions.has(clientPort)) { + // Skip duplicate session silently - this is expected behavior + return; + } + + // Mark this port as active + activeDebugSessions.add(clientPort); + + const options: vscode.DebugSessionOptions = { + noDebug: false, + }; + + // start debug session with the client port + vscode.debug.startDebugging( + undefined, + { + type: 'java', + request: 'attach', + name: 'Attach to Java (No-Config)', + hostName: 'localhost', + port: clientPort, + }, + options, + ).then( + (started) => { + if (started) { + // Send telemetry only on successful session start with port info + sendInfo('', { message: '[Java Debug] No-config debug session started', port: clientPort }); + // Clean up the endpoint file after successful debug session start (async) + if (fs.existsSync(filePath)) { + fs.promises.unlink(filePath).catch((cleanupErr) => { + // Cleanup failure is non-critical, just log for debugging + const error: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] No-config debug failed: cleanup_error - ${cleanupErr}`, + }; + sendError(error); + }); + } + } else { + const error: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] No-config debug failed: attach_failed - port ${clientPort}`, + }; + sendError(error); + // Remove from active sessions on failure + activeDebugSessions.delete(clientPort); + } + }, + (error) => { + const attachError: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] No-config debug failed: attach_error - port ${clientPort} - ${error}`, + }; + sendError(attachError); + // Remove from active sessions on error + activeDebugSessions.delete(clientPort); + }, + ); + } catch (parseErr) { + const error: Error = { + name: "NoConfigDebugError", + message: `[Java Debug] No-config debug failed: parse_error - ${parseErr}`, + }; + sendError(error); + } + }); + }; + + // Listen for both file creation and modification events + const fileCreationEvent = fileSystemWatcher.onDidCreate(handleEndpointFile); + const fileChangeEvent = fileSystemWatcher.onDidChange(handleEndpointFile); + + // Clean up active sessions when debug session ends + const debugSessionEndListener = vscode.debug.onDidTerminateDebugSession((session) => { + if (session.name === 'Attach to Java (No-Config)' && session.configuration.port) { + const port = session.configuration.port; + activeDebugSessions.delete(port); + // Session end is normal operation, no telemetry needed + } + }); + + return Promise.resolve( + new vscode.Disposable(() => { + fileSystemWatcher.dispose(); + fileCreationEvent.dispose(); + fileChangeEvent.dispose(); + debugSessionEndListener.dispose(); + activeDebugSessions.clear(); + }), + ); +} diff --git a/src/processTree.ts b/src/processTree.ts index a8f50f99..7a0840e0 100644 --- a/src/processTree.ts +++ b/src/processTree.ts @@ -5,9 +5,9 @@ * Copied from https://github.com/microsoft/vscode-node-debug/blob/master/src/node/extension/processTree.ts *--------------------------------------------------------------------------------------------*/ /* tslint:disable */ - 'use strict'; +'use strict'; -import { spawn, ChildProcess } from 'child_process'; +import { spawn, ChildProcessWithoutNullStreams } from 'child_process'; import { join } from 'path'; export class ProcessTreeNode { @@ -68,7 +68,7 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a return new Promise((resolve, reject) => { - let proc: ChildProcess; + let proc: ChildProcessWithoutNullStreams; if (process.platform === 'win32') { @@ -77,8 +77,8 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a const wmic = join(process.env['WINDIR'] || 'C:\\Windows', 'System32', 'wbem', 'WMIC.exe'); proc = spawn(wmic, [ 'process', 'get', 'CommandLine,CreationDate,ParentProcessId,ProcessId' ]); - proc.stdout?.setEncoding('utf8'); - proc.stdout?.on('data', lines(line => { + proc.stdout.setEncoding('utf8'); + proc.stdout.on('data', lines(line => { let matches = CMD_PAT.exec(line.trim()); if (matches && matches.length === 5) { const pid = Number(matches[4]); @@ -110,8 +110,8 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a } else if (process.platform === 'darwin') { // OS X proc = spawn('/bin/ps', [ '-x', '-o', `pid,ppid,comm=${'a'.repeat(256)},command` ]); - proc.stdout?.setEncoding('utf8'); - proc.stdout?.on('data', lines(line => { + proc.stdout.setEncoding('utf8'); + proc.stdout.on('data', lines(line => { const pid = Number(line.substr(0, 5)); const ppid = Number(line.substr(6, 5)); @@ -125,28 +125,31 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a } else { // linux - proc = spawn('/bin/ps', [ '-ax', '-o', 'pid,ppid,comm:20,command' ]); - proc.stdout?.setEncoding('utf8'); - proc.stdout?.on('data', lines(line => { - - const pid = Number(line.substr(0, 5)); - const ppid = Number(line.substr(6, 5)); - let command = line.substr(12, 20).trim(); - let args = line.substr(33); - - let pos = args.indexOf(command); + proc = spawn('/bin/ps', [ '-ax', '-o', 'pid:6,ppid:6,comm:20,command' ]); // we specify the column width explicitly + proc.stdout.setEncoding('utf8'); + proc.stdout.on('data', lines(line => { + + // the following substr arguments must match the column width specified for the "ps" command above + // regular substr is deprecated + const pid = Number(substr(line, 0, 6)); + const ppid = Number(substr(line, 7, 6)); + const shortName = substr(line, 14, 20).trim() + const fullCommand = substr(line, 35) + + let command = shortName; + let args = fullCommand; + + const pos = fullCommand.indexOf(shortName); if (pos >= 0) { - pos = pos + command.length; - while (pos < args.length) { - if (args[pos] === ' ') { - break; - } - pos++; - } - command = args.substr(0, pos); - args = args.substr(pos + 1); + // binaries with spaces in path may not work + // possible solution to read directly from /proc + const commandEndPositionMaybe = fullCommand.indexOf(" ", pos + shortName.length); + const commandEndPosition = commandEndPositionMaybe < 0 ? fullCommand.length : commandEndPositionMaybe; + command = fullCommand.substring(0, commandEndPosition) + args = fullCommand.substring(commandEndPosition).trimStart() } + if (!isNaN(pid) && !isNaN(ppid)) { one(pid, ppid, command, args); } @@ -157,8 +160,8 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a reject(err); }); - proc.stderr?.setEncoding('utf8'); - proc.stderr?.on('data', data => { + proc.stderr.setEncoding('utf8'); + proc.stderr.on('data', data => { const e = data.toString(); if (e.indexOf('screen size is bogus') >= 0) { // ignore this error silently; see https://github.com/microsoft/vscode/issues/75932 @@ -170,7 +173,7 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a proc.on('close', (code, signal) => { if (code === 0) { resolve(); - } else if (code > 0) { + } else if (code !== null && code > 0) { reject(new Error(`process terminated with exit code: ${code}`)); } if (signal) { @@ -192,3 +195,7 @@ export function getProcesses(one: (pid: number, ppid: number, command: string, a }); }); } + +function substr(str: string, startIndex: number, length?: number) { + return str.slice(startIndex, length != undefined ? startIndex + length : str.length) +} diff --git a/src/progressAPI.ts b/src/progressAPI.ts index 379069b3..d78581d8 100644 --- a/src/progressAPI.ts +++ b/src/progressAPI.ts @@ -4,6 +4,12 @@ import { CancellationToken, ProgressLocation } from "vscode"; export interface IProgressReporter { + /** + * Set the job name. + * @param jobName the job name + */ + setJobName(jobName: string): void; + /** * Returns the id of the progress reporter. */ diff --git a/src/progressImpl.ts b/src/progressImpl.ts index 9e7c83af..6ee2a98c 100644 --- a/src/progressImpl.ts +++ b/src/progressImpl.ts @@ -33,7 +33,8 @@ class ProgressReporter implements IProgressReporter { } if (this._progressLocation === ProgressLocation.Window) { - this._statusBarItem = window.createStatusBarItem(StatusBarAlignment.Left, 1); + this._statusBarItem = window.createStatusBarItem(this._id, StatusBarAlignment.Left, 1); + this._statusBarItem.name = "Progress Message for " + this._jobName; this._statusBarItem.text = `$(sync~spin) ${this._jobName}...`; this._statusBarItem.command = { title: "Check Java Build Status", @@ -51,6 +52,10 @@ class ProgressReporter implements IProgressReporter { this._disposables.push(this._tokenSource); } + public setJobName(jobName: string): void { + this._jobName = jobName; + } + public getId(): string { return this._id; } diff --git a/src/terminalLinkProvider.ts b/src/terminalLinkProvider.ts index d50927bb..33016f71 100644 --- a/src/terminalLinkProvider.ts +++ b/src/terminalLinkProvider.ts @@ -3,6 +3,7 @@ import { CancellationToken, commands, Position, ProviderResult, Range, TerminalLink, TerminalLinkContext, TerminalLinkProvider, Uri, window } from "vscode"; +import { sendInfo } from "vscode-extension-telemetry-wrapper"; import { resolveSourceUri } from "./languageServerPlugin"; export class JavaTerminalLinkProvder implements TerminalLinkProvider { @@ -15,10 +16,7 @@ export class JavaTerminalLinkProvder implements TerminalLinkProvider { - if (context.terminal.name !== "Java Debug Console" && context.terminal.name !== "Java Process Console") { - return []; - } - + const isDebuggerTerminal: boolean = context.terminal.name.startsWith("Run:") || context.terminal.name.startsWith("Debug:"); const regex = new RegExp("(\\sat\\s+)([\\w$\\.]+\\/)?(([\\w$]+\\.)+[<\\w$>]+)\\(([\\w-$]+\\.java:\\d+)\\)"); const result: RegExpExecArray | null = regex.exec(context.line); if (result && result.length) { @@ -30,6 +28,7 @@ export class JavaTerminalLinkProvder implements TerminalLinkProvider { + sendInfo("", { + operationName: "handleJavaTerminalLink", + isDebuggerTerminal: String(link.isDebuggerTerminal), + }); const uri = await resolveSourceUri(link.stackTrace); if (uri) { const lineNumber = Math.max(link.lineNumber - 1, 0); @@ -60,4 +63,5 @@ interface IJavaTerminalLink extends TerminalLink { methodName: string; stackTrace: string; lineNumber: number; + isDebuggerTerminal: boolean; } diff --git a/src/utility.ts b/src/utility.ts index aa9b82c2..94c8e77c 100644 --- a/src/utility.ts +++ b/src/utility.ts @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT license. -import * as path from "path"; import * as vscode from "vscode"; import { sendError, sendInfo, setUserError } from "vscode-extension-telemetry-wrapper"; import { Type } from "./javaLogger"; @@ -11,7 +10,6 @@ import { IProgressReporter } from "./progressAPI"; const TROUBLESHOOTING_LINK = "https://github.com/Microsoft/vscode-java-debug/blob/master/Troubleshooting.md"; const LEARN_MORE = "Learn More"; const JAVA_EXTENSION_ID = "redhat.java"; -const DEBUGGER_EXTENSION_ID = "vscjava.vscode-java-debug"; export class UserError extends Error { public context: ITroubleshootingMessage; @@ -40,6 +38,7 @@ interface ILoggingMessage { type?: Type; message: string; stack?: string; + bypassLog?: boolean; } interface ITroubleshootingMessage extends ILoggingMessage { @@ -47,7 +46,7 @@ interface ITroubleshootingMessage extends ILoggingMessage { } function logMessage(message: ILoggingMessage): void { - if (!message.type) { + if (!message.type || message.bypassLog) { return; } @@ -201,11 +200,6 @@ export function isJavaExtActivated(): boolean { return !!javaExt && javaExt.isActive; } -export function getLauncherScriptPath() { - const ext = vscode.extensions.getExtension(DEBUGGER_EXTENSION_ID)!; - return path.join(ext.extensionPath, "scripts", "launcher.bat"); -} - export function isGitBash(isIntegratedTerminal: boolean): boolean { const currentWindowsShellPath: string | undefined = isIntegratedTerminal ? vscode.env.shell : vscode.workspace.getConfiguration("terminal")?.get("external.windowsExec"); @@ -319,3 +313,13 @@ function getJavaServerMode(): ServerMode { return vscode.workspace.getConfiguration().get("java.server.launchMode") || ServerMode.HYBRID; } + +export function launchJobName(configName: string, noDebug: boolean): string { + let jobName = noDebug ? "Run" : "Debug"; + jobName += configName ? ` '${configName} '` : ""; + return jobName; +} + +export function launchJobNameByMainClass(mainClass: string, noDebug: boolean): string { + return launchJobName(mainClass.substr(mainClass.lastIndexOf(".") + 1), noDebug); +} diff --git a/src/variableMenu.ts b/src/variableMenu.ts index 53738ac3..e12889e4 100644 --- a/src/variableMenu.ts +++ b/src/variableMenu.ts @@ -6,7 +6,7 @@ import { instrumentOperationAsVsCodeCommand } from "vscode-extension-telemetry-w export function registerVariableMenuCommands(context: vscode.ExtensionContext): void { vscode.workspace.onDidChangeConfiguration((event) => { - if (event.affectsConfiguration("java.debug.settings")) { + if (event.affectsConfiguration("java.debug.settings") || event.affectsConfiguration("debug.autoExpandLazyVariables")) { updateContextKeys(); } }); @@ -33,9 +33,20 @@ export function registerVariableMenuCommands(context: vscode.ExtensionContext): "java.debug.variables.showToString", () => updateVariableFormatter("showToString", true))); context.subscriptions.push(instrumentOperationAsVsCodeCommand( "java.debug.variables.notShowToString", () => updateVariableFormatter("showToString", false))); + context.subscriptions.push(instrumentOperationAsVsCodeCommand( + "java.debug.variables.autoExpandLazyVariables", () => toggleLazyVariableSetting(true))); + context.subscriptions.push(instrumentOperationAsVsCodeCommand( + "java.debug.variables.manualExpandLazyVariables", () => toggleLazyVariableSetting(false))); } -function updateVariableFormatter(key: string, value: any) { +async function updateVariableFormatter(key: string, value: any) { + const debugSettingsRoot: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); + // Update the formatter to settings.json + await debugSettingsRoot.update(key, value, getConfigurationTarget("java.debug", "settings")); + refreshVariableView(); +} + +function refreshVariableView() { const debugSettingsRoot: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); if (vscode.debug.activeDebugSession && vscode.debug.activeDebugSession.type === "java") { const formatter: any = { @@ -45,19 +56,30 @@ function updateVariableFormatter(key: string, value: any) { showLogicalStructure: debugSettingsRoot.showLogicalStructure, showToString: debugSettingsRoot.showToString, }; - formatter[key] = value; vscode.debug.activeDebugSession.customRequest("refreshVariables", formatter); } +} + +async function toggleLazyVariableSetting(toggle: boolean) { + const javadDebugSettingsRoot: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("java.debug.settings"); + if (!javadDebugSettingsRoot.showToString) { + await javadDebugSettingsRoot.update("showToString", true, getConfigurationTarget("java.debug", "settings")); + } - // Update the formatter to settings.json - const inspect = vscode.workspace.getConfiguration("java.debug").inspect("settings"); - let configurationTarget = vscode.ConfigurationTarget.Global; + const debugSettingsRoot: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("debug"); + await debugSettingsRoot.update("autoExpandLazyVariables", toggle, getConfigurationTarget("debug", "autoExpandLazyVariables")); + refreshVariableView(); +} + +function getConfigurationTarget(section: string, key: string): vscode.ConfigurationTarget { + const inspect = vscode.workspace.getConfiguration(section).inspect(key); if (inspect && inspect.workspaceFolderValue !== undefined) { - configurationTarget = vscode.ConfigurationTarget.WorkspaceFolder; + return vscode.ConfigurationTarget.WorkspaceFolder; } else if (inspect && inspect.workspaceValue !== undefined) { - configurationTarget = vscode.ConfigurationTarget.Workspace; + return vscode.ConfigurationTarget.Workspace; + } else { + return vscode.ConfigurationTarget.Global; } - debugSettingsRoot.update(key, value, configurationTarget); } function updateContextKeys() { @@ -69,4 +91,9 @@ function updateContextKeys() { vscode.commands.executeCommand("setContext", "javadebug:showStaticVariables", debugSettingsRoot.showStaticVariables ? "on" : "off"); vscode.commands.executeCommand("setContext", "javadebug:showToString", debugSettingsRoot.showToString ? "on" : "off"); } + + const globalDebugRoot: vscode.WorkspaceConfiguration = vscode.workspace.getConfiguration("debug"); + if (globalDebugRoot) { + vscode.commands.executeCommand("setContext", "javadebug:expandLazyVariable", globalDebugRoot.autoExpandLazyVariables ? "on" : "off"); + } } diff --git a/test/index.ts b/test/index.ts index 58d76b98..7e8d8261 100644 --- a/test/index.ts +++ b/test/index.ts @@ -2,7 +2,7 @@ // Licensed under the MIT license. import * as path from "path"; -import { runTests } from "vscode-test"; +import { runTests } from "@vscode/test-electron"; async function main(): Promise { try { diff --git a/test/suite/index.ts b/test/suite/index.ts index 8953911a..d87e690a 100644 --- a/test/suite/index.ts +++ b/test/suite/index.ts @@ -10,7 +10,7 @@ export function run(): Promise { const mocha = new Mocha({ ui: "tdd", }); - mocha.useColors(true); + mocha.options.color = true; const testsRoot = path.resolve(__dirname, ".."); diff --git a/testprojects/1.helloworld/.classpath b/testprojects/1.helloworld/.classpath deleted file mode 100644 index 02610159..00000000 --- a/testprojects/1.helloworld/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/1.helloworld/.project b/testprojects/1.helloworld/.project deleted file mode 100644 index ab52c1af..00000000 --- a/testprojects/1.helloworld/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 1.helloworld - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/1.helloworld/src/main/java/HelloWorld.java b/testprojects/1.helloworld/src/main/java/HelloWorld.java deleted file mode 100644 index 507090dc..00000000 --- a/testprojects/1.helloworld/src/main/java/HelloWorld.java +++ /dev/null @@ -1,13 +0,0 @@ -public class HelloWorld { - public static void main(String[] args) { - System.out.print("hello"); - if (args != null && args.length > 0) { - for (String arg : args) { - System.out.print(" " + arg); - } - System.out.println(); - } else { - System.out.println(" world"); - } - } -} \ No newline at end of file diff --git a/testprojects/10.junit/.classpath b/testprojects/10.junit/.classpath deleted file mode 100644 index 5fb16767..00000000 --- a/testprojects/10.junit/.classpath +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/testprojects/10.junit/.project b/testprojects/10.junit/.project deleted file mode 100644 index d19df6cb..00000000 --- a/testprojects/10.junit/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 10.junit - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/10.junit/build.gradle_ b/testprojects/10.junit/build.gradle_ deleted file mode 100644 index fcac9678..00000000 --- a/testprojects/10.junit/build.gradle_ +++ /dev/null @@ -1,39 +0,0 @@ -apply plugin: 'java' -apply plugin: 'eclipse' -apply plugin: 'idea' - -buildscript { - repositories { - mavenCentral() - } - dependencies { classpath "commons-io:commons-io:2.5" } -} - -import org.apache.commons.io.FilenameUtils; - -sourceSets { - main.java.srcDirs = ['src/main/java'] -} -dependencies { - testCompile 'junit:junit:4.12' -} - - -repositories { - mavenCentral() -} - -def getShortJar = { e -> FilenameUtils.getName(e) } -eclipse.classpath.file { - withXml{xml -> - def node = xml.asNode() - - node.classpathentry.each{ - if (it.@kind == 'lib') { - it.@path = 'lib/' + getShortJar(it.@path); - it.@sourcepath = 'lib/' + getShortJar(it.@sourcepath); - } - - } - } -} \ No newline at end of file diff --git a/testprojects/10.junit/lib/hamcrest-core-1.3-sources.jar b/testprojects/10.junit/lib/hamcrest-core-1.3-sources.jar deleted file mode 100644 index c3c110b4..00000000 Binary files a/testprojects/10.junit/lib/hamcrest-core-1.3-sources.jar and /dev/null differ diff --git a/testprojects/10.junit/lib/hamcrest-core-1.3.jar b/testprojects/10.junit/lib/hamcrest-core-1.3.jar deleted file mode 100644 index 9d5fe16e..00000000 Binary files a/testprojects/10.junit/lib/hamcrest-core-1.3.jar and /dev/null differ diff --git a/testprojects/10.junit/lib/junit-4.12-sources.jar b/testprojects/10.junit/lib/junit-4.12-sources.jar deleted file mode 100644 index 884f92f5..00000000 Binary files a/testprojects/10.junit/lib/junit-4.12-sources.jar and /dev/null differ diff --git a/testprojects/10.junit/lib/junit-4.12.jar b/testprojects/10.junit/lib/junit-4.12.jar deleted file mode 100644 index 3a7fc266..00000000 Binary files a/testprojects/10.junit/lib/junit-4.12.jar and /dev/null differ diff --git a/testprojects/10.junit/src/main/java/MyClass.java b/testprojects/10.junit/src/main/java/MyClass.java deleted file mode 100644 index 20dc61a1..00000000 --- a/testprojects/10.junit/src/main/java/MyClass.java +++ /dev/null @@ -1,17 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017 Microsoft Corporation and others. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: Microsoft Corporation - initial API and implementation - *******************************************************************************/ - -public class MyClass { - public int multiply(int x, int y) { - if (x > 999) { - throw new IllegalArgumentException("X should be less than 1000"); - } - return x * y; - } -} diff --git a/testprojects/10.junit/src/test/java/MyTest.java b/testprojects/10.junit/src/test/java/MyTest.java deleted file mode 100644 index 2b1abe01..00000000 --- a/testprojects/10.junit/src/test/java/MyTest.java +++ /dev/null @@ -1,18 +0,0 @@ -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -public class MyTest { - - @Test(expected = IllegalArgumentException.class) - public void testExceptionIsThrown() { - MyClass tester = new MyClass(); - tester.multiply(1000, 5); - } - - @Test - public void testMultiply() { - MyClass tester = new MyClass(); - assertEquals("10 x 5 must be 50", 50, tester.multiply(10, 5)); - } -} \ No newline at end of file diff --git a/testprojects/11.maven/pom.xml b/testprojects/11.maven/pom.xml deleted file mode 100644 index 88b3fe28..00000000 --- a/testprojects/11.maven/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ - - 4.0.0 - com.mycompany.app - my-app - jar - 1.0-SNAPSHOT - my-app - http://maven.apache.org - - - junit - junit - 3.8.1 - test - - - diff --git a/testprojects/11.maven/src/main/java/com/mycompany/app/App.java b/testprojects/11.maven/src/main/java/com/mycompany/app/App.java deleted file mode 100644 index 77cf3e05..00000000 --- a/testprojects/11.maven/src/main/java/com/mycompany/app/App.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.mycompany.app; - -/** - * Hello world! - * - */ -public class App -{ - public static void main( String[] args ) - { - System.out.println( "Hello World!" ); - } -} diff --git a/testprojects/11.maven/src/test/java/com/mycompany/app/AppTest.java b/testprojects/11.maven/src/test/java/com/mycompany/app/AppTest.java deleted file mode 100644 index 33559900..00000000 --- a/testprojects/11.maven/src/test/java/com/mycompany/app/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.mycompany.app; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/testprojects/12.gradle/.gitignore b/testprojects/12.gradle/.gitignore deleted file mode 100644 index 3b3bd9a1..00000000 --- a/testprojects/12.gradle/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Language server somehow recognizes build.gradle and compile this project. -# Ignore following generated files to keep SCM clean. -.gradle/ -.settings/ -.project -.classpath diff --git a/testprojects/12.gradle/build.gradle b/testprojects/12.gradle/build.gradle deleted file mode 100644 index ed50e206..00000000 --- a/testprojects/12.gradle/build.gradle +++ /dev/null @@ -1,6 +0,0 @@ -apply plugin: 'java' - - -sourceSets { - main.java.srcDirs = ['src/main/java'] -} \ No newline at end of file diff --git a/testprojects/12.gradle/src/main/java/GradleTest.java b/testprojects/12.gradle/src/main/java/GradleTest.java deleted file mode 100644 index f741d95e..00000000 --- a/testprojects/12.gradle/src/main/java/GradleTest.java +++ /dev/null @@ -1,5 +0,0 @@ -public class GradleTest { - public static void main(String[] args) { - System.out.println("This is a sample gradle project"); - } -} \ No newline at end of file diff --git a/testprojects/13.customcl/.classpath b/testprojects/13.customcl/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/13.customcl/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/13.customcl/.project b/testprojects/13.customcl/.project deleted file mode 100644 index 815fce5c..00000000 --- a/testprojects/13.customcl/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 13.customcl - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/13.customcl/replacement/Foo.class b/testprojects/13.customcl/replacement/Foo.class deleted file mode 100644 index ef0cc914..00000000 Binary files a/testprojects/13.customcl/replacement/Foo.class and /dev/null differ diff --git a/testprojects/13.customcl/src/main/java/CustomCL.java b/testprojects/13.customcl/src/main/java/CustomCL.java deleted file mode 100644 index 76b4e253..00000000 --- a/testprojects/13.customcl/src/main/java/CustomCL.java +++ /dev/null @@ -1,56 +0,0 @@ -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.nio.file.Files; -import java.nio.file.Paths; - -class CustomCL extends ClassLoader { - private String baseFolder; - - public CustomCL(String baseFolder) { - super(null); - this.baseFolder = baseFolder; - } - - @Override - protected Class findClass(String name) throws ClassNotFoundException { - // load from parent - Class result = findLoadedClass(name); - if (result != null) { - return result; - } - - try { - File classFile = new File(baseFolder, name + ".class"); - if (classFile.exists()) { - byte[] bytes = Files.readAllBytes(Paths.get(classFile.getAbsolutePath())); - return defineClass(name, bytes, 0, bytes.length); - } - } catch (IOException e) { - e.printStackTrace(); - } - return getSystemClassLoader().loadClass(name); - - } - - @Override - protected Class loadClass(String name, boolean resolve) - throws ClassNotFoundException { - Class cls; - - cls = findLoadedClass(name); - if (cls == null) { - cls = findClass(name); - } - - if (cls == null) { - throw new ClassNotFoundException(name); - } - - if (resolve) - resolveClass(cls); - return cls; - } - -} \ No newline at end of file diff --git a/testprojects/13.customcl/src/main/java/CustomClassLoaderTest.java b/testprojects/13.customcl/src/main/java/CustomClassLoaderTest.java deleted file mode 100644 index e33d06de..00000000 --- a/testprojects/13.customcl/src/main/java/CustomClassLoaderTest.java +++ /dev/null @@ -1,26 +0,0 @@ -import java.io.File; - -public class CustomClassLoaderTest { - public static void main(String[] args) { - File replacement = new File(new File("").getAbsolutePath(), "replacement"); - if (!replacement.exists()) { - replacement = new File(new File("").getAbsolutePath(), "../replacement"); - } - - - final String replacementFolder = replacement.getAbsolutePath(); - new Thread(()-> { - try { - System.out.println("Using " + replacementFolder); - CustomCL cl = new CustomCL(replacementFolder); - Class cls = cl.loadClass("Foo"); - - IFoo foo = (IFoo)cls.newInstance(); - new Foo().sayHello(); - foo.sayHello(); - } catch(Exception ex) { - ex.printStackTrace(); - } - }).start(); - } -} \ No newline at end of file diff --git a/testprojects/13.customcl/src/main/java/Foo.java b/testprojects/13.customcl/src/main/java/Foo.java deleted file mode 100644 index 847995bb..00000000 --- a/testprojects/13.customcl/src/main/java/Foo.java +++ /dev/null @@ -1,5 +0,0 @@ -public class Foo implements IFoo { - public void sayHello() { - System.out.println("hello world! (version one)"); - } -} \ No newline at end of file diff --git a/testprojects/13.customcl/src/main/java/IFoo.java b/testprojects/13.customcl/src/main/java/IFoo.java deleted file mode 100644 index 3815c908..00000000 --- a/testprojects/13.customcl/src/main/java/IFoo.java +++ /dev/null @@ -1,3 +0,0 @@ -public interface IFoo { - void sayHello(); -} diff --git a/testprojects/14.encoding/.classpath b/testprojects/14.encoding/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/14.encoding/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/14.encoding/.project b/testprojects/14.encoding/.project deleted file mode 100644 index 930649f5..00000000 --- a/testprojects/14.encoding/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 14.encoding - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/14.encoding/.settings/org.eclipse.core.resources.prefs b/testprojects/14.encoding/.settings/org.eclipse.core.resources.prefs deleted file mode 100644 index e9a7277b..00000000 --- a/testprojects/14.encoding/.settings/org.eclipse.core.resources.prefs +++ /dev/null @@ -1,2 +0,0 @@ -eclipse.preferences.version=1 -encoding//src/main/java/EncodingTest.java=gbk diff --git a/testprojects/14.encoding/src/main/java/EncodingTest.java b/testprojects/14.encoding/src/main/java/EncodingTest.java deleted file mode 100644 index 9a42422e..00000000 --- a/testprojects/14.encoding/src/main/java/EncodingTest.java +++ /dev/null @@ -1,25 +0,0 @@ -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.nio.charset.Charset; - -public class EncodingTest { - public static void main(String[] args) throws Exception { - String var = "abcdef"; - System.out.println(var); - System.out.println(var.length()); - System.out.println("Default Charset=" + Charset.defaultCharset()); - System.out.println("file.encoding=" + System.getProperty("file.encoding")); - System.out.println("Default Charset in Use=" + getDefaultCharSet()); - } - - private static String getDefaultCharSet() { - try (OutputStreamWriter writer = new OutputStreamWriter(new ByteArrayOutputStream())) { - return writer.getEncoding(); - } catch (IOException ex) { - ex.printStackTrace(); - return "exception"; - } - - } -} \ No newline at end of file diff --git a/testprojects/15.specialname/.classpath b/testprojects/15.specialname/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/15.specialname/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/15.specialname/.project b/testprojects/15.specialname/.project deleted file mode 100644 index f64f0862..00000000 --- a/testprojects/15.specialname/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 15.specialname - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/15.specialname/src/main/java/ab$c/Hello$orld.java b/testprojects/15.specialname/src/main/java/ab$c/Hello$orld.java deleted file mode 100644 index 7e7eb635..00000000 --- a/testprojects/15.specialname/src/main/java/ab$c/Hello$orld.java +++ /dev/null @@ -1,6 +0,0 @@ -package ab$c; -public class Hello$orld { - public static void main(String args[]) { - System.out.println("Hello$orld"); - } -} \ No newline at end of file diff --git a/testprojects/16.resolvemainclass/.classpath b/testprojects/16.resolvemainclass/.classpath deleted file mode 100644 index 57ee5fb9..00000000 --- a/testprojects/16.resolvemainclass/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/testprojects/16.resolvemainclass/.project b/testprojects/16.resolvemainclass/.project deleted file mode 100644 index b72952bc..00000000 --- a/testprojects/16.resolvemainclass/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 16.resolvemainclass - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/16.resolvemainclass/build.gradle_ b/testprojects/16.resolvemainclass/build.gradle_ deleted file mode 100644 index fcac9678..00000000 --- a/testprojects/16.resolvemainclass/build.gradle_ +++ /dev/null @@ -1,39 +0,0 @@ -apply plugin: 'java' -apply plugin: 'eclipse' -apply plugin: 'idea' - -buildscript { - repositories { - mavenCentral() - } - dependencies { classpath "commons-io:commons-io:2.5" } -} - -import org.apache.commons.io.FilenameUtils; - -sourceSets { - main.java.srcDirs = ['src/main/java'] -} -dependencies { - testCompile 'junit:junit:4.12' -} - - -repositories { - mavenCentral() -} - -def getShortJar = { e -> FilenameUtils.getName(e) } -eclipse.classpath.file { - withXml{xml -> - def node = xml.asNode() - - node.classpathentry.each{ - if (it.@kind == 'lib') { - it.@path = 'lib/' + getShortJar(it.@path); - it.@sourcepath = 'lib/' + getShortJar(it.@sourcepath); - } - - } - } -} \ No newline at end of file diff --git a/testprojects/16.resolvemainclass/lib/hamcrest-core-1.3-sources.jar b/testprojects/16.resolvemainclass/lib/hamcrest-core-1.3-sources.jar deleted file mode 100644 index c3c110b4..00000000 Binary files a/testprojects/16.resolvemainclass/lib/hamcrest-core-1.3-sources.jar and /dev/null differ diff --git a/testprojects/16.resolvemainclass/lib/hamcrest-core-1.3.jar b/testprojects/16.resolvemainclass/lib/hamcrest-core-1.3.jar deleted file mode 100644 index 9d5fe16e..00000000 Binary files a/testprojects/16.resolvemainclass/lib/hamcrest-core-1.3.jar and /dev/null differ diff --git a/testprojects/16.resolvemainclass/lib/junit-4.12-sources.jar b/testprojects/16.resolvemainclass/lib/junit-4.12-sources.jar deleted file mode 100644 index 884f92f5..00000000 Binary files a/testprojects/16.resolvemainclass/lib/junit-4.12-sources.jar and /dev/null differ diff --git a/testprojects/16.resolvemainclass/lib/junit-4.12.jar b/testprojects/16.resolvemainclass/lib/junit-4.12.jar deleted file mode 100644 index 3a7fc266..00000000 Binary files a/testprojects/16.resolvemainclass/lib/junit-4.12.jar and /dev/null differ diff --git a/testprojects/16.resolvemainclass/src/main/java/MyApp.java b/testprojects/16.resolvemainclass/src/main/java/MyApp.java deleted file mode 100644 index 2ca40d87..00000000 --- a/testprojects/16.resolvemainclass/src/main/java/MyApp.java +++ /dev/null @@ -1,14 +0,0 @@ -/******************************************************************************* - * Copyright (c) 2017 Microsoft Corporation and others. All rights reserved. - * This program and the accompanying materials are made available under the - * terms of the Eclipse Public License v1.0 which accompanies this distribution, - * and is available at http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: Microsoft Corporation - initial API and implementation - *******************************************************************************/ - -public class MyApp { - public static void main(String agrsp[]) { - System.out.println("Hello App!"); - } -} diff --git a/testprojects/16.resolvemainclass/src/test/java/MyAppTest.java b/testprojects/16.resolvemainclass/src/test/java/MyAppTest.java deleted file mode 100644 index 90c0d58f..00000000 --- a/testprojects/16.resolvemainclass/src/test/java/MyAppTest.java +++ /dev/null @@ -1,7 +0,0 @@ - -public class MyAppTest { - - public static void main(String agrsp[]) { - System.out.println("Hello test App!"); - } -} \ No newline at end of file diff --git a/testprojects/17.argstest/.classpath b/testprojects/17.argstest/.classpath deleted file mode 100644 index 51a8bbad..00000000 --- a/testprojects/17.argstest/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/17.argstest/.project b/testprojects/17.argstest/.project deleted file mode 100644 index 587e9cc6..00000000 --- a/testprojects/17.argstest/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 17.argstest - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/17.argstest/.settings/org.eclipse.jdt.core.prefs b/testprojects/17.argstest/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3a215370..00000000 --- a/testprojects/17.argstest/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/testprojects/17.argstest/src/test/ArgsTest.java b/testprojects/17.argstest/src/test/ArgsTest.java deleted file mode 100644 index 5d9a2dc8..00000000 --- a/testprojects/17.argstest/src/test/ArgsTest.java +++ /dev/null @@ -1,23 +0,0 @@ -package test; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - - public class ArgsTest { - - public static void main(String[] args) throws IOException { - - List proList=Arrays.asList(args); - - String sysProp1Value = System.getProperty("sysProp1"); - String sysProp2Value = System.getProperty("sysProp2"); - List vmList=new ArrayList<>(); - vmList.add(sysProp1Value ); - vmList.add(sysProp2Value ); - String encoding=System.getProperty("file.encoding"); - System.out.println("Program Arguments:"+String.join(" ", proList)+" VM Arguments:"+String.join(" ",vmList)); - - } - } \ No newline at end of file diff --git a/testprojects/18.attachdebug/.classpath b/testprojects/18.attachdebug/.classpath deleted file mode 100644 index 51a8bbad..00000000 --- a/testprojects/18.attachdebug/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/18.attachdebug/.project b/testprojects/18.attachdebug/.project deleted file mode 100644 index e7f95900..00000000 --- a/testprojects/18.attachdebug/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 18.attachdebug - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/18.attachdebug/.settings/org.eclipse.jdt.core.prefs b/testprojects/18.attachdebug/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index 3a215370..00000000 --- a/testprojects/18.attachdebug/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/testprojects/18.attachdebug/src/test/attachdebug.java b/testprojects/18.attachdebug/src/test/attachdebug.java deleted file mode 100644 index 75df2e6a..00000000 --- a/testprojects/18.attachdebug/src/test/attachdebug.java +++ /dev/null @@ -1,14 +0,0 @@ -package test; -import java.util.stream.Stream; - -public class attachdebug { - public static void main(String[] args) { - String concat = Stream.of("A", "B", "C", "D").reduce("", String::concat); - Integer[] sixNums = {1, 2, 3, 4, 5, 6}; - int evens = - Stream.of(sixNums).filter(n -> n%2 == 0).reduce(0, Integer::sum); - - System.out.println(concat+" "+evens); - } - -} diff --git a/testprojects/19.java9-app/pom.xml b/testprojects/19.java9-app/pom.xml deleted file mode 100644 index 14f82c29..00000000 --- a/testprojects/19.java9-app/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - 4.0.0 - com.microsoft.app - java9-app - jar - 1.0-SNAPSHOT - java9-app - http://maven.apache.org - - - junit - junit - 3.8.1 - test - - - com.google.code.gson - gson - 2.7 - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.7.0 - - 9 - 9 - true - true - - - - - diff --git a/testprojects/19.java9-app/src/main/java/com/microsoft/app/App.java b/testprojects/19.java9-app/src/main/java/com/microsoft/app/App.java deleted file mode 100644 index b9cf3090..00000000 --- a/testprojects/19.java9-app/src/main/java/com/microsoft/app/App.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.microsoft.app; - -import com.google.gson.Gson; - -public class App -{ - public static void main( String[] args ) - { - Gson GSON = new Gson(); - String name = "jinbwan"; - Employee employee = GSON.fromJson("{\"name\": \"" + name + "\"}", Employee.class); - System.out.println(employee.getName()); - } - - static class Employee { - public String name; - - public String getName() { - return this.name; - } - } -} diff --git a/testprojects/19.java9-app/src/main/java/com/microsoft/app/Launcher.java b/testprojects/19.java9-app/src/main/java/com/microsoft/app/Launcher.java deleted file mode 100644 index 868c8242..00000000 --- a/testprojects/19.java9-app/src/main/java/com/microsoft/app/Launcher.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.microsoft.app; - -import java.nio.file.Paths; - -public class Launcher { - public static void main(String[] args) { - System.out.println(Paths.get("").toAbsolutePath().toString()); - - System.out.println(System.getenv("Path")); - } -} \ No newline at end of file diff --git a/testprojects/19.java9-app/src/main/java/module-info.java b/testprojects/19.java9-app/src/main/java/module-info.java deleted file mode 100644 index b5f133eb..00000000 --- a/testprojects/19.java9-app/src/main/java/module-info.java +++ /dev/null @@ -1,6 +0,0 @@ -module com.microsoft.app.mymodule { - requires gson; - requires java.base; - requires java.sql; - opens com.microsoft.app; -} \ No newline at end of file diff --git a/testprojects/19.java9-app/src/test/java/com/microsoft/app/AppTest.java b/testprojects/19.java9-app/src/test/java/com/microsoft/app/AppTest.java deleted file mode 100644 index 1fc30107..00000000 --- a/testprojects/19.java9-app/src/test/java/com/microsoft/app/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.microsoft.app; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/testprojects/2.callstack/.classpath b/testprojects/2.callstack/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/2.callstack/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/2.callstack/.project b/testprojects/2.callstack/.project deleted file mode 100644 index 3b77e1d5..00000000 --- a/testprojects/2.callstack/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 2.callstack - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/2.callstack/src/main/java/Bar.java b/testprojects/2.callstack/src/main/java/Bar.java deleted file mode 100644 index cdd93c15..00000000 --- a/testprojects/2.callstack/src/main/java/Bar.java +++ /dev/null @@ -1,5 +0,0 @@ -public class Bar { - public void testBar(int i) { - System.out.println("This is test method in bar."); - } -} diff --git a/testprojects/2.callstack/src/main/java/CallStack.java b/testprojects/2.callstack/src/main/java/CallStack.java deleted file mode 100644 index aeecfa00..00000000 --- a/testprojects/2.callstack/src/main/java/CallStack.java +++ /dev/null @@ -1,6 +0,0 @@ -public class CallStack { - public static void main(String[] args) { - Foo foo = new Foo(); - foo.testFoo(10); - } -} \ No newline at end of file diff --git a/testprojects/2.callstack/src/main/java/Foo.java b/testprojects/2.callstack/src/main/java/Foo.java deleted file mode 100644 index 5ef022f5..00000000 --- a/testprojects/2.callstack/src/main/java/Foo.java +++ /dev/null @@ -1,9 +0,0 @@ -public class Foo { - private Bar bar = new Bar(); - - public void testFoo(int j) { - System.out.println("This is test method in foo."); - bar.testBar(j + 10); - } - -} diff --git a/testprojects/20.usersettings/.classpath b/testprojects/20.usersettings/.classpath deleted file mode 100644 index 02610159..00000000 --- a/testprojects/20.usersettings/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/20.usersettings/.project b/testprojects/20.usersettings/.project deleted file mode 100644 index 5924af8d..00000000 --- a/testprojects/20.usersettings/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 20.usersettings - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/20.usersettings/src/main/java/usersettings/UserSettings.java b/testprojects/20.usersettings/src/main/java/usersettings/UserSettings.java deleted file mode 100644 index d94a506e..00000000 --- a/testprojects/20.usersettings/src/main/java/usersettings/UserSettings.java +++ /dev/null @@ -1,13 +0,0 @@ -package usersettings; - -public class UserSettings { - private static int number = 20; - - public static void main(String[] args) { - - String testName = "usersettings"; - System.out.println("Test name is " + testName + " and the test number is " + number); - - } - -} diff --git a/testprojects/21.evaluate/.classpath b/testprojects/21.evaluate/.classpath deleted file mode 100644 index 02610159..00000000 --- a/testprojects/21.evaluate/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/21.evaluate/.project b/testprojects/21.evaluate/.project deleted file mode 100644 index 90a74613..00000000 --- a/testprojects/21.evaluate/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 21.evaluate - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/21.evaluate/src/main/java/evaluate/EvaluateTest.java b/testprojects/21.evaluate/src/main/java/evaluate/EvaluateTest.java deleted file mode 100644 index 656a86f4..00000000 --- a/testprojects/21.evaluate/src/main/java/evaluate/EvaluateTest.java +++ /dev/null @@ -1,14 +0,0 @@ -package evaluate; - -public class EvaluateTest { - public static void main(String[] args) { - int i = 0; - i++; - int test1 = new EvaluateTest().test(); - System.out.print(test1 + i); - } - - public static int test() { - return 3; - } -} diff --git a/testprojects/21.single-file/Main.java b/testprojects/21.single-file/Main.java deleted file mode 100644 index 1063e696..00000000 --- a/testprojects/21.single-file/Main.java +++ /dev/null @@ -1,14 +0,0 @@ -public class Main{ - public static void main(String[] args) { - String s = "1"; - char sr = 'c'; - int t = 1; - t++; - test(t); - } - - private static void test(int t) { - int s = 1; - System.out.println("test" + s + t); - } -} \ No newline at end of file diff --git a/testprojects/22.jdkversion/.classpath b/testprojects/22.jdkversion/.classpath deleted file mode 100644 index 02610159..00000000 --- a/testprojects/22.jdkversion/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/22.jdkversion/.project b/testprojects/22.jdkversion/.project deleted file mode 100644 index 9bd45461..00000000 --- a/testprojects/22.jdkversion/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 22.jdkversion - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/22.jdkversion/src/main/java/JdkVersion.java b/testprojects/22.jdkversion/src/main/java/JdkVersion.java deleted file mode 100644 index 754f339d..00000000 --- a/testprojects/22.jdkversion/src/main/java/JdkVersion.java +++ /dev/null @@ -1,13 +0,0 @@ -import java.util.Arrays; -import java.util.List; - -public class JdkVersion { - public static void main(String[] args) { - String jdkVersion = System.getProperty("java.version"); - - List nums = Arrays.asList(1, 2, 3, 4); - float squareNums = nums.stream().map(n -> n * n).reduce((sum, n) -> sum + n).get().floatValue(); - System.out.println(jdkVersion); - System.out.println(squareNums); - } -} \ No newline at end of file diff --git a/testprojects/23.console-app/pom.xml b/testprojects/23.console-app/pom.xml deleted file mode 100644 index 2c1477a3..00000000 --- a/testprojects/23.console-app/pom.xml +++ /dev/null @@ -1,18 +0,0 @@ - - 4.0.0 - com.microsoft.test - console-app - jar - 1.0-SNAPSHOT - console-app - http://maven.apache.org - - - junit - junit - 3.8.1 - test - - - diff --git a/testprojects/23.console-app/src/main/java/com/microsoft/test/App.java b/testprojects/23.console-app/src/main/java/com/microsoft/test/App.java deleted file mode 100644 index 956e736c..00000000 --- a/testprojects/23.console-app/src/main/java/com/microsoft/test/App.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.microsoft.test; - -import java.util.Scanner; - -public class App -{ - public static void main( String[] args ) - { - System.out.println("Please input your name:"); - - Scanner in = new Scanner(System.in); - String name = in.nextLine(); - - System.out.println("Thanks, " + name); - } -} diff --git a/testprojects/23.console-app/src/test/java/com/microsoft/test/AppTest.java b/testprojects/23.console-app/src/test/java/com/microsoft/test/AppTest.java deleted file mode 100644 index fe41eec4..00000000 --- a/testprojects/23.console-app/src/test/java/com/microsoft/test/AppTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package com.microsoft.test; - -import junit.framework.Test; -import junit.framework.TestCase; -import junit.framework.TestSuite; - -/** - * Unit test for simple App. - */ -public class AppTest - extends TestCase -{ - /** - * Create the test case - * - * @param testName name of the test case - */ - public AppTest( String testName ) - { - super( testName ); - } - - /** - * @return the suite of tests being tested - */ - public static Test suite() - { - return new TestSuite( AppTest.class ); - } - - /** - * Rigourous Test :-) - */ - public void testApp() - { - assertTrue( true ); - } -} diff --git a/testprojects/24.hotCodeReplace/.classpath b/testprojects/24.hotCodeReplace/.classpath deleted file mode 100644 index 63b7e892..00000000 --- a/testprojects/24.hotCodeReplace/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/24.hotCodeReplace/.project b/testprojects/24.hotCodeReplace/.project deleted file mode 100644 index ac71c487..00000000 --- a/testprojects/24.hotCodeReplace/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - HelloWorld - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/24.hotCodeReplace/.settings/org.eclipse.jdt.core.prefs b/testprojects/24.hotCodeReplace/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index bb35fa0a..00000000 --- a/testprojects/24.hotCodeReplace/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/testprojects/24.hotCodeReplace/src/com/microsoft/debug/HelloWorld.java b/testprojects/24.hotCodeReplace/src/com/microsoft/debug/HelloWorld.java deleted file mode 100644 index 0c8591f7..00000000 --- a/testprojects/24.hotCodeReplace/src/com/microsoft/debug/HelloWorld.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.microsoft.debug; - - -public class HelloWorld { - static class InnerType { - public static void print() { - System.out.println("Inner Type."); - } - } - - private static int value = 0; - - public static void main(String[] args) throws Exception { - new Thread() { - public void run() { - while (true) { - try { - Thread.sleep(500); - - System.out.println("thread 1"); - - Person person = new Person("c4"); - System.out.println(person.getName()); - person.toString(); - } catch (InterruptedException e) { - } - } - } - }.start(); - - - new Thread() { - public void run() { - while (true) { - try { - Thread.sleep(500); - - System.out.println("thread 2"); - - Person person = new Person("c4"); - System.out.println(person.getName()); - person.toString(); - } catch (InterruptedException e) { - } - } - } - }.start(); - - change(); - while (true) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - - } - } - } - - public static void change() { - value++; - System.out.println(value); - } - -} diff --git a/testprojects/24.hotCodeReplace/src/com/microsoft/debug/NameProvider.java b/testprojects/24.hotCodeReplace/src/com/microsoft/debug/NameProvider.java deleted file mode 100644 index 23509548..00000000 --- a/testprojects/24.hotCodeReplace/src/com/microsoft/debug/NameProvider.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.microsoft.debug; - -public class NameProvider { - - public String fieldName; - - public NameProvider(String fieldName) { - this.fieldName = fieldName; - } - - public String getName() { - return " + Provider" + this.fieldName; - } -} \ No newline at end of file diff --git a/testprojects/24.hotCodeReplace/src/com/microsoft/debug/Person.java b/testprojects/24.hotCodeReplace/src/com/microsoft/debug/Person.java deleted file mode 100644 index c4e84f9d..00000000 --- a/testprojects/24.hotCodeReplace/src/com/microsoft/debug/Person.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.microsoft.debug; - -public class Person { - - private String name; - - public Person(String name) { - this.name = name; - } - - public String getName() { - String res = "old"; - for (int i = 0; i < 2; i++) { - res += i; - } - res += this.getInternalName(); - return res; - } - - public void setName(String name) { - this.name = name; - } - - private String getInternalName() { - int i = 2; - NameProvider provider = new NameProvider(""); - i++; - return provider.getName(); - } -} diff --git a/testprojects/25.restartFrame/.classpath b/testprojects/25.restartFrame/.classpath deleted file mode 100644 index 63b7e892..00000000 --- a/testprojects/25.restartFrame/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/25.restartFrame/.project b/testprojects/25.restartFrame/.project deleted file mode 100644 index ac71c487..00000000 --- a/testprojects/25.restartFrame/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - HelloWorld - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/25.restartFrame/.settings/org.eclipse.jdt.core.prefs b/testprojects/25.restartFrame/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index bb35fa0a..00000000 --- a/testprojects/25.restartFrame/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,11 +0,0 @@ -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.8 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.8 diff --git a/testprojects/25.restartFrame/src/com/microsoft/debug/HelloWorld.java b/testprojects/25.restartFrame/src/com/microsoft/debug/HelloWorld.java deleted file mode 100644 index 0c8591f7..00000000 --- a/testprojects/25.restartFrame/src/com/microsoft/debug/HelloWorld.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.microsoft.debug; - - -public class HelloWorld { - static class InnerType { - public static void print() { - System.out.println("Inner Type."); - } - } - - private static int value = 0; - - public static void main(String[] args) throws Exception { - new Thread() { - public void run() { - while (true) { - try { - Thread.sleep(500); - - System.out.println("thread 1"); - - Person person = new Person("c4"); - System.out.println(person.getName()); - person.toString(); - } catch (InterruptedException e) { - } - } - } - }.start(); - - - new Thread() { - public void run() { - while (true) { - try { - Thread.sleep(500); - - System.out.println("thread 2"); - - Person person = new Person("c4"); - System.out.println(person.getName()); - person.toString(); - } catch (InterruptedException e) { - } - } - } - }.start(); - - change(); - while (true) { - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - - } - } - } - - public static void change() { - value++; - System.out.println(value); - } - -} diff --git a/testprojects/25.restartFrame/src/com/microsoft/debug/NameProvider.java b/testprojects/25.restartFrame/src/com/microsoft/debug/NameProvider.java deleted file mode 100644 index 23509548..00000000 --- a/testprojects/25.restartFrame/src/com/microsoft/debug/NameProvider.java +++ /dev/null @@ -1,14 +0,0 @@ -package com.microsoft.debug; - -public class NameProvider { - - public String fieldName; - - public NameProvider(String fieldName) { - this.fieldName = fieldName; - } - - public String getName() { - return " + Provider" + this.fieldName; - } -} \ No newline at end of file diff --git a/testprojects/25.restartFrame/src/com/microsoft/debug/Person.java b/testprojects/25.restartFrame/src/com/microsoft/debug/Person.java deleted file mode 100644 index c4e84f9d..00000000 --- a/testprojects/25.restartFrame/src/com/microsoft/debug/Person.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.microsoft.debug; - -public class Person { - - private String name; - - public Person(String name) { - this.name = name; - } - - public String getName() { - String res = "old"; - for (int i = 0; i < 2; i++) { - res += i; - } - res += this.getInternalName(); - return res; - } - - public void setName(String name) { - this.name = name; - } - - private String getInternalName() { - int i = 2; - NameProvider provider = new NameProvider(""); - i++; - return provider.getName(); - } -} diff --git a/testprojects/26.environmentVariables/.classpath b/testprojects/26.environmentVariables/.classpath deleted file mode 100644 index 02610159..00000000 --- a/testprojects/26.environmentVariables/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/26.environmentVariables/.env b/testprojects/26.environmentVariables/.env deleted file mode 100644 index 89095410..00000000 --- a/testprojects/26.environmentVariables/.env +++ /dev/null @@ -1 +0,0 @@ -FILE_ENV_FOR_TEST_PLAN=Successfully loaded an env from a file. \ No newline at end of file diff --git a/testprojects/26.environmentVariables/.project b/testprojects/26.environmentVariables/.project deleted file mode 100644 index 9c16656a..00000000 --- a/testprojects/26.environmentVariables/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 26.environmentVariables - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - diff --git a/testprojects/26.environmentVariables/.vscode/launch.json b/testprojects/26.environmentVariables/.vscode/launch.json deleted file mode 100644 index 95dfde8f..00000000 --- a/testprojects/26.environmentVariables/.vscode/launch.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - // Use IntelliSense to learn about possible attributes. - // Hover to view descriptions of existing attributes. - // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 - "version": "0.2.0", - "configurations": [ - - { - "type": "java", - "name": "Debug (Launch)-EnvrionmentVariable<26.environmentVariables>", - "request": "launch", - "cwd": "${workspaceFolder}", - "console": "internalConsole", - "stopOnEntry": false, - "mainClass": "EnvrionmentVariable", - "args": "", - "projectName": "26.environmentVariables", - "env": { - "CUSTOM_ENV_FOR_TEST_PLAN": "This env is for test plan." - }, - "envFile": "${workspaceFolder}/.env" - } - ] -} \ No newline at end of file diff --git a/testprojects/26.environmentVariables/src/main/java/EnvrionmentVariable.java b/testprojects/26.environmentVariables/src/main/java/EnvrionmentVariable.java deleted file mode 100644 index 0e4f4325..00000000 --- a/testprojects/26.environmentVariables/src/main/java/EnvrionmentVariable.java +++ /dev/null @@ -1,10 +0,0 @@ -public class EnvrionmentVariable { - public static void main(String[] args) { - String customEnv = System.getenv("CUSTOM_ENV_FOR_TEST_PLAN"); - String systemPath = System.getenv("PATH"); - String envFromFile = System.getenv("FILE_ENV_FOR_TEST_PLAN"); - System.out.println(String.format("CustomEnv: %s", customEnv)); - System.out.println(String.format("SystemPath: %s", systemPath)); - System.out.println(String.format("FileEnv: %s", envFromFile)); - } -} \ No newline at end of file diff --git a/testprojects/27.runtimeClassEntry/pom.xml b/testprojects/27.runtimeClassEntry/pom.xml deleted file mode 100644 index c723fdf9..00000000 --- a/testprojects/27.runtimeClassEntry/pom.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - 4.0.0 - - com.github.kdvolder - hello-world-service - 0.0.1-SNAPSHOT - jar - - demo - Demo project for Spring Boot - - - org.springframework.boot - spring-boot-starter-parent - 2.0.0.RELEASE - - - - - UTF-8 - UTF-8 - 1.8 - - - - - org.springframework.boot - spring-boot-starter-actuator - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-test - test - - - org.springframework.boot - spring-boot-devtools - runtime - - - org.springframework.boot - spring-boot-configuration-processor - true - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - - - - - diff --git a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/Constants.java b/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/Constants.java deleted file mode 100644 index 20f31b5e..00000000 --- a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/Constants.java +++ /dev/null @@ -1,5 +0,0 @@ -package com.github.kdvolder.helloworldservice; - -public class Constants { - public static final String GREETER_ID = "greeets"; -} \ No newline at end of file diff --git a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/DemoApplication.java b/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/DemoApplication.java deleted file mode 100644 index d4d22015..00000000 --- a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/DemoApplication.java +++ /dev/null @@ -1,52 +0,0 @@ -package com.github.kdvolder.helloworldservice; - -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.context.annotation.Bean; -import org.springframework.scheduling.annotation.EnableScheduling; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RestController; - - -@SpringBootApplication -@RestController -@EnableScheduling -public class DemoApplication { - - public static class Bar { - } - - public static class Foo { - } - - @Autowired(required=false) void foo(@Qualifier("foobar")Foo foo) { - System.out.println("a Foo got injected"); - } - - @Autowired(required=false) void bar(@Qualifier("foobar")Bar bar) { - System.out.println("a Bar got injected"); - } - - public static void main(String[] args) { - SpringApplication.run(DemoApplication.class, args); - } - - @GetMapping(value="/") - public String mainpage() { - return "Hello "+System.getProperty("greeting"); - } - - - @GetMapping(value = "/hello/{name}") - public String getMethodName(@PathVariable String name) { - return "Hello "+name; - } - - - @Bean Foo foobar() { - return new Foo(); - } -} diff --git a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/Greeter.java b/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/Greeter.java deleted file mode 100644 index b0788c77..00000000 --- a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/Greeter.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.github.kdvolder.helloworldservice; - -import org.springframework.stereotype.Component; - - -@Component -public class Greeter { - - String greeting(String name) { - return "Hello "+name; - } - -} \ No newline at end of file diff --git a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/MyProperties.java b/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/MyProperties.java deleted file mode 100644 index b6443a7d..00000000 --- a/testprojects/27.runtimeClassEntry/src/main/java/com/github/kdvolder/helloworldservice/MyProperties.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.github.kdvolder.helloworldservice; - -import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.boot.context.properties.DeprecatedConfigurationProperty; - -@ConfigurationProperties("my") -public class MyProperties { - - private String hello; - - /** - * @return the hello - */ - @DeprecatedConfigurationProperty(replacement="new.my.hello") - public String getHello() { - return hello; - } - - /** - * @param hello the hello to set - */ - public void setHello(String hello) { - this.hello = hello; - } - -} \ No newline at end of file diff --git a/testprojects/27.runtimeClassEntry/src/main/resources/application.properties b/testprojects/27.runtimeClassEntry/src/main/resources/application.properties deleted file mode 100644 index 5c6675f9..00000000 --- a/testprojects/27.runtimeClassEntry/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ -my.hello=Yadaya diff --git a/testprojects/27.runtimeClassEntry/src/main/resources/application.yml b/testprojects/27.runtimeClassEntry/src/main/resources/application.yml deleted file mode 100644 index 0e4e2fc0..00000000 --- a/testprojects/27.runtimeClassEntry/src/main/resources/application.yml +++ /dev/null @@ -1,6 +0,0 @@ -my: - other: stuff - hello: blah -new: - my: - other: stuff \ No newline at end of file diff --git a/testprojects/27.runtimeClassEntry/src/test/java/com/github/kdvolder/helloworldservice/DemoApplicationTests.java b/testprojects/27.runtimeClassEntry/src/test/java/com/github/kdvolder/helloworldservice/DemoApplicationTests.java deleted file mode 100644 index d7ac76c4..00000000 --- a/testprojects/27.runtimeClassEntry/src/test/java/com/github/kdvolder/helloworldservice/DemoApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.github.kdvolder.helloworldservice; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class DemoApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/testprojects/28.debugfeatures/.vscode/settings.json b/testprojects/28.debugfeatures/.vscode/settings.json deleted file mode 100644 index c8d9896e..00000000 --- a/testprojects/28.debugfeatures/.vscode/settings.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - // "java.home": "C:\\Program Files\\Java\\jdk-12", - "java.debug.settings.showLogicalStructure": true, - "java.debug.settings.forceBuildBeforeLaunch": false -} \ No newline at end of file diff --git a/testprojects/28.debugfeatures/Java12Preview.java b/testprojects/28.debugfeatures/Java12Preview.java deleted file mode 100644 index 15714284..00000000 --- a/testprojects/28.debugfeatures/Java12Preview.java +++ /dev/null @@ -1,13 +0,0 @@ -public class Java12Preview { - - public static void main(String[] args) { - String week = "MONDAY"; - switch (week) { - case "MONDAY" -> { - System.out.println("This is Monday"); - } - case "TUESDAY" -> System.out.println("This is TUESDAY"); - default -> System.out.println("Unknown day."); - } - } -} \ No newline at end of file diff --git a/testprojects/28.debugfeatures/LogicalStructure.java b/testprojects/28.debugfeatures/LogicalStructure.java deleted file mode 100644 index 94434e5b..00000000 --- a/testprojects/28.debugfeatures/LogicalStructure.java +++ /dev/null @@ -1,40 +0,0 @@ -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -public class LogicalStructure { - - public static void main(String[] args) { - int[] arrays = new int[] { 1 }; - Object obj = new Object(); - Map emptyMap = new HashMap<>(); - Map bookset = new LinkedHashMap<>(); - bookset.put("Algorithm Introduction", 60); - bookset.put("Thinking in JAVA", 50); - - Map> bigStore = new HashMap<>(); - for (int i = 0; i < 100000; i++) { - bigStore.put("key" + i, bookset); - } - - List emptyList = new ArrayList<>(); - List list = Arrays.asList(new Foo("One"), new Foo("Two")); - List bigList = new ArrayList<>(); - for (int i = 0; i < 100000; i++) { - bigList.add("key" + i); - } - - System.out.println("Exit."); - } - - static class Foo { - private String name; - - Foo(String name) { - this.name = name; - } - } -} diff --git a/testprojects/28.debugfeatures/StackTrace.java b/testprojects/28.debugfeatures/StackTrace.java deleted file mode 100644 index 2be5ecae..00000000 --- a/testprojects/28.debugfeatures/StackTrace.java +++ /dev/null @@ -1,13 +0,0 @@ -public class StackTrace { - - public static void main(String[] args) { - System.out.println("begin."); - new RuntimeException("test").printStackTrace(); - - System.out.println("finish."); - new RuntimeException("test1").printStackTrace(System.out); - - System.out.println("exit"); - throw new RuntimeException("test2"); - } -} diff --git a/testprojects/28.debugfeatures/Variables.java b/testprojects/28.debugfeatures/Variables.java deleted file mode 100644 index 1a637866..00000000 --- a/testprojects/28.debugfeatures/Variables.java +++ /dev/null @@ -1,75 +0,0 @@ -import java.util.*; - -public class Variables { - - public static void main(String[] args) { - int[] a = new int[100000]; - Integer intObj = new Integer(20); - Float floatObj = new Float("1.354"); - Character character = new Character('a'); - Boolean bool = new Boolean(true); - - Map emptyMap = new HashMap<>(); - Map bookset = new LinkedHashMap<>(); - bookset.put("Algorithm Introduction", 60); - bookset.put("Thinking in JAVA", 50); - - Map> smallStore = new HashMap<>(); - smallStore.put("Computer Science", bookset); - - Map> bigStore = new HashMap<>(); - for (int i = 0; i < 100000; i++) { - bigStore.put("key" + i, bookset); - } - - List smallList = Arrays.asList("Algorithm Introduction"); - List bigList = new ArrayList<>(); - for (int i = 0; i < 100000; i++) { - bigList.add("key" + i); - } - - School school = new School(); - Person person = new Person(); - Person person1 = null; - Employee employee = new Employee(); - StringException stringException = new StringException(); - NullString nullString =new NullString(); - Date date = new Date(); - String name = "Test"; - System.out.println("Exit."); - } - - public static class School { - String name = "test"; - - } - - public static class Person { - String name = "jinbo"; - - @Override - public String toString() { - return "Person [name=" + name + "]"; - } - } - - public static class Employee extends Person { - - } - - public static class StringException { - - @Override - public String toString() { - throw new RuntimeException("Unimplemented method exception"); - } - } - - public static class NullString { - - @Override - public String toString() { - return null; - } - } -} diff --git a/testprojects/3.thread/.classpath b/testprojects/3.thread/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/3.thread/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/3.thread/.project b/testprojects/3.thread/.project deleted file mode 100644 index 65e43cdf..00000000 --- a/testprojects/3.thread/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 3.thread - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/3.thread/src/main/java/ThreadTest.java b/testprojects/3.thread/src/main/java/ThreadTest.java deleted file mode 100644 index 651d7b92..00000000 --- a/testprojects/3.thread/src/main/java/ThreadTest.java +++ /dev/null @@ -1,39 +0,0 @@ -import java.util.concurrent.atomic.AtomicInteger; - -public class ThreadTest { - public static void main(String[] args) throws Exception { - Object object = new Object(); - AtomicInteger ai = new AtomicInteger(); - Thread thread1 = new Thread(() -> { - for (;;) { - try { - synchronized(object) { - object.wait(); - } - System.out.println(String.format("Print %d in %d" , ai.incrementAndGet(), Thread.currentThread().getId())); - } catch (InterruptedException e) { - e.printStackTrace(); - break; - } - } - }); - Thread thread2 = new Thread(() -> { - for (;;) { - System.out.println(String.format("Print %d in %d" , ai.incrementAndGet(), Thread.currentThread().getId())); - synchronized(object) { - object.notify(); - } - try { - Thread.sleep(1000); - } catch (InterruptedException e) { - e.printStackTrace(); - break; - } - } - }); - thread1.start(); - thread2.start(); - thread1.join(); - thread2.join(); - } -} \ No newline at end of file diff --git a/testprojects/4.variable/.classpath b/testprojects/4.variable/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/4.variable/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/4.variable/.project b/testprojects/4.variable/.project deleted file mode 100644 index f3d75545..00000000 --- a/testprojects/4.variable/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 4.variable - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/4.variable/src/main/java/VariableTest.java b/testprojects/4.variable/src/main/java/VariableTest.java deleted file mode 100644 index 87980d05..00000000 --- a/testprojects/4.variable/src/main/java/VariableTest.java +++ /dev/null @@ -1,106 +0,0 @@ -import java.lang.reflect.Array; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -@SuppressWarnings("unused") -public class VariableTest extends Foo { - private static int x = 100; - - @SuppressWarnings("unchecked") - public static T[] createArray(Class type, int size) { - return (T[]) Array.newInstance(type, size); - } - - private int i = 19099; - @SuppressWarnings({ "rawtypes", "unchecked" }) - public void test() { - int[] arrays = new int[] { 1 }; - int i = 100; - i += 10; - String nullstr = null; - String str = "string test"; - for (int l = 0; l < 1000; l++) { - str += "a"; - } - Object obj = new Object(); - Object test = new VariableTest(); - Object a = new A(); - Class b = A.class; - int[] intarray = new int[] { 1, 2, 3 }; - List strList = new ArrayList<>(); - strList.add(str); - strList.add(null); - Map map = new HashMap(); - String[] t = new String[] { "hello" }; - - String[][] genericArray = createArray((Class) t.getClass(), 10); - String[][][] multi = new String[5][10][32]; - genericArray[0] = t; - map.put("a", 1); - i++; - ArrayList[] d = new ArrayList[0]; - System.out.println(d.length); - - GenericsFoo dd = new GenericsFoo(new Foo()); - ArrayList list = new ArrayList<>(); - list.add(new int[] { 1 }); - i++; - } - - public static void main(String[] args) { - new VariableTest().test(); - } -} - - -@SuppressWarnings("unused") -interface BBB { - static void test() { - int j = 0; - j++; - } -} - -class BaseA { - - class BBB { - } - - int baseI = 10; -} - -class A { - class BB { - public void test() { - A.this.new BB(); - } - - class CC { - class DD { - - } - } - } -} -@SuppressWarnings("unused") -class Foo { - private int x; -} - -class GenericsFoo { - private G x; - - public GenericsFoo(G x) { - this.x = x; - } - - public G getX() { - return x; - } - - public void setX(G x) { - this.x = x; - } -} \ No newline at end of file diff --git a/testprojects/5.breakpoint/.classpath b/testprojects/5.breakpoint/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/5.breakpoint/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/5.breakpoint/.project b/testprojects/5.breakpoint/.project deleted file mode 100644 index 3a2ca6ba..00000000 --- a/testprojects/5.breakpoint/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 5.breakpoint - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/5.breakpoint/src/main/java/BreakPointTest.java b/testprojects/5.breakpoint/src/main/java/BreakPointTest.java deleted file mode 100644 index 343d21a2..00000000 --- a/testprojects/5.breakpoint/src/main/java/BreakPointTest.java +++ /dev/null @@ -1,41 +0,0 @@ -class A { - void m() { - System.out.println("outer"); - } -} - -public class BreakPointTest { - public static void main(String[] args) { - new BreakPointTest().go(); - int j = 0; - new A() { - void m() { - System.out.println("anonymous"); - } - }.m(); - for (int i = 1; i <= 100; i++) { - if (i <= 99) { - j++; - } else { - System.out.println(j); - } - - } - } - - void go() { - new A().m(); - class A { - void m() { - System.out.println("inner"); - } - } - new A().m(); - } - - static class A { - void m() { - System.out.println("middle"); - } - } -} \ No newline at end of file diff --git a/testprojects/6.recursivefunction/.classpath b/testprojects/6.recursivefunction/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/6.recursivefunction/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/6.recursivefunction/.project b/testprojects/6.recursivefunction/.project deleted file mode 100644 index eb30c6f3..00000000 --- a/testprojects/6.recursivefunction/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 6.recursivefunction - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/6.recursivefunction/src/main/java/RecursiveTest.java b/testprojects/6.recursivefunction/src/main/java/RecursiveTest.java deleted file mode 100644 index f4d8646d..00000000 --- a/testprojects/6.recursivefunction/src/main/java/RecursiveTest.java +++ /dev/null @@ -1,14 +0,0 @@ -public class RecursiveTest { - public static void main(String[] args) { - testRecursion(1000); - } - - public static int testRecursion(int number) { - if (number == 1) { - return 1; - } else { - int result = 1 + testRecursion(number - 1); - return result; - } - } -} \ No newline at end of file diff --git a/testprojects/7.variableperformance/.classpath b/testprojects/7.variableperformance/.classpath deleted file mode 100644 index 56aca1ab..00000000 --- a/testprojects/7.variableperformance/.classpath +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/testprojects/7.variableperformance/.project b/testprojects/7.variableperformance/.project deleted file mode 100644 index 780c6568..00000000 --- a/testprojects/7.variableperformance/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 7.variableperformance - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/7.variableperformance/src/main/java/TooManyVariables.java b/testprojects/7.variableperformance/src/main/java/TooManyVariables.java deleted file mode 100644 index 9dd36ee1..00000000 --- a/testprojects/7.variableperformance/src/main/java/TooManyVariables.java +++ /dev/null @@ -1,5256 +0,0 @@ -import java.util.*; -public class TooManyVariables { - public void test() { - System.out.println("variable perf test."); - } - int i_0 = 0; - boolean j_0 = false; - String str_0 = new String("the 0-th string."); - int[] ia_0 = new int[]{0}; - Object obj_0 = new Object(); - List strList_0 = new ArrayList<>(); - String[][][] multi_0 = new String[5][10][32]; - int i_1 = 1; - boolean j_1 = true; - String str_1 = new String("the 1-th string."); - int[] ia_1 = new int[]{1}; - Object obj_1 = new Object(); - List strList_1 = new ArrayList<>(); - String[][][] multi_1 = new String[5][10][32]; - int i_2 = 2; - boolean j_2 = false; - String str_2 = new String("the 2-th string."); - int[] ia_2 = new int[]{2}; - Object obj_2 = new Object(); - List strList_2 = new ArrayList<>(); - String[][][] multi_2 = new String[5][10][32]; - int i_3 = 3; - boolean j_3 = true; - String str_3 = new String("the 3-th string."); - int[] ia_3 = new int[]{3}; - Object obj_3 = new Object(); - List strList_3 = new ArrayList<>(); - String[][][] multi_3 = new String[5][10][32]; - int i_4 = 4; - boolean j_4 = false; - String str_4 = new String("the 4-th string."); - int[] ia_4 = new int[]{4}; - Object obj_4 = new Object(); - List strList_4 = new ArrayList<>(); - String[][][] multi_4 = new String[5][10][32]; - int i_5 = 5; - boolean j_5 = true; - String str_5 = new String("the 5-th string."); - int[] ia_5 = new int[]{5}; - Object obj_5 = new Object(); - List strList_5 = new ArrayList<>(); - String[][][] multi_5 = new String[5][10][32]; - int i_6 = 6; - boolean j_6 = false; - String str_6 = new String("the 6-th string."); - int[] ia_6 = new int[]{6}; - Object obj_6 = new Object(); - List strList_6 = new ArrayList<>(); - String[][][] multi_6 = new String[5][10][32]; - int i_7 = 7; - boolean j_7 = true; - String str_7 = new String("the 7-th string."); - int[] ia_7 = new int[]{7}; - Object obj_7 = new Object(); - List strList_7 = new ArrayList<>(); - String[][][] multi_7 = new String[5][10][32]; - int i_8 = 8; - boolean j_8 = false; - String str_8 = new String("the 8-th string."); - int[] ia_8 = new int[]{8}; - Object obj_8 = new Object(); - List strList_8 = new ArrayList<>(); - String[][][] multi_8 = new String[5][10][32]; - int i_9 = 9; - boolean j_9 = true; - String str_9 = new String("the 9-th string."); - int[] ia_9 = new int[]{9}; - Object obj_9 = new Object(); - List strList_9 = new ArrayList<>(); - String[][][] multi_9 = new String[5][10][32]; - int i_10 = 10; - boolean j_10 = false; - String str_10 = new String("the 10-th string."); - int[] ia_10 = new int[]{10}; - Object obj_10 = new Object(); - List strList_10 = new ArrayList<>(); - String[][][] multi_10 = new String[5][10][32]; - int i_11 = 11; - boolean j_11 = true; - String str_11 = new String("the 11-th string."); - int[] ia_11 = new int[]{11}; - Object obj_11 = new Object(); - List strList_11 = new ArrayList<>(); - String[][][] multi_11 = new String[5][10][32]; - int i_12 = 12; - boolean j_12 = false; - String str_12 = new String("the 12-th string."); - int[] ia_12 = new int[]{12}; - Object obj_12 = new Object(); - List strList_12 = new ArrayList<>(); - String[][][] multi_12 = new String[5][10][32]; - int i_13 = 13; - boolean j_13 = true; - String str_13 = new String("the 13-th string."); - int[] ia_13 = new int[]{13}; - Object obj_13 = new Object(); - List strList_13 = new ArrayList<>(); - String[][][] multi_13 = new String[5][10][32]; - int i_14 = 14; - boolean j_14 = false; - String str_14 = new String("the 14-th string."); - int[] ia_14 = new int[]{14}; - Object obj_14 = new Object(); - List strList_14 = new ArrayList<>(); - String[][][] multi_14 = new String[5][10][32]; - int i_15 = 15; - boolean j_15 = true; - String str_15 = new String("the 15-th string."); - int[] ia_15 = new int[]{15}; - Object obj_15 = new Object(); - List strList_15 = new ArrayList<>(); - String[][][] multi_15 = new String[5][10][32]; - int i_16 = 16; - boolean j_16 = false; - String str_16 = new String("the 16-th string."); - int[] ia_16 = new int[]{16}; - Object obj_16 = new Object(); - List strList_16 = new ArrayList<>(); - String[][][] multi_16 = new String[5][10][32]; - int i_17 = 17; - boolean j_17 = true; - String str_17 = new String("the 17-th string."); - int[] ia_17 = new int[]{17}; - Object obj_17 = new Object(); - List strList_17 = new ArrayList<>(); - String[][][] multi_17 = new String[5][10][32]; - int i_18 = 18; - boolean j_18 = false; - String str_18 = new String("the 18-th string."); - int[] ia_18 = new int[]{18}; - Object obj_18 = new Object(); - List strList_18 = new ArrayList<>(); - String[][][] multi_18 = new String[5][10][32]; - int i_19 = 19; - boolean j_19 = true; - String str_19 = new String("the 19-th string."); - int[] ia_19 = new int[]{19}; - Object obj_19 = new Object(); - List strList_19 = new ArrayList<>(); - String[][][] multi_19 = new String[5][10][32]; - int i_20 = 20; - boolean j_20 = false; - String str_20 = new String("the 20-th string."); - int[] ia_20 = new int[]{20}; - Object obj_20 = new Object(); - List strList_20 = new ArrayList<>(); - String[][][] multi_20 = new String[5][10][32]; - int i_21 = 21; - boolean j_21 = true; - String str_21 = new String("the 21-th string."); - int[] ia_21 = new int[]{21}; - Object obj_21 = new Object(); - List strList_21 = new ArrayList<>(); - String[][][] multi_21 = new String[5][10][32]; - int i_22 = 22; - boolean j_22 = false; - String str_22 = new String("the 22-th string."); - int[] ia_22 = new int[]{22}; - Object obj_22 = new Object(); - List strList_22 = new ArrayList<>(); - String[][][] multi_22 = new String[5][10][32]; - int i_23 = 23; - boolean j_23 = true; - String str_23 = new String("the 23-th string."); - int[] ia_23 = new int[]{23}; - Object obj_23 = new Object(); - List strList_23 = new ArrayList<>(); - String[][][] multi_23 = new String[5][10][32]; - int i_24 = 24; - boolean j_24 = false; - String str_24 = new String("the 24-th string."); - int[] ia_24 = new int[]{24}; - Object obj_24 = new Object(); - List strList_24 = new ArrayList<>(); - String[][][] multi_24 = new String[5][10][32]; - int i_25 = 25; - boolean j_25 = true; - String str_25 = new String("the 25-th string."); - int[] ia_25 = new int[]{25}; - Object obj_25 = new Object(); - List strList_25 = new ArrayList<>(); - String[][][] multi_25 = new String[5][10][32]; - int i_26 = 26; - boolean j_26 = false; - String str_26 = new String("the 26-th string."); - int[] ia_26 = new int[]{26}; - Object obj_26 = new Object(); - List strList_26 = new ArrayList<>(); - String[][][] multi_26 = new String[5][10][32]; - int i_27 = 27; - boolean j_27 = true; - String str_27 = new String("the 27-th string."); - int[] ia_27 = new int[]{27}; - Object obj_27 = new Object(); - List strList_27 = new ArrayList<>(); - String[][][] multi_27 = new String[5][10][32]; - int i_28 = 28; - boolean j_28 = false; - String str_28 = new String("the 28-th string."); - int[] ia_28 = new int[]{28}; - Object obj_28 = new Object(); - List strList_28 = new ArrayList<>(); - String[][][] multi_28 = new String[5][10][32]; - int i_29 = 29; - boolean j_29 = true; - String str_29 = new String("the 29-th string."); - int[] ia_29 = new int[]{29}; - Object obj_29 = new Object(); - List strList_29 = new ArrayList<>(); - String[][][] multi_29 = new String[5][10][32]; - int i_30 = 30; - boolean j_30 = false; - String str_30 = new String("the 30-th string."); - int[] ia_30 = new int[]{30}; - Object obj_30 = new Object(); - List strList_30 = new ArrayList<>(); - String[][][] multi_30 = new String[5][10][32]; - int i_31 = 31; - boolean j_31 = true; - String str_31 = new String("the 31-th string."); - int[] ia_31 = new int[]{31}; - Object obj_31 = new Object(); - List strList_31 = new ArrayList<>(); - String[][][] multi_31 = new String[5][10][32]; - int i_32 = 32; - boolean j_32 = false; - String str_32 = new String("the 32-th string."); - int[] ia_32 = new int[]{32}; - Object obj_32 = new Object(); - List strList_32 = new ArrayList<>(); - String[][][] multi_32 = new String[5][10][32]; - int i_33 = 33; - boolean j_33 = true; - String str_33 = new String("the 33-th string."); - int[] ia_33 = new int[]{33}; - Object obj_33 = new Object(); - List strList_33 = new ArrayList<>(); - String[][][] multi_33 = new String[5][10][32]; - int i_34 = 34; - boolean j_34 = false; - String str_34 = new String("the 34-th string."); - int[] ia_34 = new int[]{34}; - Object obj_34 = new Object(); - List strList_34 = new ArrayList<>(); - String[][][] multi_34 = new String[5][10][32]; - int i_35 = 35; - boolean j_35 = true; - String str_35 = new String("the 35-th string."); - int[] ia_35 = new int[]{35}; - Object obj_35 = new Object(); - List strList_35 = new ArrayList<>(); - String[][][] multi_35 = new String[5][10][32]; - int i_36 = 36; - boolean j_36 = false; - String str_36 = new String("the 36-th string."); - int[] ia_36 = new int[]{36}; - Object obj_36 = new Object(); - List strList_36 = new ArrayList<>(); - String[][][] multi_36 = new String[5][10][32]; - int i_37 = 37; - boolean j_37 = true; - String str_37 = new String("the 37-th string."); - int[] ia_37 = new int[]{37}; - Object obj_37 = new Object(); - List strList_37 = new ArrayList<>(); - String[][][] multi_37 = new String[5][10][32]; - int i_38 = 38; - boolean j_38 = false; - String str_38 = new String("the 38-th string."); - int[] ia_38 = new int[]{38}; - Object obj_38 = new Object(); - List strList_38 = new ArrayList<>(); - String[][][] multi_38 = new String[5][10][32]; - int i_39 = 39; - boolean j_39 = true; - String str_39 = new String("the 39-th string."); - int[] ia_39 = new int[]{39}; - Object obj_39 = new Object(); - List strList_39 = new ArrayList<>(); - String[][][] multi_39 = new String[5][10][32]; - int i_40 = 40; - boolean j_40 = false; - String str_40 = new String("the 40-th string."); - int[] ia_40 = new int[]{40}; - Object obj_40 = new Object(); - List strList_40 = new ArrayList<>(); - String[][][] multi_40 = new String[5][10][32]; - int i_41 = 41; - boolean j_41 = true; - String str_41 = new String("the 41-th string."); - int[] ia_41 = new int[]{41}; - Object obj_41 = new Object(); - List strList_41 = new ArrayList<>(); - String[][][] multi_41 = new String[5][10][32]; - int i_42 = 42; - boolean j_42 = false; - String str_42 = new String("the 42-th string."); - int[] ia_42 = new int[]{42}; - Object obj_42 = new Object(); - List strList_42 = new ArrayList<>(); - String[][][] multi_42 = new String[5][10][32]; - int i_43 = 43; - boolean j_43 = true; - String str_43 = new String("the 43-th string."); - int[] ia_43 = new int[]{43}; - Object obj_43 = new Object(); - List strList_43 = new ArrayList<>(); - String[][][] multi_43 = new String[5][10][32]; - int i_44 = 44; - boolean j_44 = false; - String str_44 = new String("the 44-th string."); - int[] ia_44 = new int[]{44}; - Object obj_44 = new Object(); - List strList_44 = new ArrayList<>(); - String[][][] multi_44 = new String[5][10][32]; - int i_45 = 45; - boolean j_45 = true; - String str_45 = new String("the 45-th string."); - int[] ia_45 = new int[]{45}; - Object obj_45 = new Object(); - List strList_45 = new ArrayList<>(); - String[][][] multi_45 = new String[5][10][32]; - int i_46 = 46; - boolean j_46 = false; - String str_46 = new String("the 46-th string."); - int[] ia_46 = new int[]{46}; - Object obj_46 = new Object(); - List strList_46 = new ArrayList<>(); - String[][][] multi_46 = new String[5][10][32]; - int i_47 = 47; - boolean j_47 = true; - String str_47 = new String("the 47-th string."); - int[] ia_47 = new int[]{47}; - Object obj_47 = new Object(); - List strList_47 = new ArrayList<>(); - String[][][] multi_47 = new String[5][10][32]; - int i_48 = 48; - boolean j_48 = false; - String str_48 = new String("the 48-th string."); - int[] ia_48 = new int[]{48}; - Object obj_48 = new Object(); - List strList_48 = new ArrayList<>(); - String[][][] multi_48 = new String[5][10][32]; - int i_49 = 49; - boolean j_49 = true; - String str_49 = new String("the 49-th string."); - int[] ia_49 = new int[]{49}; - Object obj_49 = new Object(); - List strList_49 = new ArrayList<>(); - String[][][] multi_49 = new String[5][10][32]; - int i_50 = 50; - boolean j_50 = false; - String str_50 = new String("the 50-th string."); - int[] ia_50 = new int[]{50}; - Object obj_50 = new Object(); - List strList_50 = new ArrayList<>(); - String[][][] multi_50 = new String[5][10][32]; - int i_51 = 51; - boolean j_51 = true; - String str_51 = new String("the 51-th string."); - int[] ia_51 = new int[]{51}; - Object obj_51 = new Object(); - List strList_51 = new ArrayList<>(); - String[][][] multi_51 = new String[5][10][32]; - int i_52 = 52; - boolean j_52 = false; - String str_52 = new String("the 52-th string."); - int[] ia_52 = new int[]{52}; - Object obj_52 = new Object(); - List strList_52 = new ArrayList<>(); - String[][][] multi_52 = new String[5][10][32]; - int i_53 = 53; - boolean j_53 = true; - String str_53 = new String("the 53-th string."); - int[] ia_53 = new int[]{53}; - Object obj_53 = new Object(); - List strList_53 = new ArrayList<>(); - String[][][] multi_53 = new String[5][10][32]; - int i_54 = 54; - boolean j_54 = false; - String str_54 = new String("the 54-th string."); - int[] ia_54 = new int[]{54}; - Object obj_54 = new Object(); - List strList_54 = new ArrayList<>(); - String[][][] multi_54 = new String[5][10][32]; - int i_55 = 55; - boolean j_55 = true; - String str_55 = new String("the 55-th string."); - int[] ia_55 = new int[]{55}; - Object obj_55 = new Object(); - List strList_55 = new ArrayList<>(); - String[][][] multi_55 = new String[5][10][32]; - int i_56 = 56; - boolean j_56 = false; - String str_56 = new String("the 56-th string."); - int[] ia_56 = new int[]{56}; - Object obj_56 = new Object(); - List strList_56 = new ArrayList<>(); - String[][][] multi_56 = new String[5][10][32]; - int i_57 = 57; - boolean j_57 = true; - String str_57 = new String("the 57-th string."); - int[] ia_57 = new int[]{57}; - Object obj_57 = new Object(); - List strList_57 = new ArrayList<>(); - String[][][] multi_57 = new String[5][10][32]; - int i_58 = 58; - boolean j_58 = false; - String str_58 = new String("the 58-th string."); - int[] ia_58 = new int[]{58}; - Object obj_58 = new Object(); - List strList_58 = new ArrayList<>(); - String[][][] multi_58 = new String[5][10][32]; - int i_59 = 59; - boolean j_59 = true; - String str_59 = new String("the 59-th string."); - int[] ia_59 = new int[]{59}; - Object obj_59 = new Object(); - List strList_59 = new ArrayList<>(); - String[][][] multi_59 = new String[5][10][32]; - int i_60 = 60; - boolean j_60 = false; - String str_60 = new String("the 60-th string."); - int[] ia_60 = new int[]{60}; - Object obj_60 = new Object(); - List strList_60 = new ArrayList<>(); - String[][][] multi_60 = new String[5][10][32]; - int i_61 = 61; - boolean j_61 = true; - String str_61 = new String("the 61-th string."); - int[] ia_61 = new int[]{61}; - Object obj_61 = new Object(); - List strList_61 = new ArrayList<>(); - String[][][] multi_61 = new String[5][10][32]; - int i_62 = 62; - boolean j_62 = false; - String str_62 = new String("the 62-th string."); - int[] ia_62 = new int[]{62}; - Object obj_62 = new Object(); - List strList_62 = new ArrayList<>(); - String[][][] multi_62 = new String[5][10][32]; - int i_63 = 63; - boolean j_63 = true; - String str_63 = new String("the 63-th string."); - int[] ia_63 = new int[]{63}; - Object obj_63 = new Object(); - List strList_63 = new ArrayList<>(); - String[][][] multi_63 = new String[5][10][32]; - int i_64 = 64; - boolean j_64 = false; - String str_64 = new String("the 64-th string."); - int[] ia_64 = new int[]{64}; - Object obj_64 = new Object(); - List strList_64 = new ArrayList<>(); - String[][][] multi_64 = new String[5][10][32]; - int i_65 = 65; - boolean j_65 = true; - String str_65 = new String("the 65-th string."); - int[] ia_65 = new int[]{65}; - Object obj_65 = new Object(); - List strList_65 = new ArrayList<>(); - String[][][] multi_65 = new String[5][10][32]; - int i_66 = 66; - boolean j_66 = false; - String str_66 = new String("the 66-th string."); - int[] ia_66 = new int[]{66}; - Object obj_66 = new Object(); - List strList_66 = new ArrayList<>(); - String[][][] multi_66 = new String[5][10][32]; - int i_67 = 67; - boolean j_67 = true; - String str_67 = new String("the 67-th string."); - int[] ia_67 = new int[]{67}; - Object obj_67 = new Object(); - List strList_67 = new ArrayList<>(); - String[][][] multi_67 = new String[5][10][32]; - int i_68 = 68; - boolean j_68 = false; - String str_68 = new String("the 68-th string."); - int[] ia_68 = new int[]{68}; - Object obj_68 = new Object(); - List strList_68 = new ArrayList<>(); - String[][][] multi_68 = new String[5][10][32]; - int i_69 = 69; - boolean j_69 = true; - String str_69 = new String("the 69-th string."); - int[] ia_69 = new int[]{69}; - Object obj_69 = new Object(); - List strList_69 = new ArrayList<>(); - String[][][] multi_69 = new String[5][10][32]; - int i_70 = 70; - boolean j_70 = false; - String str_70 = new String("the 70-th string."); - int[] ia_70 = new int[]{70}; - Object obj_70 = new Object(); - List strList_70 = new ArrayList<>(); - String[][][] multi_70 = new String[5][10][32]; - int i_71 = 71; - boolean j_71 = true; - String str_71 = new String("the 71-th string."); - int[] ia_71 = new int[]{71}; - Object obj_71 = new Object(); - List strList_71 = new ArrayList<>(); - String[][][] multi_71 = new String[5][10][32]; - int i_72 = 72; - boolean j_72 = false; - String str_72 = new String("the 72-th string."); - int[] ia_72 = new int[]{72}; - Object obj_72 = new Object(); - List strList_72 = new ArrayList<>(); - String[][][] multi_72 = new String[5][10][32]; - int i_73 = 73; - boolean j_73 = true; - String str_73 = new String("the 73-th string."); - int[] ia_73 = new int[]{73}; - Object obj_73 = new Object(); - List strList_73 = new ArrayList<>(); - String[][][] multi_73 = new String[5][10][32]; - int i_74 = 74; - boolean j_74 = false; - String str_74 = new String("the 74-th string."); - int[] ia_74 = new int[]{74}; - Object obj_74 = new Object(); - List strList_74 = new ArrayList<>(); - String[][][] multi_74 = new String[5][10][32]; - int i_75 = 75; - boolean j_75 = true; - String str_75 = new String("the 75-th string."); - int[] ia_75 = new int[]{75}; - Object obj_75 = new Object(); - List strList_75 = new ArrayList<>(); - String[][][] multi_75 = new String[5][10][32]; - int i_76 = 76; - boolean j_76 = false; - String str_76 = new String("the 76-th string."); - int[] ia_76 = new int[]{76}; - Object obj_76 = new Object(); - List strList_76 = new ArrayList<>(); - String[][][] multi_76 = new String[5][10][32]; - int i_77 = 77; - boolean j_77 = true; - String str_77 = new String("the 77-th string."); - int[] ia_77 = new int[]{77}; - Object obj_77 = new Object(); - List strList_77 = new ArrayList<>(); - String[][][] multi_77 = new String[5][10][32]; - int i_78 = 78; - boolean j_78 = false; - String str_78 = new String("the 78-th string."); - int[] ia_78 = new int[]{78}; - Object obj_78 = new Object(); - List strList_78 = new ArrayList<>(); - String[][][] multi_78 = new String[5][10][32]; - int i_79 = 79; - boolean j_79 = true; - String str_79 = new String("the 79-th string."); - int[] ia_79 = new int[]{79}; - Object obj_79 = new Object(); - List strList_79 = new ArrayList<>(); - String[][][] multi_79 = new String[5][10][32]; - int i_80 = 80; - boolean j_80 = false; - String str_80 = new String("the 80-th string."); - int[] ia_80 = new int[]{80}; - Object obj_80 = new Object(); - List strList_80 = new ArrayList<>(); - String[][][] multi_80 = new String[5][10][32]; - int i_81 = 81; - boolean j_81 = true; - String str_81 = new String("the 81-th string."); - int[] ia_81 = new int[]{81}; - Object obj_81 = new Object(); - List strList_81 = new ArrayList<>(); - String[][][] multi_81 = new String[5][10][32]; - int i_82 = 82; - boolean j_82 = false; - String str_82 = new String("the 82-th string."); - int[] ia_82 = new int[]{82}; - Object obj_82 = new Object(); - List strList_82 = new ArrayList<>(); - String[][][] multi_82 = new String[5][10][32]; - int i_83 = 83; - boolean j_83 = true; - String str_83 = new String("the 83-th string."); - int[] ia_83 = new int[]{83}; - Object obj_83 = new Object(); - List strList_83 = new ArrayList<>(); - String[][][] multi_83 = new String[5][10][32]; - int i_84 = 84; - boolean j_84 = false; - String str_84 = new String("the 84-th string."); - int[] ia_84 = new int[]{84}; - Object obj_84 = new Object(); - List strList_84 = new ArrayList<>(); - String[][][] multi_84 = new String[5][10][32]; - int i_85 = 85; - boolean j_85 = true; - String str_85 = new String("the 85-th string."); - int[] ia_85 = new int[]{85}; - Object obj_85 = new Object(); - List strList_85 = new ArrayList<>(); - String[][][] multi_85 = new String[5][10][32]; - int i_86 = 86; - boolean j_86 = false; - String str_86 = new String("the 86-th string."); - int[] ia_86 = new int[]{86}; - Object obj_86 = new Object(); - List strList_86 = new ArrayList<>(); - String[][][] multi_86 = new String[5][10][32]; - int i_87 = 87; - boolean j_87 = true; - String str_87 = new String("the 87-th string."); - int[] ia_87 = new int[]{87}; - Object obj_87 = new Object(); - List strList_87 = new ArrayList<>(); - String[][][] multi_87 = new String[5][10][32]; - int i_88 = 88; - boolean j_88 = false; - String str_88 = new String("the 88-th string."); - int[] ia_88 = new int[]{88}; - Object obj_88 = new Object(); - List strList_88 = new ArrayList<>(); - String[][][] multi_88 = new String[5][10][32]; - int i_89 = 89; - boolean j_89 = true; - String str_89 = new String("the 89-th string."); - int[] ia_89 = new int[]{89}; - Object obj_89 = new Object(); - List strList_89 = new ArrayList<>(); - String[][][] multi_89 = new String[5][10][32]; - int i_90 = 90; - boolean j_90 = false; - String str_90 = new String("the 90-th string."); - int[] ia_90 = new int[]{90}; - Object obj_90 = new Object(); - List strList_90 = new ArrayList<>(); - String[][][] multi_90 = new String[5][10][32]; - int i_91 = 91; - boolean j_91 = true; - String str_91 = new String("the 91-th string."); - int[] ia_91 = new int[]{91}; - Object obj_91 = new Object(); - List strList_91 = new ArrayList<>(); - String[][][] multi_91 = new String[5][10][32]; - int i_92 = 92; - boolean j_92 = false; - String str_92 = new String("the 92-th string."); - int[] ia_92 = new int[]{92}; - Object obj_92 = new Object(); - List strList_92 = new ArrayList<>(); - String[][][] multi_92 = new String[5][10][32]; - int i_93 = 93; - boolean j_93 = true; - String str_93 = new String("the 93-th string."); - int[] ia_93 = new int[]{93}; - Object obj_93 = new Object(); - List strList_93 = new ArrayList<>(); - String[][][] multi_93 = new String[5][10][32]; - int i_94 = 94; - boolean j_94 = false; - String str_94 = new String("the 94-th string."); - int[] ia_94 = new int[]{94}; - Object obj_94 = new Object(); - List strList_94 = new ArrayList<>(); - String[][][] multi_94 = new String[5][10][32]; - int i_95 = 95; - boolean j_95 = true; - String str_95 = new String("the 95-th string."); - int[] ia_95 = new int[]{95}; - Object obj_95 = new Object(); - List strList_95 = new ArrayList<>(); - String[][][] multi_95 = new String[5][10][32]; - int i_96 = 96; - boolean j_96 = false; - String str_96 = new String("the 96-th string."); - int[] ia_96 = new int[]{96}; - Object obj_96 = new Object(); - List strList_96 = new ArrayList<>(); - String[][][] multi_96 = new String[5][10][32]; - int i_97 = 97; - boolean j_97 = true; - String str_97 = new String("the 97-th string."); - int[] ia_97 = new int[]{97}; - Object obj_97 = new Object(); - List strList_97 = new ArrayList<>(); - String[][][] multi_97 = new String[5][10][32]; - int i_98 = 98; - boolean j_98 = false; - String str_98 = new String("the 98-th string."); - int[] ia_98 = new int[]{98}; - Object obj_98 = new Object(); - List strList_98 = new ArrayList<>(); - String[][][] multi_98 = new String[5][10][32]; - int i_99 = 99; - boolean j_99 = true; - String str_99 = new String("the 99-th string."); - int[] ia_99 = new int[]{99}; - Object obj_99 = new Object(); - List strList_99 = new ArrayList<>(); - String[][][] multi_99 = new String[5][10][32]; - int i_100 = 100; - boolean j_100 = false; - String str_100 = new String("the 100-th string."); - int[] ia_100 = new int[]{100}; - Object obj_100 = new Object(); - List strList_100 = new ArrayList<>(); - String[][][] multi_100 = new String[5][10][32]; - int i_101 = 101; - boolean j_101 = true; - String str_101 = new String("the 101-th string."); - int[] ia_101 = new int[]{101}; - Object obj_101 = new Object(); - List strList_101 = new ArrayList<>(); - String[][][] multi_101 = new String[5][10][32]; - int i_102 = 102; - boolean j_102 = false; - String str_102 = new String("the 102-th string."); - int[] ia_102 = new int[]{102}; - Object obj_102 = new Object(); - List strList_102 = new ArrayList<>(); - String[][][] multi_102 = new String[5][10][32]; - int i_103 = 103; - boolean j_103 = true; - String str_103 = new String("the 103-th string."); - int[] ia_103 = new int[]{103}; - Object obj_103 = new Object(); - List strList_103 = new ArrayList<>(); - String[][][] multi_103 = new String[5][10][32]; - int i_104 = 104; - boolean j_104 = false; - String str_104 = new String("the 104-th string."); - int[] ia_104 = new int[]{104}; - Object obj_104 = new Object(); - List strList_104 = new ArrayList<>(); - String[][][] multi_104 = new String[5][10][32]; - int i_105 = 105; - boolean j_105 = true; - String str_105 = new String("the 105-th string."); - int[] ia_105 = new int[]{105}; - Object obj_105 = new Object(); - List strList_105 = new ArrayList<>(); - String[][][] multi_105 = new String[5][10][32]; - int i_106 = 106; - boolean j_106 = false; - String str_106 = new String("the 106-th string."); - int[] ia_106 = new int[]{106}; - Object obj_106 = new Object(); - List strList_106 = new ArrayList<>(); - String[][][] multi_106 = new String[5][10][32]; - int i_107 = 107; - boolean j_107 = true; - String str_107 = new String("the 107-th string."); - int[] ia_107 = new int[]{107}; - Object obj_107 = new Object(); - List strList_107 = new ArrayList<>(); - String[][][] multi_107 = new String[5][10][32]; - int i_108 = 108; - boolean j_108 = false; - String str_108 = new String("the 108-th string."); - int[] ia_108 = new int[]{108}; - Object obj_108 = new Object(); - List strList_108 = new ArrayList<>(); - String[][][] multi_108 = new String[5][10][32]; - int i_109 = 109; - boolean j_109 = true; - String str_109 = new String("the 109-th string."); - int[] ia_109 = new int[]{109}; - Object obj_109 = new Object(); - List strList_109 = new ArrayList<>(); - String[][][] multi_109 = new String[5][10][32]; - int i_110 = 110; - boolean j_110 = false; - String str_110 = new String("the 110-th string."); - int[] ia_110 = new int[]{110}; - Object obj_110 = new Object(); - List strList_110 = new ArrayList<>(); - String[][][] multi_110 = new String[5][10][32]; - int i_111 = 111; - boolean j_111 = true; - String str_111 = new String("the 111-th string."); - int[] ia_111 = new int[]{111}; - Object obj_111 = new Object(); - List strList_111 = new ArrayList<>(); - String[][][] multi_111 = new String[5][10][32]; - int i_112 = 112; - boolean j_112 = false; - String str_112 = new String("the 112-th string."); - int[] ia_112 = new int[]{112}; - Object obj_112 = new Object(); - List strList_112 = new ArrayList<>(); - String[][][] multi_112 = new String[5][10][32]; - int i_113 = 113; - boolean j_113 = true; - String str_113 = new String("the 113-th string."); - int[] ia_113 = new int[]{113}; - Object obj_113 = new Object(); - List strList_113 = new ArrayList<>(); - String[][][] multi_113 = new String[5][10][32]; - int i_114 = 114; - boolean j_114 = false; - String str_114 = new String("the 114-th string."); - int[] ia_114 = new int[]{114}; - Object obj_114 = new Object(); - List strList_114 = new ArrayList<>(); - String[][][] multi_114 = new String[5][10][32]; - int i_115 = 115; - boolean j_115 = true; - String str_115 = new String("the 115-th string."); - int[] ia_115 = new int[]{115}; - Object obj_115 = new Object(); - List strList_115 = new ArrayList<>(); - String[][][] multi_115 = new String[5][10][32]; - int i_116 = 116; - boolean j_116 = false; - String str_116 = new String("the 116-th string."); - int[] ia_116 = new int[]{116}; - Object obj_116 = new Object(); - List strList_116 = new ArrayList<>(); - String[][][] multi_116 = new String[5][10][32]; - int i_117 = 117; - boolean j_117 = true; - String str_117 = new String("the 117-th string."); - int[] ia_117 = new int[]{117}; - Object obj_117 = new Object(); - List strList_117 = new ArrayList<>(); - String[][][] multi_117 = new String[5][10][32]; - int i_118 = 118; - boolean j_118 = false; - String str_118 = new String("the 118-th string."); - int[] ia_118 = new int[]{118}; - Object obj_118 = new Object(); - List strList_118 = new ArrayList<>(); - String[][][] multi_118 = new String[5][10][32]; - int i_119 = 119; - boolean j_119 = true; - String str_119 = new String("the 119-th string."); - int[] ia_119 = new int[]{119}; - Object obj_119 = new Object(); - List strList_119 = new ArrayList<>(); - String[][][] multi_119 = new String[5][10][32]; - int i_120 = 120; - boolean j_120 = false; - String str_120 = new String("the 120-th string."); - int[] ia_120 = new int[]{120}; - Object obj_120 = new Object(); - List strList_120 = new ArrayList<>(); - String[][][] multi_120 = new String[5][10][32]; - int i_121 = 121; - boolean j_121 = true; - String str_121 = new String("the 121-th string."); - int[] ia_121 = new int[]{121}; - Object obj_121 = new Object(); - List strList_121 = new ArrayList<>(); - String[][][] multi_121 = new String[5][10][32]; - int i_122 = 122; - boolean j_122 = false; - String str_122 = new String("the 122-th string."); - int[] ia_122 = new int[]{122}; - Object obj_122 = new Object(); - List strList_122 = new ArrayList<>(); - String[][][] multi_122 = new String[5][10][32]; - int i_123 = 123; - boolean j_123 = true; - String str_123 = new String("the 123-th string."); - int[] ia_123 = new int[]{123}; - Object obj_123 = new Object(); - List strList_123 = new ArrayList<>(); - String[][][] multi_123 = new String[5][10][32]; - int i_124 = 124; - boolean j_124 = false; - String str_124 = new String("the 124-th string."); - int[] ia_124 = new int[]{124}; - Object obj_124 = new Object(); - List strList_124 = new ArrayList<>(); - String[][][] multi_124 = new String[5][10][32]; - int i_125 = 125; - boolean j_125 = true; - String str_125 = new String("the 125-th string."); - int[] ia_125 = new int[]{125}; - Object obj_125 = new Object(); - List strList_125 = new ArrayList<>(); - String[][][] multi_125 = new String[5][10][32]; - int i_126 = 126; - boolean j_126 = false; - String str_126 = new String("the 126-th string."); - int[] ia_126 = new int[]{126}; - Object obj_126 = new Object(); - List strList_126 = new ArrayList<>(); - String[][][] multi_126 = new String[5][10][32]; - int i_127 = 127; - boolean j_127 = true; - String str_127 = new String("the 127-th string."); - int[] ia_127 = new int[]{127}; - Object obj_127 = new Object(); - List strList_127 = new ArrayList<>(); - String[][][] multi_127 = new String[5][10][32]; - int i_128 = 128; - boolean j_128 = false; - String str_128 = new String("the 128-th string."); - int[] ia_128 = new int[]{128}; - Object obj_128 = new Object(); - List strList_128 = new ArrayList<>(); - String[][][] multi_128 = new String[5][10][32]; - int i_129 = 129; - boolean j_129 = true; - String str_129 = new String("the 129-th string."); - int[] ia_129 = new int[]{129}; - Object obj_129 = new Object(); - List strList_129 = new ArrayList<>(); - String[][][] multi_129 = new String[5][10][32]; - int i_130 = 130; - boolean j_130 = false; - String str_130 = new String("the 130-th string."); - int[] ia_130 = new int[]{130}; - Object obj_130 = new Object(); - List strList_130 = new ArrayList<>(); - String[][][] multi_130 = new String[5][10][32]; - int i_131 = 131; - boolean j_131 = true; - String str_131 = new String("the 131-th string."); - int[] ia_131 = new int[]{131}; - Object obj_131 = new Object(); - List strList_131 = new ArrayList<>(); - String[][][] multi_131 = new String[5][10][32]; - int i_132 = 132; - boolean j_132 = false; - String str_132 = new String("the 132-th string."); - int[] ia_132 = new int[]{132}; - Object obj_132 = new Object(); - List strList_132 = new ArrayList<>(); - String[][][] multi_132 = new String[5][10][32]; - int i_133 = 133; - boolean j_133 = true; - String str_133 = new String("the 133-th string."); - int[] ia_133 = new int[]{133}; - Object obj_133 = new Object(); - List strList_133 = new ArrayList<>(); - String[][][] multi_133 = new String[5][10][32]; - int i_134 = 134; - boolean j_134 = false; - String str_134 = new String("the 134-th string."); - int[] ia_134 = new int[]{134}; - Object obj_134 = new Object(); - List strList_134 = new ArrayList<>(); - String[][][] multi_134 = new String[5][10][32]; - int i_135 = 135; - boolean j_135 = true; - String str_135 = new String("the 135-th string."); - int[] ia_135 = new int[]{135}; - Object obj_135 = new Object(); - List strList_135 = new ArrayList<>(); - String[][][] multi_135 = new String[5][10][32]; - int i_136 = 136; - boolean j_136 = false; - String str_136 = new String("the 136-th string."); - int[] ia_136 = new int[]{136}; - Object obj_136 = new Object(); - List strList_136 = new ArrayList<>(); - String[][][] multi_136 = new String[5][10][32]; - int i_137 = 137; - boolean j_137 = true; - String str_137 = new String("the 137-th string."); - int[] ia_137 = new int[]{137}; - Object obj_137 = new Object(); - List strList_137 = new ArrayList<>(); - String[][][] multi_137 = new String[5][10][32]; - int i_138 = 138; - boolean j_138 = false; - String str_138 = new String("the 138-th string."); - int[] ia_138 = new int[]{138}; - Object obj_138 = new Object(); - List strList_138 = new ArrayList<>(); - String[][][] multi_138 = new String[5][10][32]; - int i_139 = 139; - boolean j_139 = true; - String str_139 = new String("the 139-th string."); - int[] ia_139 = new int[]{139}; - Object obj_139 = new Object(); - List strList_139 = new ArrayList<>(); - String[][][] multi_139 = new String[5][10][32]; - int i_140 = 140; - boolean j_140 = false; - String str_140 = new String("the 140-th string."); - int[] ia_140 = new int[]{140}; - Object obj_140 = new Object(); - List strList_140 = new ArrayList<>(); - String[][][] multi_140 = new String[5][10][32]; - int i_141 = 141; - boolean j_141 = true; - String str_141 = new String("the 141-th string."); - int[] ia_141 = new int[]{141}; - Object obj_141 = new Object(); - List strList_141 = new ArrayList<>(); - String[][][] multi_141 = new String[5][10][32]; - int i_142 = 142; - boolean j_142 = false; - String str_142 = new String("the 142-th string."); - int[] ia_142 = new int[]{142}; - Object obj_142 = new Object(); - List strList_142 = new ArrayList<>(); - String[][][] multi_142 = new String[5][10][32]; - int i_143 = 143; - boolean j_143 = true; - String str_143 = new String("the 143-th string."); - int[] ia_143 = new int[]{143}; - Object obj_143 = new Object(); - List strList_143 = new ArrayList<>(); - String[][][] multi_143 = new String[5][10][32]; - int i_144 = 144; - boolean j_144 = false; - String str_144 = new String("the 144-th string."); - int[] ia_144 = new int[]{144}; - Object obj_144 = new Object(); - List strList_144 = new ArrayList<>(); - String[][][] multi_144 = new String[5][10][32]; - int i_145 = 145; - boolean j_145 = true; - String str_145 = new String("the 145-th string."); - int[] ia_145 = new int[]{145}; - Object obj_145 = new Object(); - List strList_145 = new ArrayList<>(); - String[][][] multi_145 = new String[5][10][32]; - int i_146 = 146; - boolean j_146 = false; - String str_146 = new String("the 146-th string."); - int[] ia_146 = new int[]{146}; - Object obj_146 = new Object(); - List strList_146 = new ArrayList<>(); - String[][][] multi_146 = new String[5][10][32]; - int i_147 = 147; - boolean j_147 = true; - String str_147 = new String("the 147-th string."); - int[] ia_147 = new int[]{147}; - Object obj_147 = new Object(); - List strList_147 = new ArrayList<>(); - String[][][] multi_147 = new String[5][10][32]; - int i_148 = 148; - boolean j_148 = false; - String str_148 = new String("the 148-th string."); - int[] ia_148 = new int[]{148}; - Object obj_148 = new Object(); - List strList_148 = new ArrayList<>(); - String[][][] multi_148 = new String[5][10][32]; - int i_149 = 149; - boolean j_149 = true; - String str_149 = new String("the 149-th string."); - int[] ia_149 = new int[]{149}; - Object obj_149 = new Object(); - List strList_149 = new ArrayList<>(); - String[][][] multi_149 = new String[5][10][32]; - int i_150 = 150; - boolean j_150 = false; - String str_150 = new String("the 150-th string."); - int[] ia_150 = new int[]{150}; - Object obj_150 = new Object(); - List strList_150 = new ArrayList<>(); - String[][][] multi_150 = new String[5][10][32]; - int i_151 = 151; - boolean j_151 = true; - String str_151 = new String("the 151-th string."); - int[] ia_151 = new int[]{151}; - Object obj_151 = new Object(); - List strList_151 = new ArrayList<>(); - String[][][] multi_151 = new String[5][10][32]; - int i_152 = 152; - boolean j_152 = false; - String str_152 = new String("the 152-th string."); - int[] ia_152 = new int[]{152}; - Object obj_152 = new Object(); - List strList_152 = new ArrayList<>(); - String[][][] multi_152 = new String[5][10][32]; - int i_153 = 153; - boolean j_153 = true; - String str_153 = new String("the 153-th string."); - int[] ia_153 = new int[]{153}; - Object obj_153 = new Object(); - List strList_153 = new ArrayList<>(); - String[][][] multi_153 = new String[5][10][32]; - int i_154 = 154; - boolean j_154 = false; - String str_154 = new String("the 154-th string."); - int[] ia_154 = new int[]{154}; - Object obj_154 = new Object(); - List strList_154 = new ArrayList<>(); - String[][][] multi_154 = new String[5][10][32]; - int i_155 = 155; - boolean j_155 = true; - String str_155 = new String("the 155-th string."); - int[] ia_155 = new int[]{155}; - Object obj_155 = new Object(); - List strList_155 = new ArrayList<>(); - String[][][] multi_155 = new String[5][10][32]; - int i_156 = 156; - boolean j_156 = false; - String str_156 = new String("the 156-th string."); - int[] ia_156 = new int[]{156}; - Object obj_156 = new Object(); - List strList_156 = new ArrayList<>(); - String[][][] multi_156 = new String[5][10][32]; - int i_157 = 157; - boolean j_157 = true; - String str_157 = new String("the 157-th string."); - int[] ia_157 = new int[]{157}; - Object obj_157 = new Object(); - List strList_157 = new ArrayList<>(); - String[][][] multi_157 = new String[5][10][32]; - int i_158 = 158; - boolean j_158 = false; - String str_158 = new String("the 158-th string."); - int[] ia_158 = new int[]{158}; - Object obj_158 = new Object(); - List strList_158 = new ArrayList<>(); - String[][][] multi_158 = new String[5][10][32]; - int i_159 = 159; - boolean j_159 = true; - String str_159 = new String("the 159-th string."); - int[] ia_159 = new int[]{159}; - Object obj_159 = new Object(); - List strList_159 = new ArrayList<>(); - String[][][] multi_159 = new String[5][10][32]; - int i_160 = 160; - boolean j_160 = false; - String str_160 = new String("the 160-th string."); - int[] ia_160 = new int[]{160}; - Object obj_160 = new Object(); - List strList_160 = new ArrayList<>(); - String[][][] multi_160 = new String[5][10][32]; - int i_161 = 161; - boolean j_161 = true; - String str_161 = new String("the 161-th string."); - int[] ia_161 = new int[]{161}; - Object obj_161 = new Object(); - List strList_161 = new ArrayList<>(); - String[][][] multi_161 = new String[5][10][32]; - int i_162 = 162; - boolean j_162 = false; - String str_162 = new String("the 162-th string."); - int[] ia_162 = new int[]{162}; - Object obj_162 = new Object(); - List strList_162 = new ArrayList<>(); - String[][][] multi_162 = new String[5][10][32]; - int i_163 = 163; - boolean j_163 = true; - String str_163 = new String("the 163-th string."); - int[] ia_163 = new int[]{163}; - Object obj_163 = new Object(); - List strList_163 = new ArrayList<>(); - String[][][] multi_163 = new String[5][10][32]; - int i_164 = 164; - boolean j_164 = false; - String str_164 = new String("the 164-th string."); - int[] ia_164 = new int[]{164}; - Object obj_164 = new Object(); - List strList_164 = new ArrayList<>(); - String[][][] multi_164 = new String[5][10][32]; - int i_165 = 165; - boolean j_165 = true; - String str_165 = new String("the 165-th string."); - int[] ia_165 = new int[]{165}; - Object obj_165 = new Object(); - List strList_165 = new ArrayList<>(); - String[][][] multi_165 = new String[5][10][32]; - int i_166 = 166; - boolean j_166 = false; - String str_166 = new String("the 166-th string."); - int[] ia_166 = new int[]{166}; - Object obj_166 = new Object(); - List strList_166 = new ArrayList<>(); - String[][][] multi_166 = new String[5][10][32]; - int i_167 = 167; - boolean j_167 = true; - String str_167 = new String("the 167-th string."); - int[] ia_167 = new int[]{167}; - Object obj_167 = new Object(); - List strList_167 = new ArrayList<>(); - String[][][] multi_167 = new String[5][10][32]; - int i_168 = 168; - boolean j_168 = false; - String str_168 = new String("the 168-th string."); - int[] ia_168 = new int[]{168}; - Object obj_168 = new Object(); - List strList_168 = new ArrayList<>(); - String[][][] multi_168 = new String[5][10][32]; - int i_169 = 169; - boolean j_169 = true; - String str_169 = new String("the 169-th string."); - int[] ia_169 = new int[]{169}; - Object obj_169 = new Object(); - List strList_169 = new ArrayList<>(); - String[][][] multi_169 = new String[5][10][32]; - int i_170 = 170; - boolean j_170 = false; - String str_170 = new String("the 170-th string."); - int[] ia_170 = new int[]{170}; - Object obj_170 = new Object(); - List strList_170 = new ArrayList<>(); - String[][][] multi_170 = new String[5][10][32]; - int i_171 = 171; - boolean j_171 = true; - String str_171 = new String("the 171-th string."); - int[] ia_171 = new int[]{171}; - Object obj_171 = new Object(); - List strList_171 = new ArrayList<>(); - String[][][] multi_171 = new String[5][10][32]; - int i_172 = 172; - boolean j_172 = false; - String str_172 = new String("the 172-th string."); - int[] ia_172 = new int[]{172}; - Object obj_172 = new Object(); - List strList_172 = new ArrayList<>(); - String[][][] multi_172 = new String[5][10][32]; - int i_173 = 173; - boolean j_173 = true; - String str_173 = new String("the 173-th string."); - int[] ia_173 = new int[]{173}; - Object obj_173 = new Object(); - List strList_173 = new ArrayList<>(); - String[][][] multi_173 = new String[5][10][32]; - int i_174 = 174; - boolean j_174 = false; - String str_174 = new String("the 174-th string."); - int[] ia_174 = new int[]{174}; - Object obj_174 = new Object(); - List strList_174 = new ArrayList<>(); - String[][][] multi_174 = new String[5][10][32]; - int i_175 = 175; - boolean j_175 = true; - String str_175 = new String("the 175-th string."); - int[] ia_175 = new int[]{175}; - Object obj_175 = new Object(); - List strList_175 = new ArrayList<>(); - String[][][] multi_175 = new String[5][10][32]; - int i_176 = 176; - boolean j_176 = false; - String str_176 = new String("the 176-th string."); - int[] ia_176 = new int[]{176}; - Object obj_176 = new Object(); - List strList_176 = new ArrayList<>(); - String[][][] multi_176 = new String[5][10][32]; - int i_177 = 177; - boolean j_177 = true; - String str_177 = new String("the 177-th string."); - int[] ia_177 = new int[]{177}; - Object obj_177 = new Object(); - List strList_177 = new ArrayList<>(); - String[][][] multi_177 = new String[5][10][32]; - int i_178 = 178; - boolean j_178 = false; - String str_178 = new String("the 178-th string."); - int[] ia_178 = new int[]{178}; - Object obj_178 = new Object(); - List strList_178 = new ArrayList<>(); - String[][][] multi_178 = new String[5][10][32]; - int i_179 = 179; - boolean j_179 = true; - String str_179 = new String("the 179-th string."); - int[] ia_179 = new int[]{179}; - Object obj_179 = new Object(); - List strList_179 = new ArrayList<>(); - String[][][] multi_179 = new String[5][10][32]; - int i_180 = 180; - boolean j_180 = false; - String str_180 = new String("the 180-th string."); - int[] ia_180 = new int[]{180}; - Object obj_180 = new Object(); - List strList_180 = new ArrayList<>(); - String[][][] multi_180 = new String[5][10][32]; - int i_181 = 181; - boolean j_181 = true; - String str_181 = new String("the 181-th string."); - int[] ia_181 = new int[]{181}; - Object obj_181 = new Object(); - List strList_181 = new ArrayList<>(); - String[][][] multi_181 = new String[5][10][32]; - int i_182 = 182; - boolean j_182 = false; - String str_182 = new String("the 182-th string."); - int[] ia_182 = new int[]{182}; - Object obj_182 = new Object(); - List strList_182 = new ArrayList<>(); - String[][][] multi_182 = new String[5][10][32]; - int i_183 = 183; - boolean j_183 = true; - String str_183 = new String("the 183-th string."); - int[] ia_183 = new int[]{183}; - Object obj_183 = new Object(); - List strList_183 = new ArrayList<>(); - String[][][] multi_183 = new String[5][10][32]; - int i_184 = 184; - boolean j_184 = false; - String str_184 = new String("the 184-th string."); - int[] ia_184 = new int[]{184}; - Object obj_184 = new Object(); - List strList_184 = new ArrayList<>(); - String[][][] multi_184 = new String[5][10][32]; - int i_185 = 185; - boolean j_185 = true; - String str_185 = new String("the 185-th string."); - int[] ia_185 = new int[]{185}; - Object obj_185 = new Object(); - List strList_185 = new ArrayList<>(); - String[][][] multi_185 = new String[5][10][32]; - int i_186 = 186; - boolean j_186 = false; - String str_186 = new String("the 186-th string."); - int[] ia_186 = new int[]{186}; - Object obj_186 = new Object(); - List strList_186 = new ArrayList<>(); - String[][][] multi_186 = new String[5][10][32]; - int i_187 = 187; - boolean j_187 = true; - String str_187 = new String("the 187-th string."); - int[] ia_187 = new int[]{187}; - Object obj_187 = new Object(); - List strList_187 = new ArrayList<>(); - String[][][] multi_187 = new String[5][10][32]; - int i_188 = 188; - boolean j_188 = false; - String str_188 = new String("the 188-th string."); - int[] ia_188 = new int[]{188}; - Object obj_188 = new Object(); - List strList_188 = new ArrayList<>(); - String[][][] multi_188 = new String[5][10][32]; - int i_189 = 189; - boolean j_189 = true; - String str_189 = new String("the 189-th string."); - int[] ia_189 = new int[]{189}; - Object obj_189 = new Object(); - List strList_189 = new ArrayList<>(); - String[][][] multi_189 = new String[5][10][32]; - int i_190 = 190; - boolean j_190 = false; - String str_190 = new String("the 190-th string."); - int[] ia_190 = new int[]{190}; - Object obj_190 = new Object(); - List strList_190 = new ArrayList<>(); - String[][][] multi_190 = new String[5][10][32]; - int i_191 = 191; - boolean j_191 = true; - String str_191 = new String("the 191-th string."); - int[] ia_191 = new int[]{191}; - Object obj_191 = new Object(); - List strList_191 = new ArrayList<>(); - String[][][] multi_191 = new String[5][10][32]; - int i_192 = 192; - boolean j_192 = false; - String str_192 = new String("the 192-th string."); - int[] ia_192 = new int[]{192}; - Object obj_192 = new Object(); - List strList_192 = new ArrayList<>(); - String[][][] multi_192 = new String[5][10][32]; - int i_193 = 193; - boolean j_193 = true; - String str_193 = new String("the 193-th string."); - int[] ia_193 = new int[]{193}; - Object obj_193 = new Object(); - List strList_193 = new ArrayList<>(); - String[][][] multi_193 = new String[5][10][32]; - int i_194 = 194; - boolean j_194 = false; - String str_194 = new String("the 194-th string."); - int[] ia_194 = new int[]{194}; - Object obj_194 = new Object(); - List strList_194 = new ArrayList<>(); - String[][][] multi_194 = new String[5][10][32]; - int i_195 = 195; - boolean j_195 = true; - String str_195 = new String("the 195-th string."); - int[] ia_195 = new int[]{195}; - Object obj_195 = new Object(); - List strList_195 = new ArrayList<>(); - String[][][] multi_195 = new String[5][10][32]; - int i_196 = 196; - boolean j_196 = false; - String str_196 = new String("the 196-th string."); - int[] ia_196 = new int[]{196}; - Object obj_196 = new Object(); - List strList_196 = new ArrayList<>(); - String[][][] multi_196 = new String[5][10][32]; - int i_197 = 197; - boolean j_197 = true; - String str_197 = new String("the 197-th string."); - int[] ia_197 = new int[]{197}; - Object obj_197 = new Object(); - List strList_197 = new ArrayList<>(); - String[][][] multi_197 = new String[5][10][32]; - int i_198 = 198; - boolean j_198 = false; - String str_198 = new String("the 198-th string."); - int[] ia_198 = new int[]{198}; - Object obj_198 = new Object(); - List strList_198 = new ArrayList<>(); - String[][][] multi_198 = new String[5][10][32]; - int i_199 = 199; - boolean j_199 = true; - String str_199 = new String("the 199-th string."); - int[] ia_199 = new int[]{199}; - Object obj_199 = new Object(); - List strList_199 = new ArrayList<>(); - String[][][] multi_199 = new String[5][10][32]; - int i_200 = 200; - boolean j_200 = false; - String str_200 = new String("the 200-th string."); - int[] ia_200 = new int[]{200}; - Object obj_200 = new Object(); - List strList_200 = new ArrayList<>(); - String[][][] multi_200 = new String[5][10][32]; - int i_201 = 201; - boolean j_201 = true; - String str_201 = new String("the 201-th string."); - int[] ia_201 = new int[]{201}; - Object obj_201 = new Object(); - List strList_201 = new ArrayList<>(); - String[][][] multi_201 = new String[5][10][32]; - int i_202 = 202; - boolean j_202 = false; - String str_202 = new String("the 202-th string."); - int[] ia_202 = new int[]{202}; - Object obj_202 = new Object(); - List strList_202 = new ArrayList<>(); - String[][][] multi_202 = new String[5][10][32]; - int i_203 = 203; - boolean j_203 = true; - String str_203 = new String("the 203-th string."); - int[] ia_203 = new int[]{203}; - Object obj_203 = new Object(); - List strList_203 = new ArrayList<>(); - String[][][] multi_203 = new String[5][10][32]; - int i_204 = 204; - boolean j_204 = false; - String str_204 = new String("the 204-th string."); - int[] ia_204 = new int[]{204}; - Object obj_204 = new Object(); - List strList_204 = new ArrayList<>(); - String[][][] multi_204 = new String[5][10][32]; - int i_205 = 205; - boolean j_205 = true; - String str_205 = new String("the 205-th string."); - int[] ia_205 = new int[]{205}; - Object obj_205 = new Object(); - List strList_205 = new ArrayList<>(); - String[][][] multi_205 = new String[5][10][32]; - int i_206 = 206; - boolean j_206 = false; - String str_206 = new String("the 206-th string."); - int[] ia_206 = new int[]{206}; - Object obj_206 = new Object(); - List strList_206 = new ArrayList<>(); - String[][][] multi_206 = new String[5][10][32]; - int i_207 = 207; - boolean j_207 = true; - String str_207 = new String("the 207-th string."); - int[] ia_207 = new int[]{207}; - Object obj_207 = new Object(); - List strList_207 = new ArrayList<>(); - String[][][] multi_207 = new String[5][10][32]; - int i_208 = 208; - boolean j_208 = false; - String str_208 = new String("the 208-th string."); - int[] ia_208 = new int[]{208}; - Object obj_208 = new Object(); - List strList_208 = new ArrayList<>(); - String[][][] multi_208 = new String[5][10][32]; - int i_209 = 209; - boolean j_209 = true; - String str_209 = new String("the 209-th string."); - int[] ia_209 = new int[]{209}; - Object obj_209 = new Object(); - List strList_209 = new ArrayList<>(); - String[][][] multi_209 = new String[5][10][32]; - int i_210 = 210; - boolean j_210 = false; - String str_210 = new String("the 210-th string."); - int[] ia_210 = new int[]{210}; - Object obj_210 = new Object(); - List strList_210 = new ArrayList<>(); - String[][][] multi_210 = new String[5][10][32]; - int i_211 = 211; - boolean j_211 = true; - String str_211 = new String("the 211-th string."); - int[] ia_211 = new int[]{211}; - Object obj_211 = new Object(); - List strList_211 = new ArrayList<>(); - String[][][] multi_211 = new String[5][10][32]; - int i_212 = 212; - boolean j_212 = false; - String str_212 = new String("the 212-th string."); - int[] ia_212 = new int[]{212}; - Object obj_212 = new Object(); - List strList_212 = new ArrayList<>(); - String[][][] multi_212 = new String[5][10][32]; - int i_213 = 213; - boolean j_213 = true; - String str_213 = new String("the 213-th string."); - int[] ia_213 = new int[]{213}; - Object obj_213 = new Object(); - List strList_213 = new ArrayList<>(); - String[][][] multi_213 = new String[5][10][32]; - int i_214 = 214; - boolean j_214 = false; - String str_214 = new String("the 214-th string."); - int[] ia_214 = new int[]{214}; - Object obj_214 = new Object(); - List strList_214 = new ArrayList<>(); - String[][][] multi_214 = new String[5][10][32]; - int i_215 = 215; - boolean j_215 = true; - String str_215 = new String("the 215-th string."); - int[] ia_215 = new int[]{215}; - Object obj_215 = new Object(); - List strList_215 = new ArrayList<>(); - String[][][] multi_215 = new String[5][10][32]; - int i_216 = 216; - boolean j_216 = false; - String str_216 = new String("the 216-th string."); - int[] ia_216 = new int[]{216}; - Object obj_216 = new Object(); - List strList_216 = new ArrayList<>(); - String[][][] multi_216 = new String[5][10][32]; - int i_217 = 217; - boolean j_217 = true; - String str_217 = new String("the 217-th string."); - int[] ia_217 = new int[]{217}; - Object obj_217 = new Object(); - List strList_217 = new ArrayList<>(); - String[][][] multi_217 = new String[5][10][32]; - int i_218 = 218; - boolean j_218 = false; - String str_218 = new String("the 218-th string."); - int[] ia_218 = new int[]{218}; - Object obj_218 = new Object(); - List strList_218 = new ArrayList<>(); - String[][][] multi_218 = new String[5][10][32]; - int i_219 = 219; - boolean j_219 = true; - String str_219 = new String("the 219-th string."); - int[] ia_219 = new int[]{219}; - Object obj_219 = new Object(); - List strList_219 = new ArrayList<>(); - String[][][] multi_219 = new String[5][10][32]; - int i_220 = 220; - boolean j_220 = false; - String str_220 = new String("the 220-th string."); - int[] ia_220 = new int[]{220}; - Object obj_220 = new Object(); - List strList_220 = new ArrayList<>(); - String[][][] multi_220 = new String[5][10][32]; - int i_221 = 221; - boolean j_221 = true; - String str_221 = new String("the 221-th string."); - int[] ia_221 = new int[]{221}; - Object obj_221 = new Object(); - List strList_221 = new ArrayList<>(); - String[][][] multi_221 = new String[5][10][32]; - int i_222 = 222; - boolean j_222 = false; - String str_222 = new String("the 222-th string."); - int[] ia_222 = new int[]{222}; - Object obj_222 = new Object(); - List strList_222 = new ArrayList<>(); - String[][][] multi_222 = new String[5][10][32]; - int i_223 = 223; - boolean j_223 = true; - String str_223 = new String("the 223-th string."); - int[] ia_223 = new int[]{223}; - Object obj_223 = new Object(); - List strList_223 = new ArrayList<>(); - String[][][] multi_223 = new String[5][10][32]; - int i_224 = 224; - boolean j_224 = false; - String str_224 = new String("the 224-th string."); - int[] ia_224 = new int[]{224}; - Object obj_224 = new Object(); - List strList_224 = new ArrayList<>(); - String[][][] multi_224 = new String[5][10][32]; - int i_225 = 225; - boolean j_225 = true; - String str_225 = new String("the 225-th string."); - int[] ia_225 = new int[]{225}; - Object obj_225 = new Object(); - List strList_225 = new ArrayList<>(); - String[][][] multi_225 = new String[5][10][32]; - int i_226 = 226; - boolean j_226 = false; - String str_226 = new String("the 226-th string."); - int[] ia_226 = new int[]{226}; - Object obj_226 = new Object(); - List strList_226 = new ArrayList<>(); - String[][][] multi_226 = new String[5][10][32]; - int i_227 = 227; - boolean j_227 = true; - String str_227 = new String("the 227-th string."); - int[] ia_227 = new int[]{227}; - Object obj_227 = new Object(); - List strList_227 = new ArrayList<>(); - String[][][] multi_227 = new String[5][10][32]; - int i_228 = 228; - boolean j_228 = false; - String str_228 = new String("the 228-th string."); - int[] ia_228 = new int[]{228}; - Object obj_228 = new Object(); - List strList_228 = new ArrayList<>(); - String[][][] multi_228 = new String[5][10][32]; - int i_229 = 229; - boolean j_229 = true; - String str_229 = new String("the 229-th string."); - int[] ia_229 = new int[]{229}; - Object obj_229 = new Object(); - List strList_229 = new ArrayList<>(); - String[][][] multi_229 = new String[5][10][32]; - int i_230 = 230; - boolean j_230 = false; - String str_230 = new String("the 230-th string."); - int[] ia_230 = new int[]{230}; - Object obj_230 = new Object(); - List strList_230 = new ArrayList<>(); - String[][][] multi_230 = new String[5][10][32]; - int i_231 = 231; - boolean j_231 = true; - String str_231 = new String("the 231-th string."); - int[] ia_231 = new int[]{231}; - Object obj_231 = new Object(); - List strList_231 = new ArrayList<>(); - String[][][] multi_231 = new String[5][10][32]; - int i_232 = 232; - boolean j_232 = false; - String str_232 = new String("the 232-th string."); - int[] ia_232 = new int[]{232}; - Object obj_232 = new Object(); - List strList_232 = new ArrayList<>(); - String[][][] multi_232 = new String[5][10][32]; - int i_233 = 233; - boolean j_233 = true; - String str_233 = new String("the 233-th string."); - int[] ia_233 = new int[]{233}; - Object obj_233 = new Object(); - List strList_233 = new ArrayList<>(); - String[][][] multi_233 = new String[5][10][32]; - int i_234 = 234; - boolean j_234 = false; - String str_234 = new String("the 234-th string."); - int[] ia_234 = new int[]{234}; - Object obj_234 = new Object(); - List strList_234 = new ArrayList<>(); - String[][][] multi_234 = new String[5][10][32]; - int i_235 = 235; - boolean j_235 = true; - String str_235 = new String("the 235-th string."); - int[] ia_235 = new int[]{235}; - Object obj_235 = new Object(); - List strList_235 = new ArrayList<>(); - String[][][] multi_235 = new String[5][10][32]; - int i_236 = 236; - boolean j_236 = false; - String str_236 = new String("the 236-th string."); - int[] ia_236 = new int[]{236}; - Object obj_236 = new Object(); - List strList_236 = new ArrayList<>(); - String[][][] multi_236 = new String[5][10][32]; - int i_237 = 237; - boolean j_237 = true; - String str_237 = new String("the 237-th string."); - int[] ia_237 = new int[]{237}; - Object obj_237 = new Object(); - List strList_237 = new ArrayList<>(); - String[][][] multi_237 = new String[5][10][32]; - int i_238 = 238; - boolean j_238 = false; - String str_238 = new String("the 238-th string."); - int[] ia_238 = new int[]{238}; - Object obj_238 = new Object(); - List strList_238 = new ArrayList<>(); - String[][][] multi_238 = new String[5][10][32]; - int i_239 = 239; - boolean j_239 = true; - String str_239 = new String("the 239-th string."); - int[] ia_239 = new int[]{239}; - Object obj_239 = new Object(); - List strList_239 = new ArrayList<>(); - String[][][] multi_239 = new String[5][10][32]; - int i_240 = 240; - boolean j_240 = false; - String str_240 = new String("the 240-th string."); - int[] ia_240 = new int[]{240}; - Object obj_240 = new Object(); - List strList_240 = new ArrayList<>(); - String[][][] multi_240 = new String[5][10][32]; - int i_241 = 241; - boolean j_241 = true; - String str_241 = new String("the 241-th string."); - int[] ia_241 = new int[]{241}; - Object obj_241 = new Object(); - List strList_241 = new ArrayList<>(); - String[][][] multi_241 = new String[5][10][32]; - int i_242 = 242; - boolean j_242 = false; - String str_242 = new String("the 242-th string."); - int[] ia_242 = new int[]{242}; - Object obj_242 = new Object(); - List strList_242 = new ArrayList<>(); - String[][][] multi_242 = new String[5][10][32]; - int i_243 = 243; - boolean j_243 = true; - String str_243 = new String("the 243-th string."); - int[] ia_243 = new int[]{243}; - Object obj_243 = new Object(); - List strList_243 = new ArrayList<>(); - String[][][] multi_243 = new String[5][10][32]; - int i_244 = 244; - boolean j_244 = false; - String str_244 = new String("the 244-th string."); - int[] ia_244 = new int[]{244}; - Object obj_244 = new Object(); - List strList_244 = new ArrayList<>(); - String[][][] multi_244 = new String[5][10][32]; - int i_245 = 245; - boolean j_245 = true; - String str_245 = new String("the 245-th string."); - int[] ia_245 = new int[]{245}; - Object obj_245 = new Object(); - List strList_245 = new ArrayList<>(); - String[][][] multi_245 = new String[5][10][32]; - int i_246 = 246; - boolean j_246 = false; - String str_246 = new String("the 246-th string."); - int[] ia_246 = new int[]{246}; - Object obj_246 = new Object(); - List strList_246 = new ArrayList<>(); - String[][][] multi_246 = new String[5][10][32]; - int i_247 = 247; - boolean j_247 = true; - String str_247 = new String("the 247-th string."); - int[] ia_247 = new int[]{247}; - Object obj_247 = new Object(); - List strList_247 = new ArrayList<>(); - String[][][] multi_247 = new String[5][10][32]; - int i_248 = 248; - boolean j_248 = false; - String str_248 = new String("the 248-th string."); - int[] ia_248 = new int[]{248}; - Object obj_248 = new Object(); - List strList_248 = new ArrayList<>(); - String[][][] multi_248 = new String[5][10][32]; - int i_249 = 249; - boolean j_249 = true; - String str_249 = new String("the 249-th string."); - int[] ia_249 = new int[]{249}; - Object obj_249 = new Object(); - List strList_249 = new ArrayList<>(); - String[][][] multi_249 = new String[5][10][32]; - int i_250 = 250; - boolean j_250 = false; - String str_250 = new String("the 250-th string."); - int[] ia_250 = new int[]{250}; - Object obj_250 = new Object(); - List strList_250 = new ArrayList<>(); - String[][][] multi_250 = new String[5][10][32]; - int i_251 = 251; - boolean j_251 = true; - String str_251 = new String("the 251-th string."); - int[] ia_251 = new int[]{251}; - Object obj_251 = new Object(); - List strList_251 = new ArrayList<>(); - String[][][] multi_251 = new String[5][10][32]; - int i_252 = 252; - boolean j_252 = false; - String str_252 = new String("the 252-th string."); - int[] ia_252 = new int[]{252}; - Object obj_252 = new Object(); - List strList_252 = new ArrayList<>(); - String[][][] multi_252 = new String[5][10][32]; - int i_253 = 253; - boolean j_253 = true; - String str_253 = new String("the 253-th string."); - int[] ia_253 = new int[]{253}; - Object obj_253 = new Object(); - List strList_253 = new ArrayList<>(); - String[][][] multi_253 = new String[5][10][32]; - int i_254 = 254; - boolean j_254 = false; - String str_254 = new String("the 254-th string."); - int[] ia_254 = new int[]{254}; - Object obj_254 = new Object(); - List strList_254 = new ArrayList<>(); - String[][][] multi_254 = new String[5][10][32]; - int i_255 = 255; - boolean j_255 = true; - String str_255 = new String("the 255-th string."); - int[] ia_255 = new int[]{255}; - Object obj_255 = new Object(); - List strList_255 = new ArrayList<>(); - String[][][] multi_255 = new String[5][10][32]; - int i_256 = 256; - boolean j_256 = false; - String str_256 = new String("the 256-th string."); - int[] ia_256 = new int[]{256}; - Object obj_256 = new Object(); - List strList_256 = new ArrayList<>(); - String[][][] multi_256 = new String[5][10][32]; - int i_257 = 257; - boolean j_257 = true; - String str_257 = new String("the 257-th string."); - int[] ia_257 = new int[]{257}; - Object obj_257 = new Object(); - List strList_257 = new ArrayList<>(); - String[][][] multi_257 = new String[5][10][32]; - int i_258 = 258; - boolean j_258 = false; - String str_258 = new String("the 258-th string."); - int[] ia_258 = new int[]{258}; - Object obj_258 = new Object(); - List strList_258 = new ArrayList<>(); - String[][][] multi_258 = new String[5][10][32]; - int i_259 = 259; - boolean j_259 = true; - String str_259 = new String("the 259-th string."); - int[] ia_259 = new int[]{259}; - Object obj_259 = new Object(); - List strList_259 = new ArrayList<>(); - String[][][] multi_259 = new String[5][10][32]; - int i_260 = 260; - boolean j_260 = false; - String str_260 = new String("the 260-th string."); - int[] ia_260 = new int[]{260}; - Object obj_260 = new Object(); - List strList_260 = new ArrayList<>(); - String[][][] multi_260 = new String[5][10][32]; - int i_261 = 261; - boolean j_261 = true; - String str_261 = new String("the 261-th string."); - int[] ia_261 = new int[]{261}; - Object obj_261 = new Object(); - List strList_261 = new ArrayList<>(); - String[][][] multi_261 = new String[5][10][32]; - int i_262 = 262; - boolean j_262 = false; - String str_262 = new String("the 262-th string."); - int[] ia_262 = new int[]{262}; - Object obj_262 = new Object(); - List strList_262 = new ArrayList<>(); - String[][][] multi_262 = new String[5][10][32]; - int i_263 = 263; - boolean j_263 = true; - String str_263 = new String("the 263-th string."); - int[] ia_263 = new int[]{263}; - Object obj_263 = new Object(); - List strList_263 = new ArrayList<>(); - String[][][] multi_263 = new String[5][10][32]; - int i_264 = 264; - boolean j_264 = false; - String str_264 = new String("the 264-th string."); - int[] ia_264 = new int[]{264}; - Object obj_264 = new Object(); - List strList_264 = new ArrayList<>(); - String[][][] multi_264 = new String[5][10][32]; - int i_265 = 265; - boolean j_265 = true; - String str_265 = new String("the 265-th string."); - int[] ia_265 = new int[]{265}; - Object obj_265 = new Object(); - List strList_265 = new ArrayList<>(); - String[][][] multi_265 = new String[5][10][32]; - int i_266 = 266; - boolean j_266 = false; - String str_266 = new String("the 266-th string."); - int[] ia_266 = new int[]{266}; - Object obj_266 = new Object(); - List strList_266 = new ArrayList<>(); - String[][][] multi_266 = new String[5][10][32]; - int i_267 = 267; - boolean j_267 = true; - String str_267 = new String("the 267-th string."); - int[] ia_267 = new int[]{267}; - Object obj_267 = new Object(); - List strList_267 = new ArrayList<>(); - String[][][] multi_267 = new String[5][10][32]; - int i_268 = 268; - boolean j_268 = false; - String str_268 = new String("the 268-th string."); - int[] ia_268 = new int[]{268}; - Object obj_268 = new Object(); - List strList_268 = new ArrayList<>(); - String[][][] multi_268 = new String[5][10][32]; - int i_269 = 269; - boolean j_269 = true; - String str_269 = new String("the 269-th string."); - int[] ia_269 = new int[]{269}; - Object obj_269 = new Object(); - List strList_269 = new ArrayList<>(); - String[][][] multi_269 = new String[5][10][32]; - int i_270 = 270; - boolean j_270 = false; - String str_270 = new String("the 270-th string."); - int[] ia_270 = new int[]{270}; - Object obj_270 = new Object(); - List strList_270 = new ArrayList<>(); - String[][][] multi_270 = new String[5][10][32]; - int i_271 = 271; - boolean j_271 = true; - String str_271 = new String("the 271-th string."); - int[] ia_271 = new int[]{271}; - Object obj_271 = new Object(); - List strList_271 = new ArrayList<>(); - String[][][] multi_271 = new String[5][10][32]; - int i_272 = 272; - boolean j_272 = false; - String str_272 = new String("the 272-th string."); - int[] ia_272 = new int[]{272}; - Object obj_272 = new Object(); - List strList_272 = new ArrayList<>(); - String[][][] multi_272 = new String[5][10][32]; - int i_273 = 273; - boolean j_273 = true; - String str_273 = new String("the 273-th string."); - int[] ia_273 = new int[]{273}; - Object obj_273 = new Object(); - List strList_273 = new ArrayList<>(); - String[][][] multi_273 = new String[5][10][32]; - int i_274 = 274; - boolean j_274 = false; - String str_274 = new String("the 274-th string."); - int[] ia_274 = new int[]{274}; - Object obj_274 = new Object(); - List strList_274 = new ArrayList<>(); - String[][][] multi_274 = new String[5][10][32]; - int i_275 = 275; - boolean j_275 = true; - String str_275 = new String("the 275-th string."); - int[] ia_275 = new int[]{275}; - Object obj_275 = new Object(); - List strList_275 = new ArrayList<>(); - String[][][] multi_275 = new String[5][10][32]; - int i_276 = 276; - boolean j_276 = false; - String str_276 = new String("the 276-th string."); - int[] ia_276 = new int[]{276}; - Object obj_276 = new Object(); - List strList_276 = new ArrayList<>(); - String[][][] multi_276 = new String[5][10][32]; - int i_277 = 277; - boolean j_277 = true; - String str_277 = new String("the 277-th string."); - int[] ia_277 = new int[]{277}; - Object obj_277 = new Object(); - List strList_277 = new ArrayList<>(); - String[][][] multi_277 = new String[5][10][32]; - int i_278 = 278; - boolean j_278 = false; - String str_278 = new String("the 278-th string."); - int[] ia_278 = new int[]{278}; - Object obj_278 = new Object(); - List strList_278 = new ArrayList<>(); - String[][][] multi_278 = new String[5][10][32]; - int i_279 = 279; - boolean j_279 = true; - String str_279 = new String("the 279-th string."); - int[] ia_279 = new int[]{279}; - Object obj_279 = new Object(); - List strList_279 = new ArrayList<>(); - String[][][] multi_279 = new String[5][10][32]; - int i_280 = 280; - boolean j_280 = false; - String str_280 = new String("the 280-th string."); - int[] ia_280 = new int[]{280}; - Object obj_280 = new Object(); - List strList_280 = new ArrayList<>(); - String[][][] multi_280 = new String[5][10][32]; - int i_281 = 281; - boolean j_281 = true; - String str_281 = new String("the 281-th string."); - int[] ia_281 = new int[]{281}; - Object obj_281 = new Object(); - List strList_281 = new ArrayList<>(); - String[][][] multi_281 = new String[5][10][32]; - int i_282 = 282; - boolean j_282 = false; - String str_282 = new String("the 282-th string."); - int[] ia_282 = new int[]{282}; - Object obj_282 = new Object(); - List strList_282 = new ArrayList<>(); - String[][][] multi_282 = new String[5][10][32]; - int i_283 = 283; - boolean j_283 = true; - String str_283 = new String("the 283-th string."); - int[] ia_283 = new int[]{283}; - Object obj_283 = new Object(); - List strList_283 = new ArrayList<>(); - String[][][] multi_283 = new String[5][10][32]; - int i_284 = 284; - boolean j_284 = false; - String str_284 = new String("the 284-th string."); - int[] ia_284 = new int[]{284}; - Object obj_284 = new Object(); - List strList_284 = new ArrayList<>(); - String[][][] multi_284 = new String[5][10][32]; - int i_285 = 285; - boolean j_285 = true; - String str_285 = new String("the 285-th string."); - int[] ia_285 = new int[]{285}; - Object obj_285 = new Object(); - List strList_285 = new ArrayList<>(); - String[][][] multi_285 = new String[5][10][32]; - int i_286 = 286; - boolean j_286 = false; - String str_286 = new String("the 286-th string."); - int[] ia_286 = new int[]{286}; - Object obj_286 = new Object(); - List strList_286 = new ArrayList<>(); - String[][][] multi_286 = new String[5][10][32]; - int i_287 = 287; - boolean j_287 = true; - String str_287 = new String("the 287-th string."); - int[] ia_287 = new int[]{287}; - Object obj_287 = new Object(); - List strList_287 = new ArrayList<>(); - String[][][] multi_287 = new String[5][10][32]; - int i_288 = 288; - boolean j_288 = false; - String str_288 = new String("the 288-th string."); - int[] ia_288 = new int[]{288}; - Object obj_288 = new Object(); - List strList_288 = new ArrayList<>(); - String[][][] multi_288 = new String[5][10][32]; - int i_289 = 289; - boolean j_289 = true; - String str_289 = new String("the 289-th string."); - int[] ia_289 = new int[]{289}; - Object obj_289 = new Object(); - List strList_289 = new ArrayList<>(); - String[][][] multi_289 = new String[5][10][32]; - int i_290 = 290; - boolean j_290 = false; - String str_290 = new String("the 290-th string."); - int[] ia_290 = new int[]{290}; - Object obj_290 = new Object(); - List strList_290 = new ArrayList<>(); - String[][][] multi_290 = new String[5][10][32]; - int i_291 = 291; - boolean j_291 = true; - String str_291 = new String("the 291-th string."); - int[] ia_291 = new int[]{291}; - Object obj_291 = new Object(); - List strList_291 = new ArrayList<>(); - String[][][] multi_291 = new String[5][10][32]; - int i_292 = 292; - boolean j_292 = false; - String str_292 = new String("the 292-th string."); - int[] ia_292 = new int[]{292}; - Object obj_292 = new Object(); - List strList_292 = new ArrayList<>(); - String[][][] multi_292 = new String[5][10][32]; - int i_293 = 293; - boolean j_293 = true; - String str_293 = new String("the 293-th string."); - int[] ia_293 = new int[]{293}; - Object obj_293 = new Object(); - List strList_293 = new ArrayList<>(); - String[][][] multi_293 = new String[5][10][32]; - int i_294 = 294; - boolean j_294 = false; - String str_294 = new String("the 294-th string."); - int[] ia_294 = new int[]{294}; - Object obj_294 = new Object(); - List strList_294 = new ArrayList<>(); - String[][][] multi_294 = new String[5][10][32]; - int i_295 = 295; - boolean j_295 = true; - String str_295 = new String("the 295-th string."); - int[] ia_295 = new int[]{295}; - Object obj_295 = new Object(); - List strList_295 = new ArrayList<>(); - String[][][] multi_295 = new String[5][10][32]; - int i_296 = 296; - boolean j_296 = false; - String str_296 = new String("the 296-th string."); - int[] ia_296 = new int[]{296}; - Object obj_296 = new Object(); - List strList_296 = new ArrayList<>(); - String[][][] multi_296 = new String[5][10][32]; - int i_297 = 297; - boolean j_297 = true; - String str_297 = new String("the 297-th string."); - int[] ia_297 = new int[]{297}; - Object obj_297 = new Object(); - List strList_297 = new ArrayList<>(); - String[][][] multi_297 = new String[5][10][32]; - int i_298 = 298; - boolean j_298 = false; - String str_298 = new String("the 298-th string."); - int[] ia_298 = new int[]{298}; - Object obj_298 = new Object(); - List strList_298 = new ArrayList<>(); - String[][][] multi_298 = new String[5][10][32]; - int i_299 = 299; - boolean j_299 = true; - String str_299 = new String("the 299-th string."); - int[] ia_299 = new int[]{299}; - Object obj_299 = new Object(); - List strList_299 = new ArrayList<>(); - String[][][] multi_299 = new String[5][10][32]; - int i_300 = 300; - boolean j_300 = false; - String str_300 = new String("the 300-th string."); - int[] ia_300 = new int[]{300}; - Object obj_300 = new Object(); - List strList_300 = new ArrayList<>(); - String[][][] multi_300 = new String[5][10][32]; - int i_301 = 301; - boolean j_301 = true; - String str_301 = new String("the 301-th string."); - int[] ia_301 = new int[]{301}; - Object obj_301 = new Object(); - List strList_301 = new ArrayList<>(); - String[][][] multi_301 = new String[5][10][32]; - int i_302 = 302; - boolean j_302 = false; - String str_302 = new String("the 302-th string."); - int[] ia_302 = new int[]{302}; - Object obj_302 = new Object(); - List strList_302 = new ArrayList<>(); - String[][][] multi_302 = new String[5][10][32]; - int i_303 = 303; - boolean j_303 = true; - String str_303 = new String("the 303-th string."); - int[] ia_303 = new int[]{303}; - Object obj_303 = new Object(); - List strList_303 = new ArrayList<>(); - String[][][] multi_303 = new String[5][10][32]; - int i_304 = 304; - boolean j_304 = false; - String str_304 = new String("the 304-th string."); - int[] ia_304 = new int[]{304}; - Object obj_304 = new Object(); - List strList_304 = new ArrayList<>(); - String[][][] multi_304 = new String[5][10][32]; - int i_305 = 305; - boolean j_305 = true; - String str_305 = new String("the 305-th string."); - int[] ia_305 = new int[]{305}; - Object obj_305 = new Object(); - List strList_305 = new ArrayList<>(); - String[][][] multi_305 = new String[5][10][32]; - int i_306 = 306; - boolean j_306 = false; - String str_306 = new String("the 306-th string."); - int[] ia_306 = new int[]{306}; - Object obj_306 = new Object(); - List strList_306 = new ArrayList<>(); - String[][][] multi_306 = new String[5][10][32]; - int i_307 = 307; - boolean j_307 = true; - String str_307 = new String("the 307-th string."); - int[] ia_307 = new int[]{307}; - Object obj_307 = new Object(); - List strList_307 = new ArrayList<>(); - String[][][] multi_307 = new String[5][10][32]; - int i_308 = 308; - boolean j_308 = false; - String str_308 = new String("the 308-th string."); - int[] ia_308 = new int[]{308}; - Object obj_308 = new Object(); - List strList_308 = new ArrayList<>(); - String[][][] multi_308 = new String[5][10][32]; - int i_309 = 309; - boolean j_309 = true; - String str_309 = new String("the 309-th string."); - int[] ia_309 = new int[]{309}; - Object obj_309 = new Object(); - List strList_309 = new ArrayList<>(); - String[][][] multi_309 = new String[5][10][32]; - int i_310 = 310; - boolean j_310 = false; - String str_310 = new String("the 310-th string."); - int[] ia_310 = new int[]{310}; - Object obj_310 = new Object(); - List strList_310 = new ArrayList<>(); - String[][][] multi_310 = new String[5][10][32]; - int i_311 = 311; - boolean j_311 = true; - String str_311 = new String("the 311-th string."); - int[] ia_311 = new int[]{311}; - Object obj_311 = new Object(); - List strList_311 = new ArrayList<>(); - String[][][] multi_311 = new String[5][10][32]; - int i_312 = 312; - boolean j_312 = false; - String str_312 = new String("the 312-th string."); - int[] ia_312 = new int[]{312}; - Object obj_312 = new Object(); - List strList_312 = new ArrayList<>(); - String[][][] multi_312 = new String[5][10][32]; - int i_313 = 313; - boolean j_313 = true; - String str_313 = new String("the 313-th string."); - int[] ia_313 = new int[]{313}; - Object obj_313 = new Object(); - List strList_313 = new ArrayList<>(); - String[][][] multi_313 = new String[5][10][32]; - int i_314 = 314; - boolean j_314 = false; - String str_314 = new String("the 314-th string."); - int[] ia_314 = new int[]{314}; - Object obj_314 = new Object(); - List strList_314 = new ArrayList<>(); - String[][][] multi_314 = new String[5][10][32]; - int i_315 = 315; - boolean j_315 = true; - String str_315 = new String("the 315-th string."); - int[] ia_315 = new int[]{315}; - Object obj_315 = new Object(); - List strList_315 = new ArrayList<>(); - String[][][] multi_315 = new String[5][10][32]; - int i_316 = 316; - boolean j_316 = false; - String str_316 = new String("the 316-th string."); - int[] ia_316 = new int[]{316}; - Object obj_316 = new Object(); - List strList_316 = new ArrayList<>(); - String[][][] multi_316 = new String[5][10][32]; - int i_317 = 317; - boolean j_317 = true; - String str_317 = new String("the 317-th string."); - int[] ia_317 = new int[]{317}; - Object obj_317 = new Object(); - List strList_317 = new ArrayList<>(); - String[][][] multi_317 = new String[5][10][32]; - int i_318 = 318; - boolean j_318 = false; - String str_318 = new String("the 318-th string."); - int[] ia_318 = new int[]{318}; - Object obj_318 = new Object(); - List strList_318 = new ArrayList<>(); - String[][][] multi_318 = new String[5][10][32]; - int i_319 = 319; - boolean j_319 = true; - String str_319 = new String("the 319-th string."); - int[] ia_319 = new int[]{319}; - Object obj_319 = new Object(); - List strList_319 = new ArrayList<>(); - String[][][] multi_319 = new String[5][10][32]; - int i_320 = 320; - boolean j_320 = false; - String str_320 = new String("the 320-th string."); - int[] ia_320 = new int[]{320}; - Object obj_320 = new Object(); - List strList_320 = new ArrayList<>(); - String[][][] multi_320 = new String[5][10][32]; - int i_321 = 321; - boolean j_321 = true; - String str_321 = new String("the 321-th string."); - int[] ia_321 = new int[]{321}; - Object obj_321 = new Object(); - List strList_321 = new ArrayList<>(); - String[][][] multi_321 = new String[5][10][32]; - int i_322 = 322; - boolean j_322 = false; - String str_322 = new String("the 322-th string."); - int[] ia_322 = new int[]{322}; - Object obj_322 = new Object(); - List strList_322 = new ArrayList<>(); - String[][][] multi_322 = new String[5][10][32]; - int i_323 = 323; - boolean j_323 = true; - String str_323 = new String("the 323-th string."); - int[] ia_323 = new int[]{323}; - Object obj_323 = new Object(); - List strList_323 = new ArrayList<>(); - String[][][] multi_323 = new String[5][10][32]; - int i_324 = 324; - boolean j_324 = false; - String str_324 = new String("the 324-th string."); - int[] ia_324 = new int[]{324}; - Object obj_324 = new Object(); - List strList_324 = new ArrayList<>(); - String[][][] multi_324 = new String[5][10][32]; - int i_325 = 325; - boolean j_325 = true; - String str_325 = new String("the 325-th string."); - int[] ia_325 = new int[]{325}; - Object obj_325 = new Object(); - List strList_325 = new ArrayList<>(); - String[][][] multi_325 = new String[5][10][32]; - int i_326 = 326; - boolean j_326 = false; - String str_326 = new String("the 326-th string."); - int[] ia_326 = new int[]{326}; - Object obj_326 = new Object(); - List strList_326 = new ArrayList<>(); - String[][][] multi_326 = new String[5][10][32]; - int i_327 = 327; - boolean j_327 = true; - String str_327 = new String("the 327-th string."); - int[] ia_327 = new int[]{327}; - Object obj_327 = new Object(); - List strList_327 = new ArrayList<>(); - String[][][] multi_327 = new String[5][10][32]; - int i_328 = 328; - boolean j_328 = false; - String str_328 = new String("the 328-th string."); - int[] ia_328 = new int[]{328}; - Object obj_328 = new Object(); - List strList_328 = new ArrayList<>(); - String[][][] multi_328 = new String[5][10][32]; - int i_329 = 329; - boolean j_329 = true; - String str_329 = new String("the 329-th string."); - int[] ia_329 = new int[]{329}; - Object obj_329 = new Object(); - List strList_329 = new ArrayList<>(); - String[][][] multi_329 = new String[5][10][32]; - int i_330 = 330; - boolean j_330 = false; - String str_330 = new String("the 330-th string."); - int[] ia_330 = new int[]{330}; - Object obj_330 = new Object(); - List strList_330 = new ArrayList<>(); - String[][][] multi_330 = new String[5][10][32]; - int i_331 = 331; - boolean j_331 = true; - String str_331 = new String("the 331-th string."); - int[] ia_331 = new int[]{331}; - Object obj_331 = new Object(); - List strList_331 = new ArrayList<>(); - String[][][] multi_331 = new String[5][10][32]; - int i_332 = 332; - boolean j_332 = false; - String str_332 = new String("the 332-th string."); - int[] ia_332 = new int[]{332}; - Object obj_332 = new Object(); - List strList_332 = new ArrayList<>(); - String[][][] multi_332 = new String[5][10][32]; - int i_333 = 333; - boolean j_333 = true; - String str_333 = new String("the 333-th string."); - int[] ia_333 = new int[]{333}; - Object obj_333 = new Object(); - List strList_333 = new ArrayList<>(); - String[][][] multi_333 = new String[5][10][32]; - int i_334 = 334; - boolean j_334 = false; - String str_334 = new String("the 334-th string."); - int[] ia_334 = new int[]{334}; - Object obj_334 = new Object(); - List strList_334 = new ArrayList<>(); - String[][][] multi_334 = new String[5][10][32]; - int i_335 = 335; - boolean j_335 = true; - String str_335 = new String("the 335-th string."); - int[] ia_335 = new int[]{335}; - Object obj_335 = new Object(); - List strList_335 = new ArrayList<>(); - String[][][] multi_335 = new String[5][10][32]; - int i_336 = 336; - boolean j_336 = false; - String str_336 = new String("the 336-th string."); - int[] ia_336 = new int[]{336}; - Object obj_336 = new Object(); - List strList_336 = new ArrayList<>(); - String[][][] multi_336 = new String[5][10][32]; - int i_337 = 337; - boolean j_337 = true; - String str_337 = new String("the 337-th string."); - int[] ia_337 = new int[]{337}; - Object obj_337 = new Object(); - List strList_337 = new ArrayList<>(); - String[][][] multi_337 = new String[5][10][32]; - int i_338 = 338; - boolean j_338 = false; - String str_338 = new String("the 338-th string."); - int[] ia_338 = new int[]{338}; - Object obj_338 = new Object(); - List strList_338 = new ArrayList<>(); - String[][][] multi_338 = new String[5][10][32]; - int i_339 = 339; - boolean j_339 = true; - String str_339 = new String("the 339-th string."); - int[] ia_339 = new int[]{339}; - Object obj_339 = new Object(); - List strList_339 = new ArrayList<>(); - String[][][] multi_339 = new String[5][10][32]; - int i_340 = 340; - boolean j_340 = false; - String str_340 = new String("the 340-th string."); - int[] ia_340 = new int[]{340}; - Object obj_340 = new Object(); - List strList_340 = new ArrayList<>(); - String[][][] multi_340 = new String[5][10][32]; - int i_341 = 341; - boolean j_341 = true; - String str_341 = new String("the 341-th string."); - int[] ia_341 = new int[]{341}; - Object obj_341 = new Object(); - List strList_341 = new ArrayList<>(); - String[][][] multi_341 = new String[5][10][32]; - int i_342 = 342; - boolean j_342 = false; - String str_342 = new String("the 342-th string."); - int[] ia_342 = new int[]{342}; - Object obj_342 = new Object(); - List strList_342 = new ArrayList<>(); - String[][][] multi_342 = new String[5][10][32]; - int i_343 = 343; - boolean j_343 = true; - String str_343 = new String("the 343-th string."); - int[] ia_343 = new int[]{343}; - Object obj_343 = new Object(); - List strList_343 = new ArrayList<>(); - String[][][] multi_343 = new String[5][10][32]; - int i_344 = 344; - boolean j_344 = false; - String str_344 = new String("the 344-th string."); - int[] ia_344 = new int[]{344}; - Object obj_344 = new Object(); - List strList_344 = new ArrayList<>(); - String[][][] multi_344 = new String[5][10][32]; - int i_345 = 345; - boolean j_345 = true; - String str_345 = new String("the 345-th string."); - int[] ia_345 = new int[]{345}; - Object obj_345 = new Object(); - List strList_345 = new ArrayList<>(); - String[][][] multi_345 = new String[5][10][32]; - int i_346 = 346; - boolean j_346 = false; - String str_346 = new String("the 346-th string."); - int[] ia_346 = new int[]{346}; - Object obj_346 = new Object(); - List strList_346 = new ArrayList<>(); - String[][][] multi_346 = new String[5][10][32]; - int i_347 = 347; - boolean j_347 = true; - String str_347 = new String("the 347-th string."); - int[] ia_347 = new int[]{347}; - Object obj_347 = new Object(); - List strList_347 = new ArrayList<>(); - String[][][] multi_347 = new String[5][10][32]; - int i_348 = 348; - boolean j_348 = false; - String str_348 = new String("the 348-th string."); - int[] ia_348 = new int[]{348}; - Object obj_348 = new Object(); - List strList_348 = new ArrayList<>(); - String[][][] multi_348 = new String[5][10][32]; - int i_349 = 349; - boolean j_349 = true; - String str_349 = new String("the 349-th string."); - int[] ia_349 = new int[]{349}; - Object obj_349 = new Object(); - List strList_349 = new ArrayList<>(); - String[][][] multi_349 = new String[5][10][32]; - int i_350 = 350; - boolean j_350 = false; - String str_350 = new String("the 350-th string."); - int[] ia_350 = new int[]{350}; - Object obj_350 = new Object(); - List strList_350 = new ArrayList<>(); - String[][][] multi_350 = new String[5][10][32]; - int i_351 = 351; - boolean j_351 = true; - String str_351 = new String("the 351-th string."); - int[] ia_351 = new int[]{351}; - Object obj_351 = new Object(); - List strList_351 = new ArrayList<>(); - String[][][] multi_351 = new String[5][10][32]; - int i_352 = 352; - boolean j_352 = false; - String str_352 = new String("the 352-th string."); - int[] ia_352 = new int[]{352}; - Object obj_352 = new Object(); - List strList_352 = new ArrayList<>(); - String[][][] multi_352 = new String[5][10][32]; - int i_353 = 353; - boolean j_353 = true; - String str_353 = new String("the 353-th string."); - int[] ia_353 = new int[]{353}; - Object obj_353 = new Object(); - List strList_353 = new ArrayList<>(); - String[][][] multi_353 = new String[5][10][32]; - int i_354 = 354; - boolean j_354 = false; - String str_354 = new String("the 354-th string."); - int[] ia_354 = new int[]{354}; - Object obj_354 = new Object(); - List strList_354 = new ArrayList<>(); - String[][][] multi_354 = new String[5][10][32]; - int i_355 = 355; - boolean j_355 = true; - String str_355 = new String("the 355-th string."); - int[] ia_355 = new int[]{355}; - Object obj_355 = new Object(); - List strList_355 = new ArrayList<>(); - String[][][] multi_355 = new String[5][10][32]; - int i_356 = 356; - boolean j_356 = false; - String str_356 = new String("the 356-th string."); - int[] ia_356 = new int[]{356}; - Object obj_356 = new Object(); - List strList_356 = new ArrayList<>(); - String[][][] multi_356 = new String[5][10][32]; - int i_357 = 357; - boolean j_357 = true; - String str_357 = new String("the 357-th string."); - int[] ia_357 = new int[]{357}; - Object obj_357 = new Object(); - List strList_357 = new ArrayList<>(); - String[][][] multi_357 = new String[5][10][32]; - int i_358 = 358; - boolean j_358 = false; - String str_358 = new String("the 358-th string."); - int[] ia_358 = new int[]{358}; - Object obj_358 = new Object(); - List strList_358 = new ArrayList<>(); - String[][][] multi_358 = new String[5][10][32]; - int i_359 = 359; - boolean j_359 = true; - String str_359 = new String("the 359-th string."); - int[] ia_359 = new int[]{359}; - Object obj_359 = new Object(); - List strList_359 = new ArrayList<>(); - String[][][] multi_359 = new String[5][10][32]; - int i_360 = 360; - boolean j_360 = false; - String str_360 = new String("the 360-th string."); - int[] ia_360 = new int[]{360}; - Object obj_360 = new Object(); - List strList_360 = new ArrayList<>(); - String[][][] multi_360 = new String[5][10][32]; - int i_361 = 361; - boolean j_361 = true; - String str_361 = new String("the 361-th string."); - int[] ia_361 = new int[]{361}; - Object obj_361 = new Object(); - List strList_361 = new ArrayList<>(); - String[][][] multi_361 = new String[5][10][32]; - int i_362 = 362; - boolean j_362 = false; - String str_362 = new String("the 362-th string."); - int[] ia_362 = new int[]{362}; - Object obj_362 = new Object(); - List strList_362 = new ArrayList<>(); - String[][][] multi_362 = new String[5][10][32]; - int i_363 = 363; - boolean j_363 = true; - String str_363 = new String("the 363-th string."); - int[] ia_363 = new int[]{363}; - Object obj_363 = new Object(); - List strList_363 = new ArrayList<>(); - String[][][] multi_363 = new String[5][10][32]; - int i_364 = 364; - boolean j_364 = false; - String str_364 = new String("the 364-th string."); - int[] ia_364 = new int[]{364}; - Object obj_364 = new Object(); - List strList_364 = new ArrayList<>(); - String[][][] multi_364 = new String[5][10][32]; - int i_365 = 365; - boolean j_365 = true; - String str_365 = new String("the 365-th string."); - int[] ia_365 = new int[]{365}; - Object obj_365 = new Object(); - List strList_365 = new ArrayList<>(); - String[][][] multi_365 = new String[5][10][32]; - int i_366 = 366; - boolean j_366 = false; - String str_366 = new String("the 366-th string."); - int[] ia_366 = new int[]{366}; - Object obj_366 = new Object(); - List strList_366 = new ArrayList<>(); - String[][][] multi_366 = new String[5][10][32]; - int i_367 = 367; - boolean j_367 = true; - String str_367 = new String("the 367-th string."); - int[] ia_367 = new int[]{367}; - Object obj_367 = new Object(); - List strList_367 = new ArrayList<>(); - String[][][] multi_367 = new String[5][10][32]; - int i_368 = 368; - boolean j_368 = false; - String str_368 = new String("the 368-th string."); - int[] ia_368 = new int[]{368}; - Object obj_368 = new Object(); - List strList_368 = new ArrayList<>(); - String[][][] multi_368 = new String[5][10][32]; - int i_369 = 369; - boolean j_369 = true; - String str_369 = new String("the 369-th string."); - int[] ia_369 = new int[]{369}; - Object obj_369 = new Object(); - List strList_369 = new ArrayList<>(); - String[][][] multi_369 = new String[5][10][32]; - int i_370 = 370; - boolean j_370 = false; - String str_370 = new String("the 370-th string."); - int[] ia_370 = new int[]{370}; - Object obj_370 = new Object(); - List strList_370 = new ArrayList<>(); - String[][][] multi_370 = new String[5][10][32]; - int i_371 = 371; - boolean j_371 = true; - String str_371 = new String("the 371-th string."); - int[] ia_371 = new int[]{371}; - Object obj_371 = new Object(); - List strList_371 = new ArrayList<>(); - String[][][] multi_371 = new String[5][10][32]; - int i_372 = 372; - boolean j_372 = false; - String str_372 = new String("the 372-th string."); - int[] ia_372 = new int[]{372}; - Object obj_372 = new Object(); - List strList_372 = new ArrayList<>(); - String[][][] multi_372 = new String[5][10][32]; - int i_373 = 373; - boolean j_373 = true; - String str_373 = new String("the 373-th string."); - int[] ia_373 = new int[]{373}; - Object obj_373 = new Object(); - List strList_373 = new ArrayList<>(); - String[][][] multi_373 = new String[5][10][32]; - int i_374 = 374; - boolean j_374 = false; - String str_374 = new String("the 374-th string."); - int[] ia_374 = new int[]{374}; - Object obj_374 = new Object(); - List strList_374 = new ArrayList<>(); - String[][][] multi_374 = new String[5][10][32]; - int i_375 = 375; - boolean j_375 = true; - String str_375 = new String("the 375-th string."); - int[] ia_375 = new int[]{375}; - Object obj_375 = new Object(); - List strList_375 = new ArrayList<>(); - String[][][] multi_375 = new String[5][10][32]; - int i_376 = 376; - boolean j_376 = false; - String str_376 = new String("the 376-th string."); - int[] ia_376 = new int[]{376}; - Object obj_376 = new Object(); - List strList_376 = new ArrayList<>(); - String[][][] multi_376 = new String[5][10][32]; - int i_377 = 377; - boolean j_377 = true; - String str_377 = new String("the 377-th string."); - int[] ia_377 = new int[]{377}; - Object obj_377 = new Object(); - List strList_377 = new ArrayList<>(); - String[][][] multi_377 = new String[5][10][32]; - int i_378 = 378; - boolean j_378 = false; - String str_378 = new String("the 378-th string."); - int[] ia_378 = new int[]{378}; - Object obj_378 = new Object(); - List strList_378 = new ArrayList<>(); - String[][][] multi_378 = new String[5][10][32]; - int i_379 = 379; - boolean j_379 = true; - String str_379 = new String("the 379-th string."); - int[] ia_379 = new int[]{379}; - Object obj_379 = new Object(); - List strList_379 = new ArrayList<>(); - String[][][] multi_379 = new String[5][10][32]; - int i_380 = 380; - boolean j_380 = false; - String str_380 = new String("the 380-th string."); - int[] ia_380 = new int[]{380}; - Object obj_380 = new Object(); - List strList_380 = new ArrayList<>(); - String[][][] multi_380 = new String[5][10][32]; - int i_381 = 381; - boolean j_381 = true; - String str_381 = new String("the 381-th string."); - int[] ia_381 = new int[]{381}; - Object obj_381 = new Object(); - List strList_381 = new ArrayList<>(); - String[][][] multi_381 = new String[5][10][32]; - int i_382 = 382; - boolean j_382 = false; - String str_382 = new String("the 382-th string."); - int[] ia_382 = new int[]{382}; - Object obj_382 = new Object(); - List strList_382 = new ArrayList<>(); - String[][][] multi_382 = new String[5][10][32]; - int i_383 = 383; - boolean j_383 = true; - String str_383 = new String("the 383-th string."); - int[] ia_383 = new int[]{383}; - Object obj_383 = new Object(); - List strList_383 = new ArrayList<>(); - String[][][] multi_383 = new String[5][10][32]; - int i_384 = 384; - boolean j_384 = false; - String str_384 = new String("the 384-th string."); - int[] ia_384 = new int[]{384}; - Object obj_384 = new Object(); - List strList_384 = new ArrayList<>(); - String[][][] multi_384 = new String[5][10][32]; - int i_385 = 385; - boolean j_385 = true; - String str_385 = new String("the 385-th string."); - int[] ia_385 = new int[]{385}; - Object obj_385 = new Object(); - List strList_385 = new ArrayList<>(); - String[][][] multi_385 = new String[5][10][32]; - int i_386 = 386; - boolean j_386 = false; - String str_386 = new String("the 386-th string."); - int[] ia_386 = new int[]{386}; - Object obj_386 = new Object(); - List strList_386 = new ArrayList<>(); - String[][][] multi_386 = new String[5][10][32]; - int i_387 = 387; - boolean j_387 = true; - String str_387 = new String("the 387-th string."); - int[] ia_387 = new int[]{387}; - Object obj_387 = new Object(); - List strList_387 = new ArrayList<>(); - String[][][] multi_387 = new String[5][10][32]; - int i_388 = 388; - boolean j_388 = false; - String str_388 = new String("the 388-th string."); - int[] ia_388 = new int[]{388}; - Object obj_388 = new Object(); - List strList_388 = new ArrayList<>(); - String[][][] multi_388 = new String[5][10][32]; - int i_389 = 389; - boolean j_389 = true; - String str_389 = new String("the 389-th string."); - int[] ia_389 = new int[]{389}; - Object obj_389 = new Object(); - List strList_389 = new ArrayList<>(); - String[][][] multi_389 = new String[5][10][32]; - int i_390 = 390; - boolean j_390 = false; - String str_390 = new String("the 390-th string."); - int[] ia_390 = new int[]{390}; - Object obj_390 = new Object(); - List strList_390 = new ArrayList<>(); - String[][][] multi_390 = new String[5][10][32]; - int i_391 = 391; - boolean j_391 = true; - String str_391 = new String("the 391-th string."); - int[] ia_391 = new int[]{391}; - Object obj_391 = new Object(); - List strList_391 = new ArrayList<>(); - String[][][] multi_391 = new String[5][10][32]; - int i_392 = 392; - boolean j_392 = false; - String str_392 = new String("the 392-th string."); - int[] ia_392 = new int[]{392}; - Object obj_392 = new Object(); - List strList_392 = new ArrayList<>(); - String[][][] multi_392 = new String[5][10][32]; - int i_393 = 393; - boolean j_393 = true; - String str_393 = new String("the 393-th string."); - int[] ia_393 = new int[]{393}; - Object obj_393 = new Object(); - List strList_393 = new ArrayList<>(); - String[][][] multi_393 = new String[5][10][32]; - int i_394 = 394; - boolean j_394 = false; - String str_394 = new String("the 394-th string."); - int[] ia_394 = new int[]{394}; - Object obj_394 = new Object(); - List strList_394 = new ArrayList<>(); - String[][][] multi_394 = new String[5][10][32]; - int i_395 = 395; - boolean j_395 = true; - String str_395 = new String("the 395-th string."); - int[] ia_395 = new int[]{395}; - Object obj_395 = new Object(); - List strList_395 = new ArrayList<>(); - String[][][] multi_395 = new String[5][10][32]; - int i_396 = 396; - boolean j_396 = false; - String str_396 = new String("the 396-th string."); - int[] ia_396 = new int[]{396}; - Object obj_396 = new Object(); - List strList_396 = new ArrayList<>(); - String[][][] multi_396 = new String[5][10][32]; - int i_397 = 397; - boolean j_397 = true; - String str_397 = new String("the 397-th string."); - int[] ia_397 = new int[]{397}; - Object obj_397 = new Object(); - List strList_397 = new ArrayList<>(); - String[][][] multi_397 = new String[5][10][32]; - int i_398 = 398; - boolean j_398 = false; - String str_398 = new String("the 398-th string."); - int[] ia_398 = new int[]{398}; - Object obj_398 = new Object(); - List strList_398 = new ArrayList<>(); - String[][][] multi_398 = new String[5][10][32]; - int i_399 = 399; - boolean j_399 = true; - String str_399 = new String("the 399-th string."); - int[] ia_399 = new int[]{399}; - Object obj_399 = new Object(); - List strList_399 = new ArrayList<>(); - String[][][] multi_399 = new String[5][10][32]; - int i_400 = 400; - boolean j_400 = false; - String str_400 = new String("the 400-th string."); - int[] ia_400 = new int[]{400}; - Object obj_400 = new Object(); - List strList_400 = new ArrayList<>(); - String[][][] multi_400 = new String[5][10][32]; - int i_401 = 401; - boolean j_401 = true; - String str_401 = new String("the 401-th string."); - int[] ia_401 = new int[]{401}; - Object obj_401 = new Object(); - List strList_401 = new ArrayList<>(); - String[][][] multi_401 = new String[5][10][32]; - int i_402 = 402; - boolean j_402 = false; - String str_402 = new String("the 402-th string."); - int[] ia_402 = new int[]{402}; - Object obj_402 = new Object(); - List strList_402 = new ArrayList<>(); - String[][][] multi_402 = new String[5][10][32]; - int i_403 = 403; - boolean j_403 = true; - String str_403 = new String("the 403-th string."); - int[] ia_403 = new int[]{403}; - Object obj_403 = new Object(); - List strList_403 = new ArrayList<>(); - String[][][] multi_403 = new String[5][10][32]; - int i_404 = 404; - boolean j_404 = false; - String str_404 = new String("the 404-th string."); - int[] ia_404 = new int[]{404}; - Object obj_404 = new Object(); - List strList_404 = new ArrayList<>(); - String[][][] multi_404 = new String[5][10][32]; - int i_405 = 405; - boolean j_405 = true; - String str_405 = new String("the 405-th string."); - int[] ia_405 = new int[]{405}; - Object obj_405 = new Object(); - List strList_405 = new ArrayList<>(); - String[][][] multi_405 = new String[5][10][32]; - int i_406 = 406; - boolean j_406 = false; - String str_406 = new String("the 406-th string."); - int[] ia_406 = new int[]{406}; - Object obj_406 = new Object(); - List strList_406 = new ArrayList<>(); - String[][][] multi_406 = new String[5][10][32]; - int i_407 = 407; - boolean j_407 = true; - String str_407 = new String("the 407-th string."); - int[] ia_407 = new int[]{407}; - Object obj_407 = new Object(); - List strList_407 = new ArrayList<>(); - String[][][] multi_407 = new String[5][10][32]; - int i_408 = 408; - boolean j_408 = false; - String str_408 = new String("the 408-th string."); - int[] ia_408 = new int[]{408}; - Object obj_408 = new Object(); - List strList_408 = new ArrayList<>(); - String[][][] multi_408 = new String[5][10][32]; - int i_409 = 409; - boolean j_409 = true; - String str_409 = new String("the 409-th string."); - int[] ia_409 = new int[]{409}; - Object obj_409 = new Object(); - List strList_409 = new ArrayList<>(); - String[][][] multi_409 = new String[5][10][32]; - int i_410 = 410; - boolean j_410 = false; - String str_410 = new String("the 410-th string."); - int[] ia_410 = new int[]{410}; - Object obj_410 = new Object(); - List strList_410 = new ArrayList<>(); - String[][][] multi_410 = new String[5][10][32]; - int i_411 = 411; - boolean j_411 = true; - String str_411 = new String("the 411-th string."); - int[] ia_411 = new int[]{411}; - Object obj_411 = new Object(); - List strList_411 = new ArrayList<>(); - String[][][] multi_411 = new String[5][10][32]; - int i_412 = 412; - boolean j_412 = false; - String str_412 = new String("the 412-th string."); - int[] ia_412 = new int[]{412}; - Object obj_412 = new Object(); - List strList_412 = new ArrayList<>(); - String[][][] multi_412 = new String[5][10][32]; - int i_413 = 413; - boolean j_413 = true; - String str_413 = new String("the 413-th string."); - int[] ia_413 = new int[]{413}; - Object obj_413 = new Object(); - List strList_413 = new ArrayList<>(); - String[][][] multi_413 = new String[5][10][32]; - int i_414 = 414; - boolean j_414 = false; - String str_414 = new String("the 414-th string."); - int[] ia_414 = new int[]{414}; - Object obj_414 = new Object(); - List strList_414 = new ArrayList<>(); - String[][][] multi_414 = new String[5][10][32]; - int i_415 = 415; - boolean j_415 = true; - String str_415 = new String("the 415-th string."); - int[] ia_415 = new int[]{415}; - Object obj_415 = new Object(); - List strList_415 = new ArrayList<>(); - String[][][] multi_415 = new String[5][10][32]; - int i_416 = 416; - boolean j_416 = false; - String str_416 = new String("the 416-th string."); - int[] ia_416 = new int[]{416}; - Object obj_416 = new Object(); - List strList_416 = new ArrayList<>(); - String[][][] multi_416 = new String[5][10][32]; - int i_417 = 417; - boolean j_417 = true; - String str_417 = new String("the 417-th string."); - int[] ia_417 = new int[]{417}; - Object obj_417 = new Object(); - List strList_417 = new ArrayList<>(); - String[][][] multi_417 = new String[5][10][32]; - int i_418 = 418; - boolean j_418 = false; - String str_418 = new String("the 418-th string."); - int[] ia_418 = new int[]{418}; - Object obj_418 = new Object(); - List strList_418 = new ArrayList<>(); - String[][][] multi_418 = new String[5][10][32]; - int i_419 = 419; - boolean j_419 = true; - String str_419 = new String("the 419-th string."); - int[] ia_419 = new int[]{419}; - Object obj_419 = new Object(); - List strList_419 = new ArrayList<>(); - String[][][] multi_419 = new String[5][10][32]; - int i_420 = 420; - boolean j_420 = false; - String str_420 = new String("the 420-th string."); - int[] ia_420 = new int[]{420}; - Object obj_420 = new Object(); - List strList_420 = new ArrayList<>(); - String[][][] multi_420 = new String[5][10][32]; - int i_421 = 421; - boolean j_421 = true; - String str_421 = new String("the 421-th string."); - int[] ia_421 = new int[]{421}; - Object obj_421 = new Object(); - List strList_421 = new ArrayList<>(); - String[][][] multi_421 = new String[5][10][32]; - int i_422 = 422; - boolean j_422 = false; - String str_422 = new String("the 422-th string."); - int[] ia_422 = new int[]{422}; - Object obj_422 = new Object(); - List strList_422 = new ArrayList<>(); - String[][][] multi_422 = new String[5][10][32]; - int i_423 = 423; - boolean j_423 = true; - String str_423 = new String("the 423-th string."); - int[] ia_423 = new int[]{423}; - Object obj_423 = new Object(); - List strList_423 = new ArrayList<>(); - String[][][] multi_423 = new String[5][10][32]; - int i_424 = 424; - boolean j_424 = false; - String str_424 = new String("the 424-th string."); - int[] ia_424 = new int[]{424}; - Object obj_424 = new Object(); - List strList_424 = new ArrayList<>(); - String[][][] multi_424 = new String[5][10][32]; - int i_425 = 425; - boolean j_425 = true; - String str_425 = new String("the 425-th string."); - int[] ia_425 = new int[]{425}; - Object obj_425 = new Object(); - List strList_425 = new ArrayList<>(); - String[][][] multi_425 = new String[5][10][32]; - int i_426 = 426; - boolean j_426 = false; - String str_426 = new String("the 426-th string."); - int[] ia_426 = new int[]{426}; - Object obj_426 = new Object(); - List strList_426 = new ArrayList<>(); - String[][][] multi_426 = new String[5][10][32]; - int i_427 = 427; - boolean j_427 = true; - String str_427 = new String("the 427-th string."); - int[] ia_427 = new int[]{427}; - Object obj_427 = new Object(); - List strList_427 = new ArrayList<>(); - String[][][] multi_427 = new String[5][10][32]; - int i_428 = 428; - boolean j_428 = false; - String str_428 = new String("the 428-th string."); - int[] ia_428 = new int[]{428}; - Object obj_428 = new Object(); - List strList_428 = new ArrayList<>(); - String[][][] multi_428 = new String[5][10][32]; - int i_429 = 429; - boolean j_429 = true; - String str_429 = new String("the 429-th string."); - int[] ia_429 = new int[]{429}; - Object obj_429 = new Object(); - List strList_429 = new ArrayList<>(); - String[][][] multi_429 = new String[5][10][32]; - int i_430 = 430; - boolean j_430 = false; - String str_430 = new String("the 430-th string."); - int[] ia_430 = new int[]{430}; - Object obj_430 = new Object(); - List strList_430 = new ArrayList<>(); - String[][][] multi_430 = new String[5][10][32]; - int i_431 = 431; - boolean j_431 = true; - String str_431 = new String("the 431-th string."); - int[] ia_431 = new int[]{431}; - Object obj_431 = new Object(); - List strList_431 = new ArrayList<>(); - String[][][] multi_431 = new String[5][10][32]; - int i_432 = 432; - boolean j_432 = false; - String str_432 = new String("the 432-th string."); - int[] ia_432 = new int[]{432}; - Object obj_432 = new Object(); - List strList_432 = new ArrayList<>(); - String[][][] multi_432 = new String[5][10][32]; - int i_433 = 433; - boolean j_433 = true; - String str_433 = new String("the 433-th string."); - int[] ia_433 = new int[]{433}; - Object obj_433 = new Object(); - List strList_433 = new ArrayList<>(); - String[][][] multi_433 = new String[5][10][32]; - int i_434 = 434; - boolean j_434 = false; - String str_434 = new String("the 434-th string."); - int[] ia_434 = new int[]{434}; - Object obj_434 = new Object(); - List strList_434 = new ArrayList<>(); - String[][][] multi_434 = new String[5][10][32]; - int i_435 = 435; - boolean j_435 = true; - String str_435 = new String("the 435-th string."); - int[] ia_435 = new int[]{435}; - Object obj_435 = new Object(); - List strList_435 = new ArrayList<>(); - String[][][] multi_435 = new String[5][10][32]; - int i_436 = 436; - boolean j_436 = false; - String str_436 = new String("the 436-th string."); - int[] ia_436 = new int[]{436}; - Object obj_436 = new Object(); - List strList_436 = new ArrayList<>(); - String[][][] multi_436 = new String[5][10][32]; - int i_437 = 437; - boolean j_437 = true; - String str_437 = new String("the 437-th string."); - int[] ia_437 = new int[]{437}; - Object obj_437 = new Object(); - List strList_437 = new ArrayList<>(); - String[][][] multi_437 = new String[5][10][32]; - int i_438 = 438; - boolean j_438 = false; - String str_438 = new String("the 438-th string."); - int[] ia_438 = new int[]{438}; - Object obj_438 = new Object(); - List strList_438 = new ArrayList<>(); - String[][][] multi_438 = new String[5][10][32]; - int i_439 = 439; - boolean j_439 = true; - String str_439 = new String("the 439-th string."); - int[] ia_439 = new int[]{439}; - Object obj_439 = new Object(); - List strList_439 = new ArrayList<>(); - String[][][] multi_439 = new String[5][10][32]; - int i_440 = 440; - boolean j_440 = false; - String str_440 = new String("the 440-th string."); - int[] ia_440 = new int[]{440}; - Object obj_440 = new Object(); - List strList_440 = new ArrayList<>(); - String[][][] multi_440 = new String[5][10][32]; - int i_441 = 441; - boolean j_441 = true; - String str_441 = new String("the 441-th string."); - int[] ia_441 = new int[]{441}; - Object obj_441 = new Object(); - List strList_441 = new ArrayList<>(); - String[][][] multi_441 = new String[5][10][32]; - int i_442 = 442; - boolean j_442 = false; - String str_442 = new String("the 442-th string."); - int[] ia_442 = new int[]{442}; - Object obj_442 = new Object(); - List strList_442 = new ArrayList<>(); - String[][][] multi_442 = new String[5][10][32]; - int i_443 = 443; - boolean j_443 = true; - String str_443 = new String("the 443-th string."); - int[] ia_443 = new int[]{443}; - Object obj_443 = new Object(); - List strList_443 = new ArrayList<>(); - String[][][] multi_443 = new String[5][10][32]; - int i_444 = 444; - boolean j_444 = false; - String str_444 = new String("the 444-th string."); - int[] ia_444 = new int[]{444}; - Object obj_444 = new Object(); - List strList_444 = new ArrayList<>(); - String[][][] multi_444 = new String[5][10][32]; - int i_445 = 445; - boolean j_445 = true; - String str_445 = new String("the 445-th string."); - int[] ia_445 = new int[]{445}; - Object obj_445 = new Object(); - List strList_445 = new ArrayList<>(); - String[][][] multi_445 = new String[5][10][32]; - int i_446 = 446; - boolean j_446 = false; - String str_446 = new String("the 446-th string."); - int[] ia_446 = new int[]{446}; - Object obj_446 = new Object(); - List strList_446 = new ArrayList<>(); - String[][][] multi_446 = new String[5][10][32]; - int i_447 = 447; - boolean j_447 = true; - String str_447 = new String("the 447-th string."); - int[] ia_447 = new int[]{447}; - Object obj_447 = new Object(); - List strList_447 = new ArrayList<>(); - String[][][] multi_447 = new String[5][10][32]; - int i_448 = 448; - boolean j_448 = false; - String str_448 = new String("the 448-th string."); - int[] ia_448 = new int[]{448}; - Object obj_448 = new Object(); - List strList_448 = new ArrayList<>(); - String[][][] multi_448 = new String[5][10][32]; - int i_449 = 449; - boolean j_449 = true; - String str_449 = new String("the 449-th string."); - int[] ia_449 = new int[]{449}; - Object obj_449 = new Object(); - List strList_449 = new ArrayList<>(); - String[][][] multi_449 = new String[5][10][32]; - int i_450 = 450; - boolean j_450 = false; - String str_450 = new String("the 450-th string."); - int[] ia_450 = new int[]{450}; - Object obj_450 = new Object(); - List strList_450 = new ArrayList<>(); - String[][][] multi_450 = new String[5][10][32]; - int i_451 = 451; - boolean j_451 = true; - String str_451 = new String("the 451-th string."); - int[] ia_451 = new int[]{451}; - Object obj_451 = new Object(); - List strList_451 = new ArrayList<>(); - String[][][] multi_451 = new String[5][10][32]; - int i_452 = 452; - boolean j_452 = false; - String str_452 = new String("the 452-th string."); - int[] ia_452 = new int[]{452}; - Object obj_452 = new Object(); - List strList_452 = new ArrayList<>(); - String[][][] multi_452 = new String[5][10][32]; - int i_453 = 453; - boolean j_453 = true; - String str_453 = new String("the 453-th string."); - int[] ia_453 = new int[]{453}; - Object obj_453 = new Object(); - List strList_453 = new ArrayList<>(); - String[][][] multi_453 = new String[5][10][32]; - int i_454 = 454; - boolean j_454 = false; - String str_454 = new String("the 454-th string."); - int[] ia_454 = new int[]{454}; - Object obj_454 = new Object(); - List strList_454 = new ArrayList<>(); - String[][][] multi_454 = new String[5][10][32]; - int i_455 = 455; - boolean j_455 = true; - String str_455 = new String("the 455-th string."); - int[] ia_455 = new int[]{455}; - Object obj_455 = new Object(); - List strList_455 = new ArrayList<>(); - String[][][] multi_455 = new String[5][10][32]; - int i_456 = 456; - boolean j_456 = false; - String str_456 = new String("the 456-th string."); - int[] ia_456 = new int[]{456}; - Object obj_456 = new Object(); - List strList_456 = new ArrayList<>(); - String[][][] multi_456 = new String[5][10][32]; - int i_457 = 457; - boolean j_457 = true; - String str_457 = new String("the 457-th string."); - int[] ia_457 = new int[]{457}; - Object obj_457 = new Object(); - List strList_457 = new ArrayList<>(); - String[][][] multi_457 = new String[5][10][32]; - int i_458 = 458; - boolean j_458 = false; - String str_458 = new String("the 458-th string."); - int[] ia_458 = new int[]{458}; - Object obj_458 = new Object(); - List strList_458 = new ArrayList<>(); - String[][][] multi_458 = new String[5][10][32]; - int i_459 = 459; - boolean j_459 = true; - String str_459 = new String("the 459-th string."); - int[] ia_459 = new int[]{459}; - Object obj_459 = new Object(); - List strList_459 = new ArrayList<>(); - String[][][] multi_459 = new String[5][10][32]; - int i_460 = 460; - boolean j_460 = false; - String str_460 = new String("the 460-th string."); - int[] ia_460 = new int[]{460}; - Object obj_460 = new Object(); - List strList_460 = new ArrayList<>(); - String[][][] multi_460 = new String[5][10][32]; - int i_461 = 461; - boolean j_461 = true; - String str_461 = new String("the 461-th string."); - int[] ia_461 = new int[]{461}; - Object obj_461 = new Object(); - List strList_461 = new ArrayList<>(); - String[][][] multi_461 = new String[5][10][32]; - int i_462 = 462; - boolean j_462 = false; - String str_462 = new String("the 462-th string."); - int[] ia_462 = new int[]{462}; - Object obj_462 = new Object(); - List strList_462 = new ArrayList<>(); - String[][][] multi_462 = new String[5][10][32]; - int i_463 = 463; - boolean j_463 = true; - String str_463 = new String("the 463-th string."); - int[] ia_463 = new int[]{463}; - Object obj_463 = new Object(); - List strList_463 = new ArrayList<>(); - String[][][] multi_463 = new String[5][10][32]; - int i_464 = 464; - boolean j_464 = false; - String str_464 = new String("the 464-th string."); - int[] ia_464 = new int[]{464}; - Object obj_464 = new Object(); - List strList_464 = new ArrayList<>(); - String[][][] multi_464 = new String[5][10][32]; - int i_465 = 465; - boolean j_465 = true; - String str_465 = new String("the 465-th string."); - int[] ia_465 = new int[]{465}; - Object obj_465 = new Object(); - List strList_465 = new ArrayList<>(); - String[][][] multi_465 = new String[5][10][32]; - int i_466 = 466; - boolean j_466 = false; - String str_466 = new String("the 466-th string."); - int[] ia_466 = new int[]{466}; - Object obj_466 = new Object(); - List strList_466 = new ArrayList<>(); - String[][][] multi_466 = new String[5][10][32]; - int i_467 = 467; - boolean j_467 = true; - String str_467 = new String("the 467-th string."); - int[] ia_467 = new int[]{467}; - Object obj_467 = new Object(); - List strList_467 = new ArrayList<>(); - String[][][] multi_467 = new String[5][10][32]; - int i_468 = 468; - boolean j_468 = false; - String str_468 = new String("the 468-th string."); - int[] ia_468 = new int[]{468}; - Object obj_468 = new Object(); - List strList_468 = new ArrayList<>(); - String[][][] multi_468 = new String[5][10][32]; - int i_469 = 469; - boolean j_469 = true; - String str_469 = new String("the 469-th string."); - int[] ia_469 = new int[]{469}; - Object obj_469 = new Object(); - List strList_469 = new ArrayList<>(); - String[][][] multi_469 = new String[5][10][32]; - int i_470 = 470; - boolean j_470 = false; - String str_470 = new String("the 470-th string."); - int[] ia_470 = new int[]{470}; - Object obj_470 = new Object(); - List strList_470 = new ArrayList<>(); - String[][][] multi_470 = new String[5][10][32]; - int i_471 = 471; - boolean j_471 = true; - String str_471 = new String("the 471-th string."); - int[] ia_471 = new int[]{471}; - Object obj_471 = new Object(); - List strList_471 = new ArrayList<>(); - String[][][] multi_471 = new String[5][10][32]; - int i_472 = 472; - boolean j_472 = false; - String str_472 = new String("the 472-th string."); - int[] ia_472 = new int[]{472}; - Object obj_472 = new Object(); - List strList_472 = new ArrayList<>(); - String[][][] multi_472 = new String[5][10][32]; - int i_473 = 473; - boolean j_473 = true; - String str_473 = new String("the 473-th string."); - int[] ia_473 = new int[]{473}; - Object obj_473 = new Object(); - List strList_473 = new ArrayList<>(); - String[][][] multi_473 = new String[5][10][32]; - int i_474 = 474; - boolean j_474 = false; - String str_474 = new String("the 474-th string."); - int[] ia_474 = new int[]{474}; - Object obj_474 = new Object(); - List strList_474 = new ArrayList<>(); - String[][][] multi_474 = new String[5][10][32]; - int i_475 = 475; - boolean j_475 = true; - String str_475 = new String("the 475-th string."); - int[] ia_475 = new int[]{475}; - Object obj_475 = new Object(); - List strList_475 = new ArrayList<>(); - String[][][] multi_475 = new String[5][10][32]; - int i_476 = 476; - boolean j_476 = false; - String str_476 = new String("the 476-th string."); - int[] ia_476 = new int[]{476}; - Object obj_476 = new Object(); - List strList_476 = new ArrayList<>(); - String[][][] multi_476 = new String[5][10][32]; - int i_477 = 477; - boolean j_477 = true; - String str_477 = new String("the 477-th string."); - int[] ia_477 = new int[]{477}; - Object obj_477 = new Object(); - List strList_477 = new ArrayList<>(); - String[][][] multi_477 = new String[5][10][32]; - int i_478 = 478; - boolean j_478 = false; - String str_478 = new String("the 478-th string."); - int[] ia_478 = new int[]{478}; - Object obj_478 = new Object(); - List strList_478 = new ArrayList<>(); - String[][][] multi_478 = new String[5][10][32]; - int i_479 = 479; - boolean j_479 = true; - String str_479 = new String("the 479-th string."); - int[] ia_479 = new int[]{479}; - Object obj_479 = new Object(); - List strList_479 = new ArrayList<>(); - String[][][] multi_479 = new String[5][10][32]; - int i_480 = 480; - boolean j_480 = false; - String str_480 = new String("the 480-th string."); - int[] ia_480 = new int[]{480}; - Object obj_480 = new Object(); - List strList_480 = new ArrayList<>(); - String[][][] multi_480 = new String[5][10][32]; - int i_481 = 481; - boolean j_481 = true; - String str_481 = new String("the 481-th string."); - int[] ia_481 = new int[]{481}; - Object obj_481 = new Object(); - List strList_481 = new ArrayList<>(); - String[][][] multi_481 = new String[5][10][32]; - int i_482 = 482; - boolean j_482 = false; - String str_482 = new String("the 482-th string."); - int[] ia_482 = new int[]{482}; - Object obj_482 = new Object(); - List strList_482 = new ArrayList<>(); - String[][][] multi_482 = new String[5][10][32]; - int i_483 = 483; - boolean j_483 = true; - String str_483 = new String("the 483-th string."); - int[] ia_483 = new int[]{483}; - Object obj_483 = new Object(); - List strList_483 = new ArrayList<>(); - String[][][] multi_483 = new String[5][10][32]; - int i_484 = 484; - boolean j_484 = false; - String str_484 = new String("the 484-th string."); - int[] ia_484 = new int[]{484}; - Object obj_484 = new Object(); - List strList_484 = new ArrayList<>(); - String[][][] multi_484 = new String[5][10][32]; - int i_485 = 485; - boolean j_485 = true; - String str_485 = new String("the 485-th string."); - int[] ia_485 = new int[]{485}; - Object obj_485 = new Object(); - List strList_485 = new ArrayList<>(); - String[][][] multi_485 = new String[5][10][32]; - int i_486 = 486; - boolean j_486 = false; - String str_486 = new String("the 486-th string."); - int[] ia_486 = new int[]{486}; - Object obj_486 = new Object(); - List strList_486 = new ArrayList<>(); - String[][][] multi_486 = new String[5][10][32]; - int i_487 = 487; - boolean j_487 = true; - String str_487 = new String("the 487-th string."); - int[] ia_487 = new int[]{487}; - Object obj_487 = new Object(); - List strList_487 = new ArrayList<>(); - String[][][] multi_487 = new String[5][10][32]; - int i_488 = 488; - boolean j_488 = false; - String str_488 = new String("the 488-th string."); - int[] ia_488 = new int[]{488}; - Object obj_488 = new Object(); - List strList_488 = new ArrayList<>(); - String[][][] multi_488 = new String[5][10][32]; - int i_489 = 489; - boolean j_489 = true; - String str_489 = new String("the 489-th string."); - int[] ia_489 = new int[]{489}; - Object obj_489 = new Object(); - List strList_489 = new ArrayList<>(); - String[][][] multi_489 = new String[5][10][32]; - int i_490 = 490; - boolean j_490 = false; - String str_490 = new String("the 490-th string."); - int[] ia_490 = new int[]{490}; - Object obj_490 = new Object(); - List strList_490 = new ArrayList<>(); - String[][][] multi_490 = new String[5][10][32]; - int i_491 = 491; - boolean j_491 = true; - String str_491 = new String("the 491-th string."); - int[] ia_491 = new int[]{491}; - Object obj_491 = new Object(); - List strList_491 = new ArrayList<>(); - String[][][] multi_491 = new String[5][10][32]; - int i_492 = 492; - boolean j_492 = false; - String str_492 = new String("the 492-th string."); - int[] ia_492 = new int[]{492}; - Object obj_492 = new Object(); - List strList_492 = new ArrayList<>(); - String[][][] multi_492 = new String[5][10][32]; - int i_493 = 493; - boolean j_493 = true; - String str_493 = new String("the 493-th string."); - int[] ia_493 = new int[]{493}; - Object obj_493 = new Object(); - List strList_493 = new ArrayList<>(); - String[][][] multi_493 = new String[5][10][32]; - int i_494 = 494; - boolean j_494 = false; - String str_494 = new String("the 494-th string."); - int[] ia_494 = new int[]{494}; - Object obj_494 = new Object(); - List strList_494 = new ArrayList<>(); - String[][][] multi_494 = new String[5][10][32]; - int i_495 = 495; - boolean j_495 = true; - String str_495 = new String("the 495-th string."); - int[] ia_495 = new int[]{495}; - Object obj_495 = new Object(); - List strList_495 = new ArrayList<>(); - String[][][] multi_495 = new String[5][10][32]; - int i_496 = 496; - boolean j_496 = false; - String str_496 = new String("the 496-th string."); - int[] ia_496 = new int[]{496}; - Object obj_496 = new Object(); - List strList_496 = new ArrayList<>(); - String[][][] multi_496 = new String[5][10][32]; - int i_497 = 497; - boolean j_497 = true; - String str_497 = new String("the 497-th string."); - int[] ia_497 = new int[]{497}; - Object obj_497 = new Object(); - List strList_497 = new ArrayList<>(); - String[][][] multi_497 = new String[5][10][32]; - int i_498 = 498; - boolean j_498 = false; - String str_498 = new String("the 498-th string."); - int[] ia_498 = new int[]{498}; - Object obj_498 = new Object(); - List strList_498 = new ArrayList<>(); - String[][][] multi_498 = new String[5][10][32]; - int i_499 = 499; - boolean j_499 = true; - String str_499 = new String("the 499-th string."); - int[] ia_499 = new int[]{499}; - Object obj_499 = new Object(); - List strList_499 = new ArrayList<>(); - String[][][] multi_499 = new String[5][10][32]; - int i_500 = 500; - boolean j_500 = false; - String str_500 = new String("the 500-th string."); - int[] ia_500 = new int[]{500}; - Object obj_500 = new Object(); - List strList_500 = new ArrayList<>(); - String[][][] multi_500 = new String[5][10][32]; - int i_501 = 501; - boolean j_501 = true; - String str_501 = new String("the 501-th string."); - int[] ia_501 = new int[]{501}; - Object obj_501 = new Object(); - List strList_501 = new ArrayList<>(); - String[][][] multi_501 = new String[5][10][32]; - int i_502 = 502; - boolean j_502 = false; - String str_502 = new String("the 502-th string."); - int[] ia_502 = new int[]{502}; - Object obj_502 = new Object(); - List strList_502 = new ArrayList<>(); - String[][][] multi_502 = new String[5][10][32]; - int i_503 = 503; - boolean j_503 = true; - String str_503 = new String("the 503-th string."); - int[] ia_503 = new int[]{503}; - Object obj_503 = new Object(); - List strList_503 = new ArrayList<>(); - String[][][] multi_503 = new String[5][10][32]; - int i_504 = 504; - boolean j_504 = false; - String str_504 = new String("the 504-th string."); - int[] ia_504 = new int[]{504}; - Object obj_504 = new Object(); - List strList_504 = new ArrayList<>(); - String[][][] multi_504 = new String[5][10][32]; - int i_505 = 505; - boolean j_505 = true; - String str_505 = new String("the 505-th string."); - int[] ia_505 = new int[]{505}; - Object obj_505 = new Object(); - List strList_505 = new ArrayList<>(); - String[][][] multi_505 = new String[5][10][32]; - int i_506 = 506; - boolean j_506 = false; - String str_506 = new String("the 506-th string."); - int[] ia_506 = new int[]{506}; - Object obj_506 = new Object(); - List strList_506 = new ArrayList<>(); - String[][][] multi_506 = new String[5][10][32]; - int i_507 = 507; - boolean j_507 = true; - String str_507 = new String("the 507-th string."); - int[] ia_507 = new int[]{507}; - Object obj_507 = new Object(); - List strList_507 = new ArrayList<>(); - String[][][] multi_507 = new String[5][10][32]; - int i_508 = 508; - boolean j_508 = false; - String str_508 = new String("the 508-th string."); - int[] ia_508 = new int[]{508}; - Object obj_508 = new Object(); - List strList_508 = new ArrayList<>(); - String[][][] multi_508 = new String[5][10][32]; - int i_509 = 509; - boolean j_509 = true; - String str_509 = new String("the 509-th string."); - int[] ia_509 = new int[]{509}; - Object obj_509 = new Object(); - List strList_509 = new ArrayList<>(); - String[][][] multi_509 = new String[5][10][32]; - int i_510 = 510; - boolean j_510 = false; - String str_510 = new String("the 510-th string."); - int[] ia_510 = new int[]{510}; - Object obj_510 = new Object(); - List strList_510 = new ArrayList<>(); - String[][][] multi_510 = new String[5][10][32]; - int i_511 = 511; - boolean j_511 = true; - String str_511 = new String("the 511-th string."); - int[] ia_511 = new int[]{511}; - Object obj_511 = new Object(); - List strList_511 = new ArrayList<>(); - String[][][] multi_511 = new String[5][10][32]; - int i_512 = 512; - boolean j_512 = false; - String str_512 = new String("the 512-th string."); - int[] ia_512 = new int[]{512}; - Object obj_512 = new Object(); - List strList_512 = new ArrayList<>(); - String[][][] multi_512 = new String[5][10][32]; - int i_513 = 513; - boolean j_513 = true; - String str_513 = new String("the 513-th string."); - int[] ia_513 = new int[]{513}; - Object obj_513 = new Object(); - List strList_513 = new ArrayList<>(); - String[][][] multi_513 = new String[5][10][32]; - int i_514 = 514; - boolean j_514 = false; - String str_514 = new String("the 514-th string."); - int[] ia_514 = new int[]{514}; - Object obj_514 = new Object(); - List strList_514 = new ArrayList<>(); - String[][][] multi_514 = new String[5][10][32]; - int i_515 = 515; - boolean j_515 = true; - String str_515 = new String("the 515-th string."); - int[] ia_515 = new int[]{515}; - Object obj_515 = new Object(); - List strList_515 = new ArrayList<>(); - String[][][] multi_515 = new String[5][10][32]; - int i_516 = 516; - boolean j_516 = false; - String str_516 = new String("the 516-th string."); - int[] ia_516 = new int[]{516}; - Object obj_516 = new Object(); - List strList_516 = new ArrayList<>(); - String[][][] multi_516 = new String[5][10][32]; - int i_517 = 517; - boolean j_517 = true; - String str_517 = new String("the 517-th string."); - int[] ia_517 = new int[]{517}; - Object obj_517 = new Object(); - List strList_517 = new ArrayList<>(); - String[][][] multi_517 = new String[5][10][32]; - int i_518 = 518; - boolean j_518 = false; - String str_518 = new String("the 518-th string."); - int[] ia_518 = new int[]{518}; - Object obj_518 = new Object(); - List strList_518 = new ArrayList<>(); - String[][][] multi_518 = new String[5][10][32]; - int i_519 = 519; - boolean j_519 = true; - String str_519 = new String("the 519-th string."); - int[] ia_519 = new int[]{519}; - Object obj_519 = new Object(); - List strList_519 = new ArrayList<>(); - String[][][] multi_519 = new String[5][10][32]; - int i_520 = 520; - boolean j_520 = false; - String str_520 = new String("the 520-th string."); - int[] ia_520 = new int[]{520}; - Object obj_520 = new Object(); - List strList_520 = new ArrayList<>(); - String[][][] multi_520 = new String[5][10][32]; - int i_521 = 521; - boolean j_521 = true; - String str_521 = new String("the 521-th string."); - int[] ia_521 = new int[]{521}; - Object obj_521 = new Object(); - List strList_521 = new ArrayList<>(); - String[][][] multi_521 = new String[5][10][32]; - int i_522 = 522; - boolean j_522 = false; - String str_522 = new String("the 522-th string."); - int[] ia_522 = new int[]{522}; - Object obj_522 = new Object(); - List strList_522 = new ArrayList<>(); - String[][][] multi_522 = new String[5][10][32]; - int i_523 = 523; - boolean j_523 = true; - String str_523 = new String("the 523-th string."); - int[] ia_523 = new int[]{523}; - Object obj_523 = new Object(); - List strList_523 = new ArrayList<>(); - String[][][] multi_523 = new String[5][10][32]; - int i_524 = 524; - boolean j_524 = false; - String str_524 = new String("the 524-th string."); - int[] ia_524 = new int[]{524}; - Object obj_524 = new Object(); - List strList_524 = new ArrayList<>(); - String[][][] multi_524 = new String[5][10][32]; - int i_525 = 525; - boolean j_525 = true; - String str_525 = new String("the 525-th string."); - int[] ia_525 = new int[]{525}; - Object obj_525 = new Object(); - List strList_525 = new ArrayList<>(); - String[][][] multi_525 = new String[5][10][32]; - int i_526 = 526; - boolean j_526 = false; - String str_526 = new String("the 526-th string."); - int[] ia_526 = new int[]{526}; - Object obj_526 = new Object(); - List strList_526 = new ArrayList<>(); - String[][][] multi_526 = new String[5][10][32]; - int i_527 = 527; - boolean j_527 = true; - String str_527 = new String("the 527-th string."); - int[] ia_527 = new int[]{527}; - Object obj_527 = new Object(); - List strList_527 = new ArrayList<>(); - String[][][] multi_527 = new String[5][10][32]; - int i_528 = 528; - boolean j_528 = false; - String str_528 = new String("the 528-th string."); - int[] ia_528 = new int[]{528}; - Object obj_528 = new Object(); - List strList_528 = new ArrayList<>(); - String[][][] multi_528 = new String[5][10][32]; - int i_529 = 529; - boolean j_529 = true; - String str_529 = new String("the 529-th string."); - int[] ia_529 = new int[]{529}; - Object obj_529 = new Object(); - List strList_529 = new ArrayList<>(); - String[][][] multi_529 = new String[5][10][32]; - int i_530 = 530; - boolean j_530 = false; - String str_530 = new String("the 530-th string."); - int[] ia_530 = new int[]{530}; - Object obj_530 = new Object(); - List strList_530 = new ArrayList<>(); - String[][][] multi_530 = new String[5][10][32]; - int i_531 = 531; - boolean j_531 = true; - String str_531 = new String("the 531-th string."); - int[] ia_531 = new int[]{531}; - Object obj_531 = new Object(); - List strList_531 = new ArrayList<>(); - String[][][] multi_531 = new String[5][10][32]; - int i_532 = 532; - boolean j_532 = false; - String str_532 = new String("the 532-th string."); - int[] ia_532 = new int[]{532}; - Object obj_532 = new Object(); - List strList_532 = new ArrayList<>(); - String[][][] multi_532 = new String[5][10][32]; - int i_533 = 533; - boolean j_533 = true; - String str_533 = new String("the 533-th string."); - int[] ia_533 = new int[]{533}; - Object obj_533 = new Object(); - List strList_533 = new ArrayList<>(); - String[][][] multi_533 = new String[5][10][32]; - int i_534 = 534; - boolean j_534 = false; - String str_534 = new String("the 534-th string."); - int[] ia_534 = new int[]{534}; - Object obj_534 = new Object(); - List strList_534 = new ArrayList<>(); - String[][][] multi_534 = new String[5][10][32]; - int i_535 = 535; - boolean j_535 = true; - String str_535 = new String("the 535-th string."); - int[] ia_535 = new int[]{535}; - Object obj_535 = new Object(); - List strList_535 = new ArrayList<>(); - String[][][] multi_535 = new String[5][10][32]; - int i_536 = 536; - boolean j_536 = false; - String str_536 = new String("the 536-th string."); - int[] ia_536 = new int[]{536}; - Object obj_536 = new Object(); - List strList_536 = new ArrayList<>(); - String[][][] multi_536 = new String[5][10][32]; - int i_537 = 537; - boolean j_537 = true; - String str_537 = new String("the 537-th string."); - int[] ia_537 = new int[]{537}; - Object obj_537 = new Object(); - List strList_537 = new ArrayList<>(); - String[][][] multi_537 = new String[5][10][32]; - int i_538 = 538; - boolean j_538 = false; - String str_538 = new String("the 538-th string."); - int[] ia_538 = new int[]{538}; - Object obj_538 = new Object(); - List strList_538 = new ArrayList<>(); - String[][][] multi_538 = new String[5][10][32]; - int i_539 = 539; - boolean j_539 = true; - String str_539 = new String("the 539-th string."); - int[] ia_539 = new int[]{539}; - Object obj_539 = new Object(); - List strList_539 = new ArrayList<>(); - String[][][] multi_539 = new String[5][10][32]; - int i_540 = 540; - boolean j_540 = false; - String str_540 = new String("the 540-th string."); - int[] ia_540 = new int[]{540}; - Object obj_540 = new Object(); - List strList_540 = new ArrayList<>(); - String[][][] multi_540 = new String[5][10][32]; - int i_541 = 541; - boolean j_541 = true; - String str_541 = new String("the 541-th string."); - int[] ia_541 = new int[]{541}; - Object obj_541 = new Object(); - List strList_541 = new ArrayList<>(); - String[][][] multi_541 = new String[5][10][32]; - int i_542 = 542; - boolean j_542 = false; - String str_542 = new String("the 542-th string."); - int[] ia_542 = new int[]{542}; - Object obj_542 = new Object(); - List strList_542 = new ArrayList<>(); - String[][][] multi_542 = new String[5][10][32]; - int i_543 = 543; - boolean j_543 = true; - String str_543 = new String("the 543-th string."); - int[] ia_543 = new int[]{543}; - Object obj_543 = new Object(); - List strList_543 = new ArrayList<>(); - String[][][] multi_543 = new String[5][10][32]; - int i_544 = 544; - boolean j_544 = false; - String str_544 = new String("the 544-th string."); - int[] ia_544 = new int[]{544}; - Object obj_544 = new Object(); - List strList_544 = new ArrayList<>(); - String[][][] multi_544 = new String[5][10][32]; - int i_545 = 545; - boolean j_545 = true; - String str_545 = new String("the 545-th string."); - int[] ia_545 = new int[]{545}; - Object obj_545 = new Object(); - List strList_545 = new ArrayList<>(); - String[][][] multi_545 = new String[5][10][32]; - int i_546 = 546; - boolean j_546 = false; - String str_546 = new String("the 546-th string."); - int[] ia_546 = new int[]{546}; - Object obj_546 = new Object(); - List strList_546 = new ArrayList<>(); - String[][][] multi_546 = new String[5][10][32]; - int i_547 = 547; - boolean j_547 = true; - String str_547 = new String("the 547-th string."); - int[] ia_547 = new int[]{547}; - Object obj_547 = new Object(); - List strList_547 = new ArrayList<>(); - String[][][] multi_547 = new String[5][10][32]; - int i_548 = 548; - boolean j_548 = false; - String str_548 = new String("the 548-th string."); - int[] ia_548 = new int[]{548}; - Object obj_548 = new Object(); - List strList_548 = new ArrayList<>(); - String[][][] multi_548 = new String[5][10][32]; - int i_549 = 549; - boolean j_549 = true; - String str_549 = new String("the 549-th string."); - int[] ia_549 = new int[]{549}; - Object obj_549 = new Object(); - List strList_549 = new ArrayList<>(); - String[][][] multi_549 = new String[5][10][32]; - int i_550 = 550; - boolean j_550 = false; - String str_550 = new String("the 550-th string."); - int[] ia_550 = new int[]{550}; - Object obj_550 = new Object(); - List strList_550 = new ArrayList<>(); - String[][][] multi_550 = new String[5][10][32]; - int i_551 = 551; - boolean j_551 = true; - String str_551 = new String("the 551-th string."); - int[] ia_551 = new int[]{551}; - Object obj_551 = new Object(); - List strList_551 = new ArrayList<>(); - String[][][] multi_551 = new String[5][10][32]; - int i_552 = 552; - boolean j_552 = false; - String str_552 = new String("the 552-th string."); - int[] ia_552 = new int[]{552}; - Object obj_552 = new Object(); - List strList_552 = new ArrayList<>(); - String[][][] multi_552 = new String[5][10][32]; - int i_553 = 553; - boolean j_553 = true; - String str_553 = new String("the 553-th string."); - int[] ia_553 = new int[]{553}; - Object obj_553 = new Object(); - List strList_553 = new ArrayList<>(); - String[][][] multi_553 = new String[5][10][32]; - int i_554 = 554; - boolean j_554 = false; - String str_554 = new String("the 554-th string."); - int[] ia_554 = new int[]{554}; - Object obj_554 = new Object(); - List strList_554 = new ArrayList<>(); - String[][][] multi_554 = new String[5][10][32]; - int i_555 = 555; - boolean j_555 = true; - String str_555 = new String("the 555-th string."); - int[] ia_555 = new int[]{555}; - Object obj_555 = new Object(); - List strList_555 = new ArrayList<>(); - String[][][] multi_555 = new String[5][10][32]; - int i_556 = 556; - boolean j_556 = false; - String str_556 = new String("the 556-th string."); - int[] ia_556 = new int[]{556}; - Object obj_556 = new Object(); - List strList_556 = new ArrayList<>(); - String[][][] multi_556 = new String[5][10][32]; - int i_557 = 557; - boolean j_557 = true; - String str_557 = new String("the 557-th string."); - int[] ia_557 = new int[]{557}; - Object obj_557 = new Object(); - List strList_557 = new ArrayList<>(); - String[][][] multi_557 = new String[5][10][32]; - int i_558 = 558; - boolean j_558 = false; - String str_558 = new String("the 558-th string."); - int[] ia_558 = new int[]{558}; - Object obj_558 = new Object(); - List strList_558 = new ArrayList<>(); - String[][][] multi_558 = new String[5][10][32]; - int i_559 = 559; - boolean j_559 = true; - String str_559 = new String("the 559-th string."); - int[] ia_559 = new int[]{559}; - Object obj_559 = new Object(); - List strList_559 = new ArrayList<>(); - String[][][] multi_559 = new String[5][10][32]; - int i_560 = 560; - boolean j_560 = false; - String str_560 = new String("the 560-th string."); - int[] ia_560 = new int[]{560}; - Object obj_560 = new Object(); - List strList_560 = new ArrayList<>(); - String[][][] multi_560 = new String[5][10][32]; - int i_561 = 561; - boolean j_561 = true; - String str_561 = new String("the 561-th string."); - int[] ia_561 = new int[]{561}; - Object obj_561 = new Object(); - List strList_561 = new ArrayList<>(); - String[][][] multi_561 = new String[5][10][32]; - int i_562 = 562; - boolean j_562 = false; - String str_562 = new String("the 562-th string."); - int[] ia_562 = new int[]{562}; - Object obj_562 = new Object(); - List strList_562 = new ArrayList<>(); - String[][][] multi_562 = new String[5][10][32]; - int i_563 = 563; - boolean j_563 = true; - String str_563 = new String("the 563-th string."); - int[] ia_563 = new int[]{563}; - Object obj_563 = new Object(); - List strList_563 = new ArrayList<>(); - String[][][] multi_563 = new String[5][10][32]; - int i_564 = 564; - boolean j_564 = false; - String str_564 = new String("the 564-th string."); - int[] ia_564 = new int[]{564}; - Object obj_564 = new Object(); - List strList_564 = new ArrayList<>(); - String[][][] multi_564 = new String[5][10][32]; - int i_565 = 565; - boolean j_565 = true; - String str_565 = new String("the 565-th string."); - int[] ia_565 = new int[]{565}; - Object obj_565 = new Object(); - List strList_565 = new ArrayList<>(); - String[][][] multi_565 = new String[5][10][32]; - int i_566 = 566; - boolean j_566 = false; - String str_566 = new String("the 566-th string."); - int[] ia_566 = new int[]{566}; - Object obj_566 = new Object(); - List strList_566 = new ArrayList<>(); - String[][][] multi_566 = new String[5][10][32]; - int i_567 = 567; - boolean j_567 = true; - String str_567 = new String("the 567-th string."); - int[] ia_567 = new int[]{567}; - Object obj_567 = new Object(); - List strList_567 = new ArrayList<>(); - String[][][] multi_567 = new String[5][10][32]; - int i_568 = 568; - boolean j_568 = false; - String str_568 = new String("the 568-th string."); - int[] ia_568 = new int[]{568}; - Object obj_568 = new Object(); - List strList_568 = new ArrayList<>(); - String[][][] multi_568 = new String[5][10][32]; - int i_569 = 569; - boolean j_569 = true; - String str_569 = new String("the 569-th string."); - int[] ia_569 = new int[]{569}; - Object obj_569 = new Object(); - List strList_569 = new ArrayList<>(); - String[][][] multi_569 = new String[5][10][32]; - int i_570 = 570; - boolean j_570 = false; - String str_570 = new String("the 570-th string."); - int[] ia_570 = new int[]{570}; - Object obj_570 = new Object(); - List strList_570 = new ArrayList<>(); - String[][][] multi_570 = new String[5][10][32]; - int i_571 = 571; - boolean j_571 = true; - String str_571 = new String("the 571-th string."); - int[] ia_571 = new int[]{571}; - Object obj_571 = new Object(); - List strList_571 = new ArrayList<>(); - String[][][] multi_571 = new String[5][10][32]; - int i_572 = 572; - boolean j_572 = false; - String str_572 = new String("the 572-th string."); - int[] ia_572 = new int[]{572}; - Object obj_572 = new Object(); - List strList_572 = new ArrayList<>(); - String[][][] multi_572 = new String[5][10][32]; - int i_573 = 573; - boolean j_573 = true; - String str_573 = new String("the 573-th string."); - int[] ia_573 = new int[]{573}; - Object obj_573 = new Object(); - List strList_573 = new ArrayList<>(); - String[][][] multi_573 = new String[5][10][32]; - int i_574 = 574; - boolean j_574 = false; - String str_574 = new String("the 574-th string."); - int[] ia_574 = new int[]{574}; - Object obj_574 = new Object(); - List strList_574 = new ArrayList<>(); - String[][][] multi_574 = new String[5][10][32]; - int i_575 = 575; - boolean j_575 = true; - String str_575 = new String("the 575-th string."); - int[] ia_575 = new int[]{575}; - Object obj_575 = new Object(); - List strList_575 = new ArrayList<>(); - String[][][] multi_575 = new String[5][10][32]; - int i_576 = 576; - boolean j_576 = false; - String str_576 = new String("the 576-th string."); - int[] ia_576 = new int[]{576}; - Object obj_576 = new Object(); - List strList_576 = new ArrayList<>(); - String[][][] multi_576 = new String[5][10][32]; - int i_577 = 577; - boolean j_577 = true; - String str_577 = new String("the 577-th string."); - int[] ia_577 = new int[]{577}; - Object obj_577 = new Object(); - List strList_577 = new ArrayList<>(); - String[][][] multi_577 = new String[5][10][32]; - int i_578 = 578; - boolean j_578 = false; - String str_578 = new String("the 578-th string."); - int[] ia_578 = new int[]{578}; - Object obj_578 = new Object(); - List strList_578 = new ArrayList<>(); - String[][][] multi_578 = new String[5][10][32]; - int i_579 = 579; - boolean j_579 = true; - String str_579 = new String("the 579-th string."); - int[] ia_579 = new int[]{579}; - Object obj_579 = new Object(); - List strList_579 = new ArrayList<>(); - String[][][] multi_579 = new String[5][10][32]; - int i_580 = 580; - boolean j_580 = false; - String str_580 = new String("the 580-th string."); - int[] ia_580 = new int[]{580}; - Object obj_580 = new Object(); - List strList_580 = new ArrayList<>(); - String[][][] multi_580 = new String[5][10][32]; - int i_581 = 581; - boolean j_581 = true; - String str_581 = new String("the 581-th string."); - int[] ia_581 = new int[]{581}; - Object obj_581 = new Object(); - List strList_581 = new ArrayList<>(); - String[][][] multi_581 = new String[5][10][32]; - int i_582 = 582; - boolean j_582 = false; - String str_582 = new String("the 582-th string."); - int[] ia_582 = new int[]{582}; - Object obj_582 = new Object(); - List strList_582 = new ArrayList<>(); - String[][][] multi_582 = new String[5][10][32]; - int i_583 = 583; - boolean j_583 = true; - String str_583 = new String("the 583-th string."); - int[] ia_583 = new int[]{583}; - Object obj_583 = new Object(); - List strList_583 = new ArrayList<>(); - String[][][] multi_583 = new String[5][10][32]; - int i_584 = 584; - boolean j_584 = false; - String str_584 = new String("the 584-th string."); - int[] ia_584 = new int[]{584}; - Object obj_584 = new Object(); - List strList_584 = new ArrayList<>(); - String[][][] multi_584 = new String[5][10][32]; - int i_585 = 585; - boolean j_585 = true; - String str_585 = new String("the 585-th string."); - int[] ia_585 = new int[]{585}; - Object obj_585 = new Object(); - List strList_585 = new ArrayList<>(); - String[][][] multi_585 = new String[5][10][32]; - int i_586 = 586; - boolean j_586 = false; - String str_586 = new String("the 586-th string."); - int[] ia_586 = new int[]{586}; - Object obj_586 = new Object(); - List strList_586 = new ArrayList<>(); - String[][][] multi_586 = new String[5][10][32]; - int i_587 = 587; - boolean j_587 = true; - String str_587 = new String("the 587-th string."); - int[] ia_587 = new int[]{587}; - Object obj_587 = new Object(); - List strList_587 = new ArrayList<>(); - String[][][] multi_587 = new String[5][10][32]; - int i_588 = 588; - boolean j_588 = false; - String str_588 = new String("the 588-th string."); - int[] ia_588 = new int[]{588}; - Object obj_588 = new Object(); - List strList_588 = new ArrayList<>(); - String[][][] multi_588 = new String[5][10][32]; - int i_589 = 589; - boolean j_589 = true; - String str_589 = new String("the 589-th string."); - int[] ia_589 = new int[]{589}; - Object obj_589 = new Object(); - List strList_589 = new ArrayList<>(); - String[][][] multi_589 = new String[5][10][32]; - int i_590 = 590; - boolean j_590 = false; - String str_590 = new String("the 590-th string."); - int[] ia_590 = new int[]{590}; - Object obj_590 = new Object(); - List strList_590 = new ArrayList<>(); - String[][][] multi_590 = new String[5][10][32]; - int i_591 = 591; - boolean j_591 = true; - String str_591 = new String("the 591-th string."); - int[] ia_591 = new int[]{591}; - Object obj_591 = new Object(); - List strList_591 = new ArrayList<>(); - String[][][] multi_591 = new String[5][10][32]; - int i_592 = 592; - boolean j_592 = false; - String str_592 = new String("the 592-th string."); - int[] ia_592 = new int[]{592}; - Object obj_592 = new Object(); - List strList_592 = new ArrayList<>(); - String[][][] multi_592 = new String[5][10][32]; - int i_593 = 593; - boolean j_593 = true; - String str_593 = new String("the 593-th string."); - int[] ia_593 = new int[]{593}; - Object obj_593 = new Object(); - List strList_593 = new ArrayList<>(); - String[][][] multi_593 = new String[5][10][32]; - int i_594 = 594; - boolean j_594 = false; - String str_594 = new String("the 594-th string."); - int[] ia_594 = new int[]{594}; - Object obj_594 = new Object(); - List strList_594 = new ArrayList<>(); - String[][][] multi_594 = new String[5][10][32]; - int i_595 = 595; - boolean j_595 = true; - String str_595 = new String("the 595-th string."); - int[] ia_595 = new int[]{595}; - Object obj_595 = new Object(); - List strList_595 = new ArrayList<>(); - String[][][] multi_595 = new String[5][10][32]; - int i_596 = 596; - boolean j_596 = false; - String str_596 = new String("the 596-th string."); - int[] ia_596 = new int[]{596}; - Object obj_596 = new Object(); - List strList_596 = new ArrayList<>(); - String[][][] multi_596 = new String[5][10][32]; - int i_597 = 597; - boolean j_597 = true; - String str_597 = new String("the 597-th string."); - int[] ia_597 = new int[]{597}; - Object obj_597 = new Object(); - List strList_597 = new ArrayList<>(); - String[][][] multi_597 = new String[5][10][32]; - int i_598 = 598; - boolean j_598 = false; - String str_598 = new String("the 598-th string."); - int[] ia_598 = new int[]{598}; - Object obj_598 = new Object(); - List strList_598 = new ArrayList<>(); - String[][][] multi_598 = new String[5][10][32]; - int i_599 = 599; - boolean j_599 = true; - String str_599 = new String("the 599-th string."); - int[] ia_599 = new int[]{599}; - Object obj_599 = new Object(); - List strList_599 = new ArrayList<>(); - String[][][] multi_599 = new String[5][10][32]; - int i_600 = 600; - boolean j_600 = false; - String str_600 = new String("the 600-th string."); - int[] ia_600 = new int[]{600}; - Object obj_600 = new Object(); - List strList_600 = new ArrayList<>(); - String[][][] multi_600 = new String[5][10][32]; - int i_601 = 601; - boolean j_601 = true; - String str_601 = new String("the 601-th string."); - int[] ia_601 = new int[]{601}; - Object obj_601 = new Object(); - List strList_601 = new ArrayList<>(); - String[][][] multi_601 = new String[5][10][32]; - int i_602 = 602; - boolean j_602 = false; - String str_602 = new String("the 602-th string."); - int[] ia_602 = new int[]{602}; - Object obj_602 = new Object(); - List strList_602 = new ArrayList<>(); - String[][][] multi_602 = new String[5][10][32]; - int i_603 = 603; - boolean j_603 = true; - String str_603 = new String("the 603-th string."); - int[] ia_603 = new int[]{603}; - Object obj_603 = new Object(); - List strList_603 = new ArrayList<>(); - String[][][] multi_603 = new String[5][10][32]; - int i_604 = 604; - boolean j_604 = false; - String str_604 = new String("the 604-th string."); - int[] ia_604 = new int[]{604}; - Object obj_604 = new Object(); - List strList_604 = new ArrayList<>(); - String[][][] multi_604 = new String[5][10][32]; - int i_605 = 605; - boolean j_605 = true; - String str_605 = new String("the 605-th string."); - int[] ia_605 = new int[]{605}; - Object obj_605 = new Object(); - List strList_605 = new ArrayList<>(); - String[][][] multi_605 = new String[5][10][32]; - int i_606 = 606; - boolean j_606 = false; - String str_606 = new String("the 606-th string."); - int[] ia_606 = new int[]{606}; - Object obj_606 = new Object(); - List strList_606 = new ArrayList<>(); - String[][][] multi_606 = new String[5][10][32]; - int i_607 = 607; - boolean j_607 = true; - String str_607 = new String("the 607-th string."); - int[] ia_607 = new int[]{607}; - Object obj_607 = new Object(); - List strList_607 = new ArrayList<>(); - String[][][] multi_607 = new String[5][10][32]; - int i_608 = 608; - boolean j_608 = false; - String str_608 = new String("the 608-th string."); - int[] ia_608 = new int[]{608}; - Object obj_608 = new Object(); - List strList_608 = new ArrayList<>(); - String[][][] multi_608 = new String[5][10][32]; - int i_609 = 609; - boolean j_609 = true; - String str_609 = new String("the 609-th string."); - int[] ia_609 = new int[]{609}; - Object obj_609 = new Object(); - List strList_609 = new ArrayList<>(); - String[][][] multi_609 = new String[5][10][32]; - int i_610 = 610; - boolean j_610 = false; - String str_610 = new String("the 610-th string."); - int[] ia_610 = new int[]{610}; - Object obj_610 = new Object(); - List strList_610 = new ArrayList<>(); - String[][][] multi_610 = new String[5][10][32]; - int i_611 = 611; - boolean j_611 = true; - String str_611 = new String("the 611-th string."); - int[] ia_611 = new int[]{611}; - Object obj_611 = new Object(); - List strList_611 = new ArrayList<>(); - String[][][] multi_611 = new String[5][10][32]; - int i_612 = 612; - boolean j_612 = false; - String str_612 = new String("the 612-th string."); - int[] ia_612 = new int[]{612}; - Object obj_612 = new Object(); - List strList_612 = new ArrayList<>(); - String[][][] multi_612 = new String[5][10][32]; - int i_613 = 613; - boolean j_613 = true; - String str_613 = new String("the 613-th string."); - int[] ia_613 = new int[]{613}; - Object obj_613 = new Object(); - List strList_613 = new ArrayList<>(); - String[][][] multi_613 = new String[5][10][32]; - int i_614 = 614; - boolean j_614 = false; - String str_614 = new String("the 614-th string."); - int[] ia_614 = new int[]{614}; - Object obj_614 = new Object(); - List strList_614 = new ArrayList<>(); - String[][][] multi_614 = new String[5][10][32]; - int i_615 = 615; - boolean j_615 = true; - String str_615 = new String("the 615-th string."); - int[] ia_615 = new int[]{615}; - Object obj_615 = new Object(); - List strList_615 = new ArrayList<>(); - String[][][] multi_615 = new String[5][10][32]; - int i_616 = 616; - boolean j_616 = false; - String str_616 = new String("the 616-th string."); - int[] ia_616 = new int[]{616}; - Object obj_616 = new Object(); - List strList_616 = new ArrayList<>(); - String[][][] multi_616 = new String[5][10][32]; - int i_617 = 617; - boolean j_617 = true; - String str_617 = new String("the 617-th string."); - int[] ia_617 = new int[]{617}; - Object obj_617 = new Object(); - List strList_617 = new ArrayList<>(); - String[][][] multi_617 = new String[5][10][32]; - int i_618 = 618; - boolean j_618 = false; - String str_618 = new String("the 618-th string."); - int[] ia_618 = new int[]{618}; - Object obj_618 = new Object(); - List strList_618 = new ArrayList<>(); - String[][][] multi_618 = new String[5][10][32]; - int i_619 = 619; - boolean j_619 = true; - String str_619 = new String("the 619-th string."); - int[] ia_619 = new int[]{619}; - Object obj_619 = new Object(); - List strList_619 = new ArrayList<>(); - String[][][] multi_619 = new String[5][10][32]; - int i_620 = 620; - boolean j_620 = false; - String str_620 = new String("the 620-th string."); - int[] ia_620 = new int[]{620}; - Object obj_620 = new Object(); - List strList_620 = new ArrayList<>(); - String[][][] multi_620 = new String[5][10][32]; - int i_621 = 621; - boolean j_621 = true; - String str_621 = new String("the 621-th string."); - int[] ia_621 = new int[]{621}; - Object obj_621 = new Object(); - List strList_621 = new ArrayList<>(); - String[][][] multi_621 = new String[5][10][32]; - int i_622 = 622; - boolean j_622 = false; - String str_622 = new String("the 622-th string."); - int[] ia_622 = new int[]{622}; - Object obj_622 = new Object(); - List strList_622 = new ArrayList<>(); - String[][][] multi_622 = new String[5][10][32]; - int i_623 = 623; - boolean j_623 = true; - String str_623 = new String("the 623-th string."); - int[] ia_623 = new int[]{623}; - Object obj_623 = new Object(); - List strList_623 = new ArrayList<>(); - String[][][] multi_623 = new String[5][10][32]; - int i_624 = 624; - boolean j_624 = false; - String str_624 = new String("the 624-th string."); - int[] ia_624 = new int[]{624}; - Object obj_624 = new Object(); - List strList_624 = new ArrayList<>(); - String[][][] multi_624 = new String[5][10][32]; - int i_625 = 625; - boolean j_625 = true; - String str_625 = new String("the 625-th string."); - int[] ia_625 = new int[]{625}; - Object obj_625 = new Object(); - List strList_625 = new ArrayList<>(); - String[][][] multi_625 = new String[5][10][32]; - int i_626 = 626; - boolean j_626 = false; - String str_626 = new String("the 626-th string."); - int[] ia_626 = new int[]{626}; - Object obj_626 = new Object(); - List strList_626 = new ArrayList<>(); - String[][][] multi_626 = new String[5][10][32]; - int i_627 = 627; - boolean j_627 = true; - String str_627 = new String("the 627-th string."); - int[] ia_627 = new int[]{627}; - Object obj_627 = new Object(); - List strList_627 = new ArrayList<>(); - String[][][] multi_627 = new String[5][10][32]; - int i_628 = 628; - boolean j_628 = false; - String str_628 = new String("the 628-th string."); - int[] ia_628 = new int[]{628}; - Object obj_628 = new Object(); - List strList_628 = new ArrayList<>(); - String[][][] multi_628 = new String[5][10][32]; - int i_629 = 629; - boolean j_629 = true; - String str_629 = new String("the 629-th string."); - int[] ia_629 = new int[]{629}; - Object obj_629 = new Object(); - List strList_629 = new ArrayList<>(); - String[][][] multi_629 = new String[5][10][32]; - int i_630 = 630; - boolean j_630 = false; - String str_630 = new String("the 630-th string."); - int[] ia_630 = new int[]{630}; - Object obj_630 = new Object(); - List strList_630 = new ArrayList<>(); - String[][][] multi_630 = new String[5][10][32]; - int i_631 = 631; - boolean j_631 = true; - String str_631 = new String("the 631-th string."); - int[] ia_631 = new int[]{631}; - Object obj_631 = new Object(); - List strList_631 = new ArrayList<>(); - String[][][] multi_631 = new String[5][10][32]; - int i_632 = 632; - boolean j_632 = false; - String str_632 = new String("the 632-th string."); - int[] ia_632 = new int[]{632}; - Object obj_632 = new Object(); - List strList_632 = new ArrayList<>(); - String[][][] multi_632 = new String[5][10][32]; - int i_633 = 633; - boolean j_633 = true; - String str_633 = new String("the 633-th string."); - int[] ia_633 = new int[]{633}; - Object obj_633 = new Object(); - List strList_633 = new ArrayList<>(); - String[][][] multi_633 = new String[5][10][32]; - int i_634 = 634; - boolean j_634 = false; - String str_634 = new String("the 634-th string."); - int[] ia_634 = new int[]{634}; - Object obj_634 = new Object(); - List strList_634 = new ArrayList<>(); - String[][][] multi_634 = new String[5][10][32]; - int i_635 = 635; - boolean j_635 = true; - String str_635 = new String("the 635-th string."); - int[] ia_635 = new int[]{635}; - Object obj_635 = new Object(); - List strList_635 = new ArrayList<>(); - String[][][] multi_635 = new String[5][10][32]; - int i_636 = 636; - boolean j_636 = false; - String str_636 = new String("the 636-th string."); - int[] ia_636 = new int[]{636}; - Object obj_636 = new Object(); - List strList_636 = new ArrayList<>(); - String[][][] multi_636 = new String[5][10][32]; - int i_637 = 637; - boolean j_637 = true; - String str_637 = new String("the 637-th string."); - int[] ia_637 = new int[]{637}; - Object obj_637 = new Object(); - List strList_637 = new ArrayList<>(); - String[][][] multi_637 = new String[5][10][32]; - int i_638 = 638; - boolean j_638 = false; - String str_638 = new String("the 638-th string."); - int[] ia_638 = new int[]{638}; - Object obj_638 = new Object(); - List strList_638 = new ArrayList<>(); - String[][][] multi_638 = new String[5][10][32]; - int i_639 = 639; - boolean j_639 = true; - String str_639 = new String("the 639-th string."); - int[] ia_639 = new int[]{639}; - Object obj_639 = new Object(); - List strList_639 = new ArrayList<>(); - String[][][] multi_639 = new String[5][10][32]; - int i_640 = 640; - boolean j_640 = false; - String str_640 = new String("the 640-th string."); - int[] ia_640 = new int[]{640}; - Object obj_640 = new Object(); - List strList_640 = new ArrayList<>(); - String[][][] multi_640 = new String[5][10][32]; - int i_641 = 641; - boolean j_641 = true; - String str_641 = new String("the 641-th string."); - int[] ia_641 = new int[]{641}; - Object obj_641 = new Object(); - List strList_641 = new ArrayList<>(); - String[][][] multi_641 = new String[5][10][32]; - int i_642 = 642; - boolean j_642 = false; - String str_642 = new String("the 642-th string."); - int[] ia_642 = new int[]{642}; - Object obj_642 = new Object(); - List strList_642 = new ArrayList<>(); - String[][][] multi_642 = new String[5][10][32]; - int i_643 = 643; - boolean j_643 = true; - String str_643 = new String("the 643-th string."); - int[] ia_643 = new int[]{643}; - Object obj_643 = new Object(); - List strList_643 = new ArrayList<>(); - String[][][] multi_643 = new String[5][10][32]; - int i_644 = 644; - boolean j_644 = false; - String str_644 = new String("the 644-th string."); - int[] ia_644 = new int[]{644}; - Object obj_644 = new Object(); - List strList_644 = new ArrayList<>(); - String[][][] multi_644 = new String[5][10][32]; - int i_645 = 645; - boolean j_645 = true; - String str_645 = new String("the 645-th string."); - int[] ia_645 = new int[]{645}; - Object obj_645 = new Object(); - List strList_645 = new ArrayList<>(); - String[][][] multi_645 = new String[5][10][32]; - int i_646 = 646; - boolean j_646 = false; - String str_646 = new String("the 646-th string."); - int[] ia_646 = new int[]{646}; - Object obj_646 = new Object(); - List strList_646 = new ArrayList<>(); - String[][][] multi_646 = new String[5][10][32]; - int i_647 = 647; - boolean j_647 = true; - String str_647 = new String("the 647-th string."); - int[] ia_647 = new int[]{647}; - Object obj_647 = new Object(); - List strList_647 = new ArrayList<>(); - String[][][] multi_647 = new String[5][10][32]; - int i_648 = 648; - boolean j_648 = false; - String str_648 = new String("the 648-th string."); - int[] ia_648 = new int[]{648}; - Object obj_648 = new Object(); - List strList_648 = new ArrayList<>(); - String[][][] multi_648 = new String[5][10][32]; - int i_649 = 649; - boolean j_649 = true; - String str_649 = new String("the 649-th string."); - int[] ia_649 = new int[]{649}; - Object obj_649 = new Object(); - List strList_649 = new ArrayList<>(); - String[][][] multi_649 = new String[5][10][32]; - int i_650 = 650; - boolean j_650 = false; - String str_650 = new String("the 650-th string."); - int[] ia_650 = new int[]{650}; - Object obj_650 = new Object(); - List strList_650 = new ArrayList<>(); - String[][][] multi_650 = new String[5][10][32]; - int i_651 = 651; - boolean j_651 = true; - String str_651 = new String("the 651-th string."); - int[] ia_651 = new int[]{651}; - Object obj_651 = new Object(); - List strList_651 = new ArrayList<>(); - String[][][] multi_651 = new String[5][10][32]; - int i_652 = 652; - boolean j_652 = false; - String str_652 = new String("the 652-th string."); - int[] ia_652 = new int[]{652}; - Object obj_652 = new Object(); - List strList_652 = new ArrayList<>(); - String[][][] multi_652 = new String[5][10][32]; - int i_653 = 653; - boolean j_653 = true; - String str_653 = new String("the 653-th string."); - int[] ia_653 = new int[]{653}; - Object obj_653 = new Object(); - List strList_653 = new ArrayList<>(); - String[][][] multi_653 = new String[5][10][32]; - int i_654 = 654; - boolean j_654 = false; - String str_654 = new String("the 654-th string."); - int[] ia_654 = new int[]{654}; - Object obj_654 = new Object(); - List strList_654 = new ArrayList<>(); - String[][][] multi_654 = new String[5][10][32]; - int i_655 = 655; - boolean j_655 = true; - String str_655 = new String("the 655-th string."); - int[] ia_655 = new int[]{655}; - Object obj_655 = new Object(); - List strList_655 = new ArrayList<>(); - String[][][] multi_655 = new String[5][10][32]; - int i_656 = 656; - boolean j_656 = false; - String str_656 = new String("the 656-th string."); - int[] ia_656 = new int[]{656}; - Object obj_656 = new Object(); - List strList_656 = new ArrayList<>(); - String[][][] multi_656 = new String[5][10][32]; - int i_657 = 657; - boolean j_657 = true; - String str_657 = new String("the 657-th string."); - int[] ia_657 = new int[]{657}; - Object obj_657 = new Object(); - List strList_657 = new ArrayList<>(); - String[][][] multi_657 = new String[5][10][32]; - int i_658 = 658; - boolean j_658 = false; - String str_658 = new String("the 658-th string."); - int[] ia_658 = new int[]{658}; - Object obj_658 = new Object(); - List strList_658 = new ArrayList<>(); - String[][][] multi_658 = new String[5][10][32]; - int i_659 = 659; - boolean j_659 = true; - String str_659 = new String("the 659-th string."); - int[] ia_659 = new int[]{659}; - Object obj_659 = new Object(); - List strList_659 = new ArrayList<>(); - String[][][] multi_659 = new String[5][10][32]; - int i_660 = 660; - boolean j_660 = false; - String str_660 = new String("the 660-th string."); - int[] ia_660 = new int[]{660}; - Object obj_660 = new Object(); - List strList_660 = new ArrayList<>(); - String[][][] multi_660 = new String[5][10][32]; - int i_661 = 661; - boolean j_661 = true; - String str_661 = new String("the 661-th string."); - int[] ia_661 = new int[]{661}; - Object obj_661 = new Object(); - List strList_661 = new ArrayList<>(); - String[][][] multi_661 = new String[5][10][32]; - int i_662 = 662; - boolean j_662 = false; - String str_662 = new String("the 662-th string."); - int[] ia_662 = new int[]{662}; - Object obj_662 = new Object(); - List strList_662 = new ArrayList<>(); - String[][][] multi_662 = new String[5][10][32]; - int i_663 = 663; - boolean j_663 = true; - String str_663 = new String("the 663-th string."); - int[] ia_663 = new int[]{663}; - Object obj_663 = new Object(); - List strList_663 = new ArrayList<>(); - String[][][] multi_663 = new String[5][10][32]; - int i_664 = 664; - boolean j_664 = false; - String str_664 = new String("the 664-th string."); - int[] ia_664 = new int[]{664}; - Object obj_664 = new Object(); - List strList_664 = new ArrayList<>(); - String[][][] multi_664 = new String[5][10][32]; - int i_665 = 665; - boolean j_665 = true; - String str_665 = new String("the 665-th string."); - int[] ia_665 = new int[]{665}; - Object obj_665 = new Object(); - List strList_665 = new ArrayList<>(); - String[][][] multi_665 = new String[5][10][32]; - int i_666 = 666; - boolean j_666 = false; - String str_666 = new String("the 666-th string."); - int[] ia_666 = new int[]{666}; - Object obj_666 = new Object(); - List strList_666 = new ArrayList<>(); - String[][][] multi_666 = new String[5][10][32]; - int i_667 = 667; - boolean j_667 = true; - String str_667 = new String("the 667-th string."); - int[] ia_667 = new int[]{667}; - Object obj_667 = new Object(); - List strList_667 = new ArrayList<>(); - String[][][] multi_667 = new String[5][10][32]; - int i_668 = 668; - boolean j_668 = false; - String str_668 = new String("the 668-th string."); - int[] ia_668 = new int[]{668}; - Object obj_668 = new Object(); - List strList_668 = new ArrayList<>(); - String[][][] multi_668 = new String[5][10][32]; - int i_669 = 669; - boolean j_669 = true; - String str_669 = new String("the 669-th string."); - int[] ia_669 = new int[]{669}; - Object obj_669 = new Object(); - List strList_669 = new ArrayList<>(); - String[][][] multi_669 = new String[5][10][32]; - int i_670 = 670; - boolean j_670 = false; - String str_670 = new String("the 670-th string."); - int[] ia_670 = new int[]{670}; - Object obj_670 = new Object(); - List strList_670 = new ArrayList<>(); - String[][][] multi_670 = new String[5][10][32]; - int i_671 = 671; - boolean j_671 = true; - String str_671 = new String("the 671-th string."); - int[] ia_671 = new int[]{671}; - Object obj_671 = new Object(); - List strList_671 = new ArrayList<>(); - String[][][] multi_671 = new String[5][10][32]; - int i_672 = 672; - boolean j_672 = false; - String str_672 = new String("the 672-th string."); - int[] ia_672 = new int[]{672}; - Object obj_672 = new Object(); - List strList_672 = new ArrayList<>(); - String[][][] multi_672 = new String[5][10][32]; - int i_673 = 673; - boolean j_673 = true; - String str_673 = new String("the 673-th string."); - int[] ia_673 = new int[]{673}; - Object obj_673 = new Object(); - List strList_673 = new ArrayList<>(); - String[][][] multi_673 = new String[5][10][32]; - int i_674 = 674; - boolean j_674 = false; - String str_674 = new String("the 674-th string."); - int[] ia_674 = new int[]{674}; - Object obj_674 = new Object(); - List strList_674 = new ArrayList<>(); - String[][][] multi_674 = new String[5][10][32]; - int i_675 = 675; - boolean j_675 = true; - String str_675 = new String("the 675-th string."); - int[] ia_675 = new int[]{675}; - Object obj_675 = new Object(); - List strList_675 = new ArrayList<>(); - String[][][] multi_675 = new String[5][10][32]; - int i_676 = 676; - boolean j_676 = false; - String str_676 = new String("the 676-th string."); - int[] ia_676 = new int[]{676}; - Object obj_676 = new Object(); - List strList_676 = new ArrayList<>(); - String[][][] multi_676 = new String[5][10][32]; - int i_677 = 677; - boolean j_677 = true; - String str_677 = new String("the 677-th string."); - int[] ia_677 = new int[]{677}; - Object obj_677 = new Object(); - List strList_677 = new ArrayList<>(); - String[][][] multi_677 = new String[5][10][32]; - int i_678 = 678; - boolean j_678 = false; - String str_678 = new String("the 678-th string."); - int[] ia_678 = new int[]{678}; - Object obj_678 = new Object(); - List strList_678 = new ArrayList<>(); - String[][][] multi_678 = new String[5][10][32]; - int i_679 = 679; - boolean j_679 = true; - String str_679 = new String("the 679-th string."); - int[] ia_679 = new int[]{679}; - Object obj_679 = new Object(); - List strList_679 = new ArrayList<>(); - String[][][] multi_679 = new String[5][10][32]; - int i_680 = 680; - boolean j_680 = false; - String str_680 = new String("the 680-th string."); - int[] ia_680 = new int[]{680}; - Object obj_680 = new Object(); - List strList_680 = new ArrayList<>(); - String[][][] multi_680 = new String[5][10][32]; - int i_681 = 681; - boolean j_681 = true; - String str_681 = new String("the 681-th string."); - int[] ia_681 = new int[]{681}; - Object obj_681 = new Object(); - List strList_681 = new ArrayList<>(); - String[][][] multi_681 = new String[5][10][32]; - int i_682 = 682; - boolean j_682 = false; - String str_682 = new String("the 682-th string."); - int[] ia_682 = new int[]{682}; - Object obj_682 = new Object(); - List strList_682 = new ArrayList<>(); - String[][][] multi_682 = new String[5][10][32]; - int i_683 = 683; - boolean j_683 = true; - String str_683 = new String("the 683-th string."); - int[] ia_683 = new int[]{683}; - Object obj_683 = new Object(); - List strList_683 = new ArrayList<>(); - String[][][] multi_683 = new String[5][10][32]; - int i_684 = 684; - boolean j_684 = false; - String str_684 = new String("the 684-th string."); - int[] ia_684 = new int[]{684}; - Object obj_684 = new Object(); - List strList_684 = new ArrayList<>(); - String[][][] multi_684 = new String[5][10][32]; - int i_685 = 685; - boolean j_685 = true; - String str_685 = new String("the 685-th string."); - int[] ia_685 = new int[]{685}; - Object obj_685 = new Object(); - List strList_685 = new ArrayList<>(); - String[][][] multi_685 = new String[5][10][32]; - int i_686 = 686; - boolean j_686 = false; - String str_686 = new String("the 686-th string."); - int[] ia_686 = new int[]{686}; - Object obj_686 = new Object(); - List strList_686 = new ArrayList<>(); - String[][][] multi_686 = new String[5][10][32]; - int i_687 = 687; - boolean j_687 = true; - String str_687 = new String("the 687-th string."); - int[] ia_687 = new int[]{687}; - Object obj_687 = new Object(); - List strList_687 = new ArrayList<>(); - String[][][] multi_687 = new String[5][10][32]; - int i_688 = 688; - boolean j_688 = false; - String str_688 = new String("the 688-th string."); - int[] ia_688 = new int[]{688}; - Object obj_688 = new Object(); - List strList_688 = new ArrayList<>(); - String[][][] multi_688 = new String[5][10][32]; - int i_689 = 689; - boolean j_689 = true; - String str_689 = new String("the 689-th string."); - int[] ia_689 = new int[]{689}; - Object obj_689 = new Object(); - List strList_689 = new ArrayList<>(); - String[][][] multi_689 = new String[5][10][32]; - int i_690 = 690; - boolean j_690 = false; - String str_690 = new String("the 690-th string."); - int[] ia_690 = new int[]{690}; - Object obj_690 = new Object(); - List strList_690 = new ArrayList<>(); - String[][][] multi_690 = new String[5][10][32]; - int i_691 = 691; - boolean j_691 = true; - String str_691 = new String("the 691-th string."); - int[] ia_691 = new int[]{691}; - Object obj_691 = new Object(); - List strList_691 = new ArrayList<>(); - String[][][] multi_691 = new String[5][10][32]; - int i_692 = 692; - boolean j_692 = false; - String str_692 = new String("the 692-th string."); - int[] ia_692 = new int[]{692}; - Object obj_692 = new Object(); - List strList_692 = new ArrayList<>(); - String[][][] multi_692 = new String[5][10][32]; - int i_693 = 693; - boolean j_693 = true; - String str_693 = new String("the 693-th string."); - int[] ia_693 = new int[]{693}; - Object obj_693 = new Object(); - List strList_693 = new ArrayList<>(); - String[][][] multi_693 = new String[5][10][32]; - int i_694 = 694; - boolean j_694 = false; - String str_694 = new String("the 694-th string."); - int[] ia_694 = new int[]{694}; - Object obj_694 = new Object(); - List strList_694 = new ArrayList<>(); - String[][][] multi_694 = new String[5][10][32]; - int i_695 = 695; - boolean j_695 = true; - String str_695 = new String("the 695-th string."); - int[] ia_695 = new int[]{695}; - Object obj_695 = new Object(); - List strList_695 = new ArrayList<>(); - String[][][] multi_695 = new String[5][10][32]; - int i_696 = 696; - boolean j_696 = false; - String str_696 = new String("the 696-th string."); - int[] ia_696 = new int[]{696}; - Object obj_696 = new Object(); - List strList_696 = new ArrayList<>(); - String[][][] multi_696 = new String[5][10][32]; - int i_697 = 697; - boolean j_697 = true; - String str_697 = new String("the 697-th string."); - int[] ia_697 = new int[]{697}; - Object obj_697 = new Object(); - List strList_697 = new ArrayList<>(); - String[][][] multi_697 = new String[5][10][32]; - int i_698 = 698; - boolean j_698 = false; - String str_698 = new String("the 698-th string."); - int[] ia_698 = new int[]{698}; - Object obj_698 = new Object(); - List strList_698 = new ArrayList<>(); - String[][][] multi_698 = new String[5][10][32]; - int i_699 = 699; - boolean j_699 = true; - String str_699 = new String("the 699-th string."); - int[] ia_699 = new int[]{699}; - Object obj_699 = new Object(); - List strList_699 = new ArrayList<>(); - String[][][] multi_699 = new String[5][10][32]; - int i_700 = 700; - boolean j_700 = false; - String str_700 = new String("the 700-th string."); - int[] ia_700 = new int[]{700}; - Object obj_700 = new Object(); - List strList_700 = new ArrayList<>(); - String[][][] multi_700 = new String[5][10][32]; - int i_701 = 701; - boolean j_701 = true; - String str_701 = new String("the 701-th string."); - int[] ia_701 = new int[]{701}; - Object obj_701 = new Object(); - List strList_701 = new ArrayList<>(); - String[][][] multi_701 = new String[5][10][32]; - int i_702 = 702; - boolean j_702 = false; - String str_702 = new String("the 702-th string."); - int[] ia_702 = new int[]{702}; - Object obj_702 = new Object(); - List strList_702 = new ArrayList<>(); - String[][][] multi_702 = new String[5][10][32]; - int i_703 = 703; - boolean j_703 = true; - String str_703 = new String("the 703-th string."); - int[] ia_703 = new int[]{703}; - Object obj_703 = new Object(); - List strList_703 = new ArrayList<>(); - String[][][] multi_703 = new String[5][10][32]; - int i_704 = 704; - boolean j_704 = false; - String str_704 = new String("the 704-th string."); - int[] ia_704 = new int[]{704}; - Object obj_704 = new Object(); - List strList_704 = new ArrayList<>(); - String[][][] multi_704 = new String[5][10][32]; - int i_705 = 705; - boolean j_705 = true; - String str_705 = new String("the 705-th string."); - int[] ia_705 = new int[]{705}; - Object obj_705 = new Object(); - List strList_705 = new ArrayList<>(); - String[][][] multi_705 = new String[5][10][32]; - int i_706 = 706; - boolean j_706 = false; - String str_706 = new String("the 706-th string."); - int[] ia_706 = new int[]{706}; - Object obj_706 = new Object(); - List strList_706 = new ArrayList<>(); - String[][][] multi_706 = new String[5][10][32]; - int i_707 = 707; - boolean j_707 = true; - String str_707 = new String("the 707-th string."); - int[] ia_707 = new int[]{707}; - Object obj_707 = new Object(); - List strList_707 = new ArrayList<>(); - String[][][] multi_707 = new String[5][10][32]; - int i_708 = 708; - boolean j_708 = false; - String str_708 = new String("the 708-th string."); - int[] ia_708 = new int[]{708}; - Object obj_708 = new Object(); - List strList_708 = new ArrayList<>(); - String[][][] multi_708 = new String[5][10][32]; - int i_709 = 709; - boolean j_709 = true; - String str_709 = new String("the 709-th string."); - int[] ia_709 = new int[]{709}; - Object obj_709 = new Object(); - List strList_709 = new ArrayList<>(); - String[][][] multi_709 = new String[5][10][32]; - int i_710 = 710; - boolean j_710 = false; - String str_710 = new String("the 710-th string."); - int[] ia_710 = new int[]{710}; - Object obj_710 = new Object(); - List strList_710 = new ArrayList<>(); - String[][][] multi_710 = new String[5][10][32]; - int i_711 = 711; - boolean j_711 = true; - String str_711 = new String("the 711-th string."); - int[] ia_711 = new int[]{711}; - Object obj_711 = new Object(); - List strList_711 = new ArrayList<>(); - String[][][] multi_711 = new String[5][10][32]; - int i_712 = 712; - boolean j_712 = false; - String str_712 = new String("the 712-th string."); - int[] ia_712 = new int[]{712}; - Object obj_712 = new Object(); - List strList_712 = new ArrayList<>(); - String[][][] multi_712 = new String[5][10][32]; - int i_713 = 713; - boolean j_713 = true; - String str_713 = new String("the 713-th string."); - int[] ia_713 = new int[]{713}; - Object obj_713 = new Object(); - List strList_713 = new ArrayList<>(); - String[][][] multi_713 = new String[5][10][32]; - int i_714 = 714; - boolean j_714 = false; - String str_714 = new String("the 714-th string."); - int[] ia_714 = new int[]{714}; - Object obj_714 = new Object(); - List strList_714 = new ArrayList<>(); - String[][][] multi_714 = new String[5][10][32]; - int i_715 = 715; - boolean j_715 = true; - String str_715 = new String("the 715-th string."); - int[] ia_715 = new int[]{715}; - Object obj_715 = new Object(); - List strList_715 = new ArrayList<>(); - String[][][] multi_715 = new String[5][10][32]; - int i_716 = 716; - boolean j_716 = false; - String str_716 = new String("the 716-th string."); - int[] ia_716 = new int[]{716}; - Object obj_716 = new Object(); - List strList_716 = new ArrayList<>(); - String[][][] multi_716 = new String[5][10][32]; - int i_717 = 717; - boolean j_717 = true; - String str_717 = new String("the 717-th string."); - int[] ia_717 = new int[]{717}; - Object obj_717 = new Object(); - List strList_717 = new ArrayList<>(); - String[][][] multi_717 = new String[5][10][32]; - int i_718 = 718; - boolean j_718 = false; - String str_718 = new String("the 718-th string."); - int[] ia_718 = new int[]{718}; - Object obj_718 = new Object(); - List strList_718 = new ArrayList<>(); - String[][][] multi_718 = new String[5][10][32]; - int i_719 = 719; - boolean j_719 = true; - String str_719 = new String("the 719-th string."); - int[] ia_719 = new int[]{719}; - Object obj_719 = new Object(); - List strList_719 = new ArrayList<>(); - String[][][] multi_719 = new String[5][10][32]; - int i_720 = 720; - boolean j_720 = false; - String str_720 = new String("the 720-th string."); - int[] ia_720 = new int[]{720}; - Object obj_720 = new Object(); - List strList_720 = new ArrayList<>(); - String[][][] multi_720 = new String[5][10][32]; - int i_721 = 721; - boolean j_721 = true; - String str_721 = new String("the 721-th string."); - int[] ia_721 = new int[]{721}; - Object obj_721 = new Object(); - List strList_721 = new ArrayList<>(); - String[][][] multi_721 = new String[5][10][32]; - int i_722 = 722; - boolean j_722 = false; - String str_722 = new String("the 722-th string."); - int[] ia_722 = new int[]{722}; - Object obj_722 = new Object(); - List strList_722 = new ArrayList<>(); - String[][][] multi_722 = new String[5][10][32]; - int i_723 = 723; - boolean j_723 = true; - String str_723 = new String("the 723-th string."); - int[] ia_723 = new int[]{723}; - Object obj_723 = new Object(); - List strList_723 = new ArrayList<>(); - String[][][] multi_723 = new String[5][10][32]; - int i_724 = 724; - boolean j_724 = false; - String str_724 = new String("the 724-th string."); - int[] ia_724 = new int[]{724}; - Object obj_724 = new Object(); - List strList_724 = new ArrayList<>(); - String[][][] multi_724 = new String[5][10][32]; - int i_725 = 725; - boolean j_725 = true; - String str_725 = new String("the 725-th string."); - int[] ia_725 = new int[]{725}; - Object obj_725 = new Object(); - List strList_725 = new ArrayList<>(); - String[][][] multi_725 = new String[5][10][32]; - int i_726 = 726; - boolean j_726 = false; - String str_726 = new String("the 726-th string."); - int[] ia_726 = new int[]{726}; - Object obj_726 = new Object(); - List strList_726 = new ArrayList<>(); - String[][][] multi_726 = new String[5][10][32]; - int i_727 = 727; - boolean j_727 = true; - String str_727 = new String("the 727-th string."); - int[] ia_727 = new int[]{727}; - Object obj_727 = new Object(); - List strList_727 = new ArrayList<>(); - String[][][] multi_727 = new String[5][10][32]; - int i_728 = 728; - boolean j_728 = false; - String str_728 = new String("the 728-th string."); - int[] ia_728 = new int[]{728}; - Object obj_728 = new Object(); - List strList_728 = new ArrayList<>(); - String[][][] multi_728 = new String[5][10][32]; - int i_729 = 729; - boolean j_729 = true; - String str_729 = new String("the 729-th string."); - int[] ia_729 = new int[]{729}; - Object obj_729 = new Object(); - List strList_729 = new ArrayList<>(); - String[][][] multi_729 = new String[5][10][32]; - int i_730 = 730; - boolean j_730 = false; - String str_730 = new String("the 730-th string."); - int[] ia_730 = new int[]{730}; - Object obj_730 = new Object(); - List strList_730 = new ArrayList<>(); - String[][][] multi_730 = new String[5][10][32]; - int i_731 = 731; - boolean j_731 = true; - String str_731 = new String("the 731-th string."); - int[] ia_731 = new int[]{731}; - Object obj_731 = new Object(); - List strList_731 = new ArrayList<>(); - String[][][] multi_731 = new String[5][10][32]; - int i_732 = 732; - boolean j_732 = false; - String str_732 = new String("the 732-th string."); - int[] ia_732 = new int[]{732}; - Object obj_732 = new Object(); - List strList_732 = new ArrayList<>(); - String[][][] multi_732 = new String[5][10][32]; - int i_733 = 733; - boolean j_733 = true; - String str_733 = new String("the 733-th string."); - int[] ia_733 = new int[]{733}; - Object obj_733 = new Object(); - List strList_733 = new ArrayList<>(); - String[][][] multi_733 = new String[5][10][32]; - int i_734 = 734; - boolean j_734 = false; - String str_734 = new String("the 734-th string."); - int[] ia_734 = new int[]{734}; - Object obj_734 = new Object(); - List strList_734 = new ArrayList<>(); - String[][][] multi_734 = new String[5][10][32]; - int i_735 = 735; - boolean j_735 = true; - String str_735 = new String("the 735-th string."); - int[] ia_735 = new int[]{735}; - Object obj_735 = new Object(); - List strList_735 = new ArrayList<>(); - String[][][] multi_735 = new String[5][10][32]; - int i_736 = 736; - boolean j_736 = false; - String str_736 = new String("the 736-th string."); - int[] ia_736 = new int[]{736}; - Object obj_736 = new Object(); - List strList_736 = new ArrayList<>(); - String[][][] multi_736 = new String[5][10][32]; - int i_737 = 737; - boolean j_737 = true; - String str_737 = new String("the 737-th string."); - int[] ia_737 = new int[]{737}; - Object obj_737 = new Object(); - List strList_737 = new ArrayList<>(); - String[][][] multi_737 = new String[5][10][32]; - int i_738 = 738; - boolean j_738 = false; - String str_738 = new String("the 738-th string."); - int[] ia_738 = new int[]{738}; - Object obj_738 = new Object(); - List strList_738 = new ArrayList<>(); - String[][][] multi_738 = new String[5][10][32]; - int i_739 = 739; - boolean j_739 = true; - String str_739 = new String("the 739-th string."); - int[] ia_739 = new int[]{739}; - Object obj_739 = new Object(); - List strList_739 = new ArrayList<>(); - String[][][] multi_739 = new String[5][10][32]; - int i_740 = 740; - boolean j_740 = false; - String str_740 = new String("the 740-th string."); - int[] ia_740 = new int[]{740}; - Object obj_740 = new Object(); - List strList_740 = new ArrayList<>(); - String[][][] multi_740 = new String[5][10][32]; - int i_741 = 741; - boolean j_741 = true; - String str_741 = new String("the 741-th string."); - int[] ia_741 = new int[]{741}; - Object obj_741 = new Object(); - List strList_741 = new ArrayList<>(); - String[][][] multi_741 = new String[5][10][32]; - int i_742 = 742; - boolean j_742 = false; - String str_742 = new String("the 742-th string."); - int[] ia_742 = new int[]{742}; - Object obj_742 = new Object(); - List strList_742 = new ArrayList<>(); - String[][][] multi_742 = new String[5][10][32]; - int i_743 = 743; - boolean j_743 = true; - String str_743 = new String("the 743-th string."); - int[] ia_743 = new int[]{743}; - Object obj_743 = new Object(); - List strList_743 = new ArrayList<>(); - String[][][] multi_743 = new String[5][10][32]; - int i_744 = 744; - boolean j_744 = false; - String str_744 = new String("the 744-th string."); - int[] ia_744 = new int[]{744}; - Object obj_744 = new Object(); - List strList_744 = new ArrayList<>(); - String[][][] multi_744 = new String[5][10][32]; - int i_745 = 745; - boolean j_745 = true; - String str_745 = new String("the 745-th string."); - int[] ia_745 = new int[]{745}; - Object obj_745 = new Object(); - List strList_745 = new ArrayList<>(); - String[][][] multi_745 = new String[5][10][32]; - int i_746 = 746; - boolean j_746 = false; - String str_746 = new String("the 746-th string."); - int[] ia_746 = new int[]{746}; - Object obj_746 = new Object(); - List strList_746 = new ArrayList<>(); - String[][][] multi_746 = new String[5][10][32]; - int i_747 = 747; - boolean j_747 = true; - String str_747 = new String("the 747-th string."); - int[] ia_747 = new int[]{747}; - Object obj_747 = new Object(); - List strList_747 = new ArrayList<>(); - String[][][] multi_747 = new String[5][10][32]; - int i_748 = 748; - boolean j_748 = false; - String str_748 = new String("the 748-th string."); - int[] ia_748 = new int[]{748}; - Object obj_748 = new Object(); - List strList_748 = new ArrayList<>(); - String[][][] multi_748 = new String[5][10][32]; - int i_749 = 749; - boolean j_749 = true; - String str_749 = new String("the 749-th string."); - int[] ia_749 = new int[]{749}; - Object obj_749 = new Object(); - List strList_749 = new ArrayList<>(); - String[][][] multi_749 = new String[5][10][32]; -} \ No newline at end of file diff --git a/testprojects/7.variableperformance/src/main/java/VariablePerfTest.java b/testprojects/7.variableperformance/src/main/java/VariablePerfTest.java deleted file mode 100644 index 2384a60f..00000000 --- a/testprojects/7.variableperformance/src/main/java/VariablePerfTest.java +++ /dev/null @@ -1,5 +0,0 @@ -public class VariablePerfTest { - public static void main(String[] args) { - new TooManyVariables().test(); - } -} \ No newline at end of file diff --git a/testprojects/8.nosource/.classpath b/testprojects/8.nosource/.classpath deleted file mode 100644 index 8478b966..00000000 --- a/testprojects/8.nosource/.classpath +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/testprojects/8.nosource/.project b/testprojects/8.nosource/.project deleted file mode 100644 index 36c2225a..00000000 --- a/testprojects/8.nosource/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 8.nosource - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/8.nosource/build.gradle_ b/testprojects/8.nosource/build.gradle_ deleted file mode 100644 index bef8ff66..00000000 --- a/testprojects/8.nosource/build.gradle_ +++ /dev/null @@ -1,28 +0,0 @@ -apply plugin: 'java' -apply plugin: 'eclipse' -apply plugin: 'idea' - - -sourceSets { - main.java.srcDirs = ['src/main/java'] -} - -dependencies { - compile files("lib/test1.jar") - compile files("lib/commons-io-2.5.jar") -} - - -repositories { - mavenCentral() -} - -eclipse.classpath.file { - withXml{xml -> - def node = xml.asNode() - - node.classpathentry.find{ - it.@kind == 'lib' && it.@path.contains('/test1.jar') - }.@sourcepath = 'lib/test1-sources.jar' - } -} \ No newline at end of file diff --git a/testprojects/8.nosource/lib/commons-io-2.5.jar b/testprojects/8.nosource/lib/commons-io-2.5.jar deleted file mode 100644 index 107b061f..00000000 Binary files a/testprojects/8.nosource/lib/commons-io-2.5.jar and /dev/null differ diff --git a/testprojects/8.nosource/lib/test1-sources.jar b/testprojects/8.nosource/lib/test1-sources.jar deleted file mode 100644 index fa41fc49..00000000 Binary files a/testprojects/8.nosource/lib/test1-sources.jar and /dev/null differ diff --git a/testprojects/8.nosource/lib/test1.jar b/testprojects/8.nosource/lib/test1.jar deleted file mode 100644 index a5afe6c4..00000000 Binary files a/testprojects/8.nosource/lib/test1.jar and /dev/null differ diff --git a/testprojects/8.nosource/src/main/java/NoSourceTest.java b/testprojects/8.nosource/src/main/java/NoSourceTest.java deleted file mode 100644 index da259933..00000000 --- a/testprojects/8.nosource/src/main/java/NoSourceTest.java +++ /dev/null @@ -1,7 +0,0 @@ -public class NoSourceTest { - public static void main(String[] args) throws Exception { - new test.Foo().bar(1,2, i-> { - System.out.println(i+10); - }); - } -} \ No newline at end of file diff --git a/testprojects/9.realcase.lucene/.classpath b/testprojects/9.realcase.lucene/.classpath deleted file mode 100644 index b9eea10f..00000000 --- a/testprojects/9.realcase.lucene/.classpath +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/testprojects/9.realcase.lucene/.project b/testprojects/9.realcase.lucene/.project deleted file mode 100644 index c2e0396c..00000000 --- a/testprojects/9.realcase.lucene/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - 9.realcase.lucene - - - - org.eclipse.jdt.core.javanature - - - - org.eclipse.jdt.core.javabuilder - - - - - - diff --git a/testprojects/9.realcase.lucene/build.gradle_ b/testprojects/9.realcase.lucene/build.gradle_ deleted file mode 100644 index 5339a1b8..00000000 --- a/testprojects/9.realcase.lucene/build.gradle_ +++ /dev/null @@ -1,42 +0,0 @@ -apply plugin: 'java' -apply plugin: 'eclipse' -apply plugin: 'idea' - -buildscript { - repositories { - mavenCentral() - } - dependencies { classpath "commons-io:commons-io:2.5" } -} - -import org.apache.commons.io.FilenameUtils; - -sourceSets { - main.java.srcDirs = ['src/main/java'] -} -dependencies { - compile group: 'commons-io', name: 'commons-io', version: '2.5' - compile group: 'org.apache.lucene', name: 'lucene-core', version: '6.6.0' - compile group: 'org.apache.lucene', name: 'lucene-queryparser', version: '6.6.0' - compile group: 'org.apache.lucene', name: 'lucene-analyzers-common', version: '6.6.0' -} - - -repositories { - mavenCentral() -} - -def getShortJar = { e -> FilenameUtils.getName(e) } -eclipse.classpath.file { - withXml{xml -> - def node = xml.asNode() - - node.classpathentry.each{ - if (it.@kind == 'lib') { - it.@path = 'lib/' + getShortJar(it.@path); - it.@sourcepath = 'lib/' + getShortJar(it.@sourcepath); - } - - } - } -} \ No newline at end of file diff --git a/testprojects/9.realcase.lucene/lib/commons-io-2.5-sources.jar b/testprojects/9.realcase.lucene/lib/commons-io-2.5-sources.jar deleted file mode 100644 index 70821f79..00000000 Binary files a/testprojects/9.realcase.lucene/lib/commons-io-2.5-sources.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/commons-io-2.5.jar b/testprojects/9.realcase.lucene/lib/commons-io-2.5.jar deleted file mode 100644 index 107b061f..00000000 Binary files a/testprojects/9.realcase.lucene/lib/commons-io-2.5.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-analyzers-common-6.6.0-sources.jar b/testprojects/9.realcase.lucene/lib/lucene-analyzers-common-6.6.0-sources.jar deleted file mode 100644 index 0dfa72b8..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-analyzers-common-6.6.0-sources.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-analyzers-common-6.6.0.jar b/testprojects/9.realcase.lucene/lib/lucene-analyzers-common-6.6.0.jar deleted file mode 100644 index 3695b078..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-analyzers-common-6.6.0.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-core-6.6.0-sources.jar b/testprojects/9.realcase.lucene/lib/lucene-core-6.6.0-sources.jar deleted file mode 100644 index 3855beec..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-core-6.6.0-sources.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-core-6.6.0.jar b/testprojects/9.realcase.lucene/lib/lucene-core-6.6.0.jar deleted file mode 100644 index d9d533c9..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-core-6.6.0.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-queries-6.6.0-sources.jar b/testprojects/9.realcase.lucene/lib/lucene-queries-6.6.0-sources.jar deleted file mode 100644 index 63f22fef..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-queries-6.6.0-sources.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-queries-6.6.0.jar b/testprojects/9.realcase.lucene/lib/lucene-queries-6.6.0.jar deleted file mode 100644 index 85fb0640..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-queries-6.6.0.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-queryparser-6.6.0-sources.jar b/testprojects/9.realcase.lucene/lib/lucene-queryparser-6.6.0-sources.jar deleted file mode 100644 index 9d393652..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-queryparser-6.6.0-sources.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-queryparser-6.6.0.jar b/testprojects/9.realcase.lucene/lib/lucene-queryparser-6.6.0.jar deleted file mode 100644 index 394df7ea..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-queryparser-6.6.0.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-sandbox-6.6.0-sources.jar b/testprojects/9.realcase.lucene/lib/lucene-sandbox-6.6.0-sources.jar deleted file mode 100644 index f7d41b4b..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-sandbox-6.6.0-sources.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/lib/lucene-sandbox-6.6.0.jar b/testprojects/9.realcase.lucene/lib/lucene-sandbox-6.6.0.jar deleted file mode 100644 index bfdc911d..00000000 Binary files a/testprojects/9.realcase.lucene/lib/lucene-sandbox-6.6.0.jar and /dev/null differ diff --git a/testprojects/9.realcase.lucene/src/main/java/LuceneTest.java b/testprojects/9.realcase.lucene/src/main/java/LuceneTest.java deleted file mode 100644 index 749ccf93..00000000 --- a/testprojects/9.realcase.lucene/src/main/java/LuceneTest.java +++ /dev/null @@ -1,108 +0,0 @@ -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; - -import org.apache.commons.io.FileUtils; -import org.apache.lucene.analysis.standard.StandardAnalyzer; -import org.apache.lucene.document.Document; -import org.apache.lucene.document.Field; -import org.apache.lucene.document.StringField; -import org.apache.lucene.document.TextField; -import org.apache.lucene.index.DirectoryReader; -import org.apache.lucene.index.IndexReader; -import org.apache.lucene.index.IndexWriter; -import org.apache.lucene.index.IndexWriterConfig; -import org.apache.lucene.queryparser.classic.QueryParser; -import org.apache.lucene.search.IndexSearcher; -import org.apache.lucene.search.Query; -import org.apache.lucene.search.ScoreDoc; -import org.apache.lucene.search.TopDocs; -import org.apache.lucene.store.Directory; -import org.apache.lucene.store.FSDirectory; - -public class LuceneTest { - private static String indexDirectory; - - public static void main(String[] args) throws Exception { - File file = Files.createTempDirectory("test_lucene").toFile(); - indexDirectory = file.getAbsolutePath(); - FileUtils.forceDeleteOnExit(file); - IndexWriter writer = createWriter(); - List documents = new ArrayList<>(); - - Document document1 = createDocument(1, "Andy", "XU", "andxu@microsoft.com"); - documents.add(document1); - - Document document2 = createDocument(2, "Jinbo", "Wang", "jinbwan@microsoft.com"); - documents.add(document2); - - //Let's clean everything first - writer.deleteAll(); - - writer.addDocuments(documents); - writer.commit(); - writer.close(); - - IndexSearcher searcher = createSearcher(); - - //Search by ID - TopDocs foundDocs = searchById(2, searcher); - - System.out.println("Total Results :: " + foundDocs.totalHits); - - for (ScoreDoc sd : foundDocs.scoreDocs) { - Document d = searcher.doc(sd.doc); - System.out.println(String.format("%s, %s, %s", d.get("id"), d.get("email"), d.get("firstName"))); - } - - //Search by firstName - TopDocs foundDocs2 = searchByFirstName("Andy", searcher); - - System.out.println("Total Results :: " + foundDocs2.totalHits); - - for (ScoreDoc sd : foundDocs2.scoreDocs) { - Document d = searcher.doc(sd.doc); - System.out.println(String.format("%s, %s, %s", d.get("id"), d.get("email"), d.get("firstName"))); - } - } - - private static Document createDocument(Integer id, String firstName, String lastName, String email) { - Document document = new Document(); - document.add(new StringField("id", id.toString(), Field.Store.YES)); - document.add(new TextField("firstName", firstName, Field.Store.YES)); - document.add(new TextField("lastName", lastName, Field.Store.YES)); - document.add(new TextField("email", email, Field.Store.YES)); - return document; - } - - private static IndexWriter createWriter() throws IOException { - FSDirectory dir = FSDirectory.open(Paths.get(indexDirectory)); - IndexWriterConfig config = new IndexWriterConfig(new StandardAnalyzer()); - IndexWriter writer = new IndexWriter(dir, config); - return writer; - } - - private static TopDocs searchByFirstName(String firstName, IndexSearcher searcher) throws Exception { - QueryParser qp = new QueryParser("firstName", new StandardAnalyzer()); - Query firstNameQuery = qp.parse(firstName); - TopDocs hits = searcher.search(firstNameQuery, 10); - return hits; - } - - private static TopDocs searchById(Integer id, IndexSearcher searcher) throws Exception { - QueryParser qp = new QueryParser("id", new StandardAnalyzer()); - Query idQuery = qp.parse(id.toString()); - TopDocs hits = searcher.search(idQuery, 10); - return hits; - } - - private static IndexSearcher createSearcher() throws IOException { - Directory dir = FSDirectory.open(Paths.get(indexDirectory)); - IndexReader reader = DirectoryReader.open(dir); - IndexSearcher searcher = new IndexSearcher(reader); - return searcher; - } -} \ No newline at end of file diff --git a/testprojects/longclasspath/.gitignore b/testprojects/longclasspath/.gitignore deleted file mode 100644 index 078cdcf7..00000000 --- a/testprojects/longclasspath/.gitignore +++ /dev/null @@ -1,27 +0,0 @@ -HELP.md -.gradle -/build/ -!gradle/wrapper/gradle-wrapper.jar - -### STS ### -.apt_generated -.classpath -.factorypath -.project -.settings -.springBeans -.sts4-cache - -### IntelliJ IDEA ### -.idea -*.iws -*.iml -*.ipr -/out/ - -### NetBeans ### -/nbproject/private/ -/nbbuild/ -/dist/ -/nbdist/ -/.nb-gradle/ diff --git a/testprojects/longclasspath/build.gradle b/testprojects/longclasspath/build.gradle deleted file mode 100644 index 54cf4602..00000000 --- a/testprojects/longclasspath/build.gradle +++ /dev/null @@ -1,27 +0,0 @@ -plugins { - id 'org.springframework.boot' version '2.1.3.RELEASE' - id 'java' -} - -apply plugin: 'io.spring.dependency-management' - -group = 'com.example' -version = '0.0.1-SNAPSHOT' -sourceCompatibility = '1.8' - -repositories { - mavenCentral() -} - -dependencies { - compile("org.springframework.boot:spring-boot-starter-data-mongodb") - compile('org.springframework.boot:spring-boot-starter-web') - compile('org.apache.spark:spark-core_2.11:2.4.7') - compile('org.apache.spark:spark-sql_2.11:2.4.7') - // compile('org.mongodb.spark:mongo-spark-connector_2.11:2.3.1') - testImplementation('org.springframework.boot:spring-boot-starter-test') -} - -configurations.all { - exclude module: 'slf4j-log4j12' -} \ No newline at end of file diff --git a/testprojects/longclasspath/gradle/wrapper/gradle-wrapper.jar b/testprojects/longclasspath/gradle/wrapper/gradle-wrapper.jar deleted file mode 100644 index 13536770..00000000 Binary files a/testprojects/longclasspath/gradle/wrapper/gradle-wrapper.jar and /dev/null differ diff --git a/testprojects/longclasspath/gradle/wrapper/gradle-wrapper.properties b/testprojects/longclasspath/gradle/wrapper/gradle-wrapper.properties deleted file mode 100644 index e0b3fb8d..00000000 --- a/testprojects/longclasspath/gradle/wrapper/gradle-wrapper.properties +++ /dev/null @@ -1,5 +0,0 @@ -distributionBase=GRADLE_USER_HOME -distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.2-bin.zip -zipStoreBase=GRADLE_USER_HOME -zipStorePath=wrapper/dists diff --git a/testprojects/longclasspath/gradlew b/testprojects/longclasspath/gradlew deleted file mode 100644 index cccdd3d5..00000000 --- a/testprojects/longclasspath/gradlew +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/env sh - -############################################################################## -## -## Gradle start up script for UN*X -## -############################################################################## - -# Attempt to set APP_HOME -# Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null - -APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` - -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" - -# Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" - -warn () { - echo "$*" -} - -die () { - echo - echo "$*" - echo - exit 1 -} - -# OS specific support (must be 'true' or 'false'). -cygwin=false -msys=false -darwin=false -nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; -esac - -CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar - -# Determine the Java command to use to start the JVM. -if [ -n "$JAVA_HOME" ] ; then - if [ -x "$JAVA_HOME/jre/sh/java" ] ; then - # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" - else - JAVACMD="$JAVA_HOME/bin/java" - fi - if [ ! -x "$JAVACMD" ] ; then - die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." - fi -else - JAVACMD="java" - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. - -Please set the JAVA_HOME variable in your environment to match the -location of your Java installation." -fi - -# Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=$((i+1)) - done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac -fi - -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi - -exec "$JAVACMD" "$@" diff --git a/testprojects/longclasspath/gradlew.bat b/testprojects/longclasspath/gradlew.bat deleted file mode 100644 index e95643d6..00000000 --- a/testprojects/longclasspath/gradlew.bat +++ /dev/null @@ -1,84 +0,0 @@ -@if "%DEBUG%" == "" @echo off -@rem ########################################################################## -@rem -@rem Gradle startup script for Windows -@rem -@rem ########################################################################## - -@rem Set local scope for the variables with windows NT shell -if "%OS%"=="Windows_NT" setlocal - -set DIRNAME=%~dp0 -if "%DIRNAME%" == "" set DIRNAME=. -set APP_BASE_NAME=%~n0 -set APP_HOME=%DIRNAME% - -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= - -@rem Find java.exe -if defined JAVA_HOME goto findJavaFromJavaHome - -set JAVA_EXE=java.exe -%JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init - -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:findJavaFromJavaHome -set JAVA_HOME=%JAVA_HOME:"=% -set JAVA_EXE=%JAVA_HOME%/bin/java.exe - -if exist "%JAVA_EXE%" goto init - -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. - -goto fail - -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - -:execute -@rem Setup the command line - -set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar - -@rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% - -:end -@rem End local scope for the variables with windows NT shell -if "%ERRORLEVEL%"=="0" goto mainEnd - -:fail -rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of -rem the _cmd.exe /c_ return code! -if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 -exit /b 1 - -:mainEnd -if "%OS%"=="Windows_NT" endlocal - -:omega diff --git a/testprojects/longclasspath/settings.gradle b/testprojects/longclasspath/settings.gradle deleted file mode 100644 index 25e3afe9..00000000 --- a/testprojects/longclasspath/settings.gradle +++ /dev/null @@ -1,6 +0,0 @@ -pluginManagement { - repositories { - gradlePluginPortal() - } -} -rootProject.name = 'longclasspath' diff --git a/testprojects/longclasspath/src/main/java/com/example/longclasspath/DemoApplication.java b/testprojects/longclasspath/src/main/java/com/example/longclasspath/DemoApplication.java deleted file mode 100644 index 7b105d87..00000000 --- a/testprojects/longclasspath/src/main/java/com/example/longclasspath/DemoApplication.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.example.longclasspath; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class DemoApplication { - - public static void main(String[] args) { - SpringApplication.run(DemoApplication.class, args); - } - -} diff --git a/testprojects/longclasspath/src/main/resources/application.properties b/testprojects/longclasspath/src/main/resources/application.properties deleted file mode 100644 index 8b137891..00000000 --- a/testprojects/longclasspath/src/main/resources/application.properties +++ /dev/null @@ -1 +0,0 @@ - diff --git a/testprojects/longclasspath/src/test/java/com/example/longclasspath/DemoApplicationTests.java b/testprojects/longclasspath/src/test/java/com/example/longclasspath/DemoApplicationTests.java deleted file mode 100644 index 26e780d7..00000000 --- a/testprojects/longclasspath/src/test/java/com/example/longclasspath/DemoApplicationTests.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.example.longclasspath; - -import org.junit.Test; -import org.junit.runner.RunWith; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.context.junit4.SpringRunner; - -@RunWith(SpringRunner.class) -@SpringBootTest -public class DemoApplicationTests { - - @Test - public void contextLoads() { - } - -} diff --git a/testprojects/resolveClasspath/insurance-decision/.gitignore b/testprojects/resolveClasspath/insurance-decision/.gitignore deleted file mode 100644 index d2a8dd3d..00000000 --- a/testprojects/resolveClasspath/insurance-decision/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -/target -/local -**/project.repositories - -# Eclipse, Netbeans and IntelliJ files -**/.* -!.gitignore -!.gitattributes -**/nbproject -**/*.ipr -**/*.iws -**/*.iml - -# Repository wide ignore mac DS_Store files -.DS_Store diff --git a/testprojects/resolveClasspath/insurance-decision/pom.xml b/testprojects/resolveClasspath/insurance-decision/pom.xml deleted file mode 100644 index 625f056b..00000000 --- a/testprojects/resolveClasspath/insurance-decision/pom.xml +++ /dev/null @@ -1,111 +0,0 @@ - - - 4.0.0 - com.demo - InsuranceDecision - 1.0-SNAPSHOT - kjar - InsuranceDecision - - - 7.3.1.GA-redhat-00002 - - - - - com.redhat.ba - ba-platform-bom - ${ba.version} - import - pom - - - - - - org.kie - kie-internal - provided - - - org.kie - kie-api - provided - - - - com.thoughtworks.xstream - xstream - test - - - junit - junit - test - - - org.drools - drools-wb-scenario-simulation-editor-api - test - - - org.drools - drools-wb-scenario-simulation-editor-backend - test - - - org.drools - drools-compiler - test - - - org.kie - kie-dmn-feel - test - - - org.kie - kie-dmn-api - test - - - org.kie - kie-dmn-core - test - - - - - - org.kie - kie-maven-plugin - 7.18.0.Final-redhat-00004 - true - - - - - - jboss-ga-repository - https://maven.repository.redhat.com/ga/ - - true - - - false - - - - - - jboss-ga-plugin-repository - https://maven.repository.redhat.com/ga/ - - true - - - false - - - - \ No newline at end of file diff --git a/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/kie-deployment-descriptor.xml b/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/kie-deployment-descriptor.xml deleted file mode 100644 index 4454be12..00000000 --- a/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/kie-deployment-descriptor.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - org.jbpm.domain - org.jbpm.domain - JPA - JPA - SINGLETON - - - - - - - - - - true - diff --git a/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/kmodule.xml b/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/kmodule.xml deleted file mode 100644 index 2ba4076c..00000000 --- a/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/kmodule.xml +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/persistence.xml b/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/persistence.xml deleted file mode 100644 index 972eba9d..00000000 --- a/testprojects/resolveClasspath/insurance-decision/src/main/resources/META-INF/persistence.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - org.hibernate.jpa.HibernatePersistenceProvider - java:jboss/datasources/ExampleDS - true - - - - - - - - - - diff --git a/testprojects/resolveClasspath/insurance-decision/src/main/resources/com/demo/InsurancePricing.dmn b/testprojects/resolveClasspath/insurance-decision/src/main/resources/com/demo/InsurancePricing.dmn deleted file mode 100644 index d2a85d71..00000000 --- a/testprojects/resolveClasspath/insurance-decision/src/main/resources/com/demo/InsurancePricing.dmn +++ /dev/null @@ -1,237 +0,0 @@ - - - - - previous Incidents - - - - car age - - - - - - - - - - - - - - - - - Age - - - - - PreviousIncidents - - - - - - >25 - - - false - - - 1000 - - - - - >25 - - - true - - - 1250 - - - - - [18..25] - - - false - - - 1500 - - - - - [18..25] - - - true - - - 2000 - - - - - - Insurance Final Price - - - - - - - - - - - - -Insurance Base Price * Car reliability factor(CarAge) - - - - - - - - - - car age - - - - - - <=2 - - - 1 - - - - - [3, 4] - - - 1.1 - - - - - [5,7] - - - 1.2 - - - - - >=8 - - - 1.3 - - - - - - - - - - - 50.0 - 100.0 - 100.0 - 100.0 - 100.0 - - - 506.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/testprojects/resolveClasspath/insurance-decision/src/test/java/testscenario/Launch.java b/testprojects/resolveClasspath/insurance-decision/src/test/java/testscenario/Launch.java deleted file mode 100644 index 11fc4d9e..00000000 --- a/testprojects/resolveClasspath/insurance-decision/src/test/java/testscenario/Launch.java +++ /dev/null @@ -1,8 +0,0 @@ -package testscenario; - -public class Launch { - - public static void main(String[] args) { - System.out.println("Main Class in Test Folder!"); - } -} \ No newline at end of file diff --git a/testprojects/resolveClasspath/insurance-decision/src/test/java/testscenario/ScenarioJunitActivatorTest.java b/testprojects/resolveClasspath/insurance-decision/src/test/java/testscenario/ScenarioJunitActivatorTest.java deleted file mode 100644 index 958dc758..00000000 --- a/testprojects/resolveClasspath/insurance-decision/src/test/java/testscenario/ScenarioJunitActivatorTest.java +++ /dev/null @@ -1,7 +0,0 @@ -package testscenario; -/** -* Do not remove this file -*/ -@org.junit.runner.RunWith(org.drools.workbench.screens.scenariosimulation.backend.server.runner.ScenarioJunitActivator.class) -public class ScenarioJunitActivatorTest { -} \ No newline at end of file diff --git a/testprojects/resolveClasspath/insurance-decision/src/test/resources/com/demo/test-scenario.scesim b/testprojects/resolveClasspath/insurance-decision/src/test/resources/com/demo/test-scenario.scesim deleted file mode 100644 index c6365a30..00000000 --- a/testprojects/resolveClasspath/insurance-decision/src/test/resources/com/demo/test-scenario.scesim +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - - - Index - OTHER - - - # - java.lang.Integer - - java.lang.Integer - # - - - - - Description - OTHER - - - Scenario description - java.lang.String - - java.lang.String - Scenario description - - - - - Age - - - - 0|1 - GIVEN - - - Age - Age - - number - Age - value - - - - - CarAge - - - - 0|2 - GIVEN - - - CarAge - CarAge - - number - CarAge - value - - - - - PreviousIncidents - - - - 0|3 - GIVEN - - - PreviousIncidents - PreviousIncidents - - boolean - PreviousIncidents - value - - - - - FinalPrice - - - - 0|4 - EXPECT - - - FinalPrice - FinalPrice - - number - FinalPrice - value - - - - - Insurance Base Price - - - - 0|5 - EXPECT - - - Insurance Base Price - Insurance Base Price - - number - Insurance Base Price - value - - - src/main/resources/com/demo/InsurancePricing.dmn - DMN - - - - - - - - young client - - - - - 25 - - - - - 0 - - - - - false - - - - - 1500 - - - - - 1500 - - - - - 1 - - - - - - - - - - young client with accident - - - - - 25 - - - - - 0 - - - - - true - - - - - 2000 - - - - - 2000 - - - - - 2 - - - - - - - - - - young client with accident car 3yo - - - - - 25 - - - - - 3 - - - - - true - - - - - 2200 - - - - - 2000 - - - - - 3 - - - - - - - - - - young client with accident car 3yo - - - - - 18 - - - - - 5 - - - - - true - - - - - 2400 - - - - - 2000 - - - - - 4 - - - - - - - - - - experienced client - - - - - 26 - - - - - 0 - - - - - false - - - - - 1000 - - - - - 1000 - - - - - 5 - - - - - - - - - - \ No newline at end of file diff --git a/testprojects/resolveClasspath/kie-client/.gitignore b/testprojects/resolveClasspath/kie-client/.gitignore deleted file mode 100644 index d2a8dd3d..00000000 --- a/testprojects/resolveClasspath/kie-client/.gitignore +++ /dev/null @@ -1,15 +0,0 @@ -/target -/local -**/project.repositories - -# Eclipse, Netbeans and IntelliJ files -**/.* -!.gitignore -!.gitattributes -**/nbproject -**/*.ipr -**/*.iws -**/*.iml - -# Repository wide ignore mac DS_Store files -.DS_Store diff --git a/testprojects/resolveClasspath/kie-client/pom.xml b/testprojects/resolveClasspath/kie-client/pom.xml deleted file mode 100644 index 456b78bb..00000000 --- a/testprojects/resolveClasspath/kie-client/pom.xml +++ /dev/null @@ -1,116 +0,0 @@ - - - 4.0.0 - kie-client - com.demo - 1.0-SNAPSHOT - - 7.3.1.GA-redhat-00002 - UTF-8 - 1.8 - 1.8 - - - - - com.redhat.ba - ba-platform-bom - ${ba.version} - pom - import - - - - - - - org.kie.server - kie-server-client - - - - com.demo - InsuranceDecision - 1.0-SNAPSHOT - - - org.kie - kie-dmn-core - - - org.kie - kie-ci - - - - org.slf4j - slf4j-api - - - ch.qos.logback - logback-classic - runtime - - - junit - junit - test - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.8.1 - - ${maven.compiler.source} - ${maven.compiler.target} - - - - - org.codehaus.mojo - exec-maven-plugin - 1.2.1 - - - - java - - - - - client.EmbedMain - - -verbose:class - - - - - - - - jboss-ga-repository - https://maven.repository.redhat.com/ga/ - - true - - - false - - - - - - jboss-ga-plugin-repository - https://maven.repository.redhat.com/ga/ - - true - - - false - - - - \ No newline at end of file diff --git a/testprojects/resolveClasspath/kie-client/src/main/java/client/EmbedMain.java b/testprojects/resolveClasspath/kie-client/src/main/java/client/EmbedMain.java deleted file mode 100644 index 5d1f6c2b..00000000 --- a/testprojects/resolveClasspath/kie-client/src/main/java/client/EmbedMain.java +++ /dev/null @@ -1,53 +0,0 @@ -package client; - -import java.net.URL; -import java.net.URLClassLoader; - -import org.kie.api.KieServices; -import org.kie.api.runtime.KieContainer; -import org.kie.dmn.api.core.DMNContext; -import org.kie.dmn.api.core.DMNModel; -import org.kie.dmn.api.core.DMNResult; -import org.kie.dmn.api.core.DMNRuntime; - -/** - * EmbedMain - */ -public class EmbedMain { - - public static void main(String[] args) { - try { - Class.forName("org.drools.compiler.commons.jci.readers.ResourceReader"); - } catch (ClassNotFoundException e) { - e.printStackTrace(); - } - ClassLoader cl = EmbedMain.class.getClassLoader(); - - URL[] urls = ((URLClassLoader) cl).getURLs(); - - for (URL url : urls) { - System.out.println(url.getFile()); - } - - KieServices kieServices = KieServices.Factory.get(); - - KieContainer kieContainer = kieServices.getKieClasspathContainer(); - - DMNRuntime dmnRuntime = kieContainer.newKieSession().getKieRuntime(DMNRuntime.class); - - DMNContext dmnContext = dmnRuntime.newContext(); - - dmnContext.set("PreviousIncidents", false); - dmnContext.set("Age", 28); - dmnContext.set("CarAge", 3); - - String namespace = "http://www.trisotech.com/definitions/_bb8b9304-b29f-462e-9f88-03d0d868aec5"; - String modelName = "Insurance Pricing"; - - DMNModel dmnModel = dmnRuntime.getModel(namespace, modelName); - - DMNResult dmnResult = dmnRuntime.evaluateAll(dmnModel, dmnContext); - - System.out.println(dmnResult); - } -} \ No newline at end of file diff --git a/testprojects/resolveClasspath/kie-client/src/main/java/client/Main.java b/testprojects/resolveClasspath/kie-client/src/main/java/client/Main.java deleted file mode 100644 index a4d095d0..00000000 --- a/testprojects/resolveClasspath/kie-client/src/main/java/client/Main.java +++ /dev/null @@ -1,66 +0,0 @@ -package client; - -import java.util.Map; - -import org.kie.dmn.api.core.DMNContext; -import org.kie.dmn.api.core.DMNResult; -import org.kie.server.api.model.ServiceResponse; -import org.kie.server.client.DMNServicesClient; -import org.kie.server.client.KieServicesClient; -import org.kie.server.client.KieServicesConfiguration; -import org.kie.server.client.KieServicesFactory; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class Main { - - final static Logger log = LoggerFactory.getLogger(Main.class); - - private static final String URL = "http://localhost:8080/kie-server/services/rest/server"; - private static final String user = System.getProperty("username", "donato"); - private static final String password = System.getProperty("password", "donato"); - private static final String CONTAINER = "InsuranceDecision_1.0-SNAPSHOT"; - - public static void main(String[] args) { - Main clientApp = new Main(); - - long start = System.currentTimeMillis(); - - clientApp.evaluateDMN(); - - long end = System.currentTimeMillis(); - System.out.println("elapsed time: " + (end - start)); - } - - private void evaluateDMN() { - KieServicesClient client = getClient(); - DMNServicesClient dmnClient = client.getServicesClient(DMNServicesClient.class); - - String namespace = "http://www.trisotech.com/definitions/_bb8b9304-b29f-462e-9f88-03d0d868aec5"; - String modelName = "Insurance Pricing"; - - DMNContext dmnContext = dmnClient.newContext(); - - dmnContext.set("PreviousIncidents", false); - dmnContext.set("Age", 28); - dmnContext.set("CarAge", 3); - - ServiceResponse result = dmnClient.evaluateAll(CONTAINER, namespace, modelName, dmnContext); - System.out.println(result); - - } - - private KieServicesClient getClient() { - KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(URL, user, password); - - // Configuration for JMS - // KieServicesConfiguration config = KieServicesFactory.newJMSConfiguration(connectionFactory, requestQueue, responseQueue, username, password) - - Map headers = null; - config.setHeaders(headers); - KieServicesClient client = KieServicesFactory.newKieServicesClient(config); - - return client; - } - -} diff --git a/testprojects/resolveClasspath/kie-client/src/main/resources/META-INF/MANIFEST.MF b/testprojects/resolveClasspath/kie-client/src/main/resources/META-INF/MANIFEST.MF deleted file mode 100644 index 301b748f..00000000 --- a/testprojects/resolveClasspath/kie-client/src/main/resources/META-INF/MANIFEST.MF +++ /dev/null @@ -1,3 +0,0 @@ -Manifest-Version: 1.0 - -Main-Class: client.Main \ No newline at end of file diff --git a/testprojects/resolveClasspath/kie-client/src/main/resources/logback.xml b/testprojects/resolveClasspath/kie-client/src/main/resources/logback.xml deleted file mode 100644 index 9af6bda3..00000000 --- a/testprojects/resolveClasspath/kie-client/src/main/resources/logback.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - %d [%t] %-5p %m%n - - - - - - - - - - - diff --git a/webpack.config.js b/webpack.config.js index 5af8d81e..54342f8d 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -32,8 +32,12 @@ module.exports = function (env, argv) { devtoolModuleFilenameTemplate: "../[resource-path]" }, externals: { + 'applicationinsights-native-metrics': 'commonjs applicationinsights-native-metrics', // ignored because we don't ship native module vscode: 'commonjs vscode' }, - devtool: 'source-map' + devtool: 'source-map', + infrastructureLogging: { + level: 'log' + } }]; }; \ No newline at end of file