[
  {
    "path": ".gitattributes",
    "content": "*.bmp binary\n*.dll binary\n*.gif binary\n*.jpg binary\n*.png binary\n*.snk binary\n*.exe binary\n*.wmv binary\n*.mp4 binary\n*.ismv binary\n*.isma binary\n\n*.ascx text\n*.cmd text\n*.config text\n*.cs text diff=csharp\n*.csproj text merge=union\n*.edmx text\n\n*.htm text\n*.html text\n\n*.json text eol=lf\n*.ts text eol=lf\n*.js text eol=lf\n\n*.msbuild text\n*.nuspec text\n\n*.resx text\n*.ruleset text\n*.StyleCop text\n*.targets text\n*.txt text\n*.xml text\n\n*.sln text eol=crlf merge=union\n"
  },
  {
    "path": ".github/CODEOWNERS",
    "content": "* @mikeharder @weshaggard @raych1 @scbedd @danieljurek\n"
  },
  {
    "path": ".github/copilot-instructions.md",
    "content": "# Copilot Instructions\n\n## Project Overview\n\nThis repository contains the source code for `openapi-diff` (aka `oad`, aka `@azure/oad`), a breaking-change\ndetector tool for OpenAPI specifications. It is published as an npm package and is used internally by the\n[azure-rest-api-specs](https://github.com/Azure/azure-rest-api-specs) and\n[azure-rest-api-specs-pr](https://github.com/Azure/azure-rest-api-specs-pr) repos to validate PRs.\n\nThe core diff logic is written in C#/.NET and the CLI/validation layer is written in TypeScript.\n\n## Tech Stack\n\n- **TypeScript** (ES2017 target, CommonJS modules) — CLI, validation, and test code in `src/`\n- **C#/.NET 6** — core diff engine in `openapi-diff/`\n- **Node.js 20+**\n- **Jest** with `ts-jest` for TypeScript tests\n- **ESLint** (`typescript-eslint`) for linting\n- **Prettier** for formatting\n- **markdownlint** for Markdown style\n\n## Setup\n\n```sh\nnpm ci                # Install Node.js dependencies\nnpm run dn.restore    # Restore .NET dependencies (if working on C# code)\n```\n\n## Build\n\n```sh\nnpm run tsc           # Build TypeScript code (outputs to dist/)\nnpm run dn.build      # Build C# code\n```\n\n## Lint and Format\n\n```sh\nnpm run lint          # Run ESLint (zero warnings allowed)\nnpm run lint:fix      # Auto-fix ESLint issues\nnpm run prettier      # Check formatting with Prettier\nnpm run prettier:write # Auto-fix formatting\n```\n\n## Test\n\n```sh\nnpm run ts.test       # Run TypeScript tests (Jest)\nnpm run dn.test       # Run C# tests (dotnet test)\nnpm test              # Run both C# and TypeScript tests\n```\n\nTypeScript tests live in `src/test/` and follow the naming pattern `*[tT]est.ts`.\n\n## Code Conventions\n\n- **No semicolons** — Prettier is configured with `\"semi\": false`\n- **Print width** is 140 characters\n- **Trailing commas** are not used (`\"trailingComma\": \"none\"`)\n- **Arrow function parentheses** are avoided when possible (`\"arrowParens\": \"avoid\"`)\n- **Strict TypeScript** — `tsconfig.json` has `\"strict\": true`\n- **ESLint config** is in `eslint.config.js` (CommonJS format, not ESM)\n- **Markdown line length** limit is 120 characters (tables and headings are exempt)\n- Prefer `const` over `let` where possible\n\n## Repository Structure\n\n```\nsrc/\n  cli.ts              # CLI entry point\n  index.ts            # Package entry point\n  lib/\n    commands/          # Command implementations\n    util/              # Utility modules\n    validate.ts        # Validation logic\n    validators/        # Validator implementations\n  test/                # TypeScript tests (Jest)\n    specs/             # Test fixture OpenAPI spec files\nopenapi-diff/          # C#/.NET solution (core diff engine)\ndocs/                  # Documentation\n```\n\n## CI\n\nCI runs on both Ubuntu and Windows via GitHub Actions (`.github/workflows/ci.yml`). It runs:\n`npm run lint`, `npm run prettier`, and `npm test` (which includes both C# and TypeScript tests).\n\n## Guidelines\n\n- Run `npm run lint` and `npm run prettier` before submitting changes.\n- Add or update tests in `src/test/` for any TypeScript code changes.\n- Do not modify CI/CD pipeline files (`.github/workflows/`, `azure-pipelines.yml`) unless specifically required.\n- When working only on TypeScript, use `npm run ts.test` to run just the TypeScript tests.\n"
  },
  {
    "path": ".github/dependabot.yml",
    "content": "version: 2\nupdates:\n  - package-ecosystem: \"github-actions\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n  - package-ecosystem: \"npm\"\n    directory: \"/\"\n    schedule:\n      interval: \"weekly\"\n    cooldown:\n      default-days: 7\n    ignore:\n      # dependencies\n\n      # Pinned to the most popular versions\n      - dependency-name: \"@ts-common/fs\"\n      - dependency-name: \"@ts-common/iterator\"\n      - dependency-name: \"@ts-common/json\"\n      - dependency-name: \"@ts-common/json-parser\"\n      - dependency-name: \"@ts-common/source-map\"\n      - dependency-name: \"@ts-common/string-map\"\n\n      # locked to ^15.4.1, since newer majors include breaking changes that may impact us\n      - dependency-name: \"yargs\"\n\n      # devDependencies\n\n      # Locked to \"^20.0.0\" to align with our minimum node version in package.json/engines\n      - dependency-name: \"@types/node\"\n    groups:\n      eslint:\n        patterns:\n          - \"*eslint*\"\n"
  },
  {
    "path": ".github/matchers/actionlint.json",
    "content": "{\n  \"problemMatcher\": [\n    {\n      \"owner\": \"actionlint\",\n      \"pattern\": [\n        {\n          \"regexp\": \"^(?:\\\\x1b\\\\[\\\\d+m)?(.+?)(?:\\\\x1b\\\\[\\\\d+m)*:(?:\\\\x1b\\\\[\\\\d+m)*(\\\\d+)(?:\\\\x1b\\\\[\\\\d+m)*:(?:\\\\x1b\\\\[\\\\d+m)*(\\\\d+)(?:\\\\x1b\\\\[\\\\d+m)*: (?:\\\\x1b\\\\[\\\\d+m)*(.+?)(?:\\\\x1b\\\\[\\\\d+m)* \\\\[(.+?)\\\\]$\",\n          \"file\": 1,\n          \"line\": 2,\n          \"column\": 3,\n          \"message\": 4,\n          \"code\": 5\n        }\n      ]\n    }\n  ]\n}\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: ci\n\non:\n  push:\n    branches: [main]\n  pull_request:\n\njobs:\n  ci:\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest]\n\n    steps:\n      - uses: actions/checkout@v6\n\n      - uses: actions/setup-node@v6\n        with:\n          node-version: \"20\"\n\n      - uses: actions/setup-dotnet@v5\n        with:\n          dotnet-version: \"6\"\n\n      - name: npm ci\n        run: npm ci\n\n      - name: test\n        run: npm test\n\n      - name: lint\n        run: npm run lint\n\n      - name: prettier\n        run: npm run prettier\n\n      - if: runner.os == 'Linux'\n        name: Pack\n        run: npm pack\n\n      - if: runner.os == 'Linux'\n        name: Upload tarball\n        uses: actions/upload-artifact@v7\n        with:\n          path: \"azure-oad-*.tgz\"\n          archive: false\n\n      # Content copied from https://raw.githubusercontent.com/rhysd/actionlint/2ab3a12c7848f6c15faca9a92612ef4261d0e370/.github/actionlint-matcher.json\n      - if: runner.os == 'Linux'\n        name: Add ActionLint Problem Matcher\n        run: echo \"::add-matcher::.github/matchers/actionlint.json\"\n\n      - if: runner.os == 'Linux'\n        name: Lint workflows\n        uses: docker://rhysd/actionlint:1.7.11\n        with:\n          args: -color -verbose\n"
  },
  {
    "path": ".gitignore",
    "content": "## Ignore generated code\nPackageTest/NugetPackageTest/Generated\nsrc/generator/AutoRest.NodeJS.Tests/AcceptanceTests/*.js\n\n## Ignore user-specific files, temporary files, build results, etc.\ncompare-results/*\n\n# User-specific files\n*.suo\n*.user\n*.sln.docstates\n.vs\nlaunchSettings.json\n\n# Build results\nbinaries/\n[Dd]ebug*/\n[Rr]elease/\n\n[Tt]est[Rr]esult*\n[Bb]uild[Ll]og.*\n[Bb]uild.out\n\n*_i.c\n*_p.c\n*.ilk\n*.meta\n*.obj\n*.pch\n*.pdb\n*.pgc\n*.pgd\n*.rsp\n*.sbr\n*.tlb\n*.tli\n*.tlh\n*.tmp\n*.vspscc\n*.vssscc\n.builds\n\n*.pidb\n\n*.log*\n*.scc\n# Visual C++ cache files\nipch/\n*.aps\n*.ncb\n*.opensdf\n*.sdf\n\n# Visual Studio profiler\n*.psess\n*.vsp\n\n# Code analysis\n*.CodeAnalysisLog.xml\n\n# Guidance Automation Toolkit\n*.gpState\n\n# ReSharper is a Visual Studio add-in\n_ReSharper*/\n*.[Rr]e[Ss]harper\n\n# NCrunch\n*.ncrunch*\n.*crunch*.local.xml\n\n# Installshield output folder\n[Ee]xpress\n\n# DocProject is a documentation generator add-in\nDocProject/buildhelp/\nDocProject/Help/*.HxT\nDocProject/Help/*.HxC\nDocProject/Help/*.hhc\nDocProject/Help/*.hhk\nDocProject/Help/*.hhp\nDocProject/Help/Html2\nDocProject/Help/html\n\n# Click-Once directory\npublish\n\n# Publish Web Output\n*.[Pp]ublish.xml\n\n# Others\n[Bb]in\n[Oo]bj\nsql\n*.Cache\nClientBin\n[Ss]tyle[Cc]op.*\n~$*\n*.dbmdl\n\n# Build tasks\n[Tt]ools/*.dll\n*.class\n\n# Mobile Tools for Java (J2ME)\n.mtj.tmp/\n\n# Package Files #\n*.jar\n*.war\n*.ear\n\n# Azure Tooling #\nnode_modules\n.ntvs_analysis.dat\n\n# Eclipse #\n*.pydevproject\n.project\n.metadata\nbin/**\ntmp/**\ntmp/**/*\n*.bak\n*.swp\n*~.nib\nlocal.properties\n.classpath\n.settings/\n.loadpath\n\n# Xamarin #\n*.userprefs\n\n# Other Tooling #\n.classpath\n.project\nbuild\nreports\n.gradle\n.idea\n*.iml\nTools/7-Zip\n.gitrevision\n\n# Sensitive files\n*.keys\n*.pfx\n*.cer\n*.pem\n*.jks\n\n# Backup & report files from converting a project to a new version of VS.\n_UpgradeReport_Files/\nBackup*/\nUpgradeLog*.XML\n\n# NuGet\npackages\n\n# Mac OS #\n.DS_Store\n.DS_Store?\n\n# Windows #\nThumbs.db\n\n# Mono\n*dll.mdb\n*exe.mdb\n\n#old nuget restore folder\n.nuget/\nsrc/generator/AutoRest.Ruby*Tests/Gemfile.lock\nsrc/generator/AutoRest.Ruby*/*/RspecTests/Generated/*\n\n#netcore\n/NetCore\n*.lock.json\n\n#dnx installation\ndnx-clr-win-x86*/\ndnx-coreclr-win-x86*/\n/dnx\n\n# Gemfile.lock\nGemfile.lock\n\n# go ignore\nsrc/generator/AutoRest.Go.Tests/pkg/*\nsrc/generator/AutoRest.Go.Tests/bin/*\nsrc/generator/AutoRest.Go.Tests/src/github.com/*\nsrc/generator/AutoRest.Go.Tests/src/tests/generated/*\nsrc/generator/AutoRest.Go.Tests/src/tests/vendor/*\nsrc/generator/AutoRest.Go.Tests/src/tests/glide.lock\n\nsrc/autorest/**/*.js\nsrc/autorest-core/**/*.js\nsrc/vscode-autorest/**/*.js\n\n*.js.map\n\n# backup files\n*~\n\n#client runtime\nsrc/client/**/*\n\nsrc/extension/old/**/*\n*.d.ts\n\nsrc/bootstrapper\nsrc/extension/out\nsrc/next-gen\n\npackage/nuget/tools\npackage/chocolatey/*.nupkg\ndist/lib/dlls/**/*\n*.tgz\n\n*.d.ts.map\n*.js\n!eslint.config.js\ncoverage/\ndlls/\n"
  },
  {
    "path": ".markdownlint.jsonc",
    "content": "{\n    // This repository is markdownlint-enabled.\n    // Website: https://github.com/DavidAnson/markdownlint\n    // VS Code extension: https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint\n    //\n    // The implicit, default set of rules is defined in:\n    // https://github.com/DavidAnson/markdownlint/blob/v0.30.0/doc/Rules.md\n\n    // MD013 - Line length\n    // https://github.com/DavidAnson/markdownlint/blob/main/doc/md013.md\n    //\n    // \"line_length\" : 120:\n    // Allow lines of length 120 instead of the default 80. Keep in sync with guide lines .vscode/settings.json.\n    //\n    // \"tables\": false\n    // Do not include tables. Breaking a line in a table to meet the line length would add a line break in the table\n    // itself. We do not want that.\n    //\n    // \"headings\": false\n    // Do not include headings. One cannot break lines in headings, and we sometimes need long ones, e.g. for FAQs.\n    \"MD013\": { \"line_length\" : 120, \"tables\": false, \"headings\": false },\n\n    // MD025 - Multiple top-level headings in the same document\n    // https://github.com/DavidAnson/markdownlint/blob/main/doc/md025.md\n    //\n    // We like multiple top-headings.\n    \"MD025\": false,\n\n    // MD034 - Inline HTML\n    // https://github.com/DavidAnson/markdownlint/blob/main/doc/md033.md\n    //\n    // Forbid using inline HTML elements except <br/>. We use <br/> within tables.\n    \"MD033\": { \"allowed_elements\": [\"br\"]}\n}\n"
  },
  {
    "path": ".prettierignore",
    "content": "*.json\n*.md\n*.jsonc\n.prettierrc\nazure-pipelines.yml\ncoverage/\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"semi\": false,\n  \"printWidth\": 140,\n  \"trailingComma\": \"none\",\n  \"arrowParens\": \"avoid\"\n}"
  },
  {
    "path": ".vscode/launch.json",
    "content": "{\n    \"version\": \"0.2.0\",\n    \"configurations\": [\n        {\n            // Use IntelliSense to find out which attributes exist for C# debugging\n            // Use hover for the description of the existing attributes\n            // For further information visit https://github.com/dotnet/vscode-csharp/blob/main/debugger-launchjson.md\n            \"name\": \".NET Core Launch (console)\",\n            \"type\": \"coreclr\",\n            \"request\": \"launch\",\n            \"preLaunchTask\": \"build\",\n            // If you have changed target frameworks, make sure to update the program path.\n            \"program\": \"${workspaceFolder}/openapi-diff/src/core/OpenApiDiff/bin/Debug/netcoreapp6.0/OpenApiDiff.dll\",\n            \"args\": [],\n            \"cwd\": \"${workspaceFolder}/openapi-diff/src/core/OpenApiDiff\",\n            // For more information about the 'console' field, see https://aka.ms/VSCode-CS-LaunchJson-Console\n            \"console\": \"internalConsole\",\n            \"stopAtEntry\": false\n        },\n        {\n            \"name\": \".NET Core Attach\",\n            \"type\": \"coreclr\",\n            \"request\": \"attach\"\n        }\n    ]\n}"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n    \"cSpell.words\": [\n    ],\n    \"azure-pipelines.1ESPipelineTemplatesSchemaFile\": true\n}\n"
  },
  {
    "path": ".vscode/tasks.json",
    "content": "{\n    \"version\": \"2.0.0\",\n    \"tasks\": [\n        {\n            \"label\": \"build\",\n            \"command\": \"dotnet\",\n            \"type\": \"process\",\n            \"args\": [\n                \"build\",\n                \"${workspaceFolder}/openapi-diff/OpenApiDiff.sln\",\n                \"/property:GenerateFullPaths=true\",\n                \"/consoleloggerparameters:NoSummary;ForceNoAlign\"\n            ],\n            \"problemMatcher\": \"$msCompile\"\n        },\n        {\n            \"label\": \"publish\",\n            \"command\": \"dotnet\",\n            \"type\": \"process\",\n            \"args\": [\n                \"publish\",\n                \"${workspaceFolder}/openapi-diff/OpenApiDiff.sln\",\n                \"/property:GenerateFullPaths=true\",\n                \"/consoleloggerparameters:NoSummary;ForceNoAlign\"\n            ],\n            \"problemMatcher\": \"$msCompile\"\n        },\n        {\n            \"label\": \"watch\",\n            \"command\": \"dotnet\",\n            \"type\": \"process\",\n            \"args\": [\n                \"watch\",\n                \"run\",\n                \"--project\",\n                \"${workspaceFolder}/openapi-diff/OpenApiDiff.sln\"\n            ],\n            \"problemMatcher\": \"$msCompile\"\n        }\n    ]\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\n## 0.12.4 2026-03-13\n\n- Only throw error on AutoRest stderr when exit code is non-zero; log warnings otherwise\n\n# 0.12.3 2025-10-13\n\n- Fix crash in logging when property named \"$ref\"\n\n## 0.12.2 2025-09-22\n\n- bump dependency `js-yaml` from `^3.13.0` to `^4.1.0`\n- bump dependency `yargs` from `^13.2.2` to `^15.4.1`\n- pin pre-release dependencies\n  - `@ts-common/fs` to `0.2.0`\n  - `@ts-common/iterator` to `0.3.6`\n  - `@ts-common/json` to `0.3.1`\n  - `@ts-common/json-parser` to `0.9.0`\n  - `@ts-common/source-map` to `0.5.0`\n  - `@ts-common/string-map` to `0.3.0`\n  - `json-pointer` to `0.6.2`\n  - `source-map` to `0.7.6`\n- remove unused dependencies\n  - `acorn`\n  - `kind-of`\n  - `minimist`\n  - `set-value`\n  - `yargs-parser`\n\n## 0.12.1 2025-09-18\n\n- removed unused dependency 'glob'\n\n## 0.12.0 2025-08-29\n\n- replaced dependency 'request' with built-in fetch() API\n- replaced child_process.exec() with execFile()\n- require Node >= 20\n\n## 0.11.0 2025-08-11\n\n- upgraded Newtonsoft.Json from 9.0.1 to 13.0.1\n\n## 0.10.14 2025-06-19\n\n- escaped the input string when construct the autorest command\n\n## 0.10.5 Released on 2024-02-16\n\n- update source map version from 0.7.3 to 0.7.4 so that it works with Node 18.\n- fix minor code issues that were blocking local run\n- update docs\n\n## 0.10.4 Released on 2023-01-10\n\n- fix rule index & support additionalProperties:true\n\n## 0.10.3 Released on 2022-11-29\n\n- fix adding enum value & command line exception\n\n## 0.10.2 Released on 2022-11-02\n\n- bugfix for RequiredStatusChange\n\n## 0.10.1 Released on 2022-10-15\n\n- Bugfixes for ReferenceRedirection,AddedPropertyInResponse,DefaultValueChanged.\n\n## 0.10.0 Released on 2022-09-15\n\n- Added rules: AddedXmsEnum,RemovedXmsEnum,XmsEnumChanged.\n\n## 0.9.7 Released on 2022-08-15\n\n- change rule 'TypeChanged' to 'Info' if adding 'type:object' to an schema with \"properties\".\n\n## 0.9.6 Released on 2022-06-09\n\n- using autorest v3.6.1'.\n\n## 0.9.3 Released on 2022-02-09\n\n- bugfix for 'ConstraintIsStronger'.\n\n## 0.9.2 Released on 2022-01-05\n\n- bugfix for transforming path level parameters.\n\n## 0.9.1 Released on 2021-07-26\n\n- bugfix for rules -- 'addOptionalProperty' & 'ParameterInHasChanged'.\n\n## 0.9.0 Released on 2021-07-21\n\n- add new rule 'removedOptionalParameter'.\n- bugfix for 'RequestBodyFormatNoLongerSupported' & 'ResponseBodyFormatNowSupported'\n- upgrade dotnet core version from 2.0 to 3.1.\n\n## 0.8.12 Released on 2021-06-25\n\n- bug fix for checking circular allOf.\n## 0.8.11 Released on 2021-05-31\n\n- ConstraintIsWeaker & ConstraintIsStronger do not check adding/removing enum values.\n- Always report AddedEnumValue/RemovedEnumValue no matter it's the context is in request or response.\n\n## 0.8.10 Released on 2021-04-12\n\n- Fixed bug: 'autorest' fails to acquire lock possibly due to running concurrently.\n\n## 0.8.9 Released on 2021-04-08\n\n- Fixed incompatible implementation with doc for 'XmsLongRunningOperationChanged'.\n\n## 0.8.8 Released on 2021-03-19\n\n- Fixed issue of rule 'AddedOptionalProperty'.\n\n## 0.8.7 Released on 2021-02-24\n\n- Add new rule - XmsLongRunningOperationChanged.\n- Add new rule - AddedOptionalProperty.\n\n## 0.8.6 Released on 2021-01-18\n\n- Add new rule - AddingOptionalParameter.\n\n## 0.8.5\n\n- Fixed bug: multiple level 'allOf' comparing fails. \n\n## 0.8.4\n\n- Add new rule ChangedParameter order.\n- Expands \"allOf\" to compare.\n\n## 0.8.2\n\n- Fixed issue : Adding optional property to a model and the properties of the model is null, tool reports AddRequiredProperty.\n\n## 0.8.1\n\n- Fixed issue : can not find `node` path when running in pipeline.\n- Fixed issue : can not find correct `autorest` path when When oad is installed globally.\n\n## 0.8.0 Released on 2020-05-11\n\n- Unify paths and x-ms-paths in the swagger then compare the unified swagger so that it consider not a breaking when you move a path from `paths` to `x-ms-path` without any other changes.\n\n## 0.7.1 Released on 2020-04-21\n\n- Fixed issue with common parameters.[#160](https://github.com/Azure/openapi-diff/pull/160)\n\n## 0.6.3 Released on 2019-04-22\n\n- Fixed autorest path.\n\n## 0.5.2 Release on 2019-04-19.\n\n- Fixed issue with null Enums.\n\n## 0.5.0 Release on 2019-04-12.\n\n- Update to TS 3.4 and 'types'.\n\n## 0.4.3 Release on 2019-04-04.\n\n- Fixed issue with `AddedPath`.\n\n## 0.4.2 Release on 2019-04-03.\n\n- Fixed issue with logging.\n\n## 0.4.1 Release on 2019-04-03.\n\n- Fixed issue with models that are not reference. [#136](https://github.com/Azure/openapi-diff/pull/136)\n\n## 0.1.13 Released on 2019-01-03.\n\n- Fixed security vulnerability issue reported in github. [#121](https://github.com/Azure/openapi-diff/pull/121)\n\n## 0.1.12 Released on 2018-05-19.\n\n- Added support for readme tags.\n\n## 0.1.11 Released on 2018-05-14\n\n- Fix crash on no operation parameters . [#86](https://github.com/Azure/openapi-diff/issues/86)\n\n## 0.1.10 Released on 2018-03-15\n\n- Fix crash when there are no required parameters. [#107](https://github.com/Azure/openapi-diff/issues/107)\n\n## 0.1.9 Released on 2017-10-23\n\n- Fix publishing issue of 0.1.8 where some dlls were missing.\n\n## 0.1.8 Released on 2017-10-20\n\n- Updating to use AutoRest 2. This solves [#105](https://github.com/Azure/openapi-diff/issues/105)\n\n## 0.1.7 Released on 2017-08-10.\n\n- Chaining the promises upto `compare` method and gracefully exiting application [#88](https://github.com/Azure/openapi-diff/issues/88)\n\n## 0.1.x Released on 2017-07-18.\n\n- All issues associated with this release can be found using this filter [Sprint-103](https://github.com/Azure/openapi-diff/issues?q=label%3ASprint-103+is%3Aclosed) [Sprint-104](https://github.com/Azure/openapi-diff/issues?utf8=%E2%9C%93&q=label%3ASprint-104%20is%3Aclosed)\n\n## Added\n\n- Initial release of oad.\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing\n\nThis project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).\nFor more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact\n[opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.\n\n## Table of contents\n\n- [Contributing](#contributing)\n  - [Table of contents](#table-of-contents)\n  - [Prerequisites](#prerequisites)\n  - [Build the code](#build-the-code)\n    - [Troubleshoot](#troubleshoot)\n  - [Run `oad` locally from sources](#run-oad-locally-from-sources)\n  - [Reproduce specs PR CI failure of `Swagger BreakingChange` or `BreakingChange(Cross-Version)`](#reproduce-specs-pr-ci-failure-of-swagger-breakingchange-or-breakingchangecross-version)\n  - [Install `oad` globally from sources or npm feed](#install-oad-globally-from-sources-or-npm-feed)\n    - [Uninstall `oad` globally](#uninstall-oad-globally)\n  - [Purge the obsolete `oad` package from your system](#purge-the-obsolete-oad-package-from-your-system)\n  - [Publish the package](#publish-the-package)\n\n<!-- One of the few situations where usage of HTML is justified and it is not sanitized away by GitHub -->\n<!-- markdownlint-disable MD033 -->\n<small><i><a href='https://marketplace.visualstudio.com/items?itemName=yzhang.markdown-all-in-one'>\nTable of contents generated with yzhang.markdown-all-in-one</a></i></small>\n\n## Prerequisites\n\nTo execute any instructions in this file, first ensure you fulfill all the following prerequisites:\n\n1. Install [Node.js](https://nodejs.org/), version 14.x or higher.\n1. Install [.NET runtime and SDK](https://aka.ms/dotnet-download), version 6 or higher.\n1. Install [.NET CLI tools](https://github.com/dotnet/cli/releases) version 2.0.0 or higher.\n1. Execute all commands in this file from your [`openapi-diff`] git repo local clone root dir.\n1. Run `npm ci` to install the required node modules.\n\n## Build the code\n\n`openapi-diff` is composed both of TypeScript and .NET/C# projects, all of which have to be built\nto be able to run the tool locally from sources.\n\nThe core logic for `openapi-diff` is written in C# and compiled to a .NET binary.  \nThe CLI for `openapi-diff` is written in TypeScript and compiled to a Node.js binary.\n\n| Build command | Effect |\n|-|-|\n| `npm run dn.build` | Runs [`dotnet build`] and related commands to build the C# code. |\n| `npm run tsc` | Builds the TypeScript code. |\n\nFor more commands, see the [`package.json`](/package.json) `scripts` element.\nNotably:\n\n| Command | Effect |\n|-|-|\n| `npm run dn.restore` | Runs [`dotnet restore`] in preparation to build the C# code. |\n| `npm run dn.test` | Runs [`dotnet test`] and related commands to test the C# code. |\n\n### Troubleshoot\n\nIf the `npm run dn.build` command outputs error like:\n\n> C:\\Program Files\\dotnet\\sdk\\8.0.100\\Sdks\\Microsoft.NET.Sdk\\targets\\Microsoft.PackageDependencyResolution.targe\n       ts(266,5): error NETSDK1005: Assets file 'C:\\(...)\\openapi-diff\\src\\core\\OpenApiDiff\\ob\n       j\\project.assets.json' doesn't have a target for 'netcoreapp6.0'. Ensure that restore has run and that you have\n       included 'netcoreapp6.0' in the TargetFrameworks for your project.\n\nThen first run `npm run dn.restore` and then run the `npm run dn.build` command again.\n\n## Run `oad` locally from sources\n\nAfter you have built the C# and TypeScript code, you can run the `openapi-diff` aka `oad` tool locally.\n\n1. Run [`npm link`] once.\n2. Then you can use `oad` by running `oad -h`.\n\n> [!CAUTION]\n> Following commands have different behavior: `oad`, `oad -h`, `oad --help`.\n> As of 11/2/2023 only `oad -h` appears to work as intended.\n\n## Reproduce specs PR CI failure of `Swagger BreakingChange` or `BreakingChange(Cross-Version)`\n\nIf `Swagger BreakingChange` or  `BreakingChange(Cross-Version)` checks fail on your `Azure/azure-rest-api-specs[-pr]` PR,\nyou can reproduce the failure locally as follows:\n\n- Open the GitHub check pane.\n- Click the hyperlinked `View Azure DevOps build log for more details.` Open the relevant job (`BreakingChange` or `CrossVersionBreakingChange`)\n  and a task within the job with the same name. Search for log `ENTER definition runOad`.\n  This log will show you the `oldSpec` and `newSpec` values, which you can pass as input to `oad` when running it locally,\n  per [Run `oad` locally from sources](#run-oad-locally-from-sources). \n  Note you will have to clone locally relevant git branches with the specs.\n\n## Install `oad` globally from sources or npm feed\n\nYou can also install the `oad` tool globally and run it from anywhere.\n\n```sh\nnpm list -g @azure/oad # verify oad is not installed globally\nnpm install -g # Install oad from local repo clone source\nnpm list -g @azure/oad # verify oad is installed \noad --version # verify correct version got installed.\noad -h\n```\n\n> [!CAUTION]  \n> Be careful to use `@azure/oad` and not `oad` as the latter is an obsolete, deprecated package.\n<!-- markdownlint-disable MD028 -->\n<!-- Disabling warning about empty line inside blockquote -->\n> [!TIP]\n> If you want to install `oad` not from your local sources, but the latest from the npm feed,\n> use this alternative `npm install`:  \n> `npm install -g @azure/oad`\n\n### Uninstall `oad` globally\n\nTo uninstall `oad` globally:\n\n``` sh\n# if installed from sources\nnpm uninstall -g \n# if installed from npm feed\nnpm uninstall -g @azure/oad\n```\n\n## Purge the obsolete `oad` package from your system\n\nTo purge the obsolete, deprecated `oad` package from your system, including [the cache].\n\n``` sh\n# To remove oad from the cache\nnpm cache ls oad \nnpm cache clean <copy paste here entries from \"ls oad\"> # run once per each entry from \"ls oad\"\nnpm cache verify # to fix the cache after removing oad\n\n# To remove oad from the local node_modules\nnpm uninstall oad\nnpm list oad # Should denote no packages installed\n\n# To remove oad from the global node_modules\nnpm uninstall -g oad\nnpm list -g oad # Should denote no packages installed\n```\n\n## Publish the package\n\n- Ensure you bumped the package version in [`openapi-diff`] `package.json`.\n- Queue a run of the [`openapi-diff` pipeline] and approve the `publish` stage. (Note: there is also the [`public.openapi-diff` pipeline] for CI checks.)\n- Verify in [`@azure/oad` versions] that the newest package version was published on npmjs.org. You can also run `npm show @azure/oad`.\n- Create a PR to [`azure-rest-api-specs`], updating all references to `@azure/oad` in `package[-lock].json`\n\n[`@azure/oad` versions]: https://www.npmjs.com/package/@azure/oad?activeTab=versions\n[`dotnet build`]: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-build\n[`dotnet restore`]: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-restore\n[`dotnet test`]: https://learn.microsoft.com/en-us/dotnet/core/tools/dotnet-test\n[`npm link`]: https://docs.npmjs.com/cli/v10/commands/npm-link\n[`openapi-diff` pipeline]: https://dev.azure.com/azure-sdk/internal/_build/index?definitionId=7030\n[`openapi-diff`]: https://github.com/Azure/openapi-diff\n[`public.openapi-diff` pipeline]: https://dev.azure.com/azure-sdk/public/_build?definitionId=135&_a=summary\n[the cache]: https://docs.npmjs.com/cli/v10/configuring-npm/folders#cache\n[`azure-rest-api-specs`]: https://github.com/Azure/azure-rest-api-specs\n"
  },
  {
    "path": "CredScanSuppressions.json",
    "content": "{\n  \"tool\": \"Credential Scanner\",\n  \"suppressions\": [\n    {\n     \"file\": \"node_modules\\\\superagent\\\\docs\\\\index.md\", \n      \"_justification\": \"Additional CredScan searcher specific to my team\"\n    },\n    {\n     \"file\": \"node_modules\\\\superagent\\\\docs\\\\test.html\", \n      \"_justification\": \"Legitimate UT certificate file with private key\"\n    }\n  ]\n}\n"
  },
  {
    "path": "LICENSE",
    "content": "    MIT License\r\n\r\n    Copyright (c) Microsoft Corporation. All rights reserved.\r\n\r\n    Permission is hereby granted, free of charge, to any person obtaining a copy\r\n    of this software and associated documentation files (the \"Software\"), to deal\r\n    in the Software without restriction, including without limitation the rights\r\n    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n    copies of the Software, and to permit persons to whom the Software is\r\n    furnished to do so, subject to the following conditions:\r\n\r\n    The above copyright notice and this permission notice shall be included in all\r\n    copies or substantial portions of the Software.\r\n\r\n    THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n    IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n    AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n    LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n    OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n    SOFTWARE\r\n"
  },
  {
    "path": "README.md",
    "content": "# About openapi-diff\r\n\r\n[![Build Status][build status]][build pipeline]\r\n\r\nThis repository contains source code of `openapi-diff` aka `oad` aka \"Breaking change detector tool\" npm package.\r\nThis package is invoked internally by the [azure-rest-api-specs] and [azure-rest-api-specs-pr] repos\r\n`Swagger Breaking Change` and `Breaking Change(Cross-Version)` GitHub checks, validating PRs submitted to them.\r\n\r\nFor description of the overall process of which `oad` is part of, see https://aka.ms/azsdk/specreview.\r\n\r\n[build status]: https://dev.azure.com/azure-sdk/public/_apis/build/status/public.openapi-diff?branchName=main\r\n[build pipeline]: https://dev.azure.com/azure-sdk/public/_build/latest?definitionId=135&branchName=main\r\n[azure-rest-api-specs]: https://github.com/Azure/azure-rest-api-specs\r\n[azure-rest-api-specs-pr]: https://github.com/Azure/azure-rest-api-specs-pr\r\n\r\n## npm package\r\n\r\n- [@azure/oad] ![npm package version shield](https://img.shields.io/npm/v/@azure/oad)\r\n- [package.json]\r\n\r\n> [!CAUTION]  \r\n> Do not use the package [oad] ![npm package version shield](https://img.shields.io/npm/v/oad). It is deprecated and obsolete.\r\n\r\n[@azure/oad]: https://www.npmjs.com/package/@azure/oad\r\n[package.json]: /package.json\r\n[oad]: https://www.npmjs.com/package/oad\r\n\r\n## How to run locally\r\n\r\nSee relevant section in [CONTRIBUTING.md](./CONTRIBUTING.md)\r\n\r\n"
  },
  {
    "path": "SECURITY.md",
    "content": "<!-- BEGIN MICROSOFT SECURITY.MD V0.0.8 BLOCK -->\n\n## Security\n\nMicrosoft 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/).\n\nIf 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.\n\n## Reporting Security Issues\n\n**Please do not report security vulnerabilities through public GitHub issues.**\n\nInstead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report).\n\nIf 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).\n\nYou 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). \n\nPlease 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:\n\n  * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)\n  * Full paths of source file(s) related to the manifestation of the issue\n  * The location of the affected source code (tag/branch/commit or direct URL)\n  * Any special configuration required to reproduce the issue\n  * Step-by-step instructions to reproduce the issue\n  * Proof-of-concept or exploit code (if possible)\n  * Impact of the issue, including how an attacker might exploit the issue\n\nThis information will help us triage your report more quickly.\n\nIf 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.\n\n## Preferred Languages\n\nWe prefer all communications to be in English.\n\n## Policy\n\nMicrosoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd).\n\n<!-- END MICROSOFT SECURITY.MD BLOCK -->\n"
  },
  {
    "path": "azure-pipelines.yml",
    "content": "trigger:\n- main\n\nresources:\n  repositories:\n  - repository: azure-sdk-tools\n    type: github\n    name: Azure/azure-sdk-tools    \n    endpoint: Azure\n    ref: refs/tags/azure-sdk-tools_20250709.1\n\nextends:\n  template: /eng/1es-redirect.yml\n  parameters:\n    stages:\n    - stage: Build_And_Test\n      variables:\n        - template: /eng/image.yml\n      jobs:\n        - job: Build_linux\n\n          pool:\n            name: $(LINUXPOOL)\n            image: $(LINUXVMIMAGE)\n            os: linux\n\n          steps:\n            - template: /eng/test-steps.yml\n              parameters:\n                ArtifactName: drop-linux\n\n        - job: Build_Windows\n\n          pool:\n            name: $(WINDOWSPOOL)\n            image: $(WINDOWSVMIMAGE)\n            os: windows\n\n          steps:\n            - template: /eng/test-steps.yml\n              parameters:\n                ArtifactName: drop\n\n\n    # only include if running on `internal` build with manual queue, otherwise never include\n    - ${{ if and(in(variables['Build.Reason'], 'Manual', ''), eq(variables['System.TeamProject'], 'internal'))}}:\n      - stage: Publish\n        dependsOn: Build_And_Test\n        jobs:\n        - template: /eng/common/pipelines/templates/jobs/npm-publish.yml@azure-sdk-tools\n          parameters:\n            ArtifactName: drop-linux\n"
  },
  {
    "path": "docs/README.md",
    "content": "## Rules\n\n[1000 - VersionsReversed](rules/1000.md)\n\n[1001 - NoVersionChange](rules/1001.md)\n\n[1002 - ProtocolNoLongerSupported](rules/1002.md)\n\n[1003 - RequestBodyFormatNoLongerSupported](rules/1003.md)\n\n[1004 - ResponseBodyFormatNowSupported](rules/1004.md)\n\n[1005 - RemovedPath](rules/1005.md)\n\n[1006 - RemovedDefinition](rules/1006.md)\n\n[1007 - RemovedClientParameter](rules/1007.md)\n\n[1008 - ModifiedOperationId](rules/1008.md)\n\n[1009 - RemovedRequiredParameter](rules/1009.md)\n\n[1010 - AddingRequiredParameter](rules/1010.md)\n\n[1011 - AddingResponseCode](rules/1011.md)\n\n[1012 - RemovedResponseCode](rules/1012.md)\n\n[1013 - AddingHeader](rules/1013.md)\n\n[1014 - RemovingHeader](rules/1014.md)\n\n[1015 - ParameterInHasChanged](rules/1015.md)\n\n[1016 - ConstantStatusHasChanged](rules/1016.md)\n\n[1017 - ReferenceRedirection](rules/1017.md)\n\n[1019 - RemovedEnumValue](rules/1019.md)\n\n[1020 - AddedEnumValue](rules/1020.md)\n\n[1021 - AddedAdditionalProperties](rules/1021.md)\n\n[1022 - RemovedAdditionalProperties](rules/1022.md)\n\n[1023 - TypeFormatChanged](rules/1023.md)\n\n[1024 - ConstraintIsStronger](rules/1024.md)\n\n[1025 - RequiredStatusChange](rules/1025.md)\n\n[1026 - TypeChanged](rules/1026.md)\n\n[1027 - DefaultValueChanged](rules/1027.md)\n\n[1028 - ArrayCollectionFormatChanged](rules/1028.md)\n\n[1029 - ReadonlyPropertyChanged](rules/1029.md)\n\n[1030 - DifferentDiscriminator](rules/1030.md)\n\n[1031 - DifferentExtends](rules/1031.md)\n\n[1032 - DifferentAllOf](rules/1032.md)\n\n[1033 - RemovedProperty](rules/1033.md)\n\n[1034 - AddedRequiredProperty](rules/1034.md)\n\n[1035 - RemovedOperation](rules/1035.md)\n\n[1036 - ConstraintChanged](rules/1036.md)\n\n[1037 - ConstraintIsWeaker](rules/1037.md)\n\n[1038 - AddedPath](rules/1038.md)\n\n[1039 - AddedOperation](rules/1039.md)\n\n[1040 - AddedReadOnlyPropertyInResponse](rules/1040.md)\n\n[1041 - AddedPropertyInResponse](rules/1041.md)\n\n[1042 - ChangedParameterOrder](rules/1042.md)\n\n[1043 - AddingOptionalParameter](rules/1043.md)\n\n[1044 - XmsLongRunningOperationChanged](rules/1044.md)\n\n[1045 - AddedOptionalProperty](rules/1045.md)\n\n[1046 - RemovedOptionalParameter](rules/1046.md)\n\n[1047 - XmsEnumChanged](rules/1047.md)\n\n[1048 - AddedXmsEnum](rules/1048.md)\n\n[1049 - RemovedXmsEnum](rules/1049.md)\n\n[1050 - ParameterLocationHasChanged](rules/1050.md)\n"
  },
  {
    "path": "docs/rules/1000.md",
    "content": "### 1000 - VersionsReversed\n\n**Description**: Checks whether [semantic version](http://semver.org/) is reversed from the previous specification. \n\n**Cause**: This is considered an unexpected change.\n\n**Example**: Version is changed from `2.0.0` to `1.0.0`.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2.0.0\",\n    ...\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"1.0.0\",\n    ...\n```\n"
  },
  {
    "path": "docs/rules/1001.md",
    "content": "### 1001 - NoVersionChange\n\n**Description**: Checks whether version is changed from the previous specification. \n\n**Cause**: This is considered an noteworthy change.\n\n**Example**: Version is changed from `2017-05-01` to `2017-07-01`.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2017-05-01\",\n    ...\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2017-07-01\",\n    ...\n```\n"
  },
  {
    "path": "docs/rules/1002.md",
    "content": "### 1002 - ProtocolNoLongerSupported\n\n**Description**: Checks whether any supported `scheme` is changed from the previous specification. \n\n**Cause**: This is considered a breaking change.\n\n**Example**: `http` scheme is no longer supported in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n  \"scheme\": [\n    \"http\",\n    \"https\"\n  ]\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n  \"scheme\": [\n    \"https\"\n  ]\n```\n"
  },
  {
    "path": "docs/rules/1003.md",
    "content": "### 1003 - RequestBodyFormatNoLongerSupported\n\n**Description**: Checks whether any supported `consumes` is changed from the previous specification. \n\n**Cause**: This is considered a breaking change.\n\n**Example**: `text/json` format for body is no longer supported in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n  \"scheme\": [\n    \"https\"\n  ],\n  \"consumes\":[\n    \"application/json\",\n    \"text/json\"\n  ]\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n  \"scheme\": [\n    \"https\"\n  ],\n  \"consumes\":[\n    \"application/json\"\n  ]\n```\n"
  },
  {
    "path": "docs/rules/1004.md",
    "content": "### 1004 - ResponseBodyFormatNowSupported\n\n**Description**: Checks whether any additional supported `produces` is now supported from the previous specification. \n\n**Cause**: This is considered a breaking change.\n\n**Example**: `text/json` format is now supported in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n  \"scheme\": [\n    \"https\"\n  ],\n  \"produces\":[\n    \"application/json\"\n  ]\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n  \"scheme\": [\n    \"https\"\n  ],\n  \"produces\":[\n    \"application/json\",\n    \"text/json\"\n  ]\n```\n"
  },
  {
    "path": "docs/rules/1005.md",
    "content": "### 1005 - RemovedPath\n\n**Description**: Checks whether an existing path is removed from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: Path `/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1` is being removed without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1\": {\n      \"get\": {\n        ...\n      },\n      \"delete\": {\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1006.md",
    "content": "### 1006 - RemovedDefinition\n\n**Description**: Checks whether an existing model definition is removed from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: Model definition `CreateParameters` is being removed without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property b.\"\n        },\n        \"c\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Property c.\"\n        }\n      },\n      \"required\": [\n        \"a\",\n        \"b\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property b.\"\n        }\n      },\n      \"required\": [\n        \"a\",\n        \"b\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1007.md",
    "content": "### 1007 - RemovedClientParameter\n\n**Description**: Checks whether any supported parameter from global `parameters` section is removed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Related rules**\n\n- [1050 - ParameterLocationHasChanged](1050.md)\n\n**Change Example**: Parameter `resourceGroupName` is removed in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n    \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupName\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group within the user's subscription. The name is case insensitive.\",\n      \"pattern\": \"^[-\\\\w\\\\._\\\\(\\\\)]+$\",\n      \"minLength\": 1,\n      \"maxLength\": 90,\n      \"x-ms-parameter-location\": \"method\"\n    }\n    ...\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    ...\n    \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    }\n    ...\n```\n"
  },
  {
    "path": "docs/rules/1008.md",
    "content": "### 1008 - ModifiedOperationId\n\n**Description**: Checks whether an existing operation's `operationId` is changed from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: `operationId` of Operation `get` from Path `/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1` is being updated without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"operationId\": \"GetResource1\",\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"operationId\": \"ListResource1\",\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...\n```\n"
  },
  {
    "path": "docs/rules/1009.md",
    "content": "### 1009 - RemovedRequiredParameter\n\n**Description**: Checks whether required parameter is removed / made optional from the previous specification. \n\n**Cause**: TBD.\n\n**Example**: Required parameter `c` is being removed without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ... \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...     \n```\n"
  },
  {
    "path": "docs/rules/1010.md",
    "content": "### 1010 - AddingRequiredParameter\n\n**Description**: Checks whether new required parameter is introduced from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: New required parameter `c` is introduced without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...     \n```\n"
  },
  {
    "path": "docs/rules/1011.md",
    "content": "### 1011 - AddingResponseCode\n\n**Description**: Checks whether any new response code is added from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Response code `204` is added to existing `delete` operation in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { ... },\n          \"204\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1012.md",
    "content": "### 1012 - RemovedResponseCode\n\n**Description**: Checks whether any existing response code is removed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Response code `204` is removed from existing `delete` operation in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { ... },\n          \"204\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1013.md",
    "content": "### 1013 - AddingHeader\n\n**Description**: Checks whether any new header is added from the previous specification.\n\n**Cause**: This is considered a change.\n\n**Example**: Response code `200` adds header `x-c` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { \n            ... \n            \"headers\": {\n              \"x-a\": { \"type\": \"string\" },\n              \"x-b\": { \"type\": \"integer\" }\n            }\n          },\n          \"204\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { \n            ... \n            \"headers\": {\n              \"x-a\": { \"type\": \"string\" },\n              \"x-b\": { \"type\": \"integer\" },\n              \"x-c\": { \"type\": \"integer\" }\n            }\n          },\n          \"204\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1014.md",
    "content": "### 1014 - RemovingHeader\n\n**Description**: Checks whether any existing header is removed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Response code `200` removed header `x-b` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { \n            ... \n            \"headers\": {\n              \"x-a\": { \"type\": \"string\" },\n              \"x-b\": { \"type\": \"integer\" }\n            }\n          },\n          \"204\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"delete\": {\n        ...\n        \"responses\": {\n          \"200\" : { \n            ... \n            \"headers\": {\n              \"x-a\": { \"type\": \"string\" }\n            }\n          },\n          \"204\" : { ... }\n        }\n        ...\n      }\n    }\n    ...\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1015.md",
    "content": "### 1015 - ParameterInHasChanged\n\n**Description**: Checks whether any parameter's `in` is changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Parameter `b` is changed from being `query` parameter to `body` parameter in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      }\n    }\n    ...\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1016.md",
    "content": "### 1016 - ConstantStatusHasChanged\n\n**Description**: Checks whether any parameter that used to accept only one value now accepts more from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Property `type` of parameter `Parameters` is required and enum with one value `Microsoft.Storage/storageAccounts` in old specification and new version accepts more values.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/Parameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Property name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property type.\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ],\n          \"required\": true\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/Parameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Property name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property type.\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\", \"Microsoft.Storage/customStorageAccounts\" ],\n          \"required\": true\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1017.md",
    "content": "### 1017 - ReferenceRedirection\n\n**Description**: Checks whether any '$ref' property points to different models from the previous specification.\nnote: if the model is flagged with 'x-ms-client-name', the 'x-ms-client-name' will override the reference name.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Schema of response `200` points to `NewParameters` in the new specification.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/Parameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Property name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property type.\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ],\n          \"required\": true\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/NewParameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Property name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property type.\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ],\n          \"required\": true\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    \"NewParameters\": {\n      \"properties\": {\n        ...\n      }\n    }\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1019.md",
    "content": "### 1019 - RemovedEnumValue\n\n**Description**: Checks whether an existing enum property has removed allowed values from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: Enum Property `b` is removing allowed values without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\", \"b3\", \"b4\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\", \"b4\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1020.md",
    "content": "### 1020 - AddedEnumValue\n\n**Description**: Checks whether an existing enum property has added more allowed values from the previous specification. \n\n**Cause**: This is considered a breaking change in the same api-version but not breaking in new api-version .\n\n**Example**: Enum Property `b` is adding more allowed values without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\", \"b3\", \"b4\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1021.md",
    "content": "### 1021 - AddedAdditionalProperties\n\n**Description**: Checks whether any property adds `additionalProperties` element from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Property `a` of Parameter `CreateParameters` adds `additionalProperties` element in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"object\",\n          \"description\": \"Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\", \"b3\", \"b4\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"object\",\n          \"description\": \"Property a.\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\", \"b3\", \"b4\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1022.md",
    "content": "### 1022 - RemovedAdditionalProperties\n\n**Description**: Checks whether any existing property removes `additionalProperties` element from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Property `a` of Parameter `CreateParameters` removes `additionalProperties` element in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"object\",\n          \"description\": \"Property a.\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          }\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\", \"b3\", \"b4\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"object\",\n          \"description\": \"Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\", \"b3\", \"b4\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1023.md",
    "content": "### 1023 - TypeFormatChanged\n\n**Description**: Checks whether any existing property's [format](https://github.com/OAI/OpenAPI-Specification/blob/main/versions/2.0.md#dataTypeFormat) element has changed from the previous specification.\n\n**Cause**: This is considered a breaking change in most cases except widening integer(\"int32\" -> \"int64\") in request and narrowing integer (\"int64\" -> \"int32\") in response which are not breaking change in new api-version.\n\n**Example**: Property `a` of Parameter `CreateParameters` changed format from `int64` to `int32` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"integer\",\n          \"description\": \"Property a.\",\n          \"format\": \"int64\"\n        },\n        ...\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"integer\",\n          \"description\": \"Property a.\",\n          \"format\": \"int32\"\n        },\n        ...\n```\n"
  },
  {
    "path": "docs/rules/1024.md",
    "content": "### 1024 - ConstraintIsStronger\n\n**Description**: Checks whether any constraining in requests like `maximum`, `minimum`, `minLength`, `maxLength` etc. has been stronger from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Value of `maxItems` element of parameter `a` is changed from `5000` to `4000` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/api/Responses\": {\n      \"get\": {\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"header\",\n            \"type\": \"array\",\n            \"minItems\": 11,\n            \"maxItems\": 5000,\n            \"collectionFormat\": \"pipes\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"minimum\": 11,\n              \"maximum\": 21,\n              \"multipleOf\": 4\n            }\n          },\n        ... \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/api/Responses\": {\n      \"get\": {\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"header\",\n            \"type\": \"array\",\n            \"minItems\": 11,\n            \"maxItems\": 4000,\n            \"collectionFormat\": \"pipes\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"minimum\": 11,\n              \"maximum\": 21,\n              \"multipleOf\": 4\n            }\n          },\n        ... \n```\n"
  },
  {
    "path": "docs/rules/1025.md",
    "content": "### 1025 - RequiredStatusChange\n\n**Description**: Checks whether an existing property's `required` status is changed from the previous specification. \n\n**Cause**: This is considered a breaking change in the same api-version but not breaking in new api-version . \n\n**Example**: `required` status for parameter `b` is changed from `false` to `true` without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...     \n```\n"
  },
  {
    "path": "docs/rules/1026.md",
    "content": "### 1026 - TypeChanged\n\n**Description**: Checks whether an existing property has changed the type from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: Property `b` is being changed from `string` to `boolean` without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property b.\"\n        }\n      },\n      \"required\": [\n        \"a\",\n        \"b\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"boolean\",\n          \"description\": \"Required. Property b.\"\n        }\n      },\n      \"required\": [\n        \"a\",\n        \"b\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1027.md",
    "content": "### 1027 - DefaultValueChanged\n\n**Description**: Checks whether any existing property's `default` element has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Default value of property `a` of Parameter `CreateParameters` changed from `Standard` to `Premium` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Property a.\",\n          \"default\": \"Standard\"\n        },\n        ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Property a.\",\n          \"default\": \"Premium\"\n        },\n        ... \n```\n"
  },
  {
    "path": "docs/rules/1028.md",
    "content": "### 1028 - ArrayCollectionFormatChanged\n\n**Description**: Checks whether array's `collectionFormat` has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Value of `collectionFormat` element of property `a` of Parameter `CreateParameters` changed from `pipes` to `csv` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"description\": \"Property a.\",\n          \"minItems\": 11,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"description\": \"Property a.\",\n          \"minItems\": 11,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        ... \n```\n"
  },
  {
    "path": "docs/rules/1029.md",
    "content": "### 1029 - ReadonlyPropertyChanged\n\n**Description**: Checks whether property's readonly has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: readonly of property `message` removed in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    \"CloudError\": {\n      \"description\": \"Error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": { \"error\": { \"$ref\": \"#/definitions/CloudErrorBody\" } },\n      \"x-ms-external\": true\n    },\n    \"CloudErrorBody\": {\n      \"description\": \"Body of an error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": { \"type\": \"string\" },\n        \"message\": { \"type\": \"string\" },\n        \"target\": { \"type\": \"string\" },\n        \"details\": {\n          \"description\": \"Inner errors.\",\n          \"type\": \"array\",\n          \"items\": { \"$ref\": \"#/definitions/CloudErrorBody\" }\n        }\n      }\n    },\n        ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n \"definitions\": {\n    \"CloudError\": {\n      \"description\": \"Error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": { \"error\": { \"$ref\": \"#/definitions/CloudErrorBody\" } },\n      \"x-ms-external\": true\n    },\n    \"CloudErrorBody\": {\n      \"description\": \"Body of an error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": { \"type\": \"string\" },\n        \"message\": { \"type\": \"string\", \"readOnly\":  true},\n        \"target\": { \"type\": \"string\" },\n        \"details\": {\n          \"description\": \"Inner errors.\",\n          \"type\": \"array\",\n          \"items\": { \"$ref\": \"#/definitions/CloudErrorBody\" }\n        }\n      }\n    },\n        ... \n```\n"
  },
  {
    "path": "docs/rules/1030.md",
    "content": "### 1030 - DifferentDiscriminator\n\n**Description**: Checks whether value of `discriminator` has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Value of `discriminator` element of Parameter `Pet` changed from `petType` to `name` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"Pet\": {\n      \"type\": \"object\",\n      \"discriminator\": \"petType\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"petType\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"petType\"\n      ]\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"Pet\": {\n      \"type\": \"object\",\n      \"discriminator\": \"name\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"petType\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"petType\"\n      ]\n    },\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1031.md",
    "content": "### 1031 - DifferentExtends\n\n**Description**: Checks whether any model's extend has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: \n\nOld specification\n```json5\n\n```\n\nNew specification\n```json5\n\n```\n"
  },
  {
    "path": "docs/rules/1032.md",
    "content": "### 1032 - DifferentAllOf\n\n**Description**: Checks whether any model's `allOf` has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Value of `allOf` element of Parameter `Cat` changed from `#definitions/Pet` to `#definitions/CustomPet` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"Pet\": {\n      \"type\": \"object\",\n      \"discriminator\": \"petType\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"petType\": {\n          \"type\": \"string\"\n        }\n        ...\n      }\n    },\n    \"Cat\": {\n      \"allOf\": [{\n        \"$ref\": \"#definitions/Pet\"\n      }],\n      ...\n    }\n    ...\n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"Pet\": {\n      \"type\": \"object\",\n      \"discriminator\": \"petType\",\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"petType\": {\n          \"type\": \"string\"\n        }\n        ...\n      }\n    },\n    \"Cat\": {\n      \"allOf\": [{\n        \"$ref\": \"#definitions/CustomPet\"\n      }],\n      ...\n    }\n    ...\n```\n"
  },
  {
    "path": "docs/rules/1033.md",
    "content": "### 1033 - RemovedProperty\n\n**Description**: Checks whether an existing property is removed from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: Property `c` is being removed without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property b.\"\n        },\n        \"c\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Property c.\"\n        }\n      },\n      \"required\": [\n        \"a\",\n        \"b\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property b.\"\n        }\n      },\n      \"required\": [\n        \"a\",\n        \"b\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1034.md",
    "content": "### 1034 - AddedRequiredProperty\n\n**Description**: Checks whether a new required property has added from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: Property `b` is being added without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        }\n      },\n      \"required\": [\n        \"a\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        }\n      },\n      \"required\": [\n        \"a\",\n        \"b\"\n      ],\n      \"description\": \"The parameters used when create operation.\"\n    },\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1035.md",
    "content": "### 1035 - RemovedOperation\n\n**Description**: Checks whether an existing operation from a path is removed from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: Operation `get` from Path `/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1` is being removed without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1\": {\n      \"get\": {\n        ...\n      },\n      \"delete\": {\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1\": {\n      \"post\": {\n        ...\n      },\n      \"delete\": {\n        ...\n      }\n    }\n    ...\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1036.md",
    "content": "### 1036 - ConstraintChanged\n\n**Description**: Checks whether any property's constraint like `maximum`, `minimum`, `minLength`, `maxLength` etc. has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Value of `maxItems` element of property `a` is changed from `5000` to `2000` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"description\": \"Property a.\",\n          \"minItems\": 11,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        ... \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    \"CreateParameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"description\": \"Property a.\",\n          \"minItems\": 11,\n          \"maxItems\": 2000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        ... \n```\n"
  },
  {
    "path": "docs/rules/1037.md",
    "content": "### 1037 - ConstraintIsWeaker\n\n**Description**: Checks whether any constraining in responses like `maximum`, `minimum`, `minLength`, `maxLength` etc. has been weaker from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Value of `maxItems` element of property `a` is changed from `4000` to `5000` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/api/Responses\": {\n      \"get\": {\n        ...\n          \"responses\": {\n            \"200\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"a\": {\n                    \"type\": \"array\",\n                    \"minItems\": 11,\n                    \"maxItems\": 4000,\n                    \"collectionFormat\": \"pipes\",\n                    \"items\": {\n                      \"type\": \"integer\",\n                      \"minimum\": 11,\n                      \"maximum\": 21,\n                      \"multipleOf\": 4\n                    }\n                  },\n        ... \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/api/Responses\": {\n      \"get\": {\n        ...\n          \"responses\": {\n            \"200\": {\n              \"schema\": {\n                \"type\": \"object\",\n                \"properties\": {\n                  \"a\": {\n                    \"type\": \"array\",\n                    \"minItems\": 12,\n                    \"maxItems\": 5000,\n                    \"collectionFormat\": \"pipes\",\n                    \"items\": {\n                      \"type\": \"integer\",\n                      \"minimum\": 11,\n                      \"maximum\": 21,\n                      \"multipleOf\": 4\n                    }\n                  },\n        ... \n```\n"
  },
  {
    "path": "docs/rules/1038.md",
    "content": "### 1038 - AddedPath\n\n**Description**: Checks whether a new path is added from the previous specification. \n\n**Cause**: This is considered a additive change in new api-version but a breaking in same api-version.\n\n**Example**: New path `/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1` is being added.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1\": {\n      \"get\": {\n        ...\n      },\n      \"delete\": {\n        ...\n      }\n    }\n    ...\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1039.md",
    "content": "### 1039 - AddedOperation\n\n**Description**: Checks whether a new operation in an existing path is added from the previous specification. \n\n**Cause**: This is considered a additive change in new api-version but a breaking in same api-version.\n\n**Example**: Operation `get` in Path `/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1` is being added without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1\": {\n      \"post\": {\n        ...\n      },\n      \"delete\": {\n        ...\n      }\n    }\n    ...\n    ... \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/subResource1\": {\n      \"get\": {\n        ...\n      },\n      \"post\": {\n        ...\n      },\n      \"delete\": {\n        ...\n      }\n    }\n    ...\n    ... \n```\n"
  },
  {
    "path": "docs/rules/1040.md",
    "content": "### 1040 - AddedReadOnlyPropertyInResponse\n\n**Description**: Checks whether a `readOnly` property is added to the response model from the previous specification. \n\n**Cause**: This is considered a change.\n\n**Example**: Property `c` is being added into model `Parameters` from response direction.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/Parameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/Parameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        },\n        \"c\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"Read Only. Property c.\"\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1041.md",
    "content": "### 1041 - AddedPropertyInResponse\n\n**Description**: Checks whether a property is added to the response model from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Property `c` is being added into model `Parameters` from response direction.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/Parameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths:\" {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1\": {\n      \"get\": {\n        ...\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"$ref\": \"#/definitions/Parameters\"\n            }\n          }\n        }\n      }\n  }\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        },\n        \"c\": {\n          \"type\": \"string\",\n          \"description\": \"Property c.\"\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```\n"
  },
  {
    "path": "docs/rules/1042.md",
    "content": "### 1042 - ChangedParameterOrder\n\n**Description**: Check whether operation parameter order is changed. If operation parameter order changed, it causes SDK breaking change.\n\n**Cause**: This is considered a breaking change.\n\n**Related rules**\n\n- [1050 - ParameterLocationHasChanged](1050.md)\n\n**Example**: Parameter order change from `a, b, e` to `a, e, b`.\n\nOld specification\n\n```json5\n\"parameters\": [\n{\n    \"name\": \"a\",\n    \"in\": \"body\",\n    \"required\": true,\n    \"type\": \"string\"\n},\n{\n    \"name\": \"b\",\n    \"in\": \"body\",\n    \"required\": true,\n    \"type\": \"string\"\n},\n{\n    \"name\": \"e\",\n    \"in\": \"body\",\n    \"type\": \"string\"\n},\n]\n```\n\nNew specification\n\n```json5\n\"parameters\": [\n{\n    \"name\": \"a\",\n    \"in\": \"body\",\n    \"required\": true,\n    \"type\": \"string\"\n},\n{\n    \"name\": \"e\",\n    \"in\": \"body\",\n    \"type\": \"string\"\n},\n{\n    \"name\": \"b\",\n    \"in\": \"body\",\n    \"required\": true,\n    \"type\": \"string\"\n},\n]\n```\n"
  },
  {
    "path": "docs/rules/1043.md",
    "content": "### 1043 - AddingOptionalParameter\n\n**Description**: Checks whether new optional parameter is introduced from the previous specification. \n\n**Cause**: This is considered a breaking change. This change requires new api-version.\n\n**Example**: New optional parameter `c` is introduced without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...     \n```\n"
  },
  {
    "path": "docs/rules/1044.md",
    "content": "### 1044 - XmsLongRunningOperationChanged\n\n**Description**: Checks whether any operation's 'x-ms-long-running-operation' has changed from the previous specification.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: The `x-ms-long-running-operation` is changed from `false` to `true` in the new version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    ...\n    \"put\": {\n      \"x-ms-long-running-operation\": false,\n        ... \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    ...\n    \"put\": {\n      \"x-ms-long-running-operation\": true,\n        ... \n```\n"
  },
  {
    "path": "docs/rules/1045.md",
    "content": "### 1045 - AddedOptionalProperty\n\n**Description**: Checks whether a property is added to the model from the previous specification. The model includes all the models that referenced by any request or response.\n\n**Cause**: This is considered a breaking change.\n\n**Example**: Property `c` is being added into model `Parameters` .\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"definitions\": {\n    ...\n    ...\n    \"Parameters\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Property a.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Enum Property b.\",\n          \"enum\": [ \"b1\", \"b2\" ]\n        },\n        \"c\": {\n          \"type\": \"string\",\n          \"description\": \"Property c.\"\n        }\n      },\n      \"description\": \"The parameters used when get operation.\"\n    },\n    ...  \n```"
  },
  {
    "path": "docs/rules/1046.md",
    "content": "### 1046 - RemovedOptionalParameter\n\n**Description**: Checks whether optional parameter is removed / made required from the previous specification.\n\n**Cause**: This is considered a breaking change. \n\n**Example**: Optional parameter `c` is being removed without revising api-version.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ... \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"subscriptionId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      },\n      \"put\": {\n        ...\n      }\n    }\n    ...\n    ...     \n```\n"
  },
  {
    "path": "docs/rules/1047.md",
    "content": "### 1047 - XmsEnumChanged\n\n**Description**: Checks whether the x-ms-enum 'name' or 'modelAsString' is changed.\n\n**Cause**: This is considered a breaking change. \n\n**Example**: \n1. x-ms-enum modelAsString is changed from 'false' to 'true'.\n\nOld specification\n```json5\n{\n  \"type\": \"string\",\n  \"description\": \"Required. Indicates the type of account.\",\n  \"enum\": [\n    \"Storage\",\n    \"BlobStorage\"\n  ],\n  \"x-ms-enum\": {\n    \"name\": \"Kind\",\n    \"modelAsString\": false\n  }\n}\n```\n\nNew specification\n```json5\n{\n  \"type\": \"string\",\n  \"description\": \"Required. Indicates the type of account.\",\n  \"enum\": [\n    \"Storage\",\n    \"BlobStorage\"\n  ],\n  \"x-ms-enum\": {\n    \"name\": \"Kind\",\n    \"modelAsString\": true\n  }\n} \n```\n"
  },
  {
    "path": "docs/rules/1048.md",
    "content": "### 1048 - AddedXmsEnum\n\n**Description**: Checks whether the x-ms-enum is added.\n\n**Cause**: This is considered a breaking change. \n\n**Example**: \n1. x-ms-enum is added in the new specification.\n\nOld specification\n```json5\n{\n  \"type\": \"string\",\n  \"description\": \"Required. Indicates the type of account.\",\n  \"enum\": [\n    \"Storage\",\n    \"BlobStorage\"\n  ],\n}\n```\n\nNew specification\n```json5\n{\n  \"type\": \"string\",\n  \"description\": \"Required. Indicates the type of account.\",\n  \"enum\": [\n    \"Storage\",\n    \"BlobStorage\"\n  ],\n  \"x-ms-enum\": {\n    \"name\": \"Kind\",\n    \"modelAsString\": true\n  }\n} \n```\n"
  },
  {
    "path": "docs/rules/1049.md",
    "content": "### 1049 - RemovedXmsEnum\n\n**Description**: Checks whether the x-ms-enum is removed.\n\n**Cause**: This is considered a breaking change. \n\n**Example**: \n1. x-ms-enum is removed in the new specification.\n\nOld specification\n```json5\n{\n  \"type\": \"string\",\n  \"description\": \"Required. Indicates the type of account.\",\n  \"enum\": [\n    \"Storage\",\n    \"BlobStorage\"\n  ],\n  \"x-ms-enum\": {\n    \"name\": \"Kind\",\n    \"modelAsString\": true\n  }\n}\n```\n\nNew specification\n```json5\n{\n  \"type\": \"string\",\n  \"description\": \"Required. Indicates the type of account.\",\n  \"enum\": [\n    \"Storage\",\n    \"BlobStorage\"\n  ],\n} \n```\n"
  },
  {
    "path": "docs/rules/1050.md",
    "content": "### 1050 - ParameterLocationHasChanged\n\n**Description**: Checks whether any parameter's location ([`x-ms-parameter-location`]) is changed from the previous specification.\nThis is AutoRest-specific rule. Per the example provided in [specifying required parameters and properties],\nand per the documentation of [`x-ms-parameter-location`]:\n\n- non-global parameters have implicitly `method` location and this cannot be changed.\n- global parameters have implicitly `client` location and this can be changed to `method` via [`x-ms-parameter-location`].\n\n**Cause**: Changing parameter location from `client` to `method` or vice-versa is considered a breaking change.\n\n**Related rules**\n\n- [1007 - RemovedClientParameter](1007.md)\n- [1042 - ChangedParameterOrder](1042.md)\n\n**Example**: Parameter `foo` is changed from being non-global parameter to global parameter in the new version,\nhence changing its location from `method` to `client`.\n\nOld specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"name\": \"foo\",\n            \"in\": \"path\",\n            \"type\": \"string\"\n          }\n        ]\n        ...\n        ...\n      }\n    }\n    ...\n    ...  \n```\n\nNew specification\n```json5\n{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"swagger\",\n    \"description\": \"The Azure Management API.\",\n    \"version\": \"2016-12-01\",\n    ...\n    ...\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Contoso/resource1/{a}\": {\n      \"get\": {\n        ...\n        ...\n        \"parameters\": [\n          {\n            \"ref\": \"#/parameters/foo\"\n          }\n        ]\n        ...\n        ...\n      }\n    }\n    ...\n    ...\n  \"parameters\": {\n    \"foo\": {\n      \"name\": \"foo\",\n      \"in\": \"path\",\n      \"type\": \"string\"\n    }\n  }\n```\n\n[`x-ms-parameter-location`]: https://github.com/Azure/autorest/blob/765bc784b0cad173d47f931a04724936a6948b4c/docs/extensions/readme.md#x-ms-parameter-location\n[specifying required parameters and properties]: https://github.com/Azure/autorest/blob/765bc784b0cad173d47f931a04724936a6948b4c/docs/generate/how-autorest-generates-code-from-openapi.md#specifying-required-parameters-and-properties\n"
  },
  {
    "path": "eng/1es-redirect.yml",
    "content": "resources:\n  repositories:\n    - repository: 1ESPipelineTemplates\n      type: git\n      name: 1ESPipelineTemplates/1ESPipelineTemplates\n      ref: refs/tags/release\n    - repository: 1ESPipelineTemplatesCanary\n      type: git\n      name: 1ESPipelineTemplates/1ESPipelineTemplates\n      ref: refs/tags/canary\n\nparameters:\n  - name: stages\n    type: stageList\n    default: []\n  - name: Use1ESOfficial\n    type: boolean\n    default: true\n  - name: oneESTemplateTag\n    type: string\n    default: release\n\nextends:\n  ${{ if and(parameters.Use1ESOfficial, eq(parameters.oneESTemplateTag, 'canary')) }}:\n    template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplatesCanary\n  ${{ elseif eq(parameters.oneESTemplateTag, 'canary') }}:\n    template: v1/1ES.Unofficial.PipelineTemplate.yml@1ESPipelineTemplatesCanary\n  ${{ elseif and(parameters.Use1ESOfficial, eq(variables['System.TeamProject'], 'internal')) }}:\n    template: v1/1ES.Official.PipelineTemplate.yml@1ESPipelineTemplates\n  ${{ else }}:\n    template: v1/1ES.Unofficial.PipelineTemplate.yml@1ESPipelineTemplates\n  parameters:\n    ${{ if eq(parameters.oneESTemplateTag, 'canary') }}:\n      # Enable 1es template team to verify validation has been run on canary\n      customBuildTags:\n        - 1ES.PT.Tag-refs/tags/canary\n    settings:\n      skipBuildTagsForGitHubPullRequests: true\n    sdl:\n      git:\n        longpaths: true\n        submodules: false\n      sourceRepositoriesToScan:\n        include:\n          - repository: self\n            submodule: false\n        runInSingleJob: true\n      sourceAnalysisPool:\n        name: azsdk-pool\n        image: windows-2022\n        os: windows\n      eslint:\n        enabled: false\n        justificationForDisabling: \"ESLint injected task has failures because it uses an old version of mkdirp. We should not fail for tools not controlled by the repo. See: https://dev.azure.com/azur     19 e-sdk/internal/_build/results?buildId=3556850\"\n      codeql:\n        compiled:\n          enabled: false\n          justificationForDisabling: \"CodeQL times our pipelines out by running for 2+ hours before being force canceled.\"\n      psscriptanalyzer:\n        compiled: true\n        break: true\n      policy: M365\n\n    stages: ${{ parameters.stages }}\n"
  },
  {
    "path": "eng/image.yml",
    "content": "# Default pool image selection. Set as variable so we can override at pipeline level\n\nvariables:\n  - name: LINUXPOOL\n    value: azsdk-pool\n  - name: WINDOWSPOOL\n    value: azsdk-pool\n  - name: MACPOOL\n    value: Azure Pipelines\n\n  - name: LINUXVMIMAGE\n    value: ubuntu-24.04\n  - name: LINUXNEXTVMIMAGE\n    value: ubuntu-24.04\n  - name: WINDOWSVMIMAGE\n    value: windows-2022\n  - name: MACVMIMAGE\n    value: macos-11\n\n  # Values required for pool.os field in 1es pipeline templates\n  - name: LINUXOS\n    value: linux\n  - name: WINDOWSOS\n    value: windows\n  - name: MACOS\n    value: macOS\n"
  },
  {
    "path": "eng/publish-1es-artifact.yml",
    "content": "# This step is used to prevent duplication of artifact publishes when there is an issue that would prevent the overall success of the job.\n# Ensuring that we only publish when successful (and two a differently named artifact otherwise) will allow easy retry on a build pipeline\n# without running into the \"cannot override artifact\" failure when we finally do get a passing run.\n\n# ArtifactName - The name of the artifact in the \"successful\" case.\n# ArtifactPath - The path we will be publishing.\n# CustomCondition - Used if there is additional logic necessary to prevent attempt of publish.\n# SbomEnabled - Set whether to auto-inject 1es pipeline template sbom tasks\n\nparameters:\n  ArtifactName: \"\"\n  ArtifactPath: \"\"\n  CustomCondition: true\n  SbomEnabled: true\n\nsteps:\n  - pwsh: |\n      if ($env:AGENT_JOBSTATUS -eq \"Failed\") {\n        Write-Host \"##vso[task.setvariable variable=PublishArtifactName;]${{ parameters.ArtifactName }}-FailedAttempt$(System.JobAttempt)\"\n      } else {\n        Write-Host \"##vso[task.setvariable variable=PublishArtifactName;]${{ parameters.ArtifactName }}\"\n      }\n    condition: and(succeededOrFailed(), ${{ parameters.CustomCondition }})\n    displayName: Set Artifact Name $(Agent.JobStatus)\n\n  - task: 1ES.PublishPipelineArtifact@1\n    condition: and(succeededOrFailed(), ${{ parameters.CustomCondition }})\n    displayName: \"Publish ${{ parameters.ArtifactName }} Artifacts\"\n    inputs:\n      artifactName: \"$(PublishArtifactName)\"\n      targetPath: \"${{ parameters.ArtifactPath }}\"\n      sbomEnabled: ${{ parameters.SbomEnabled }}\n"
  },
  {
    "path": "eng/test-steps.yml",
    "content": "parameters:\n  - name: ArtifactName\n    type: string\n    default: \"drop\"\n\nsteps:\n  - task: UseDotNet@2\n    inputs:\n      version: 6.x\n  - script: npm ci\n    displayName: npm ci\n  - script: npm run lint\n    displayName: lint\n  - script: npm run prettier\n    displayName: prettier\n  - script: npm test\n    displayName: test\n  - script: npm pack\n    displayName: pack\n  - task: CopyFiles@2\n    displayName: \"Copy Files to Staging\"\n    inputs:\n      Contents: \"*.tgz\"\n      TargetFolder: $(Build.ArtifactStagingDirectory)\n\n  - template: /eng/publish-1es-artifact.yml\n    parameters:\n      ArtifactName: ${{ parameters.ArtifactName }}\n      ArtifactPath: $(Build.ArtifactStagingDirectory)\n"
  },
  {
    "path": "eslint.config.js",
    "content": "// @ts-check\n\n// This file contents based on:\n// https://typescript-eslint.io/getting-started#step-2-configuration\n// https://typescript-eslint.io/getting-started/typed-linting\n\n// This file must be in CommonJS format ('require()') instead of ESModules ('import') due to how it is consumed\n// by openapi-alps:\n// https://github.com/Azure/openapi-diff/pull/335/files#r1649413983\n\nconst eslint = require(\"@eslint/js\")\nconst tseslint = require(\"typescript-eslint\")\n\nmodule.exports = tseslint.config(\n  eslint.configs.recommended,\n  ...tseslint.configs.recommendedTypeChecked,\n  {\n    languageOptions: {\n      parserOptions: {\n        project: true,\n        // Note: __dirname is coming CommonJS:\n        // https://stackoverflow.com/questions/46745014/alternative-for-dirname-in-node-js-when-using-es6-modules\n        // as linked from: https://typescript-eslint.io/getting-started/typed-linting\n        tsconfigRootDir: __dirname\n      }\n    }\n  },\n  {\n    // Based on https://eslint.org/docs/latest/use/configure/configuration-files#globally-ignoring-files-with-ignores\n    ignores: [\"**/dist\", \"eslint.config.js\", \"coverage/**\"]\n  },\n  {\n    rules: {\n      // Rules disabled as part of migration from tslint\n      // https://github.com/Azure/openapi-diff/pull/335\n      \"@typescript-eslint/no-explicit-any\": \"off\",\n      \"@typescript-eslint/no-unnecessary-type-assertion\": \"off\",\n      \"@typescript-eslint/no-unsafe-argument\": \"off\",\n      \"@typescript-eslint/no-unsafe-assignment\": \"off\",\n      \"@typescript-eslint/no-unsafe-call\": \"off\",\n      \"@typescript-eslint/no-unsafe-member-access\": \"off\",\n      \"@typescript-eslint/no-unsafe-return\": \"off\",\n      \"@typescript-eslint/no-unused-vars\": \"off\",\n      \"@typescript-eslint/no-var-requires\": \"off\",\n      \"@typescript-eslint/restrict-template-expressions\": \"off\",\n      \"no-constant-condition\": \"off\",\n      \"no-useless-escape\": \"off\",\n      \"prefer-const\": \"off\",\n      // New v10 recommended rule requiring \"{ cause }\" on re-thrown errors.  Disabled because\n      // this project targets ES2017, and TypeScript lacks the ErrorOptions type at that target level.\n      \"preserve-caught-error\": \"off\"\n    }\n  }\n)\n"
  },
  {
    "path": "openapi-diff/OpenApiDiff.sln",
    "content": "Microsoft Visual Studio Solution File, Format Version 12.00\r\n# Visual Studio 15\r\nVisualStudioVersion = 15.0.26217.2\r\nMinimumVisualStudioVersion = 10.0.40219.1\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"OpenApiDiff\", \"src\\core\\OpenApiDiff\\OpenApiDiff.csproj\", \"{BE85FEB6-C008-4202-8799-CFA9D292D0B6}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"OpenApiDiff.Core\", \"src\\core\\OpenApiDiff.Core\\OpenApiDiff.Core.csproj\", \"{79280E61-2D1D-4864-90A2-7B675F82E9D8}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Core\", \"Core\", \"{F7D005C7-81E6-4840-BCDE-228210FB9204}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Modeler\", \"Modeler\", \"{86C8F97A-F0EC-4100-9596-9DE6A6578CB5}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"AutoRest.Swagger\", \"src\\modeler\\AutoRest.Swagger\\AutoRest.Swagger.csproj\", \"{73049F5C-8984-4182-B915-DF0DAA17837B}\"\r\nEndProject\r\nProject(\"{9A19103F-16F7-4668-BE54-9A1E7A4F7556}\") = \"AutoRest.Swagger.Tests\", \"src\\modeler\\AutoRest.Swagger.Tests\\AutoRest.Swagger.Tests.csproj\", \"{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}\"\r\nEndProject\r\nProject(\"{2150E333-8FDC-42A3-9474-1A3956D46DE8}\") = \"Solution Items\", \"Solution Items\", \"{3DE3DEDB-6C3B-45DE-A8CC-26A9F0F8AC78}\"\r\n\tProjectSection(SolutionItems) = preProject\r\n\t\t.travis.yml = .travis.yml\r\n\tEndProjectSection\r\nEndProject\r\nGlobal\r\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\r\n\t\tDebug|Any CPU = Debug|Any CPU\r\n\t\tDebug|x64 = Debug|x64\r\n\t\tDebug|x86 = Debug|x86\r\n\t\tRelease|Any CPU = Release|Any CPU\r\n\t\tRelease|x64 = Release|x64\r\n\t\tRelease|x86 = Release|x86\r\n\tEndGlobalSection\r\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B}.Release|x86.Build.0 = Release|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Debug|Any CPU.Build.0 = Debug|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Debug|x64.ActiveCfg = Debug|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Debug|x64.Build.0 = Debug|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Debug|x86.ActiveCfg = Debug|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Debug|x86.Build.0 = Debug|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Release|Any CPU.ActiveCfg = Release|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Release|Any CPU.Build.0 = Release|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Release|x64.ActiveCfg = Release|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Release|x64.Build.0 = Release|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Release|x86.ActiveCfg = Release|Any CPU\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2}.Release|x86.Build.0 = Release|Any CPU\r\n\tEndGlobalSection\r\n\tGlobalSection(SolutionProperties) = preSolution\r\n\t\tHideSolutionNode = FALSE\r\n\tEndGlobalSection\r\n\tGlobalSection(NestedProjects) = preSolution\r\n\t\t{BE85FEB6-C008-4202-8799-CFA9D292D0B6} = {F7D005C7-81E6-4840-BCDE-228210FB9204}\r\n\t\t{79280E61-2D1D-4864-90A2-7B675F82E9D8} = {F7D005C7-81E6-4840-BCDE-228210FB9204}\r\n\t\t{73049F5C-8984-4182-B915-DF0DAA17837B} = {86C8F97A-F0EC-4100-9596-9DE6A6578CB5}\r\n\t\t{0BE0CF3E-CA8A-43C4-BAF0-53E2454C06E2} = {86C8F97A-F0EC-4100-9596-9DE6A6578CB5}\r\n\tEndGlobalSection\r\nEndGlobal\r\n"
  },
  {
    "path": "openapi-diff/src/common/common-package-references.proj",
    "content": "<Project ToolsVersion=\"15.0\">\n\n\n  <ItemGroup>\n    <!-- <PackageReference Include=\"NETStandard.Library\" Version=\"1.6.1\" /> -->\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "openapi-diff/src/common/common.proj",
    "content": "<Project ToolsVersion=\"15.0\">\n  <PropertyGroup Condition=\"$(Common) == '*Undefined*' OR $(Common) == '' \" >\n    <VersionPrefix>1.0.1</VersionPrefix>\n    <Common>$(MsBuildThisFileDirectory)</Common>\n    <GenerateFullPaths>true</GenerateFullPaths>\n    <!-- <SolutionDir>$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory),AutoRest.sln))/</SolutionDir> -->\n    <Common>$(MsBuildThisFileDirectory)</Common>\n    <SolutionDir>$(Common)../../</SolutionDir>\n  </PropertyGroup>\n\n  <Target Name=\"Nuke\" AfterTargets=\"clean\" >\n    <Delete Files=\"$(BaseOutputPath)**;$(BaseIntermediateOutputPath)razor/**;$(BaseIntermediateOutputPath)Debug/**;$(BaseIntermediateOutputPath)Release/**\" />\n    <RemoveDir Directories=\"$(BaseOutputPath);$(BaseIntermediateOutputPath)/Debug;$(BaseIntermediateOutputPath)/Release\" />\n  </Target>\n</Project>"
  },
  {
    "path": "openapi-diff/src/common/copy-resource-to-output.proj",
    "content": "<Project ToolsVersion=\"15.0\">\n  <ItemGroup>\n    <Content Include=\"$(MSBuildProjectDirectory)\\Resource\\**\">\n      <CopyToOutputDirectory>Always</CopyToOutputDirectory>\n    </Content>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "openapi-diff/src/common/enumerate-inputs.proj",
    "content": "<Project ToolsVersion=\"4.0\"  >\n\n</Project>  "
  },
  {
    "path": "openapi-diff/src/common/package-info.proj",
    "content": "<Project ToolsVersion=\"15.0\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Copyright>Copyright (c) Microsoft Corporation</Copyright>\n\n    <PackageIconUrl>http://go.microsoft.com/fwlink/?LinkID=288890</PackageIconUrl>\n    <PackageProjectUrl>https://github.com/Azure/AutoRest</PackageProjectUrl>\n    <PackageLicenseUrl>https://raw.githubusercontent.com/Microsoft/dotnet/master/LICENSE</PackageLicenseUrl>\n    <PackageRequireLicenseAcceptance>true</PackageRequireLicenseAcceptance>\n    \n    <DelaySign Condition=\"$(Configuration) == 'Release'\">true</DelaySign>\n    <AssemblyOriginatorKeyFile Condition=\"$(Configuration) == 'Release'\">$(SolutionDir)/tools/MSSharedLibKey.snk</AssemblyOriginatorKeyFile>\n    <SignAssembly Condition=\"$(Configuration) == 'Release'\">true</SignAssembly>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "openapi-diff/src/common/project-library.proj",
    "content": "<Project ToolsVersion=\"15.0\">\n  <PropertyGroup>\n    <TargetFramework>netstandard2.0</TargetFramework>\n  </PropertyGroup>\n</Project>"
  },
  {
    "path": "openapi-diff/src/common/project-xunittest.proj",
    "content": "<Project ToolsVersion=\"15.0\">\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.Extensions.DependencyModel\" Version=\"1.1.2\" />\n    <PackageReference Include=\"Microsoft.NET.Test.Sdk\" Version=\"15.3.0\" />\n    <PackageReference Include=\"xunit.runner.visualstudio\" Version=\"2.3.0\" />\n    <PackageReference Include=\"xunit\" Version=\"2.3.0\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff/HelpExample.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace OpenApiDiff\n{\n    /// <summary>\n    /// Structure that represents an example in generated help.\n    /// </summary>\n    public struct HelpExample\n    {\n        /// <summary>\n        /// Gets or sets example plain text description.\n        /// </summary>\n        public string Description { get; set; }\n\n        /// <summary>\n        /// Gets or sets example code.\n        /// </summary>\n        public string Example { get; set; }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff/HelpGenerator.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing OpenApiDiff.Core;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Reflection;\nusing System.Text;\nusing System.Text.RegularExpressions;\n\nnamespace OpenApiDiff\n{\n    /// <summary>\n    /// Helper class for dynamically generating CLI help from Settings.\n    /// </summary>\n    public static class HelpGenerator\n    {\n        private static readonly List<HelpExample> Examples = new List<HelpExample>\n        {\n            new HelpExample\n            {\n                Description = \"Compare old-swagger.json and new-swagger.json for breaking changes.\",\n                Example = \"dotnet OpenApiDiff.dll -old old-swagger.json -new new-swagger.json\"\n            },\n            new HelpExample\n            {\n                Description = \"Compare old-swagger.json and new-swagger.json for breaking changes with JSON output\",\n                Example = \"dotnet OpenApiDiff.dll -old old-swagger.json -new new-swagger.json -JsonValidationMessages\"\n            }\n        };\n\n\n        /// <summary>\n        /// Generates help string based on the passed in template.\n        /// <para>\n        /// The following keywords are supported:\n        ///   $version$ - version of AutoRest Core\n        ///   $syntax$ - replaced with the usage syntax\n        ///   $parameters-start$...$parameters-end$ - contains a template for a parameters\n        ///   $parameter$ - parameter name  \n        ///   $parameter-desc$ - parameter documentation\n        ///   $examples-start$...$examples-end$ - contains a template for an example\n        ///   $example-desc$ - example description\n        ///   $example$ - example code\n        /// </para>\n        /// </summary>\n        /// <example>\n        ///    Copyright (C) Microsoft Corporation. All rights reserved.\n        ///    \n        ///    Syntax         : $syntax$\n        ///    \n        ///    Parameters     :\n        ///    $parameters-start$\n        ///    -$parameter$ : $parameter-desc$\n        ///    $parameters-end$\n        ///    \n        ///    Examples       :\n        ///    \n        ///    $examples-start$\n        ///    $example-desc$\n        ///    >$example$\n        ///    $examples-end$\n        /// </example>\n        /// <param name=\"template\">Template to use.</param>\n        /// <param name=\"settings\">Settings to use.</param>\n        /// <returns>Generated help.</returns>\n        public static string Generate(string template, Settings settings)\n        {\n            if (String.IsNullOrEmpty(template))\n            {\n                throw new ArgumentNullException(\"template\");\n            }\n\n            // Reflect over properties in Settings to get documentation content\n            var parameters = new List<Tuple<string, SettingsInfoAttribute>>();\n            foreach (PropertyInfo property in typeof(Settings).GetProperties())\n            {\n                var doc = property.GetCustomAttributes<SettingsInfoAttribute>().FirstOrDefault();\n\n                if (doc != null)\n                {\n                    parameters.Add(new Tuple<string, SettingsInfoAttribute>(property.Name, doc));\n                }\n            }\n\n            // Generate usage syntax\n            var syntaxSection = new StringBuilder(\"dotnet OpenApiDiff.dll \");\n            foreach (var parameter in parameters.OrderBy(t => t.Item1).OrderByDescending(t => t.Item2.IsRequired))\n            {\n                if (parameter.Item2.IsRequired)\n                {\n                    syntaxSection.AppendFormat(\"-{0} <value> \", parameter.Item1);\n                }\n                else\n                {\n                    syntaxSection.AppendFormat(\"[-{0} <value>] \", parameter.Item1);\n                }\n            }\n\n            // Generate parameters section\n            var parametersSection = new StringBuilder();\n            const string parametersPattern = @\"\\$parameters-start\\$(.+)\\$parameters-end\\$\";\n            var parameterTemplate = Regex.Match(template, parametersPattern, RegexOptions.Singleline).Groups[1].Value.Trim();\n\n            GetParametersInfo(typeof(Settings).GetProperties().OrderBy(p => p.Name), parametersSection, parameterTemplate,\n                              \"$parameter$\", \"$parameter-desc$\");\n\n            // Generate examples section.\n            var examplesSection = new StringBuilder();\n            const string examplesPattern = @\"\\$examples-start\\$(.+)\\$examples-end\\$\";\n            var exampleTemplate = Regex.Match(template, examplesPattern, RegexOptions.Singleline).Groups[1].Value.Trim() + Environment.NewLine;\n            foreach (HelpExample example in Examples)\n            {\n                examplesSection.AppendLine(\"  \" + exampleTemplate.\n                    Replace(\"$example$\", example.Example).\n                    Replace(\"$example-desc$\", example.Description));\n            }\n\n            // Process template replacing all major sections.\n            template = template.\n                Replace(\"$version$\", \"0.1.0\").\n                Replace(\"$syntax$\", syntaxSection.ToString());\n\n            template = Regex.Replace(template, parametersPattern, parametersSection.ToString(), RegexOptions.Singleline);\n            template = Regex.Replace(template, examplesPattern, examplesSection.ToString(), RegexOptions.Singleline);\n\n            return template;\n        }\n\n        private static void GetParametersInfo(IEnumerable<PropertyInfo> props, StringBuilder templateSection,\n                                              string template, string propNameAnchor, string docAnchor)\n        {\n            foreach (PropertyInfo property in props)\n            {\n                SettingsInfoAttribute doc = (SettingsInfoAttribute)property.GetCustomAttributes(\n                    typeof(SettingsInfoAttribute)).FirstOrDefault();\n\n                if (doc != null)\n                {\n                    string documentation = doc.Documentation;\n                    string aliases = string.Join(\", \",\n                        property.GetCustomAttributes<SettingsAliasAttribute>().Select(a => \"-\" + a.Alias));\n                    if (!string.IsNullOrWhiteSpace(aliases))\n                    {\n                        documentation += \" Aliases: \" + aliases;\n                    }\n\n                    templateSection.AppendLine(\"  \" + template.\n                        Replace(propNameAnchor, property.Name).\n                        Replace(docAnchor, documentation));\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff/OpenApiDiff.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\" ToolsVersion=\"15.0\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common/common.proj ))/common/common.proj\" />\n  <Import Project=\"$(common)common-package-references.proj\" />\n  <Import Project=\"$(common)package-info.proj\" />\n\n  <PropertyGroup>\n    <OutputType>Exe</OutputType>\n    <TargetFramework>netcoreapp6.0</TargetFramework>\n    <AssemblyName>OpenApiDiff</AssemblyName>\n    <PackageTags>Microsoft OpenApiDiff</PackageTags>\n    <Version>0.1.0</Version>\n    <Authors>Microsoft Corporation</Authors>\n    <Company>Microsoft Corporation</Company>\n    <Description>Compares two openapi documents for breaking change detection</Description>\n    <PackageProjectUrl>https://github.com/Azure/openapi-diff</PackageProjectUrl>\n    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>\n    <PackageRequireLicenseAcceptance>False</PackageRequireLicenseAcceptance>\n    <LangVersion>7.3</LangVersion>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"$(SolutionDir)src/modeler/AutoRest.Swagger/AutoRest.Swagger.csproj\" />\n    <ProjectReference Include=\"..\\OpenApiDiff.Core\\OpenApiDiff.Core.csproj\" />\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\n      <DesignTime>True</DesignTime>\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Update=\"Properties\\Resources.resx\">\n      <Generator>ResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n  <Target Name=\"CleanBuildDlls\" BeforeTargets=\"Build\">\n      <Message Importance=\"High\" Text=\"Deleting the build dlls from Node library...\" />\n      <Microsoft.Build.Tasks.RemoveDir Directories=\"$(SolutionDir)../dlls/.\" />\n  </Target>\n  <Target Name=\"CopyBuildDlls\" AfterTargets=\"Build\">\n      <Message Importance=\"High\" Text=\"Copying the build dlls into Node library...\" />\n        <ItemGroup>\n          <Files Include=\"$(OutDir)/**/*\" />\n        </ItemGroup>\n        <Microsoft.Build.Tasks.Copy SourceFiles=\"@(Files)\" DestinationFolder=\"$(SolutionDir)../dlls/%(RecursiveDir)\" SkipUnchangedFiles=\"true\" OverwriteReadOnlyFiles=\"true\" Retries=\"3\" RetryDelayMilliseconds=\"300\" />\n  </Target>\n    <Target Name=\"CleanPublishDlls\" BeforeTargets=\"Publish\">\n      <Message Importance=\"High\" Text=\"Deleting the publish dlls from Node library...\" />\n      <Microsoft.Build.Tasks.RemoveDir Directories=\"$(SolutionDir)../dlls/.\" />\n  </Target>\n  <Target Name=\"CopyPublishDlls\" AfterTargets=\"Publish\">\n      <Message Importance=\"High\" Text=\"Copying the publish dlls into Node library...\" />\n        <ItemGroup>\n          <Files Include=\"$(OutDir)/publish/**/*\" />\n        </ItemGroup>\n        <Microsoft.Build.Tasks.Copy SourceFiles=\"@(Files)\" DestinationFolder=\"$(SolutionDir)../dlls/%(RecursiveDir)\" SkipUnchangedFiles=\"true\" OverwriteReadOnlyFiles=\"true\" Retries=\"3\" RetryDelayMilliseconds=\"300\" />\n  </Target>\n</Project>\n"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff/Program.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing AutoRest.Swagger;\nusing System;\nusing OpenApiDiff.Core;\nusing OpenApiDiff.Properties;\nusing System.IO;\nusing System.Linq;\n\nnamespace OpenApiDiff\n{\n    internal class Program\n    {\n        private static int Main(string[] args)\n        {\n            var settings = Settings.GetInstance(args);\n\n            if (settings.ShowHelp)\n            {\n                Console.WriteLine(HelpGenerator.Generate(Resources.HelpTextTemplate, settings));\n                return 0;\n            }\n\n            try\n            {\n                settings.Validate();\n            }\n            catch (Exception ex)\n            {\n                Console.WriteLine(ex.Message);\n                return 1;\n            }\n\n            var modeler = new SwaggerModeler();\n\n            var swaggerPrev = File.ReadAllText(settings.OldSpec);\n            var swaggerNew = File.ReadAllText(settings.NewSpec);\n\n            var messages = modeler.Compare(\n                settings.OldSpec,\n                swaggerPrev, \n                settings.NewSpec, \n                swaggerNew,\n                settings\n            );\n\n            Console.WriteLine(\"[\");\n            Console.WriteLine(string.Join(\",\\n\", messages.Select(v => v.GetValidationMessagesAsJson())));\n            Console.WriteLine(\"]\");\n\n            return 0;\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace OpenApiDiff.Properties {\n    using System;\n    using System.Reflection;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    internal class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OpenApiDiff.Properties.Resources\", typeof(Resources).GetTypeInfo().Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        internal static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to error: {0}.\n        /// </summary>\n        internal static string ConsoleErrorMessage {\n            get {\n                return ResourceManager.GetString(\"ConsoleErrorMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to \\t{0}.\n        /// </summary>\n        internal static string ConsoleErrorStackTrace {\n            get {\n                return ResourceManager.GetString(\"ConsoleErrorStackTrace\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Finished generating {0} code for {1}..\n        /// </summary>\n        internal static string GenerationComplete {\n            get {\n                return ResourceManager.GetString(\"GenerationComplete\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Code generation failed..\n        /// </summary>\n        internal static string GenerationFailed {\n            get {\n                return ResourceManager.GetString(\"GenerationFailed\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to #AutoRest Command Line Interface Documentation\n        ///\n        ///##Syntax\n        ///```bash\n        ///$syntax$\n        ///```\n        ///\n        ///##Parameters\n        ///$parameters-start$\n        ///**-$parameter$** $parameter-desc$\n        ///\n        ///$parameters-end$\n        ///\n        ///##Code Generators\n        ///$generators-start$\n        ///**-$generator$** $generator-desc$\n        /// ##Parameters\n        /// $generator-parameters-start$\n        ///  **-$generator-parameters-name$** $generator-parameters-desc$\n        ///\n        /// $generator-parameters-end$\n        ///$generators-end$\n        ///\n        ///##Examples\n        ///$examples-start$\n        ///- $example-desc$\n        ///```bash\n        ///$example$\n        ///```\n        ///\n        ///$examples-end$.\n        /// </summary>\n        internal static string HelpMarkdownTemplate {\n            get {\n                return ResourceManager.GetString(\"HelpMarkdownTemplate\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Copyright (C) Microsoft Corporation. All rights reserved.\n        ///\n        ///Usage: $syntax$\n        ///\n        ///Parameters:\n        ///$parameters-start$\n        ///  -$parameter$: $parameter-desc$\n        ///$parameters-end$\n        ///\n        ///Examples:\n        ///$examples-start$\n        ///  $example-desc$\n        ///  &gt;$example$\n        ///\n        ///$examples-end$.\n        /// </summary>\n        internal static string HelpTextTemplate {\n            get {\n                return ResourceManager.GetString(\"HelpTextTemplate\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"ConsoleErrorMessage\" xml:space=\"preserve\">\n    <value>error: {0}</value>\n  </data>\n  <data name=\"ConsoleErrorStackTrace\" xml:space=\"preserve\">\n    <value>\\t{0}</value>\n  </data>\n  <data name=\"GenerationComplete\" xml:space=\"preserve\">\n    <value>Finished generating {0} code for {1}.</value>\n  </data>\n  <data name=\"GenerationFailed\" xml:space=\"preserve\">\n    <value>Code generation failed.</value>\n  </data>\n  <data name=\"HelpMarkdownTemplate\" xml:space=\"preserve\">\n    <value>#AutoRest Command Line Interface Documentation\n\n##Syntax\n```bash\n$syntax$\n```\n\n##Parameters\n$parameters-start$\n**-$parameter$** $parameter-desc$\n\n$parameters-end$\n\n##Code Generators\n$generators-start$\n**-$generator$** $generator-desc$\n ##Parameters\n $generator-parameters-start$\n  **-$generator-parameters-name$** $generator-parameters-desc$\n\n $generator-parameters-end$\n$generators-end$\n\n##Examples\n$examples-start$\n- $example-desc$\n```bash\n$example$\n```\n\n$examples-end$</value>\n  </data>\n  <data name=\"HelpTextTemplate\" xml:space=\"preserve\">\n    <value>Copyright (C) Microsoft Corporation. All rights reserved.\n\nUsage: $syntax$\n\nParameters:\n$parameters-start$\n  -$parameter$: $parameter-desc$\n$parameters-end$\n\nExamples:\n$examples-start$\n  $example-desc$\n  &gt;$example$\n\n$examples-end$</value>\n  </data>\n</root>"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/JsonDocument.cs",
    "content": "﻿using Newtonsoft.Json.Linq;\n\nnamespace OpenApiDiff.Core\n{\n    /// <summary>\n    /// An interface for untyped parsed JSON.\n    /// </summary>\n    public interface IJsonDocument\n    {\n        JToken Token { get; }\n\n        string FileName { get; }\n    }\n\n    /// <summary>\n    /// A representation of parsed JSON document.\n    /// </summary>\n    /// <typeparam name=\"T\"></typeparam>\n    public sealed class JsonDocument<T>: IJsonDocument\n    {\n        /// <summary>\n        /// Untyped raw parsed JSON. The Token also includes information about \n        /// file location of each item.\n        /// </summary>\n        public JToken Token { get; }\n\n        /// <summary>\n        /// Representation of JSON as `T` type.\n        /// </summary>\n        public T Typed { get; }\n\n        /// <summary>\n        /// A JSON source file name.\n        /// </summary>\n        public string FileName { get; }\n\n        public JsonDocument(JToken token, T typed, string fileName)\n        {\n            Token = token;\n            Typed = typed;\n            FileName = fileName;\n        }\n    }\n\n    public static class JsonDocument\n    {\n        /// <summary>\n        /// Creates a `JsonDocument` object. It's a syntax sugar for `new JsonDocument`.\n        /// </summary>\n        /// <typeparam name=\"T\">Deserialization type.</typeparam>\n        /// <param name=\"token\">Raw JSON object. The object includes information about JSON token locations</param>\n        /// <param name=\"typed\">Representation of the JSON as `T` type.</param>\n        /// <param name=\"fileName\">A JSON source file name.</param>\n        /// <returns></returns>\n        public static JsonDocument<T> ToJsonDocument<T>(this JToken token, T typed, string fileName)\n            => new JsonDocument<T>(token, typed, fileName);\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/Logging/LogMessageSeverity.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace OpenApiDiff.Core.Logging\n{\n    /// <summary>\n    /// severity of the log message.\n    /// </summary>\n    public enum Category\n    {\n        Info,\n        Warning,\n        Error\n    }\n}"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/Logging/ObjectPath.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing Newtonsoft.Json.Linq;\nusing System;\nusing System.Collections.Generic;\nusing System.Linq;\nusing System.Text.RegularExpressions;\n\nnamespace OpenApiDiff.Core.Logging\n{\n    /// <summary>\n    /// Represents a path into an object.\n    /// </summary>\n    public class ObjectPath\n    {\n        public static ObjectPath Empty => new ObjectPath(Enumerable.Empty<Func<JToken, string>>());\n\n        private ObjectPath(IEnumerable<Func<JToken, string>> path)\n        {\n            Path = path;\n        }\n\n        private ObjectPath Append(Func<JToken, string> f) => new ObjectPath(Path.Concat(new[] { f }));\n\n        public ObjectPath AppendProperty(string property) => Append((_) => property);\n\n        public ObjectPath AppendItemByName(string value) => Append(t =>\n        {\n            var list = t\n                ?.Select((v, i) => (v, i))\n                ?.Where(vi => vi.v?[\"name\"]?.Value<string>() == value)\n                ?.ToList();\n            return list == null || list.Count == 0 ? null : list[0].i.ToString();\n        });\n\n        /// <summary>\n        /// This's the OpenAPI path name. To use it as an id we need to remove all parameter names.\n        /// For example, \"/a/{a}/\" and \"/a/{b}\" are the same paths.\n        /// </summary>\n        /// <param name=\"path\"></param>\n        /// <returns></returns>\n        public static string OpenApiPathName(string path)\n            => Regex.Replace(path, @\"\\{\\w*\\}\", @\"{}\");\n\n        /// <summary>\n        /// Adding an Open API path.\n        /// \n        /// For example, if the `opepApiPath` is \"/subscription/{a}/{b}\" then \"a\" and \"b\" parameters \n        /// will be removed from a search.\n        /// </summary>\n        /// <param name=\"openApiPath\"></param>\n        /// <returns></returns>\n        public ObjectPath AppendPathProperty(string openApiPath) {\n            var noParameters = OpenApiPathName(openApiPath);\n            return Append(t =>\n                (t as JObject)\n                    ?.Properties()\n                    ?.FirstOrDefault(p => OpenApiPathName(p.Name) == noParameters)\n                    ?.Name\n            );\n        }\n\n        public IEnumerable<Func<JToken, string>> Path { get; }\n\n        private static ObjectPath ParseRef(string s)\n            => new ObjectPath(s\n                .Split('/')\n                .Where(v => v != \"#\")\n                .Select<string, Func<JToken, string>>(v => _ => v.Replace(\"~1\", \"/\").Replace(\"~0\", \"~\"))\n            );\n\n        private static JToken FromObject(JObject o, string name)\n        {\n            if (name == null)\n            {\n                return null;\n            }\n            \n            var @ref = o[\"$ref\"];\n            \n            // Handle $ref resolution based on its type\n            if (@ref != null && @ref.Type == JTokenType.String)\n            {\n                // Case 1: $ref is a string reference (e.g., \"#/definitions/FieldType\")\n                // Resolve the reference by parsing the path and following it to the target\n                var unrefed = ParseRef(@ref.Value<string>()).CompletePath(o.Root).Last().token;\n                return unrefed[name];\n            }\n            else\n            {\n                // Case 2: $ref is not a string (e.g., a JSON object defining a schema)\n                // or $ref doesn't exist - use the current object directly\n                return o[name];\n            }\n        }\n\n        private static IEnumerable<(JToken token, string name)> CompletePath(IEnumerable<Func<JToken, string>> path, JToken token)\n            => new[] { (token, \"#\") }\n                .Concat(path.Select(v => {\n                    var name = v(token);\n                    token =\n                        token is JArray a ? int.TryParse(name, out var i) ? a[i] : null :\n                        token is JObject o ? FromObject(o, name) :\n                        null;\n                    return (token, name);\n                }));\n\n        /// <summary>\n        /// Returns a sequence of property names, including the \"#\" string.\n        /// </summary>\n        /// <param name=\"t\"></param>\n        /// <returns></returns>\n        public IEnumerable<(JToken token, string name)> CompletePath(JToken t)\n            => CompletePath(Path, t);\n\n        public static string FileNameNorm(string fileName) \n            => fileName.Replace(\"\\\\\", \"/\");\n\n        // https://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-04\n        public string JsonPointer(IJsonDocument t)\n        {\n            var result = CompletePath(t.Token)\n                .Select(v => v.name?.Replace(\"~\", \"~0\")?.Replace(\"/\", \"~1\"))\n                .Aggregate((a, b) => a == null || b == null ? null : a + \"/\" + b);\n            return result == null ? null : FileNameNorm(t.FileName) + result;\n        }\n\n        public ObjectPath AppendExpression(Func<JToken, string> func)\n            => Append(func);\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/OpenApiDiff.Core.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\" ToolsVersion=\"15.0\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common/common.proj ))/common/common.proj\" />\n  <Import Project=\"$(common)common-package-references.proj\" />\n  <Import Project=\"$(common)project-library.proj\" />\n  <Import Project=\"$(common)package-info.proj\" />\n\n  <PropertyGroup>\n    <AssemblyName>OpenApiDiff.Core</AssemblyName>\n    <PackageTags>Microsoft AutoRest</PackageTags>\n    <LangVersion>7.3</LangVersion>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Compile Remove=\"Extensibility\\**\" />\n    <EmbeddedResource Remove=\"Extensibility\\**\" />\n    <None Remove=\"Extensibility\\**\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\n    <PackageReference Include=\"System.Net.Http\" Version=\"4.3.4\" />\n    <PackageReference Include=\"System.Reflection.TypeExtensions\" Version=\"4.3.0\" />\n    <PackageReference Include=\"YamlDotNet.Signed\" Version=\"5.0.0\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <Compile Update=\"Properties\\Resources.Designer.cs\">\n      <DesignTime>True</DesignTime>\n      <AutoGen>True</AutoGen>\n      <DependentUpon>Resources.resx</DependentUpon>\n    </Compile>\n  </ItemGroup>\n  <ItemGroup>\n    <EmbeddedResource Update=\"Properties\\Resources.resx\">\n      <Generator>PublicResXFileCodeGenerator</Generator>\n      <LastGenOutput>Resources.Designer.cs</LastGenOutput>\n    </EmbeddedResource>\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace OpenApiDiff.Core.Properties {\n    using System;\n    using System.Reflection;\n    \n    \n    /// <summary>\n    ///   A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.CodeDom.Compiler.GeneratedCodeAttribute(\"System.Resources.Tools.StronglyTypedResourceBuilder\", \"4.0.0.0\")]\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute(\"Microsoft.Performance\", \"CA1811:AvoidUncalledPrivateCode\")]\n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///   Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"OpenApiDiff.Core.Properties.Resources\", typeof(Resources).GetTypeInfo().Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///   Overrides the current thread's CurrentUICulture property for all\n        ///   resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, identity. Model definition &apos;{0}&apos; has extra properties [&apos;{1}&apos;]..\n        /// </summary>\n        public static string AllowedTopLevelProperties {\n            get {\n                return ResourceManager.GetString(\"AllowedTopLevelProperties\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Inline/anonymous models must not be used, instead define a schema with a model name in the &quot;definitions&quot; section and refer to it. This allows operations to share the models..\n        /// </summary>\n        public static string AnonymousTypesDiscouraged {\n            get {\n                return ResourceManager.GetString(\"AnonymousTypesDiscouraged\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to API Version must be in the format: yyyy-MM-dd, optionally followed by -preview, -alpha, -beta, -rc, -privatepreview..\n        /// </summary>\n        public static string APIVersionFormatIsNotValid {\n            get {\n                return ResourceManager.GetString(\"APIVersionFormatIsNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Top level property names should not be repeated inside the properties bag for ARM resource &apos;{0}&apos;. Properties [{1}] conflict with ARM top level properties. Please rename these..\n        /// </summary>\n        public static string ArmPropertiesBagValidationMessage {\n            get {\n                return ResourceManager.GetString(\"ArmPropertiesBagValidationMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to AutoRest Core {0}.\n        /// </summary>\n        public static string AutoRestCore {\n            get {\n                return ResourceManager.GetString(\"AutoRestCore\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Property named: &apos;{0}&apos;, must follow camelCase style. Example: &apos;{1}&apos;..\n        /// </summary>\n        public static string BodyPropertyNameCamelCase {\n            get {\n                return ResourceManager.GetString(\"BodyPropertyNameCamelCase\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Booleans are not descriptive and make them hard to use. Instead use string enums with allowed set of values defined. Enum Property: {0}.\n        /// </summary>\n        public static string BooleanPropertyNotRecommended {\n            get {\n                return ResourceManager.GetString(\"BooleanPropertyNotRecommended\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Collection object &apos;{0}&apos; returned by list operation &apos;{1}&apos; with &apos;x-ms-pageable&apos; extension, has no property named &apos;value&apos;..\n        /// </summary>\n        public static string CollectionObjectPropertiesNamingMessage {\n            get {\n                return ResourceManager.GetString(\"CollectionObjectPropertiesNamingMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Plugins:\n        ///  CSharp:\n        ///    TypeName: PluginCs, AutoRest.CSharp\n        ///  JsonRpcClient:\n        ///    TypeName: PluginCs, AutoRest.CSharp.JsonRpcClient\n        ///  Azure.CSharp:\n        ///    TypeName: PluginCsa, AutoRest.CSharp.Azure\n        ///  Azure.CSharp.Fluent:\n        ///    TypeName: PluginCsaf, AutoRest.CSharp.Azure.Fluent\n        ///  Azure.JsonRpcClient:\n        ///    TypeName: PluginCsa, AutoRest.CSharp.Azure.JsonRpcClient\n        ///  Ruby:\n        ///    TypeName: PluginRb, AutoRest.Ruby\n        ///  Azure.Ruby:\n        ///    TypeName: PluginRba, AutoRest.Ruby.Azure\n        ///  NodeJS:\n        ///    TypeName: PluginJs, Au [rest of string was truncated]&quot;;.\n        /// </summary>\n        public static string ConfigurationKnownPlugins {\n            get {\n                return ResourceManager.GetString(\"ConfigurationKnownPlugins\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Property named: &apos;{0}&apos;, for definition: &apos;{1}&apos; must follow camelCase style. Example: &apos;{2}&apos;..\n        /// </summary>\n        public static string DefinitionsPropertiesNameCamelCase {\n            get {\n                return ResourceManager.GetString(\"DefinitionsPropertiesNameCamelCase\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;Delete&apos; operation &apos;{0}&apos; must not have a request body..\n        /// </summary>\n        public static string DeleteMustNotHaveRequestBody {\n            get {\n                return ResourceManager.GetString(\"DeleteMustNotHaveRequestBody\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;DELETE&apos; operation &apos;{0}&apos; must use method name &apos;Delete&apos;..\n        /// </summary>\n        public static string DeleteOperationNameNotValid {\n            get {\n                return ResourceManager.GetString(\"DeleteOperationNameNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The value provided for description is not descriptive enough. Accurate and descriptive description is essential for maintaining reference documentation..\n        /// </summary>\n        public static string DescriptionNotDescriptive {\n            get {\n                return ResourceManager.GetString(\"DescriptionNotDescriptive\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Empty x-ms-client-name property..\n        /// </summary>\n        public static string EmptyClientName {\n            get {\n                return ResourceManager.GetString(\"EmptyClientName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error generating client model: {0}.\n        /// </summary>\n        public static string ErrorGeneratingClientModel {\n            get {\n                return ResourceManager.GetString(\"ErrorGeneratingClientModel\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error loading {0} assembly: {1}.\n        /// </summary>\n        public static string ErrorLoadingAssembly {\n            get {\n                return ResourceManager.GetString(\"ErrorLoadingAssembly\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Error saving generated code: {0}.\n        /// </summary>\n        public static string ErrorSavingGeneratedCode {\n            get {\n                return ResourceManager.GetString(\"ErrorSavingGeneratedCode\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Plugin {0} not found.\n        /// </summary>\n        public static string ExtensionNotFound {\n            get {\n                return ResourceManager.GetString(\"ExtensionNotFound\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Successfully initialized {0} Code Generator {1}.\n        /// </summary>\n        public static string GeneratorInitialized {\n            get {\n                return ResourceManager.GetString(\"GeneratorInitialized\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;GET&apos; operation &apos;{0}&apos; must use method name &apos;Get&apos; or Method name start with &apos;List&apos;.\n        /// </summary>\n        public static string GetOperationNameNotValid {\n            get {\n                return ResourceManager.GetString(\"GetOperationNameNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Guid used in model definition &apos;{1}&apos; for property &apos;{0}&apos;. Usage of Guid is not recommanded. If GUIDs are absolutely required in your service, please get sign off from the Azure API review board..\n        /// </summary>\n        public static string GuidUsageNotRecommended {\n            get {\n                return ResourceManager.GetString(\"GuidUsageNotRecommended\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Permissible values for HTTP Verb are delete,get,put,patch,head,options,post. .\n        /// </summary>\n        public static string HttpVerbIsNotValid {\n            get {\n                return ResourceManager.GetString(\"HttpVerbIsNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Initializing code generator..\n        /// </summary>\n        public static string InitializingCodeGenerator {\n            get {\n                return ResourceManager.GetString(\"InitializingCodeGenerator\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Initializing modeler..\n        /// </summary>\n        public static string InitializingModeler {\n            get {\n                return ResourceManager.GetString(\"InitializingModeler\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Input parameter &apos;{0}&apos; must be a valid file path..\n        /// </summary>\n        public static string InputMustBeAFile {\n            get {\n                return ResourceManager.GetString(\"InputMustBeAFile\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The default value is not one of the values enumerated as valid for this element..\n        /// </summary>\n        public static string InvalidDefault {\n            get {\n                return ResourceManager.GetString(\"InvalidDefault\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Property name {0} cannot be used as an Identifier, as it contains only invalid characters..\n        /// </summary>\n        public static string InvalidIdentifierName {\n            get {\n                return ResourceManager.GetString(\"InvalidIdentifierName\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to When property is modeled as &quot;readOnly&quot;: true then x-ms-mutability extension can only have &quot;read&quot; value. When property is modeled as &quot;readOnly&quot;: false then applying x-ms-mutability extension with only &quot;read&quot; value is not allowed. Extension contains invalid values: &apos;{0}&apos;..\n        /// </summary>\n        public static string InvalidMutabilityValueForReadOnly {\n            get {\n                return ResourceManager.GetString(\"InvalidMutabilityValueForReadOnly\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; code generator does not support code generation to a single file..\n        /// </summary>\n        public static string LanguageDoesNotSupportSingleFileGeneration {\n            get {\n                return ResourceManager.GetString(\"LanguageDoesNotSupportSingleFileGeneration\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Since operation &apos;{0}&apos; response has model definition &apos;{1}&apos;, it should be of the form &quot;*_list*&quot;.\n        /// </summary>\n        public static string ListOperationsNamingWarningMessage {\n            get {\n                return ResourceManager.GetString(\"ListOperationsNamingWarningMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A &apos;{0}&apos; operation &apos;{1}&apos; with x-ms-long-running-operation extension must have a valid terminal success status code {2}..\n        /// </summary>\n        public static string LongRunningResponseNotValid {\n            get {\n                return ResourceManager.GetString(\"LongRunningResponseNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} lacks &apos;description&apos; property. Consider adding a &apos;description&apos; element. Accurate description is essential for maintaining reference documentation..\n        /// </summary>\n        public static string MissingDescription {\n            get {\n                return ResourceManager.GetString(\"MissingDescription\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Successfully initialized modeler {0} v {1}..\n        /// </summary>\n        public static string ModelerInitialized {\n            get {\n                return ResourceManager.GetString(\"ModelerInitialized\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to For better generated code quality, remove all references to &quot;msdn.microsoft.com&quot;..\n        /// </summary>\n        public static string MsdnReferencesDiscouraged {\n            get {\n                return ResourceManager.GetString(\"MsdnReferencesDiscouraged\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} (already used in {1}).\n        /// </summary>\n        public static string NamespaceConflictReasonMessage {\n            get {\n                return ResourceManager.GetString(\"NamespaceConflictReasonMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Please make sure that media types other than &apos;application/json&apos; are supported by your service..\n        /// </summary>\n        public static string NonAppJsonTypeNotSupported {\n            get {\n                return ResourceManager.GetString(\"NonAppJsonTypeNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Only 1 underscore is permitted in the operation id, following Noun_Verb conventions..\n        /// </summary>\n        public static string OnlyOneUnderscoreAllowedInOperationId {\n            get {\n                return ResourceManager.GetString(\"OnlyOneUnderscoreAllowedInOperationId\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to OperationId is required for all operations. Please add it for &apos;{0}&apos; operation of &apos;{1}&apos; path..\n        /// </summary>\n        public static string OperationIdMissing {\n            get {\n                return ResourceManager.GetString(\"OperationIdMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to OperationId has a noun that conflicts with one of the model names in definitions section. The model name will be disambiguated to &apos;{0}Model&apos;. Consider using the plural form of &apos;{1}&apos; to avoid this..\n        /// </summary>\n        public static string OperationIdNounConflictingModelNamesMessage {\n            get {\n                return ResourceManager.GetString(\"OperationIdNounConflictingModelNamesMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Per the Noun_Verb convention for Operation Ids, the noun &apos;{0}&apos; should not appear after the underscore..\n        /// </summary>\n        public static string OperationIdNounInVerb {\n            get {\n                return ResourceManager.GetString(\"OperationIdNounInVerb\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter &quot;subscriptionId&quot; is not allowed in the operations section, define it in the global parameters section instead.\n        /// </summary>\n        public static string OperationParametersNotAllowedMessage {\n            get {\n                return ResourceManager.GetString(\"OperationParametersNotAllowedMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Operations API must be implemented for &apos;{0}&apos;..\n        /// </summary>\n        public static string OperationsAPINotImplemented {\n            get {\n                return ResourceManager.GetString(\"OperationsAPINotImplemented\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter Must have the &quot;name&quot; property defined with non-empty string as its value.\n        /// </summary>\n        public static string ParametersPropertiesValidation {\n            get {\n                return ResourceManager.GetString(\"ParametersPropertiesValidation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter &apos;{0}&apos; is required..\n        /// </summary>\n        public static string ParameterValueIsMissing {\n            get {\n                return ResourceManager.GetString(\"ParameterValueIsMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter &apos;{0}&apos; value is not valid. Expect &apos;{1}&apos;.\n        /// </summary>\n        public static string ParameterValueIsNotValid {\n            get {\n                return ResourceManager.GetString(\"ParameterValueIsNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;PATCH&apos; operation &apos;{0}&apos; must use method name &apos;Update&apos;..\n        /// </summary>\n        public static string PatchOperationNameNotValid {\n            get {\n                return ResourceManager.GetString(\"PatchOperationNameNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to path cannot be null or an empty string or a string with white spaces while getting the parent directory.\n        /// </summary>\n        public static string PathCannotBeNullOrEmpty {\n            get {\n                return ResourceManager.GetString(\"PathCannotBeNullOrEmpty\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to {0} has different responses for PUT/GET/PATCH operations. The PUT/GET/PATCH operations must have same schema response..\n        /// </summary>\n        public static string PutGetPatchResponseInvalid {\n            get {\n                return ResourceManager.GetString(\"PutGetPatchResponseInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;PUT&apos; operation &apos;{0}&apos; must use method name &apos;Create&apos;..\n        /// </summary>\n        public static string PutOperationNameNotValid {\n            get {\n                return ResourceManager.GetString(\"PutOperationNameNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A PUT operation request body schema should be the same as its 200 response schema, to allow reusing the same entity between GET and PUT. If the schema of the PUT request body is a superset of the GET response body, make sure you have a PATCH operation to make the resource updatable. Operation: &apos;{0}&apos; Request Model: &apos;{1}&apos; Response Model: &apos;{2}&apos;.\n        /// </summary>\n        public static string PutOperationRequestResponseSchemaMessage {\n            get {\n                return ResourceManager.GetString(\"PutOperationRequestResponseSchemaMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The 200 response model for an ARM PUT operation must have x-ms-azure-resource extension set to true in its hierarchy. Operation: &apos;{0}&apos; Model: &apos;{1}&apos;..\n        /// </summary>\n        public static string PutOperationResourceResponseValidationMessage {\n            get {\n                return ResourceManager.GetString(\"PutOperationResourceResponseValidationMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Property &apos;{0}&apos; is a required property. It should not be marked as &apos;readonly&apos;..\n        /// </summary>\n        public static string RequiredReadOnlyPropertiesValidation {\n            get {\n                return ResourceManager.GetString(\"RequiredReadOnlyPropertiesValidation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to A &apos;Resource&apos; definition must have x-ms-azure-resource extension enabled and set to true..\n        /// </summary>\n        public static string ResourceIsMsResourceNotValid {\n            get {\n                return ResourceManager.GetString(\"ResourceIsMsResourceNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Model definition &apos;{0}&apos; must have the properties &apos;name&apos;, &apos;id&apos; and &apos;type&apos; in its hierarchy and these properties must be marked as readonly..\n        /// </summary>\n        public static string ResourceModelIsNotValid {\n            get {\n                return ResourceManager.GetString(\"ResourceModelIsNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Every swagger/configuration must have a security definitions section and it must adhere to the structure described in: https://github.com/Azure/autorest/tree/master/docs/developer/validation-rules/security-definitions-structure-validation.md.\n        /// </summary>\n        public static string SecurityDefinitionsStructureValidation {\n            get {\n                return ResourceManager.GetString(\"SecurityDefinitionsStructureValidation\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Parameter &quot;{0}&quot; is referenced but not defined in the global parameters section of Service Definition.\n        /// </summary>\n        public static string ServiceDefinitionParametersMissingMessage {\n            get {\n                return ResourceManager.GetString(\"ServiceDefinitionParametersMissingMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Sku Model definition &apos;{0}&apos; is not valid. A Sku model must have &apos;name&apos; property. It can also have &apos;tier&apos;, &apos;size&apos;, &apos;family&apos;, &apos;capacity&apos; as optional properties..\n        /// </summary>\n        public static string SkuModelIsNotValid {\n            get {\n                return ResourceManager.GetString(\"SkuModelIsNotValid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The summary and description values should not be same..\n        /// </summary>\n        public static string SummaryDescriptionVaidationError {\n            get {\n                return ResourceManager.GetString(\"SummaryDescriptionVaidationError\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Azure Resource Management only supports HTTPS scheme..\n        /// </summary>\n        public static string SupportedSchemesWarningMessage {\n            get {\n                return ResourceManager.GetString(\"SupportedSchemesWarningMessage\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tracked resource &apos;{0}&apos; must have a get operation..\n        /// </summary>\n        public static string TrackedResourceGetOperationMissing {\n            get {\n                return ResourceManager.GetString(\"TrackedResourceGetOperationMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The child tracked resource, &apos;{0}&apos; with immediate parent &apos;{1}&apos;, must have a list by immediate parent operation..\n        /// </summary>\n        public static string TrackedResourceListByImmediateParentOperationMissing {\n            get {\n                return ResourceManager.GetString(\"TrackedResourceListByImmediateParentOperationMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The tracked resource, &apos;{0}&apos;, must have a list by resource group operation..\n        /// </summary>\n        public static string TrackedResourceListByResourceGroupOperationMissing {\n            get {\n                return ResourceManager.GetString(\"TrackedResourceListByResourceGroupOperationMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to The tracked resource, &apos;{0}&apos;, must have a list by subscriptions operation..\n        /// </summary>\n        public static string TrackedResourceListBySubscriptionsOperationMissing {\n            get {\n                return ResourceManager.GetString(\"TrackedResourceListBySubscriptionsOperationMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Tracked resource &apos;{0}&apos; must have patch operation that at least supports the update of tags..\n        /// </summary>\n        public static string TrackedResourcePatchOperationMissing {\n            get {\n                return ResourceManager.GetString(\"TrackedResourcePatchOperationMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Type &apos;{0}&apos; name should be assembly qualified. For example &apos;ClassName, AssemblyName&apos;.\n        /// </summary>\n        public static string TypeShouldBeAssemblyQualified {\n            get {\n                return ResourceManager.GetString(\"TypeShouldBeAssemblyQualified\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Multiple resource providers are not allowed in a single spec. More than one the resource paths were found: &apos;{0}&apos;..\n        /// </summary>\n        public static string UniqueResourcePaths {\n            get {\n                return ResourceManager.GetString(\"UniqueResourcePaths\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to &apos;{0}&apos; is not a known format..\n        /// </summary>\n        public static string UnknownFormat {\n            get {\n                return ResourceManager.GetString(\"UnknownFormat\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Value of &apos;x-ms-client-name&apos; cannot be the same as &apos;{0}&apos; Property/Model..\n        /// </summary>\n        public static string XmsClientNameInvalid {\n            get {\n                return ResourceManager.GetString(\"XmsClientNameInvalid\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to For the tracked resource &apos;{0}&apos;, the x-ms-pageable extension values must be same for list by resource group and subscriptions operations..\n        /// </summary>\n        public static string XMSPagableListByRGAndSubscriptionsMismatch {\n            get {\n                return ResourceManager.GetString(\"XMSPagableListByRGAndSubscriptionsMismatch\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///   Looks up a localized string similar to Paths in x-ms-paths must overload a normal path in the paths section, i.e. a path in the x-ms-paths must either be same as a path in the paths section or a path in the paths sections followed by additional parameters..\n        /// </summary>\n        public static string XMSPathBaseNotInPaths {\n            get {\n                return ResourceManager.GetString(\"XMSPathBaseNotInPaths\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"InvalidDefault\" xml:space=\"preserve\">\n    <value>The default value is not one of the values enumerated as valid for this element.</value>\n  </data>\n  <data name=\"InputMustBeAFile\" xml:space=\"preserve\">\n    <value>Input parameter '{0}' must be a valid file path.</value>\n  </data>\n  <data name=\"AllowedTopLevelProperties\" xml:space=\"preserve\">\n    <value>Top level properties should be one of name, type, id, location, properties, tags, plan, sku, etag, managedBy, identity. Model definition '{0}' has extra properties ['{1}'].</value>\n  </data>\n  <data name=\"AnonymousTypesDiscouraged\" xml:space=\"preserve\">\n    <value>Inline/anonymous models must not be used, instead define a schema with a model name in the \"definitions\" section and refer to it. This allows operations to share the models.</value>\n  </data>\n  <data name=\"APIVersionFormatIsNotValid\" xml:space=\"preserve\">\n    <value>API Version must be in the format: yyyy-MM-dd, optionally followed by -preview, -alpha, -beta, -rc, -privatepreview.</value>\n  </data>\n  <data name=\"ArmPropertiesBagValidationMessage\" xml:space=\"preserve\">\n    <value>Top level property names should not be repeated inside the properties bag for ARM resource '{0}'. Properties [{1}] conflict with ARM top level properties. Please rename these.</value>\n  </data>\n  <data name=\"AutoRestCore\" xml:space=\"preserve\">\n    <value>AutoRest Core {0}</value>\n  </data>\n  <data name=\"BodyPropertyNameCamelCase\" xml:space=\"preserve\">\n    <value>Property named: '{0}', must follow camelCase style. Example: '{1}'.</value>\n  </data>\n  <data name=\"BooleanPropertyNotRecommended\" xml:space=\"preserve\">\n    <value>Booleans are not descriptive and make them hard to use. Instead use string enums with allowed set of values defined. Enum Property: {0}</value>\n  </data>\n  <data name=\"CollectionObjectPropertiesNamingMessage\" xml:space=\"preserve\">\n    <value>Collection object '{0}' returned by list operation '{1}' with 'x-ms-pageable' extension, has no property named 'value'.</value>\n  </data>\n  <data name=\"ConfigurationKnownPlugins\" xml:space=\"preserve\">\n    <value>Plugins:\n  CSharp:\n    TypeName: PluginCs, AutoRest.CSharp\n  JsonRpcClient:\n    TypeName: PluginCs, AutoRest.CSharp.JsonRpcClient\n  Azure.CSharp:\n    TypeName: PluginCsa, AutoRest.CSharp.Azure\n  Azure.CSharp.Fluent:\n    TypeName: PluginCsaf, AutoRest.CSharp.Azure.Fluent\n  Azure.JsonRpcClient:\n    TypeName: PluginCsa, AutoRest.CSharp.Azure.JsonRpcClient\n  Ruby:\n    TypeName: PluginRb, AutoRest.Ruby\n  Azure.Ruby:\n    TypeName: PluginRba, AutoRest.Ruby.Azure\n  NodeJS:\n    TypeName: PluginJs, AutoRest.NodeJS\n  Azure.NodeJS:\n    TypeName: PluginJsa, AutoRest.NodeJS.Azure\n  Python:\n    TypeName: PluginPy, AutoRest.Python\n  Azure.Python:\n    TypeName: PluginPya, AutoRest.Python.Azure\n  Go:\n    TypeName: PluginGo, AutoRest.Go\n  Go.TestGen:\n    TypeName: PluginGotg, AutoRest.Go.TestGen\n  Java:\n    TypeName: PluginJv, AutoRest.Java\n  Azure.Java:\n    TypeName: PluginJva, AutoRest.Java.Azure\n  Azure.Java.Fluent:\n    TypeName: PluginJvaf, AutoRest.Java.Azure.Fluent\n  AzureResourceSchema:\n    TypeName: PluginArs, AutoRest.AzureResourceSchema\nModelers:\n  Swagger:\n    TypeName: SwaggerModeler, AutoRest.Swagger\n  CompositeSwagger:\n    TypeName: CompositeSwaggerModeler, AutoRest.CompositeSwagger\n    </value>\n  </data>\n  <data name=\"DefinitionsPropertiesNameCamelCase\" xml:space=\"preserve\">\n    <value>Property named: '{0}', for definition: '{1}' must follow camelCase style. Example: '{2}'.</value>\n  </data>\n  <data name=\"DeleteMustNotHaveRequestBody\" xml:space=\"preserve\">\n    <value>'Delete' operation '{0}' must not have a request body.</value>\n  </data>\n  <data name=\"DeleteOperationNameNotValid\" xml:space=\"preserve\">\n    <value>'DELETE' operation '{0}' must use method name 'Delete'.</value>\n  </data>\n  <data name=\"DescriptionNotDescriptive\" xml:space=\"preserve\">\n    <value>The value provided for description is not descriptive enough. Accurate and descriptive description is essential for maintaining reference documentation.</value>\n  </data>\n  <data name=\"EmptyClientName\" xml:space=\"preserve\">\n    <value>Empty x-ms-client-name property.</value>\n  </data>\n  <data name=\"ErrorGeneratingClientModel\" xml:space=\"preserve\">\n    <value>Error generating client model: {0}</value>\n  </data>\n  <data name=\"ErrorLoadingAssembly\" xml:space=\"preserve\">\n    <value>Error loading {0} assembly: {1}</value>\n  </data>\n  <data name=\"ErrorSavingGeneratedCode\" xml:space=\"preserve\">\n    <value>Error saving generated code: {0}</value>\n  </data>\n  <data name=\"ExtensionNotFound\" xml:space=\"preserve\">\n    <value>Plugin {0} not found</value>\n  </data>\n  <data name=\"GeneratorInitialized\" xml:space=\"preserve\">\n    <value>Successfully initialized {0} Code Generator {1}</value>\n  </data>\n  <data name=\"GetOperationNameNotValid\" xml:space=\"preserve\">\n    <value>'GET' operation '{0}' must use method name 'Get' or Method name start with 'List'</value>\n  </data>\n  <data name=\"GuidUsageNotRecommended\" xml:space=\"preserve\">\n    <value>Guid used in model definition '{1}' for property '{0}'. Usage of Guid is not recommanded. If GUIDs are absolutely required in your service, please get sign off from the Azure API review board.</value>\n  </data>\n  <data name=\"HttpVerbIsNotValid\" xml:space=\"preserve\">\n    <value>Permissible values for HTTP Verb are delete,get,put,patch,head,options,post. </value>\n  </data>\n  <data name=\"InitializingCodeGenerator\" xml:space=\"preserve\">\n    <value>Initializing code generator.</value>\n  </data>\n  <data name=\"InitializingModeler\" xml:space=\"preserve\">\n    <value>Initializing modeler.</value>\n  </data>\n  <data name=\"InvalidIdentifierName\" xml:space=\"preserve\">\n    <value>Property name {0} cannot be used as an Identifier, as it contains only invalid characters.</value>\n  </data>\n  <data name=\"InvalidMutabilityValueForReadOnly\" xml:space=\"preserve\">\n    <value>When property is modeled as \"readOnly\": true then x-ms-mutability extension can only have \"read\" value. When property is modeled as \"readOnly\": false then applying x-ms-mutability extension with only \"read\" value is not allowed. Extension contains invalid values: '{0}'.</value>\n  </data>\n  <data name=\"LanguageDoesNotSupportSingleFileGeneration\" xml:space=\"preserve\">\n    <value>'{0}' code generator does not support code generation to a single file.</value>\n  </data>\n  <data name=\"ListOperationsNamingWarningMessage\" xml:space=\"preserve\">\n    <value>Since operation '{0}' response has model definition '{1}', it should be of the form \"*_list*\"</value>\n  </data>\n  <data name=\"LongRunningResponseNotValid\" xml:space=\"preserve\">\n    <value>A '{0}' operation '{1}' with x-ms-long-running-operation extension must have a valid terminal success status code {2}.</value>\n  </data>\n  <data name=\"MissingDescription\" xml:space=\"preserve\">\n    <value>{0} lacks 'description' property. Consider adding a 'description' element. Accurate description is essential for maintaining reference documentation.</value>\n  </data>\n  <data name=\"ModelerInitialized\" xml:space=\"preserve\">\n    <value>Successfully initialized modeler {0} v {1}.</value>\n  </data>\n  <data name=\"MsdnReferencesDiscouraged\" xml:space=\"preserve\">\n    <value>For better generated code quality, remove all references to \"msdn.microsoft.com\".</value>\n  </data>\n  <data name=\"NamespaceConflictReasonMessage\" xml:space=\"preserve\">\n    <value>{0} (already used in {1})</value>\n  </data>\n  <data name=\"NonAppJsonTypeNotSupported\" xml:space=\"preserve\">\n    <value>Please make sure that media types other than 'application/json' are supported by your service.</value>\n  </data>\n  <data name=\"OnlyOneUnderscoreAllowedInOperationId\" xml:space=\"preserve\">\n    <value>Only 1 underscore is permitted in the operation id, following Noun_Verb conventions.</value>\n  </data>\n  <data name=\"OperationIdMissing\" xml:space=\"preserve\">\n    <value>OperationId is required for all operations. Please add it for '{0}' operation of '{1}' path.</value>\n  </data>\n  <data name=\"OperationIdNounConflictingModelNamesMessage\" xml:space=\"preserve\">\n    <value>OperationId has a noun that conflicts with one of the model names in definitions section. The model name will be disambiguated to '{0}Model'. Consider using the plural form of '{1}' to avoid this.</value>\n  </data>\n  <data name=\"OperationIdNounInVerb\" xml:space=\"preserve\">\n    <value>Per the Noun_Verb convention for Operation Ids, the noun '{0}' should not appear after the underscore.</value>\n  </data>\n  <data name=\"OperationParametersNotAllowedMessage\" xml:space=\"preserve\">\n    <value>Parameter \"subscriptionId\" is not allowed in the operations section, define it in the global parameters section instead</value>\n  </data>\n  <data name=\"OperationsAPINotImplemented\" xml:space=\"preserve\">\n    <value>Operations API must be implemented for '{0}'.</value>\n  </data>\n  <data name=\"ParametersPropertiesValidation\" xml:space=\"preserve\">\n    <value>Parameter Must have the \"name\" property defined with non-empty string as its value</value>\n  </data>\n  <data name=\"ParameterValueIsMissing\" xml:space=\"preserve\">\n    <value>Parameter '{0}' is required.</value>\n  </data>\n  <data name=\"ParameterValueIsNotValid\" xml:space=\"preserve\">\n    <value>Parameter '{0}' value is not valid. Expect '{1}'</value>\n  </data>\n  <data name=\"PatchOperationNameNotValid\" xml:space=\"preserve\">\n    <value>'PATCH' operation '{0}' must use method name 'Update'.</value>\n  </data>\n  <data name=\"PathCannotBeNullOrEmpty\" xml:space=\"preserve\">\n    <value>path cannot be null or an empty string or a string with white spaces while getting the parent directory</value>\n  </data>\n  <data name=\"PutGetPatchResponseInvalid\" xml:space=\"preserve\">\n    <value>{0} has different responses for PUT/GET/PATCH operations. The PUT/GET/PATCH operations must have same schema response.</value>\n  </data>\n  <data name=\"PutOperationNameNotValid\" xml:space=\"preserve\">\n    <value>'PUT' operation '{0}' must use method name 'Create'.</value>\n  </data>\n  <data name=\"PutOperationRequestResponseSchemaMessage\" xml:space=\"preserve\">\n    <value>A PUT operation request body schema should be the same as its 200 response schema, to allow reusing the same entity between GET and PUT. If the schema of the PUT request body is a superset of the GET response body, make sure you have a PATCH operation to make the resource updatable. Operation: '{0}' Request Model: '{1}' Response Model: '{2}'</value>\n  </data>\n  <data name=\"PutOperationResourceResponseValidationMessage\" xml:space=\"preserve\">\n    <value>The 200 response model for an ARM PUT operation must have x-ms-azure-resource extension set to true in its hierarchy. Operation: '{0}' Model: '{1}'.</value>\n  </data>\n  <data name=\"RequiredReadOnlyPropertiesValidation\" xml:space=\"preserve\">\n    <value>Property '{0}' is a required property. It should not be marked as 'readonly'.</value>\n  </data>\n  <data name=\"ResourceIsMsResourceNotValid\" xml:space=\"preserve\">\n    <value>A 'Resource' definition must have x-ms-azure-resource extension enabled and set to true.</value>\n  </data>\n  <data name=\"ResourceModelIsNotValid\" xml:space=\"preserve\">\n    <value>Model definition '{0}' must have the properties 'name', 'id' and 'type' in its hierarchy and these properties must be marked as readonly.</value>\n  </data>\n  <data name=\"SecurityDefinitionsStructureValidation\" xml:space=\"preserve\">\n    <value>Every swagger/configuration must have a security definitions section and it must adhere to the structure described in: https://github.com/Azure/autorest/tree/master/docs/developer/validation-rules/security-definitions-structure-validation.md</value>\n  </data>\n  <data name=\"ServiceDefinitionParametersMissingMessage\" xml:space=\"preserve\">\n    <value>Parameter \"{0}\" is referenced but not defined in the global parameters section of Service Definition</value>\n  </data>\n  <data name=\"SkuModelIsNotValid\" xml:space=\"preserve\">\n    <value>Sku Model definition '{0}' is not valid. A Sku model must have 'name' property. It can also have 'tier', 'size', 'family', 'capacity' as optional properties.</value>\n  </data>\n  <data name=\"SummaryDescriptionVaidationError\" xml:space=\"preserve\">\n    <value>The summary and description values should not be same.</value>\n  </data>\n  <data name=\"SupportedSchemesWarningMessage\" xml:space=\"preserve\">\n    <value>Azure Resource Management only supports HTTPS scheme.</value>\n  </data>\n  <data name=\"TrackedResourceGetOperationMissing\" xml:space=\"preserve\">\n    <value>Tracked resource '{0}' must have a get operation.</value>\n  </data>\n  <data name=\"TrackedResourceListByImmediateParentOperationMissing\" xml:space=\"preserve\">\n    <value>The child tracked resource, '{0}' with immediate parent '{1}', must have a list by immediate parent operation.</value>\n  </data>\n  <data name=\"TrackedResourceListByResourceGroupOperationMissing\" xml:space=\"preserve\">\n    <value>The tracked resource, '{0}', must have a list by resource group operation.</value>\n  </data>\n  <data name=\"TrackedResourceListBySubscriptionsOperationMissing\" xml:space=\"preserve\">\n    <value>The tracked resource, '{0}', must have a list by subscriptions operation.</value>\n  </data>\n  <data name=\"TrackedResourcePatchOperationMissing\" xml:space=\"preserve\">\n    <value>Tracked resource '{0}' must have patch operation that at least supports the update of tags.</value>\n  </data>\n  <data name=\"TypeShouldBeAssemblyQualified\" xml:space=\"preserve\">\n    <value>Type '{0}' name should be assembly qualified. For example 'ClassName, AssemblyName'</value>\n  </data>\n  <data name=\"UniqueResourcePaths\" xml:space=\"preserve\">\n    <value>Multiple resource providers are not allowed in a single spec. More than one the resource paths were found: '{0}'.</value>\n  </data>\n  <data name=\"UnknownFormat\" xml:space=\"preserve\">\n    <value>'{0}' is not a known format.</value>\n  </data>\n  <data name=\"XmsClientNameInvalid\" xml:space=\"preserve\">\n    <value>Value of 'x-ms-client-name' cannot be the same as '{0}' Property/Model.</value>\n  </data>\n  <data name=\"XMSPagableListByRGAndSubscriptionsMismatch\" xml:space=\"preserve\">\n    <value>For the tracked resource '{0}', the x-ms-pageable extension values must be same for list by resource group and subscriptions operations.</value>\n  </data>\n  <data name=\"XMSPathBaseNotInPaths\" xml:space=\"preserve\">\n    <value>Paths in x-ms-paths must overload a normal path in the paths section, i.e. a path in the x-ms-paths must either be same as a path in the paths section or a path in the paths sections followed by additional parameters.</value>\n  </data>\n</root>"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/Settings.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing Newtonsoft.Json.Linq;\nusing OpenApiDiff.Core.Properties;\nusing System;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.IO;\nusing System.Linq;\nusing System.Reflection;\n\nnamespace OpenApiDiff.Core\n{\n    public class Settings\n    {\n        private static Settings Instance = new Settings();\n\n        // The CommandLineInfo attribute is reflected to display help.\n        // Prefer to show required properties before optional.\n        // Although not guaranteed by the Framework, the iteration order matches the\n        // order of definition.\n\n        #region ordered_properties\n\n        /// <summary>\n        /// Gets or sets the path to the old specification file.\n        /// </summary>\n        [SettingsInfo(\"The location of the old specification.\", true)]\n        [SettingsAlias(\"o\")]\n        [SettingsAlias(\"old\")]\n        public string OldSpec { get; set; }\n\n        /// <summary>\n        /// Gets or sets the path to the new specification file.\n        /// </summary>\n        [SettingsInfo(\"The location of the new specification.\", true)]\n        [SettingsAlias(\"n\")]\n        [SettingsAlias(\"new\")]\n        public string NewSpec { get; set; }\n\n        /// <summary>\n        /// If set to true, print out help message.\n        /// </summary>\n        [SettingsAlias(\"?\")]\n        [SettingsAlias(\"h\")]\n        [SettingsAlias(\"help\")]\n        public bool ShowHelp { get; set; }\n\n        /// <summary>\n        /// If set to true, collect and print out more detailed messages.\n        /// </summary>\n        [SettingsAlias(\"verbose\")]\n        public bool Verbose { get; set; }\n\n        /// <summary>\n        /// If true, then checking should be strict, in other words, breaking changes are errors intead of warnings.\n        /// </summary>\n        [SettingsInfo(\"If true, then checking should be strict, in other words, breaking changes are errors intead of warnings.\", false)]\n        [SettingsAlias(\"Strict\")]\n        public bool Strict { get; set; }\n        #endregion\n\n        /// <summary>\n        /// If set to true, print out debug messages.\n        /// </summary>\n        [SettingsAlias(\"debug\")]\n        public bool Debug { get; set; }\n\n        private Settings()\n        {\n        }\n\n        /// <summary>\n        /// Factory method to generate Settings from command line arguments.\n        /// Matches dictionary keys to the settings properties.\n        /// </summary>\n        /// <param name=\"arguments\">Command line arguments</param>\n        /// <returns>Settings</returns>\n        private static Settings Create(string[] arguments)\n        {\n            var argsDictionary = ParseArgs(arguments);\n            if (argsDictionary.Count == 0)\n            {\n                argsDictionary[\"?\"] = String.Empty;\n            }\n\n            return Create(argsDictionary);\n        }\n\n        private static Dictionary<string, object> ParseArgs(string[] arguments)\n        {\n            var argsDictionary = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase);\n            if (arguments != null && arguments.Length > 0)\n            {\n                string key = null;\n                string value = null;\n                for (int i = 0; i < arguments.Length; i++)\n                {\n                    string argument = arguments[i] ?? String.Empty;\n                    argument = argument.Trim();\n\n                    if (argument.StartsWith(\"-\", StringComparison.OrdinalIgnoreCase))\n                    {\n                        if (key != null)\n                        {\n                            AddArgumentToDictionary(key, value, argsDictionary);\n                            value = null;\n                        }\n                        key = argument.TrimStart('-');\n                    }\n                    else\n                    {\n                        value = argument;\n                    }\n                }\n                if (key != null)\n                {\n                    AddArgumentToDictionary(key, value, argsDictionary);\n                }\n            }\n            return argsDictionary;\n        }\n\n        private static void AddArgumentToDictionary(string key, string value, IDictionary<string, object> argsDictionary)\n        {\n            value = value ?? String.Empty;\n            argsDictionary[key] = value;\n        }\n\n        /// <summary>\n        /// Factory method to generate Settings from a dictionary. Matches dictionary\n        /// keys to the settings properties.\n        /// </summary>\n        /// <param name=\"settings\">Dictionary of settings</param>\n        /// <returns>Settings</returns>\n        private static Settings Create(IDictionary<string, object> settings)\n        {\n            var toolSettings = Instance;\n            if (settings == null || settings.Count == 0)\n            {\n                toolSettings.ShowHelp = true;\n            }\n\n            PopulateSettings(toolSettings, settings);\n\n            return toolSettings;\n        }\n\n        /// <summary>\n        /// Sets object properties from the dictionary matching keys to property names or aliases.\n        /// </summary>\n        /// <param name=\"entityToPopulate\">Object to populate from dictionary.</param>\n        /// <param name=\"settings\">Dictionary of settings.Settings that are populated get removed from the dictionary.</param>\n        /// <returns>Dictionary of settings that were not matched.</returns>\n        private static void PopulateSettings(object entityToPopulate, IDictionary<string, object> settings)\n        {\n            if (entityToPopulate == null)\n            {\n                throw new ArgumentNullException(\"entityToPopulate\");\n            }\n\n            if (settings != null && settings.Count > 0)\n            {\n                // Setting property value from dictionary\n                foreach (var setting in settings.ToArray())\n                {\n                    PropertyInfo property = entityToPopulate.GetType().GetProperties()\n                        .FirstOrDefault(p => setting.Key.Equals(p.Name, StringComparison.OrdinalIgnoreCase) ||\n                                             p.GetCustomAttributes<SettingsAliasAttribute>()\n                                                .Any(a => setting.Key.Equals(a.Alias, StringComparison.OrdinalIgnoreCase)));\n\n                    if (property != null)\n                    {\n                        try\n                        {\n                            if (property.PropertyType == typeof(bool) && (setting.Value == null || String.IsNullOrEmpty(setting.Value.ToString())))\n                            {\n                                property.SetValue(entityToPopulate, true);\n                            }\n                            else if (property.PropertyType.GetTypeInfo().IsEnum)\n                            {\n                                property.SetValue(entityToPopulate, Enum.Parse(property.PropertyType, setting.Value.ToString(), true));\n                            }\n                            else if (property.PropertyType.IsArray && setting.Value.GetType() == typeof(JArray))\n                            {\n                                var elementType = property.PropertyType.GetElementType();\n                                if (elementType == typeof(string))\n                                {\n                                    var stringArray = ((JArray)setting.Value).Children().\n                                    Select(\n                                        c => c.ToString())\n                                    .ToArray();\n\n                                    property.SetValue(entityToPopulate, stringArray);\n                                }\n                                else if (elementType == typeof(int))\n                                {\n                                    var intValues = ((JArray)setting.Value).Children().\n                                         Select(c => (int)Convert.ChangeType(c, elementType, CultureInfo.InvariantCulture))\n                                         .ToArray();\n                                    property.SetValue(entityToPopulate, intValues);\n                                }\n                            }\n                            else if (property.CanWrite)\n                            {\n                                property.SetValue(entityToPopulate,\n                                    Convert.ChangeType(setting.Value, property.PropertyType, CultureInfo.InvariantCulture), null);\n                            }\n\n                            settings.Remove(setting.Key);\n                        }\n                        catch (Exception exception)\n                        {\n                            throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, Resources.ParameterValueIsNotValid,\n                                setting.Key, property.GetType().Name), exception);\n                        }\n                    }\n                }\n            }\n        }\n\n        public static Settings GetInstance(string[] arguments)\n        {\n            return Create(arguments);\n        }\n\n        public void Validate()\n        {\n            foreach (PropertyInfo property in (typeof(Settings)).GetProperties())\n            {\n                // If property value is not set - throw exception.\n                var doc = property.GetCustomAttributes<SettingsInfoAttribute>().FirstOrDefault();\n                if (doc != null && doc.IsRequired && property.GetValue(this) == null)\n                {\n                    Console.WriteLine(String.Format(Resources.ParameterValueIsMissing, property.Name));\n                    throw new Exception(string.Format(Resources.ParameterValueIsMissing, property.Name));\n                }\n            }\n\n            // Validate input Files\n            if (!File.Exists(Instance.OldSpec))\n            {\n                throw new Exception(String.Format(Resources.InputMustBeAFile, \"-old\"));\n            }\n\n            if (!File.Exists(Instance.NewSpec))\n            {\n                throw new Exception(String.Format(Resources.InputMustBeAFile, \"-new\"));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/SettingsAliasAttribute.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\n\nnamespace OpenApiDiff.Core\n{\n    /// <summary>\n    /// Attribute used for extending parameters with aliases.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]\n    public sealed class SettingsAliasAttribute : Attribute\n    {\n        /// <summary>\n        /// Initializes a new instance of SettingsAliasAttribute.\n        /// </summary>\n        public SettingsAliasAttribute()\n        { }\n\n        /// <summary>\n        /// Initializes a new instance of SettingsAliasAttribute with an alias.\n        /// </summary>\n        /// <param name=\"alias\">The alias for the setting.</param>\n        public SettingsAliasAttribute(string alias)\n        {\n            Alias = alias;\n        }\n\n        public string Alias { get; private set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/core/OpenApiDiff.Core/SettingsInfoAttribute.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\n\nnamespace OpenApiDiff.Core\n{\n    /// <summary>\n    /// Helper attribute used for documentation generation in AutoRest command line interface.\n    /// </summary>\n    [AttributeUsage(AttributeTargets.Property)]\n    public sealed class SettingsInfoAttribute : Attribute\n    {\n        private string _documentation;\n        /// <summary>\n        /// Initializes a new instance of SettingsInfoAttribute with documentation and required flag.\n        /// </summary>\n        /// <param name=\"documentation\">Documentation body.</param>\n        /// <param name=\"isRequired\">If set indicates that the property is a required command\n        /// line argument.</param>\n        public SettingsInfoAttribute(string documentation, bool isRequired)\n        {\n            _documentation = documentation;\n            IsRequired = isRequired;\n        }\n\n        /// <summary>\n        /// Initializes a new instance of SettingsInfoAttribute with documentation. \n        /// IsRequired defaults to false.\n        /// </summary>\n        /// <param name=\"documentation\">Documentation body.</param>\n        public SettingsInfoAttribute(string documentation) :\n            this(documentation, false)\n        {\n        }\n\n        /// <summary>\n        /// Documentation text of the settings property.\n        /// </summary>\n        public string Documentation { get { return _documentation; } }\n\n        /// <summary>\n        /// True if property is required, false otherwise.\n        /// </summary>\n        public bool IsRequired { get; set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/AutoRest.Swagger.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\" ToolsVersion=\"15.0\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common/common.proj ))/common/common.proj\" />\n  <Import Project=\"$(common)common-package-references.proj\" />\n  <Import Project=\"$(common)project-library.proj\" />\n  <Import Project=\"$(common)package-info.proj\" />\n\n  <PropertyGroup>\n    <AssemblyName>AutoRest.Swagger</AssemblyName>\n    <PackageTags>Microsoft AutoRest Generator Extensions</PackageTags>\n    <LangVersion>7.3</LangVersion>\n  </PropertyGroup>\n  <ItemGroup>\n    <PackageReference Include=\"Microsoft.CSharp\" Version=\"4.7.0\" />\n    <PackageReference Include=\"Newtonsoft.Json\" Version=\"13.0.3\" />\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"..\\..\\core\\OpenApiDiff.Core\\OpenApiDiff.Core.csproj\" />\n  </ItemGroup>\n</Project>"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/ComparisonContext.cs",
    "content": "﻿using Newtonsoft.Json.Linq;\nusing OpenApiDiff.Core;\nusing OpenApiDiff.Core.Logging;\nusing System;\nusing System.Collections.Generic;\nusing AutoRest.Swagger.Model;\n\nnamespace AutoRest.Swagger\n{\n    /// <summary>\n    /// Provides context for a comparison, such as the ancestors in the validation tree, the root object\n    ///   and information about the key or index that locate this object in the parent's list or dictionary\n    /// </summary>\n    public class ComparisonContext<T>\n    {\n        private readonly JsonDocument<T> _CurrentRootDoc;\n        private readonly JsonDocument<T> _PreviousRootDoc;\n\n        /// <summary>\n        /// Initializes a top level context for comparisons\n        /// </summary>\n        /// <param name=\"oldRootDoc\">an old document of type T.</param>\n        /// <param name=\"newRootDoc\">a new document of type T</param>\n        public ComparisonContext(JsonDocument<T> oldRootDoc, JsonDocument<T> newRootDoc, Settings settings = null)\n        {\n            _CurrentRootDoc = newRootDoc;\n            _PreviousRootDoc = oldRootDoc;\n            \n            if (settings != null)\n            {\n                Strict = settings.Strict;\n            }\n        }\n\n        /// <summary>\n        /// The original root object in the graph that is being compared\n        /// </summary>\n        public T CurrentRoot => _CurrentRootDoc.Typed;\n\n        public T PreviousRoot => _PreviousRootDoc.Typed;\n\n        /// <summary>\n        /// If true, then checking should be strict, in other words, breaking changes are errors\n        /// intead of warnings.\n        /// </summary>\n        public bool Strict { get; set; } = false;\n\n        public DataDirection Direction { get; set; } = DataDirection.None;\n\n        // public Uri File { get; }\n        public ObjectPath Path => _path.Peek();\n\n        // public void PushIndex(int index) => _path.Push(Path.AppendIndex(index));\n        public void PushProperty(string property) => _path.Push(Path.AppendProperty(property));\n\n        public void PushItemByName(string name) => _path.Push(Path.AppendItemByName(name));\n\n        public void PushPathProperty(string name) => _path.Push(Path.AppendPathProperty(name));\n\n        public void Pop() => _path.Pop();\n\n        private Stack<ObjectPath> _path = new Stack<ObjectPath>(new[] { ObjectPath.Empty });\n\n        public void LogInfo(MessageTemplate template, params object[] formatArguments) \n            => _messages.Add(new ComparisonMessage(\n                template, \n                Path,\n                _PreviousRootDoc,\n                _CurrentRootDoc,\n                Category.Info, \n                formatArguments\n            ));\n\n        public void LogError(MessageTemplate template, params object[] formatArguments)\n            => _messages.Add(new ComparisonMessage(\n                template, \n                Path,\n                _PreviousRootDoc,\n                _CurrentRootDoc,\n                Category.Error, \n                formatArguments\n            ));\n\n        public void LogBreakingChange(MessageTemplate template, params object[] formatArguments)\n            => _messages.Add(new ComparisonMessage(\n                template, \n                Path,\n                _PreviousRootDoc,\n                _CurrentRootDoc,\n                Strict ? Category.Error : Category.Warning,\n                formatArguments\n            ));\n\n        public IEnumerable<ComparisonMessage> Messages\n        {\n            get\n            {\n                // TODO: How to eliminate duplicate messages\n                // Issue: https://github.com/Azure/openapi-diff/issues/48\n                return _messages; //.Distinct(new CustomComparer());\n            }\n        }\n\n        private IList<ComparisonMessage> _messages = new List<ComparisonMessage>();\n    }\n\n    public enum DataDirection\n    {\n        None = 0,\n        Request = 1,\n        Response = 2,\n        Both = 3\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/ComparisonMessage.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing OpenApiDiff.Core;\nusing OpenApiDiff.Core.Logging;\nusing System.Collections.Generic;\nusing System.Globalization;\nusing System.Linq;\n\nnamespace AutoRest.Swagger\n{\n    /// <summary>\n    /// Represents a single validation violation.\n    /// </summary>\n    public class ComparisonMessage\n    {\n        public static string DocBaseUrl = \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/\";\n\n        public ComparisonMessage(\n            MessageTemplate template,\n            ObjectPath path,\n            IJsonDocument oldDoc,\n            IJsonDocument newDoc,\n            Category severity,\n            params object[] formatArguments\n        )\n        {\n            Severity = severity;\n            Message = $\"{string.Format(CultureInfo.CurrentCulture, template.Message, formatArguments)}\";\n            Path = path;\n            OldDoc = oldDoc;\n            NewDoc = newDoc;\n            Id = template.Id;\n            Code = template.Code;\n            DocUrl = $\"{DocBaseUrl}{template.Id}.md\";\n            Mode = template.Type;\n        }\n\n        public IJsonDocument OldDoc { get; }\n\n        public IJsonDocument NewDoc { get; }\n\n        public Category Severity { get; }\n\n        public string Message { get; }\n\n        /// <summary>\n        /// The JSON document path to the element being validated.\n        /// </summary>\n        private ObjectPath Path { get; }\n\n        public string OldJsonRef => Path.JsonPointer(OldDoc);\n\n        /// <summary>\n        /// A JToken from the old document that contains such information as location.\n        /// if there are null nodes in the path, and the it's not an change of addtion, the null nodes  should be removed,  thus can return its parent token \n        /// </summary>\n        /// <seealso cref=\"IJsonLineInfo\"/>\n        /// <returns></returns>\n        public JToken OldJson() => Mode != MessageType.Addition ?\n             Path.CompletePath(OldDoc.Token).Where(t => t.token != null).LastOrDefault().token \n            : Path.CompletePath(OldDoc.Token).LastOrDefault().token;\n\n        public string NewJsonRef => Path.JsonPointer(NewDoc);\n\n        /// <summary>\n        /// A JToken from the new document that contains such information as location.\n        /// </summary>\n        /// <seealso cref=\"IJsonLineInfo\"/>\n        /// <returns></returns>\n        public JToken NewJson() => Mode != MessageType.Removal ? \n            Path.CompletePath(NewDoc.Token).Where(t => t.token != null).LastOrDefault().token \n            : Path.CompletePath(NewDoc.Token).LastOrDefault().token;\n\n\n        /// <summary>\n        /// The id of the validation message\n        /// </summary>\n        public int Id { get; }\n\n        /// <summary>\n        /// The code of the validation message\n        /// </summary>\n        public string Code { get; }\n\n        /// <summary>\n        /// Documentation Url for the Message\n        /// </summary>\n        public string DocUrl { get; }\n\n        /// <summary>\n        /// Type for the Message\n        /// </summary>\n        public MessageType Mode { get; }\n\n        /// <summary>\n        /// Return a location of the given JSON token `t` in the document `j`.\n        /// </summary>\n        /// <param name=\"jsonDoc\"></param>\n        /// <param name=\"jsonToken\"></param>\n        /// <returns>a string in this format `fileName:lineNumber:linePosition`</returns>\n        private static string Location(IJsonDocument jsonDoc, JToken jsonToken)\n        {\n            // up cast.\n            IJsonLineInfo x = jsonToken;\n            return x == null ? \n                null : \n                $\"{ObjectPath.FileNameNorm(jsonDoc.FileName)}:{x.LineNumber}:{x.LinePosition}\";\n        }\n\n        public string OldLocation() => Location(OldDoc, OldJson());\n\n        public string NewLocation() => Location(NewDoc, NewJson());\n\n        public string GetValidationMessagesAsJson()\n        {\n            var rawMessage = new JsonComparisonMessage\n            {\n                id = Id.ToString(),\n                code = Code.ToString(),\n                message = Message,\n                type = Severity.ToString(),\n                docUrl = DocUrl.ToString(),\n                mode = Mode.ToString(),\n                old = new JsonLocation\n                {\n                    @ref = OldJsonRef,\n                    path = OldJson()?.Path,\n                    location = OldLocation(),\n                },\n                @new = new JsonLocation\n                {\n                    @ref = NewJsonRef,\n                    path = NewJson()?.Path,\n                    location = NewLocation(),\n                }\n            };\n\n            return JsonConvert.SerializeObject(\n                rawMessage, \n                Formatting.Indented,\n                new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore }\n            );\n        }\n\n        public override string ToString()\n            => $\"code = {Code}, type = {Severity}, message = {Message}, docurl = {DocUrl}, mode = {Mode}\";\n    }\n\n    public class CustomComparer : IEqualityComparer<ComparisonMessage>\n    {\n        public bool Equals(ComparisonMessage message1, ComparisonMessage message2)\n            => message1.Message == message2.Message;\n\n        public int GetHashCode(ComparisonMessage obj)\n            => obj.Message.GetHashCode();\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/ComparisonMessages.cs",
    "content": "﻿namespace AutoRest.Swagger\n{\n    public static class ComparisonMessages\n    {\n        public static MessageTemplate RemovedProperty = new MessageTemplate\n        {\n            Id = 1033,\n            Code = nameof(ComparisonMessages.RemovedProperty),\n            Message = \"The new version is missing a property found in the old version. Was '{0}' renamed or removed?\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate AddedRequiredProperty = new MessageTemplate\n        {\n            Id = 1034,\n            Code = nameof(ComparisonMessages.AddedRequiredProperty),\n            Message = \"The new version lists new non-read-only properties as required: '{0}'. These properties were not listed as required in the old version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate AddedReadOnlyPropertyInResponse = new MessageTemplate\n        {\n            Id = 1040,\n            Code = nameof(ComparisonMessages.AddedReadOnlyPropertyInResponse),\n            Message = \"The new version has a new read-only property '{0}' in response that was not found in the old version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate AddedPropertyInResponse = new MessageTemplate\n        {\n            Id = 1041,\n            Code = nameof(ComparisonMessages.AddedPropertyInResponse),\n            Message = \"The new version has a new property '{0}' in response that was not found in the old version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate AddedOptionalProperty = new MessageTemplate\n        {\n            Id = 1045,\n            Code = nameof(ComparisonMessages.AddedOptionalProperty),\n            Message = \"The new version has a new optional property '{0}' that was not found in the old version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RemovedDefinition = new MessageTemplate\n        {\n            Id = 1006,\n            Code = nameof(ComparisonMessages.RemovedDefinition),\n            Message = \"The new version is missing a definition that was found in the old version. Was '{0}' removed or renamed?\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate RemovedPath = new MessageTemplate\n        {\n            Id = 1005,\n            Code = nameof(ComparisonMessages.RemovedPath),\n            Message = \"The new version is missing a path that was found in the old version. Was path '{0}' removed or restructured?\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate AddedPath = new MessageTemplate\n        {\n            Id = 1038,\n            Code = nameof(ComparisonMessages.AddedPath),\n            Message = \"The new version is adding a path that was not found in the old version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RemovedOperation = new MessageTemplate\n        {\n            Id = 1035,\n            Code = nameof(ComparisonMessages.RemovedOperation),\n            Message = \"The new version is missing an operation that was found in the old version. Was operationId '{0}' removed or restructured?\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate ModifiedOperationId = new MessageTemplate\n        {\n            Id = 1008,\n            Code = nameof(ComparisonMessages.ModifiedOperationId),\n            Message = \"The operation id has been changed from '{0}' to '{1}'. This will impact generated code.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate AddedOperation = new MessageTemplate\n        {\n            Id = 1039,\n            Code = nameof(ComparisonMessages.AddedOperation),\n            Message = \"The new version is adding an operation that was not found in the old version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RemovedRequiredParameter = new MessageTemplate\n        {\n            Id = 1009,\n            Code = nameof(ComparisonMessages.RemovedRequiredParameter),\n            Message = \"The required parameter '{0}' was removed in the new version.\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate RemovedOptionalParameter = new MessageTemplate\n        {\n            Id = 1046,\n            Code = nameof(ComparisonMessages.RemovedOptionalParameter),\n            Message = \"The optional parameter '{0}' was removed in the new version.\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate ChangedParameterOrder = new MessageTemplate\n        {\n            Id = 1042,\n            Code = nameof(ComparisonMessages.ChangedParameterOrder),\n            Message = \"The order of parameter with Name: '{0}', In: '{1}', was changed. Expected param at index '{2}' but instead found it at index '{3}'.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate AddingRequiredParameter = new MessageTemplate\n        {\n            Id = 1010,\n            Code = nameof(ComparisonMessages.AddingRequiredParameter),\n            Message = \"The required parameter '{0}' was added in the new version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate AddingOptionalParameter = new MessageTemplate\n        {\n            Id = 1043,\n            Code = nameof(ComparisonMessages.AddingOptionalParameter),\n            Message = \"The optional parameter '{0}' was added in the new version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RequiredStatusChange = new MessageTemplate\n        {\n            Id = 1025,\n            Code = nameof(ComparisonMessages.RequiredStatusChange),\n            Message = \"The 'required' status changed from the old version('{0}') to the new version('{1}').\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate TypeChanged = new MessageTemplate\n        {\n            Id = 1026,\n            Code = nameof(ComparisonMessages.TypeChanged),\n            Message = \"The new version has a different type '{0}' than the previous one '{1}'.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate RemovedEnumValue = new MessageTemplate\n        {\n            Id = 1019,\n            Code = nameof(ComparisonMessages.RemovedEnumValue),\n            Message = \"The new version is removing enum value(s) '{0}' from the old version.\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate AddedEnumValue = new MessageTemplate\n        {\n            Id = 1020,\n            Code = nameof(ComparisonMessages.AddedEnumValue),\n            Message = \"The new version is adding enum value(s) '{0}' from the old version.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate ConstraintIsStronger = new MessageTemplate\n        {\n            Id = 1024,\n            Code = nameof(ComparisonMessages.ConstraintIsStronger),\n            Message = \"The new version has a more constraining '{0}' value than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate ConstraintIsWeaker = new MessageTemplate\n        {\n            Id = 1037,\n            Code = nameof(ComparisonMessages.ConstraintIsWeaker),\n            Message = \"The new version has a less constraining '{0}' value than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate ReadonlyPropertyChanged = new MessageTemplate\n        {\n            Id = 1029,\n            Code = nameof(ComparisonMessages.ReadonlyPropertyChanged),\n            Message = \"The read only property has changed from '{0}' to '{1}'.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate VersionsReversed = new MessageTemplate\n        {\n            Id = 1000,\n            Code = nameof(ComparisonMessages.VersionsReversed),\n            Message = \"The new version has a lower value than the old: {0} -> {1}\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate NoVersionChange = new MessageTemplate\n        {\n            Id = 1001,\n            Code = nameof(ComparisonMessages.NoVersionChange),\n            Message = \"The versions have not changed.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate ProtocolNoLongerSupported = new MessageTemplate\n        {\n            Id = 1002,\n            Code = nameof(ComparisonMessages.ProtocolNoLongerSupported),\n            Message = \"The new version does not support '{0}' as a protocol.\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate RequestBodyFormatNoLongerSupported = new MessageTemplate\n        {\n            Id = 1003,\n            Code = nameof(ComparisonMessages.RequestBodyFormatNoLongerSupported),\n            Message = \"The new version does not support '{0}' as a request body format.\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate ResponseBodyFormatNowSupported = new MessageTemplate\n        {\n            Id = 1004,\n            Code = nameof(ComparisonMessages.ResponseBodyFormatNowSupported),\n            Message = \"The old version did not support '{0}' as a response body format.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RemovedClientParameter = new MessageTemplate\n        {\n            Id = 1007,\n            Code = nameof(ComparisonMessages.RemovedClientParameter),\n            Message = \"The new version is missing a client parameter that was found in the old version. Was '{0}' removed or renamed?\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate AddingResponseCode = new MessageTemplate\n        {\n            Id = 1011,\n            Code = nameof(ComparisonMessages.AddingResponseCode),\n            Message = \"The new version adds a response code '{0}'.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RemovedResponseCode = new MessageTemplate\n        {\n            Id = 1012,\n            Code = nameof(ComparisonMessages.RemovedResponseCode),\n            Message = \"The new version removes the response code '{0}'\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate AddingHeader = new MessageTemplate\n        {\n            Id = 1013,\n            Code = nameof(ComparisonMessages.AddingHeader),\n            Message = \"The new version adds a required header '{0}'.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RemovingHeader = new MessageTemplate\n        {\n            Id = 1014,\n            Code = nameof(ComparisonMessages.RemovingHeader),\n            Message = \"The new version removs a required header '{0}'.\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate ParameterInHasChanged = new MessageTemplate\n        {\n            Id = 1015,\n            Code = nameof(ComparisonMessages.ParameterInHasChanged),\n            Message = \"How the parameter is passed has changed -- it used to be '{0}', now it is '{1}'.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate ConstantStatusHasChanged = new MessageTemplate\n        {\n            Id = 1016,\n            Code = nameof(ComparisonMessages.ConstantStatusHasChanged),\n            Message = \"The 'constant' status changed from the old version to the new.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate ReferenceRedirection = new MessageTemplate\n        {\n            Id = 1017,\n            Code = nameof(ComparisonMessages.ReferenceRedirection),\n            Message = \"The '$ref' property points to different models in the old and new versions.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate AddedAdditionalProperties = new MessageTemplate\n        {\n            Id = 1021,\n            Code = nameof(ComparisonMessages.AddedAdditionalProperties),\n            Message = \"The new version adds an 'additionalProperties' element.\",\n            Type = MessageType.Addition\n        };\n\n        public static MessageTemplate RemovedAdditionalProperties = new MessageTemplate\n        {\n            Id = 1022,\n            Code = nameof(ComparisonMessages.RemovedAdditionalProperties),\n            Message = \"The new version removes the 'additionalProperties' element.\",\n            Type = MessageType.Removal\n        };\n\n        public static MessageTemplate TypeFormatChanged = new MessageTemplate\n        {\n            Id = 1023,\n            Code = nameof(ComparisonMessages.TypeFormatChanged),\n            Message = \"The new version has a different format '{0}' than the previous one '{1}'.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate DefaultValueChanged = new MessageTemplate\n        {\n            Id = 1027,\n            Code = nameof(ComparisonMessages.DefaultValueChanged),\n            Message = \"The new version has a different default value than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate ArrayCollectionFormatChanged = new MessageTemplate\n        {\n            Id = 1028,\n            Code = nameof(ComparisonMessages.ArrayCollectionFormatChanged),\n            Message = \"The new version has a different array collection format than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate DifferentDiscriminator = new MessageTemplate\n        {\n            Id = 1030,\n            Code = nameof(ComparisonMessages.DifferentDiscriminator),\n            Message = \"The new version has a different discriminator than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate DifferentExtends = new MessageTemplate\n        {\n            Id = 1031,\n            Code = nameof(ComparisonMessages.DifferentExtends),\n            Message = \"The new version has a different 'extends' property than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate DifferentAllOf = new MessageTemplate\n        {\n            Id = 1032,\n            Code = nameof(ComparisonMessages.DifferentAllOf),\n            Message = \"The new version has a different 'allOf' property than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate ConstraintChanged = new MessageTemplate\n        {\n            Id = 1036,\n            Code = nameof(ComparisonMessages.ConstraintChanged),\n            Message = \"The new version has a different '{0}' value than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate XmsLongRunningOperationChanged = new MessageTemplate\n        {\n            Id = 1044,\n            Code = nameof(ComparisonMessages.XmsLongRunningOperationChanged),\n            Message = \"The new version has a different 'x-ms-longrunning-operation' value than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate XmsEnumChanged = new MessageTemplate\n        {\n            Id = 1047,\n            Code = nameof(ComparisonMessages.XmsEnumChanged),\n            Message = \"The new version has a different x-ms-enum '{0}' than the previous one.\",\n            Type = MessageType.Update\n        };\n\n        public static MessageTemplate AddedXmsEnum = new MessageTemplate\n        {\n            Id = 1048,\n            Code = nameof(ComparisonMessages.AddedXmsEnum),\n            Message = \"The new version adds a x-ms-enum extension.\",\n            Type = MessageType.Addition\n        };\n        public static MessageTemplate RemovedXmsEnum = new MessageTemplate\n        {\n            Id = 1049,\n            Code = nameof(ComparisonMessages.RemovedXmsEnum),\n            Message = \"The new version is missing a 'x-ms-enum' found in the old version.\",\n            Type = MessageType.Removal\n        };\n        public static MessageTemplate ParameterLocationHasChanged = new MessageTemplate\n        {\n            Id = 1050,\n            Code = nameof(ComparisonMessages.ParameterLocationHasChanged),\n            Message = \"Parameter location has changed. Name: '{0}'. In: '{1}'. Old location is method: '{2}'. New location is method: '{3}'.\",\n            Type = MessageType.Update\n        };\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/JsonComparisonMessage.cs",
    "content": "﻿namespace AutoRest.Swagger\n{\n    sealed class JsonComparisonMessage\n    {\n        public string id;\n\n        public string code;\n\n        public string message;\n\n        public JsonLocation old;\n\n        public JsonLocation @new;\n\n        public string type;\n\n        public string docUrl;\n\n        public string mode;\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/JsonLocation.cs",
    "content": "﻿namespace AutoRest.Swagger\n{\n    sealed class JsonLocation\n    {\n        public string @ref;\n\n        public string path;\n\n        public string location;\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/MessageTemplate.cs",
    "content": "﻿\nnamespace AutoRest.Swagger\n{\n    public class MessageTemplate\n    {\n        public MessageTemplate()\n        {\n        }\n\n        public MessageTemplate(int id, string code, string message, MessageType type)\n        {\n            Code = code;\n            Id = id;\n            Message = message;\n            Type = type;\n        }\n\n        public int Id { get; set; }\n\n        public string Code { get; set; }\n\n        public string Message { get; set; }\n\n        public MessageType Type { get; set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/MessageType.cs",
    "content": "﻿namespace AutoRest.Swagger\n{\n    public enum MessageType\n    {\n        Addition,\n        Update,\n        Removal\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/ApiKeyLocation.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace AutoRest.Swagger.Model\n{\n    public enum ApiKeyLocation\n    {\n        None,\n        Query,\n        Header\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/DataType.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Swagger data type.\n    /// </summary>\n    public enum DataType\n    {\n        None,\n        String,\n        Number,\n        Integer,\n        Boolean,\n        Array,\n        File,\n        Object\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/ExternalDoc.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Allows referencing an external resource for extended documentation.\n    /// </summary>\n    public class ExternalDoc\n    {\n        /// <summary>\n        /// Url of external Swagger doc.\n        /// </summary>\n        public string Url { get; set; }\n\n        /// <summary>\n        /// Description of external Swagger doc.\n        /// </summary>\n        public string Description { get; set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/Header.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Swagger header object.\n    /// </summary>\n    public class Header : SwaggerObject<Header>\n    {        \n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/Info.cs",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing Newtonsoft.Json;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// The object provides metadata about the API. \n    /// The metadata can be used by the clients if needed, and can be presented \n    /// in the Swagger-UI for convenience.\n    /// </summary>\n    public class Info : SpecObject\n    {\n        public string Title { get; set; }\n        \n        public string Version { get; set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/OAuthFlow.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace AutoRest.Swagger.Model\n{\n    public enum OAuthFlow\n    {\n        None,\n        Implicit,\n        Password,\n        Application,\n        AccessCode\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/Operation.cs",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Describes a single API operation on a path.\n    /// </summary>\n    public class Operation : SwaggerBase<Operation>\n    {\n        public Operation()\n        {\n            Consumes = new List<string>();\n            Produces = new List<string>();\n        }\n\n        /// <summary>\n        /// A list of tags for API documentation control.\n        /// </summary>\n        public IList<string> Tags { get; set; }\n\n        /// <summary>\n        /// A friendly serviceTypeName for the operation. The id MUST be unique among all\n        /// operations described in the API. Tools and libraries MAY use the\n        /// operation id to uniquely identify an operation.\n        /// </summary>\n        public string OperationId { get; set; }\n\n        public string Summary { get; set; }\n        public string Description { get; set; }\n\n        /// <summary>\n        /// Additional external documentation for this operation.\n        /// </summary>\n        public ExternalDoc ExternalDocs { get; set; }\n\n        /// <summary>\n        /// A list of MIME types the operation can consume.\n        /// </summary>\n        public IList<string> Consumes { get; set; }\n\n        /// <summary>\n        /// A list of MIME types the operation can produce.\n        /// </summary>\n        public IList<string> Produces { get; set; }\n\n        /// <summary>\n        /// A list of parameters that are applicable for this operation.\n        /// If a parameter is already defined at the Path Item, the\n        /// new definition will override it, but can never remove it.\n        /// </summary>\n        public IList<SwaggerParameter> Parameters { get; set; } = new List<SwaggerParameter>();\n\n        /// <summary>\n        /// The list of possible responses as they are returned from executing this operation.\n        /// </summary>\n        public Dictionary<string, OperationResponse> Responses { get; set; }\n\n        /// <summary>\n        /// The transfer protocol for the operation.\n        /// </summary>\n        public IList<TransferProtocolScheme> Schemes { get; set; }\n\n        public bool Deprecated { get; set; }\n\n        /// <summary>\n        /// A declaration of which security schemes are applied for this operation.\n        /// The list of values describes alternative security schemes that can be used\n        /// (that is, there is a logical OR between the security requirements).\n        /// This definition overrides any declared top-level security. To remove a\n        /// top-level security declaration, an empty array can be used.\n        /// </summary>\n        public IList<Dictionary<string, List<string>>> Security { get; set; }\n\n        /// <summary>\n        /// Compare a modified document node (this) to a previous one and look for breaking as well as non-breaking changes.\n        /// </summary>\n        /// <param name=\"context\">The modified document context.</param>\n        /// <param name=\"previous\">The original document model.</param>\n        /// <returns>A list of messages from the comparison.</returns>\n        public override IEnumerable<ComparisonMessage> Compare(\n            ComparisonContext<ServiceDefinition> context,\n            Operation previous\n        )\n        {\n            Operation priorOperation = previous;\n\n            if (priorOperation == null)\n            {\n                throw new ArgumentException(\"previous\");\n            }\n\n            base.Compare(context, previous);\n\n            if (OperationId != priorOperation.OperationId)\n            {\n                context.LogBreakingChange(ComparisonMessages.ModifiedOperationId, priorOperation.OperationId, OperationId);\n            }\n            Extensions.TryGetValue(\"x-ms-long-running-operation\", out var currentLongRunningOperationValue);\n            priorOperation.Extensions.TryGetValue(\"x-ms-long-running-operation\", out var priorLongRunningOperationValue);\n\n            currentLongRunningOperationValue = currentLongRunningOperationValue ?? false;\n            priorLongRunningOperationValue = priorLongRunningOperationValue ?? false;\n            if (!currentLongRunningOperationValue.Equals(priorLongRunningOperationValue))\n            {\n                context.LogBreakingChange(ComparisonMessages.XmsLongRunningOperationChanged);\n            }\n\n            CheckParameters(context, priorOperation);\n\n            // Check that all the request body formats that were accepted still are.\n\n            context.PushProperty(\"consumes\");\n            foreach (var format in priorOperation.Consumes)\n            {\n                if (!Consumes.Contains(format))\n                {\n                    context.LogBreakingChange(ComparisonMessages.RequestBodyFormatNoLongerSupported, format);\n                }\n            }\n            context.Pop();\n\n            // Check that all the response body formats were also supported by the old version.\n\n            context.PushProperty(\"produces\");\n            foreach (var format in Produces)\n            {\n                if (!priorOperation.Produces.Contains(format))\n                {\n                    context.LogBreakingChange(ComparisonMessages.ResponseBodyFormatNowSupported, format);\n                }\n            }\n            context.Pop();\n\n            if (Responses != null && priorOperation.Responses != null)\n            {\n                context.PushProperty(\"responses\");\n                foreach (var response in Responses)\n                {\n                    var oldResponse = priorOperation.FindResponse(response.Key);\n\n                    context.PushProperty(response.Key);\n\n                    if (oldResponse == null)\n                    {\n                        context.LogBreakingChange(ComparisonMessages.AddingResponseCode, response.Key);\n                    }\n                    else\n                    {\n                        response.Value.Compare(context, oldResponse);\n                    }\n\n                    context.Pop();\n                }\n\n                foreach (var response in priorOperation.Responses)\n                {\n                    var newResponse = this.FindResponse(response.Key);\n\n                    if (newResponse == null)\n                    {\n                        context.PushProperty(response.Key);\n                        context.LogBreakingChange(ComparisonMessages.RemovedResponseCode, response.Key);\n                        context.Pop();\n                    }\n                }\n                context.Pop();\n            }\n\n            return context.Messages;\n        }\n\n        /// <summary>\n        /// Check that no parameters were removed or reordered, and compare them if it's not the case\n        /// </summary>\n        /// <param name=\"context\">Comparison Context</param>\n        /// <param name=\"priorOperation\">Operation object of old swagger</param>\n        private void CheckParameters(ComparisonContext<ServiceDefinition> context, Operation priorOperation)\n        {\n            ServiceDefinition currentRoot = context.CurrentRoot;\n            ServiceDefinition previousRoot = context.PreviousRoot;\n\n            context.PushProperty(\"parameters\");\n\n            List<(SwaggerParameter param, bool isGlobal)> currParamsResolved =\n                Parameters.Select(param => ResolveParam(param, currentRoot)).ToList();\n\n            List<(SwaggerParameter param, bool isGlobal)> priorParamsResolved =\n                priorOperation.Parameters.Select(param => ResolveParam(param, previousRoot)).ToList();\n\n            DetectChangedParameterLocation(context, currParamsResolved, priorParamsResolved);\n            DetectChangedParameterOrder(context, currParamsResolved, priorParamsResolved);\n\n            foreach (var paramInfo in priorParamsResolved)\n            {\n                (SwaggerParameter oldParam, bool _) = paramInfo;\n                SwaggerParameter newParam = FindParameterEx(oldParam, Parameters, currentRoot.Parameters);\n\n                // we should use PushItemByName instead of PushProperty because Swagger `parameters` is\n                // an array of parameters.\n                context.PushItemByName(oldParam.Name);\n\n                if (newParam != null)\n                {\n                    newParam.Compare(context, oldParam);\n                }\n                else if (oldParam.IsRequired)\n                {\n                    // Removed required parameter\n                    context.LogBreakingChange(ComparisonMessages.RemovedRequiredParameter, oldParam.Name);\n                } else {\n                    // Removed optional parameter\n                    context.LogBreakingChange(ComparisonMessages.RemovedOptionalParameter, oldParam.Name);\n                }\n\n                context.Pop();\n            }\n\n            // Check that no required or optional parameters were added.\n            List<SwaggerParameter> allParameters = Parameters.Select(\n                    param =>\n                        string.IsNullOrWhiteSpace(param.Reference)\n                            ? param\n                            : FindReferencedParameter(param.Reference, currentRoot.Parameters))\n                .Where(p => p != null).ToList();\n\n            foreach (SwaggerParameter newParam in allParameters)\n            {\n                SwaggerParameter oldParam = FindParameterEx(newParam, priorOperation.Parameters, previousRoot.Parameters);\n\n                if (oldParam != null)\n                    continue;\n\n                // Did not find required parameter in the old swagger i.e. required parameter is added\n                context.PushItemByName(newParam.Name);\n\n                context.LogBreakingChange(\n                    newParam.IsRequired\n                        ? ComparisonMessages.AddingRequiredParameter\n                        : ComparisonMessages.AddingOptionalParameter,\n                    newParam.Name);\n\n                context.Pop();\n            }\n            context.Pop();\n        }\n\n        private static (SwaggerParameter param, bool isGlobal) ResolveParam(SwaggerParameter param, ServiceDefinition serviceDef)\n            => string.IsNullOrWhiteSpace(param.Reference)\n                ? (param, false)\n                : (FindReferencedParameter(param.Reference, serviceDef.Parameters), true);\n\n        /// <summary>\n        /// Report breaking change if parameter location has changed.\n        /// See \"1050 - ParameterLocationHasChanged\" in docs/rules/1050.md for details.\n        ///\n        /// We report ComparisonMessages.ParameterLocationHasChanged breaking change only if\n        /// given parameter existed in the previous version, still exists in the new version, and its location has changed.\n        /// </summary>\n        private void DetectChangedParameterLocation(\n            ComparisonContext<ServiceDefinition> context,\n            List<(SwaggerParameter param, bool isGlobal)> currParamsInfo,\n            List<(SwaggerParameter param, bool isGlobal)> priorParamsInfo)\n        {\n            priorParamsInfo.ForEach(\n                priorParamInfo\n                    =>\n                {\n                    (SwaggerParameter param, bool isGlobal) matchingCurrParamInfo = currParamsInfo.FirstOrDefault(\n                        currParamInfo => ParamsAreSame(currParamInfo.param, priorParamInfo.param));\n                    if (matchingCurrParamInfo != default)\n                    {\n                        var priorLocationIsMethod = ParamLocationIsMethod(priorParamInfo);\n                        var currLocationIsMethod = ParamLocationIsMethod(matchingCurrParamInfo);\n                        if (priorLocationIsMethod ^ currLocationIsMethod)\n                        {\n                            context.LogBreakingChange(\n                                ComparisonMessages.ParameterLocationHasChanged,\n                                priorParamInfo.param.Name,\n                                priorParamInfo.param.In,\n                                priorLocationIsMethod,\n                                currLocationIsMethod);\n                        }\n                    }\n                    else\n                    {\n                        // The parameter existed in the previous version but does not exist in the new version\n                        // hence its location could not have changed.\n                    }\n                });\n        }\n\n        /// <summary>\n        /// This method reports breaking change on parameters whose order matters and it has changed.\n        ///\n        /// This method works by first filtering out all parameters whose order does not matter.\n        /// To see how do we determine if parameter order matters, consult the ParamOrderMatters method.\n        ///\n        /// Once we have the collection of current and prior params whose order matters, we compare their order\n        /// by index. If at any point current and prior params differ (see implementation of this method\n        /// to see how we determine if two params differ), then we report a breaking change.\n        ///\n        /// If a new parameter, whose order matters, was added to current version, we will not report any\n        /// breaking changes on it as it didn't exist before. However, its addition may still shift\n        /// other parameters' order, and that will be reported as breaking change. E.g.:\n        /// [Foo, Bar] -> [Qux, Foo, Bar].\n        /// Here Qux has been added thus shifting Foo and Bar's order.\n        ///\n        /// If a parameter definition has changed in such a way that its order now matters, but previously\n        /// it did not, then we will not report a ComparisonMessages.ChangedParameterOrder breaking change\n        /// on that parameters, but we do expect a different breaking change will be reported by a different rule.\n        /// For example, if parameter location was converted from \"client\" to \"method\" then\n        /// ComparisonMessages.ParameterLocationHasChanged should be reported.\n        /// \n        /// If a parameter definition has changed in such a way that its order previously mattered,\n        /// but now it does not, then we will not report a ComparisonMessages.ChangedParameterOrder breaking change\n        /// on that parameter, but we do expect a different breaking change will be reported by a different rule.\n        /// For example, if parameter location was converted from \"method\" to \"client\" then\n        /// ComparisonMessages.ParameterLocationHasChanged should be reported.\n        /// \n        /// Additional context provided at:\n        /// https://github.com/Azure/azure-sdk-tools/issues/7170#issuecomment-2162156876\n        /// </summary>\n        private void DetectChangedParameterOrder(\n            ComparisonContext<ServiceDefinition> context,\n            List<(SwaggerParameter param, bool isGlobal)> currParamsInfo,\n            List<(SwaggerParameter param, bool isGlobal)> priorParamsInfo)\n        {\n            SwaggerParameter[] currParamsResolvedOrdered =\n                currParamsInfo.Where(ParamOrderMatters).Select(paramInfo => paramInfo.param).ToArray();\n\n            SwaggerParameter[] priorParamsResolvedOrdered =\n                priorParamsInfo.Where(ParamOrderMatters).Select(paramInfo => paramInfo.param).ToArray();\n\n            int currParamsCount = currParamsResolvedOrdered.Length;\n            int priorParamsCount = priorParamsResolvedOrdered.Length;\n\n            int paramIndex = 0;\n            while (paramIndex < priorParamsCount)\n            {\n                SwaggerParameter currParamAtIndex =\n                    paramIndex < currParamsCount ? currParamsResolvedOrdered[paramIndex] : null;\n                SwaggerParameter priorParamAtIndex = priorParamsResolvedOrdered[paramIndex];\n\n                if (!ParamsAreSame(currParamAtIndex, priorParamAtIndex))\n                {\n                    int newParamIndex = FindParameterIndex(priorParamAtIndex, currParamsResolvedOrdered);\n                    bool paramOrderDoesMatterInNewSpec = newParamIndex != -1;\n\n                    if (paramOrderDoesMatterInNewSpec)\n                    {\n                        context.LogBreakingChange(\n                            ComparisonMessages.ChangedParameterOrder,\n                            priorParamAtIndex.Name,\n                            priorParamAtIndex.In,\n                            paramIndex,\n                            newParamIndex);\n                    }\n                    else\n                    {\n                        // If param order does not matter in the new spec we not report ComparisonMessages.ChangedParameterOrder breaking change.\n                        // However, it is still a breaking change to a) change the parameter location so that its order doesn't matter, \n                        // OR b) to remove a parameter altogether.\n                        // We expect other breaking changes to be reported in such case like e.g. ComparisonMessages.ParameterLocationHasChanged.\n                    }\n                }\n\n                paramIndex++;\n            }\n        }\n\n        /// <summary>\n        /// Here we assume a parameter is uniquely identified by the pair of its properties : \"Name\" and \"In\".\n        /// </summary>\n        private static bool ParamsAreSame(SwaggerParameter currParam, SwaggerParameter priorParam)\n            => currParam != null && priorParam != null && currParam.Name == priorParam.Name &&\n               currParam.In == priorParam.In;\n\n        /// <summary>\n        /// We assume that parameter location is \"method\" if, and only if, its order matters.\n        /// </summary>\n        private bool ParamLocationIsMethod((SwaggerParameter param, bool isGlobal) paramInfo)\n            => ParamOrderMatters(paramInfo);\n\n        /// <summary>\n        /// Determines if given parameter's order matters. See the comments within this method for details,\n        /// as well as comment on DetectChangedParameterOrder method.\n        /// </summary>\n        private bool ParamOrderMatters((SwaggerParameter param, bool isGlobal) paramInfo)\n        {\n            if (!paramInfo.isGlobal)\n            {\n                // If the parameter is not a global parameter then we assume its order matters.\n                // We assume this because we assume that the parameters are generated into C# code\n                // via AutoRest implementation. According to this implementation example in [1],\n                // these parameters are by default method parameters, hence their order matters.\n                // We also assume, as explained in [2], that it is not possible to override parameter\n                // location to one whose order doesn't matter: the extension \"x-ms-parameter-location\"\n                // will be ignored even if defined.\n                // [1] https://github.com/Azure /autorest/blob/765bc784b0cad173d47f931a04724936a6948b4c/docs/generate/how-autorest-generates-code-from-openapi.md#specifying-required-parameters-and-properties\n                // [2] https://github.com/Azure/autorest/blob/765bc784b0cad173d47f931a04724936a6948b4c/docs/extensions/readme.md#x-ms-parameter-location\n                return true;\n            }\n\n            paramInfo.param.Extensions.TryGetValue(\"x-ms-parameter-location\", out object paramLocation);\n\n            // Per [2], if the global parameter definition does not declare \"x-ms-parameter-location\"\n            // then we assume it defaults to \"client\" and so its order does not matter.\n            // If the global parameter definition declares \"x-ms-parameter-location\" \n            // to any value different from \"method\", then we assume its order does not matter.\n            // Otherwise, parameter either is not a global parameter, or its \"x-ms-parameter-location\" key\n            // is set to \"method\", hence its order matters.\n            // [2] https://github.com/Azure/autorest/blob/765bc784b0cad173d47f931a04724936a6948b4c/docs/extensions/readme.md#x-ms-parameter-location\n            return paramLocation != null && paramLocation.Equals(\"method\");\n        }\n\n        /// <summary>\n        /// Finds given parameter in the list of operation parameters or global parameters\n        /// </summary>\n        /// <param name=\"parameter\">the parameter to search</param>\n        /// <param name=\"operationParameters\">list of operation parameters to search</param>\n        /// <param name=\"clientParameters\">Dictionary of global parameters to search</param>\n        /// <returns>Swagger Parameter if found; otherwise null</returns>\n        private SwaggerParameter FindParameterEx(\n            SwaggerParameter parameter,\n            IList<SwaggerParameter> operationParameters,\n            IDictionary<string, SwaggerParameter> clientParameters)\n        {\n            if (Parameters != null)\n            {\n                // first try to find the param has same 'name' and 'in'\n                foreach (SwaggerParameter param in operationParameters)\n                {\n                    if (parameter.Name.Equals(param.Name) && parameter.In.Equals(param.In))\n                        return param;\n\n                    var pRef = FindReferencedParameter(param.Reference, clientParameters);\n\n                    if (pRef != null && parameter.Name.Equals(pRef.Name) && parameter.In.Equals(pRef.In))\n                    {\n                        return pRef;\n                    }\n                }\n            }\n            \n            // then try to find the parameter has same 'name'\n            return FindParameter(parameter.Name, operationParameters, clientParameters);\n        }\n\n        /// <summary>\n        /// Finds give parameter name in the list of operation parameters or global parameters\n        /// </summary>\n        /// <param name=\"name\">name of the parameter to search</param>\n        /// <param name=\"operationParameters\">list of operation parameters to search</param>\n        /// <param name=\"clientParameters\">Dictionary of global parameters to search</param>\n        /// <returns>Swagger Parameter if found; otherwise null</returns>\n        private SwaggerParameter FindParameter(string name, IEnumerable<SwaggerParameter> operationParameters, IDictionary<string, SwaggerParameter> clientParameters)\n        {\n            if (Parameters != null)\n            {\n                foreach (var param in operationParameters)\n                {\n                    if (name.Equals(param.Name))\n                        return param;\n\n                    var pRef = FindReferencedParameter(param.Reference, clientParameters);\n\n                    if (pRef != null && name.Equals(pRef.Name))\n                    {\n                        return pRef;\n                    }\n                }\n            }\n            return null;\n        }\n\n        private int FindParameterIndex(SwaggerParameter parameter, IList<SwaggerParameter> operationParameters)\n        {\n            for (int i = 0; i < operationParameters.Count; i++)\n            {\n                if (ParamsAreSame(operationParameters.ElementAt(i), parameter))\n                {\n                    return i;\n                }\n            }\n            return -1;\n        }\n\n        private OperationResponse FindResponse(string name)\n        {\n            Responses.TryGetValue(name, out var response);\n            return response;\n        }\n\n        /// <summary>\n        /// Finds referenced parameter\n        /// </summary>\n        /// <param name=\"reference\">Name of the reference to search for. Expected to be in format of #/parameters/{paramName}</param>\n        /// <param name=\"parameters\">Dictionary of parameters for the search. Expected to be keyed with {paramName}s</param>\n        /// <returns>Swagger Parameter if found; otherwise null</returns>\n        private static SwaggerParameter FindReferencedParameter(\n            string reference,\n            IDictionary<string, SwaggerParameter> parameters)\n        {\n            if (reference != null && reference.StartsWith(\"#\", StringComparison.Ordinal))\n            {\n                string[] parts = reference.Split('/');\n                if (parts.Length == 3 && parts[1].Equals(\"parameters\"))\n                {\n                    if (parameters.TryGetValue(parts[2], out var param))\n                    {\n                        return param;\n                    }\n                    else\n                    {\n                        // Given the parameter reference of form\n                        // #/parameters/<paramName>\n                        // the parameter named <paramName> could not be found in the \"parameters\"\n                        // input to this method.\n                        // Silently ignoring that param reference by doing nothing here.\n                    }\n                }\n                else\n                {\n                    // The parameter reference does not conform to the format of: \n                    // #/parameters/<paramName>\n                    // because it has different number of elements or its second element is not \"parameters\".\n                    // Silently ignoring that param reference by doing nothing here.\n                }\n            }\n            else\n            {\n                // The reference is null or does not start with \"#\".\n                // Silently ignoring it by doing nothing here.\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/ParameterLocation.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// The location of the parameter.\n    /// </summary>\n    public enum ParameterLocation\n    {\n        None,\n        Query,\n        Header,\n        Path,\n        FormData,\n        Body\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/Response.cs",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing System.Collections.Generic;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Describes a single response from an API Operation.\n    /// </summary>\n    public class OperationResponse : SwaggerBase<OperationResponse>\n    {\n        public string Description { get; set; }\n\n        public Schema Schema { get; set; }\n\n        public Dictionary<string, Header> Headers { get; set; }\n\n        public Dictionary<string, object> Examples { get; set; }\n\n        /// <summary>\n        /// Compare a modified document node (this) to a previous one and look for breaking as well as non-breaking changes.\n        /// </summary>\n        /// <param name=\"context\">The modified document context.</param>\n        /// <param name=\"previous\">The original document model.</param>\n        /// <returns>A list of messages from the comparison.</returns>\n        public override IEnumerable<ComparisonMessage> Compare(\n            ComparisonContext<ServiceDefinition> context, OperationResponse previous)\n        {\n            var priorResponse = previous;\n\n            if (priorResponse == null)\n            {\n                throw new ArgumentNullException(\"previous\");\n            }\n            if (context == null)\n            {\n                throw new ArgumentNullException(\"context\");\n            }\n\n            context.Direction = DataDirection.Response;\n\n            base.Compare(context, previous);\n\n            var headers = Headers != null ? Headers : new Dictionary<string, Header>();\n            var priorHeaders = priorResponse.Headers != null ? priorResponse.Headers : new Dictionary<string, Header>();\n\n            context.PushProperty(\"headers\");\n            foreach (var header in headers)\n            {\n                context.PushProperty(header.Key);\n\n                if (!priorHeaders.TryGetValue(header.Key, out var oldHeader))\n                {\n                    context.LogInfo(ComparisonMessages.AddingHeader, header.Key);\n                }\n                else\n                {\n                    header.Value.Compare(context, oldHeader);\n                }\n\n                context.Pop();\n            }\n\n            foreach (var header in priorHeaders)\n            {\n                context.PushProperty(header.Key);\n\n                if (!headers.TryGetValue(header.Key, out var newHeader))\n                {\n                    context.LogBreakingChange(ComparisonMessages.RemovingHeader, header.Key);\n                }\n\n                context.Pop();\n            }\n            context.Pop();\n\n            // switch context to `schema` property.\n            context.PushProperty(\"schema\");\n            if (Schema != null && priorResponse.Schema != null)\n            {\n                Schema.Compare(context, priorResponse.Schema);\n            }\n            context.Pop();\n\n            context.Direction = DataDirection.None;\n\n            return context.Messages;\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/Schema.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\n\nusing Newtonsoft.Json;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Swagger schema object.\n    /// </summary>\n    public class Schema : SwaggerObject<Schema>\n    {\n        public string Title { get; set; }\n\n        /// <summary>\n        /// Adds support for polymorphism. The discriminator is the schema \n        /// property serviceTypeName that is used to differentiate between other schemas \n        /// that inherit this schema. The property serviceTypeName used MUST be defined \n        /// at this schema and it MUST be in the required property list. When used, \n        /// the value MUST be the serviceTypeName of this schema or any schema that inherits it,\n        /// or it can be overridden with the x-ms-discriminator-value extension.\n        /// </summary>\n        public string Discriminator { get; set; }\n\n        /// <summary>\n        /// Key is a type serviceTypeName.\n        /// </summary>\n        public Dictionary<string, Schema> Properties { get; set; }\n\n        public bool ReadOnly { get; set; }\n\n        public ExternalDoc ExternalDocs { get; set; }\n\n        public object Example { get; set; }\n\n        /// <summary>\n        /// The value of this property MUST be another schema which will provide \n        /// a base schema which the current schema will inherit from.  The\n        /// inheritance rules are such that any instance that is valid according\n        /// to the current schema MUST be valid according to the referenced\n        /// schema.  This MAY also be an array, in which case, the instance MUST\n        /// be valid for all the schemas in the array.  A schema that extends\n        /// another schema MAY define additional attributes, constrain existing\n        /// attributes, or add other constraints.\n        /// </summary>\n        public string Extends { get; set; }\n\n        //For now (till the PBI gets addressed for the refactoring work), a generic field is used\n        //for the reason that SwaggerParameter inherits from this class, but per spec, it's 'IsRequired' \n        //field should be boolean, not an array.\n        public IList<string> Required { get; set; }\n\n        /// <summary>\n        /// Defines the set of schemas this shema is composed of\n        /// </summary>\n        public IList<Schema> AllOf { get; set; }\n\n        [JsonIgnore]\n        internal bool IsReferenced { get; set; }\n\n        private DataDirection _compareDirection = DataDirection.None;\n\n        private LinkedList<Schema> _visitedSchemas = new LinkedList<Schema>();\n\n        /// <inheritdoc />\n        /// <summary>\n        /// Compare a modified document node (this) to a previous one and look for breaking as well as non-breaking changes.\n        /// </summary>\n        /// <param name=\"context\">The modified document context.</param>\n        /// <param name=\"previous\">The original document model.</param>\n        /// <returns>A list of messages from the comparison.</returns>\n        public override IEnumerable<ComparisonMessage> Compare(\n            ComparisonContext<ServiceDefinition> context,\n            Schema previous\n        )\n        {\n            var priorSchema = previous;\n            if (priorSchema == null)\n            {\n                throw new ArgumentNullException(\"priorVersion\");\n            }\n            if (context == null)\n            {\n                throw new ArgumentNullException(\"context\");\n            }\n\n\n\n            int referenced = 0;\n\n            var thisSchema = this;\n\n            if (!string.IsNullOrWhiteSpace(thisSchema.Reference))\n            {\n                thisSchema = FindReferencedSchema(thisSchema.Reference, context.CurrentRoot.Definitions);\n                referenced += 1;\n                if (thisSchema == null)\n                {\n                    return context.Messages;\n                }\n            }\n            if (!string.IsNullOrWhiteSpace(priorSchema.Reference))\n            {\n                priorSchema = FindReferencedSchema(priorSchema.Reference, context.PreviousRoot.Definitions);\n                referenced += 1;\n                if (priorSchema == null)\n                {\n                    return context.Messages;\n                }\n            }\n\n            var thisModelName = thisSchema.XmsClientName ?? Reference ?? \"\";\n            var priorModelName = priorSchema.XmsClientName ?? previous.Reference ?? \"\";\n            if (!thisModelName.Equals(priorModelName))\n            {\n                context.LogBreakingChange(ComparisonMessages.ReferenceRedirection);\n            }\n\n            // Avoid doing the comparison repeatedly by marking for which direction it's already been done.\n\n            if (context.Direction != DataDirection.None && referenced == 2)\n            {\n                // Comparing two referenced schemas in the context of a parameter or response -- did we already do this?\n\n                if (thisSchema._compareDirection == context.Direction || thisSchema._compareDirection == DataDirection.Both)\n                {\n                    return new ComparisonMessage[0];\n                }\n                _compareDirection |= context.Direction;\n            }\n\n            if (thisSchema != this || priorSchema != previous)\n            {\n                if (_visitedSchemas.Contains(priorSchema))\n                {\n                    return context.Messages;\n                }\n                _visitedSchemas.AddFirst(priorSchema);\n                return thisSchema.Compare(context, priorSchema);\n            }\n\n            base.Compare(context, previous);\n\n            if (priorSchema.ReadOnly != ReadOnly)\n            {\n                context.LogBreakingChange(ComparisonMessages.ReadonlyPropertyChanged, priorSchema.ReadOnly.ToString().ToLower(), ReadOnly.ToString().ToLower());\n            }\n\n            if ((priorSchema.Discriminator == null && Discriminator != null) ||\n                (priorSchema.Discriminator != null && !priorSchema.Discriminator.Equals(Discriminator)))\n            {\n                context.LogBreakingChange(ComparisonMessages.DifferentDiscriminator);\n            }\n\n            if ((priorSchema.Extends == null && Extends != null) ||\n                (priorSchema.Extends != null && !priorSchema.Extends.Equals(Extends)))\n            {\n                context.LogBreakingChange(ComparisonMessages.DifferentExtends);\n            }\n\n            if ((priorSchema.AllOf == null && AllOf != null) ||\n                (priorSchema.AllOf != null && AllOf == null))\n            {\n                context.LogBreakingChange(ComparisonMessages.DifferentAllOf);\n            }\n            else if (priorSchema.AllOf != null)\n            {\n                CompareAllOfs(context, priorSchema);\n            }\n\n            // Compare each properties of the model\n            context.PushProperty(\"properties\");\n            CompareProperties(context, priorSchema);\n            context.Pop();\n\n            // Compare `required` list of properties of the model\n            CompareRequired(context, priorSchema);\n\n            return context.Messages;\n        }\n\n        /// <summary>\n        /// Compares list of required properties of this (i.e. \"new\") model to the previous (i.e. \"old\") model.\n        ///\n        /// 1. If the property **was** required and **is** required: do not report a breaking change.\n        ///     This is regardless of property being actually defined or not (previously or now).\n        /// 2. If the property **was not** required and **is** required then:\n        ///     - If the property **was defined and read-only** and **is defined and read-only** then do not report breaking change.\n        ///     - In all other cases, report a breaking change.\n        ///         - E.g. if the property **was not required and not defined** and now **is required and defined and read-only**\n        ///           this still counts as a breaking change.\n        /// \n        /// Related:\n        /// https://stackoverflow.com/questions/40113049/how-to-specify-if-a-field-is-optional-or-required-in-openapi-swagger\n        /// https://github.com/Azure/azure-sdk-tools/issues/7184\n        /// https://github.com/Azure/openapi-diff/pull/336#discussion_r1638996922\n        /// </summary>\n        /// <param name=\"context\">Comparison Context</param>\n        /// <param name=\"priorSchema\">Schema of the old model</param>\n        private void CompareRequired(ComparisonContext<ServiceDefinition> context, Schema priorSchema)\n        {\n            // If Required list is null then no properties are required in the new model,\n            // so there are no breaking changes.\n            if (Required == null)\n            {\n                return;\n            }\n\n            var newRequiredNonReadOnlyPropNames = new List<string>();\n            foreach (string requiredPropName in Required)\n            {\n                Schema propSchema = null;\n                Schema priorPropSchema = null;\n                Properties?.TryGetValue(requiredPropName, out propSchema);\n                priorSchema?.Properties?.TryGetValue(requiredPropName, out priorPropSchema);\n                bool propWasRequired = priorSchema?.Required?.Contains(requiredPropName) == true;\n                // Note that property is considered read-only only if it is consistently read-only both in the old and new models.\n                bool propIsReadOnly = propSchema?.ReadOnly == true && priorPropSchema?.ReadOnly == true;\n                if (!propWasRequired && !propIsReadOnly)\n                {\n                    // Property is newly required, and it is not read-only, hence it is a breaking change.\n                    newRequiredNonReadOnlyPropNames.Add(requiredPropName);\n                }\n                else\n                {\n                    // Property was required and is required, or it is read-only, hence it is not a breaking change.\n                }\n            }\n\n            if (newRequiredNonReadOnlyPropNames.Any())\n            {\n                context.LogBreakingChange(ComparisonMessages.AddedRequiredProperty, string.Join(\", \", newRequiredNonReadOnlyPropNames));\n            }\n        }\n\n        private void CompareAllOfs(ComparisonContext<ServiceDefinition> context, Schema priorSchema)\n        {\n            var different = 0;\n            foreach (var schema in priorSchema.AllOf)\n            {\n                if (!AllOf.Select(s => s.Reference).ToArray().Contains(schema.Reference))\n                {\n                    different += 1;\n                }\n            }\n            foreach (var schema in AllOf)\n            {\n                if (!priorSchema.AllOf.Select(s => s.Reference).ToArray().Contains(schema.Reference))\n                {\n                    different += 1;\n                }\n            }\n\n            if (different > 0)\n            {\n                context.LogBreakingChange(ComparisonMessages.DifferentAllOf);\n            }\n        }\n\n        /// <summary>\n        /// Comapres properties of the previous Schema to detect removed / added required properties\n        /// </summary>\n        /// <param name=\"context\">Comaprision Context</param>\n        /// <param name=\"priorSchema\">Schema of the old model</param>\n        private void CompareProperties(ComparisonContext<ServiceDefinition> context, Schema priorSchema)\n        {\n            // Case: Were any properties removed?\n            if (priorSchema.Properties != null)\n            {\n                foreach (var def in priorSchema.Properties)\n                {\n                    if (Properties == null || !Properties.TryGetValue(def.Key, out var model))\n                    {\n                        context.LogBreakingChange(ComparisonMessages.RemovedProperty, def.Key);\n                    }\n                    else\n                    {\n                        // required to optional\n                        if (Required != null && Required.Contains(def.Key) && (priorSchema.Required == null || !priorSchema.Required.Contains(def.Key)))\n                        {\n                            context.LogBreakingChange(ComparisonMessages.RequiredStatusChange, false, true);\n                        }\n\n                        // optional to required\n                        if ((Required == null || !Required.Contains(def.Key)) && (priorSchema.Required != null && priorSchema.Required.Contains(def.Key)))\n                        {\n                            context.LogBreakingChange(ComparisonMessages.RequiredStatusChange, true, false);\n                        }\n\n                        context.PushProperty(def.Key);\n                        model.Compare(context, def.Value);\n                        context.Pop();\n                    }\n                }\n            }\n\n            // Case: Were any properties added?\n            if (Properties != null)\n            {\n                foreach (KeyValuePair<string, Schema> property in Properties)\n                {\n                    // Case: Were any required properties added?\n                    if (priorSchema.Properties == null || !priorSchema.Properties.TryGetValue(property.Key, out var model))\n                    {\n                        if ((Required != null && Required.Contains(property.Key)))\n                        {\n                            context.LogBreakingChange(ComparisonMessages.AddedRequiredProperty, property.Key);\n                        }\n                        else if (context.Direction == DataDirection.Response && property.Value != null)\n                        {\n                            if (property.Value.ReadOnly == true)\n                                context.LogInfo(ComparisonMessages.AddedReadOnlyPropertyInResponse, property.Key);\n                            else\n                                context.LogBreakingChange(ComparisonMessages.AddedPropertyInResponse, property.Key);\n                        }\n                        else if(IsReferenced && property.Value != null)\n                        {\n                            context.LogBreakingChange(ComparisonMessages.AddedOptionalProperty, property.Key);\n                        }\n                    }\n                }\n            }\n        }\n\n        public static Schema FindReferencedSchema(string reference, IDictionary<string, Schema> definitions)\n        {\n            if (reference != null && reference.StartsWith(\"#\", StringComparison.Ordinal))\n            {\n                var parts = reference.Split('/');\n                if (parts.Length == 3 && parts[1].Equals(\"definitions\"))\n                {\n                    if (definitions.TryGetValue(parts[2], out var p))\n                    {\n                        return p;\n                    }\n                }\n            }\n\n            return null;\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/SecurityDefinition.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System.Collections.Generic;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Security Scheme Object - https://github.com/wordnik/swagger-spec/blob/master/versions/2.0.md#security-scheme-object-\n    /// </summary>\n    public class SecurityDefinition\n    {\n        public string Description { get; set; }\n\n        public string Name { get; set; }\n\n        public ApiKeyLocation In { get; set; }\n\n        public OAuthFlow Flow { get; set; }\n\n        public string AuthorizationUrl { get; set; }\n\n        public string TokenUrl { get; set; }\n\n        /// <summary>\n        /// Lists the available scopes for an OAuth2 security scheme. \n        /// Key is scope serviceTypeName and the value is short description\n        /// </summary>\n        public Dictionary<string, string> Scopes { get; set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/SecuritySchemeType.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace AutoRest.Swagger.Model\n{\n    public enum SecuritySchemeType\n    {\n        None,\n        Basic,\n        ApiKey,\n        OAuth2\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/ServiceDefinition.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Text.RegularExpressions;\nusing OpenApiDiff.Core.Logging;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Class that represents Swagger 2.0 schema\n    /// http://json.schemastore.org/swagger-2.0\n    /// Swagger Object - https://github.com/wordnik/swagger-spec/blob/master/versions/2.0.md#swagger-object- \n    /// </summary>\n    public class ServiceDefinition : SpecObject\n    {\n        public ServiceDefinition()\n        {\n            Definitions = new Dictionary<string, Schema>();\n            Schemes = new List<TransferProtocolScheme>();\n            Consumes = new List<string>();\n            Produces = new List<string>();\n            Paths = new Dictionary<string, Dictionary<string, Operation>>();\n            CustomPaths = new Dictionary<string, Dictionary<string, Operation>>();\n            Parameters = new Dictionary<string, SwaggerParameter>();\n            Responses = new Dictionary<string, OperationResponse>();\n            SecurityDefinitions = new Dictionary<string, SecurityDefinition>();\n            Security = new List<Dictionary<string, List<string>>>();\n        }\n\n        /// <summary>\n        /// Specifies the Swagger Specification version being used. \n        /// </summary>\n        public string Swagger { get; set; }\n\n        /// <summary>\n        /// Provides metadata about the API. The metadata can be used by the clients if needed.\n        /// </summary>\n        public Info Info { get; set; }\n\n        /// <summary>\n        /// The host (serviceTypeName or ip) serving the API.\n        /// </summary>\n        public string Host { get; set; }\n\n        /// <summary>\n        /// The base path on which the API is served, which is relative to the host.\n        /// </summary>\n        public string BasePath { get; set; }\n\n        /// <summary>\n        /// The transfer protocol of the API.\n        /// </summary>\n        public IList<TransferProtocolScheme> Schemes { get; set; }\n\n        /// <summary>\n        /// A list of MIME types the service can consume.\n        /// </summary>\n        public IList<string> Consumes { get; set; }\n\n        /// <summary>\n        /// A list of MIME types the APIs can produce.\n        /// </summary>\n        public IList<string> Produces { get; set; }\n\n        /// <summary>\n        /// Key is actual path and the value is serializationProperty of http operations and operation objects.\n        /// </summary>\n        public Dictionary<string, Dictionary<string, Operation>> Paths { get; set; }\n\n        /// <summary>\n        /// Key is actual path and the value is serializationProperty of http operations and operation objects.\n        /// </summary>\n        public Dictionary<string, Dictionary<string, Operation>> CustomPaths { get; set; }\n\n        /// <summary>\n        /// Key is the object serviceTypeName and the value is swagger definition.\n        /// </summary>\n        public Dictionary<string, Schema> Definitions { get; set; }\n\n        /// <summary>\n        /// Dictionary of parameters that can be used across operations.\n        /// This property does not define global parameters for all operations.\n        /// </summary>\n        public Dictionary<string, SwaggerParameter> Parameters { get; set; }\n\n        /// <summary>\n        /// Dictionary of responses that can be used across operations. The key indicates status code.\n        /// </summary>\n        public Dictionary<string, OperationResponse> Responses { get; set; }\n\n        /// <summary>\n        /// Key is the object serviceTypeName and the value is swagger security definition.\n        /// </summary>\n        public Dictionary<string, SecurityDefinition> SecurityDefinitions { get; set; }\n\n        /// <summary>\n        /// A declaration of which security schemes are applied for the API as a whole. \n        /// The list of values describes alternative security schemes that can be used \n        /// (that is, there is a logical OR between the security requirements). Individual \n        /// operations can override this definition.\n        /// </summary>\n        public IList<Dictionary<string, List<string>>> Security { get; set; }\n\n        /// <summary>\n        /// Compare a modified document node (this) to a previous one and look for breaking as well as non-breaking changes.\n        /// </summary>\n        /// <param name=\"context\">The modified document context.</param>\n        /// <param name=\"previous\">The original document model.</param>\n        /// <returns>A list of messages from the comparison.</returns>\n        public override IEnumerable<ComparisonMessage> Compare(\n            ComparisonContext<ServiceDefinition> context,\n            ServiceDefinition previousDefinition\n        )\n        {\n            if (context.CurrentRoot != this)\n            {\n                throw new ArgumentException(\"context.CurrentRoot != this\");\n            }\n            if (context.PreviousRoot != previousDefinition)\n            {\n                throw new ArgumentException(\"context.PreviousRoot != previousDefinition\");\n            }\n\n            if (previousDefinition == null)\n                throw new ArgumentException(\"Comparing a service definition with something else.\");\n\n            base.Compare(context, previousDefinition);\n\n            if (Info?.Version != null && \n                previousDefinition.Info?.Version != null)\n            {\n                context.PushProperty(\"info\");\n                context.PushProperty(\"version\");\n\n                CompareVersions(context, Info.Version, previousDefinition.Info.Version);\n\n                context.Pop();\n                context.Pop();\n            }\n\n            if (context.Strict)\n            {\n                // There was no version change between the documents. This is not an error, but noteworthy.\n                context.LogInfo(ComparisonMessages.NoVersionChange);\n            }\n\n            // Check that all the protocols of the old version are supported by the new version.\n\n            context.PushProperty(\"schemes\");\n            foreach (var scheme in previousDefinition.Schemes)\n            {\n                if (!Schemes.Contains(scheme))\n                {\n                    context.LogBreakingChange(ComparisonMessages.ProtocolNoLongerSupported, scheme);\n                }\n            }\n            context.Pop();\n\n            // Check that all the request body formats that were accepted still are.\n\n            context.PushProperty(\"consumes\");\n            foreach (var format in previousDefinition.Consumes)\n            {\n                if (!Consumes.Contains(format))\n                {\n                    context.LogBreakingChange(ComparisonMessages.RequestBodyFormatNoLongerSupported, format);\n                }\n            }\n            context.Pop();\n\n            // Check that all the response body formats were also supported by the old version.\n\n            context.PushProperty(\"produces\");\n            foreach (var format in Produces)\n            {\n                if (!previousDefinition.Produces.Contains(format))\n                {\n                    context.LogBreakingChange(ComparisonMessages.ResponseBodyFormatNowSupported, format);\n                }\n            }\n            context.Pop();\n\n            // Check that no paths were removed, and compare the paths that are still there.\n\n            var newPaths = RemovePathVariables(Paths);\n\n            context.PushProperty(\"paths\");\n            foreach (var path in previousDefinition.Paths.Keys)\n            {\n                var p = ObjectPath.OpenApiPathName(path);\n\n                context.PushPathProperty(path);\n\n                if (!newPaths.TryGetValue(p, out var operations))\n                {\n                    // Entrie path was removeed\n                    context.LogBreakingChange(ComparisonMessages.RemovedPath, path);\n                }\n                else\n                {\n                    // 1. Remove this path from the current list to find the added paths\n                    newPaths.Remove(p);\n                    var copyOfOperations = operations.ToDictionary(e => e.Key, e => e.Value);\n\n                    // 2. look for operation match inside this path\n                    var previousOperations = previousDefinition.Paths[path];\n                    foreach (var previousOperation in previousOperations)\n                    {\n                        if (!operations.TryGetValue(previousOperation.Key, out var newOperation))\n                        {\n                            // Operation was removed from the path\n                            context.LogBreakingChange(ComparisonMessages.RemovedOperation, previousOperation.Value.OperationId);\n                        }\n                        else\n                        {\n                            copyOfOperations.Remove(previousOperation.Key);\n                        }\n                    }\n\n                    // Look for added operations\n                    foreach (var copyOfOperation in copyOfOperations)\n                    {\n                        context.PushProperty(copyOfOperation.Key);\n                        context.LogInfo(ComparisonMessages.AddedOperation);\n                        context.Pop();\n                    }\n\n                    // Compare operations\n                    foreach (var operation in operations)\n                    {\n                        if (previousDefinition.Paths[path].TryGetValue(operation.Key, out var previousOperation))\n                        {\n                            context.PushProperty(operation.Key);\n                            operation.Value.Compare(context, previousOperation);\n                            context.Pop();\n                        }\n                    }\n                }\n                context.Pop();\n            }\n\n            // Check wether any new paths are being added\n            foreach (var path in newPaths.Keys)\n            {\n                context.PushPathProperty(path);\n                context.LogInfo(ComparisonMessages.AddedPath);\n                context.Pop();\n            }\n\n\n            context.Pop();\n\n            // Check for custom paths : x-ms-paths\n            var newCustomPaths = RemovePathVariables(CustomPaths);\n\n            context.PushProperty(\"x-ms-paths\");\n            foreach (var path in previousDefinition.CustomPaths.Keys)\n            {\n                var p = ObjectPath.OpenApiPathName(path);\n\n                context.PushPathProperty(path);\n\n                Dictionary<string, Operation> operations = null;\n                if (!newCustomPaths.TryGetValue(p, out operations))\n                {\n                    context.LogBreakingChange(ComparisonMessages.RemovedPath, path);\n                }\n                else\n                {\n                    // 1. Remove this custom path from the current list to find the added paths\n                    newCustomPaths.Remove(p);\n                    Dictionary<string, Operation> copyOfOperations = operations.ToDictionary(e => e.Key, e => e.Value);\n\n                    // 2. look for operation match inside this path\n                    Dictionary<string, Operation> previousOperations = previousDefinition.CustomPaths[path];\n                    foreach (var previousOperation in previousOperations)\n                    {\n                        Operation newOperation = null;\n                        if (!operations.TryGetValue(previousOperation.Key, out newOperation))\n                        {\n                            context.LogBreakingChange(ComparisonMessages.RemovedOperation, previousOperation.Value.OperationId);\n                        }\n                    }\n\n                    // Look for added operations\n                    foreach (var copyOfOperation in copyOfOperations)\n                    {\n                        context.PushProperty(copyOfOperation.Key);\n                        context.LogInfo(ComparisonMessages.AddedOperation);\n                        context.Pop();\n                    }\n\n                    // Compare operations\n                    foreach (var operation in operations)\n                    {\n                        Operation previousOperation = null;\n                        if (previousDefinition.CustomPaths[path].TryGetValue(operation.Key, out previousOperation))\n                        {\n                            context.PushProperty(operation.Key);\n                            operation.Value.Compare(context, previousOperation);\n                            context.Pop();\n                        }\n                    }\n                }\n                context.Pop();\n            }\n\n            // Check wether any new paths are being added into x-ms-paths\n            foreach (var path in newCustomPaths.Keys)\n            {\n                context.PushPathProperty(path);\n                context.LogInfo(ComparisonMessages.AddedPath);\n                context.Pop();\n            }\n\n            context.Pop();\n\n            ReferenceTrackSchemas(this);\n            ReferenceTrackSchemas(previousDefinition);\n\n            context.PushProperty(\"parameters\");\n            foreach (var def in previousDefinition.Parameters.Keys)\n            {\n                SwaggerParameter parameter = null;\n                if (!Parameters.TryGetValue(def, out parameter))\n                {\n                    context.LogBreakingChange(ComparisonMessages.RemovedClientParameter, def);\n                }\n                else\n                {\n                    context.PushProperty(def);\n                    parameter.Compare(context, previousDefinition.Parameters[def]);\n                    context.Pop();\n                }\n            }\n            context.Pop();\n\n            context.PushProperty(\"responses\");\n            foreach (var def in previousDefinition.Responses.Keys)\n            {\n                OperationResponse response = null;\n                if (!Responses.TryGetValue(def, out response))\n                {\n                    context.LogBreakingChange(ComparisonMessages.RemovedDefinition, def);\n                }\n                else\n                {\n                    context.PushProperty(def);\n                    response.Compare(context, previousDefinition.Responses[def]);\n                    context.Pop();\n                }\n            }\n            context.Pop();\n\n            context.PushProperty(\"definitions\");\n            foreach (var def in previousDefinition.Definitions.Keys)\n            {\n                Schema schema = null;\n                Schema oldSchema = previousDefinition.Definitions[def];\n\n                if (!Definitions.TryGetValue(def, out schema))\n                {\n                    if (oldSchema.IsReferenced)\n                        // It's only an error if the definition is referenced in the old service.\n                        context.LogBreakingChange(ComparisonMessages.RemovedDefinition, def);\n                }\n                else\n                {\n                    context.PushProperty(def);\n                    schema.Compare(context, previousDefinition.Definitions[def]);\n                    context.Pop();\n                }\n            }\n            context.Pop();\n\n            context.Pop();\n\n            return context.Messages;\n        }\n\n\n        /// <summary>\n        /// Since renaming a path parameter doesn't logically alter the path, we must remove the parameter names\n        /// before comparing paths using string comparison.\n        /// </summary>\n        /// <param name=\"paths\">A dictionary of paths, potentially with embedded parameter names.</param>\n        /// <returns>A transformed dictionary, where paths do not embed parameter names.</returns>\n        private Dictionary<string, Dictionary<string, Operation>> RemovePathVariables(\n            Dictionary<string, Dictionary<string, Operation>> paths\n        ) => paths.ToDictionary(kv => ObjectPath.OpenApiPathName(kv.Key), kv => kv.Value);\n\n        /// <summary>\n        /// Since some services may rely on semantic versioning, comparing versions is fairly complex.\n        /// </summary>\n        /// <param name=\"context\">A comparison context.</param>\n        /// <param name=\"newVer\">The new version string.</param>\n        /// <param name=\"oldVer\">The old version string</param>\n        /// <remarks>\n        /// In semantic versioning schemes, only the major and minor version numbers are considered when comparing versions.\n        /// Build numbers are ignored.\n        /// </remarks>\n        private void CompareVersions(ComparisonContext<ServiceDefinition> context, string newVer, string oldVer)\n        {\n            var oldVersion = oldVer.Split('.');\n            var newVersion = newVer.Split('.');\n\n            // If the version consists only of numbers separated by '.', we'll consider it semantic versioning.\n\n            if (!context.Strict && oldVersion.Length > 0 && newVersion.Length > 0)\n            {\n                bool versionChanged = false;\n\n                // Situation 1: The versioning scheme is semantic, i.e. it uses a major.minr.build-number scheme, where each component is an integer.\n                //              In this case, we care about the major/minor numbers, but not the build number. In othe words, ifall that is different\n                //              is the build number, it will not be treated as a version change.\n\n                int oldMajor = 0, newMajor = 0;\n                bool integers = int.TryParse(oldVersion[0], out oldMajor) && int.TryParse(newVersion[0], out newMajor);\n\n                if (integers && oldMajor != newMajor)\n                {\n                    versionChanged = true;\n\n                    if (oldMajor > newMajor)\n                    {\n                        context.LogError(ComparisonMessages.VersionsReversed, oldVer, newVer);\n                    }\n                }\n\n                if (!versionChanged && integers && oldVersion.Length > 1 && newVersion.Length > 1)\n                {\n                    int oldMinor = 0, newMinor = 0;\n                    integers = int.TryParse(oldVersion[1], out oldMinor) && int.TryParse(newVersion[1], out newMinor);\n\n                    if (integers && oldMinor != newMinor)\n                    {\n                        versionChanged = true;\n\n                        if (oldMinor > newMinor)\n                        {\n                            context.LogError(ComparisonMessages.VersionsReversed, oldVer, newVer);\n                        }\n                    }\n                }\n\n                // Situation 2: The versioning scheme is something else, maybe a date or just a label?\n                //              Regardless of what it is, we just check whether the two strings are equal or not.\n\n                if (!versionChanged && !integers)\n                {\n                    versionChanged = !oldVer.ToLower().Equals(newVer.ToLower());\n                }\n\n                context.Strict = !versionChanged;\n            }\n        }\n\n        /// <summary>\n        /// In order to avoid comparing definitions (schemas) that are not used, we go through all references that are \n        /// found in operations, global parameters, and global responses. Definitions that are referenced from other\n        /// definitions are included only by transitive closure.\n        /// </summary>\n        private static void ReferenceTrackSchemas(ServiceDefinition service)\n        {\n            foreach (var schema in service.Definitions.Values)\n            {\n                schema.IsReferenced = false;\n            }\n\n            foreach (var path in service.Paths.Values)\n            {\n                foreach (var operation in path.Values)\n                {\n                    foreach (var parameter in operation.Parameters)\n                    {\n                        if (parameter.Schema != null && !string.IsNullOrWhiteSpace(parameter.Schema.Reference))\n                        {\n                            var schema = FindReferencedSchema(parameter.Schema.Reference, service.Definitions);\n                            schema.IsReferenced = true;\n                        }\n                    }\n                }\n            }\n            foreach (var path in service.CustomPaths.Values)\n            {\n                foreach (var operation in path.Values)\n                {\n                    foreach (var parameter in operation.Parameters)\n                    {\n                        if (parameter.Schema != null && !string.IsNullOrWhiteSpace(parameter.Schema.Reference))\n                        {\n                            var schema = FindReferencedSchema(parameter.Schema.Reference, service.Definitions);\n                            schema.IsReferenced = true;\n                        }\n                    }\n                }\n            }\n            foreach (var parameter in service.Parameters.Values)\n            {\n                if (parameter.Schema != null && !string.IsNullOrWhiteSpace(parameter.Schema.Reference))\n                {\n                    var schema = FindReferencedSchema(parameter.Schema.Reference, service.Definitions);\n                    schema.IsReferenced = true;\n                }\n            }\n            foreach (var response in service.Responses.Values)\n            {\n                if (response.Schema != null && !string.IsNullOrWhiteSpace(response.Schema.Reference))\n                {\n                    var schema = FindReferencedSchema(response.Schema.Reference, service.Definitions);\n                    schema.IsReferenced = true;\n                }\n            }\n\n            // detect the polymorphic concrecate model.\n            foreach (var schema in service.Definitions.Values.Where(d => !d.IsReferenced))\n            {\n                if (schema.Extensions != null && schema.Extensions.ContainsKey(\"x-ms-discriminator-value\"))\n                {\n                    schema.IsReferenced = true;\n                    continue;\n                }\n\n                if (schema.AllOf == null)\n                {\n                    continue;\n                }\n\n                foreach (var property in schema.AllOf)\n                {\n                    if (!string.IsNullOrWhiteSpace(property.Reference))\n                    {\n\n                        if (FindDiscriminator(property.Reference, service.Definitions))\n                        {\n                            schema.IsReferenced = true;\n                            break;\n                        }\n                    }\n                }\n            }\n\n            var changed = true;\n            while (changed)\n            {\n                changed = false;\n\n                foreach (var schema in service.Definitions.Values.Where(d => d.IsReferenced))\n                {\n                    // If schema does not have properties then do not recurse\n                    if (schema.Properties == null)\n                    {\n                        continue;\n                    }\n\n                    foreach (var property in schema.Properties.Values)\n                    {\n                        if (!string.IsNullOrWhiteSpace(property.Reference))\n                        {\n                            var s = FindReferencedSchema(property.Reference, service.Definitions);\n                            changed = changed || !s.IsReferenced;\n                            s.IsReferenced = true;\n                        }\n                    }\n                }\n            }    \n        }\n\n        /// <summary>\n        /// Retrieve a schema from the definitions section.\n        /// </summary>\n        /// <param name=\"reference\">A document-relative reference path -- #/definitions/XXX</param>\n        /// <param name=\"definitions\">The definitions dictionary to use</param>\n        /// <returns></returns>\n        private static Schema FindReferencedSchema(string reference, IDictionary<string, Schema> definitions)\n        {\n            if (reference != null && reference.StartsWith(\"#\", StringComparison.Ordinal))\n            {\n                var parts = reference.Split('/');\n                if (parts.Length == 3 && parts[1].Equals(\"definitions\"))\n                {\n                    Schema p = null;\n                    if (definitions.TryGetValue(parts[2], out p))\n                    {\n                        return p;\n                    }\n                }\n            }\n            return null;\n        }\n\n        /// <summary>\n        /// Detect if a schema's hierarchy contains a discriminator .\n        /// </summary>\n        /// <param name=\"reference\">A document-relative reference path -- #/definitions/XXX</param>\n        /// <param name=\"definitions\">The definitions dictionary to use</param>\n        /// <returns></returns>\n        private static bool FindDiscriminator(string reference, IDictionary<string, Schema> definitions)\n        {\n            var schema = FindReferencedSchema(reference, definitions);\n            if (schema != null && schema.Discriminator != null)\n            {\n                return true;\n            }\n            if (schema != null && schema.AllOf != null)\n            {\n                foreach (var subSchema in schema.AllOf)\n                {\n                    if (subSchema.Reference != null && FindDiscriminator(subSchema.Reference,definitions))\n                    {\n                        return true;\n                    }\n                }\n            }\n            return false;\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/ServiceDefinitionMetadata.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Describes whether a service definition has already been processed and merged.\n    /// This can influence ARM validation (e.g. one would not expect an operations API \n    /// on individual OpenAPI definitions).\n    /// Explanation:\n    /// 'Individual' state: This is the state where the json provided is considered \n    /// in isolation and the corresponding rules are applied. This is equivalent to \n    /// running validator in the  non-CompositeSwagger mode per legacy API\n    /// 'Composite' state: For a given json, the AutoRest core will find \n    /// its corresponding '.md' file and construct a ServiceDefinition object. \n    /// This will be equivalent to running AutoRest in CompositeSwagger mode per \n    /// legacy cli. \n    /// </summary>\n    public enum ServiceDefinitionDocumentState\n    {\n        Individual,\n        Composed\n    }\n\n    /// <summary>\n    /// Represents Service Definition Document Type \n    /// AutoRest needs this categorization to choose document type-specific \n    /// rules for execution\n    /// </summary>\n    [Flags]\n    public enum ServiceDefinitionDocumentType\n    {\n        Default = 0,   // A plain regular swagger like pet store\n        ARM = 1 << 0,       // An Azure Resource Management type document\n        DataPlane = 1 << 1  // Data Plane specifications\n    }\n\n    /// <summary>\n    /// Metadata for service definition that describes further what it represents \n    /// (e.g. single vs. merged, ARM vs non-ARM, ...).\n    /// </summary>\n    public class ServiceDefinitionMetadata\n    {\n        public ServiceDefinitionDocumentState MergeState { get; set; }\n\n        public ServiceDefinitionDocumentType ServiceDefinitionDocumentType { get; set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/SpecObject.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\n\nnamespace AutoRest.Swagger.Model\n{\n    public abstract class SpecObject : SwaggerBase<ServiceDefinition>\n    {\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerBase.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing Newtonsoft.Json;\nusing System.Collections.Generic;\n\nnamespace AutoRest.Swagger.Model\n{\n    public abstract class SwaggerBase<T>\n    {\n        public SwaggerBase()\n        {\n            Extensions = new Dictionary<string, object>();\n        }\n\n        /// <summary>\n        /// Vendor extensions.\n        /// </summary>\n        [JsonExtensionData]\n        public Dictionary<string, object> Extensions { get; set; }\n\n        /// <summary>\n        /// Compare a modified document node (this) to a previous one and look for breaking as well as non-breaking changes.\n        /// </summary>\n        /// <param name=\"context\">The modified document context.</param>\n        /// <param name=\"previous\">The original document model.</param>\n        /// <returns>A list of messages from the comparison.</returns>\n        public virtual IEnumerable<ComparisonMessage> Compare(\n            ComparisonContext<ServiceDefinition> context, \n            T previous\n        )\n        {\n            if (previous == null)\n                throw new ArgumentNullException(\"previous\");\n            if (context == null)\n                throw new ArgumentNullException(\"context\");\n                \n            yield break; \n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerObject.cs",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing System.Linq;\nusing System.Collections.Generic;\nusing System.Diagnostics.CodeAnalysis;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\n\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Describes a single operation determining with this object is mandatory.\n    /// https://github.com/wordnik/swagger-spec/blob/master/versions/2.0.md#parameterObject\n    /// </summary>\n    public abstract class SwaggerObject<T> : SwaggerBase<T>\n        where T: SwaggerObject<T>\n    {\n        public virtual bool IsRequired { get; set; }\n\n        /// <summary>\n        /// The type of the parameter.\n        /// </summary>\n        public virtual DataType? Type { get; set; }\n\n        /// <summary>\n        /// The extending format for the previously mentioned type.\n        /// </summary>\n        public virtual string Format { get; set; }\n\n        /// <summary>\n        /// Describes the type of items in the array.\n        /// </summary>\n        public virtual Schema Items { get; set; }\n\n        [JsonProperty(PropertyName = \"$ref\")]\n        public string Reference { get; set; }\n\n        /// <summary>\n        /// Describes the type of additional properties in the data type.\n        /// </summary>\n        public virtual Schema AdditionalProperties { get; set; }\n\n        public virtual string Description { get; set; }\n\n        /// <summary>\n        /// Determines the format of the array if type array is used.\n        /// </summary>\n        public virtual string CollectionFormat { get; set; }\n\n        /// <summary>\n        /// Sets a default value to the parameter.\n        /// </summary>\n        public virtual dynamic Default { get; set; }\n\n        public virtual string MultipleOf { get; set; }\n\n        public virtual string Maximum { get; set; }\n\n        public virtual bool ExclusiveMaximum { get; set; }\n\n        public virtual string Minimum { get; set; }\n\n        public virtual bool ExclusiveMinimum { get; set; }\n\n        public virtual string MaxLength { get; set; }\n\n        public virtual string MinLength { get; set; }\n\n        public virtual string Pattern { get; set; }\n\n        public virtual string MaxItems { get; set; }\n\n        public virtual string MinItems { get; set; }\n\n        public virtual bool UniqueItems { get; set; }\n\n        public virtual IList<string> Enum { get; set; }\n\n        [JsonProperty(PropertyName = \"x-ms-enum\")]\n        public virtual XmsEnumExtension XmsEnum {get;set;}\n\n        [JsonProperty(PropertyName = \"x-ms-client-name\")]\n        public virtual string XmsClientName { get; set; }\n\n        /// <summary>\n        /// Compare a modified document node (this) to a previous one and look for breaking as well as non-breaking changes.\n        /// </summary>\n        /// <param name=\"context\">The modified document context.</param>\n        /// <param name=\"previous\">The original document model.</param>\n        /// <returns>A list of messages from the comparison.</returns>\n        public override IEnumerable<ComparisonMessage> Compare(\n            ComparisonContext<ServiceDefinition> context,\n            T previous\n        )\n        {\n\n            var prior = previous;\n\n            if (prior == null)\n            {\n                throw new ArgumentNullException(\"priorVersion\");\n            }\n            if (context == null)\n            {\n                throw new ArgumentNullException(\"context\");\n            }\n\n            base.Compare(context, previous);\n\n            var thisModelName = this.XmsClientName ?? Reference ?? \"\";\n            var priorModelName = previous.XmsClientName ?? previous.Reference ?? \"\";\n            if (!thisModelName.Equals(priorModelName))\n            {\n                context.LogBreakingChange(ComparisonMessages.ReferenceRedirection);\n            }\n\n            if (IsRequired != prior.IsRequired)\n            {\n                if (context.Direction != DataDirection.Response)\n                {\n                    if (IsRequired && !prior.IsRequired)\n                    {\n                        context.LogBreakingChange(ComparisonMessages.RequiredStatusChange, prior.IsRequired, IsRequired);\n                    }\n                    else\n                    {\n                        context.LogInfo(ComparisonMessages.RequiredStatusChange, prior.IsRequired, IsRequired);\n                    }\n                }\n            }\n\n            // Are the types the same?\n\n            if ((Type.HasValue && prior.Type.HasValue && prior.Type.Value != Type.Value))\n            {\n                context.LogError(ComparisonMessages.TypeChanged,\n                    Type.HasValue ? Type.Value.ToString().ToLower() : \"\",\n                    prior.Type.HasValue ? prior.Type.Value.ToString().ToLower() : \"\");\n            }\n            var isObject = Type.HasValue && Type.Value == DataType.Object && (this is Schema) ? (this as Schema).Properties != null : false;\n            if (prior.Type.HasValue != Type.HasValue) {\n                if (!prior.Type.HasValue && Type.HasValue && isObject)\n                {\n                    context.LogInfo(ComparisonMessages.TypeChanged,\n                   Type.HasValue ? Type.Value.ToString().ToLower() : \"\",\n                   prior.Type.HasValue ? prior.Type.Value.ToString().ToLower() : \"\");\n                }\n                else {\n                    context.LogError(ComparisonMessages.TypeChanged,\n                   Type.HasValue ? Type.Value.ToString().ToLower() : \"\",\n                   prior.Type.HasValue ? prior.Type.Value.ToString().ToLower() : \"\");\n                }\n            }\n\n            // What about the formats?\n\n            CompareFormats(context, prior);\n\n            CompareItems(context, prior);\n\n            if ((Default != null || prior.Default != null) && !JToken.DeepEquals(Default,prior.Default))\n            {\n                context.LogBreakingChange(ComparisonMessages.DefaultValueChanged);\n            }\n\n            if (Type.HasValue && Type.Value == DataType.Array && prior.CollectionFormat != CollectionFormat)\n            {\n                context.LogBreakingChange(ComparisonMessages.ArrayCollectionFormatChanged);\n            }\n\n            CompareConstraints(context, prior);\n\n            CompareProperties(context, prior);\n\n            CompareEnums(context, prior);\n\n            return context.Messages;\n        }\n\n        private void CompareEnums(ComparisonContext<ServiceDefinition> context, T prior)\n        {\n            if (prior.Enum == null && this.Enum == null) return;\n\n            CompareXmsEnum(context,prior);\n            bool relaxes = (prior.Enum != null && this.Enum == null);\n            bool constrains = (prior.Enum == null && this.Enum != null);\n            if (!relaxes && !constrains)\n            {\n                // It was enum and it is still enum i.e check for addition/removal\n\n                // 1. Look for removed elements (constraining).\n                constrains = prior.Enum.Any(str => !this.Enum.Contains(str));\n\n                // 2. Look for added elements (relaxing).\n                relaxes = this.Enum.Any(str => !prior.Enum.Contains(str));\n\n\n                if (constrains)\n                {\n                    IEnumerable<string> removedEnums = prior.Enum.Except(this.Enum);\n                    if (removedEnums.Any())\n                    {\n                        context.LogBreakingChange(ComparisonMessages.RemovedEnumValue, String.Join(\", \", removedEnums.ToList()));\n                    }\n                }\n\n                if (relaxes)\n                {\n                    IEnumerable<string> addedEnums = this.Enum.Except(prior.Enum);\n                    if (addedEnums.Any())\n                    {\n                        context.LogBreakingChange(ComparisonMessages.AddedEnumValue, String.Join(\", \", addedEnums.ToList()));\n                    }\n                }\n            }\n        }\n\n        private void CompareXmsEnum(ComparisonContext<ServiceDefinition> context, T prior) {\n\n            if (this.XmsEnum == null && prior.XmsEnum != null)\n            {\n                context.LogError(ComparisonMessages.RemovedXmsEnum);\n            }\n            if (this.XmsEnum != null && prior.XmsEnum == null)\n            {\n                context.LogError(ComparisonMessages.AddedXmsEnum);\n            }\n            if (this.XmsEnum != null && prior.XmsEnum != null &&\n                !String.Equals(prior.XmsEnum.Name, this.XmsEnum.Name, StringComparison.Ordinal))\n            {\n                context.LogError(ComparisonMessages.XmsEnumChanged, \"name\");\n            }\n            if (this.XmsEnum != null && prior.XmsEnum != null && this.XmsEnum.ModelAsString != prior.XmsEnum.ModelAsString)\n            {\n                context.LogError(ComparisonMessages.XmsEnumChanged, \"modelAsString\");\n            }\n        }\n\n        private void CompareProperties(ComparisonContext<ServiceDefinition> context, T prior)\n        {\n            // Additional properties\n\n            if (prior.AdditionalProperties == null && AdditionalProperties != null)\n            {\n                context.LogBreakingChange(ComparisonMessages.AddedAdditionalProperties);\n            }\n            else if (prior.AdditionalProperties != null && AdditionalProperties == null)\n            {\n                context.LogBreakingChange(ComparisonMessages.RemovedAdditionalProperties);\n            }\n            else if (AdditionalProperties != null)\n            {\n                context.PushProperty(\"additionalProperties\");\n                AdditionalProperties.Compare(context, prior.AdditionalProperties);\n                context.Pop();\n            }\n        }\n\n        private Boolean isFormatChangeAllowed(ComparisonContext<ServiceDefinition> context, T prior) {\n            if (this.Type.Equals(DataType.Integer) && !context.Strict && prior.Format != null && this.Format != null) {\n                if (context.Direction == DataDirection.Request && prior.Format.Equals(\"int32\") && this.Format.Equals(\"int64\")) {\n                    return true;\n                }\n                if (context.Direction == DataDirection.Response && prior.Format.Equals(\"int64\") && this.Format.Equals(\"int32\"))\n                {\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        protected void CompareFormats(ComparisonContext<ServiceDefinition> context, T prior)\n        {\n            if (prior == null)\n            {\n                throw new ArgumentNullException(\"prior\");\n            }\n            if (context == null)\n            {\n                throw new ArgumentNullException(\"context\");\n            }\n\n            if (prior.Format == null && Format != null ||\n                prior.Format != null && Format == null ||\n                prior.Format != null && Format != null && !prior.Format.Equals(Format) && !isFormatChangeAllowed(context,prior))\n            {\n                context.LogBreakingChange(ComparisonMessages.TypeFormatChanged, Format, prior.Format);\n            }\n        }\n\n        [SuppressMessage(\"Microsoft.Maintainability\", \"CA1502:AvoidExcessiveComplexity\", Justification = \"It may look complex, but it really isn't.\")]\n        protected void CompareConstraints(ComparisonContext<ServiceDefinition> context, T prior)\n        {\n            if (prior == null)\n            {\n                throw new ArgumentNullException(\"prior\");\n            }\n            if (context == null)\n            {\n                throw new ArgumentNullException(\"context\");\n            }\n\n            if ((prior.MultipleOf == null && MultipleOf != null) ||\n                (prior.MultipleOf != null && !prior.MultipleOf.Equals(MultipleOf)))\n            {\n                context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"multipleOf\");\n            }\n            if ((prior.Maximum == null && Maximum != null) ||\n                (prior.Maximum != null && !prior.Maximum.Equals(Maximum)) ||\n                prior.ExclusiveMaximum != ExclusiveMaximum)\n            {\n                // Flag stricter constraints for requests and relaxed constraints for responses.\n                if (prior.ExclusiveMaximum != ExclusiveMaximum || context.Direction == DataDirection.None)\n                    context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"maximum\");\n                else if (context.Direction == DataDirection.Request && Narrows(prior.Maximum, Maximum, false))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsStronger, \"maximum\");\n                else if (context.Direction == DataDirection.Response && Widens(prior.Maximum, Maximum, false))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsWeaker, \"maximum\");\n                else if (Narrows(prior.Maximum, Maximum, false))\n                    context.LogInfo(ComparisonMessages.ConstraintIsStronger, \"maximum\");\n                else if (Widens(prior.Maximum, Maximum, false))\n                    context.LogInfo(ComparisonMessages.ConstraintIsWeaker, \"maximum\");\n            }\n            if ((prior.Minimum == null && Minimum != null) ||\n                (prior.Minimum != null && !prior.Minimum.Equals(Minimum)) ||\n                prior.ExclusiveMinimum != ExclusiveMinimum)\n            {\n                // Flag stricter constraints for requests and relaxed constraints for responses.\n                if (prior.ExclusiveMinimum != ExclusiveMinimum || context.Direction == DataDirection.None)\n                    context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"minimum\");\n                else if (context.Direction == DataDirection.Request && Narrows(prior.Minimum, Minimum, true))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsStronger, \"minimum\");\n                else if (context.Direction == DataDirection.Response && Widens(prior.Minimum, Minimum, true))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsWeaker, \"minimum\");\n                else if (Narrows(prior.Minimum, Minimum, true))\n                    context.LogInfo(ComparisonMessages.ConstraintIsStronger, \"minimum\");\n                else if (Widens(prior.Minimum, Minimum, true))\n                    context.LogInfo(ComparisonMessages.ConstraintIsWeaker, \"minimum\");\n            }\n            if ((prior.MaxLength == null && MaxLength != null) ||\n                (prior.MaxLength != null && !prior.MaxLength.Equals(MaxLength)))\n            {\n                // Flag stricter constraints for requests and relaxed constraints for responses.\n                if (context.Direction == DataDirection.None)\n                    context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"maxLength\");\n                else if (context.Direction == DataDirection.Request && Narrows(prior.MaxLength, MaxLength, false))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsStronger, \"maxLength\");\n                else if (context.Direction == DataDirection.Response && Widens(prior.MaxLength, MaxLength, false))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsWeaker, \"maxLength\");\n                else if (Narrows(prior.MaxLength, MaxLength, false))\n                    context.LogInfo(ComparisonMessages.ConstraintIsStronger, \"maxLength\");\n                else if (Widens(prior.MaxLength, MaxLength, false))\n                    context.LogInfo(ComparisonMessages.ConstraintIsWeaker, \"maxLength\");\n            }\n            if ((prior.MinLength == null && MinLength != null) ||\n                (prior.MinLength != null && !prior.MinLength.Equals(MinLength)))\n            {\n                // Flag stricter constraints for requests and relaxed constraints for responses.\n                if (context.Direction == DataDirection.None)\n                    context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"minLength\");\n                else if (context.Direction == DataDirection.Request && Narrows(prior.MinLength, MinLength, true))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsStronger, \"minimum\");\n                else if (context.Direction == DataDirection.Response && Widens(prior.MinLength, MinLength, true))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsWeaker, \"minimum\");\n                else if (Narrows(prior.MinLength, MinLength, true))\n                    context.LogInfo(ComparisonMessages.ConstraintIsStronger, \"minLength\");\n                else if (Widens(prior.MinLength, MinLength, true))\n                    context.LogInfo(ComparisonMessages.ConstraintIsWeaker, \"minLength\");\n            }\n            if ((prior.Pattern == null && Pattern != null) ||\n                (prior.Pattern != null && !prior.Pattern.Equals(Pattern)))\n            {\n                context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"pattern\");\n            }\n            if ((prior.MaxItems == null && MaxItems != null) ||\n                (prior.MaxItems != null && !prior.MaxItems.Equals(MaxItems)))\n            {\n                // Flag stricter constraints for requests and relaxed constraints for responses.\n                if (context.Direction == DataDirection.None)\n                    context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"maxItems\");\n                else if (context.Direction == DataDirection.Request && Narrows(prior.MaxItems, MaxItems, false))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsStronger, \"maxItems\");\n                else if (context.Direction == DataDirection.Response && Widens(prior.MaxItems, MaxItems, false))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsWeaker, \"maxItems\");\n                else if (Narrows(prior.MaxItems, MaxItems, false))\n                    context.LogInfo(ComparisonMessages.ConstraintIsStronger, \"maxItems\");\n                else if (Widens(prior.MaxItems, MaxItems, false))\n                    context.LogInfo(ComparisonMessages.ConstraintIsWeaker, \"maxItems\");\n            }\n            if ((prior.MinItems == null && MinItems != null) ||\n                (prior.MinItems != null && !prior.MinItems.Equals(MinItems)))\n            {\n                // Flag stricter constraints for requests and relaxed constraints for responses.\n                if (context.Direction == DataDirection.None)\n                    context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"minItems\");\n                else if (context.Direction == DataDirection.Request && Narrows(prior.MinItems, MinItems, true))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsStronger, \"minItems\");\n                else if (context.Direction == DataDirection.Response && Widens(prior.MinItems, MinItems, true))\n                    context.LogBreakingChange(ComparisonMessages.ConstraintIsWeaker, \"minItems\");\n                else if (Narrows(prior.MinItems, MinItems, true))\n                    context.LogInfo(ComparisonMessages.ConstraintIsStronger, \"minItems\");\n                else if (Widens(prior.MinItems, MinItems, true))\n                    context.LogInfo(ComparisonMessages.ConstraintIsWeaker, \"minItems\");\n            }\n            if (prior.UniqueItems != UniqueItems)\n            {\n                context.LogBreakingChange(ComparisonMessages.ConstraintChanged, \"uniqueItems\");\n            }\n        }\n\n        private bool Narrows(string previous, string current, bool isLowerBound)\n        {\n            int p = 0;\n            int c = 0;\n            return int.TryParse(previous, out p) &&\n                   int.TryParse(current, out c) &&\n                   (isLowerBound ? (c > p) : (c < p));\n        }\n\n        private bool Widens(string previous, string current, bool isLowerBound)\n        {\n            int p = 0;\n            int c = 0;\n            return int.TryParse(previous, out p) &&\n                   int.TryParse(current, out c) &&\n                   (isLowerBound ? (c < p) : (c > p));\n        }\n\n        protected void CompareItems(ComparisonContext<ServiceDefinition> context, T prior)\n        {\n            if (prior == null)\n            {\n                throw new ArgumentNullException(\"prior\");\n            }\n            if (context == null)\n            {\n                throw new ArgumentNullException(\"context\");\n            }\n\n            if (prior.Items != null && Items != null)\n            {\n                context.PushProperty(\"items\");\n                Items.Compare(context, prior.Items);\n                context.Pop();\n            }\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/SwaggerParameter.cs",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing Newtonsoft.Json;\nusing System.Collections.Generic;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// Describes a single operation parameter.\n    /// https://github.com/wordnik/swagger-spec/blob/master/versions/2.0.md#parameterObject \n    /// </summary>\n    public class SwaggerParameter : SwaggerObject<SwaggerParameter>\n    {\n        private bool _isRequired;\n        public string Name { get; set; }\n\n        public ParameterLocation In { get; set; }\n\n        [JsonProperty(PropertyName = \"required\")]\n        public override bool IsRequired\n        {\n            get { return _isRequired || In == ParameterLocation.Path; }\n            set { _isRequired = value; }\n        }\n\n        [JsonIgnore]\n        public bool IsConstant \n            => IsRequired && Enum != null && Enum.Count == 1;\n\n        /// <summary>\n        /// The schema defining the type used for the body parameter.\n        /// </summary>\n        public Schema Schema { get; set; }\n\n        /// <summary>\n        /// Compare a modified document node (this) to a previous one and look for breaking as well as non-breaking changes.\n        /// </summary>\n        /// <param name=\"context\">The modified document context.</param>\n        /// <param name=\"previous\">The SwaggerParameter from the original document model.</param>\n        /// <returns>A list of messages from the comparison.</returns>\n        public override IEnumerable<ComparisonMessage> Compare(\n            ComparisonContext<ServiceDefinition> context,\n            SwaggerParameter previous\n        )\n        {\n            var priorParameter = previous;\n\n            if (priorParameter == null)\n            {\n                throw new ArgumentNullException(\"priorVersion\");\n            }\n            if (context == null)\n            {\n                throw new ArgumentNullException(\"context\");\n            }\n\n            context.Direction = DataDirection.Request;\n\n            base.Compare(context, previous);\n            \n            if (In != priorParameter.In)\n            {\n                context.LogBreakingChange(\n                    ComparisonMessages.ParameterInHasChanged,\n                    priorParameter.In.ToString().ToLower(),\n                    In.ToString().ToLower()\n                );\n            }\n\n            if (IsConstant != priorParameter.IsConstant)\n            {\n                context.LogBreakingChange(ComparisonMessages.ConstantStatusHasChanged);\n            }\n\n            if (Reference != null && !Reference.Equals(priorParameter.Reference))\n            {\n                context.LogBreakingChange(ComparisonMessages.ReferenceRedirection);\n            }\n\n            if (Schema != null && priorParameter.Schema != null)\n            {\n                context.PushProperty(\"schema\");\n                Schema.Compare(context, priorParameter.Schema);\n                context.Pop();\n            }\n\n            context.Direction = DataDirection.None;\n\n            return context.Messages;\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/TransferProtocolScheme.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// The transfer protocol of the API.\n    /// </summary>\n    public enum TransferProtocolScheme\n    {\n        None,\n        Http,\n        Https,\n        Ws,\n        Wss\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Model/XmsEnumExtension.cs",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing Newtonsoft.Json;\nusing System;\nusing System.Collections.Generic;\nusing System.ComponentModel;\n\nnamespace AutoRest.Swagger.Model\n{\n    /// <summary>\n    /// The object provides metadata about the API. \n    /// The metadata can be used by the clients if needed, and can be presented \n    /// in the Swagger-UI for convenience.\n    /// </summary>\n    \n    public class XmsEnumValue\n    {\n        public dynamic value;\n        public string description;\n        public string name;\n    }\n\n    public class XmsEnumExtension \n    {\n        public string Name { get; set; }\n\n        [DefaultValue(true)]\n        [JsonProperty(DefaultValueHandling = DefaultValueHandling.Populate)]\n        public Boolean ModelAsString { get; set; }\n\n        public IList<XmsEnumValue> values { get; set; }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/PathLevelParameterConverter.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System.Collections.Generic;\nusing System.Linq;\nusing AutoRest.Swagger.Model;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing System;\n\nnamespace AutoRest.Swagger.JsonConverters\n{\n    public abstract class SwaggerJsonConverter : JsonConverter\n    {\n        protected JObject Document { get; set; }\n\n        public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)\n        {\n            throw new NotImplementedException();\n        }\n\n        protected JsonSerializerSettings GetSettings(JsonSerializer serializer)\n        {\n            if (serializer == null)\n            {\n                throw new ArgumentNullException(\"serializer\");\n            }\n\n            var settings = new JsonSerializerSettings\n            {\n                TypeNameHandling = TypeNameHandling.None,\n                MetadataPropertyHandling = MetadataPropertyHandling.Ignore\n            };\n            foreach (var converter in serializer.Converters)\n            {\n                if (converter != this)\n                {\n                    settings.Converters.Add(converter);\n                }\n            }\n            return settings;\n        }\n    }\n    public class PathLevelParameterConverter : SwaggerJsonConverter\n    {\n        public PathLevelParameterConverter(string json)\n        {\n            Document = JObject.Parse(json);\n        }\n\n        public override bool CanConvert(System.Type objectType)\n        {\n            return (objectType == typeof(Dictionary<string, Operation>));\n        }\n\n        /// <summary>\n        /// To merge common parameters at the path level into the parameters at \n        /// the operation level if they do not exist at the operation level\n        /// </summary>\n        /// <param name=\"reader\"></param>\n        /// <param name=\"objectType\"></param>\n        /// <param name=\"existingValue\"></param>\n        /// <param name=\"serializer\"></param>\n        /// <returns></returns>\n        public override object ReadJson(JsonReader reader, System.Type objectType, object existingValue,\n            JsonSerializer serializer)\n        {\n            JObject jo = JObject.Load(reader);\n            if (jo[\"parameters\"] != null)\n            {\n                var commonParameters = new Dictionary<string, JObject>();\n                foreach (JObject param in jo[\"parameters\"] as JArray)\n                {\n                    string key = GetParameterKey(param);\n                    commonParameters[key] = param;\n                }\n\n                // Iterating over the operations to merge the common parameters if they do not exist\n                foreach (JObject operation in jo.Properties()\n                    .Where(p => p.Name != \"parameters\")\n                    .Select(p => p.Value as JObject))\n                {\n                    if (operation[\"parameters\"] == null)\n                    {\n                        operation[\"parameters\"] = new JArray();\n                    }\n                    foreach (var key in commonParameters.Keys)\n                    {\n                        if (!(operation[\"parameters\"] as JArray).Any(p => GetParameterKey(p as JObject) == key))\n                        {\n                            (operation[\"parameters\"] as JArray).Add(commonParameters[key]);\n                        }\n                    }\n                }\n\n                // Removing the common parameters to avoid serialization errors\n                jo.Remove(\"parameters\");\n            }\n\n            var result = new Dictionary<string, Operation>();\n\n            foreach (JProperty operation in jo.Children())\n            {\n                if (operation.Name == null || operation.Name.StartsWith(\"x-\"))\n                {\n                    continue;\n                }\n\n                result[operation.Name] = JsonConvert.DeserializeObject<Operation>(operation.Value.ToString(),\n                    GetSettings(serializer));\n            }\n\n            return result;\n        }\n\n        /// <summary>\n        /// Returns the value of the reference or the value of the name and locattion (query, path, body)\n        /// </summary>\n        /// <param name=\"param\"></param>\n        /// <returns></returns>\n        private static string GetParameterKey(JObject param)\n        {\n            return (string)(param[\"$ref\"] ?? param[\"name\"] + \"+\" + param[\"in\"]);\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Properties/Resources.Designer.cs",
    "content": "﻿//------------------------------------------------------------------------------\n// <auto-generated>\n//     This code was generated by a tool.\n//     Runtime Version:4.0.30319.42000\n//\n//     Changes to this file may cause incorrect behavior and will be lost if\n//     the code is regenerated.\n// </auto-generated>\n//------------------------------------------------------------------------------\n\nnamespace AutoRest.Swagger.Properties {\n    using System;\n    using System.Reflection;\n    \n    \n    /// <summary>\n    ///    A strongly-typed resource class, for looking up localized strings, etc.\n    /// </summary>\n    // This class was auto-generated by the StronglyTypedResourceBuilder\n    // class via a tool like ResGen or Visual Studio.\n    // To add or remove a member, edit your .ResX file then rerun ResGen\n    // with the /str option, or rebuild your VS project.\n    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]\n    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]\n    public class Resources {\n        \n        private static global::System.Resources.ResourceManager resourceMan;\n        \n        private static global::System.Globalization.CultureInfo resourceCulture;\n        \n        internal Resources() {\n        }\n        \n        /// <summary>\n        ///    Returns the cached ResourceManager instance used by this class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Resources.ResourceManager ResourceManager {\n            get {\n                if (object.ReferenceEquals(resourceMan, null)) {\n                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager(\"AutoRest.Swagger.Properties.Resources\", typeof(Resources).GetTypeInfo().Assembly);\n                    resourceMan = temp;\n                }\n                return resourceMan;\n            }\n        }\n        \n        /// <summary>\n        ///    Overrides the current thread's CurrentUICulture property for all\n        ///    resource lookups using this strongly typed resource class.\n        /// </summary>\n        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]\n        public static global::System.Globalization.CultureInfo Culture {\n            get {\n                return resourceCulture;\n            }\n            set {\n                resourceCulture = value;\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Found a type set &apos;{0}&apos; which is circularly defined..\n        /// </summary>\n        public static string CircularBaseSchemaSet {\n            get {\n                return ResourceManager.GetString(\"CircularBaseSchemaSet\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Circular reference detected: {0}.\n        /// </summary>\n        public static string CircularReference {\n            get {\n                return ResourceManager.GetString(\"CircularReference\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Reference specifies the definition {0} that does not exist..\n        /// </summary>\n        public static string DefinitionDoesNotExist {\n            get {\n                return ResourceManager.GetString(\"DefinitionDoesNotExist\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Found operation objects with duplicate operationId &apos;{0}&apos;. OperationId must be unique among all operations described in the API..\n        /// </summary>\n        public static string DuplicateOperationIdException {\n            get {\n                return ResourceManager.GetString(\"DuplicateOperationIdException\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Error parsing swagger file.\n        /// </summary>\n        public static string ErrorParsingSpec {\n            get {\n                return ResourceManager.GetString(\"ErrorParsingSpec\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Reached Maximum reference depth when resolving reference &apos;{0}&apos;..\n        /// </summary>\n        public static string ExceededMaximumReferenceDepth {\n            get {\n                return ResourceManager.GetString(\"ExceededMaximumReferenceDepth\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Generating client model from swagger model..\n        /// </summary>\n        public static string GeneratingClient {\n            get {\n                return ResourceManager.GetString(\"GeneratingClient\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Found incompatible property types {1}, {2} for property &apos;{0}&apos; in schema inheritance chain {3}.\n        /// </summary>\n        public static string IncompatibleTypesInBaseSchema {\n            get {\n                return ResourceManager.GetString(\"IncompatibleTypesInBaseSchema\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Found incompatible property types {1}, {2} for property &apos;{0}&apos; in schema {3}.\n        /// </summary>\n        public static string IncompatibleTypesInSchemaComposition {\n            get {\n                return ResourceManager.GetString(\"IncompatibleTypesInSchemaComposition\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Swagger specification is missing info section.\n        /// </summary>\n        public static string InfoSectionMissing {\n            get {\n                return ResourceManager.GetString(\"InfoSectionMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Input parameter is required..\n        /// </summary>\n        public static string InputRequired {\n            get {\n                return ResourceManager.GetString(\"InputRequired\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to The schema&apos;s &apos;{0}&apos; ancestors should have at lease one property.\n        /// </summary>\n        public static string InvalidAncestors {\n            get {\n                return ResourceManager.GetString(\"InvalidAncestors\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Collection format &apos;{0}&apos; is not a valid collection format (in parameter &apos;{1}&apos;)..\n        /// </summary>\n        public static string InvalidCollectionFormat {\n            get {\n                return ResourceManager.GetString(\"InvalidCollectionFormat\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Cannot use &apos;extend&apos; property with &apos;allOf&apos; property in schema {0}.\n        /// </summary>\n        public static string InvalidTypeExtendsWithAllOf {\n            get {\n                return ResourceManager.GetString(\"InvalidTypeExtendsWithAllOf\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to &apos;{0}&apos; is not implemented in SwaggerSchema.ToType extension method..\n        /// </summary>\n        public static string InvalidTypeInSwaggerSchema {\n            get {\n                return ResourceManager.GetString(\"InvalidTypeInSwaggerSchema\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Collection format &quot;multi&quot; is only supported for Query parameters (parameter &apos;{0}&apos;)..\n        /// </summary>\n        public static string MultiCollectionFormatNotSupported {\n            get {\n                return ResourceManager.GetString(\"MultiCollectionFormatNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Method &apos;{0}&apos; does not declare any MIME type for the return body. Generated code will not deserialize the content..\n        /// </summary>\n        public static string NoProduceOperationWithBody {\n            get {\n                return ResourceManager.GetString(\"NoProduceOperationWithBody\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to OperationId is required for all operations. Please add it for &apos;{0}&apos; operation of &apos;{1}&apos; path. .\n        /// </summary>\n        public static string OperationIdMissing {\n            get {\n                return ResourceManager.GetString(\"OperationIdMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Options HTTP verb is not supported..\n        /// </summary>\n        public static string OptionsNotSupported {\n            get {\n                return ResourceManager.GetString(\"OptionsNotSupported\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Parsing swagger json file..\n        /// </summary>\n        public static string ParsingSwagger {\n            get {\n                return ResourceManager.GetString(\"ParsingSwagger\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Property &apos;{0}&apos; in Model &apos;{1}&apos; is marked readOnly and is also required. This is not allowed..\n        /// </summary>\n        public static string ReadOnlyNotRequired {\n            get {\n                return ResourceManager.GetString(\"ReadOnlyNotRequired\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Reference path &apos;{0}&apos; does not exist in the definition section of the Swagger document..\n        /// </summary>\n        public static string ReferenceDoesNotExist {\n            get {\n                return ResourceManager.GetString(\"ReferenceDoesNotExist\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Swagger specification is missing title in info section.\n        /// </summary>\n        public static string TitleMissing {\n            get {\n                return ResourceManager.GetString(\"TitleMissing\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to Invalid swagger 2.0 specification. Missing version property. .\n        /// </summary>\n        public static string UnknownSwaggerVersion {\n            get {\n                return ResourceManager.GetString(\"UnknownSwaggerVersion\", resourceCulture);\n            }\n        }\n        \n        /// <summary>\n        ///    Looks up a localized string similar to The operation &apos;{0}&apos; has a response body in response &apos;{1}&apos;, but did not have a supported MIME type (&apos;application/json&apos; or &apos;application/octet-stream&apos;) in its Produces property..\n        /// </summary>\n        public static string UnsupportedMimeTypeForResponseBody {\n            get {\n                return ResourceManager.GetString(\"UnsupportedMimeTypeForResponseBody\", resourceCulture);\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/Properties/Resources.resx",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<root>\n  <!-- \n    Microsoft ResX Schema \n    \n    Version 2.0\n    \n    The primary goals of this format is to allow a simple XML format \n    that is mostly human readable. The generation and parsing of the \n    various data types are done through the TypeConverter classes \n    associated with the data types.\n    \n    Example:\n    \n    ... ado.net/XML headers & schema ...\n    <resheader name=\"resmimetype\">text/microsoft-resx</resheader>\n    <resheader name=\"version\">2.0</resheader>\n    <resheader name=\"reader\">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>\n    <resheader name=\"writer\">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>\n    <data name=\"Name1\"><value>this is my long string</value><comment>this is a comment</comment></data>\n    <data name=\"Color1\" type=\"System.Drawing.Color, System.Drawing\">Blue</data>\n    <data name=\"Bitmap1\" mimetype=\"application/x-microsoft.net.object.binary.base64\">\n        <value>[base64 mime encoded serialized .NET Framework object]</value>\n    </data>\n    <data name=\"Icon1\" type=\"System.Drawing.Icon, System.Drawing\" mimetype=\"application/x-microsoft.net.object.bytearray.base64\">\n        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>\n        <comment>This is a comment</comment>\n    </data>\n                \n    There are any number of \"resheader\" rows that contain simple \n    name/value pairs.\n    \n    Each data row contains a name, and value. The row also contains a \n    type or mimetype. Type corresponds to a .NET class that support \n    text/value conversion through the TypeConverter architecture. \n    Classes that don't support this are serialized and stored with the \n    mimetype set.\n    \n    The mimetype is used for serialized objects, and tells the \n    ResXResourceReader how to depersist the object. This is currently not \n    extensible. For a given mimetype the value must be set accordingly:\n    \n    Note - application/x-microsoft.net.object.binary.base64 is the format \n    that the ResXResourceWriter will generate, however the reader can \n    read any of the formats listed below.\n    \n    mimetype: application/x-microsoft.net.object.binary.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter\n            : and then encoded with base64 encoding.\n    \n    mimetype: application/x-microsoft.net.object.soap.base64\n    value   : The object must be serialized with \n            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter\n            : and then encoded with base64 encoding.\n\n    mimetype: application/x-microsoft.net.object.bytearray.base64\n    value   : The object must be serialized into a byte array \n            : using a System.ComponentModel.TypeConverter\n            : and then encoded with base64 encoding.\n    -->\n  <xsd:schema id=\"root\" xmlns=\"\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:msdata=\"urn:schemas-microsoft-com:xml-msdata\">\n    <xsd:import namespace=\"http://www.w3.org/XML/1998/namespace\" />\n    <xsd:element name=\"root\" msdata:IsDataSet=\"true\">\n      <xsd:complexType>\n        <xsd:choice maxOccurs=\"unbounded\">\n          <xsd:element name=\"metadata\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" use=\"required\" type=\"xsd:string\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"assembly\">\n            <xsd:complexType>\n              <xsd:attribute name=\"alias\" type=\"xsd:string\" />\n              <xsd:attribute name=\"name\" type=\"xsd:string\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"data\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n                <xsd:element name=\"comment\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"2\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" msdata:Ordinal=\"1\" />\n              <xsd:attribute name=\"type\" type=\"xsd:string\" msdata:Ordinal=\"3\" />\n              <xsd:attribute name=\"mimetype\" type=\"xsd:string\" msdata:Ordinal=\"4\" />\n              <xsd:attribute ref=\"xml:space\" />\n            </xsd:complexType>\n          </xsd:element>\n          <xsd:element name=\"resheader\">\n            <xsd:complexType>\n              <xsd:sequence>\n                <xsd:element name=\"value\" type=\"xsd:string\" minOccurs=\"0\" msdata:Ordinal=\"1\" />\n              </xsd:sequence>\n              <xsd:attribute name=\"name\" type=\"xsd:string\" use=\"required\" />\n            </xsd:complexType>\n          </xsd:element>\n        </xsd:choice>\n      </xsd:complexType>\n    </xsd:element>\n  </xsd:schema>\n  <resheader name=\"resmimetype\">\n    <value>text/microsoft-resx</value>\n  </resheader>\n  <resheader name=\"version\">\n    <value>2.0</value>\n  </resheader>\n  <resheader name=\"reader\">\n    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <resheader name=\"writer\">\n    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>\n  </resheader>\n  <data name=\"CircularBaseSchemaSet\" xml:space=\"preserve\">\n    <value>Found a type set '{0}' which is circularly defined.</value>\n  </data>\n  <data name=\"CircularReference\" xml:space=\"preserve\">\n    <value>Circular reference detected: {0}</value>\n  </data>\n  <data name=\"DefinitionDoesNotExist\" xml:space=\"preserve\">\n    <value>Reference specifies the definition {0} that does not exist.</value>\n  </data>\n  <data name=\"DuplicateOperationIdException\" xml:space=\"preserve\">\n    <value>Found operation objects with duplicate operationId '{0}'. OperationId must be unique among all operations described in the API.</value>\n  </data>\n  <data name=\"ErrorParsingSpec\" xml:space=\"preserve\">\n    <value>Error parsing swagger file</value>\n  </data>\n  <data name=\"ExceededMaximumReferenceDepth\" xml:space=\"preserve\">\n    <value>Reached Maximum reference depth when resolving reference '{0}'.</value>\n  </data>\n  <data name=\"GeneratingClient\" xml:space=\"preserve\">\n    <value>Generating client model from swagger model.</value>\n  </data>\n  <data name=\"IncompatibleTypesInBaseSchema\" xml:space=\"preserve\">\n    <value>Found incompatible property types {1}, {2} for property '{0}' in schema inheritance chain {3}</value>\n  </data>\n  <data name=\"IncompatibleTypesInSchemaComposition\" xml:space=\"preserve\">\n    <value>Found incompatible property types {1}, {2} for property '{0}' in schema {3}</value>\n  </data>\n  <data name=\"InfoSectionMissing\" xml:space=\"preserve\">\n    <value>Swagger specification is missing info section</value>\n  </data>\n  <data name=\"InputRequired\" xml:space=\"preserve\">\n    <value>Input parameter is required.</value>\n  </data>\n  <data name=\"InvalidAncestors\" xml:space=\"preserve\">\n    <value>The schema's '{0}' ancestors should have at lease one property</value>\n  </data>\n  <data name=\"InvalidCollectionFormat\" xml:space=\"preserve\">\n    <value>Collection format '{0}' is not a valid collection format (in parameter '{1}').</value>\n  </data>\n  <data name=\"InvalidTypeExtendsWithAllOf\" xml:space=\"preserve\">\n    <value>Cannot use 'extend' property with 'allOf' property in schema {0}</value>\n  </data>\n  <data name=\"InvalidTypeInSwaggerSchema\" xml:space=\"preserve\">\n    <value>'{0}' is not implemented in SwaggerSchema.ToType extension method.</value>\n  </data>\n  <data name=\"MultiCollectionFormatNotSupported\" xml:space=\"preserve\">\n    <value>Collection format \"multi\" is only supported for Query parameters (parameter '{0}').</value>\n  </data>\n  <data name=\"NoProduceOperationWithBody\" xml:space=\"preserve\">\n    <value>Method '{0}' does not declare any MIME type for the return body. Generated code will not deserialize the content.</value>\n  </data>\n  <data name=\"OperationIdMissing\" xml:space=\"preserve\">\n    <value>OperationId is required for all operations. Please add it for '{0}' operation of '{1}' path. </value>\n  </data>\n  <data name=\"OptionsNotSupported\" xml:space=\"preserve\">\n    <value>Options HTTP verb is not supported.</value>\n  </data>\n  <data name=\"ParsingSwagger\" xml:space=\"preserve\">\n    <value>Parsing swagger json file.</value>\n  </data>\n  <data name=\"ReadOnlyNotRequired\" xml:space=\"preserve\">\n    <value>Property '{0}' in Model '{1}' is marked readOnly and is also required. This is not allowed.</value>\n  </data>\n  <data name=\"ReferenceDoesNotExist\" xml:space=\"preserve\">\n    <value>Reference path '{0}' does not exist in the definition section of the Swagger document.</value>\n  </data>\n  <data name=\"TitleMissing\" xml:space=\"preserve\">\n    <value>Swagger specification is missing title in info section</value>\n  </data>\n  <data name=\"UnknownSwaggerVersion\" xml:space=\"preserve\">\n    <value>Invalid swagger 2.0 specification. Missing version property. </value>\n  </data>\n  <data name=\"UnsupportedMimeTypeForResponseBody\" xml:space=\"preserve\">\n    <value>The operation '{0}' has a response body in response '{1}', but did not have a supported MIME type ('application/json' or 'application/octet-stream') in its Produces property.</value>\n  </data>\n</root>"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/SwaggerModeler.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing AutoRest.Swagger.Model;\nusing OpenApiDiff.Core;\nusing System.Collections.Generic;\n\nnamespace AutoRest.Swagger\n{\n    public class SwaggerModeler\n    {\n        /// <summary>\n        /// Copares two versions of the same service specification.\n        /// </summary>\n        /// <param name=\"fileNameOld\">a file name of the old swagger document</param>\n        /// <param name=\"swaggerOld\">a content of the old swagger document</param>\n        /// <param name=\"fileNameNew\">a file name of the new swagger document</param>\n        /// <param name=\"swaggerNew\">a content of the new swagger document</param>\n        /// <returns></returns>\n        [System.Diagnostics.CodeAnalysis.SuppressMessage(\"Microsoft.Maintainability\", \"CA1506:AvoidExcessiveClassCoupling\")]\n        public IEnumerable<ComparisonMessage> Compare(\n            string fileNameOld,\n            string swaggerOld,\n            string fileNameNew,\n            string swaggerNew,\n            Settings settings = null\n        )\n        {\n            var oldDefintion = SwaggerParser.Parse(swaggerOld, fileNameOld);\n            var newDefintion = SwaggerParser.Parse(swaggerNew, fileNameNew);\n\n            var context = new ComparisonContext<ServiceDefinition>(oldDefintion, newDefintion, settings);\n\n            var comparisonMessages = newDefintion.Typed.Compare(context, oldDefintion.Typed);\n\n            return comparisonMessages;\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/SwaggerParser.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System;\nusing AutoRest.Swagger.Model;\nusing Newtonsoft.Json;\nusing Newtonsoft.Json.Linq;\nusing OpenApiDiff.Core;\nusing AutoRest.Swagger.JsonConverters;\n\nnamespace AutoRest.Swagger\n{\n    public static class SwaggerParser\n    {\n        public static JsonDocument<ServiceDefinition> Parse(string swaggerDocument, string fileName)\n        {\n            var settings = new JsonSerializerSettings\n            {\n                TypeNameHandling = TypeNameHandling.None,\n                MetadataPropertyHandling = MetadataPropertyHandling.Ignore\n            };\n            settings.Converters.Add(new PathLevelParameterConverter(swaggerDocument));\n\n            var raw = JToken.Parse(swaggerDocument);\n\n            var swagger = JsonConvert.DeserializeObject<ServiceDefinition>(swaggerDocument, settings);\n\n            return raw.ToJsonDocument(\n               swagger,\n               fileName\n           );\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"Newtonsoft.Json\" version=\"13.0.3\" targetFramework=\"net45\" />\n  <package id=\"YamlDotNet.Signed\" version=\"5.0.0\" targetFramework=\"net45\" />\n</packages>"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/AutoRest.Swagger.Tests.csproj",
    "content": "﻿<Project Sdk=\"Microsoft.NET.Sdk\" ToolsVersion=\"15.0\">\n  <Import Project=\"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), common/common.proj ))/common/common.proj\" />\n  <Import Project=\"$(common)copy-resource-to-output.proj\" />\n  <Import Project=\"$(common)project-xunittest.proj\" />\n\n  <PropertyGroup>\n    <TargetFramework>netcoreapp6.0</TargetFramework>\n    <LangVersion>7.3</LangVersion>\n  </PropertyGroup>\n\n  <ItemGroup>\n    <Content Include=\"Resource\\Swagger\\new\\added_path.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\added_readonly_required_property.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\added_required_property.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\changed_operation_id.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\enum_as_string.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\enum_values_changed.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\misc_checks_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\misc_checks_02.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_04.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_05.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\global_parameter_order_change.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\global_parameter_no_order_change.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\parameter_location_change.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\param_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\removed_definition.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\removed_operation.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\removed_parameter.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\removed_path.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\required_parameter.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\response_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\type_changed.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_04.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\misc_checks_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\misc_checks_02.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_04.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\operation_check_05.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\param_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\response_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\new\\version_check_04.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\added_readonly_required_property.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\added_required_property.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\global_parameter_no_order_change.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\global_parameter_order_change.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\parameter_location_change.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\removed_parameter.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\recursive_model.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\changed_operation_id.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\added_path.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\required_parameter.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\removed_operation.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\removed_path.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\enum_values_changed.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\enum_as_string.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\type_changed.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\removed_definition.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\misc_checks_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\misc_checks_02.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_04.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_05.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\param_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\response_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_04.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\misc_checks_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\misc_checks_02.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_04.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\operation_check_05.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\param_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\response_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_01.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_02.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_03.json\" />\n    <Content Include=\"Resource\\Swagger\\old\\version_check_04.json\" />\n  </ItemGroup>\n\n  <ItemGroup>\n    <ProjectReference Include=\"$(SolutionDir)src/modeler/AutoRest.Swagger/AutoRest.Swagger.csproj\" />\n    <ProjectReference Include=\"..\\..\\core\\OpenApiDiff.Core\\OpenApiDiff.Core.csproj\" />\n  </ItemGroup>\n\n  <ProjectExtensions><VisualStudio><UserProperties /></VisualStudio></ProjectExtensions>\n</Project>\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/add_optional_property_01.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/DatabaseRenamed\" }\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"schema\":{\n              \"$ref\": \"#/definitions/DatabaseRenamed\"\n            }\n          }\n        }\n      }\n    }\n  },\n\"definitions\": {\n    \"Error\": {\n      \"required\": [ \"message\", \"id\" ],\n      \"properties\": {\n        \"message\": { \"type\": \"string\" },\n        \"id\": { \"type\": \"integer\" }\n      }\n    },\n    \"Register\": {\n      \"required\": [ \"b\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\",\n          \"default\": 11\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    },\n    \"DatabaseRenamed\": {\n      \"description\": \"IP firewall rule\",\n      \"type\": \"object\",\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"properties\": {\n        \"properties\": {\n          \"$ref\": \"#/definitions/IpFirewallRuleProperties\",\n          \"description\": \"IP firewall rule properties\",\n          \"x-ms-client-flatten\": true\n        }\n      }\n    },\n    \"IpFirewallRuleProperties\": {\n      \"description\": \"IP firewall rule properties\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"endIpAddress\": {\n          \"description\": \"The end IP address of the firewall rule. Must be IPv4 format. Must be greater than or equal to startIpAddress\",\n          \"type\": \"string\",\n          \"x-ms-mutability\": [\n            \"create\",\n            \"read\",\n            \"update\"\n          ]\n        },\n        \"provisioningState\": {\n          \"description\": \"Resource provisioning state\",\n          \"enum\": [\n            \"Provisioning\",\n            \"Succeeded\",\n            \"Deleting\",\n            \"Failed\",\n            \"DeleteError\"\n          ],\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": true\n          }\n        },\n        \"startIpAddress\": {\n          \"description\": \"The start IP address of the firewall rule. Must be IPv4 format\",\n          \"type\": \"string\",\n          \"x-ms-mutability\": [\n            \"create\",\n            \"read\",\n            \"update\"\n          ]\n        }\n      }\n    },\n    \"Resource\": {\n      \"title\": \"Resource\",\n      \"description\": \"Common fields that are returned in the response for all Azure Resource Manager resources\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The name of the resource\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The type of the resource. E.g. \\\"Microsoft.Compute/virtualMachines\\\" or \\\"Microsoft.Storage/storageAccounts\\\"\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/added_optional_property.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"description\": \"Database\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Database\",\n            \"schema\":{\n              \"$ref\": \"#/definitions/Database\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"discriminator\": \"a\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        }\n      },\n      \"required\": [ \"a\" ]\n    },\n    \"SqlDatabase\": {\n      \"allOf\": [\n        {\n          \"$ref\":\"#/definitions/Database\"\n        }\n      ],\n      \"properties\": {\n        \"c\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [\n            \"c1\"\n          ]\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [\n            \"d1\"\n          ]\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/added_path.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"added_path\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \n    \"http\", \n    \"https\" \n  ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \n          \"Paths\"\n        ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \n          \"Operations\"\n        ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/added_property_in_response.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_property_in_response\",\n    \"description\": \"The Azure Storage Management API.\",\n    \"version\": \"2016-12-01\",\n    \"x-ms-code-generation-settings\": {\n      \"name\": \"StorageManagementClient\"\n    }\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_CheckNameAvailability\",\n        \"description\": \"Checks that the storage account name is valid and is not already in use.\",\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCheckNameAvailabilityParameters\"\n            },\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- Operation to check the storage account name availability was successful.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/CheckNameAvailabilityResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}\": {\n      \"put\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Create\",\n        \"description\": \"Asynchronously creates a new storage account with the specified parameters. If an account is already created and a subsequent create request is issued with different properties, the account properties will be updated. If an account is already created and a subsequent create or update request is issued with the exact same set of properties, the request will succeed.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCreateParameters\"\n            },\n            \"description\": \"The parameters to provide for the created account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned when the storage account was already created from a previous request with the same properties specified in the request body.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted -- Create or update request accepted; operation will complete asynchronously.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Delete\",\n        \"description\": \"Deletes a storage account in Microsoft Azure.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account deleted successfully.\"\n          },\n          \"204\": {\n            \"description\": \"NoContent -- account does not exist in the subscription.\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_GetProperties\",\n        \"description\": \"Returns the properties for the specified storage account including but not limited to name, SKU name, location, and account status. The ListKeys operation should be used to retrieve storage keys.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- properties retrieved successfully for the storage account.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Update\",\n        \"description\": \"The update operation can be used to update the SKU, encryption, access tier, or tags for a storage account. It can also be used to map the account to a custom domain. Only one custom domain is supported per storage account; the replacement/change of custom domain is not supported. In order to replace an old custom domain, the old value must be cleared/unregistered before a new value can be set. The update of multiple properties is supported. This call does not change the storage keys for the account. If you want to change the storage account keys, use the regenerate keys operation. The location and name of the storage account cannot be changed after creation.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountUpdateParameters\"\n            },\n            \"description\": \"The parameters to provide for the updated account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account properties updated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_List\",\n        \"description\": \"Lists all the storage accounts available under the subscription. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts was retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListByResourceGroup\",\n        \"description\": \"Lists all the storage accounts available under the given resource group. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts in the given resource group retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListKeys\",\n        \"description\": \"Lists the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- list of keys retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_RegenerateKey\",\n        \"description\": \"Regenerates one of the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"regenerateKey\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountRegenerateKeyParameters\"\n            },\n            \"description\": \"Specifies name of the key which should be regenerated -- key1 or key2.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- specified key regenerated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets the current usage count and the limit for the resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- current usage acount and limit retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/UsageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListAccountSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListAccountSAS\",\n        \"description\": \"List SAS credentials of a storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccountSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list SAS credentials for the storage account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the account SAS created for the storage account requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListAccountSasResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListServiceSAS\",\n        \"description\": \"List service SAS credentials of a specific resource.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ServiceSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list service SAS credentials.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the service SAS created for the storage service requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListServiceSasResponse\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"StorageAccountCheckNameAvailabilityParameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ]\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"The parameters used to check the availabity of the storage account name.\"\n    },\n    \"CheckNameAvailabilityResult\": {\n      \"properties\": {\n        \"nameAvailable\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Gets a boolean value that indicates whether the name is available for you to use. If true, the name is available. If false, the name has already been taken or is invalid and cannot be used.\"\n        },\n        \"reason\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false.\",\n          \"enum\": [\n            \"AccountNameInvalid\",\n            \"AlreadyExists\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Reason\",\n            \"modelAsString\": false\n          }\n        },\n        \"message\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        },\n        \"customMessage\": {\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        }\n      },\n      \"description\": \"The CheckNameAvailability operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType.\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Standard_GRS\",\n            \"Standard_RAGRS\",\n            \"Standard_ZRS\",\n            \"Premium_LRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuName\",\n            \"modelAsString\": false\n          }\n        },\n        \"tier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the sku tier. This is based on the SKU name.\",\n          \"enum\": [\n            \"Standard\",\n            \"Premium\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuTier\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The SKU of the storage account.\"\n    },\n    \"CustomDomain\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.\"\n        },\n        \"useSubDomain\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether indirect CName validation is enabled. Default value is false. This should only be set on updates.\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The custom domain assigned to this storage account. This can be set via Update.\"\n    },\n    \"EncryptionService\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"A boolean indicating whether or not the service encrypts the data as it is stored.\"\n        },\n        \"lastEnabledTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets a rough estimate of the date/time when the encryption was last enabled by the user. Only returned when encryption is enabled. There might be some unencrypted blobs which were written after this time, as it is just a rough estimate.\"\n        }\n      },\n      \"description\": \"A service that allows server-side encryption to be used.\"\n    },\n    \"EncryptionServices\": {\n      \"properties\": {\n        \"blob\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the blob storage service.\"\n        },\n        \"file\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the file storage service.\"\n        },\n        \"table\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the table storage service.\"\n        },\n        \"queue\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the queue storage service.\"\n        }\n      },\n      \"description\": \"A list of services that support encryption.\"\n    },\n    \"Encryption\": {\n      \"properties\": {\n        \"services\": {\n          \"$ref\": \"#/definitions/EncryptionServices\",\n          \"description\": \"List of services which support encryption.\"\n        },\n        \"keySource\": {\n          \"type\": \"string\",\n          \"description\": \"The encryption keySource (provider). Possible values (case-insensitive):  Microsoft.Storage\",\n          \"enum\": [ \"Microsoft.Storage\" ]\n        }\n      },\n      \"required\": [ \"keySource\" ],\n      \"description\": \"The encryption settings on the storage account.\"\n    },\n    \"StorageAccountPropertiesCreateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used to create the storage account.\"\n    },\n    \"StorageAccountCreateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Required. Gets or sets the sku name.\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Indicates the type of storage account.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesCreateParameters\"\n        }\n      },\n      \"required\": [\n        \"sku\",\n        \"kind\",\n        \"location\"\n      ],\n      \"description\": \"The parameters used when creating a storage account.\"\n    },\n    \"Endpoints\": {\n      \"properties\": {\n        \"blob\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the blob endpoint.\"\n        },\n        \"queue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the queue endpoint.\"\n        },\n        \"table\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the table endpoint.\"\n        },\n        \"file\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the file endpoint.\"\n        }\n      },\n      \"description\": \"The URIs that are used to perform a retrieval of a public blob, queue, or table object.\"\n    },\n    \"StorageAccountProperties\": {\n      \"properties\": {\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status of the storage account at the time the operation was called.\",\n          \"enum\": [\n            \"Creating\",\n            \"ResolvingDNS\",\n            \"Succeeded\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": false\n          }\n        },\n        \"primaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.\"\n        },\n        \"primaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the primary data center for the storage account.\"\n        },\n        \"statusOfPrimary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the primary location of the storage account is available or unavailable.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastGeoFailoverTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"secondaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"statusOfSecondary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the SKU name is Standard_GRS or Standard_RAGRS.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"creationTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the creation date and time of the storage account in UTC.\"\n        },\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"readOnly\": true,\n          \"description\": \"Gets the custom domain the user assigned to this storage account.\"\n        },\n        \"secondaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the SKU name is Standard_RAGRS.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"readOnly\": true,\n          \"description\": \"Gets the encryption settings on the account. If unspecified, the account is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"Properties of the storage account.\"\n    },\n    \"StorageAccount\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"Gets the SKU.\"\n        },\n        \"kind\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the Kind.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The storage account.\"\n    },\n    \"StorageAccountKey\": {\n      \"properties\": {\n        \"keyName\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Name of the key.\"\n        },\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Base 64-encoded value of the key.\"\n        },\n        \"permissions\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Permissions for the key -- read-only or full permissions.\",\n          \"enum\": [\n            \"Read\",\n            \"Full\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"KeyPermission\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"An access key for the storage account.\"\n    },\n    \"StorageAccountListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccount\"\n          },\n          \"description\": \"Gets the list of storage accounts and their properties.\"\n        }\n      },\n      \"description\": \"The response from the List Storage Accounts operation.\"\n    },\n    \"StorageAccountListKeysResult\": {\n      \"properties\": {\n        \"keys\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccountKey\"\n          },\n          \"description\": \"Gets the list of storage account keys and their properties for the specified storage account.\"\n        }\n      },\n      \"description\": \"The response from the ListKeys operation.\"\n    },\n    \"StorageAccountRegenerateKeyParameters\": {\n      \"properties\": {\n        \"keyName\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"keyName\"\n      ],\n      \"description\": \"The parameters used to regenerate the storage account key.\"\n    },\n    \"StorageAccountPropertiesUpdateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"Custom domain assigned to the storage account by the user. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used when updating a storage account.\"\n    },\n    \"StorageAccountUpdateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Gets or sets the SKU name. Note that the SKU name cannot be updated to Standard_ZRS or Premium_LRS, nor can accounts of those sku names be updated to any other value.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater in length than 128 characters and a value no greater in length than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesUpdateParameters\"\n        }\n      },\n      \"description\": \"The parameters that can be provided when updating the storage account properties.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a string describing the resource name.\"\n        },\n        \"localizedValue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a localized string describing the resource name.\"\n        }\n      },\n      \"description\": \"The usage names that can be used; currently limited to StorageAccount.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the unit of measurement.\",\n          \"enum\": [\n            \"Count\",\n            \"Bytes\",\n            \"Seconds\",\n            \"Percent\",\n            \"CountsPerSecond\",\n            \"BytesPerSecond\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the current count of the allocated resources in the subscription.\"\n        },\n        \"limit\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the maximum count of the resources that can be allocated in the subscription.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"readOnly\": true,\n          \"description\": \"Gets the name of the type of usage.\"\n        }\n      },\n      \"description\": \"Describes Storage Resource Usage.\"\n    },\n    \"UsageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"Gets or sets the list of Storage Resource Usages.\"\n        }\n      },\n      \"description\": \"The response from the List Usages operation.\"\n    },\n    \"Resource\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Tags assigned to a resource; can be used for viewing and grouping a resource (across resource groups).\"\n        }\n      },\n      \"x-ms-azure-resource\": true,\n      \"description\": \"Describes a storage resource.\"\n    },\n    \"AccountSasParameters\": {\n      \"properties\": {\n        \"signedServices\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"q\",\n            \"t\",\n            \"f\"\n          ],\n          \"x-ms-client-name\": \"Services\",\n          \"description\": \"The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).\"\n        },\n        \"signedResourceTypes\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"s\",\n            \"c\",\n            \"o\"\n          ],\n          \"x-ms-client-name\": \"ResourceTypes\",\n          \"description\": \"The signed resource types that are accessible with the account SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs; Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the account SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        }\n      },\n      \"required\": [\n        \"signedServices\",\n        \"signedResourceTypes\",\n        \"signedPermission\",\n        \"signedExpiry\"\n      ],\n      \"description\": \"The parameters to list SAS credentials of a storage account.\"\n    },\n    \"ListAccountSasResponse\": {\n      \"properties\": {\n        \"accountSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List SAS credentials of storage account.\"\n        }\n      },\n      \"description\": \"The List SAS credentials operation response.\"\n    },\n    \"ServiceSasParameters\": {\n      \"properties\": {\n        \"canonicalizedResource\": {\n          \"type\": \"string\",\n          \"description\": \"The canonical path to the signed resource.\"\n        },\n        \"signedResource\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"c\",\n            \"f\",\n            \"s\"\n          ],\n          \"x-ms-client-name\": \"Resource\",\n          \"description\": \"The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the service SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"signedIdentifier\": {\n          \"type\": \"string\",\n          \"maxLength\": 64,\n          \"x-ms-client-name\": \"Identifier\",\n          \"description\": \"A unique value up to 64 characters in length that correlates to an access policy specified for the container, queue, or table.\"\n        },\n        \"startPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyStart\",\n          \"description\": \"The start of partition key.\"\n        },\n        \"endPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyEnd\",\n          \"description\": \"The end of partition key.\"\n        },\n        \"startRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyStart\",\n          \"description\": \"The start of row key.\"\n        },\n        \"endRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyEnd\",\n          \"description\": \"The end of row key.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        },\n        \"rscc\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"CacheControl\",\n          \"description\": \"The response header override for cache control.\"\n        },\n        \"rscd\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentDisposition\",\n          \"description\": \"The response header override for content disposition.\"\n        },\n        \"rsce\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentEncoding\",\n          \"description\": \"The response header override for content encoding.\"\n        },\n        \"rscl\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentLanguage\",\n          \"description\": \"The response header override for content language.\"\n        },\n        \"rsct\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentType\",\n          \"description\": \"The response header override for content type.\"\n        }\n      },\n      \"required\": [\n        \"canonicalizedResource\",\n        \"signedResource\"\n      ],\n      \"description\": \"The parameters to list service SAS credentials of a speicific resource.\"\n    },\n    \"ListServiceSasResponse\": {\n      \"properties\": {\n        \"serviceSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List service SAS credentials of speicific resource.\"\n        }\n      },\n      \"description\": \"The List service SAS credentials operation response.\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupName\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group within the user's subscription. The name is case insensitive.\",\n      \"pattern\": \"^[-\\\\w\\\\._\\\\(\\\\)]+$\",\n      \"minLength\": 1,\n      \"maxLength\": 90,\n      \"x-ms-parameter-location\": \"method\"\n    }\n  }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/added_readonly_required_property.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ],\n          \"readOnly\": true\n        }\n      },\n      \"required\": [ \"b\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/added_required_property.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        }\n      },\n      \"required\": [ \"b\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/changed_operation_id.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"changed_operation_id\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_List\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Update\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/common_parameter_check_01.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"name\": \"database\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"database2\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/common_parameter_check_02.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_02\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"name\": \"p2\",\n          \"in\": \"header\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"p3\",\n          \"in\": \"body\",\n          \"type\": \"string\",\n          \"required\": true\n        },\n        {\n          \"name\": \"p4\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/common_parameter_check_03.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_03\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"name\": \"p2\",\n          \"in\": \"header\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"p3\",\n          \"in\": \"body\",\n          \"type\": \"string\",\n          \"required\": true\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {},\n        \"parameters\": [\n          {\n            \"name\": \"p1\",\n            \"in\": \"body\",\n            \"type\": \"string\",\n            \"required\": true\n          },\n          {\n            \"name\": \"p2\",\n            \"in\": \"body\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"p3\",\n            \"in\": \"body\",\n            \"type\": \"string\"\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/common_parameter_check_04.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"body\",\n      \"type\": \"string\",\n      \"required\": true\n    },\n    \"P1\": {\n      \"name\": \"p1\",\n      \"in\": \"body\",\n      \"type\": \"string\"\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P1\"\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/default_changed_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\",\n          \"default\":\"aa\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": true\n          },\n          \"default\":\"A\",\n          \"description\": \"This property shows the number of databases returned.\"\n        },\n         \"c\": {\n          \"type\": \"number\",\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\",\n          \"default\":2\n        }\n      },\n      \"default\": { \"c\":\"test\"}\n    }\n  },\n  \"DatabaseList\":{ \n    \"type\":\"array\",\n     \"items\": {\n       \"$ref\": \"#/definitions/Database\"\n     },\n     \"default\": [{\"c\":4}]\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/enum_as_string.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\"\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/enum_values_changed.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"enum_values_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\", \"b2\", \"b3\" ]\n        },\n        \"c\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"c1\"]\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/format_check_01.json",
    "content": "{\n    \"swagger\": \"2.0\",\n    \"info\": {\n        \"version\": \"2018-01-01\",\n        \"title\": \"Schema of Azure Storage events published to Azure Event Grid\",\n        \"description\": \"Describes the schema of the Azure Storage events published to Azure Event Grid. This corresponds to the Data property of an EventGridEvent.\"\n    },\n    \"paths\": {},\n    \"definitions\": {\n        \"StorageBlobCreatedEventData\": {\n            \"description\": \"Schema of the Data property of an EventGridEvent for an Microsoft.Storage.BlobCreated event.\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"contentLength\": {\n                    \"description\": \"The size of the blob in bytes. This is the same as what would be returned in the Content-Length header from the blob.\",\n                    \"type\": \"integer\",\n                    \"format\": \"int64\"\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/format_check_02.json",
    "content": "{\n    \"swagger\": \"2.0\",\n    \"info\": {\n        \"version\": \"2018-01-01\",\n        \"title\": \"Schema of Azure Storage events published to Azure Event Grid\",\n        \"description\": \"Describes the schema of the Azure Storage events published to Azure Event Grid. This corresponds to the Data property of an EventGridEvent.\"\n    },\n    \"paths\": {},\n    \"definitions\": {\n        \"StorageBlobCreatedEventData\": {\n            \"description\": \"Schema of the Data property of an EventGridEvent for an Microsoft.Storage.BlobCreated event.\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"contentLength\": {\n                    \"description\": \"The size of the blob in bytes. This is the same as what would be returned in the Content-Length header from the blob.\",\n                    \"type\": \"integer\"\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/global_parameter_no_order_change.json",
    "content": "﻿{\n    \"swagger\": 2.0,\n    \"info\": {\n        \"title\": \"global_parameter_no_order_change\",\n        \"version\": \"1.0\"\n    },\n    \"host\": \"localhost:8000\",\n    \"schemes\": [ \"http\", \"https\" ],\n    \"paths\": {\n        \"/api/Parameters\": {\n            \"get\": {\n                \"tag\": [ \"Parameters\" ],\n                \"operationId\": \"Parameters_Get\",\n                \"produces\": [\n                    \"text/plain\"\n                ],\n                \"parameters\": [\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam1\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/ClientLocationParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam2\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/ImplicitLocationParam\"\n                    }\n                ]\n            }\n        }\n    },\n    \"parameters\": {\n        \"ImplicitLocationParam\": {\n            \"name\": \"implicit_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"Implicit x-ms-parameter-location param\"\n        },\n        \"ClientLocationParam\": {\n            \"name\": \"current_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"client x-ms-parameter-location param\",\n            \"x-ms-parameter-location\": \"client\"\n        },\n        \"MethodLocationParam1\": {\n            \"name\": \"method_location_param_1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 1\",\n            \"x-ms-parameter-location\": \"method\"\n        },\n        \"MethodLocationParam2\": {\n            \"name\": \"method_location_param_2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 2\",\n            \"x-ms-parameter-location\": \"method\"\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/global_parameter_order_change.json",
    "content": "﻿{\n    \"swagger\": 2.0,\n    \"info\": {\n        \"title\": \"global_parameter_order_change\",\n        \"version\": \"1.0\"\n    },\n    \"host\": \"localhost:8000\",\n    \"schemes\": [ \"http\", \"https\" ],\n    \"paths\": {\n        \"/api/Parameters\": {\n            \"get\": {\n                \"tag\": [ \"Parameters\" ],\n                \"operationId\": \"Parameters_Get\",\n                \"produces\": [\n                    \"text/plain\"\n                ],\n                \"parameters\": [\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam2\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/ImplicitLocationParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam1\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/ClientLocationParam\"\n                    }\n                ]\n            }\n        }\n    },\n    \"parameters\": {\n        \"ImplicitLocationParam\": {\n            \"name\": \"implicit_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"Implicit x-ms-parameter-location param\"\n        },\n        \"ClientLocationParam\": {\n            \"name\": \"current_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"client x-ms-parameter-location param\",\n            \"x-ms-parameter-location\": \"client\"\n        },\n        \"MethodLocationParam1\": {\n            \"name\": \"method_location_param_1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 1\",\n            \"x-ms-parameter-location\": \"method\"\n        },\n        \"MethodLocationParam2\": {\n            \"name\": \"method_location_param_2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 2\",\n            \"x-ms-parameter-location\": \"method\"\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/long_running_operation.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"x-ms-long-running-operation\": true\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": true\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/misc_checks_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"misc_checks_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\" ],\n  \"produces\": [ \"text/plain\", \"text/json\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      },\n      \"post\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"registry\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/misc_checks_02.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"misc_checks_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"definitions\": {\n    \"Database\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/missing_operation_id.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"changed_operation_id\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/operation_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Path\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"put\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Port\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Parameters/{b}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"b\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"f\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [ \"theonlyvalue\", \"andonemore\" ]\n          }\n        ]\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"201\": {\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          \"202\": {\n            \"schema\": {\n              \"type\": \"string\"\n            }\n          },\n          \"400\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"message\": { \"type\": \"string\" },\n                \"id\":  { \"type\":  \"integer\"}\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/operation_check_02.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/DatabaseRenamed\" }\n          }\n        ],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"registry\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Register\" }\n          }\n        ],\n        \"responses\": {}\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tags\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"201\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"400\": {\n            \"schema\": { \"$ref\": \"#/definitions/Error\" }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Error\": {\n      \"required\": [ \"message\", \"id\" ],\n      \"properties\": {\n        \"message\": { \"type\": \"string\" },\n        \"id\": { \"type\": \"integer\" }\n      }\n    },\n    \"DatabaseRenamed\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    },\n    \"Register\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\",\n          \"default\": 11\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n      ,\n      \"default\": {\n        \"id\": \"test\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/operation_check_03.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_03\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"parameters\": [\n          {\n            \"name\": \"x-bo\",\n            \"in\": \"header\",\n            \"type\": \"string\",\n            \"required\": false\n          },\n          {\n            \"name\": \"x-br\",\n            \"in\": \"header\",\n            \"type\": \"string\",\n            \"required\": true\n          },\n          {\n            \"name\": \"x-co\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"required\": false\n          },\n          {\n            \"name\": \"x-cr\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"required\": true\n          }\n\n        ]\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"headers\": {\n              \"x-b\": { \"type\": \"string\" },\n              \"x-c\": { \"type\": \"integer\" }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/operation_check_04.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"header\",\n            \"type\": \"array\",\n            \"minItems\": 11,\n            \"maxItems\": 5000,\n            \"collectionFormat\": \"pipes\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"minimum\": 11,\n              \"maximum\": 21,\n              \"multipleOf\": 4\n            }\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"header\",\n            \"type\": \"array\",\n            \"minItems\": 15,\n            \"maxItems\": 4000,\n            \"collectionFormat\": \"pipes\",\n            \"items\": {\n              \"type\": \"string\",\n              \"minLength\": 0,\n              \"maxLength\": 15,\n              \"pattern\": \"[a-z][a-z]*\"\n            }\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"minimum\": 0,\n            \"maximum\": 15,\n            \"multipleOf\": 4\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"header\",\n            \"type\": \"string\",\n            \"minLength\": 11,\n            \"maxLength\": 21,\n            \"pattern\": \"[a-z][a-z]*\"\n          }\n        ]\n      },\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"consumes\": [\n          \"application/json\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"type\": \"object\",\n            \"in\": \"body\",\n            \"schema\": { \"$ref\": \"#/definitions/A\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 11,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 15,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 0,\n            \"maxLength\": 15,\n            \"pattern\": \"[a-z][a-z]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"maximum\": 15,\n          \"multipleOf\": 4\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 11,\n          \"maxLength\": 21,\n          \"pattern\": \"[a-z][a-z]*\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/operation_check_05.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_05\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Responses\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"a\": {\n                  \"type\": \"array\",\n                  \"minItems\": 11,\n                  \"maxItems\": 5000,\n                  \"collectionFormat\": \"pipes\",\n                  \"items\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 11,\n                    \"maximum\": 21,\n                    \"multipleOf\": 4\n                  }\n                },\n                \"b\": {\n                  \"type\": \"array\",\n                  \"minItems\": 15,\n                  \"maxItems\": 4000,\n                  \"collectionFormat\": \"pipes\",\n                  \"items\": {\n                    \"type\": \"string\",\n                    \"minLength\": 0,\n                    \"maxLength\": 15,\n                    \"pattern\": \"[a-z][a-z]*\"\n                  }\n                },\n                \"c\": {\n                  \"type\": \"integer\",\n                  \"minimum\": 0,\n                  \"maximum\": 15,\n                  \"multipleOf\": 4\n                },\n                \"d\": {\n                  \"type\": \"string\",\n                  \"minLength\": 11,\n                  \"maxLength\": 21,\n                  \"pattern\": \"[a-z][a-z]*\"\n                }\n              }\n            }\n          },\n          \"201\": {\n            \"schema\": { \"$ref\": \"#/definitions/A\" }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 11,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 15,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 0,\n            \"maxLength\": 15,\n            \"pattern\": \"[a-z][a-z]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"maximum\": 15,\n          \"multipleOf\": 4\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 11,\n          \"maxLength\": 21,\n          \"pattern\": \"[a-z][a-z]*\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/optional_parameter.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"required_parameter\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"g\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/param_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 11,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 15,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 0,\n            \"maxLength\": 15,\n            \"pattern\": \"[a-z][a-z]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"maximum\": 15,\n          \"multipleOf\": 4\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 11,\n          \"maxLength\": 21,\n          \"pattern\": \"[a-z][a-z]*\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\", \"C\" ]\n        },\n        \"g\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\" ]\n        }\n      }\n    }\n  },\n  \"parameters\": {\n    \"a\": {\n      \"name\": \"a\",\n      \"in\": \"header\",\n      \"type\": \"array\",\n      \"minItems\": 11,\n      \"maxItems\": 5000,\n      \"collectionFormat\": \"pipes\",\n      \"items\": {\n        \"type\": \"integer\",\n        \"minimum\": 11,\n        \"maximum\": 21,\n        \"multipleOf\": 4\n      }\n    },\n    \"b\": {\n      \"name\": \"b\",\n      \"in\": \"header\",\n      \"type\": \"array\",\n      \"minItems\": 15,\n      \"maxItems\": 4000,\n      \"collectionFormat\": \"pipes\",\n      \"items\": {\n        \"type\": \"string\",\n        \"minLength\": 0,\n        \"maxLength\": 15,\n        \"pattern\": \"[a-z][a-z]*\"\n      }\n    },\n    \"c\": {\n      \"name\": \"c\",\n      \"in\": \"header\",\n      \"type\": \"integer\",\n      \"minimum\": 0,\n      \"maximum\": 15,\n      \"multipleOf\": 4\n    },\n    \"d\": {\n      \"name\": \"d\",\n      \"in\": \"header\",\n      \"type\": \"string\",\n      \"minLength\": 11,\n      \"maxLength\": 21,\n      \"pattern\": \"[a-z][a-z]*\"\n    },\n    \"e\": {\n      \"name\": \"e\",\n      \"type\": \"object\",\n      \"in\": \"body\",\n      \"schema\": { \"$ref\": \"#/definitions/A\" }\n    },\n    \"f\": {\n      \"type\": \"string\",\n      \"in\": \"header\",\n      \"enum\": [ \"A\", \"B\", \"C\" ]\n    },\n    \"g\": {\n      \"type\": \"string\",\n      \"in\": \"header\",\n      \"enum\": [ \"A\", \"B\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/parameter_location_change.json",
    "content": "﻿{\n    \"swagger\": 2.0,\n    \"info\": {\n        \"title\": \"parameter_location_change\",\n        \"version\": \"1.0\"\n    },\n    \"host\": \"localhost:8000\",\n    \"schemes\": [ \"http\", \"https\" ],\n    \"paths\": {\n        \"/api/Parameters\": {\n            \"get\": {\n                \"tag\": [ \"Parameters\" ],\n                \"operationId\": \"Parameters_Get\",\n                \"produces\": [\n                    \"text/plain\"\n                ],\n                \"parameters\": [\n                    {\n                        \"$ref\": \"#/parameters/ImplicitFromMethodToClient\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/GlobalFromClientToMethodParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/GlobalFromClientToClientParam\"\n                    },\n                    {\n                        \"name\": \"from_implicit_global_client_to_implicit_method\",\n                        \"in\": \"query\",\n                        \"type\": \"string\"\n                    }\n                ]\n            }\n        }\n    },\n    \"parameters\": {\n        \"ImplicitFromMethodToClient\": {\n            \"name\": \"implicit_from_method_to_client\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n        },\n        \"GlobalFromClientToMethodParam\": {\n            \"name\": \"global_from_client_to_method\",\n            \"in\": \"query\",\n            \"type\": \"string\",\n            \"x-ms-parameter-location\": \"method\"\n        },\n        \"GlobalFromClientToClientParam\": {\n            \"name\": \"global_from_client_to_client\",\n            \"in\": \"query\",\n            \"type\": \"string\",\n            \"x-ms-parameter-location\": \"client\"\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/parameter_order_change.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"parameter_order_change\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"f\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [ \"theonlyvalue\" ]\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/property_required_status_changed.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n  },\n\"definitions\": {\n    \"Register\": {\n      \"required\": [ \"b\"],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\",\n          \"default\": 11\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/readonly_changes.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"readonly_changes\",\n    \"description\": \"The Azure Storage Management API.\",\n    \"version\": \"2016-12-01\",\n    \"x-ms-code-generation-settings\": {\n      \"name\": \"StorageManagementClient\"\n    }\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_CheckNameAvailability\",\n        \"description\": \"Checks that the storage account name is valid and is not already in use.\",\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCheckNameAvailabilityParameters\"\n            },\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- Operation to check the storage account name availability was successful.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/CheckNameAvailabilityResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}\": {\n      \"put\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Create\",\n        \"description\": \"Asynchronously creates a new storage account with the specified parameters. If an account is already created and a subsequent create request is issued with different properties, the account properties will be updated. If an account is already created and a subsequent create or update request is issued with the exact same set of properties, the request will succeed.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCreateParameters\"\n            },\n            \"description\": \"The parameters to provide for the created account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned when the storage account was already created from a previous request with the same properties specified in the request body.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted -- Create or update request accepted; operation will complete asynchronously.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Delete\",\n        \"description\": \"Deletes a storage account in Microsoft Azure.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account deleted successfully.\"\n          },\n          \"204\": {\n            \"description\": \"NoContent -- account does not exist in the subscription.\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_GetProperties\",\n        \"description\": \"Returns the properties for the specified storage account including but not limited to name, SKU name, location, and account status. The ListKeys operation should be used to retrieve storage keys.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- properties retrieved successfully for the storage account.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Update\",\n        \"description\": \"The update operation can be used to update the SKU, encryption, access tier, or tags for a storage account. It can also be used to map the account to a custom domain. Only one custom domain is supported per storage account; the replacement/change of custom domain is not supported. In order to replace an old custom domain, the old value must be cleared/unregistered before a new value can be set. The update of multiple properties is supported. This call does not change the storage keys for the account. If you want to change the storage account keys, use the regenerate keys operation. The location and name of the storage account cannot be changed after creation.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountUpdateParameters\"\n            },\n            \"description\": \"The parameters to provide for the updated account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account properties updated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_List\",\n        \"description\": \"Lists all the storage accounts available under the subscription. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts was retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListByResourceGroup\",\n        \"description\": \"Lists all the storage accounts available under the given resource group. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts in the given resource group retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListKeys\",\n        \"description\": \"Lists the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- list of keys retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_RegenerateKey\",\n        \"description\": \"Regenerates one of the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"regenerateKey\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountRegenerateKeyParameters\"\n            },\n            \"description\": \"Specifies name of the key which should be regenerated -- key1 or key2.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- specified key regenerated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets the current usage count and the limit for the resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- current usage acount and limit retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/UsageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListAccountSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListAccountSAS\",\n        \"description\": \"List SAS credentials of a storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccountSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list SAS credentials for the storage account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the account SAS created for the storage account requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListAccountSasResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListServiceSAS\",\n        \"description\": \"List service SAS credentials of a specific resource.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ServiceSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list service SAS credentials.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the service SAS created for the storage service requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListServiceSasResponse\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"StorageAccountCheckNameAvailabilityParameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ]\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"The parameters used to check the availabity of the storage account name.\"\n    },\n    \"CheckNameAvailabilityResult\": {\n      \"properties\": {\n        \"nameAvailable\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Gets a boolean value that indicates whether the name is available for you to use. If true, the name is available. If false, the name has already been taken or is invalid and cannot be used.\"\n        },\n        \"reason\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false.\",\n          \"enum\": [\n            \"AccountNameInvalid\",\n            \"AlreadyExists\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Reason\",\n            \"modelAsString\": false\n          }\n        },\n        \"message\": {\n          \"readOnly\": false,\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        },\n        \"customMessage\": {\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        },\n        \"customMessageReadOnly\": {\n          \"type\": \"string\",\n          \"readOnly\":  true,\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        }\n      },\n      \"description\": \"The CheckNameAvailability operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType.\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Standard_GRS\",\n            \"Standard_RAGRS\",\n            \"Standard_ZRS\",\n            \"Premium_LRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuName\",\n            \"modelAsString\": false\n          }\n        },\n        \"tier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the sku tier. This is based on the SKU name.\",\n          \"enum\": [\n            \"Standard\",\n            \"Premium\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuTier\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The SKU of the storage account.\"\n    },\n    \"CustomDomain\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.\"\n        },\n        \"useSubDomain\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether indirect CName validation is enabled. Default value is false. This should only be set on updates.\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The custom domain assigned to this storage account. This can be set via Update.\"\n    },\n    \"EncryptionService\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"A boolean indicating whether or not the service encrypts the data as it is stored.\"\n        },\n        \"lastEnabledTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets a rough estimate of the date/time when the encryption was last enabled by the user. Only returned when encryption is enabled. There might be some unencrypted blobs which were written after this time, as it is just a rough estimate.\"\n        }\n      },\n      \"description\": \"A service that allows server-side encryption to be used.\"\n    },\n    \"EncryptionServices\": {\n      \"properties\": {\n        \"blob\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the blob storage service.\"\n        },\n        \"file\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the file storage service.\"\n        },\n        \"table\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the table storage service.\"\n        },\n        \"queue\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the queue storage service.\"\n        }\n      },\n      \"description\": \"A list of services that support encryption.\"\n    },\n    \"Encryption\": {\n      \"properties\": {\n        \"services\": {\n          \"$ref\": \"#/definitions/EncryptionServices\",\n          \"description\": \"List of services which support encryption.\"\n        },\n        \"keySource\": {\n          \"type\": \"string\",\n          \"description\": \"The encryption keySource (provider). Possible values (case-insensitive):  Microsoft.Storage\",\n          \"enum\": [ \"Microsoft.Storage\" ]\n        }\n      },\n      \"required\": [ \"keySource\" ],\n      \"description\": \"The encryption settings on the storage account.\"\n    },\n    \"StorageAccountPropertiesCreateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used to create the storage account.\"\n    },\n    \"StorageAccountCreateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Required. Gets or sets the sku name.\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Indicates the type of storage account.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.\"\n        },\n        \"newLocation\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesCreateParameters\"\n        }\n      },\n      \"required\": [\n        \"sku\",\n        \"kind\",\n        \"location\"\n      ],\n      \"description\": \"The parameters used when creating a storage account.\"\n    },\n    \"Endpoints\": {\n      \"properties\": {\n        \"blob\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the blob endpoint.\"\n        },\n        \"queue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the queue endpoint.\"\n        },\n        \"table\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the table endpoint.\"\n        },\n        \"file\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the file endpoint.\"\n        }\n      },\n      \"description\": \"The URIs that are used to perform a retrieval of a public blob, queue, or table object.\"\n    },\n    \"StorageAccountProperties\": {\n      \"properties\": {\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status of the storage account at the time the operation was called.\",\n          \"enum\": [\n            \"Creating\",\n            \"ResolvingDNS\",\n            \"Succeeded\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": false\n          }\n        },\n        \"primaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.\"\n        },\n        \"primaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the primary data center for the storage account.\"\n        },\n        \"statusOfPrimary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the primary location of the storage account is available or unavailable.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastGeoFailoverTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"secondaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"statusOfSecondary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the SKU name is Standard_GRS or Standard_RAGRS.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"creationTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the creation date and time of the storage account in UTC.\"\n        },\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"readOnly\": true,\n          \"description\": \"Gets the custom domain the user assigned to this storage account.\"\n        },\n        \"secondaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the SKU name is Standard_RAGRS.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"readOnly\": true,\n          \"description\": \"Gets the encryption settings on the account. If unspecified, the account is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"Properties of the storage account.\"\n    },\n    \"StorageAccount\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"Gets the SKU.\"\n        },\n        \"kind\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the Kind.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The storage account.\"\n    },\n    \"StorageAccountKey\": {\n      \"properties\": {\n        \"keyName\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Name of the key.\"\n        },\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Base 64-encoded value of the key.\"\n        },\n        \"permissions\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Permissions for the key -- read-only or full permissions.\",\n          \"enum\": [\n            \"Read\",\n            \"Full\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"KeyPermission\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"An access key for the storage account.\"\n    },\n    \"StorageAccountListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccount\"\n          },\n          \"description\": \"Gets the list of storage accounts and their properties.\"\n        }\n      },\n      \"description\": \"The response from the List Storage Accounts operation.\"\n    },\n    \"StorageAccountListKeysResult\": {\n      \"properties\": {\n        \"keys\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccountKey\"\n          },\n          \"description\": \"Gets the list of storage account keys and their properties for the specified storage account.\"\n        }\n      },\n      \"description\": \"The response from the ListKeys operation.\"\n    },\n    \"StorageAccountRegenerateKeyParameters\": {\n      \"properties\": {\n        \"keyName\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"keyName\"\n      ],\n      \"description\": \"The parameters used to regenerate the storage account key.\"\n    },\n    \"StorageAccountPropertiesUpdateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"Custom domain assigned to the storage account by the user. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used when updating a storage account.\"\n    },\n    \"StorageAccountUpdateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Gets or sets the SKU name. Note that the SKU name cannot be updated to Standard_ZRS or Premium_LRS, nor can accounts of those sku names be updated to any other value.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater in length than 128 characters and a value no greater in length than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesUpdateParameters\"\n        }\n      },\n      \"description\": \"The parameters that can be provided when updating the storage account properties.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a string describing the resource name.\"\n        },\n        \"localizedValue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a localized string describing the resource name.\"\n        }\n      },\n      \"description\": \"The usage names that can be used; currently limited to StorageAccount.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the unit of measurement.\",\n          \"enum\": [\n            \"Count\",\n            \"Bytes\",\n            \"Seconds\",\n            \"Percent\",\n            \"CountsPerSecond\",\n            \"BytesPerSecond\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the current count of the allocated resources in the subscription.\"\n        },\n        \"limit\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the maximum count of the resources that can be allocated in the subscription.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"readOnly\": true,\n          \"description\": \"Gets the name of the type of usage.\"\n        }\n      },\n      \"description\": \"Describes Storage Resource Usage.\"\n    },\n    \"UsageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"Gets or sets the list of Storage Resource Usages.\"\n        }\n      },\n      \"description\": \"The response from the List Usages operation.\"\n    },\n    \"Resource\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Tags assigned to a resource; can be used for viewing and grouping a resource (across resource groups).\"\n        }\n      },\n      \"x-ms-azure-resource\": true,\n      \"description\": \"Describes a storage resource.\"\n    },\n    \"AccountSasParameters\": {\n      \"properties\": {\n        \"signedServices\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"q\",\n            \"t\",\n            \"f\"\n          ],\n          \"x-ms-client-name\": \"Services\",\n          \"description\": \"The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).\"\n        },\n        \"signedResourceTypes\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"s\",\n            \"c\",\n            \"o\"\n          ],\n          \"x-ms-client-name\": \"ResourceTypes\",\n          \"description\": \"The signed resource types that are accessible with the account SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs; Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the account SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        }\n      },\n      \"required\": [\n        \"signedServices\",\n        \"signedResourceTypes\",\n        \"signedPermission\",\n        \"signedExpiry\"\n      ],\n      \"description\": \"The parameters to list SAS credentials of a storage account.\"\n    },\n    \"ListAccountSasResponse\": {\n      \"properties\": {\n        \"accountSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List SAS credentials of storage account.\"\n        }\n      },\n      \"description\": \"The List SAS credentials operation response.\"\n    },\n    \"ServiceSasParameters\": {\n      \"properties\": {\n        \"canonicalizedResource\": {\n          \"type\": \"string\",\n          \"description\": \"The canonical path to the signed resource.\"\n        },\n        \"signedResource\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"c\",\n            \"f\",\n            \"s\"\n          ],\n          \"x-ms-client-name\": \"Resource\",\n          \"description\": \"The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the service SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"signedIdentifier\": {\n          \"type\": \"string\",\n          \"maxLength\": 64,\n          \"x-ms-client-name\": \"Identifier\",\n          \"description\": \"A unique value up to 64 characters in length that correlates to an access policy specified for the container, queue, or table.\"\n        },\n        \"startPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyStart\",\n          \"description\": \"The start of partition key.\"\n        },\n        \"endPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyEnd\",\n          \"description\": \"The end of partition key.\"\n        },\n        \"startRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyStart\",\n          \"description\": \"The start of row key.\"\n        },\n        \"endRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyEnd\",\n          \"description\": \"The end of row key.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        },\n        \"rscc\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"CacheControl\",\n          \"description\": \"The response header override for cache control.\"\n        },\n        \"rscd\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentDisposition\",\n          \"description\": \"The response header override for content disposition.\"\n        },\n        \"rsce\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentEncoding\",\n          \"description\": \"The response header override for content encoding.\"\n        },\n        \"rscl\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentLanguage\",\n          \"description\": \"The response header override for content language.\"\n        },\n        \"rsct\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentType\",\n          \"description\": \"The response header override for content type.\"\n        }\n      },\n      \"required\": [\n        \"canonicalizedResource\",\n        \"signedResource\"\n      ],\n      \"description\": \"The parameters to list service SAS credentials of a speicific resource.\"\n    },\n    \"ListServiceSasResponse\": {\n      \"properties\": {\n        \"serviceSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List service SAS credentials of speicific resource.\"\n        }\n      },\n      \"description\": \"The List service SAS credentials operation response.\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupName\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group within the user's subscription. The name is case insensitive.\",\n      \"pattern\": \"^[-\\\\w\\\\._\\\\(\\\\)]+$\",\n      \"minLength\": 1,\n      \"maxLength\": 90,\n      \"x-ms-parameter-location\": \"method\"\n    }\n  }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/recursive_model.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"recursive_model\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/CreateParam\"\n            },\n            \"description\": \"Create Param.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"default\": {\n            \"description\": \"BadRequest\",\n            \"schema\": { \"$ref\": \"#/definitions/CloudError\" }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"CloudError\": {\n      \"description\": \"Error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": { \"error\": { \"$ref\": \"#/definitions/CloudErrorBody\" } },\n      \"x-ms-external\": true\n    },\n    \"CloudErrorBody\": {\n      \"description\": \"Body of an error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": { \"type\": \"string\" },\n        \"message\": { \"type\": \"string\", \"readOnly\":  true },\n        \"target\": { \"type\": \"string\" },\n        \"details\": {\n          \"description\": \"Inner errors.\",\n          \"type\": \"array\",\n          \"items\": { \"$ref\": \"#/definitions/CloudErrorBody\" }\n        }\n      }\n    },\n    \"CreateParam\": {\n      \"description\": \"Create Param a REST request.\",\n      \"type\": \"object\",\n      \"properties\": { \"error\": { \"$ref\": \"#/definitions/CreateParamBody\" } },\n      \"x-ms-external\": true\n    },\n    \"CreateParamBody\": {\n      \"description\": \"Create Param Body a REST request.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": { \"type\": \"string\" },\n        \"message\": { \"type\": \"string\" },\n        \"details\": {\n          \"description\": \"Inner errors.\",\n          \"type\": \"array\",\n          \"items\": { \"$ref\": \"#/definitions/CreateParam\" }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/removed_definition.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_definition\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/removed_operation.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_operation\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/removed_operation_id.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"changed_operation_id\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/removed_parameter.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_parameter\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": []\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/removed_path.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_path\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/removed_property.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"StorageManagement\",\n    \"description\": \"The Azure Storage Management API.\",\n    \"version\": \"2016-12-01\",\n    \"x-ms-code-generation-settings\": {\n      \"name\": \"StorageManagementClient\"\n    }\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_CheckNameAvailability\",\n        \"description\": \"Checks that the storage account name is valid and is not already in use.\",\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCheckNameAvailabilityParameters\"\n            },\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- Operation to check the storage account name availability was successful.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/CheckNameAvailabilityResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}\": {\n      \"put\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Create\",\n        \"description\": \"Asynchronously creates a new storage account with the specified parameters. If an account is already created and a subsequent create request is issued with different properties, the account properties will be updated. If an account is already created and a subsequent create or update request is issued with the exact same set of properties, the request will succeed.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCreateParameters\"\n            },\n            \"description\": \"The parameters to provide for the created account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned when the storage account was already created from a previous request with the same properties specified in the request body.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted -- Create or update request accepted; operation will complete asynchronously.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Delete\",\n        \"description\": \"Deletes a storage account in Microsoft Azure.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account deleted successfully.\"\n          },\n          \"204\": {\n            \"description\": \"NoContent -- account does not exist in the subscription.\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_GetProperties\",\n        \"description\": \"Returns the properties for the specified storage account including but not limited to name, SKU name, location, and account status. The ListKeys operation should be used to retrieve storage keys.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- properties retrieved successfully for the storage account.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Update\",\n        \"description\": \"The update operation can be used to update the SKU, encryption, access tier, or tags for a storage account. It can also be used to map the account to a custom domain. Only one custom domain is supported per storage account; the replacement/change of custom domain is not supported. In order to replace an old custom domain, the old value must be cleared/unregistered before a new value can be set. The update of multiple properties is supported. This call does not change the storage keys for the account. If you want to change the storage account keys, use the regenerate keys operation. The location and name of the storage account cannot be changed after creation.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountUpdateParameters\"\n            },\n            \"description\": \"The parameters to provide for the updated account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account properties updated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_List\",\n        \"description\": \"Lists all the storage accounts available under the subscription. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts was retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListByResourceGroup\",\n        \"description\": \"Lists all the storage accounts available under the given resource group. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts in the given resource group retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListKeys\",\n        \"description\": \"Lists the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- list of keys retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_RegenerateKey\",\n        \"description\": \"Regenerates one of the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"regenerateKey\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountRegenerateKeyParameters\"\n            },\n            \"description\": \"Specifies name of the key which should be regenerated -- key1 or key2.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- specified key regenerated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets the current usage count and the limit for the resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- current usage acount and limit retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/UsageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListAccountSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListAccountSAS\",\n        \"description\": \"List SAS credentials of a storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccountSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list SAS credentials for the storage account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the account SAS created for the storage account requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListAccountSasResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListServiceSAS\",\n        \"description\": \"List service SAS credentials of a specific resource.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ServiceSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list service SAS credentials.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the service SAS created for the storage service requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListServiceSasResponse\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"StorageAccountCheckNameAvailabilityParameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ]\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"The parameters used to check the availabity of the storage account name.\"\n    },\n    \"CheckNameAvailabilityResult\": {\n      \"properties\": {\n        \"nameAvailable\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Gets a boolean value that indicates whether the name is available for you to use. If true, the name is available. If false, the name has already been taken or is invalid and cannot be used.\"\n        },\n        \"reason\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false.\",\n          \"enum\": [\n            \"AccountNameInvalid\",\n            \"AlreadyExists\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Reason\",\n            \"modelAsString\": false\n          }\n        },\n        \"message\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        }\n      },\n      \"description\": \"The CheckNameAvailability operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType.\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Standard_GRS\",\n            \"Standard_RAGRS\",\n            \"Standard_ZRS\",\n            \"Premium_LRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuName\",\n            \"modelAsString\": false\n          }\n        },\n        \"tier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the sku tier. This is based on the SKU name.\",\n          \"enum\": [\n            \"Standard\",\n            \"Premium\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuTier\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The SKU of the storage account.\"\n    },\n    \"CustomDomain\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.\"\n        },\n        \"useSubDomain\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether indirect CName validation is enabled. Default value is false. This should only be set on updates.\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The custom domain assigned to this storage account. This can be set via Update.\"\n    },\n    \"EncryptionService\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"A boolean indicating whether or not the service encrypts the data as it is stored.\"\n        },\n        \"lastEnabledTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets a rough estimate of the date/time when the encryption was last enabled by the user. Only returned when encryption is enabled. There might be some unencrypted blobs which were written after this time, as it is just a rough estimate.\"\n        }\n      },\n      \"description\": \"A service that allows server-side encryption to be used.\"\n    },\n    \"EncryptionServices\": {\n      \"properties\": {\n        \"blob\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the blob storage service.\"\n        },\n        \"file\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the file storage service.\"\n        },\n        \"table\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the table storage service.\"\n        },\n        \"queue\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the queue storage service.\"\n        }\n      },\n      \"description\": \"A list of services that support encryption.\"\n    },\n    \"Encryption\": {\n      \"properties\": {\n        \"services\": {\n          \"$ref\": \"#/definitions/EncryptionServices\",\n          \"description\": \"List of services which support encryption.\"\n        },\n        \"keySource\": {\n          \"type\": \"string\",\n          \"description\": \"The encryption keySource (provider). Possible values (case-insensitive):  Microsoft.Storage\",\n          \"enum\": [ \"Microsoft.Storage\" ]\n        }\n      },\n      \"required\": [ \"keySource\" ],\n      \"description\": \"The encryption settings on the storage account.\"\n    },\n    \"StorageAccountPropertiesCreateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used to create the storage account.\"\n    },\n    \"StorageAccountCreateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Required. Gets or sets the sku name.\"\n        },\n        \"kind1\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Indicates the type of storage account.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesCreateParameters\"\n        }\n      },\n      \"required\": [\n        \"sku\",\n        \"kind\",\n        \"location\"\n      ],\n      \"description\": \"The parameters used when creating a storage account.\"\n    },\n    \"Endpoints\": {\n      \"properties\": {\n        \"blob\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the blob endpoint.\"\n        },\n        \"queue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the queue endpoint.\"\n        },\n        \"table\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the table endpoint.\"\n        },\n        \"file\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the file endpoint.\"\n        }\n      },\n      \"description\": \"The URIs that are used to perform a retrieval of a public blob, queue, or table object.\"\n    },\n    \"StorageAccountProperties\": {\n      \"properties\": {\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status of the storage account at the time the operation was called.\",\n          \"enum\": [\n            \"Creating\",\n            \"ResolvingDNS\",\n            \"Succeeded\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": false\n          }\n        },\n        \"primaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.\"\n        },\n        \"primaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the primary data center for the storage account.\"\n        },\n        \"statusOfPrimary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the primary location of the storage account is available or unavailable.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastGeoFailoverTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"secondaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"statusOfSecondary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the SKU name is Standard_GRS or Standard_RAGRS.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"creationTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the creation date and time of the storage account in UTC.\"\n        },\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"readOnly\": true,\n          \"description\": \"Gets the custom domain the user assigned to this storage account.\"\n        },\n        \"secondaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the SKU name is Standard_RAGRS.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"readOnly\": true,\n          \"description\": \"Gets the encryption settings on the account. If unspecified, the account is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"Properties of the storage account.\"\n    },\n    \"StorageAccount\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"Gets the SKU.\"\n        },\n        \"kind\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the Kind.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The storage account.\"\n    },\n    \"StorageAccountKey\": {\n      \"properties\": {\n        \"keyName\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Name of the key.\"\n        },\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Base 64-encoded value of the key.\"\n        },\n        \"permissions\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Permissions for the key -- read-only or full permissions.\",\n          \"enum\": [\n            \"Read\",\n            \"Full\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"KeyPermission\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"An access key for the storage account.\"\n    },\n    \"StorageAccountListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccount\"\n          },\n          \"description\": \"Gets the list of storage accounts and their properties.\"\n        }\n      },\n      \"description\": \"The response from the List Storage Accounts operation.\"\n    },\n    \"StorageAccountListKeysResult\": {\n      \"properties\": {\n        \"keys\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccountKey\"\n          },\n          \"description\": \"Gets the list of storage account keys and their properties for the specified storage account.\"\n        }\n      },\n      \"description\": \"The response from the ListKeys operation.\"\n    },\n    \"StorageAccountRegenerateKeyParameters\": {\n      \"properties\": {\n        \"keyName\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"keyName\"\n      ],\n      \"description\": \"The parameters used to regenerate the storage account key.\"\n    },\n    \"StorageAccountPropertiesUpdateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"Custom domain assigned to the storage account by the user. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used when updating a storage account.\"\n    },\n    \"StorageAccountUpdateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Gets or sets the SKU name. Note that the SKU name cannot be updated to Standard_ZRS or Premium_LRS, nor can accounts of those sku names be updated to any other value.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater in length than 128 characters and a value no greater in length than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesUpdateParameters\"\n        }\n      },\n      \"description\": \"The parameters that can be provided when updating the storage account properties.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a string describing the resource name.\"\n        },\n        \"localizedValue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a localized string describing the resource name.\"\n        }\n      },\n      \"description\": \"The usage names that can be used; currently limited to StorageAccount.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the unit of measurement.\",\n          \"enum\": [\n            \"Count\",\n            \"Bytes\",\n            \"Seconds\",\n            \"Percent\",\n            \"CountsPerSecond\",\n            \"BytesPerSecond\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the current count of the allocated resources in the subscription.\"\n        },\n        \"limit\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the maximum count of the resources that can be allocated in the subscription.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"readOnly\": true,\n          \"description\": \"Gets the name of the type of usage.\"\n        }\n      },\n      \"description\": \"Describes Storage Resource Usage.\"\n    },\n    \"UsageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"Gets or sets the list of Storage Resource Usages.\"\n        }\n      },\n      \"description\": \"The response from the List Usages operation.\"\n    },\n    \"Resource\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Tags assigned to a resource; can be used for viewing and grouping a resource (across resource groups).\"\n        }\n      },\n      \"x-ms-azure-resource\": true,\n      \"description\": \"Describes a storage resource.\"\n    },\n    \"AccountSasParameters\": {\n      \"properties\": {\n        \"signedServices\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"q\",\n            \"t\",\n            \"f\"\n          ],\n          \"x-ms-client-name\": \"Services\",\n          \"description\": \"The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).\"\n        },\n        \"signedResourceTypes\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"s\",\n            \"c\",\n            \"o\"\n          ],\n          \"x-ms-client-name\": \"ResourceTypes\",\n          \"description\": \"The signed resource types that are accessible with the account SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs; Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the account SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        }\n      },\n      \"required\": [\n        \"signedServices\",\n        \"signedResourceTypes\",\n        \"signedPermission\",\n        \"signedExpiry\"\n      ],\n      \"description\": \"The parameters to list SAS credentials of a storage account.\"\n    },\n    \"ListAccountSasResponse\": {\n      \"properties\": {\n        \"accountSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List SAS credentials of storage account.\"\n        }\n      },\n      \"description\": \"The List SAS credentials operation response.\"\n    },\n    \"ServiceSasParameters\": {\n      \"properties\": {\n        \"canonicalizedResource\": {\n          \"type\": \"string\",\n          \"description\": \"The canonical path to the signed resource.\"\n        },\n        \"signedResource\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"c\",\n            \"f\",\n            \"s\"\n          ],\n          \"x-ms-client-name\": \"Resource\",\n          \"description\": \"The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the service SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"signedIdentifier\": {\n          \"type\": \"string\",\n          \"maxLength\": 64,\n          \"x-ms-client-name\": \"Identifier\",\n          \"description\": \"A unique value up to 64 characters in length that correlates to an access policy specified for the container, queue, or table.\"\n        },\n        \"startPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyStart\",\n          \"description\": \"The start of partition key.\"\n        },\n        \"endPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyEnd\",\n          \"description\": \"The end of partition key.\"\n        },\n        \"startRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyStart\",\n          \"description\": \"The start of row key.\"\n        },\n        \"endRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyEnd\",\n          \"description\": \"The end of row key.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        },\n        \"rscc\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"CacheControl\",\n          \"description\": \"The response header override for cache control.\"\n        },\n        \"rscd\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentDisposition\",\n          \"description\": \"The response header override for content disposition.\"\n        },\n        \"rsce\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentEncoding\",\n          \"description\": \"The response header override for content encoding.\"\n        },\n        \"rscl\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentLanguage\",\n          \"description\": \"The response header override for content language.\"\n        },\n        \"rsct\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentType\",\n          \"description\": \"The response header override for content type.\"\n        }\n      },\n      \"required\": [\n        \"canonicalizedResource\",\n        \"signedResource\"\n      ],\n      \"description\": \"The parameters to list service SAS credentials of a speicific resource.\"\n    },\n    \"ListServiceSasResponse\": {\n      \"properties\": {\n        \"serviceSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List service SAS credentials of speicific resource.\"\n        }\n      },\n      \"description\": \"The List service SAS credentials operation response.\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupName\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group within the user's subscription. The name is case insensitive.\",\n      \"pattern\": \"^[-\\\\w\\\\._\\\\(\\\\)]+$\",\n      \"minLength\": 1,\n      \"maxLength\": 90,\n      \"x-ms-parameter-location\": \"method\"\n    }\n  }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/required_parameter.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"required_parameter\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"g\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/response_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_05\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 11,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 11,\n            \"maximum\": 21,\n            \"multipleOf\": 4\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 15,\n          \"maxItems\": 5000,\n          \"collectionFormat\": \"pipes\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 0,\n            \"maxLength\": 15,\n            \"pattern\": \"[a-z][a-z]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 0,\n          \"maximum\": 15,\n          \"multipleOf\": 4\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 11,\n          \"maxLength\": 21,\n          \"pattern\": \"[a-z][a-z]*\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\", \"C\" ]\n        },\n        \"g\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\" ]\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"200\": {\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"a\": {\n            \"type\": \"array\",\n            \"minItems\": 11,\n            \"maxItems\": 5000,\n            \"collectionFormat\": \"pipes\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"minimum\": 11,\n              \"maximum\": 21,\n              \"multipleOf\": 4\n            }\n          },\n          \"b\": {\n            \"type\": \"array\",\n            \"minItems\": 15,\n            \"maxItems\": 4000,\n            \"collectionFormat\": \"pipes\",\n            \"items\": {\n              \"type\": \"string\",\n              \"minLength\": 0,\n              \"maxLength\": 15,\n              \"pattern\": \"[a-z][a-z]*\"\n            }\n          },\n          \"c\": {\n            \"type\": \"integer\",\n            \"minimum\": 0,\n            \"maximum\": 15,\n            \"multipleOf\": 4\n          },\n          \"d\": {\n            \"type\": \"string\",\n            \"minLength\": 11,\n            \"maxLength\": 21,\n            \"pattern\": \"[a-z][a-z]*\"\n          },\n          \"f\": {\n            \"type\": \"string\",\n            \"enum\": [ \"A\", \"B\", \"C\" ]\n          },\n          \"g\": {\n            \"type\": \"string\",\n            \"enum\": [ \"A\", \"B\" ]\n          }\n        }\n      }\n    },\n    \"201\": {\n      \"schema\": { \"$ref\": \"#/definitions/A\" }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/type_changed.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/type_changed_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"object\",\n          \"readOnly\": true,\n          \"properties\": {\n            \"b\": {\n              \"type\": \"string\",\n              \"readOnly\": true\n            }\n          },\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/type_changed_02.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"$ref\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"Property named '$ref'. Unusual but valid.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/version_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_01\",\n    \"version\": \"2.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/version_check_02.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_02\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/version_check_03.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_03\",\n    \"version\": \"1.1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/version_check_04.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/xms_client_name_changed.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/DatabaseRenamed\" }\n          }\n        ],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"registry\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Register\" }\n          }\n        ],\n        \"responses\": {}\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tags\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"201\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"400\": {\n            \"schema\": { \"$ref\": \"#/definitions/Error\" }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Error\": {\n      \"required\": [ \"message\", \"id\" ],\n      \"properties\": {\n        \"message\": { \"type\": \"string\" },\n        \"id\": { \"type\": \"integer\" }\n      }\n    },\n    \"DatabaseRenamed\": {\n      \"x-ms-client-name\":\"database\",\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    },\n    \"Register\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\",\n          \"default\": 11\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n      ,\n      \"default\": {\n        \"id\": \"test\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/xms_enum_added.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\",\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": true\n          }\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ],\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/new/xms_enum_changed.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityTypeNew\",\n            \"modelAsString\": false\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/add_optional_property_01.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/DatabaseRenamed\" }\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"schema\":{\n              \"type\":\"object\"\n          }\n        }\n      }\n    }\n  }\n  },\n  \"definitions\": {\n    \"Error\": {\n      \"required\": [ \"message\", \"id\" ],\n      \"properties\": {\n        \"message\": { \"type\": \"string\" },\n        \"id\": { \"type\": \"integer\" }\n      }\n    },\n    \"Register\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\",\n          \"default\": 11\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    },\n    \"DatabaseRenamed\": {\n      \"description\": \"IP firewall rule\",\n      \"type\": \"object\",\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"properties\": {\n        \"properties\": {\n          \"$ref\": \"#/definitions/IpFirewallRuleProperties\",\n          \"description\": \"IP firewall rule properties\",\n          \"x-ms-client-flatten\": true\n        }\n      }\n    },\n    \"IpFirewallRuleProperties\": {\n      \"description\": \"IP firewall rule properties\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"endIpAddress\": {\n          \"description\": \"The end IP address of the firewall rule. Must be IPv4 format. Must be greater than or equal to startIpAddress\",\n          \"type\": \"string\",\n          \"x-ms-mutability\": [\n            \"create\",\n            \"read\",\n            \"update\"\n          ]\n        },\n        \"provisioningState\": {\n          \"description\": \"Resource provisioning state\",\n          \"enum\": [\n            \"Provisioning\",\n            \"Succeeded\",\n            \"Deleting\",\n            \"Failed\",\n            \"DeleteError\"\n          ],\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": true\n          }\n        },\n        \"startIpAddress\": {\n          \"description\": \"The start IP address of the firewall rule. Must be IPv4 format\",\n          \"type\": \"string\",\n          \"x-ms-mutability\": [\n            \"create\",\n            \"read\",\n            \"update\"\n          ]\n        }\n      }\n    },\n    \"Resource\": {\n      \"title\": \"Resource\",\n      \"description\": \"Common fields that are returned in the response for all Azure Resource Manager resources\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Fully qualified resource ID for the resource. Ex - /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The name of the resource\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The type of the resource. E.g. \\\"Microsoft.Compute/virtualMachines\\\" or \\\"Microsoft.Storage/storageAccounts\\\"\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/added_optional_property.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"description\": \"Database\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"Database\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Database\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"discriminator\": \"a\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        }\n      },\n      \"required\": [ \"a\" ]\n    },\n    \"SqlDatabase\": {\n      \"allOf\": [\n        {\n          \"$ref\":\"#/definitions/Database\"\n        }\n      ],\n      \"properties\": {\n        \"c\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [\n            \"c1\"\n          ]\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/added_path.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"added_path\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \n    \"http\", \n    \"https\" \n  ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \n          \"Operations\"\n        ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/added_property_in_response.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_property_in_response\",\n    \"description\": \"The Azure Storage Management API.\",\n    \"version\": \"2016-12-01\",\n    \"x-ms-code-generation-settings\": {\n      \"name\": \"StorageManagementClient\"\n    }\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_CheckNameAvailability\",\n        \"description\": \"Checks that the storage account name is valid and is not already in use.\",\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCheckNameAvailabilityParameters\"\n            },\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- Operation to check the storage account name availability was successful.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/CheckNameAvailabilityResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}\": {\n      \"put\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Create\",\n        \"description\": \"Asynchronously creates a new storage account with the specified parameters. If an account is already created and a subsequent create request is issued with different properties, the account properties will be updated. If an account is already created and a subsequent create or update request is issued with the exact same set of properties, the request will succeed.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCreateParameters\"\n            },\n            \"description\": \"The parameters to provide for the created account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned when the storage account was already created from a previous request with the same properties specified in the request body.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted -- Create or update request accepted; operation will complete asynchronously.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Delete\",\n        \"description\": \"Deletes a storage account in Microsoft Azure.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account deleted successfully.\"\n          },\n          \"204\": {\n            \"description\": \"NoContent -- account does not exist in the subscription.\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_GetProperties\",\n        \"description\": \"Returns the properties for the specified storage account including but not limited to name, SKU name, location, and account status. The ListKeys operation should be used to retrieve storage keys.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- properties retrieved successfully for the storage account.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Update\",\n        \"description\": \"The update operation can be used to update the SKU, encryption, access tier, or tags for a storage account. It can also be used to map the account to a custom domain. Only one custom domain is supported per storage account; the replacement/change of custom domain is not supported. In order to replace an old custom domain, the old value must be cleared/unregistered before a new value can be set. The update of multiple properties is supported. This call does not change the storage keys for the account. If you want to change the storage account keys, use the regenerate keys operation. The location and name of the storage account cannot be changed after creation.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountUpdateParameters\"\n            },\n            \"description\": \"The parameters to provide for the updated account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account properties updated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_List\",\n        \"description\": \"Lists all the storage accounts available under the subscription. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts was retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListByResourceGroup\",\n        \"description\": \"Lists all the storage accounts available under the given resource group. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts in the given resource group retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListKeys\",\n        \"description\": \"Lists the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- list of keys retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_RegenerateKey\",\n        \"description\": \"Regenerates one of the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"regenerateKey\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountRegenerateKeyParameters\"\n            },\n            \"description\": \"Specifies name of the key which should be regenerated -- key1 or key2.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- specified key regenerated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets the current usage count and the limit for the resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- current usage acount and limit retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/UsageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListAccountSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListAccountSAS\",\n        \"description\": \"List SAS credentials of a storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccountSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list SAS credentials for the storage account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the account SAS created for the storage account requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListAccountSasResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListServiceSAS\",\n        \"description\": \"List service SAS credentials of a specific resource.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ServiceSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list service SAS credentials.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the service SAS created for the storage service requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListServiceSasResponse\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"StorageAccountCheckNameAvailabilityParameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ]\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"The parameters used to check the availabity of the storage account name.\"\n    },\n    \"CheckNameAvailabilityResult\": {\n      \"properties\": {\n        \"nameAvailable\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Gets a boolean value that indicates whether the name is available for you to use. If true, the name is available. If false, the name has already been taken or is invalid and cannot be used.\"\n        },\n        \"reason\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false.\",\n          \"enum\": [\n            \"AccountNameInvalid\",\n            \"AlreadyExists\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Reason\",\n            \"modelAsString\": false\n          }\n        },\n        \"message\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        }\n      },\n      \"description\": \"The CheckNameAvailability operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType.\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Standard_GRS\",\n            \"Standard_RAGRS\",\n            \"Standard_ZRS\",\n            \"Premium_LRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuName\",\n            \"modelAsString\": false\n          }\n        },\n        \"tier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the sku tier. This is based on the SKU name.\",\n          \"enum\": [\n            \"Standard\",\n            \"Premium\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuTier\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The SKU of the storage account.\"\n    },\n    \"CustomDomain\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.\"\n        },\n        \"useSubDomain\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether indirect CName validation is enabled. Default value is false. This should only be set on updates.\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The custom domain assigned to this storage account. This can be set via Update.\"\n    },\n    \"EncryptionService\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"A boolean indicating whether or not the service encrypts the data as it is stored.\"\n        },\n        \"lastEnabledTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets a rough estimate of the date/time when the encryption was last enabled by the user. Only returned when encryption is enabled. There might be some unencrypted blobs which were written after this time, as it is just a rough estimate.\"\n        }\n      },\n      \"description\": \"A service that allows server-side encryption to be used.\"\n    },\n    \"EncryptionServices\": {\n      \"properties\": {\n        \"blob\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the blob storage service.\"\n        },\n        \"file\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the file storage service.\"\n        },\n        \"table\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the table storage service.\"\n        },\n        \"queue\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the queue storage service.\"\n        }\n      },\n      \"description\": \"A list of services that support encryption.\"\n    },\n    \"Encryption\": {\n      \"properties\": {\n        \"services\": {\n          \"$ref\": \"#/definitions/EncryptionServices\",\n          \"description\": \"List of services which support encryption.\"\n        },\n        \"keySource\": {\n          \"type\": \"string\",\n          \"description\": \"The encryption keySource (provider). Possible values (case-insensitive):  Microsoft.Storage\",\n          \"enum\": [ \"Microsoft.Storage\" ]\n        }\n      },\n      \"required\": [ \"keySource\" ],\n      \"description\": \"The encryption settings on the storage account.\"\n    },\n    \"StorageAccountPropertiesCreateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used to create the storage account.\"\n    },\n    \"StorageAccountCreateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Required. Gets or sets the sku name.\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Indicates the type of storage account.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesCreateParameters\"\n        }\n      },\n      \"required\": [\n        \"sku\",\n        \"kind\",\n        \"location\"\n      ],\n      \"description\": \"The parameters used when creating a storage account.\"\n    },\n    \"Endpoints\": {\n      \"properties\": {\n        \"blob\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the blob endpoint.\"\n        },\n        \"queue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the queue endpoint.\"\n        },\n        \"table\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the table endpoint.\"\n        },\n        \"file\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the file endpoint.\"\n        }\n      },\n      \"description\": \"The URIs that are used to perform a retrieval of a public blob, queue, or table object.\"\n    },\n    \"StorageAccountProperties\": {\n      \"properties\": {\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status of the storage account at the time the operation was called.\",\n          \"enum\": [\n            \"Creating\",\n            \"ResolvingDNS\",\n            \"Succeeded\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": false\n          }\n        },\n        \"primaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.\"\n        },\n        \"primaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the primary data center for the storage account.\"\n        },\n        \"statusOfPrimary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the primary location of the storage account is available or unavailable.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastGeoFailoverTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"secondaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"statusOfSecondary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the SKU name is Standard_GRS or Standard_RAGRS.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"creationTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the creation date and time of the storage account in UTC.\"\n        },\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"readOnly\": true,\n          \"description\": \"Gets the custom domain the user assigned to this storage account.\"\n        },\n        \"secondaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the SKU name is Standard_RAGRS.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"readOnly\": true,\n          \"description\": \"Gets the encryption settings on the account. If unspecified, the account is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"Properties of the storage account.\"\n    },\n    \"StorageAccount\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"Gets the SKU.\"\n        },\n        \"kind\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the Kind.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The storage account.\"\n    },\n    \"StorageAccountKey\": {\n      \"properties\": {\n        \"keyName\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Name of the key.\"\n        },\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Base 64-encoded value of the key.\"\n        },\n        \"permissions\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Permissions for the key -- read-only or full permissions.\",\n          \"enum\": [\n            \"Read\",\n            \"Full\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"KeyPermission\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"An access key for the storage account.\"\n    },\n    \"StorageAccountListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccount\"\n          },\n          \"description\": \"Gets the list of storage accounts and their properties.\"\n        }\n      },\n      \"description\": \"The response from the List Storage Accounts operation.\"\n    },\n    \"StorageAccountListKeysResult\": {\n      \"properties\": {\n        \"keys\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccountKey\"\n          },\n          \"description\": \"Gets the list of storage account keys and their properties for the specified storage account.\"\n        }\n      },\n      \"description\": \"The response from the ListKeys operation.\"\n    },\n    \"StorageAccountRegenerateKeyParameters\": {\n      \"properties\": {\n        \"keyName\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"keyName\"\n      ],\n      \"description\": \"The parameters used to regenerate the storage account key.\"\n    },\n    \"StorageAccountPropertiesUpdateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"Custom domain assigned to the storage account by the user. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used when updating a storage account.\"\n    },\n    \"StorageAccountUpdateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Gets or sets the SKU name. Note that the SKU name cannot be updated to Standard_ZRS or Premium_LRS, nor can accounts of those sku names be updated to any other value.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater in length than 128 characters and a value no greater in length than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesUpdateParameters\"\n        }\n      },\n      \"description\": \"The parameters that can be provided when updating the storage account properties.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a string describing the resource name.\"\n        },\n        \"localizedValue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a localized string describing the resource name.\"\n        }\n      },\n      \"description\": \"The usage names that can be used; currently limited to StorageAccount.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the unit of measurement.\",\n          \"enum\": [\n            \"Count\",\n            \"Bytes\",\n            \"Seconds\",\n            \"Percent\",\n            \"CountsPerSecond\",\n            \"BytesPerSecond\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the current count of the allocated resources in the subscription.\"\n        },\n        \"limit\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the maximum count of the resources that can be allocated in the subscription.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"readOnly\": true,\n          \"description\": \"Gets the name of the type of usage.\"\n        }\n      },\n      \"description\": \"Describes Storage Resource Usage.\"\n    },\n    \"UsageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"Gets or sets the list of Storage Resource Usages.\"\n        }\n      },\n      \"description\": \"The response from the List Usages operation.\"\n    },\n    \"Resource\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Tags assigned to a resource; can be used for viewing and grouping a resource (across resource groups).\"\n        }\n      },\n      \"x-ms-azure-resource\": true,\n      \"description\": \"Describes a storage resource.\"\n    },\n    \"AccountSasParameters\": {\n      \"properties\": {\n        \"signedServices\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"q\",\n            \"t\",\n            \"f\"\n          ],\n          \"x-ms-client-name\": \"Services\",\n          \"description\": \"The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).\"\n        },\n        \"signedResourceTypes\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"s\",\n            \"c\",\n            \"o\"\n          ],\n          \"x-ms-client-name\": \"ResourceTypes\",\n          \"description\": \"The signed resource types that are accessible with the account SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs; Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the account SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        }\n      },\n      \"required\": [\n        \"signedServices\",\n        \"signedResourceTypes\",\n        \"signedPermission\",\n        \"signedExpiry\"\n      ],\n      \"description\": \"The parameters to list SAS credentials of a storage account.\"\n    },\n    \"ListAccountSasResponse\": {\n      \"properties\": {\n        \"accountSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List SAS credentials of storage account.\"\n        }\n      },\n      \"description\": \"The List SAS credentials operation response.\"\n    },\n    \"ServiceSasParameters\": {\n      \"properties\": {\n        \"canonicalizedResource\": {\n          \"type\": \"string\",\n          \"description\": \"The canonical path to the signed resource.\"\n        },\n        \"signedResource\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"c\",\n            \"f\",\n            \"s\"\n          ],\n          \"x-ms-client-name\": \"Resource\",\n          \"description\": \"The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the service SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"signedIdentifier\": {\n          \"type\": \"string\",\n          \"maxLength\": 64,\n          \"x-ms-client-name\": \"Identifier\",\n          \"description\": \"A unique value up to 64 characters in length that correlates to an access policy specified for the container, queue, or table.\"\n        },\n        \"startPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyStart\",\n          \"description\": \"The start of partition key.\"\n        },\n        \"endPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyEnd\",\n          \"description\": \"The end of partition key.\"\n        },\n        \"startRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyStart\",\n          \"description\": \"The start of row key.\"\n        },\n        \"endRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyEnd\",\n          \"description\": \"The end of row key.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        },\n        \"rscc\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"CacheControl\",\n          \"description\": \"The response header override for cache control.\"\n        },\n        \"rscd\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentDisposition\",\n          \"description\": \"The response header override for content disposition.\"\n        },\n        \"rsce\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentEncoding\",\n          \"description\": \"The response header override for content encoding.\"\n        },\n        \"rscl\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentLanguage\",\n          \"description\": \"The response header override for content language.\"\n        },\n        \"rsct\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentType\",\n          \"description\": \"The response header override for content type.\"\n        }\n      },\n      \"required\": [\n        \"canonicalizedResource\",\n        \"signedResource\"\n      ],\n      \"description\": \"The parameters to list service SAS credentials of a speicific resource.\"\n    },\n    \"ListServiceSasResponse\": {\n      \"properties\": {\n        \"serviceSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List service SAS credentials of speicific resource.\"\n        }\n      },\n      \"description\": \"The List service SAS credentials operation response.\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupName\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group within the user's subscription. The name is case insensitive.\",\n      \"pattern\": \"^[-\\\\w\\\\._\\\\(\\\\)]+$\",\n      \"minLength\": 1,\n      \"maxLength\": 90,\n      \"x-ms-parameter-location\": \"method\"\n    }\n  }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/added_readonly_required_property.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ],\n          \"readOnly\": true\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/added_required_property.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/changed_operation_id.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"changed_operation_id\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/common_parameter_check_01.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"name\": \"database\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/common_parameter_check_02.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_02\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"name\": \"p1\",\n          \"in\": \"body\",\n          \"type\": \"string\",\n          \"required\": true\n        },\n        {\n          \"name\": \"p2\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"p3\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"p4\",\n          \"in\": \"body\",\n          \"type\": \"string\",\n          \"required\": true\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/common_parameter_check_03.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_03\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"name\": \"p1\",\n          \"in\": \"body\",\n          \"type\": \"object\"\n        },\n        {\n          \"name\": \"p2\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        },\n        {\n          \"name\": \"p3\",\n          \"in\": \"body\",\n          \"type\": \"string\"\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {},\n        \"parameters\": [\n          {\n            \"name\": \"p1\",\n            \"in\": \"body\",\n            \"type\": \"string\",\n            \"required\": true\n          },\n          {\n            \"name\": \"p2\",\n            \"in\": \"body\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"p3\",\n            \"in\": \"body\",\n            \"type\": \"string\"\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/common_parameter_check_04.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"body\",\n      \"type\": \"string\"\n    },\n    \"P1\": {\n      \"name\": \"p1\",\n      \"in\": \"body\",\n      \"type\": \"string\"\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P1\"\n        }\n      ],\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/default_changed_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\",\n          \"default\":\"a\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": true\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        },\n         \"c\": {\n          \"type\": \"number\",\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\",\n          \"default\":1\n        }\n      },\n      \"default\": { \"b\":\"test\"}\n    }\n  },\n  \"DatabaseList\":{ \n    \"type\":\"array\",\n     \"items\": {\n       \"$ref\": \"#/definitions/Database\"\n     },\n     \"default\": [{\"c\":2}]\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/enum_as_string.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": true\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/enum_values_changed.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"enum_values_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        },\n        \"c\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/format_check_01.json",
    "content": "{\n    \"swagger\": \"2.0\",\n    \"info\": {\n        \"version\": \"2018-01-01\",\n        \"title\": \"Schema of Azure Storage events published to Azure Event Grid\",\n        \"description\": \"Describes the schema of the Azure Storage events published to Azure Event Grid. This corresponds to the Data property of an EventGridEvent.\"\n    },\n    \"paths\": {},\n    \"definitions\": {\n        \"StorageBlobCreatedEventData\": {\n            \"description\": \"Schema of the Data property of an EventGridEvent for an Microsoft.Storage.BlobCreated event.\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"contentLength\": {\n                    \"description\": \"The size of the blob in bytes. This is the same as what would be returned in the Content-Length header from the blob.\",\n                    \"type\": \"integer\"\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/format_check_02.json",
    "content": "{\n    \"swagger\": \"2.0\",\n    \"info\": {\n        \"version\": \"2018-01-01\",\n        \"title\": \"Schema of Azure Storage events published to Azure Event Grid\",\n        \"description\": \"Describes the schema of the Azure Storage events published to Azure Event Grid. This corresponds to the Data property of an EventGridEvent.\"\n    },\n    \"paths\": {},\n    \"definitions\": {\n        \"StorageBlobCreatedEventData\": {\n            \"description\": \"Schema of the Data property of an EventGridEvent for an Microsoft.Storage.BlobCreated event.\",\n            \"type\": \"object\",\n            \"properties\": {\n                \"contentLength\": {\n                    \"description\": \"The size of the blob in bytes. This is the same as what would be returned in the Content-Length header from the blob.\",\n                    \"type\": \"integer\",\n                    \"format\": \"int64\"\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/global_parameter_no_order_change.json",
    "content": "﻿{\n    \"swagger\": 2.0,\n    \"info\": {\n        \"title\": \"global_parameter_no_order_change\",\n        \"version\": \"1.0\"\n    },\n    \"host\": \"localhost:8000\",\n    \"schemes\": [ \"http\", \"https\" ],\n    \"paths\": {\n        \"/api/Parameters\": {\n            \"get\": {\n                \"tag\": [ \"Parameters\" ],\n                \"operationId\": \"Parameters_Get\",\n                \"produces\": [\n                    \"text/plain\"\n                ],\n                \"parameters\": [\n                    {\n                        \"$ref\": \"#/parameters/ImplicitLocationParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam1\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/ClientLocationParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam2\"\n                    }\n                ]\n            }\n        }\n    },\n    \"parameters\": {\n        \"ImplicitLocationParam\": {\n            \"name\": \"implicit_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"Implicit x-ms-parameter-location param\"\n        },\n        \"ClientLocationParam\": {\n            \"name\": \"current_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"client x-ms-parameter-location param\",\n            \"x-ms-parameter-location\": \"client\"\n        },\n        \"MethodLocationParam1\": {\n            \"name\": \"method_location_param_1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 1\",\n            \"x-ms-parameter-location\": \"method\"\n        },\n        \"MethodLocationParam2\": {\n            \"name\": \"method_location_param_2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 2\",\n            \"x-ms-parameter-location\": \"method\"\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/global_parameter_order_change.json",
    "content": "﻿{\n    \"swagger\": 2.0,\n    \"info\": {\n        \"title\": \"global_parameter_order_change\",\n        \"version\": \"1.0\"\n    },\n    \"host\": \"localhost:8000\",\n    \"schemes\": [ \"http\", \"https\" ],\n    \"paths\": {\n        \"/api/Parameters\": {\n            \"get\": {\n                \"tag\": [ \"Parameters\" ],\n                \"operationId\": \"Parameters_Get\",\n                \"produces\": [\n                    \"text/plain\"\n                ],\n                \"parameters\": [\n                    {\n                        \"$ref\": \"#/parameters/ImplicitLocationParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam1\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/ClientLocationParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/MethodLocationParam2\"\n                    }\n                ]\n            }\n        }\n    },\n    \"parameters\": {\n        \"ImplicitLocationParam\": {\n            \"name\": \"implicit_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"Implicit x-ms-parameter-location param\"\n        },\n        \"ClientLocationParam\": {\n            \"name\": \"current_location_param\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"client x-ms-parameter-location param\",\n            \"x-ms-parameter-location\": \"client\"\n        },\n        \"MethodLocationParam1\": {\n            \"name\": \"method_location_param_1\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 1\",\n            \"x-ms-parameter-location\": \"method\"\n        },\n        \"MethodLocationParam2\": {\n            \"name\": \"method_location_param_2\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"method x-ms-parameter-location param 2\",\n            \"x-ms-parameter-location\": \"method\"\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/long_running_operation.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"x-ms-long-running-operation\": false\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": true\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/misc_checks_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"misc_checks_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/DatabaseList\" }\n          }\n        ]\n      },\n      \"post\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"registry\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"DatabaseList\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        },\n        \"c\": {\n          \"type\": \"array\",\n          \"readOnly\": true,\n          \"description\": \"A list of databases.\",\n          \"items\": { \"$ref\": \"#/definitions/Database\" }\n        }\n      }\n    },\n    \"Database\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/misc_checks_02.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"misc_checks_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"definitions\": {\n    \"Database\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    },\n    \"Unreferenced\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/missing_operation_id.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"changed_operation_id\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/operation_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"f\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [ \"theonlyvalue\" ]\n          }\n        ]\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"201\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"400\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"message\": { \"type\": \"string\" },\n                \"id\": { \"type\": \"string\" }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/operation_check_02.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\"responses\": {}\n      },\n      \"post\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"registry\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Registry\" }\n          }\n        ],\n        \"responses\": {}\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tags\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"201\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"400\": {\n            \"schema\": { \"$ref\": \"#/definitions/Error\" }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Error\": {\n      \"required\": [ \"message\", \"id\" ],\n      \"properties\": {\n        \"message\": { \"type\": \"string\" },\n        \"id\": { \"type\": \"string\" }\n      }\n    },\n    \"Database\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    },\n    \"Registry\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      },\n      \"default\": {\n        \"id\": \"test\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/operation_check_03.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_03\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"parameters\": [\n          {\n            \"name\": \"x-ao\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"required\": false\n          },\n          {\n            \"name\": \"x-ar\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"required\": true\n          },\n          {\n            \"name\": \"x-bo\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"required\": false\n          },\n          {\n            \"name\": \"x-br\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"required\": true\n          }\n        ]\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"headers\": {\n              \"x-a\": { \"type\": \"integer\" },\n              \"x-b\": { \"type\": \"integer\" }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/operation_check_04.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"header\",\n            \"type\": \"array\",\n            \"minItems\": 13,\n            \"maxItems\": 4711,\n            \"collectionFormat\": \"csv\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 17,\n              \"multipleOf\": 5\n            }\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"header\",\n            \"type\": \"array\",\n            \"minItems\": 13,\n            \"maxItems\": 4711,\n            \"collectionFormat\": \"csv\",\n            \"items\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 17,\n              \"pattern\": \"[a-z][a-z0-9]*\"\n            }\n          },\n          {\n            \"name\": \"c\",\n            \"in\": \"header\",\n            \"type\": \"integer\",\n            \"minimum\": 1,\n            \"maximum\": 17,\n            \"multipleOf\": 5\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"header\",\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 17,\n            \"pattern\": \"[a-z][a-z0-9]*\"\n          }\n        ]\n      },\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"consumes\": [\n          \"application/json\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"type\": \"object\",\n            \"in\": \"body\",\n            \"schema\": { \"$ref\": \"#/definitions/A\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 1,\n            \"maximum\": 17,\n            \"multipleOf\": 5\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 17,\n            \"pattern\": \"[a-z][a-z0-9]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"maximum\": 17,\n          \"multipleOf\": 5\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 1,\n          \"maxLength\": 17,\n          \"pattern\": \"[a-z][a-z0-9]*\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/operation_check_05.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_05\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Responses\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"a\": {\n                  \"type\": \"array\",\n                  \"minItems\": 13,\n                  \"maxItems\": 4711,\n                  \"collectionFormat\": \"csv\",\n                  \"items\": {\n                    \"type\": \"integer\",\n                    \"minimum\": 1,\n                    \"maximum\": 17,\n                    \"multipleOf\": 5\n                  }\n                },\n                \"b\": {\n                  \"type\": \"array\",\n                  \"minItems\": 13,\n                  \"maxItems\": 4711,\n                  \"collectionFormat\": \"csv\",\n                  \"items\": {\n                    \"type\": \"string\",\n                    \"minLength\": 1,\n                    \"maxLength\": 17,\n                    \"pattern\": \"[a-z][a-z0-9]*\"\n                  }\n                },\n                \"c\": {\n                  \"type\": \"integer\",\n                  \"minimum\": 1,\n                  \"maximum\": 17,\n                  \"multipleOf\": 5\n                },\n                \"d\": {\n                  \"type\": \"string\",\n                  \"minLength\": 1,\n                  \"maxLength\": 17,\n                  \"pattern\": \"[a-z][a-z0-9]*\"\n                }\n              }\n            }\n          },\n          \"201\": {\n            \"schema\":  { \"$ref\":  \"#/definitions/A\"}\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 1,\n            \"maximum\": 17,\n            \"multipleOf\": 5\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 17,\n            \"pattern\": \"[a-z][a-z0-9]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"maximum\": 17,\n          \"multipleOf\": 5\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 1,\n          \"maxLength\": 17,\n          \"pattern\": \"[a-z][a-z0-9]*\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/optional_parameter.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"required_parameter\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"f\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"enum\": [ \"theonlyvalue\" ]\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/param_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 1,\n            \"maximum\": 17,\n            \"multipleOf\": 5\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 17,\n            \"pattern\": \"[a-z][a-z0-9]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"maximum\": 17,\n          \"multipleOf\": 5\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 1,\n          \"maxLength\": 17,\n          \"pattern\": \"[a-z][a-z0-9]*\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\" ]\n        },\n        \"g\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\", \"C\" ]\n        }\n      }\n    }\n  },\n  \"parameters\": {\n    \"a\": {\n      \"name\": \"a\",\n      \"in\": \"header\",\n      \"type\": \"array\",\n      \"minItems\": 13,\n      \"maxItems\": 4711,\n      \"collectionFormat\": \"csv\",\n      \"items\": {\n        \"type\": \"integer\",\n        \"minimum\": 1,\n        \"maximum\": 17,\n        \"multipleOf\": 5\n      }\n    },\n    \"b\": {\n      \"name\": \"b\",\n      \"in\": \"header\",\n      \"type\": \"array\",\n      \"minItems\": 13,\n      \"maxItems\": 4711,\n      \"collectionFormat\": \"csv\",\n      \"items\": {\n        \"type\": \"string\",\n        \"minLength\": 1,\n        \"maxLength\": 17,\n        \"pattern\": \"[a-z][a-z0-9]*\"\n      }\n    },\n    \"c\": {\n      \"name\": \"c\",\n      \"in\": \"header\",\n      \"type\": \"integer\",\n      \"minimum\": 1,\n      \"maximum\": 17,\n      \"multipleOf\": 5\n    },\n    \"d\": {\n      \"name\": \"d\",\n      \"in\": \"header\",\n      \"type\": \"string\",\n      \"minLength\": 1,\n      \"maxLength\": 17,\n      \"pattern\": \"[a-z][a-z0-9]*\"\n    },\n    \"e\": {\n      \"name\": \"e\",\n      \"type\": \"object\",\n      \"in\": \"body\",\n      \"schema\": { \"$ref\": \"#/definitions/A\" }\n    },\n    \"f\": {\n      \"type\": \"string\",\n      \"in\": \"header\",\n      \"enum\": [ \"A\", \"B\" ]\n    },\n    \"g\": {\n      \"type\": \"string\",\n      \"in\": \"header\",\n      \"enum\": [ \"A\", \"B\", \"C\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/parameter_location_change.json",
    "content": "﻿{\n    \"swagger\": 2.0,\n    \"info\": {\n        \"title\": \"parameter_location_change\",\n        \"version\": \"1.0\"\n    },\n    \"host\": \"localhost:8000\",\n    \"schemes\": [ \"http\", \"https\" ],\n    \"paths\": {\n        \"/api/Parameters\": {\n            \"get\": {\n                \"tag\": [ \"Parameters\" ],\n                \"operationId\": \"Parameters_Get\",\n                \"produces\": [\n                    \"text/plain\"\n                ],\n                \"parameters\": [\n                    {\n                        \"name\": \"implicit_from_method_to_client\",\n                        \"in\": \"query\",\n                        \"type\": \"string\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/GlobalFromClientToMethodParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/GlobalFromClientToClientParam\"\n                    },\n                    {\n                        \"$ref\": \"#/parameters/FromImplicitGlobalClientToImplicitMethod\"\n                    }\n                ]\n            }\n        }\n    },\n    \"parameters\": {\n        \"GlobalFromClientToMethodParam\": {\n            \"name\": \"global_from_client_to_method\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n        },\n        \"GlobalFromClientToClientParam\": {\n            \"name\": \"global_from_client_to_client\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n        },\n        \"FromImplicitGlobalClientToImplicitMethod\": {\n            \"name\": \"from_implicit_global_client_to_implicit_method\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/parameter_order_change.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"parameter_order_change\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"f\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [ \"theonlyvalue\" ]\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/property_required_status_changed.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n  },\n\"definitions\": {\n    \"Register\": {\n      \"required\": [ \"a\"],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\",\n          \"default\": 11\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/readonly_changes.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"readonly_changes\",\n    \"description\": \"The Azure Storage Management API.\",\n    \"version\": \"2016-12-01\",\n    \"x-ms-code-generation-settings\": {\n      \"name\": \"StorageManagementClient\"\n    }\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_CheckNameAvailability\",\n        \"description\": \"Checks that the storage account name is valid and is not already in use.\",\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCheckNameAvailabilityParameters\"\n            },\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- Operation to check the storage account name availability was successful.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/CheckNameAvailabilityResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}\": {\n      \"put\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Create\",\n        \"description\": \"Asynchronously creates a new storage account with the specified parameters. If an account is already created and a subsequent create request is issued with different properties, the account properties will be updated. If an account is already created and a subsequent create or update request is issued with the exact same set of properties, the request will succeed.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCreateParameters\"\n            },\n            \"description\": \"The parameters to provide for the created account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned when the storage account was already created from a previous request with the same properties specified in the request body.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted -- Create or update request accepted; operation will complete asynchronously.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Delete\",\n        \"description\": \"Deletes a storage account in Microsoft Azure.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account deleted successfully.\"\n          },\n          \"204\": {\n            \"description\": \"NoContent -- account does not exist in the subscription.\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_GetProperties\",\n        \"description\": \"Returns the properties for the specified storage account including but not limited to name, SKU name, location, and account status. The ListKeys operation should be used to retrieve storage keys.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- properties retrieved successfully for the storage account.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Update\",\n        \"description\": \"The update operation can be used to update the SKU, encryption, access tier, or tags for a storage account. It can also be used to map the account to a custom domain. Only one custom domain is supported per storage account; the replacement/change of custom domain is not supported. In order to replace an old custom domain, the old value must be cleared/unregistered before a new value can be set. The update of multiple properties is supported. This call does not change the storage keys for the account. If you want to change the storage account keys, use the regenerate keys operation. The location and name of the storage account cannot be changed after creation.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountUpdateParameters\"\n            },\n            \"description\": \"The parameters to provide for the updated account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account properties updated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_List\",\n        \"description\": \"Lists all the storage accounts available under the subscription. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts was retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListByResourceGroup\",\n        \"description\": \"Lists all the storage accounts available under the given resource group. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts in the given resource group retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListKeys\",\n        \"description\": \"Lists the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- list of keys retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_RegenerateKey\",\n        \"description\": \"Regenerates one of the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"regenerateKey\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountRegenerateKeyParameters\"\n            },\n            \"description\": \"Specifies name of the key which should be regenerated -- key1 or key2.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- specified key regenerated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets the current usage count and the limit for the resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- current usage acount and limit retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/UsageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListAccountSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListAccountSAS\",\n        \"description\": \"List SAS credentials of a storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccountSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list SAS credentials for the storage account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the account SAS created for the storage account requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListAccountSasResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListServiceSAS\",\n        \"description\": \"List service SAS credentials of a specific resource.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ServiceSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list service SAS credentials.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the service SAS created for the storage service requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListServiceSasResponse\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"StorageAccountCheckNameAvailabilityParameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ]\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"The parameters used to check the availabity of the storage account name.\"\n    },\n    \"CheckNameAvailabilityResult\": {\n      \"properties\": {\n        \"nameAvailable\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Gets a boolean value that indicates whether the name is available for you to use. If true, the name is available. If false, the name has already been taken or is invalid and cannot be used.\"\n        },\n        \"reason\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false.\",\n          \"enum\": [\n            \"AccountNameInvalid\",\n            \"AlreadyExists\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Reason\",\n            \"modelAsString\": false\n          }\n        },\n        \"message\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        }\n      },\n      \"description\": \"The CheckNameAvailability operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType.\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Standard_GRS\",\n            \"Standard_RAGRS\",\n            \"Standard_ZRS\",\n            \"Premium_LRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuName\",\n            \"modelAsString\": false\n          }\n        },\n        \"tier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the sku tier. This is based on the SKU name.\",\n          \"enum\": [\n            \"Standard\",\n            \"Premium\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuTier\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The SKU of the storage account.\"\n    },\n    \"CustomDomain\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.\"\n        },\n        \"useSubDomain\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether indirect CName validation is enabled. Default value is false. This should only be set on updates.\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The custom domain assigned to this storage account. This can be set via Update.\"\n    },\n    \"EncryptionService\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"A boolean indicating whether or not the service encrypts the data as it is stored.\"\n        },\n        \"lastEnabledTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets a rough estimate of the date/time when the encryption was last enabled by the user. Only returned when encryption is enabled. There might be some unencrypted blobs which were written after this time, as it is just a rough estimate.\"\n        }\n      },\n      \"description\": \"A service that allows server-side encryption to be used.\"\n    },\n    \"EncryptionServices\": {\n      \"properties\": {\n        \"blob\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the blob storage service.\"\n        },\n        \"file\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the file storage service.\"\n        },\n        \"table\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the table storage service.\"\n        },\n        \"queue\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the queue storage service.\"\n        }\n      },\n      \"description\": \"A list of services that support encryption.\"\n    },\n    \"Encryption\": {\n      \"properties\": {\n        \"services\": {\n          \"$ref\": \"#/definitions/EncryptionServices\",\n          \"description\": \"List of services which support encryption.\"\n        },\n        \"keySource\": {\n          \"type\": \"string\",\n          \"description\": \"The encryption keySource (provider). Possible values (case-insensitive):  Microsoft.Storage\",\n          \"enum\": [ \"Microsoft.Storage\" ]\n        }\n      },\n      \"required\": [ \"keySource\" ],\n      \"description\": \"The encryption settings on the storage account.\"\n    },\n    \"StorageAccountPropertiesCreateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used to create the storage account.\"\n    },\n    \"StorageAccountCreateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Required. Gets or sets the sku name.\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Indicates the type of storage account.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesCreateParameters\"\n        }\n      },\n      \"required\": [\n        \"sku\",\n        \"kind\",\n        \"location\"\n      ],\n      \"description\": \"The parameters used when creating a storage account.\"\n    },\n    \"Endpoints\": {\n      \"properties\": {\n        \"blob\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the blob endpoint.\"\n        },\n        \"queue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the queue endpoint.\"\n        },\n        \"table\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the table endpoint.\"\n        },\n        \"file\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the file endpoint.\"\n        }\n      },\n      \"description\": \"The URIs that are used to perform a retrieval of a public blob, queue, or table object.\"\n    },\n    \"StorageAccountProperties\": {\n      \"properties\": {\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status of the storage account at the time the operation was called.\",\n          \"enum\": [\n            \"Creating\",\n            \"ResolvingDNS\",\n            \"Succeeded\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": false\n          }\n        },\n        \"primaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.\"\n        },\n        \"primaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the primary data center for the storage account.\"\n        },\n        \"statusOfPrimary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the primary location of the storage account is available or unavailable.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastGeoFailoverTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"secondaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"statusOfSecondary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the SKU name is Standard_GRS or Standard_RAGRS.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"creationTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the creation date and time of the storage account in UTC.\"\n        },\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"readOnly\": true,\n          \"description\": \"Gets the custom domain the user assigned to this storage account.\"\n        },\n        \"secondaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the SKU name is Standard_RAGRS.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"readOnly\": true,\n          \"description\": \"Gets the encryption settings on the account. If unspecified, the account is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"Properties of the storage account.\"\n    },\n    \"StorageAccount\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"Gets the SKU.\"\n        },\n        \"kind\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the Kind.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The storage account.\"\n    },\n    \"StorageAccountKey\": {\n      \"properties\": {\n        \"keyName\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Name of the key.\"\n        },\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Base 64-encoded value of the key.\"\n        },\n        \"permissions\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Permissions for the key -- read-only or full permissions.\",\n          \"enum\": [\n            \"Read\",\n            \"Full\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"KeyPermission\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"An access key for the storage account.\"\n    },\n    \"StorageAccountListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccount\"\n          },\n          \"description\": \"Gets the list of storage accounts and their properties.\"\n        }\n      },\n      \"description\": \"The response from the List Storage Accounts operation.\"\n    },\n    \"StorageAccountListKeysResult\": {\n      \"properties\": {\n        \"keys\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccountKey\"\n          },\n          \"description\": \"Gets the list of storage account keys and their properties for the specified storage account.\"\n        }\n      },\n      \"description\": \"The response from the ListKeys operation.\"\n    },\n    \"StorageAccountRegenerateKeyParameters\": {\n      \"properties\": {\n        \"keyName\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"keyName\"\n      ],\n      \"description\": \"The parameters used to regenerate the storage account key.\"\n    },\n    \"StorageAccountPropertiesUpdateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"Custom domain assigned to the storage account by the user. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used when updating a storage account.\"\n    },\n    \"StorageAccountUpdateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Gets or sets the SKU name. Note that the SKU name cannot be updated to Standard_ZRS or Premium_LRS, nor can accounts of those sku names be updated to any other value.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater in length than 128 characters and a value no greater in length than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesUpdateParameters\"\n        }\n      },\n      \"description\": \"The parameters that can be provided when updating the storage account properties.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a string describing the resource name.\"\n        },\n        \"localizedValue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a localized string describing the resource name.\"\n        }\n      },\n      \"description\": \"The usage names that can be used; currently limited to StorageAccount.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the unit of measurement.\",\n          \"enum\": [\n            \"Count\",\n            \"Bytes\",\n            \"Seconds\",\n            \"Percent\",\n            \"CountsPerSecond\",\n            \"BytesPerSecond\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the current count of the allocated resources in the subscription.\"\n        },\n        \"limit\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the maximum count of the resources that can be allocated in the subscription.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"readOnly\": true,\n          \"description\": \"Gets the name of the type of usage.\"\n        }\n      },\n      \"description\": \"Describes Storage Resource Usage.\"\n    },\n    \"UsageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"Gets or sets the list of Storage Resource Usages.\"\n        }\n      },\n      \"description\": \"The response from the List Usages operation.\"\n    },\n    \"Resource\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Tags assigned to a resource; can be used for viewing and grouping a resource (across resource groups).\"\n        }\n      },\n      \"x-ms-azure-resource\": true,\n      \"description\": \"Describes a storage resource.\"\n    },\n    \"AccountSasParameters\": {\n      \"properties\": {\n        \"signedServices\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"q\",\n            \"t\",\n            \"f\"\n          ],\n          \"x-ms-client-name\": \"Services\",\n          \"description\": \"The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).\"\n        },\n        \"signedResourceTypes\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"s\",\n            \"c\",\n            \"o\"\n          ],\n          \"x-ms-client-name\": \"ResourceTypes\",\n          \"description\": \"The signed resource types that are accessible with the account SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs; Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the account SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        }\n      },\n      \"required\": [\n        \"signedServices\",\n        \"signedResourceTypes\",\n        \"signedPermission\",\n        \"signedExpiry\"\n      ],\n      \"description\": \"The parameters to list SAS credentials of a storage account.\"\n    },\n    \"ListAccountSasResponse\": {\n      \"properties\": {\n        \"accountSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List SAS credentials of storage account.\"\n        }\n      },\n      \"description\": \"The List SAS credentials operation response.\"\n    },\n    \"ServiceSasParameters\": {\n      \"properties\": {\n        \"canonicalizedResource\": {\n          \"type\": \"string\",\n          \"description\": \"The canonical path to the signed resource.\"\n        },\n        \"signedResource\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"c\",\n            \"f\",\n            \"s\"\n          ],\n          \"x-ms-client-name\": \"Resource\",\n          \"description\": \"The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the service SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"signedIdentifier\": {\n          \"type\": \"string\",\n          \"maxLength\": 64,\n          \"x-ms-client-name\": \"Identifier\",\n          \"description\": \"A unique value up to 64 characters in length that correlates to an access policy specified for the container, queue, or table.\"\n        },\n        \"startPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyStart\",\n          \"description\": \"The start of partition key.\"\n        },\n        \"endPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyEnd\",\n          \"description\": \"The end of partition key.\"\n        },\n        \"startRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyStart\",\n          \"description\": \"The start of row key.\"\n        },\n        \"endRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyEnd\",\n          \"description\": \"The end of row key.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        },\n        \"rscc\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"CacheControl\",\n          \"description\": \"The response header override for cache control.\"\n        },\n        \"rscd\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentDisposition\",\n          \"description\": \"The response header override for content disposition.\"\n        },\n        \"rsce\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentEncoding\",\n          \"description\": \"The response header override for content encoding.\"\n        },\n        \"rscl\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentLanguage\",\n          \"description\": \"The response header override for content language.\"\n        },\n        \"rsct\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentType\",\n          \"description\": \"The response header override for content type.\"\n        }\n      },\n      \"required\": [\n        \"canonicalizedResource\",\n        \"signedResource\"\n      ],\n      \"description\": \"The parameters to list service SAS credentials of a speicific resource.\"\n    },\n    \"ListServiceSasResponse\": {\n      \"properties\": {\n        \"serviceSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List service SAS credentials of speicific resource.\"\n        }\n      },\n      \"description\": \"The List service SAS credentials operation response.\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupName\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group within the user's subscription. The name is case insensitive.\",\n      \"pattern\": \"^[-\\\\w\\\\._\\\\(\\\\)]+$\",\n      \"minLength\": 1,\n      \"maxLength\": 90,\n      \"x-ms-parameter-location\": \"method\"\n    }\n  }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/recursive_model.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"recursive_model\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/CreateParam\"\n            },\n            \"description\": \"Create Param.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"default\": {\n            \"description\": \"BadRequest\",\n            \"schema\": { \"$ref\": \"#/definitions/CloudError\" }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"CloudError\": {\n      \"description\": \"Error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": { \"error\": { \"$ref\": \"#/definitions/CloudErrorBody\" } },\n      \"x-ms-external\": true\n    },\n    \"CloudErrorBody\": {\n      \"description\": \"Body of an error from a REST request.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": { \"type\": \"string\" },\n        \"message\": { \"type\": \"string\" },\n        \"target\": { \"type\": \"string\" },\n        \"details\": {\n          \"description\": \"Inner errors.\",\n          \"type\": \"array\",\n          \"items\": { \"$ref\": \"#/definitions/CloudErrorBody\" }\n        }\n      }\n    },\n    \"CreateParam\": {\n      \"description\": \"Create Param a REST request.\",\n      \"type\": \"object\",\n      \"properties\": { \"error\": { \"$ref\": \"#/definitions/CreateParamBody\" } },\n      \"x-ms-external\": true\n    },\n    \"CreateParamBody\": {\n      \"description\": \"Create Param Body a REST request.\",\n      \"type\": \"object\",\n      \"properties\": {\n        \"code\": { \"type\": \"string\" },\n        \"message\": { \"type\": \"string\" },\n        \"target\": { \"type\": \"string\" },\n        \"details\": {\n          \"description\": \"Inner errors.\",\n          \"type\": \"array\",\n          \"items\": { \"$ref\": \"#/definitions/CreateParam\" }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/removed_definition.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_definition\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/DatabaseList\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"DatabaseList\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/removed_operation.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_operation\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/removed_operation_id.json",
    "content": "{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"changed_operation_id\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/removed_parameter.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_parameter\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"path_param_req\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"query_param_req\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"body_param_req\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n{\n            \"name\": \"path_param\",\n            \"in\": \"path\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"query_param\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"body_param\",\n            \"in\": \"body\",\n            \"type\": \"string\"\n          },\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/removed_path.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"removed_path\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Paths\": {\n      \"get\": {\n        \"tag\": [ \"Paths\" ],\n        \"operationId\": \"Paths_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Operations\": {\n      \"get\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      },\n      \"post\": {\n        \"tag\": [ \"Operations\" ],\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {}\n      }\n    },\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"f\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [ \"theonlyvalue\" ]\n          }\n        ]\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tag\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"201\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"400\": {\n            \"schema\": {\n              \"type\": \"object\",\n              \"properties\": {\n                \"message\": { \"type\": \"string\" },\n                \"id\": { \"type\": \"string\" }\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/removed_property.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"StorageManagement\",\n    \"description\": \"The Azure Storage Management API.\",\n    \"version\": \"2016-12-01\",\n    \"x-ms-code-generation-settings\": {\n      \"name\": \"StorageManagementClient\"\n    }\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/checkNameAvailability\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_CheckNameAvailability\",\n        \"description\": \"Checks that the storage account name is valid and is not already in use.\",\n        \"parameters\": [\n          {\n            \"name\": \"accountName\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCheckNameAvailabilityParameters\"\n            },\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- Operation to check the storage account name availability was successful.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/CheckNameAvailabilityResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}\": {\n      \"put\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Create\",\n        \"description\": \"Asynchronously creates a new storage account with the specified parameters. If an account is already created and a subsequent create request is issued with different properties, the account properties will be updated. If an account is already created and a subsequent create or update request is issued with the exact same set of properties, the request will succeed.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountCreateParameters\"\n            },\n            \"description\": \"The parameters to provide for the created account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned when the storage account was already created from a previous request with the same properties specified in the request body.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted -- Create or update request accepted; operation will complete asynchronously.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Delete\",\n        \"description\": \"Deletes a storage account in Microsoft Azure.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account deleted successfully.\"\n          },\n          \"204\": {\n            \"description\": \"NoContent -- account does not exist in the subscription.\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_GetProperties\",\n        \"description\": \"Returns the properties for the specified storage account including but not limited to name, SKU name, location, and account status. The ListKeys operation should be used to retrieve storage keys.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- properties retrieved successfully for the storage account.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_Update\",\n        \"description\": \"The update operation can be used to update the SKU, encryption, access tier, or tags for a storage account. It can also be used to map the account to a custom domain. Only one custom domain is supported per storage account; the replacement/change of custom domain is not supported. In order to replace an old custom domain, the old value must be cleared/unregistered before a new value can be set. The update of multiple properties is supported. This call does not change the storage keys for the account. If you want to change the storage account keys, use the regenerate keys operation. The location and name of the storage account cannot be changed after creation.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountUpdateParameters\"\n            },\n            \"description\": \"The parameters to provide for the updated account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- storage account properties updated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccount\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_List\",\n        \"description\": \"Lists all the storage accounts available under the subscription. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts was retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts\": {\n      \"get\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListByResourceGroup\",\n        \"description\": \"Lists all the storage accounts available under the given resource group. Note that storage keys are not returned; use the ListKeys operation for this.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- List of storage accounts in the given resource group retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/listKeys\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListKeys\",\n        \"description\": \"Lists the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- list of keys retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/regenerateKey\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_RegenerateKey\",\n        \"description\": \"Regenerates one of the access keys for the specified storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"regenerateKey\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountRegenerateKeyParameters\"\n            },\n            \"description\": \"Specifies name of the key which should be regenerated -- key1 or key2.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- specified key regenerated successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/StorageAccountListKeysResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets the current usage count and the limit for the resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- current usage acount and limit retrieved and returned successfully.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/UsageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListAccountSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListAccountSAS\",\n        \"description\": \"List SAS credentials of a storage account.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.  \",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccountSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list SAS credentials for the storage account.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the account SAS created for the storage account requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListAccountSasResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/ListServiceSas\": {\n      \"post\": {\n        \"tags\": [\n          \"StorageAccounts\"\n        ],\n        \"operationId\": \"StorageAccounts_ListServiceSAS\",\n        \"description\": \"List service SAS credentials of a specific resource.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ResourceGroupName\"\n          },\n          {\n            \"name\": \"accountName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the storage account within the specified resource group. Storage account names must be between 3 and 24 characters in length and use numbers and lower-case letters only.\",\n            \"maxLength\": 24,\n            \"minLength\": 3\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ServiceSasParameters\"\n            },\n            \"description\": \"The parameters to provide to list service SAS credentials.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK -- returned the service SAS created for the storage service requested.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListServiceSasResponse\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"StorageAccountCheckNameAvailabilityParameters\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"enum\": [ \"Microsoft.Storage/storageAccounts\" ]\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"The parameters used to check the availabity of the storage account name.\"\n    },\n    \"CheckNameAvailabilityResult\": {\n      \"properties\": {\n        \"nameAvailable\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Gets a boolean value that indicates whether the name is available for you to use. If true, the name is available. If false, the name has already been taken or is invalid and cannot be used.\"\n        },\n        \"reason\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the reason that a storage account name could not be used. The Reason element is only returned if NameAvailable is false.\",\n          \"enum\": [\n            \"AccountNameInvalid\",\n            \"AlreadyExists\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Reason\",\n            \"modelAsString\": false\n          }\n        },\n        \"message\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets an error message explaining the Reason value in more detail.\"\n        }\n      },\n      \"description\": \"The CheckNameAvailability operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the sku name. Required for account creation; optional for update. Note that in older versions, sku name was called accountType.\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Standard_GRS\",\n            \"Standard_RAGRS\",\n            \"Standard_ZRS\",\n            \"Premium_LRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuName\",\n            \"modelAsString\": false\n          }\n        },\n        \"tier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the sku tier. This is based on the SKU name.\",\n          \"enum\": [\n            \"Standard\",\n            \"Premium\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SkuTier\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The SKU of the storage account.\"\n    },\n    \"CustomDomain\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"Gets or sets the custom domain name assigned to the storage account. Name is the CNAME source.\"\n        },\n        \"useSubDomain\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether indirect CName validation is enabled. Default value is false. This should only be set on updates.\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"The custom domain assigned to this storage account. This can be set via Update.\"\n    },\n    \"EncryptionService\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"A boolean indicating whether or not the service encrypts the data as it is stored.\"\n        },\n        \"lastEnabledTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets a rough estimate of the date/time when the encryption was last enabled by the user. Only returned when encryption is enabled. There might be some unencrypted blobs which were written after this time, as it is just a rough estimate.\"\n        }\n      },\n      \"description\": \"A service that allows server-side encryption to be used.\"\n    },\n    \"EncryptionServices\": {\n      \"properties\": {\n        \"blob\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the blob storage service.\"\n        },\n        \"file\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"description\": \"The encryption function of the file storage service.\"\n        },\n        \"table\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the table storage service.\"\n        },\n        \"queue\": {\n          \"$ref\": \"#/definitions/EncryptionService\",\n          \"readOnly\": true,\n          \"description\": \"The encryption function of the queue storage service.\"\n        }\n      },\n      \"description\": \"A list of services that support encryption.\"\n    },\n    \"Encryption\": {\n      \"properties\": {\n        \"services\": {\n          \"$ref\": \"#/definitions/EncryptionServices\",\n          \"description\": \"List of services which support encryption.\"\n        },\n        \"keySource\": {\n          \"type\": \"string\",\n          \"description\": \"The encryption keySource (provider). Possible values (case-insensitive):  Microsoft.Storage\",\n          \"enum\": [ \"Microsoft.Storage\" ]\n        }\n      },\n      \"required\": [ \"keySource\" ],\n      \"description\": \"The encryption settings on the storage account.\"\n    },\n    \"StorageAccountPropertiesCreateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"User domain assigned to the storage account. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. If left unspecified the account encryption settings will remain the same. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used to create the storage account.\"\n    },\n    \"StorageAccountCreateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Required. Gets or sets the sku name.\"\n        },\n        \"kind\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Indicates the type of storage account.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Required. Gets or sets the location of the resource. This will be one of the supported and registered Azure Geo Regions (e.g. West US, East US, Southeast Asia, etc.). The geo region of a resource cannot be changed once it is created, but if an identical geo region is specified on update, the request will succeed.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used for viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key with a length no greater than 128 characters and a value with a length no greater than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesCreateParameters\"\n        }\n      },\n      \"required\": [\n        \"sku\",\n        \"kind\",\n        \"location\"\n      ],\n      \"description\": \"The parameters used when creating a storage account.\"\n    },\n    \"Endpoints\": {\n      \"properties\": {\n        \"blob\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the blob endpoint.\"\n        },\n        \"queue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the queue endpoint.\"\n        },\n        \"table\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the table endpoint.\"\n        },\n        \"file\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the file endpoint.\"\n        }\n      },\n      \"description\": \"The URIs that are used to perform a retrieval of a public blob, queue, or table object.\"\n    },\n    \"StorageAccountProperties\": {\n      \"properties\": {\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status of the storage account at the time the operation was called.\",\n          \"enum\": [\n            \"Creating\",\n            \"ResolvingDNS\",\n            \"Succeeded\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProvisioningState\",\n            \"modelAsString\": false\n          }\n        },\n        \"primaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object. Note that Standard_ZRS and Premium_LRS accounts only return the blob endpoint.\"\n        },\n        \"primaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the primary data center for the storage account.\"\n        },\n        \"statusOfPrimary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the primary location of the storage account is available or unavailable.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastGeoFailoverTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the timestamp of the most recent instance of a failover to the secondary location. Only the most recent timestamp is retained. This element is not returned if there has never been a failover instance. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"secondaryLocation\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the location of the geo-replicated secondary for the storage account. Only available if the accountType is Standard_GRS or Standard_RAGRS.\"\n        },\n        \"statusOfSecondary\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the status indicating whether the secondary location of the storage account is available or unavailable. Only available if the SKU name is Standard_GRS or Standard_RAGRS.\",\n          \"enum\": [\n            \"available\",\n            \"unavailable\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccountStatus\",\n            \"modelAsString\": false\n          }\n        },\n        \"creationTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Gets the creation date and time of the storage account in UTC.\"\n        },\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"readOnly\": true,\n          \"description\": \"Gets the custom domain the user assigned to this storage account.\"\n        },\n        \"secondaryEndpoints\": {\n          \"$ref\": \"#/definitions/Endpoints\",\n          \"readOnly\": true,\n          \"description\": \"Gets the URLs that are used to perform a retrieval of a public blob, queue, or table object from the secondary location of the storage account. Only available if the SKU name is Standard_RAGRS.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"readOnly\": true,\n          \"description\": \"Gets the encryption settings on the account. If unspecified, the account is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"Properties of the storage account.\"\n    },\n    \"StorageAccount\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"Gets the SKU.\"\n        },\n        \"kind\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the Kind.\",\n          \"enum\": [\n            \"Storage\",\n            \"BlobStorage\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Kind\",\n            \"modelAsString\": false\n          }\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The storage account.\"\n    },\n    \"StorageAccountKey\": {\n      \"properties\": {\n        \"keyName\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Name of the key.\"\n        },\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Base 64-encoded value of the key.\"\n        },\n        \"permissions\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Permissions for the key -- read-only or full permissions.\",\n          \"enum\": [\n            \"Read\",\n            \"Full\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"KeyPermission\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"An access key for the storage account.\"\n    },\n    \"StorageAccountListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccount\"\n          },\n          \"description\": \"Gets the list of storage accounts and their properties.\"\n        }\n      },\n      \"description\": \"The response from the List Storage Accounts operation.\"\n    },\n    \"StorageAccountListKeysResult\": {\n      \"properties\": {\n        \"keys\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/StorageAccountKey\"\n          },\n          \"description\": \"Gets the list of storage account keys and their properties for the specified storage account.\"\n        }\n      },\n      \"description\": \"The response from the ListKeys operation.\"\n    },\n    \"StorageAccountRegenerateKeyParameters\": {\n      \"properties\": {\n        \"keyName\": {\n          \"type\": \"string\"\n        }\n      },\n      \"required\": [\n        \"keyName\"\n      ],\n      \"description\": \"The parameters used to regenerate the storage account key.\"\n    },\n    \"StorageAccountPropertiesUpdateParameters\": {\n      \"properties\": {\n        \"customDomain\": {\n          \"$ref\": \"#/definitions/CustomDomain\",\n          \"description\": \"Custom domain assigned to the storage account by the user. Name is the CNAME source. Only one custom domain is supported per storage account at this time. To clear the existing custom domain, use an empty string for the custom domain name property.\"\n        },\n        \"encryption\": {\n          \"$ref\": \"#/definitions/Encryption\",\n          \"description\": \"Provides the encryption settings on the account. The default setting is unencrypted.\"\n        },\n        \"accessTier\": {\n          \"type\": \"string\",\n          \"description\": \"Required for storage accounts where kind = BlobStorage. The access tier used for billing.\",\n          \"enum\": [\n            \"Hot\",\n            \"Cool\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessTier\",\n            \"modelAsString\": false\n          }\n        },\n        \"supportsHttpsTrafficOnly\": {\n          \"type\": \"boolean\",\n          \"default\": false,\n          \"x-ms-client-name\": \"EnableHttpsTrafficOnly\",\n          \"description\": \"Allows https traffic only to storage service if sets to true.\"\n        }\n      },\n      \"description\": \"The parameters used when updating a storage account.\"\n    },\n    \"StorageAccountUpdateParameters\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Gets or sets the SKU name. Note that the SKU name cannot be updated to Standard_ZRS or Premium_LRS, nor can accounts of those sku names be updated to any other value.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Gets or sets a list of key value pairs that describe the resource. These tags can be used in viewing and grouping this resource (across resource groups). A maximum of 15 tags can be provided for a resource. Each tag must have a key no greater in length than 128 characters and a value no greater in length than 256 characters.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/StorageAccountPropertiesUpdateParameters\"\n        }\n      },\n      \"description\": \"The parameters that can be provided when updating the storage account properties.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a string describing the resource name.\"\n        },\n        \"localizedValue\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets a localized string describing the resource name.\"\n        }\n      },\n      \"description\": \"The usage names that can be used; currently limited to StorageAccount.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Gets the unit of measurement.\",\n          \"enum\": [\n            \"Count\",\n            \"Bytes\",\n            \"Seconds\",\n            \"Percent\",\n            \"CountsPerSecond\",\n            \"BytesPerSecond\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the current count of the allocated resources in the subscription.\"\n        },\n        \"limit\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Gets the maximum count of the resources that can be allocated in the subscription.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"readOnly\": true,\n          \"description\": \"Gets the name of the type of usage.\"\n        }\n      },\n      \"description\": \"Describes Storage Resource Usage.\"\n    },\n    \"UsageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"Gets or sets the list of Storage Resource Usages.\"\n        }\n      },\n      \"description\": \"The response from the List Usages operation.\"\n    },\n    \"Resource\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Tags assigned to a resource; can be used for viewing and grouping a resource (across resource groups).\"\n        }\n      },\n      \"x-ms-azure-resource\": true,\n      \"description\": \"Describes a storage resource.\"\n    },\n    \"AccountSasParameters\": {\n      \"properties\": {\n        \"signedServices\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"q\",\n            \"t\",\n            \"f\"\n          ],\n          \"x-ms-client-name\": \"Services\",\n          \"description\": \"The signed services accessible with the account SAS. Possible values include: Blob (b), Queue (q), Table (t), File (f).\"\n        },\n        \"signedResourceTypes\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"s\",\n            \"c\",\n            \"o\"\n          ],\n          \"x-ms-client-name\": \"ResourceTypes\",\n          \"description\": \"The signed resource types that are accessible with the account SAS. Service (s): Access to service-level APIs; Container (c): Access to container-level APIs; Object (o): Access to object-level APIs for blobs, queue messages, table entities, and files.\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the account SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        }\n      },\n      \"required\": [\n        \"signedServices\",\n        \"signedResourceTypes\",\n        \"signedPermission\",\n        \"signedExpiry\"\n      ],\n      \"description\": \"The parameters to list SAS credentials of a storage account.\"\n    },\n    \"ListAccountSasResponse\": {\n      \"properties\": {\n        \"accountSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List SAS credentials of storage account.\"\n        }\n      },\n      \"description\": \"The List SAS credentials operation response.\"\n    },\n    \"ServiceSasParameters\": {\n      \"properties\": {\n        \"canonicalizedResource\": {\n          \"type\": \"string\",\n          \"description\": \"The canonical path to the signed resource.\"\n        },\n        \"signedResource\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"b\",\n            \"c\",\n            \"f\",\n            \"s\"\n          ],\n          \"x-ms-client-name\": \"Resource\",\n          \"description\": \"The signed services accessible with the service SAS. Possible values include: Blob (b), Container (c), File (f), Share (s).\"\n        },\n        \"signedPermission\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"r\",\n            \"d\",\n            \"w\",\n            \"l\",\n            \"a\",\n            \"c\",\n            \"u\",\n            \"p\"\n          ],\n          \"x-ms-client-name\": \"Permissions\",\n          \"description\": \"The signed permissions for the service SAS. Possible values include: Read (r), Write (w), Delete (d), List (l), Add (a), Create (c), Update (u) and Process (p).\"\n        },\n        \"signedIp\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"IPAddressOrRange\",\n          \"description\": \"An IP address or a range of IP addresses from which to accept requests.\"\n        },\n        \"signedProtocol\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"https,http\",\n            \"https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"HttpProtocol\",\n            \"modelAsString\": false\n          },\n          \"x-ms-client-name\": \"Protocols\",\n          \"description\": \"The protocol permitted for a request made with the account SAS.\"\n        },\n        \"signedStart\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessStartTime\",\n          \"description\": \"The time at which the SAS becomes valid.\"\n        },\n        \"signedExpiry\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"x-ms-client-name\": \"SharedAccessExpiryTime\",\n          \"description\": \"The time at which the shared access signature becomes invalid.\"\n        },\n        \"signedIdentifier\": {\n          \"type\": \"string\",\n          \"maxLength\": 64,\n          \"x-ms-client-name\": \"Identifier\",\n          \"description\": \"A unique value up to 64 characters in length that correlates to an access policy specified for the container, queue, or table.\"\n        },\n        \"startPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyStart\",\n          \"description\": \"The start of partition key.\"\n        },\n        \"endPk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"PartitionKeyEnd\",\n          \"description\": \"The end of partition key.\"\n        },\n        \"startRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyStart\",\n          \"description\": \"The start of row key.\"\n        },\n        \"endRk\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"RowKeyEnd\",\n          \"description\": \"The end of row key.\"\n        },\n        \"keyToSign\": {\n          \"type\": \"string\",\n          \"description\": \"The key to sign the account SAS token with.\"\n        },\n        \"rscc\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"CacheControl\",\n          \"description\": \"The response header override for cache control.\"\n        },\n        \"rscd\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentDisposition\",\n          \"description\": \"The response header override for content disposition.\"\n        },\n        \"rsce\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentEncoding\",\n          \"description\": \"The response header override for content encoding.\"\n        },\n        \"rscl\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentLanguage\",\n          \"description\": \"The response header override for content language.\"\n        },\n        \"rsct\": {\n          \"type\": \"string\",\n          \"x-ms-client-name\": \"ContentType\",\n          \"description\": \"The response header override for content type.\"\n        }\n      },\n      \"required\": [\n        \"canonicalizedResource\",\n        \"signedResource\"\n      ],\n      \"description\": \"The parameters to list service SAS credentials of a speicific resource.\"\n    },\n    \"ListServiceSasResponse\": {\n      \"properties\": {\n        \"serviceSasToken\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"List service SAS credentials of speicific resource.\"\n        }\n      },\n      \"description\": \"The List service SAS credentials operation response.\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Gets subscription credentials which uniquely identify the Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupName\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group within the user's subscription. The name is case insensitive.\",\n      \"pattern\": \"^[-\\\\w\\\\._\\\\(\\\\)]+$\",\n      \"minLength\": 1,\n      \"maxLength\": 90,\n      \"x-ms-parameter-location\": \"method\"\n    }\n  }\n}"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/required_parameter.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"required_parameter\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters/{a}\": {\n      \"get\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"a\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"b\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"d\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"e\",\n            \"in\": \"query\",\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"f\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"enum\": [ \"theonlyvalue\" ]\n          }\n        ]\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/response_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"operation_check_05\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"definitions\": {\n    \"A\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"a\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"integer\",\n            \"minimum\": 1,\n            \"maximum\": 17,\n            \"multipleOf\": 5\n          }\n        },\n        \"b\": {\n          \"type\": \"array\",\n          \"minItems\": 13,\n          \"maxItems\": 4711,\n          \"collectionFormat\": \"csv\",\n          \"items\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 17,\n            \"pattern\": \"[a-z][a-z0-9]*\"\n          }\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"minimum\": 1,\n          \"maximum\": 17,\n          \"multipleOf\": 5\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"minLength\": 1,\n          \"maxLength\": 17,\n          \"pattern\": \"[a-z][a-z0-9]*\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\" ]\n        },\n        \"g\": {\n          \"type\": \"string\",\n          \"enum\": [ \"A\", \"B\", \"C\" ]\n        }\n      }\n    }\n  },\n  \"responses\": {\n    \"200\": {\n      \"schema\": {\n        \"type\": \"object\",\n        \"properties\": {\n          \"a\": {\n            \"type\": \"array\",\n            \"minItems\": 13,\n            \"maxItems\": 4711,\n            \"collectionFormat\": \"csv\",\n            \"items\": {\n              \"type\": \"integer\",\n              \"minimum\": 1,\n              \"maximum\": 17,\n              \"multipleOf\": 5\n            }\n          },\n          \"b\": {\n            \"type\": \"array\",\n            \"minItems\": 13,\n            \"maxItems\": 4711,\n            \"collectionFormat\": \"csv\",\n            \"items\": {\n              \"type\": \"string\",\n              \"minLength\": 1,\n              \"maxLength\": 17,\n              \"pattern\": \"[a-z][a-z0-9]*\"\n            }\n          },\n          \"c\": {\n            \"type\": \"integer\",\n            \"minimum\": 1,\n            \"maximum\": 17,\n            \"multipleOf\": 5\n          },\n          \"d\": {\n            \"type\": \"string\",\n            \"minLength\": 1,\n            \"maxLength\": 17,\n            \"pattern\": \"[a-z][a-z0-9]*\"\n          },\n          \"f\": {\n            \"type\": \"string\",\n            \"enum\": [ \"A\", \"B\" ]\n          },\n          \"g\": {\n            \"type\": \"string\",\n            \"enum\": [ \"A\", \"B\", \"C\" ]\n          }\n        }\n      }\n    },\n    \"201\": {\n      \"schema\": { \"$ref\": \"#/definitions/A\" }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/type_changed.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/type_changed_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"readOnly\": true,\n          \"properties\": {\n            \"b\": {\n              \"type\": \"string\",\n              \"readOnly\": true\n            }\n          },\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/type_changed_02.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"$ref\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"Property named '$ref'. Unusual but valid.\"\n        },\n        \"b\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"default\": 0,\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/version_check_01.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/version_check_02.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_02\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/version_check_03.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_03\",\n    \"version\": \"1.0.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/version_check_04.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"version_check_04\",\n    \"version\": \"2.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\" ]\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/xms_client_name_changed.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation_check_01\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\"responses\": {}\n      },\n      \"post\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"registry\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Registry\" }\n          }\n        ],\n        \"responses\": {}\n      }\n    },\n    \"/api/Responses\": {\n      \"get\": {\n        \"tags\": [ \"Responses\" ],\n        \"operationId\": \"Responses_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [],\n        \"responses\": {\n          \"200\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"201\": {\n            \"schema\": {\n              \"type\": \"integer\"\n            }\n          },\n          \"400\": {\n            \"schema\": { \"$ref\": \"#/definitions/Error\" }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Error\": {\n      \"required\": [ \"message\", \"id\" ],\n      \"properties\": {\n        \"message\": { \"type\": \"string\" },\n        \"id\": { \"type\": \"string\" }\n      }\n    },\n    \"Database\": {\n      \"x-ms-client-name\":\"database\",\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      }\n    },\n    \"Registry\": {\n      \"required\": [ \"id\" ],\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"The user generated unique name for the database, a string that\\n must not be more than 255 characters.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe resource id (_rid) is a unique identifier that is also hierarchical per the resource stack on the resource model. It is used internally for placement of and navigation to the database resource.\"\n        },\n        \"c\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the last updated timestamp of the resource. The value is a timestamp.\"\n        },\n        \"d\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt represents the resource etag required for optimistic concurrency control.\"\n        },\n        \"e\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the collections resource.\"\n        },\n        \"f\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nIt specifies the addressable path of the users resource.\"\n        }\n      },\n      \"default\": {\n        \"id\": \"test\"\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/xms_enum_added.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ]\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": true\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/Resource/Swagger/old/xms_enum_changed.json",
    "content": "﻿{\n  \"swagger\": 2.0,\n  \"info\": {\n    \"title\": \"type_changed\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tag\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"type\": \"object\",\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ]\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"This is a system generated property.\\nThe _rid value is empty for this operation.\"\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"A\",\n            \"B\",\n            \"C\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\"\n          },\n          \"description\": \"This property shows the number of databases returned.\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/SwaggerModelerCompareTests.cs",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nusing System.IO;\nusing System.Linq;\nusing Xunit;\nusing System.Collections.Generic;\nusing OpenApiDiff.Core.Logging;\nusing System.Reflection;\nusing Newtonsoft.Json.Linq;\n\nnamespace AutoRest.Swagger.Tests\n{\n    /// <summary>\n    /// This class contains tests for the logic comparing two swagger specifications,\n    /// an older version against newer version.\n    ///\n    /// For all but the tests that verify that version checks are done properly, the\n    /// old and new specifications have the same version number, which should force\n    /// the comparison logic to produce errors rather than warnings for each breaking\n    /// change.\n    ///\n    /// Non-breaking changes are always presented as informational messages, regardless\n    /// of whether the version has changed or not.\n    /// </summary>\n    [Collection(\"Comparison Tests\")]\n    public class SwaggerModelerCompareTests\n    {\n        /// <summary>\n        /// Helper method -- load two Swagger documents and invoke the comparison logic.\n        /// </summary>\n        /// <param name=\"input\">The name of the swagger document file. The file name must be the same in both the 'modified' and 'original' folder.</param>\n        /// <returns>A list of messages from the comparison logic.</returns>\n        private static IEnumerable<ComparisonMessage> CompareSwagger(string input)\n        {\n            var modeler = new SwaggerModeler();\n            var baseDir = Directory.GetParent(typeof(SwaggerModelerCompareTests).GetTypeInfo().Assembly.Location.ToString()).ToString();\n            var oldFileName = Path.Combine(baseDir, \"Resource\", \"Swagger\", \"old\", input);\n            var newFileName = Path.Combine(baseDir, \"Resource\", \"Swagger\", \"new\", input);\n            var result = modeler.Compare(\n                Path.Combine(\"old\", input),\n                File.ReadAllText(oldFileName),\n                Path.Combine(\"new\", input),\n                File.ReadAllText(newFileName)\n            );\n            ValidateMessages(result);\n            return result;\n        }\n\n        private static void ValidateMessage(ComparisonMessage message)\n        {\n            var newLocation = message.NewLocation();\n            var oldLocation = message.OldLocation();\n            Assert.True(oldLocation != null || newLocation != null);\n            switch (message.Mode)\n            {\n                case MessageType.Update:\n                    break;\n                case MessageType.Addition:\n                    Assert.NotNull(newLocation);\n                    break;\n                case MessageType.Removal:\n                    Assert.NotNull(oldLocation);\n                    break;\n            }\n        }\n\n        private static void ValidateMessages(IEnumerable<ComparisonMessage> messages)\n        {\n            foreach (var message in messages)\n            {\n                ValidateMessage(message);\n            }\n        }\n\n        /// <summary>\n        /// Verifies that not raising the version number results in a strict comparison.\n        /// </summary>\n        [Fact]\n        public void SameMajorVersionNumberStrict()\n        {\n            var messages = CompareSwagger(\"version_check_02.json\").ToArray();\n            Assert.Empty(messages.Where(m => m.Id > 0 && m.Severity == Category.Warning));\n        }\n\n        /// <summary>\n        /// Verifies that lowering the version number results in an error.\n        /// </summary>\n        [Fact]\n        public void ReversedVersionNumberChange()\n        {\n            var messages = CompareSwagger(\"version_check_04.json\").ToArray();\n            Assert.NotEmpty(messages.Where(m => m.Id > 0 && m.Severity >= Category.Error));\n            var reversed = messages.Where(m => m.Id == ComparisonMessages.VersionsReversed.Id);\n            Assert.NotEmpty(reversed);\n            Assert.Equal(Category.Error, reversed.First().Severity);\n        }\n\n        /// <summary>\n        /// Verifies that if you remove a supported request body format, it's caught.\n        /// </summary>\n        [Fact]\n        public void RequestFormatMissing()\n        {\n            var messages = CompareSwagger(\"misc_checks_01.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RequestBodyFormatNoLongerSupported.Id);\n            Assert.NotEmpty(missing);\n            Assert.Equal(Category.Error, missing.First().Severity);\n        }\n\n        /// <summary>\n        /// Verifies that if you add an expected response body format, it's caught.\n        /// </summary>\n        [Fact]\n        public void ResponseFormatAdded()\n        {\n            var messages = CompareSwagger(\"misc_checks_01.json\").ToArray();\n            var added = messages.Where(m => m.Id == ComparisonMessages.ResponseBodyFormatNowSupported.Id);\n            Assert.NotEmpty(added);\n            Assert.Equal(Category.Error, added.First().Severity);\n        }\n\n        /// <summary>\n        /// Verifies that if you remove a schema, it's caught.\n        /// </summary>\n        [Fact]\n        public void DefinitionRemoved()\n        {\n            var messages = CompareSwagger(\"removed_definition.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RemovedDefinition.Id);\n            Assert.NotEmpty(missing);\n            var missing0 = missing.First();\n            Assert.Equal(Category.Error, missing0.Severity);\n            Assert.NotNull(missing0.NewJson());\n            Assert.NotNull(missing0.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you change the type of a schema property, it's caught.\n        /// </summary>\n        [Fact]\n        public void PropertyTypeChanged()\n        {\n            var messages = CompareSwagger(\"type_changed.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.Where(err => err.NewJsonRef.StartsWith(\"new/type_changed.json#/definitions/\")).FirstOrDefault();\n            Assert.NotNull(error);\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Equal(\"new/type_changed.json#/definitions/Database/properties/a\", error.NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that if adding a 'type:object' to a schema with 'properties', it's not error.\n        /// </summary>\n        [Fact]\n        public void TypeObjectChanged()\n        {\n            var messages = CompareSwagger(\"type_changed_01.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.Where(err => err.NewJsonRef.StartsWith(\"new/type_changed_01.json#/definitions/\")).FirstOrDefault();\n            Assert.NotNull(error);\n            Assert.Equal(Category.Info, error.Severity);\n            Assert.Equal(\"new/type_changed_01.json#/definitions/Database/properties/a\", error.NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that if you change the type of a schema property named \"$ref\" (unusual but valid), it's caught.\n        /// </summary>\n        [Fact]\n        public void PropertyNamedRefTypeChanged()\n        {\n            var messages = CompareSwagger(\"type_changed_02.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.Where(err => err.NewJsonRef.StartsWith(\"new/type_changed_02.json#/definitions/\")).FirstOrDefault();\n            Assert.NotNull(error);\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Equal(\"new/type_changed_02.json#/definitions/Database/properties/$ref\", error.NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that if you change the default value of a schema, it's caught.\n        /// </summary>\n        [Fact]\n        public void DefaultValueChanged()\n        {\n            var messages = CompareSwagger(\"default_changed_01.json\").ToArray();\n            var errors = messages.Where(m => m.Id == ComparisonMessages.DefaultValueChanged.Id).ToArray();\n            Assert.NotNull(errors);\n            Assert.Equal(8, errors.Count());\n        }\n\n        /// <summary>\n        /// Verifies that if you change the type format of a schema property, it's caught.\n        /// </summary>\n        [Fact]\n        public void PropertyTypeFormatChanged()\n        {\n            var messages = CompareSwagger(\"misc_checks_01.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.TypeFormatChanged.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.Where(err => err.NewJsonRef.StartsWith(\"new/misc_checks_01.json#/definitions/\")).FirstOrDefault();\n            Assert.NotNull(error);\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Equal(\"new/misc_checks_01.json#/definitions/Database/properties/c\", error.NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that if you remove a schema that isn't used, it's not flagged.\n        /// </summary>\n        [Fact]\n        public void UnreferencedDefinitionRemoved()\n        {\n            var messages = CompareSwagger(\"misc_checks_02.json\").ToArray();\n            var missing = messages.Where(m => m.Id > 0 && m.NewJsonRef.StartsWith(\"#/definitions/Unreferenced\"));\n            Assert.Empty(missing);\n        }\n\n        /// <summary>\n        /// Verifies that if you change the type of a schema property of a schema that isn't referenced, it's not flagged.\n        /// </summary>\n        [Fact]\n        public void UnreferencedTypeChanged()\n        {\n            var messages = CompareSwagger(\"misc_checks_02.json\").ToArray();\n            var missing = messages.Where(m => m.Id > 0 && m.NewJsonRef.StartsWith(\"#/definitions/Database\"));\n            Assert.Empty(missing);\n        }\n\n        /// <summary>\n        /// Verifies that if you remove (or rename) a path, it's caught.\n        /// </summary>\n        [Fact]\n        public void PathRemoved()\n        {\n            var messages = CompareSwagger(\"removed_path.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RemovedPath.Id);\n            Assert.Equal(2, missing.Count());\n            Assert.NotEmpty(missing.Where(m => m.Severity == Category.Error && m.OldJsonRef == \"old/removed_path.json#/paths/~1api~1Parameters~1{a}\"));\n            Assert.NotEmpty(missing.Where(m => m.Severity == Category.Error && m.OldJsonRef == \"old/removed_path.json#/paths/~1api~1Responses\"));\n        }\n\n        /// <summary>\n        /// Verifies that if you remove an operation, it's caught.\n        /// </summary>\n        [Fact]\n        public void OperationRemoved()\n        {\n            var messages = CompareSwagger(\"removed_operation.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RemovedOperation.Id);\n            Assert.Single(missing);\n            Assert.NotEmpty(missing.Where(m => m.Severity == Category.Error && m.NewJsonRef == \"new/removed_operation.json#/paths/~1api~1Operations\"));\n        }\n\n        /// <summary>\n        /// Verifies that if you change the operations id for a path, it's caught.\n        /// </summary>\n        [Fact]\n        public void OperationIdChanged()\n        {\n            var messages = CompareSwagger(\"changed_operation_id.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.ModifiedOperationId.Id);\n            Assert.Equal(2, missing.Count());\n            var x = missing.First(m => m.Severity == Category.Error && m.NewJsonRef == \"new/changed_operation_id.json#/paths/~1api~1Paths/get\");\n            Assert.NotNull(x.NewJson());\n            Assert.NotNull(x.OldJson());\n            var y = missing.First(m => m.Severity == Category.Error && m.NewJsonRef == \"new/changed_operation_id.json#/paths/~1api~1Operations/post\");\n            Assert.NotNull(y.NewJson());\n            Assert.NotNull(y.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if the operations id is missing for a path in both old and new contracts,\n        /// the execution doesn't fail and no version change is required.\n        /// </summary>\n        [Fact]\n        public void OperationIdIsNull()\n        {\n            var messages = CompareSwagger(\"missing_operation_id.json\").ToArray();\n            Assert.Single(messages);\n            Assert.Equal(ComparisonMessages.NoVersionChange.Id, messages[0].Id);\n        }\n\n        /// <summary>\n        /// Verifies that if you remove an operationId from an operation in a path, it's caught.\n        /// </summary>\n        [Fact]\n        public void OperationIdRemoved()\n        {\n            var messages = CompareSwagger(\"removed_operation_id.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.ModifiedOperationId.Id);\n            Assert.Single(missing);\n            var x = missing.First(m => m.Severity == Category.Error && m.NewJsonRef == \"new/removed_operation_id.json#/paths/~1api~1Operations/get\");\n            Assert.NotNull(x.NewJson());\n            Assert.NotNull(x.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you added new paths / operations, it's caught.\n        /// </summary>\n        [Fact]\n        public void AddedPaths()\n        {\n            var messages = CompareSwagger(\"added_path.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.AddedPath.Id);\n            Assert.Single(missing);\n            var x = missing.First(\n                m => m.Severity == Category.Info &&\n                m.NewJsonRef == \"new/added_path.json#/paths/~1api~1Paths\"\n            );\n            Assert.NotNull(x.NewJson());\n            Assert.NotNull(x.NewLocation());\n            Assert.Null(x.OldJson());\n\n            missing = messages.Where(m => m.Id == ComparisonMessages.AddedOperation.Id);\n            Assert.Single(missing);\n            x = missing.First(m => m.Severity == Category.Info && m.NewJsonRef == \"new/added_path.json#/paths/~1api~1Operations/post\");\n            Assert.NotNull(x.NewJson());\n            Assert.Null(x.OldJson());\n\n            var output = x.GetValidationMessagesAsJson();\n            var raw = JToken.Parse(output);\n            Assert.Equal(JTokenType.Object, raw.Type);\n            Assert.Equal(\"new/added_path.json:38:15\", raw[\"new\"][\"location\"].Value<string>());\n            Assert.Equal(\"paths['/api/Operations'].post\", raw[\"new\"][\"path\"].Value<string>());\n            Assert.Null(raw[\"old\"][\"location\"]);\n        }\n\n        /// <summary>\n        /// Verifies that if you remove a required parameter, it's found.\n        /// </summary>\n        [Fact]\n        public void RequiredParameterRemoved()\n        {\n            var messages = CompareSwagger(\"required_parameter.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RemovedRequiredParameter.Id);\n            Assert.Single(missing);\n            var x = missing.First(m => m.Severity == Category.Error && m.OldJsonRef == \"old/required_parameter.json#/paths/~1api~1Parameters~1{a}/get/parameters/4\");\n            Assert.Null(x.NewJson());\n            Assert.NotNull(x.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you remove a required parameter, it's found.\n        /// </summary>\n        [Fact]\n        public void OptionalParameterRemoved()\n        {\n            var messages = CompareSwagger(\"optional_parameter.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RemovedOptionalParameter.Id);\n            Assert.Single(missing);\n            var x = missing.First(m => m.Severity == Category.Error && m.OldJsonRef == \"old/optional_parameter.json#/paths/~1api~1Parameters~1{a}/get/parameters/4\");\n            Assert.Null(x.NewJson());\n            Assert.NotNull(x.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you add a required property in the model, it is reported.\n        /// </summary>\n        [Fact]\n        public void AddedRequiredProperty()\n        {\n            ComparisonMessage[] messages = CompareSwagger(\"added_required_property.json\").ToArray();\n            List<ComparisonMessage> missing = messages.Where(\n                m => m.Severity == Category.Error && m.Id == ComparisonMessages.AddedRequiredProperty.Id).ToList();\n            Assert.Equal(2, missing.Count());\n            ComparisonMessage error = missing.First();\n            Assert.Equal(\"new/added_required_property.json#/paths/~1api~1Parameters/put/parameters/0/schema\", error.NewJsonRef);\n            Assert.NotNull(error.NewJson());\n            Assert.NotNull(error.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you add a required property in the model on a property that is 'readOnly',\n        /// it is not reported.\n        /// Details: https://github.com/Azure/azure-sdk-tools/issues/7184\n        /// </summary>\n        [Fact]\n        public void AddedReadOnlyRequiredProperty()\n        {\n            ComparisonMessage[] messages = CompareSwagger(\"added_readonly_required_property.json\").ToArray();\n            List<ComparisonMessage> addedReqPropMessages = messages.Where(\n                m => m.Severity == Category.Error && m.Id == ComparisonMessages.AddedRequiredProperty.Id).ToList();\n            Assert.Empty(addedReqPropMessages);\n        }\n\n        /// <summary>\n        /// Verifies that if you remove a required request header, it's found.\n        /// </summary>\n        [Fact]\n        public void RequiredRequestHeaderRemoved()\n        {\n            var messages = CompareSwagger(\"operation_check_03.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RemovedRequiredParameter.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Null(error.NewJsonRef);\n            Assert.Equal(\"old/operation_check_03.json#/paths/~1api~1Parameters/get/parameters/1\", error.OldJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that if you add a required parameter, it is flagged\n        /// </summary>\n        [Fact]\n        public void RequiredParameterAdded()\n        {\n            var messages = CompareSwagger(\"required_parameter.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.AddingRequiredParameter.Id);\n            Assert.Single(missing);\n            var x = missing.First(m => m.Severity == Category.Error && m.NewJsonRef == \"new/required_parameter.json#/paths/~1api~1Parameters~1{a}/get/parameters/4\");\n            Assert.NotNull(x.NewJson());\n            Assert.Null(x.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you add an optional parameter, it is flagged\n        /// </summary>\n        [Fact]\n        public void OptionalParameterAdded()\n        {\n            var messages = CompareSwagger(\"optional_parameter.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.AddingOptionalParameter.Id);\n            Assert.Single(missing);\n            var x = missing.First(m => m.Severity == Category.Error && m.NewJsonRef == \"new/optional_parameter.json#/paths/~1api~1Parameters~1{a}/get/parameters/4\");\n            Assert.NotNull(x.NewJson());\n            Assert.Null(x.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you add a new readOnly property in the response model, it is flagged as info\n        /// </summary>\n        [Fact]\n        public void ReadonlyPropertyInResponse()\n        {\n            var messages = CompareSwagger(\"readonly_changes.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.AddedReadOnlyPropertyInResponse.Id);\n            Assert.Single(missing);\n            Assert.NotEmpty(missing.Where(\n                m => m.Severity == Category.Info &&\n                m.NewJsonRef == \"new/readonly_changes.json#/paths/~1subscriptions~1{subscriptionId}~1providers~1Microsoft.Storage~1checkNameAvailability/post/responses/200/schema/properties\"));\n        }\n\n        /// <summary>\n        /// Verifies that if you add a new property in the response model, it is flagged as info\n        /// </summary>\n        [Fact]\n        public void AddedPropertyInResponse()\n        {\n            var messages = CompareSwagger(\"added_property_in_response.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.AddedPropertyInResponse.Id);\n            Assert.Single(missing);\n            var x = missing.First(\n                m => m.Severity == Category.Error &&\n                m.NewJsonRef.Contains(\n                    \"#/paths/~1subscriptions~1{subscriptionId}~1providers~1Microsoft.Storage~1checkNameAvailability/post/responses/200/schema/properties\"\n                )\n            );\n            Assert.NotNull(x.NewJson());\n            // Assert.Null(x.OldJson());\n        }\n\n        /// <summary>\n        /// Verifies that rules work on the recursive models\n        /// </summary>\n        [Fact]\n        public void RecursiveModels()\n        {\n            var messages = CompareSwagger(\"recursive_model.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RemovedProperty.Id);\n            Assert.Equal(2, missing.Count());\n\n            missing = messages.Where(m => m.Id == ComparisonMessages.ReadonlyPropertyChanged.Id);\n            Assert.Equal(3, missing.Count());\n        }\n\n        /// <summary>\n        /// Verifies that if you add a required request header, it is flagged\n        /// </summary>\n        [Fact]\n        public void RequiredRequestHeaderAdded()\n        {\n            var messages = CompareSwagger(\"operation_check_03.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.AddingRequiredParameter.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Equal(\"new/operation_check_03.json#/paths/~1api~1Parameters/get/parameters/3\", error.NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that if you change where a parameter is passed, it is flagged.\n        /// </summary>\n        [Fact]\n        public void ParameterMoved()\n        {\n            var messages = CompareSwagger(\"operation_check_01.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.ParameterInHasChanged.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.NotNull(error.NewJsonRef);\n            Assert.Equal(\"old/operation_check_01.json#/paths/~1api~1Parameters~1{a}/get/parameters/1\", error.OldJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that if you make a required parameter optional, it's flagged, but not as an error.\n        /// </summary>\n        [Fact]\n        public void ParameterStatusLess()\n        {\n            var messages = CompareSwagger(\"required_parameter.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RequiredStatusChange.Id);\n            Assert.Single(missing);\n            var x = missing.First(m => m.Severity == Category.Error && m.NewJsonRef == \"new/required_parameter.json#/paths/~1api~1Parameters~1{a}/get/parameters/3\");\n            Assert.NotNull(x.NewJson());\n        }\n\n        /// <summary>\n        /// Verifies that if you make a required property optional, it's flagged, but not as an error.\n        /// </summary>\n        [Fact]\n        public void PropertyRequiredChanged()\n        {\n            var messages = CompareSwagger(\"property_required_status_changed.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RequiredStatusChange.Id);\n            Assert.Equal(2, missing.Count());\n        }\n\n        /// <summary>\n        /// Verifies that if you make an optional parameter required, it's caught.\n        /// </summary>\n        [Fact]\n        public void ParameterStatusMore()\n        {\n            var messages = CompareSwagger(\"operation_check_01.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.RequiredStatusChange.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.Skip(1).First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.NotNull(error.NewJsonRef);\n            Assert.Equal(\"old/operation_check_01.json#/paths/~1api~1Parameters~1{a}/get/parameters/3\", error.OldJsonRef);\n        }\n\n        /// <summary>\n        /// If a parameter used to be constant (only had one valid value), but is changed to take more than one\n        /// value, then it should be flagged.\n        /// </summary>\n        [Fact]\n        public void ParameterConstantChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_01.json\").ToArray();\n            var missing = messages.Where(m => m.Id == ComparisonMessages.ConstantStatusHasChanged.Id);\n            Assert.NotEmpty(missing);\n            var error = missing.First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.NotNull(error.NewJsonRef);\n            Assert.Equal(\"old/operation_check_01.json#/paths/~1api~1Parameters~1{a}/get/parameters/4\", error.OldJsonRef);\n        }\n\n        /// <summary>\n        /// Just changing the name of a parameter schema in the definitions section does not change the wire format for\n        /// the parameter, so it shouldn't result in a separate error for the parameter.\n        /// </summary>\n        [Fact]\n        public void ParameterSchemaNameChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_02.json\").ToArray();\n            var redirected = messages.Where(m => m.Id == ComparisonMessages.ReferenceRedirection.Id).ToArray();\n            Assert.Equal(2,redirected.Length);\n        }\n\n        /// <summary>\n        /// Just changing the name of a parameter schema in the definitions section does not change the wire format for\n        /// the parameter, so it shouldn't result in a separate error for the parameter.\n        /// </summary>\n        [Fact]\n        public void ParameterSchemaContentsChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_02.json\").ToArray();\n            var changed = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id);\n            Assert.NotEmpty(changed);\n            var error = changed.First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Equal(\"new/operation_check_02.json#/paths/~1api~1Parameters/post/parameters/0/schema/properties/b\", error.NewJsonRef);\n            Assert.Equal(\"old/operation_check_02.json#/paths/~1api~1Parameters/post/parameters/0/schema/properties/b\", error.OldJsonRef);\n        }\n\n        /// <summary>\n        /// Verify that removing a response code is flagged.\n        /// </summary>\n        [Fact]\n        public void ResponseRemoved()\n        {\n            var messages = CompareSwagger(\"operation_check_01.json\").ToArray();\n            var removed = messages.Where(m => m.Id == ComparisonMessages.RemovedResponseCode.Id);\n            Assert.NotEmpty(removed);\n            var error = removed.First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Equal(\"new/operation_check_01.json#/paths/~1api~1Responses/get/responses/200\", error.NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verify that adding a response code is flagged.\n        /// </summary>\n        [Fact]\n        public void ResponseAdded()\n        {\n            var messages = CompareSwagger(\"operation_check_01.json\").ToArray();\n            var removed = messages.Where(m => m.Id == ComparisonMessages.AddingResponseCode.Id);\n            Assert.NotEmpty(removed);\n            var error = removed.First();\n            Assert.Equal(Category.Error, error.Severity);\n            Assert.Equal(\"new/operation_check_01.json#/paths/~1api~1Responses/get/responses/202\", error.NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verify that changing the type of a response code is flagged.\n        /// </summary>\n        [Fact]\n        public void ResponseTypeChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_01.json\").ToArray();\n            var removed = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id).ToArray();\n            Assert.Equal(2, removed.Length);\n\n            Assert.Equal(Category.Error, removed[0].Severity);\n            Assert.Equal(\"new/operation_check_01.json#/paths/~1api~1Responses/get/responses/201/schema\", removed[0].NewJsonRef);\n\n            Assert.Equal(Category.Error, removed[1].Severity);\n            Assert.Equal(\"new/operation_check_01.json#/paths/~1api~1Responses/get/responses/400/schema/properties/id\", removed[1].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verify that changing the $ref-referenced type of a response code is flagged.\n        /// </summary>\n        [Fact]\n        public void ResponseSchemaChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_02.json\").ToArray();\n            var removed = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id && m.NewJsonRef.Contains(\"Responses\")).ToArray();\n            Assert.Single(removed);\n            Assert.Equal(Category.Error, removed[0].Severity);\n            Assert.Equal(\"new/operation_check_02.json#/paths/~1api~1Responses/get/responses/400/schema/properties/id\", removed[0].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verify that adding headers to a response definition is flagged.\n        /// </summary>\n        [Fact]\n        public void ResponseHeaderAdded()\n        {\n            var messages = CompareSwagger(\"operation_check_03.json\").ToArray();\n            var added = messages.Where(m => m.Id == ComparisonMessages.AddingHeader.Id).ToArray();\n            Assert.Single(added);\n            Assert.Equal(Category.Info, added[0].Severity);\n            Assert.Equal(\"new/operation_check_03.json#/paths/~1api~1Responses/get/responses/200/headers/x-c\", added[0].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verify that removing headers from a response definition is flagged.\n        /// </summary>\n        [Fact]\n        public void ResponseHeaderRemoved()\n        {\n            var messages = CompareSwagger(\"operation_check_03.json\").ToArray();\n            var removed = messages.Where(m => m.Id == ComparisonMessages.RemovingHeader.Id).ToArray();\n            Assert.Single(removed);\n            Assert.Equal(Category.Error, removed[0].Severity);\n            Assert.Equal(\"new/operation_check_03.json#/paths/~1api~1Responses/get/responses/200/headers/x-a\", removed[0].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verify that removing headers from a response definition is flagged.\n        /// </summary>\n        [Fact]\n        public void ResponseHeaderTypeChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_03.json\").ToArray();\n            var changed = messages.Where(m => m.Id == ComparisonMessages.TypeChanged.Id && m.NewJsonRef.Contains(\"Responses\")).ToArray();\n            Assert.Single(changed);\n            Assert.Equal(Category.Error, changed[0].Severity);\n            Assert.Equal(\"new/operation_check_03.json#/paths/~1api~1Responses/get/responses/200/headers/x-b\", changed[0].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that changing the collection format for an array parameter is flagged.\n        /// Direction: requests\n        /// </summary>\n        [Fact]\n        public void RequestArrayFormatChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_04.json\").Where(m => m.NewJsonRef.Contains(\"Parameters\")).ToArray();\n            var changed = messages.Where(m => m.Id == ComparisonMessages.ArrayCollectionFormatChanged.Id).ToArray();\n\n            Assert.Equal(4, changed.Length);\n            Assert.Equal(Category.Error, changed[0].Severity);\n            Assert.Equal(Category.Error, changed[1].Severity);\n            Assert.Equal(Category.Error, changed[2].Severity);\n            Assert.Equal(Category.Error, changed[3].Severity);\n            Assert.Equal(\"new/operation_check_04.json#/paths/~1api~1Parameters/get/parameters/0\", changed[0].NewJsonRef);\n            Assert.Equal(\"new/operation_check_04.json#/paths/~1api~1Parameters/get/parameters/1\", changed[1].NewJsonRef);\n            Assert.Equal(\"new/operation_check_04.json#/paths/~1api~1Parameters/put/parameters/0/schema/properties/a\", changed[2].NewJsonRef);\n            Assert.Equal(\"new/operation_check_04.json#/paths/~1api~1Parameters/put/parameters/0/schema/properties/b\", changed[3].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that making constraints stricter in requests are flagged as errors and that relaxed constraints\n        /// are just informational.\n        /// </summary>\n        [Fact]\n        public void RequestTypeConstraintsChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_04.json\").Where(m => m.NewJsonRef.Contains(\"Parameters\")).ToArray();\n            var stricter = messages.Where(m => m.Id == ComparisonMessages.ConstraintIsStronger.Id && m.Severity == Category.Error).ToArray();\n            var breaking = messages.Where(m => m.Id == ComparisonMessages.ConstraintChanged.Id && m.Severity == Category.Error).ToArray();\n            var info = messages.Where(m => m.Id > 0 && m.Severity == Category.Info).ToArray();\n\n            Assert.Equal(11, stricter.Length);\n            Assert.Equal(8, breaking.Length);\n            Assert.Equal(13, info.Length);\n        }\n\n        /// <summary>\n        /// Verifies that making constraints stricter in requests are flagged, weaker are flagged and adding enum to parameters are flagged\n        /// </summary>\n        [Fact]\n        public void RequestTypeConstraintsWithNewEnum()\n        {\n            var messages = CompareSwagger(\"enum_values_changed.json\").Where(m => m.NewJsonRef.Contains(\"Parameters\")).ToArray();\n     \n            var removedValue = messages.Where(m => m.Id == ComparisonMessages.RemovedEnumValue.Id).ToArray();\n            Assert.Single(removedValue);\n        }\n\n        /// <summary>\n        /// Verifies that changing the collection format for an array parameter is flagged.\n        /// Direction: responses\n        /// </summary>\n        [Fact]\n        public void ResponseArrayFormatChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_05.json\").Where(m => m.NewJsonRef.Contains(\"Responses\")).ToArray();\n            var changed = messages.Where(m => m.Id == ComparisonMessages.ArrayCollectionFormatChanged.Id).ToArray();\n\n            Assert.Equal(4, changed.Length);\n            Assert.Equal(Category.Error, changed[0].Severity);\n            Assert.Equal(Category.Error, changed[1].Severity);\n            Assert.Equal(Category.Error, changed[2].Severity);\n            Assert.Equal(Category.Error, changed[3].Severity);\n            Assert.Equal(\"new/operation_check_05.json#/paths/~1api~1Responses/get/responses/200/schema/properties/a\", changed[0].NewJsonRef);\n            Assert.Equal(\"new/operation_check_05.json#/paths/~1api~1Responses/get/responses/200/schema/properties/b\", changed[1].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that, in responses, relaxed constraints are errors while stricter constraints are informational.\n        /// </summary>\n        [Fact]\n        public void ResponseTypeConstraintsChanged()\n        {\n            var messages = CompareSwagger(\"operation_check_05.json\").Where(m => m.NewJsonRef.Contains(\"Responses\")).ToArray();\n            var relaxed = messages.Where(m => m.Id == ComparisonMessages.ConstraintIsWeaker.Id && m.Severity == Category.Error).ToArray();\n            var breaking = messages.Where(m => m.Id == ComparisonMessages.ConstraintChanged.Id && m.Severity == Category.Error).ToArray();\n            var info = messages.Where(m => m.Id > 0 && m.Severity == Category.Info).ToArray();\n\n            Assert.Equal(13, relaxed.Length);\n            Assert.Equal(8, breaking.Length);\n            Assert.Equal(11, info.Length);\n        }\n\n        /// <summary>\n        /// Verifies that changing the collection format for an array parameter is flagged.\n        /// Direction: requests\n        /// </summary>\n        [Fact]\n        public void GlobalParamArrayFormatChanged()\n        {\n            var messages = CompareSwagger(\"param_check_01.json\").ToArray();\n            var changed = messages.Where(m => m.Id == ComparisonMessages.ArrayCollectionFormatChanged.Id).ToArray();\n\n            Assert.Equal(6, changed.Length);\n            Assert.Equal(Category.Error, changed[0].Severity);\n            Assert.Equal(Category.Error, changed[1].Severity);\n            Assert.Equal(Category.Error, changed[2].Severity);\n            Assert.Equal(Category.Error, changed[3].Severity);\n            Assert.Equal(Category.Error, changed[4].Severity);\n            Assert.Equal(Category.Error, changed[5].Severity);\n            Assert.Equal(\"new/param_check_01.json#/parameters/a\", changed[0].NewJsonRef);\n            Assert.Equal(\"new/param_check_01.json#/parameters/b\", changed[1].NewJsonRef);\n            Assert.Equal(\"new/param_check_01.json#/parameters/e/schema/properties/a\", changed[2].NewJsonRef);\n            Assert.Equal(\"new/param_check_01.json#/parameters/e/schema/properties/b\", changed[3].NewJsonRef);\n            Assert.Equal(\"new/param_check_01.json#/definitions/A/properties/a\", changed[4].NewJsonRef);\n            Assert.Equal(\"new/param_check_01.json#/definitions/A/properties/b\", changed[5].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that making constraints stricter in requests are flagged as errors and that relaxed constraints\n        /// are just informational.\n        /// </summary>\n        [Fact]\n        public void GlobalParamTypeConstraintsChanged()\n        {\n            var messages = CompareSwagger(\"param_check_01.json\").Where(m => m.NewJsonRef.Contains(\"parameters\")).ToArray();\n            var stricter = messages.Where(m => m.Id == ComparisonMessages.ConstraintIsStronger.Id && m.Severity == Category.Error).ToArray();\n            var breaking = messages.Where(m => m.Id == ComparisonMessages.ConstraintChanged.Id && m.Severity == Category.Error).ToArray();\n            var info = messages.Where(m => m.Id > 0 && m.Severity == Category.Info).ToArray();\n\n            Assert.Equal(11, stricter.Length);\n            Assert.Equal(8, breaking.Length);\n            Assert.Equal(13, info.Length);\n        }\n\n        /// <summary>\n        /// Verifies that changing the collection format for an array parameter is flagged.\n        /// Direction: responses\n        /// </summary>\n        [Fact]\n        public void GlobalResponseArrayFormatChanged()\n        {\n            var messages = CompareSwagger(\"response_check_01.json\").ToArray();\n            var changed = messages.Where(m => m.Id == ComparisonMessages.ArrayCollectionFormatChanged.Id).ToArray();\n\n            Assert.Equal(6, changed.Length);\n            Assert.Equal(Category.Error, changed[0].Severity);\n            Assert.Equal(Category.Error, changed[1].Severity);\n            Assert.Equal(Category.Error, changed[2].Severity);\n            Assert.Equal(Category.Error, changed[3].Severity);\n            Assert.Equal(Category.Error, changed[4].Severity);\n            Assert.Equal(Category.Error, changed[5].Severity);\n            Assert.Equal(\"new/response_check_01.json#/responses/200/schema/properties/a\", changed[0].NewJsonRef);\n            Assert.Equal(\"new/response_check_01.json#/responses/200/schema/properties/b\", changed[1].NewJsonRef);\n            Assert.Equal(\"new/response_check_01.json#/responses/201/schema/properties/a\", changed[2].NewJsonRef);\n            Assert.Equal(\"new/response_check_01.json#/responses/201/schema/properties/b\", changed[3].NewJsonRef);\n            Assert.Equal(\"new/response_check_01.json#/definitions/A/properties/a\", changed[4].NewJsonRef);\n            Assert.Equal(\"new/response_check_01.json#/definitions/A/properties/b\", changed[5].NewJsonRef);\n        }\n\n        /// <summary>\n        /// Verifies that, in global responses, relaxed constraints are errors while stricter constraints are informational.\n        /// </summary>\n        [Fact]\n        public void GlobalResponseTypeConstraintsChanged()\n        {\n            var messages = CompareSwagger(\"response_check_01.json\").Where(m => m.NewJsonRef.Contains(\"responses\")).ToArray();\n            var relaxed = messages.Where(m => m.Id == ComparisonMessages.ConstraintIsWeaker.Id && m.Severity == Category.Error).ToArray();\n            var breaking = messages.Where(m => m.Id == ComparisonMessages.ConstraintChanged.Id && m.Severity == Category.Error).ToArray();\n            var info = messages.Where(m => m.Id > 0 && m.Severity == Category.Info).ToArray();\n\n            Assert.Equal(13, relaxed.Length);\n            Assert.Equal(8, breaking.Length);\n            Assert.Equal(11, info.Length);\n        }\n\n        [Fact]\n        public void RemovedPropertyTest()\n        {\n            var messages = CompareSwagger(\"removed_property.json\").ToArray();\n            Assert.NotEmpty(messages.Where(m => m.Id == ComparisonMessages.RemovedProperty.Id));\n        }\n\n        [Fact]\n        public void FormatChanged()\n        {\n            var messages = CompareSwagger(\"format_check_01.json\").ToArray();\n            Assert.NotEmpty(messages.Where(m => m.Id == ComparisonMessages.TypeFormatChanged.Id));\n        }\n\n        [Fact]\n        public void FormatRemoved()\n        {\n            var messages = CompareSwagger(\"format_check_02.json\").ToArray();\n            Assert.NotEmpty(messages.Where(m => m.Id == ComparisonMessages.TypeFormatChanged.Id));\n        }\n\n        [Fact]\n        public void CommonParameterAdded()\n        {\n            var messages = CompareSwagger(\"common_parameter_check_01.json\").ToArray();\n            Assert.Single(messages.Where(m => m.Severity == Category.Error));\n        }\n\n        [Fact]\n        public void CommonParameterChanged()\n        {\n            var messages = CompareSwagger(\"common_parameter_check_02.json\").ToArray();\n            Assert.Single(messages.Where(m => m.Id == ComparisonMessages.RemovedRequiredParameter.Id));\n            Assert.Single(messages.Where(m => m.Id == ComparisonMessages.ParameterInHasChanged.Id));\n            Assert.Equal(2, messages.Where(m => m.Id == ComparisonMessages.RequiredStatusChange.Id).Count());\n            Assert.Single(messages.Where(m => m.Id == ComparisonMessages.RemovedRequiredParameter.Id && m.Severity == Category.Error));\n        }\n\n        [Fact]\n        public void CommonParameterOverride()\n        {\n            // For the parameters both defined in path/operation, the operation parameters should override path parameters.\n            var messages = CompareSwagger(\"common_parameter_check_03.json\").ToArray();\n            Assert.Empty(messages.Where(m => m.Severity == Category.Error));\n        }\n\n        [Fact]\n        public void CommonParameterWithRef()\n        {\n            var messages = CompareSwagger(\"common_parameter_check_04.json\").ToArray();\n            Assert.Equal(2, messages.Where(m => m.Id == ComparisonMessages.RequiredStatusChange.Id).Count());\n            var changes = messages.Where(m => m.Id == ComparisonMessages.RequiredStatusChange.Id && m.Severity == Category.Error).ToList();\n            Assert.Equal(2, changes.Count());\n        }\n\n        [Fact]\n        public void XmsEnumModelAsString()\n        {\n            var messages = CompareSwagger(\"enum_as_string.json\").ToArray();\n            Assert.Equal(2,messages.Where(m => m.Id == ComparisonMessages.AddedEnumValue.Id).ToList().Count());\n        }\n\n        [Fact]\n        public void ChangedParameterOrder()\n        {\n            // Reference:\n            // https://github.com/Azure/autorest/blob/main/docs/generate/how-autorest-generates-code-from-openapi.md#specifying-required-parameters-and-properties\n            var messages = CompareSwagger(\"parameter_order_change.json\").ToArray();\n            ComparisonMessage[] paramOrderChangedMessages =\n                messages.Where(m => m.Id == ComparisonMessages.ChangedParameterOrder.Id).ToArray();\n            Assert.All(paramOrderChangedMessages, message => Assert.Equal(Category.Error, message.Severity));\n            Assert.Equal(2, paramOrderChangedMessages.Length);\n            Assert.Equal(\n                \"The order of parameter with Name: 'd', In: 'Query', was changed. Expected param at index '2' but instead found it at index '3'.\",\n                paramOrderChangedMessages[0].Message);\n            Assert.Equal(\n                \"The order of parameter with Name: 'e', In: 'Query', was changed. Expected param at index '3' but instead found it at index '2'.\",\n                paramOrderChangedMessages[1].Message);\n            \n        }\n\n        [Fact]\n        public void ChangedGlobalParameterOrder()\n        {\n            var messages = CompareSwagger(\"global_parameter_order_change.json\").ToArray();\n\n            // Changed order from:\n            //    ( Implicit , Method1  , Client  , Method2 )\n            // to ( Method2  , Implicit , Method1 , Client  )\n            //\n            // So there are two errors reported:\n            // - On Method1, as now it is before Method2\n            // - On Method2, as now it is after Method1\n            //\n            // There are no errors for Implicit and Client as their order doesn't matter.\n            //\n            // Reference: https://github.com/Azure/autorest/blob/main/docs/extensions/readme.md#x-ms-parameter-location\n            Assert.Equal(2, messages.Where(m => m.Id == ComparisonMessages.ChangedParameterOrder.Id).Count());\n        }\n\n        [Fact]\n        public void DidNotChangeGlobalParameterOrder()\n        {\n            var messages = CompareSwagger(\"global_parameter_no_order_change.json\").ToArray();\n\n            // Changed order from:\n            //    ( Implicit , Method1 , Client  , Method2  )\n            // to ( Method1  , Client  , Method2 , Implicit )\n            //\n            // So there is no issue with order change:\n            // The Method1 param still comes before Method2 param, and order\n            // of Implicit and Client doesn't matter.\n            //\n            // Reference: https://github.com/Azure/autorest/blob/main/docs/extensions/readme.md#x-ms-parameter-location\n            Assert.Empty(messages.Where(m => m.Id == ComparisonMessages.ChangedParameterOrder.Id));\n        }\n\n        [Fact]\n        public void ChangedXmsLongRunningOperation()\n        {\n            var messages = CompareSwagger(\"long_running_operation.json\").ToArray();\n            Assert.Single(messages.Where(m => m.Id == ComparisonMessages.XmsLongRunningOperationChanged.Id));\n        }\n\n        [Fact]\n        public void AddedOptionalProperty()\n        {\n            var messages = CompareSwagger(\"added_optional_property.json\").ToArray();\n            Assert.Single(messages.Where(m => m.Id == ComparisonMessages.AddedOptionalProperty.Id));\n        }\n\n\n        // Verify a inline schema of response was changed to reference schema and a new property was added. \n        [Fact]\n        public void AddedOptionalPropertyToInlineResponseSchema()\n        {\n            var messages = CompareSwagger(\"add_optional_property_01.json\").ToArray();\n            Assert.Single(messages.Where(m => m.Id == ComparisonMessages.AddedPropertyInResponse.Id));\n            Assert.Single(messages.Where(m => m.Id == ComparisonMessages.ReferenceRedirection.Id));\n        }\n\n        [Fact]\n        public void AddedOrRemovedXmsEnum()\n        {\n            var messages = CompareSwagger(\"xms_enum_added.json\").ToArray();\n            Assert.Equal(2, messages.Where(m => m.Id == ComparisonMessages.AddedXmsEnum.Id).Count());\n            Assert.Equal(2, messages.Where(m => m.Id == ComparisonMessages.RemovedXmsEnum.Id).Count());\n        }\n\n        [Fact]\n        public void XmsEnumChanged()\n        {\n            var messages = CompareSwagger(\"xms_enum_changed.json\").ToArray();\n            Assert.Equal(4, messages.Where(m => m.Id == ComparisonMessages.XmsEnumChanged.Id).Count());\n        }\n\n        [Fact]\n        public void ReferenceChanged()\n        {\n            var messages = CompareSwagger(\"xms_client_name_changed.json\").ToArray();\n            var redirected = messages.Where(m => m.Id == ComparisonMessages.ReferenceRedirection.Id).ToArray();\n            Assert.Single(redirected);\n            Assert.Equal(\"new/xms_client_name_changed.json#/paths/~1api~1Parameters/post/parameters/0/schema\", redirected[0].NewJsonRef);\n        }\n\n        [Fact]\n        public void ParameterLocationChanged()\n        {\n            ComparisonMessage[] messages = CompareSwagger(\"parameter_location_change.json\").ToArray();\n\n            // We assert there are no ComparisonMessages.ChangedParameterOrder breaking changes because\n            // the compared swaggers do not reorder any parameters.\n            Assert.Empty(messages.Where(m => m.Id == ComparisonMessages.ChangedParameterOrder.Id));\n\n            ComparisonMessage[] locationChangedMessages = messages.Where(m => m.Id == ComparisonMessages.ParameterLocationHasChanged.Id).ToArray();\n            Assert.Equal(3, locationChangedMessages.Length);\n            Assert.All(locationChangedMessages, message => Assert.Equal(Category.Error, message.Severity));\n            Assert.Equal(\n                \"Parameter location has changed. Name: 'implicit_from_method_to_client'. In: 'Query'. Old location is method: 'True'. New location is method: 'False'.\",\n                locationChangedMessages[0].Message);\n            Assert.Equal(\n                \"Parameter location has changed. Name: 'global_from_client_to_method'. In: 'Query'. Old location is method: 'False'. New location is method: 'True'.\",\n                locationChangedMessages[1].Message);\n            Assert.Equal(\n                \"Parameter location has changed. Name: 'from_implicit_global_client_to_implicit_method'. In: 'Query'. Old location is method: 'False'. New location is method: 'True'.\",\n                locationChangedMessages[2].Message);\n        }\n\n        [Fact]\n        public void ParameterRemoved()\n        {\n            ComparisonMessage[] messages = CompareSwagger(\"removed_parameter.json\")\n                .Where(msg => msg.Severity == Category.Error).ToArray();\n\n            ComparisonMessage[] removedReqParamMessages = messages.Where(m => m.Id == ComparisonMessages.RemovedRequiredParameter.Id).ToArray();\n            ComparisonMessage[] removedOptParamMessages = messages.Where(m => m.Id == ComparisonMessages.RemovedOptionalParameter.Id).ToArray();\n\n            Assert.Equal(6, messages.Length);\n            Assert.Equal(4, removedReqParamMessages.Length);\n            Assert.Equal(2, removedOptParamMessages.Length);\n\n            string[] reqParamNames = { \"path_param\", \"path_param_req\", \"query_param_req\", \"body_param_req\" };\n            string[] optParamNames = { \"body_param\", \"query_param\" };\n\n            string[] reqParamMessageStrings = removedReqParamMessages.Select(msg => msg.Message).ToArray();\n            string[] optParamMessageStrings = removedOptParamMessages.Select(msg => msg.Message).ToArray();\n\n            foreach (var reqParamName in reqParamNames)\n            {\n                Assert.Contains(reqParamMessageStrings, str => str.Contains(reqParamName));\n            }\n            foreach (var optParamName in optParamNames)\n            {\n                Assert.Contains(optParamMessageStrings, str => str.Contains(optParamName));\n            }\n        }\n    }\n}\n"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/app.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<configuration>\n  <appSettings>\n    <add key=\"xunit.methodDisplay\" value=\"method\"/>\n  </appSettings>\n</configuration>"
  },
  {
    "path": "openapi-diff/src/modeler/AutoRest.Swagger.Tests/packages.config",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<packages>\n  <package id=\"xunit\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.abstractions\" version=\"2.0.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.assert\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.core\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.extensibility.core\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.extensibility.execution\" version=\"2.1.0\" targetFramework=\"net45\" />\n  <package id=\"xunit.extensions\" version=\"2.0.0\" targetFramework=\"net451\" />\n  <package id=\"xunit.runner.visualstudio\" version=\"2.1.0\" targetFramework=\"net45\" />\n</packages>\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"@azure/oad\",\n  \"version\": \"0.12.4\",\n  \"author\": {\n    \"name\": \"Microsoft Corporation\",\n    \"email\": \"azsdkteam@microsoft.com\",\n    \"url\": \"https://github.com/Azure/openapi-diff\"\n  },\n  \"description\": \"OpenApi Specification Diff tool\",\n  \"license\": \"MIT\",\n  \"dependencies\": {\n    \"@ts-common/fs\": \"0.2.0\",\n    \"@ts-common/iterator\": \"0.3.6\",\n    \"@ts-common/json\": \"0.3.1\",\n    \"@ts-common/json-parser\": \"0.9.0\",\n    \"@ts-common/source-map\": \"0.5.0\",\n    \"@ts-common/string-map\": \"0.3.0\",\n    \"autorest\": \"^3.8.0\",\n    \"js-yaml\": \"^4.1.0\",\n    \"json-pointer\": \"0.6.2\",\n    \"json-refs\": \"^3.0.15\",\n    \"lodash\": \"^4.17.21\",\n    \"source-map\": \"0.7.6\",\n    \"tslib\": \"^2.6.3\",\n    \"winston\": \"^3.13.0\",\n    \"yargs\": \"^15.4.1\"\n  },\n  \"devDependencies\": {\n    \"@eslint/js\": \"^10.0.0\",\n    \"@types/jest\": \"^30.0.0\",\n    \"@types/js-yaml\": \"^4.0.9\",\n    \"@types/json-pointer\": \"^1.0.30\",\n    \"@types/node\": \"^20.0.0\",\n    \"@types/yargs\": \"^15.0.19\",\n    \"eslint\": \"^10.0.0\",\n    \"globals\": \"^17.3.0\",\n    \"jest\": \"^30.1.3\",\n    \"prettier\": \"3.8.1\",\n    \"ts-jest\": \"^29.1.4\",\n    \"typescript\": \"~5.9.2\",\n    \"typescript-eslint\": \"^8.58.0\"\n  },\n  \"homepage\": \"https://github.com/Azure/openapi-diff\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/Azure/openapi-diff.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Azure/openapi-diff/issues\"\n  },\n  \"overrides\": {\n    \"test-exclude\": {\n      \"glob\": \"^9.3.5\"\n    },\n    \"superagent\": \"^10.2.3\"\n  },\n  \"engines\": {\n    \"node\": \">=20.19.0\"\n  },\n  \"files\": [\n    \"dist/lib\",\n    \"dist/index.*\",\n    \"dist/cli.*\",\n    \"dlls\",\n    \"src/index.ts\",\n    \"src/cli.ts\",\n    \"src/lib\",\n    \"template/*\",\n    \"package.json\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"main\": \"./dist/index.js\",\n  \"types\": \"./dist/index.d.ts\",\n  \"bin\": {\n    \"oad\": \"./dist/cli.js\"\n  },\n  \"jest\": {\n    \"preset\": \"ts-jest\",\n    \"collectCoverage\": true,\n    \"testMatch\": [\n      \"**/*[tT]est.ts\"\n    ],\n    \"testTimeout\": 100000\n  },\n  \"scripts\": {\n    \"dn.clean\": \"dotnet clean openapi-diff/OpenApiDiff.sln\",\n    \"dn.restore\": \"dotnet restore openapi-diff/OpenApiDiff.sln\",\n    \"dn.build\": \"npm run dn.clean && npm run dn.restore && dotnet build -c release openapi-diff/OpenApiDiff.sln /nologo /clp:NoSummary\",\n    \"dn.publish\": \"npm run dn.build && dotnet publish -c release openapi-diff/src/core/OpenApiDiff/OpenApiDiff.csproj\",\n    \"dn.test\": \"npm run dn.build && dotnet test openapi-diff/src/modeler/AutoRest.Swagger.Tests/AutoRest.Swagger.Tests.csproj\",\n    \"tsc\": \"tsc\",\n    \"ts.test\": \"jest\",\n    \"test\": \"npm run dn.test && npm run ts.test\",\n    \"lint\": \"eslint . --report-unused-disable-directives --max-warnings 0\",\n    \"lint:fix\": \"eslint . --fix\",\n    \"prettier\": \"prettier . --check --end-of-line auto\",\n    \"prettier:debug\": \"prettier . --check --end-of-line auto --log-level debug\",\n    \"prettier:write\": \"prettier . --end-of-line auto --write\",\n    \"prepack\": \"npm ci && npm run dn.publish && tsc\"\n  }\n}\n"
  },
  {
    "path": "src/cli.ts",
    "content": "#!/usr/bin/env node\n\n// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport yargs from \"yargs\"\nimport { log } from \"./lib/util/logging\"\n\nconst defaultLogDir = log.directory\n\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst packageVersion = require(\"../package.json\").version\n\n// eslint-disable-next-line @typescript-eslint/no-unused-expressions\nyargs\n  .version(packageVersion)\n  .commandDir(\"lib/commands\")\n  .option(\"h\", { alias: \"help\" })\n  .option(\"l\", {\n    alias: \"logLevel\",\n    describe: \"Set the logging level for console.\",\n    choices: [\"off\", \"json\", \"error\", \"warn\", \"info\", \"verbose\", \"debug\", \"silly\"],\n    default: \"warn\"\n  })\n  .option(\"f\", {\n    alias: \"logFilepath\",\n    describe:\n      `Set the log file path. It must be an absolute filepath. ` +\n      `By default the logs will stored in a timestamp based log file at \"${defaultLogDir}\".`\n  })\n  .global([\"h\", \"l\", \"f\"])\n  .help().argv\n\nif (yargs.argv._.length === 0 && yargs.argv.h === false) {\n  // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n  yargs.coerce(\"help\", function (arg) {\n    return true\n  }).argv\n}\n"
  },
  {
    "path": "src/index.ts",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\n// Easy to use methods from validate.js\nexport { log } from \"./lib/util/logging\"\nexport { compare, compareTags } from \"./lib/validate\"\n\n// Classes\nexport { OpenApiDiff, Messages, Message, ChangeProperties } from \"./lib/validators/openApiDiff\"\n\n// Constants\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nexport const Constants = require(\"./lib/util/constants\")\n"
  },
  {
    "path": "src/lib/commands/oad.ts",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { log } from \"../util/logging\"\nimport { compareTags, compare } from \"../validate\"\n\nexport const command = \"compare <old-spec> <new-spec>\"\n\nexport const describe = \"Compares old and new open api specification for breaking changes.\"\n\nexport const builder = {\n  j: {\n    alias: \"inJson\",\n    describe: \"A boolean flag indicating whether output format of the messages is json.\",\n    boolean: true,\n    default: true\n  },\n  o: {\n    alias: \"oldTagName\",\n    describe: \"The tag name for the old specification file.  If included it indicates that the old spec file is a readme file\"\n  },\n  n: {\n    alias: \"newTagName\",\n    describe: \"The tag name for the new specification file.  If included it indicates that the new spec file is a readme file\"\n  }\n}\n\nexport type Argv = {\n  readonly oldSpec: string\n  readonly o?: string\n  readonly newSpec: string\n  readonly n?: string\n  readonly logLevel?: unknown\n  readonly f?: unknown\n  readonly j?: unknown\n}\n\nexport const handler = (argv: Argv) => {\n  log.debug(argv)\n  const oldSpec = argv.oldSpec\n  const oldTag = argv.o\n  const newSpec = argv.newSpec\n  const newTag = argv.n\n  const vOptions = {\n    consoleLogLevel: argv.logLevel,\n    logFilepath: argv.f,\n    json: argv.j\n  }\n\n  const compareFunc = oldTag && newTag ? compareTags(oldSpec, oldTag, newSpec, newTag, vOptions) : compare(oldSpec, newSpec, vOptions)\n\n  return compareFunc\n    .then(result => {\n      console.log(result)\n    })\n    .catch(err => {\n      console.log(err)\n      process.exitCode = 1\n    })\n}\n"
  },
  {
    "path": "src/lib/util/constants.ts",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nexport let Constants = {\n  constraints: [\"minLength\", \"maxLength\", \"minimum\", \"maximum\", \"enum\", \"maxItems\", \"minItems\", \"uniqueItems\", \"multipleOf\", \"pattern\"],\n  xmsExamples: \"x-ms-examples\",\n  exampleInSpec: \"example-in-spec\",\n  BodyParameterValid: \"BODY_PARAMETER_VALID\",\n  xmsSkipUrlEncoding: \"x-ms-skip-url-encoding\",\n  Errors: \"Errors\",\n  Warnings: \"Warnings\",\n  ErrorCodes: {\n    InternalError: \"INTERNAL_ERROR\",\n    InitializationError: \"INITIALIZATION_ERROR\",\n    ResolveSpecError: \"RESOLVE_SPEC_ERROR\",\n    RefNotFoundError: \"REF_NOTFOUND_ERROR\",\n    JsonParsingError: \"JSON_PARSING_ERROR\",\n    RequiredParameterExampleNotFound: \"REQUIRED_PARAMETER_EXAMPLE_NOT_FOUND\",\n    ErrorInPreparingRequest: \"ERROR_IN_PREPARING_REQUEST\",\n    XmsExampleNotFoundError: \"X-MS-EXAMPLE_NOTFOUND_ERROR\",\n    ResponseValidationError: \"RESPONSE_VALIDATION_ERROR\",\n    RequestValidationError: \"REQUEST_VALIDATION_ERROR\",\n    ResponseBodyValidationError: \"RESPONSE_BODY_VALIDATION_ERROR\",\n    ResponseStatusCodeNotInExample: \"RESPONSE_STATUS_CODE_NOT_IN_EXAMPLE\",\n    ResponseStatusCodeNotInSpec: \"RESPONSE_STATUS_CODE_NOT_IN_SPEC\",\n    ResponseSchemaNotInSpec: \"RESPONSE_SCHEMA_NOT_IN_SPEC\",\n    RequiredParameterNotInExampleError: \"REQUIRED_PARAMETER_NOT_IN_EXAMPLE_ERROR\",\n    BodyParameterValidationError: \"BODY_PARAMETER_VALIDATION_ERROR\",\n    TypeValidationError: \"TYPE_VALIDATION_ERROR\",\n    ConstraintValidationError: \"CONSTRAINT_VALIDATION_ERROR\",\n    StatuscodeNotInExampleError: \"STATUS_CODE_NOT_IN_EXAMPLE_ERROR\",\n    SemanticValidationError: \"SEMANTIC_VALIDATION_ERROR\",\n    MultipleOperationsFound: \"MULTIPLE_OPERATIONS_FOUND\",\n    NoOperationFound: \"NO_OPERATION_FOUND\",\n    IncorrectInput: \"INCORRECT_INPUT\",\n    PotentialOperationSearchError: \"POTENTIAL_OPERATION_SEARCH_ERROR\",\n    PathNotFoundInRequestUrl: \"PATH_NOT_FOUND_IN_REQUEST_URL\",\n    OperationNotFoundInCache: \"OPERATION_NOT_FOUND_IN_CACHE\",\n    OperationNotFoundInCacheWithVerb: \"OPERATION_NOT_FOUND_IN_CACHE_WITH_VERB\", // Implies we found correct api-version + provider in cache\n    OperationNotFoundInCacheWithApi: \"OPERATION_NOT_FOUND_IN_CACHE_WITH_API\", // Implies we found correct provider in cache\n    OperationNotFoundInCacheWithProvider: \"OPERATION_NOT_FOUND_IN_CACHE_WITH_PROVIDER\" // Implies we never found correct provider in cache\n  },\n  EnvironmentVariables: {\n    ClientId: \"CLIENT_ID\",\n    Domain: \"DOMAIN\",\n    ApplicationSecret: \"APPLICATION_SECRET\",\n    AzureSubscriptionId: \"AZURE_SUBSCRIPTION_ID\",\n    AzureLocation: \"AZURE_LOCATION\",\n    AzureResourcegroup: \"AZURE_RESOURCE_GROUP\"\n  },\n  unknownResourceProvider: \"microsoft.unknown\",\n  unknownApiVersion: \"unknown-api-version\",\n  knownTitleToResourceProviders: {\n    ResourceManagementClient: \"Microsoft.Resources\"\n  }\n}\n"
  },
  {
    "path": "src/lib/util/logging.ts",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport * as fs from \"fs\"\nimport * as path from \"path\"\nimport * as winston from \"winston\"\n\nlet currentLogFile: unknown\nlet logDir: unknown\n\n/*\n * Provides current time in custom format that will be used in naming log files. Example:'20140820_151113'\n * @return {string} Current time in a custom string format\n */\nfunction getTimeStamp() {\n  // We pad each value so that sorted directory listings show the files in chronological order\n  function pad(number: number) {\n    if (number < 10) {\n      return \"0\" + number\n    }\n\n    return number.toString()\n  }\n\n  const now = new Date()\n  return (\n    pad(now.getFullYear()) +\n    pad(now.getMonth() + 1) +\n    pad(now.getDate()) +\n    \"_\" +\n    pad(now.getHours()) +\n    pad(now.getMinutes()) +\n    pad(now.getSeconds())\n  )\n}\nconst customLogLevels = {\n  off: 0,\n  json: 1,\n  error: 2,\n  warn: 3,\n  info: 4,\n  verbose: 5,\n  debug: 6,\n  silly: 7\n}\n\nexport type Logger = {\n  consoleLogLevel: unknown\n  filepath: unknown\n  directory: unknown\n  readonly silly: (v: string) => void\n  readonly debug: (v: unknown) => void\n  readonly error: (v: unknown) => void\n}\n\nconst transports = {\n  console: new winston.transports.Console({\n    level: \"warn\",\n    format: winston.format.combine(winston.format.simple())\n  })\n}\n\nexport let log: Logger = winston.createLogger({\n  transports: [transports.console],\n  levels: customLogLevels\n}) as any\n\nObject.defineProperties(log, {\n  consoleLogLevel: {\n    enumerable: true,\n    get() {\n      return this.transports.console.level\n    },\n    set(level) {\n      if (!level) {\n        level = \"warn\"\n      }\n      const validLevels = Object.keys(customLogLevels)\n      if (\n        !validLevels.some(function (item) {\n          return item === level\n        })\n      ) {\n        throw new Error(`The logging level provided is \"${level}\". Valid values are: \"${validLevels}\".`)\n      }\n      transports.console.level = level\n      return\n    }\n  },\n  directory: {\n    enumerable: true,\n    get() {\n      return logDir\n    },\n    set(logDirectory) {\n      if (!logDirectory || (logDirectory && typeof logDirectory.valueOf() !== \"string\")) {\n        throw new Error('logDirectory cannot be null or undefined and must be of type \"string\".')\n      }\n\n      if (!fs.existsSync(logDirectory)) {\n        fs.mkdirSync(logDirectory)\n      }\n      logDir = logDirectory\n      return\n    }\n  },\n  filepath: {\n    enumerable: true,\n    get() {\n      if (!currentLogFile) {\n        const filename = `validate_log_${getTimeStamp()}.log`\n        currentLogFile = this.directory ? path.join(this.directory, filename) : filename\n      }\n\n      return currentLogFile\n    },\n    set(logFilePath) {\n      if (!logFilePath || (logFilePath && typeof logFilePath.valueOf() !== \"string\")) {\n        throw new Error(\"filepath cannot be null or undefined and must be of type string. It must be an absolute file path.\")\n      }\n      currentLogFile = logFilePath\n      this.directory = path.dirname(logFilePath)\n      if (!this.transports.file) {\n        this.add(\n          new winston.transports.File({\n            level: \"silly\",\n            silent: false,\n            filename: logFilePath\n          })\n        )\n      }\n      return\n    }\n  }\n})\n"
  },
  {
    "path": "src/lib/util/resolveSwagger.ts",
    "content": "import * as json from \"@ts-common/json\"\nimport * as jsonParser from \"@ts-common/json-parser\"\nimport * as jsonPointer from \"json-pointer\"\n\nimport { toArray } from \"@ts-common/iterator\"\nimport { cloneDeep, Data, FilePosition, getFilePosition, getInfo, getPath, ObjectInfo } from \"@ts-common/source-map\"\nimport * as sourceMap from \"source-map\"\nimport * as sm from \"@ts-common/string-map\"\nimport { readFileSync, writeFileSync } from \"fs\"\nimport * as path from \"path\"\nimport { pathToJsonPointer } from \"./utils\"\n\n/*\n * Merges source object into the target object\n * @param {object} source The object that needs to be merged\n *\n * @param {object} target The object to be merged into\n *\n * @returns {object} target - Returns the merged target object.\n */\nexport function mergeObjects<T extends sm.MutableStringMap<Data>>(source: T, target: T): T {\n  const result: sm.MutableStringMap<Data> = target\n  for (const [key, sourceProperty] of sm.entries(source)) {\n    if (Array.isArray(sourceProperty)) {\n      const targetProperty = target[key]\n      if (!targetProperty) {\n        result[key] = sourceProperty\n      } else if (!Array.isArray(targetProperty)) {\n        throw new Error(\n          `Cannot merge ${key} from source object into target object because the same property ` +\n            `in target object is not (of the same type) an Array.`\n        )\n      } else {\n        result[key] = mergeArrays(sourceProperty, targetProperty)\n      }\n    } else {\n      result[key] = cloneDeep(sourceProperty)\n    }\n  }\n  return result as T\n}\n\n/*\n * Merges source array into the target array\n * @param {array} source The array that needs to be merged\n *\n * @param {array} target The array to be merged into\n *\n * @returns {array} target - Returns the merged target array.\n */\nexport function mergeArrays<T extends Data>(source: ReadonlyArray<T>, target: T[]): T[] {\n  if (!Array.isArray(target) || !Array.isArray(source)) {\n    return target\n  }\n  source.forEach(item => {\n    target.push(cloneDeep(item))\n  })\n  return target\n}\n\nfunction getParamKey(source: any) {\n  return source.$ref ? source.$ref : source.in + source.name\n}\n\n/**\n * Get next array index for source object,\n * the source object is actually an array but treats as an object, so the its key must be number\n * @param source\n */\nfunction getNextKey(source: sm.MutableStringMap<Data>) {\n  const result = sm.keys(source).reduce((a, b) => (a > b ? a : b))\n  if (result == undefined) {\n    return \"0\"\n  }\n  return (+(result as string) + 1).toString()\n}\n\nfunction mergeParameters<T extends sm.MutableStringMap<Data>>(source: T, target: T): T {\n  const result: sm.MutableStringMap<Data> = target\n  for (const sourceProperty of sm.values(source)) {\n    if (!sm.values(target).some(v => getParamKey(v) === getParamKey(sourceProperty))) {\n      result[getNextKey(result)] = sourceProperty\n    }\n  }\n  return result as T\n}\n\n/**\n * This class aimed at process some swagger extensions like x-ms-path and\n * you can also resolve some swagger keyword e.g allOf here, then return a\n * new json with source location info\n */\nexport class ResolveSwagger {\n  public innerSwagger: json.Json | undefined\n  public file: string\n  public map: sourceMap.BasicSourceMapConsumer | sourceMap.IndexedSourceMapConsumer\n\n  constructor(file: string, map: sourceMap.BasicSourceMapConsumer | sourceMap.IndexedSourceMapConsumer) {\n    this.file = path.resolve(file)\n    this.map = map\n  }\n  public resolve(): json.Json | undefined {\n    const content: string = readFileSync(this.file, { encoding: \"utf8\" })\n    this.parse(this.file, content)\n    this.unifyXMsPaths()\n    this.ConvertPathLevelParameter()\n    this.ExpandDefinitions()\n    this.ConvertAdditionalProperty()\n    this.generateNew()\n    return this.innerSwagger\n  }\n\n  private unifyXMsPaths() {\n    if (!this.innerSwagger) {\n      throw new Error(\"non swagger object\")\n    }\n    const swagger = this.innerSwagger as any\n    const xmsPaths = swagger[\"x-ms-paths\"]\n    const paths = swagger.paths\n    if (xmsPaths && xmsPaths instanceof Object && toArray(sm.keys(xmsPaths)).length > 0) {\n      for (const [property, v] of sm.entries(xmsPaths)) {\n        paths[property] = v\n      }\n      swagger.paths = mergeObjects(xmsPaths, paths)\n      delete swagger[\"x-ms-paths\"]\n    }\n  }\n\n  private ConvertPathLevelParameter() {\n    if (!this.innerSwagger) {\n      throw new Error(\"Null swagger object\")\n    }\n    const swagger = this.innerSwagger as any\n    const paths = swagger.paths\n    if (paths && paths instanceof Object && toArray(sm.keys(paths)).length > 0) {\n      for (const [property, v] of sm.entries(paths)) {\n        const pathsLevelParameters = (v as any).parameters\n        if (!pathsLevelParameters) {\n          continue\n        }\n        for (const [key, o] of sm.entries(v as any)) {\n          // key != parameters indicates an http method\n          if (key.toLowerCase() !== \"parameters\") {\n            const operationParam = (o as any).parameters ? (o as any).parameters : []\n            paths[property][key].parameters = mergeParameters(pathsLevelParameters, operationParam)\n          }\n        }\n        delete (v as any).parameters\n      }\n    }\n  }\n\n  public ConvertAdditionalProperty() {\n    if (!this.innerSwagger) {\n      throw new Error(\"Null swagger object\")\n    }\n    const swagger = this.innerSwagger as any\n    const paths = swagger.paths\n    if (paths && paths instanceof Object && toArray(sm.keys(paths)).length > 0) {\n      for (const v of sm.values(paths)) {\n        for (const [key, o] of sm.entries(v as any)) {\n          if (key.toLowerCase() !== \"parameters\") {\n            const operationParam = (o as any).parameters ? (o as any).parameters : []\n            operationParam.forEach((v: any) => v.schema && this.transformAdditionalProperty(v.schema))\n            const responses = (o as any).responses ? sm.values((o as any).responses) : []\n            responses.forEach((v: any) => v.schema && this.transformAdditionalProperty(v.schema))\n          } else {\n            sm.values(o as any).forEach((v: any) => v.schema && this.transformAdditionalProperty(v.schema))\n          }\n        }\n      }\n    }\n    if (swagger.definitions) {\n      for (const o of sm.values(swagger.definitions)) {\n        this.transformAdditionalProperty(o)\n      }\n    }\n    if (swagger.parameters) {\n      for (const o of sm.values(swagger.parameters)) {\n        if ((o as any).schema) {\n          this.transformAdditionalProperty((o as any).schema)\n        }\n      }\n    }\n  }\n\n  private transformAdditionalProperty(schema: any) {\n    if (typeof schema?.additionalProperties === \"boolean\") {\n      if (!schema?.additionalProperties) {\n        delete schema.additionalProperties\n      } else {\n        schema.additionalProperties = {}\n      }\n    }\n    if (schema.properties) {\n      for (const v of sm.values(schema.properties)) {\n        this.transformAdditionalProperty(v)\n      }\n    }\n\n    if (schema.allOf) {\n      for (const v of sm.values(schema.allOf)) {\n        this.transformAdditionalProperty(v)\n      }\n    }\n  }\n\n  private ExpandDefinitions() {\n    if (!this.innerSwagger) {\n      throw new Error(\"Null swagger object\")\n    }\n    const swagger = this.innerSwagger as any\n    const definitions = swagger.definitions\n    if (definitions && toArray(sm.keys(definitions)).length > 0) {\n      for (const [property, v] of sm.entries(definitions)) {\n        const references = (v as any).allOf\n        if (!references) {\n          continue\n        }\n        this.ExpandAllOf(v)\n        definitions[property] = v\n      }\n    }\n  }\n\n  /**\n   * @description expands allOf\n   * @param schema\n   */\n  private ExpandAllOf(schema: any) {\n    if (!schema || !schema.allOf) {\n      return\n    }\n    this.checkCircularAllOf(schema, undefined, [])\n    const schemaList = schema.properties ? schema.properties : {}\n    for (const reference of sm.values(schema.allOf)) {\n      let allOfSchema = reference as any\n      if (allOfSchema.$ref) {\n        allOfSchema = this.dereference(allOfSchema.$ref)\n        if (!allOfSchema) {\n          throw new Error(\"Invalid reference:\" + allOfSchema.$ref)\n        }\n      }\n      if (allOfSchema.allOf) {\n        this.ExpandAllOf(allOfSchema)\n      }\n      if (allOfSchema.properties) {\n        sm.keys(allOfSchema.properties).forEach(key => {\n          if (sm.keys(schemaList).some(k => k === key)) {\n            if (!this.isEqual(allOfSchema.properties[key], schemaList[key])) {\n              const allOfProp = allOfSchema.properties[key]\n              const allOfPath = getPath(getInfo(allOfProp) as ObjectInfo)\n              const allOfOriginalPosition = this.map.originalPositionFor(getFilePosition(allOfProp) as FilePosition)\n\n              const schemaListProp = schemaList[key]\n              const schemaListPath = getPath(getInfo(schemaListProp) as ObjectInfo)\n              const schemaListOriginalPosition = this.map.originalPositionFor(getFilePosition(schemaListProp) as FilePosition)\n\n              throw new Error(\n                `incompatible properties : ${key}\\n` +\n                  `  ${schemaListPath.join(\"/\")}\\n` +\n                  `    at ${schemaListOriginalPosition.source}#L${schemaListOriginalPosition.line}:${schemaListOriginalPosition.column}\\n` +\n                  `  ${allOfPath.join(\"/\")}\\n` +\n                  `    at ${allOfOriginalPosition.source}#L${allOfOriginalPosition.line}:${allOfOriginalPosition.column}`\n              )\n            }\n          } else {\n            schemaList[key] = allOfSchema.properties[key]\n          }\n        })\n      }\n      if (allOfSchema.required) {\n        const requiredProperties = schema.required ? schema.required : []\n        sm.values(allOfSchema.required).forEach(prop => {\n          if (!sm.values(requiredProperties).some(v => v === prop)) {\n            requiredProperties.push(prop)\n          }\n        })\n        schema.required = requiredProperties\n      }\n    }\n    schema.properties = schemaList\n  }\n  /**\n   * @description Compare two properties to check if they are equivalent.\n   * @param parentProperty the property in allOf model.\n   * @param unwrappedProperty the property in current model.\n   */\n  private isEqual(parentProperty: any, unwrappedProperty: any): boolean {\n    if (!parentProperty) {\n      throw new Error(\"Null parent property.\")\n    }\n    if (!unwrappedProperty) {\n      throw new Error(\"Null unwrapped property.\")\n    }\n\n    // Note: per https://editor-next.swagger.io/ tooltip when hovering over '$ref',\n    // other properties must be ignored when $ref is present:\n    //\n    //  $ref: string\n    //  Any time a subschema is expected, a schema may instead use an object containing a \"$ref\" property.\n    //  The value of the $ref is a URI Reference. Resolved against the current URI base,\n    //  it identifies the URI of a schema to use.\n    //  All other properties in a \"$ref\" object MUST be ignored.\n    //\n    parentProperty = parentProperty.$ref ? this.dereference(parentProperty.$ref) : parentProperty\n    unwrappedProperty = unwrappedProperty.$ref ? this.dereference(unwrappedProperty.$ref) : unwrappedProperty\n\n    if ((!parentProperty.type || parentProperty.type === \"object\") && (!unwrappedProperty.type || unwrappedProperty.type === \"object\")) {\n      return parentProperty === unwrappedProperty\n    } else if (parentProperty.type === \"array\" && unwrappedProperty.type === \"array\") {\n      return this.isEqual(parentProperty.items, unwrappedProperty.items)\n    } else {\n      return parentProperty.type === unwrappedProperty.type && parentProperty.format === unwrappedProperty.format\n    }\n  }\n\n  private checkCircularAllOf(schema: any, visited: any[] | undefined, referenceChain: string[]) {\n    visited = visited ? visited : []\n    referenceChain = referenceChain ? referenceChain : []\n    if (schema) {\n      if (visited.includes(schema)) {\n        throw new Error(\"Found circular allOf reference: \" + referenceChain.join(\"-> \"))\n      }\n      if (!schema.allOf) {\n        return\n      }\n      visited.push(schema)\n      sm.values(schema.allOf)\n        .filter(s => (s as any).$ref)\n        .forEach(s => {\n          const ref = (s as any).$ref\n          referenceChain.push(ref)\n          const referredSchema = this.dereference(ref)\n          this.checkCircularAllOf(referredSchema, visited, referenceChain)\n          referenceChain.pop()\n        })\n      visited.pop()\n    }\n  }\n\n  /**\n   * Get the definition name from the reference string.\n   * @param ref a json reference\n   */\n  private getModelName(ref: string) {\n    const parts = ref.split(\"/\")\n    if (parts.length === 3 && parts[1] === \"definitions\") {\n      return parts[2]\n    }\n    return undefined\n  }\n\n  private dereferenceInner(ref: string, visitedRefs: Set<string>): any {\n    const model = this.getModelName(ref)\n    if (model) {\n      if (visitedRefs.has(ref)) {\n        throw new Error(\"Circular reference\")\n      }\n      if (visitedRefs.size > 40) {\n        throw new Error(\"Exceeded max(40) reference count.\")\n      }\n      visitedRefs.add(ref)\n      const definitions = (this.innerSwagger as any).definitions\n      if (definitions[model]) {\n        if (definitions[model].$ref) {\n          return this.dereferenceInner(definitions[model].$ref, visitedRefs)\n        } else {\n          return definitions[model]\n        }\n      } else {\n        throw new Error(\"Invalid reference:\" + ref)\n      }\n    }\n  }\n  private dereference(ref: string) {\n    const model = this.getModelName(ref)\n    if (model) {\n      const refSet = new Set<string>()\n      return this.dereferenceInner(ref, refSet)\n    } else {\n      throw new Error(\"Invalid ref: \" + ref)\n    }\n  }\n\n  private stringify(): string {\n    return json.stringify(this.innerSwagger as json.JsonObject)\n  }\n\n  private generateNew() {\n    writeFileSync(this.getResolvedPath(), this.stringify())\n  }\n\n  private parse(url: string, data: string) {\n    try {\n      this.innerSwagger = jsonParser.parse(url, data)\n    } catch (e) {\n      console.log(JSON.stringify(e))\n    }\n  }\n\n  public getSwaggerFolder(): string {\n    return this.file.split(\"/\").slice(0, -1).join(\"/\")\n  }\n\n  public getResolvedPath(): string {\n    return this.file.replace(\".json\", \"-resolved.json\")\n  }\n\n  public getLocation(jsonPath: string): FilePosition | undefined {\n    if (this.innerSwagger) {\n      try {\n        const pointer = pathToJsonPointer(jsonPath)\n        const value = jsonPointer.get(this.innerSwagger as object, pointer)\n        return getFilePosition(value)\n      } catch (e) {\n        console.log(JSON.stringify(e))\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/lib/util/utils.ts",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { execFileSync } from \"child_process\"\nimport * as fs from \"fs\"\nimport * as YAML from \"js-yaml\"\nimport * as jsonPointer from \"json-pointer\"\nimport * as path from \"path\"\nimport * as util from \"util\"\nimport { log } from \"./logging\"\n\n/*\n * Caches the json docs that were successfully parsed by parseJson(). This avoids, fetching them again.\n * key: docPath\n * value: parsed doc in JSON format\n */\nexport let docCache: { [key: string]: unknown } = {}\n\nexport function clearCache() {\n  docCache = {}\n}\n/*\n * Removes byte order marker. This catches EF BB BF (the UTF-8 BOM)\n * because the buffer-to-string conversion in `fs.readFile()`\n * translates it to FEFF, the UTF-16 BOM.\n */\nexport function stripBOM(content: string) {\n  if (Buffer.isBuffer(content)) {\n    content = content.toString()\n  }\n  if (content.charCodeAt(0) === 0xfeff || content.charCodeAt(0) === 0xfffe) {\n    content = content.slice(1)\n  }\n  return content\n}\n\n/*\n * Provides a parsed JSON from the given file path or a url.\n *\n * @param {string} specPath - A local file path or a (github) url to the swagger spec.\n * The method will auto convert a github url to rawgithub url.\n *\n * @returns {object} jsonDoc - Parsed document in JSON format.\n */\nexport async function parseJson(specPath: string) {\n  if (!specPath || (specPath && typeof specPath.valueOf() !== \"string\")) {\n    throw new Error(\"A (github) url or a local file path to the swagger spec is required and must be of type string.\")\n  }\n  if (docCache[specPath]) {\n    return docCache[specPath]\n  }\n  // url\n  if (specPath.match(/^http.*/gi) !== null) {\n    // If the spec path is a url starting with https://github then let us auto convert it to an https://raw.githubusercontent url.\n    if (specPath.startsWith(\"https://github\")) {\n      specPath = specPath.replace(/^https:\\/\\/(github.com)(.*)blob\\/(.*)/gi, \"https://raw.githubusercontent.com$2$3\")\n    }\n    const res = makeRequest({ url: specPath, errorOnNon200Response: true })\n    docCache[specPath] = res\n    return res\n  } else {\n    // local filepath\n    try {\n      const fileContent = stripBOM(fs.readFileSync(specPath, \"utf8\"))\n      const result = parseContent(specPath, fileContent)\n      docCache[specPath] = result\n      return result\n    } catch (err) {\n      log.error(err)\n      return err\n    }\n  }\n}\n\n/*\n * Provides a parsed JSON from the given content.\n *\n * @param {string} filePath - A local file path or a (github) url to the swagger spec.\n *\n * @param {string} fileContent - The content to be parsed.\n *\n * @returns {object} jsonDoc - Parsed document in JSON format.\n */\nexport function parseContent(filePath: string, fileContent: string) {\n  if (/.*\\.json$/gi.test(filePath)) {\n    return JSON.parse(fileContent)\n  } else if (/.*\\.ya?ml$/gi.test(filePath)) {\n    return YAML.load(fileContent)\n  } else {\n    const msg =\n      `We currently support \"*.json\" and \"*.yaml | *.yml\" file formats for validating swaggers.\\n` +\n      `The current file extension in \"${filePath}\" is not supported.`\n    throw new Error(msg)\n  }\n}\n\n/*\n * A utility function to help us acheive stuff in the same way as async/await but with yield statement and generator functions.\n * It waits till the task is over.\n * @param {function} A generator function as an input\n */\nexport function run(genfun: () => any) {\n  // instantiate the generator object\n  const gen = genfun()\n  // This is the async loop pattern\n  function next(err?: unknown, answer?: unknown) {\n    let res\n    if (err) {\n      // if err, throw it into the wormhole\n      return gen.throw(err)\n    } else {\n      // if good value, send it\n      res = gen.next(answer)\n    }\n    if (!res.done) {\n      // if we are not at the end\n      // we have an async request to\n      // fulfill, we do this by calling\n      // `value` as a function\n      // and passing it a callback\n      // that receives err, answer\n      // for which we'll just use `next()`\n      res.value(next)\n    }\n  }\n  // Kick off the async loop\n  next()\n}\n\nexport type Options = {\n  readonly errorOnNon200Response?: unknown\n  readonly url: string\n}\n\n/*\n * Makes a generic request using the built-in fetch API.\n *\n * @param {object} options - The request options\n *\n * @param {string} options.url - The URL to request\n *\n * @param {boolean} options.errorOnNon200Response If true will reject the promise with an error if the response statuscode is not 200.\n *\n * @return {Promise} promise - A promise that resolves to the responseBody or rejects to an error.\n */\nexport async function makeRequest(options: Options) {\n  const response = await fetch(options.url)\n  const responseBody = await response.text()\n\n  // Callers typically use `response.ok` which allows status in the range 200-299, but this code\n  // specifically allowed only response 200 when using `request`, so we preserve the same logic\n  // when using `fetch()`.\n  if (options.errorOnNon200Response && response.status !== 200) {\n    const msg = `StatusCode: \"${response.status}\", ResponseBody: \"${responseBody}.\"`\n    throw new Error(msg)\n  }\n\n  try {\n    return parseContent(options.url, responseBody)\n  } catch (error) {\n    const msg = `An error occurred while parsing the file ${options.url}. The error is:\\n ${util.inspect(error, { depth: null })}.`\n    throw new Error(msg)\n  }\n}\n\n/*\n * Executes an array of promises sequentially. Inspiration of this method is here:\n * https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html. An awesome blog on promises!\n *\n * @param {Array} promiseFactories An array of promise factories(A function that return a promise)\n *\n * @return A chain of resolved or rejected promises\n */\nexport function executePromisesSequentially(promiseFactories: ReadonlyArray<any>) {\n  let result = Promise.resolve()\n  promiseFactories.forEach(function (promiseFactory) {\n    result = result.then(promiseFactory)\n  })\n  return result\n}\n\n/*\n * Generates a randomId\n *\n * @param {string} [prefix] A prefix to which the random numbers will be appended.\n *\n * @param {object} [existingIds] An object of existingIds. The function will\n * ensure that the randomId is not one of the existing ones.\n *\n * @return {string} result A random string\n */\nexport function generateRandomId(prefix: string, existingIds: object) {\n  let randomStr\n  while (true) {\n    randomStr = Math.random().toString(36).substr(2, 12)\n    if (prefix && typeof prefix.valueOf() === \"string\") {\n      randomStr = prefix + randomStr\n    }\n    if (!existingIds || !(randomStr in existingIds)) {\n      break\n    }\n  }\n  return randomStr\n}\n\nexport type References = {\n  localReference?: {\n    readonly value: string\n    readonly accessorProperty: string\n  }\n  filePath?: string\n}\n\n/*\n * Parses a [inline|relative] [model|parameter] reference in the swagger spec.\n * This method does not handle parsing paths \"/subscriptions/{subscriptionId}/etc.\".\n *\n * @param {string} reference Reference to be parsed.\n *\n * @return {object} result\n *         {string} [result.filePath] Filepath present in the reference. Examples are:\n *             - '../newtwork.json#/definitions/Resource' => '../network.json'\n *             - '../examples/nic_create.json' => '../examples/nic_create.json'\n *         {object} [result.localReference] Provides information about the local reference in the json document.\n *         {string} [result.localReference.value] The json reference value. Examples are:\n *           - '../newtwork.json#/definitions/Resource' => '#/definitions/Resource'\n *           - '#/parameters/SubscriptionId' => '#/parameters/SubscriptionId'\n *         {string} [result.localReference.accessorProperty] The json path expression that can be used by\n *         eval() to access the desired object. Examples are:\n *           - '../newtwork.json#/definitions/Resource' => 'definitions.Resource'\n *           - '#/parameters/SubscriptionId' => 'parameters,SubscriptionId'\n */\nexport function parseReferenceInSwagger(reference: string) {\n  if (!reference || (reference && reference.trim().length === 0)) {\n    throw new Error(\"reference cannot be null or undefined and it must be a non-empty string.\")\n  }\n\n  const result: References = {}\n  if (reference.includes(\"#\")) {\n    // local reference in the doc\n    if (reference.startsWith(\"#/\")) {\n      result.localReference = {\n        value: reference,\n        accessorProperty: reference.slice(2).replace(\"/\", \".\")\n      }\n    } else {\n      // filePath+localReference\n      const segments = reference.split(\"#\")\n      result.filePath = segments[0]\n      result.localReference = {\n        value: \"#\" + segments[1],\n        accessorProperty: segments[1].slice(1).replace(\"/\", \".\")\n      }\n    }\n  } else {\n    // we are assuming that the string is a relative filePath\n    result.filePath = reference\n  }\n\n  return result\n}\n\n/*\n * Same as path.join(), however, it converts backward slashes to forward slashes.\n * This is required because path.join() joins the paths and converts all the\n * forward slashes to backward slashes if executed on a windows system. This can\n * be problematic while joining a url. For example:\n * path.join('https://github.com/Azure/openapi-validation-tools/blob/master/lib', '../examples/foo.json') returns\n * 'https:\\\\github.com\\\\Azure\\\\openapi-validation-tools\\\\blob\\\\master\\\\examples\\\\foo.json' instead of\n * 'https://github.com/Azure/openapi-validation-tools/blob/master/examples/foo.json'\n *\n * @param variable number of arguments and all the arguments must be of type string. Similar to the API\n * provided by path.join() https://nodejs.org/dist/latest-v6.x/docs/api/path.html#path_path_join_paths\n * @return {string} resolved path\n */\nexport function joinPath(...args: string[]) {\n  let finalPath = path.join(...args)\n  finalPath = finalPath.replace(/\\\\/gi, \"/\")\n  finalPath = finalPath.replace(/^(http|https):\\/(.*)/gi, \"$1://$2\")\n  return finalPath\n}\n\n/*\n * Provides a parsed JSON from the given file path or a url. Same as parseJson(). However,\n * this method accepts variable number of path segments as strings and joins them together.\n * After joining the path, it internally calls parseJson().\n *\n * @param variable number of arguments and all the arguments must be of type string.\n *\n * @returns {object} jsonDoc - Parsed document in JSON format.\n */\nexport function parseJsonWithPathFragments(...args: string[]) {\n  const specPath = joinPath(...args)\n  return parseJson(specPath)\n}\n\n/*\n * Merges source object into the target object\n * @param {object} source The object that needs to be merged\n *\n * @param {object} target The object to be merged into\n *\n * @returns {object} target - Returns the merged target object.\n */\nexport function mergeObjects(source: { readonly [key: string]: unknown }, target: { [key: string]: unknown }) {\n  Object.keys(source).forEach(function (key) {\n    target[key] = source[key]\n  })\n  return target\n}\n\n/*\n * Gets the object from the given doc based on the provided json reference pointer.\n * It returns undefined if the location is not found in the doc.\n * @param {object} doc The source object.\n *\n * @param {string} ptr The json reference pointer\n *\n * @returns {any} result - Returns the value that the ptr points to, in the doc.\n */\nexport function getObject(doc: object, ptr: string) {\n  let result\n  try {\n    result = jsonPointer.get(doc, ptr)\n  } catch (err) {\n    log.error(err)\n    throw err\n  }\n  return result\n}\n\n/*\n * Sets the given value at the location provided by the ptr in the given doc.\n * @param {object} doc The source object.\n *\n * @param {string} ptr The json reference pointer.\n *\n * @param {any} value The value that needs to be set at the\n * location provided by the ptr in the doc.\n */\nexport function setObject(doc: object, ptr: string, value: unknown) {\n  let result\n  try {\n    result = jsonPointer.set(doc, ptr, value)\n  } catch (err) {\n    log.error(err)\n  }\n  return result\n}\n\n/*\n * Removes the location pointed by the json pointer in the given doc.\n * @param {object} doc The source object.\n *\n * @param {string} ptr The json reference pointer.\n */\nexport function removeObject(doc: object, ptr: string) {\n  let result\n  try {\n    result = jsonPointer.remove(doc, ptr)\n  } catch (err) {\n    log.error(err)\n  }\n  return result\n}\n\n/**\n/*\n * Gets provider namespace from the given path. In case of multiple, last one will be returned.\n * @param {string} path The path of the operation.\n *                 Example \"/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{resourceProviderNamespace}/\n *                 {parentResourcePath}/{resourceType}/{resourceName}/providers/Microsoft.Authorization/roleAssignments\"\n *                 will return \"Microsoft.Authorization\".\n *\n * @returns {string} result - provider namespace from the given path.\n */\nexport function getProvider(path: string) {\n  if (path === null || path === undefined || typeof path.valueOf() !== \"string\" || !path.trim().length) {\n    throw new Error(\"path is a required parameter of type string and it cannot be an empty string.\")\n  }\n\n  const providerRegEx = new RegExp(\"/providers/(:?[^{/]+)\", \"gi\")\n  let result\n  let pathMatch\n\n  // Loop over the paths to find the last matched provider namespace\n  while ((pathMatch = providerRegEx.exec(path)) != null) {\n    result = pathMatch[1]\n  }\n\n  return result\n}\n\n/*\n * Clones a github repository in the given directory.\n * @param {string} github url to be cloned.\n *                 Example \"https://github.com/Azure/azure-rest-api-specs.git\" or\n *                         \"git@github.com:Azure/azure-rest-api-specs.git\".\n *\n * @param {string} path where to clone the repository.\n */\nexport function gitClone(url: string, directory: string) {\n  if (url === null || url === undefined || typeof url.valueOf() !== \"string\" || !url.trim().length) {\n    throw new Error(\"url is a required parameter of type string and it cannot be an empty string.\")\n  }\n\n  if (directory === null || directory === undefined || typeof directory.valueOf() !== \"string\" || !directory.trim().length) {\n    throw new Error(\"directory is a required parameter of type string and it cannot be an empty string.\")\n  }\n\n  // If the directory exists then we assume that the repo to be cloned is already present.\n  if (fs.existsSync(directory)) {\n    if (!fs.lstatSync(directory).isDirectory()) {\n      throw new Error(`\"${directory}\" must be a directory.`)\n    }\n    return\n  } else {\n    fs.mkdirSync(directory)\n  }\n\n  try {\n    const [file, args] = [\"git\", [\"clone\", url, directory]]\n    execFileSync(file, args, { encoding: \"utf8\" })\n  } catch (err) {\n    throw new Error(`An error occurred while cloning git repository: ${util.inspect(err, { depth: null })}.`)\n  }\n}\n\n/*\n * Finds the first content-type that contains \"/json\". Only supported Content-Types are\n * \"text/json\" & \"application/json\" so we perform first best match that contains '/json'\n *\n * @param {array} consumesOrProduces Array of content-types.\n * @returns {string} firstMatchedJson content-type that contains \"/json\".\n */\nexport function getJsonContentType(consumesOrProduces: ReadonlyArray<string>) {\n  let firstMatchedJson = null\n  if (consumesOrProduces) {\n    firstMatchedJson = consumesOrProduces.find(contentType => {\n      return contentType.match(/.*\\/json.*/gi) !== null\n    })\n  }\n  return firstMatchedJson\n}\n\n/**\n * Determines whether the given string is url encoded\n * @param {string} str - The input string to be verified.\n * @returns {boolean} result - true if str is url encoded; false otherwise.\n */\nexport function isUrlEncoded(str: string) {\n  str = str || \"\"\n  return str !== decodeURIComponent(str)\n}\n\nexport type Model = {\n  type?: string | ReadonlyArray<string>\n  readonly properties?: {\n    [key: string]: Model | undefined\n  }\n  readonly required?: ReadonlyArray<unknown>\n  additionalProperties?: {\n    type: ReadonlyArray<string>\n  }\n}\n\n/**\n * Determines whether the given model is a pure (free-form) object candidate (i.e. equivalent of the C# Object type).\n * @param {object} model - The model to be verified\n * @returns {boolean} result - true if model is a pure object; false otherwise.\n */\nexport function isPureObject(model: Model) {\n  if (!model) {\n    throw new Error(`model cannot be null or undefined and must be of type \"object\"`)\n  }\n  if (\n    model.type &&\n    typeof model.type.valueOf() === \"string\" &&\n    model.type === \"object\" &&\n    model.properties &&\n    Object.keys(model.properties).length === 0\n  ) {\n    return true\n  } else if (!model.type && model.properties && Object.keys(model.properties).length === 0) {\n    return true\n  } else if (model.type && typeof model.type.valueOf() === \"string\" && model.type === \"object\" && !model.properties) {\n    return true\n  } else {\n    return false\n  }\n}\n\n/**\n * Relaxes/Transforms the given entities type from a specific JSON schema primitive type (http://json-schema.org/latest/json-schema-core.html#rfc.section.4.2)\n * to an array of JSON schema primitive types (http://json-schema.org/latest/json-schema-validation.html#rfc.section.5.21).\n *\n * @param {object} entity - The entity to be relaxed.\n * @param {boolean|undefined} [isRequired] - A boolean value that indicates whether the entity is required or not.\n * If the entity is required then the primitive type \"null\" is not added.\n * @returns {object} entity - The transformed entity if it is a pure object else the same entity is returned as-is.\n */\nexport function relaxEntityType(entity: Model, isRequired?: boolean) {\n  if (isPureObject(entity)) {\n    entity.type = [\"array\", \"boolean\", \"number\", \"object\", \"string\"]\n    // if (!isRequired) {\n    //   entity.type.push('null')\n    // }\n  }\n  if (entity.additionalProperties && isPureObject(entity.additionalProperties)) {\n    entity.additionalProperties.type = [\"array\", \"boolean\", \"number\", \"object\", \"string\"]\n    // if (!isRequired) {\n    //   entity.additionalProperties.type.push('null')\n    // }\n  }\n  return entity\n}\n\n/**\n * Relaxes/Transforms model definition like entities recursively\n */\nexport function relaxModelLikeEntities(model: Model) {\n  model = relaxEntityType(model)\n  if (model.properties) {\n    const modelProperties = model.properties\n    for (const propName in modelProperties) {\n      const isPropRequired = model.required ? model.required.some(p => p == propName) : false\n      const mp = modelProperties[propName]\n      if (mp) {\n        if (mp.properties) {\n          modelProperties[propName] = relaxModelLikeEntities(mp)\n        } else {\n          modelProperties[propName] = relaxEntityType(mp, isPropRequired)\n        }\n      }\n    }\n  }\n  return model\n}\n\n/**\n * @param jsonPath e.g paths['test!'].get.response\n * @returns jsonPointer  /paths/test!/get/response\n * for more details about jsonPointer,see https://tools.ietf.org/html/rfc6901\n */\n\nexport function pathToJsonPointer(jsonPath: string): string {\n  const replaceAllReg = (src: string): RegExp => {\n    return new RegExp(src, \"g\")\n  }\n  let result: string = jsonPath.replace(replaceAllReg(\"~\"), \"~0\").replace(replaceAllReg(\"/\"), \"~1\").replace(replaceAllReg(\"\\\\.\"), \"/\")\n\n  // match subpath with special character which be surround by ' e.g. paths['~0test~1'] , and replace it to path/~0test~1\n  let regex = /(\\[\\'.+\\'\\])/g\n  let matchs = result.match(regex)\n  if (matchs) {\n    matchs.forEach(m => {\n      result = result.replace(\n        m,\n        m\n          .replace(replaceAllReg(\"/\"), \".\") // the `.` in [] was replaced by / first , here replace it back\n          .replace(/^\\[\\'/gi, \"/\")\n          .replace(/\\'\\]$/gi, \"\")\n      )\n    })\n  }\n\n  // match the array index e.g. path[0] and replace it to path/0\n  regex = /(\\[\\d+\\])/g\n  matchs = result.match(regex)\n  if (matchs) {\n    matchs.forEach((m: string) => {\n      result = result.replace(m, m.replace(/(\\[)/gi, \"/\").replace(/\\]$/gi, \"\"))\n    })\n  }\n\n  return !result ? \"\" : \"/\" + result\n}\n"
  },
  {
    "path": "src/lib/validate.ts",
    "content": "// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport { log } from \"./util/logging\"\nimport { Options, OpenApiDiff } from \"./validators/openApiDiff\"\n\n/**\n * Wrapper method to compares old and new specifications.\n *\n * @param {string} oldSwagger Path to the old specification file.\n *\n * @param {string} newSwagger Path to the new specification file.\n *\n * @param {object} options The configuration options.\n *\n * @param {boolean} [options.json] A boolean flag indicating whether output format of the messages is json.\n *\n * @param {boolean} [options.matchApiVersion] A boolean flag indicating whether to consider api-version while comparing.\n *\n */\nexport function compare(oldSwagger: string, newSwagger: string, options: Options) {\n  if (!options) {\n    options = {}\n  }\n\n  log.consoleLogLevel = options.consoleLogLevel || log.consoleLogLevel\n  log.filepath = options.logFilepath || log.filepath\n  const openApiDiff = new OpenApiDiff(options)\n\n  return openApiDiff.compare(oldSwagger, newSwagger)\n}\n\n/**\n * Wrapper method to compares old and new specifications.\n *\n * @param {string} oldSwagger Path to the old specification file.\n *\n * @param {string} oldTag Tag name used for autorest with the old specification file.\n *\n * @param {string} newSwagger Path to the new specification file.\n *\n * @param {string} newTagName Tag name used for autorest with the new specification file.\n *\n * @param {object} options The configuration options.\n *\n * @param {boolean} [options.json] A boolean flag indicating whether output format of the messages is json.\n *\n * @param {boolean} [options.matchApiVersion] A boolean flag indicating whether to consider api-version while comparing.\n *\n */\nexport function compareTags(oldSwagger: string, oldTag: string, newSwagger: string, newTag: string, options: Options) {\n  if (!options) {\n    options = {}\n  }\n\n  log.consoleLogLevel = options.consoleLogLevel || log.consoleLogLevel\n  log.filepath = options.logFilepath || log.filepath\n  const openApiDiff = new OpenApiDiff(options)\n\n  return openApiDiff.compare(oldSwagger, newSwagger, oldTag, newTag)\n}\n"
  },
  {
    "path": "src/lib/validators/openApiDiff.ts",
    "content": "﻿// Copyright (c) Microsoft Corporation. All rights reserved.\n// Licensed under the MIT License. See License.txt in the project root for license information.\n\nimport * as asyncFs from \"@ts-common/fs\"\nimport { getFilePosition } from \"@ts-common/source-map\"\nimport * as child_process from \"child_process\"\nimport * as fs from \"fs\"\nimport JSON_Pointer from \"json-pointer\"\nimport * as jsonRefs from \"json-refs\"\nimport * as os from \"os\"\nimport * as path from \"path\"\nimport * as sourceMap from \"source-map\"\nimport * as util from \"util\"\nimport { log } from \"../util/logging\"\nimport { ResolveSwagger } from \"../util/resolveSwagger\"\nimport { pathToJsonPointer } from \"../util/utils\"\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst _ = require(\"lodash\")\n\nconst execFile = util.promisify(child_process.execFile)\n\nexport type Options = {\n  readonly consoleLogLevel?: unknown\n  readonly logFilepath?: unknown\n}\n\nexport type ProcessedFile = {\n  readonly fileName: string\n  readonly map: sourceMap.BasicSourceMapConsumer | sourceMap.IndexedSourceMapConsumer\n  readonly resolvedFileName: string\n  readonly resolvedJson: any\n}\n\nexport type ChangeProperties = {\n  readonly location?: string\n  readonly path?: string\n  readonly ref?: string\n}\n\nexport type Message = {\n  readonly id: string\n  readonly code: string\n  readonly docUrl: string\n  readonly message: string\n  readonly mode: string\n  readonly type: string\n  readonly new: ChangeProperties\n  readonly old: ChangeProperties\n}\n\nexport type Messages = ReadonlyArray<Message>\n\nconst updateChangeProperties = (change: ChangeProperties, pf: ProcessedFile): ChangeProperties => {\n  if (change.location) {\n    let position\n    let jsonPointer\n    if (change.path != undefined) {\n      try {\n        jsonPointer = pathToJsonPointer(change.path)\n        const jsonValue = JSON_Pointer.get(pf.resolvedJson, jsonPointer)\n        position = getFilePosition(jsonValue)\n      } catch (e) {\n        console.log(e)\n      }\n    }\n\n    if (!position || !Object.keys(position).length) {\n      return { ...change, ref: \"\", location: \"\" }\n    }\n    const originalPosition = pf.map.originalPositionFor(position)\n    if (!originalPosition || !Object.keys(originalPosition).length) {\n      return { ...change, ref: \"\", location: \"\" }\n    }\n    const name = originalPosition.name as string\n    const namePath = name ? name.split(\"\\n\")[0] : \"\"\n    const parsedPath = namePath ? (JSON.parse(namePath) as string[]) : \"\"\n    const ref = parsedPath ? `${originalPosition.source}${jsonRefs.pathToPtr(parsedPath, true)}` : \"\"\n    const location = `${originalPosition.source}:${originalPosition.line}:${(originalPosition.column as number) + 1}`\n    return { ...change, ref, location }\n  } else {\n    return {}\n  }\n}\n\n/**\n * @class\n * Open API Diff class.\n */\nexport class OpenApiDiff {\n  /**\n   * Constructs OpenApiDiff based on provided options.\n   *\n   * @param {object} options The configuration options.\n   *\n   * @param {boolean} [options.json] A boolean flag indicating whether output format of the messages is json.\n   *\n   * @param {boolean} [options.matchApiVersion] A boolean flag indicating whether to consider api-version while comparing.\n   */\n  constructor(private options: Options) {\n    log.silly(`Initializing OpenApiDiff class`)\n\n    if (this.options === null || this.options === undefined) {\n      this.options = {}\n    }\n    if (typeof this.options !== \"object\") {\n      throw new Error('options must be of type \"object\".')\n    }\n\n    log.debug(`Initialized OpenApiDiff class with options = ${util.inspect(this.options, { depth: null })}`)\n  }\n\n  /**\n   * Compares old and new specifications.\n   *\n   * @param {string} oldSwagger Path to the old specification file.\n   *\n   * @param {string} newSwagger Path to the new specification file.\n   *\n   * @param {string} oldTag Tag name used for AutoRest with the old specification file.\n   *\n   * @param {string} newTag Tag name used for AutoRest with the new specification file.\n   *\n   */\n  public async compare(oldSwagger: string, newSwagger: string, oldTag?: string, newTag?: string) {\n    log.silly(`compare is being called`)\n    const results = []\n    results[0] = await this.processViaAutoRest(oldSwagger, \"old\", oldTag)\n    results[1] = await this.processViaAutoRest(newSwagger, \"new\", newTag)\n    return this.processViaOpenApiDiff(results[0], results[1])\n  }\n\n  /**\n   * Gets path to the dotnet executable.\n   *\n   * @returns {string} Path to the dotnet executable.\n   */\n  public dotNetPath(): string {\n    log.silly(`dotNetPath is being called`)\n\n    // Assume that dotnet is in the PATH\n    return \"dotnet\"\n  }\n\n  /**\n   * Gets file and args to the autorest application.\n   *\n   * @returns {{ file: string; args: string[] }} File and args to the autorest app.js file.\n   */\n  public autoRestFileArgs(): { file: string; args: string[] } {\n    log.silly(`autoRestFileArgs is being called`)\n\n    // When oad is installed globally\n    {\n      const result = path.join(__dirname, \"..\", \"..\", \"..\", \"node_modules\", \"autorest\", \"dist\", \"app.js\")\n      if (fs.existsSync(result)) {\n        log.silly(`Found autoRest:${result} `)\n        return { file: \"node\", args: [result] }\n      }\n    }\n\n    // When oad is installed locally\n    {\n      const result = path.join(__dirname, \"..\", \"..\", \"..\", \"..\", \"..\", \"autorest\", \"dist\", \"app.js\")\n      if (fs.existsSync(result)) {\n        log.silly(`Found autoRest:${result} `)\n        return { file: \"node\", args: [result] }\n      }\n    }\n\n    // Try to find autorest in `node-modules`\n    {\n      const result = path.resolve(\"node_modules/.bin/autorest\")\n      if (fs.existsSync(result)) {\n        log.silly(`Found autoRest:${result} `)\n        return { file: result, args: [] }\n      }\n    }\n\n    // Assume that autorest is in the path\n    return { file: \"autorest\", args: [] }\n  }\n\n  /**\n   * Gets path to the OpenApiDiff.dll.\n   *\n   * @returns {string} Path to the OpenApiDiff.dll.\n   */\n  public openApiDiffDllPath(): string {\n    log.silly(`openApiDiffDllPath is being called`)\n\n    return path.join(__dirname, \"..\", \"..\", \"..\", \"dlls\", \"OpenApiDiff.dll\")\n  }\n\n  /**\n   * Processes the provided specification via autorest.\n   *\n   * @param {string} swaggerPath Path to the specification file.\n   *\n   * @param {string} outputFileName Name of the output file to which autorest outputs swagger-doc.\n   *\n   * @param {string} tagName Name of the tag in the specification file.\n   *\n   */\n  public async processViaAutoRest(swaggerPath: string, outputFileName: string, tagName?: string): Promise<ProcessedFile> {\n    log.silly(`processViaAutoRest is being called`)\n\n    if (swaggerPath === null || swaggerPath === undefined || typeof swaggerPath.valueOf() !== \"string\" || !swaggerPath.trim().length) {\n      throw new Error('swaggerPath is a required parameter of type \"string\" and it cannot be an empty string.')\n    }\n\n    if (\n      outputFileName === null ||\n      outputFileName === undefined ||\n      typeof outputFileName.valueOf() !== \"string\" ||\n      !outputFileName.trim().length\n    ) {\n      throw new Error('outputFile is a required parameter of type \"string\" and it cannot be an empty string.')\n    }\n\n    log.debug(`swaggerPath = \"${swaggerPath}\"`)\n    log.debug(`outputFileName = \"${outputFileName}\"`)\n\n    if (!fs.existsSync(swaggerPath)) {\n      throw new Error(`File \"${swaggerPath}\" not found.`)\n    }\n\n    const outputFolder = await fs.promises.mkdtemp(path.join(os.tmpdir(), \"oad-\"))\n    const outputFilePath = path.join(outputFolder, `${outputFileName}.json`)\n    const outputMapFilePath = path.join(outputFolder, `${outputFileName}.map`)\n\n    const { file: autoRestFile, args: autoRestArgs } = this.autoRestFileArgs()\n\n    const swaggerArgs = tagName ? [swaggerPath, `--tag=${tagName}`] : [`--input-file=${swaggerPath}`]\n\n    const commonArgs = [\n      \"--v2\",\n      \"--output-artifact=swagger-document.json\",\n      \"--output-artifact=swagger-document.map\",\n      `--output-file=${outputFileName}`,\n      `--output-folder=${outputFolder}`\n    ]\n\n    const args = [...autoRestArgs, ...swaggerArgs, ...commonArgs]\n\n    log.debug(`Executing: \"${autoRestFile} ${args.join(\" \")}\"`)\n\n    const { stderr } = await execFile(autoRestFile, args, {\n      encoding: \"utf8\",\n      maxBuffer: 1024 * 1024 * 64,\n      env: { ...process.env, NODE_OPTIONS: \"--max-old-space-size=8192\" }\n    })\n    if (stderr) {\n      // autorest 3.8.0 emits deprecation message to stderr with exit code 0\n      log.debug(`AutoRest completed with warnings on stderr: ${stderr}`)\n    }\n\n    const buffer = await asyncFs.readFile(outputMapFilePath)\n    const map = await new sourceMap.SourceMapConsumer(buffer.toString())\n\n    const resolveSwagger = new ResolveSwagger(outputFilePath, map)\n    const resolvedJson = resolveSwagger.resolve()\n    const resolvedPath: string = resolveSwagger.getResolvedPath()\n    if (!resolvedJson) {\n      throw new Error(\"resolve failed!\")\n    }\n\n    log.debug(`outputFilePath: \"${outputFilePath}\"`)\n    return {\n      fileName: outputFilePath,\n      map,\n      resolvedFileName: resolvedPath,\n      resolvedJson\n    }\n  }\n\n  /**\n   * Processes the provided specifications via OpenApiDiff tool.\n   *\n   * @param {string} oldSwagger Path to the old specification file.\n   *\n   * @param {string} newSwagger Path to the new specification file.\n   *\n   */\n  public async processViaOpenApiDiff(oldSwaggerFile: ProcessedFile, newSwaggerFile: ProcessedFile) {\n    log.silly(`processViaOpenApiDiff is being called`)\n\n    const oldSwagger = oldSwaggerFile.resolvedFileName\n    const newSwagger = newSwaggerFile.resolvedFileName\n    if (oldSwagger === null || oldSwagger === undefined || typeof oldSwagger.valueOf() !== \"string\" || !oldSwagger.trim().length) {\n      throw new Error('oldSwagger is a required parameter of type \"string\" and it cannot be an empty string.')\n    }\n\n    if (newSwagger === null || newSwagger === undefined || typeof newSwagger.valueOf() !== \"string\" || !newSwagger.trim().length) {\n      throw new Error('newSwagger is a required parameter of type \"string\" and it cannot be an empty string.')\n    }\n\n    log.debug(`oldSwagger = \"${oldSwagger}\"`)\n    log.debug(`newSwagger = \"${newSwagger}\"`)\n\n    if (!fs.existsSync(oldSwagger)) {\n      throw new Error(`File \"${oldSwagger}\" not found.`)\n    }\n\n    if (!fs.existsSync(newSwagger)) {\n      throw new Error(`File \"${newSwagger}\" not found.`)\n    }\n\n    const file = this.dotNetPath()\n    const args = [this.openApiDiffDllPath(), \"-o\", oldSwagger, \"-n\", newSwagger]\n\n    log.debug(`Executing: \"${file} ${args.join(\" \")}\"`)\n    const { stdout } = await execFile(file, args, { encoding: \"utf8\", maxBuffer: 1024 * 1024 * 64 })\n    const resultJson = JSON.parse(stdout) as Messages\n\n    const updatedJson = resultJson.map(message => ({\n      ...message,\n      new: updateChangeProperties(message.new, newSwaggerFile),\n      old: updateChangeProperties(message.old, oldSwaggerFile)\n    }))\n    const uniqueJson = _.uniqWith(updatedJson, _.isEqual)\n    return JSON.stringify(uniqueJson)\n  }\n}\n"
  },
  {
    "path": "src/test/additionalPropertiesIsBooleanTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"Additional Properties is boolean\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/additional-properties/old.json\"\n  const newFile = \"src/test/specs/additional-properties/new.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      id: \"1001\",\n      code: \"NoVersionChange\",\n      message: \"The versions have not changed.\",\n      old: {\n        ref: `${oldFilePath}#`,\n        path: \"\",\n        location: `${oldFilePath}:1:1`\n      },\n      new: {\n        ref: `${newFilePath}#`,\n        path: \"\",\n        location: `${newFilePath}:1:1`\n      },\n      type: \"Info\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      mode: \"Update\"\n    },\n    {\n      code: \"AddedAdditionalProperties\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1021.md\",\n      id: \"1021\",\n      message: \"The new version adds an 'additionalProperties' element.\",\n      mode: \"Addition\",\n      new: {\n        location: ``,\n        path: \"paths['/api/Operations'].get.parameters\",\n        ref: ``\n      },\n      old: {},\n      type: \"Error\"\n    },\n    {\n      code: \"AddedAdditionalProperties\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1021.md\",\n      id: \"1021\",\n      message: \"The new version adds an 'additionalProperties' element.\",\n      mode: \"Addition\",\n      new: {\n        location: `${newFilePath}:16:7`,\n        path: \"parameters.P2.schema\",\n        ref: `${newFilePath}#/parameters/P2/schema`\n      },\n      old: {\n        location: `${oldFilePath}:16:7`,\n        path: \"parameters.P2.schema\",\n        ref: `${oldFilePath}#/parameters/P2/schema`\n      },\n      type: \"Error\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/commonParametersTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"common-parameters\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/common-parameters/old.json\"\n  const newFile = \"src/test/specs/common-parameters/new.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${newFilePath}#`,\n        location: `${newFilePath}:1:1`,\n        path: \"\"\n      },\n      old: {\n        ref: `${oldFilePath}#`,\n        location: `${oldFilePath}:1:1`,\n        path: \"\"\n      },\n      type: \"Info\"\n    },\n    {\n      code: \"RemovedOptionalParameter\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1046.md\",\n      id: \"1046\",\n      message: \"The optional parameter 'p1' was removed in the new version.\",\n      mode: \"Removal\",\n      new: {},\n      old: {\n        location: \"\",\n        path: \"paths['/api/Operations'].get.parameters\",\n        ref: \"\"\n      },\n      type: \"Error\"\n    },\n    {\n      code: \"AddingOptionalParameter\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1043.md\",\n      id: \"1043\",\n      message: \"The optional parameter 'p2' was added in the new version.\",\n      mode: \"Addition\",\n      new: {\n        location: \"\",\n        path: \"paths['/api/Operations'].get.parameters\",\n        ref: \"\"\n      },\n      old: {},\n      type: \"Error\"\n    },\n    {\n      code: \"RemovedClientParameter\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1007.md\",\n      id: \"1007\",\n      message: \"The new version is missing a client parameter that was found in the old version. Was 'P1' removed or renamed?\",\n      mode: \"Removal\",\n      new: {\n        location: `${newFilePath}:7:3`,\n        path: \"parameters\",\n        ref: `${newFilePath}#/parameters`\n      },\n      old: {\n        location: `${oldFilePath}:7:3`,\n        path: \"parameters\",\n        ref: `${oldFilePath}#/parameters`\n      },\n      type: \"Error\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/compatiblePropertiesTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\n// This test is part of regression test suite for https://github.com/Azure/azure-sdk-tools/issues/5981\n// Given a property with given type and name\n// When another property with the same name and compatible type is referenced\n// Then no issue is reported, as this is a valid scenario\n//\n// Also ensures that $ref are resolved when determining if types are compatible.\n// For example, these should be compatible:\n// 1. \"bar\": { \"type\":\"string\" }\n// 2. \"bar\": { \"$ref\":\"#/definitions/MyString\" }, \"MyString\": { \"type\": \"string\" }\ntest(\"compatible-properties\", async () => {\n  const diff = new OpenApiDiff({})\n  const file = \"src/test/specs/compatible-properties.json\"\n  const resultStr = await diff.compare(file, file)\n  const result = JSON.parse(resultStr)\n  const filePath = fileUrl(path.resolve(file))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${filePath}#`,\n        path: \"\",\n        location: `${filePath}:1:1`\n      },\n      old: {\n        ref: `${filePath}#`,\n        path: \"\",\n        location: `${filePath}:1:1`\n      },\n      type: \"Info\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/expandsAllOfFullCoversTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"expands allOf full covers\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/expandsAllOf/old/property_format_change.json\"\n  const newFile = \"src/test/specs/expandsAllOf/new/property_format_change.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      id: \"1001\",\n      code: \"NoVersionChange\",\n      message: \"The versions have not changed.\",\n      old: {\n        ref: `${oldFilePath}#`,\n        path: \"\",\n        location: `${oldFilePath}:1:1`\n      },\n      new: {\n        ref: `${newFilePath}#`,\n        path: \"\",\n        location: `${newFilePath}:1:1`\n      },\n      type: \"Info\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      mode: \"Update\"\n    },\n    {\n      id: \"1032\",\n      code: \"DifferentAllOf\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      old: {\n        ref: `${oldFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${oldFilePath}:22:13`\n      },\n      new: {\n        ref: `${newFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${newFilePath}:22:13`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      mode: \"Update\"\n    },\n    {\n      code: \"RequiredStatusChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1025.md\",\n      id: \"1025\",\n      message: \"The 'required' status changed from the old version('False') to the new version('True').\",\n      mode: \"Update\",\n      new: {\n        location: `${newFilePath}:35:7`,\n        path: \"definitions.Database.properties\",\n        ref: `${newFilePath}#/definitions/Database/properties`\n      },\n      old: {\n        location: `${oldFilePath}:35:7`,\n        path: \"definitions.Database.properties\",\n        ref: `${oldFilePath}#/definitions/Database/properties`\n      },\n      type: \"Error\"\n    },\n    {\n      id: \"1026\",\n      code: \"TypeChanged\",\n      message: \"The new version has a different type 'string' than the previous one 'integer'.\",\n      old: {\n        ref: `${oldFilePath}#/definitions/DataBaseProperties/properties/b`,\n        path: \"definitions.Database.properties.b\",\n        location: `${oldFilePath}:47:9`\n      },\n      new: {\n        ref: `${newFilePath}#/definitions/Database/properties/b`,\n        path: \"definitions.Database.properties.b\",\n        location: `${newFilePath}:41:9`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1026.md\",\n      mode: \"Update\"\n    },\n    {\n      id: \"1023\",\n      code: \"TypeFormatChanged\",\n      message: \"The new version has a different format '' than the previous one 'int32'.\",\n      old: {\n        ref: `${oldFilePath}#/definitions/DataBaseProperties/properties/b`,\n        path: \"definitions.Database.properties.b\",\n        location: `${oldFilePath}:47:9`\n      },\n      new: {\n        ref: `${newFilePath}#/definitions/Database/properties/b`,\n        path: \"definitions.Database.properties.b\",\n        location: `${newFilePath}:41:9`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1023.md\",\n      mode: \"Update\"\n    },\n    {\n      id: \"1034\",\n      code: \"AddedRequiredProperty\",\n      message:\n        \"The new version lists new non-read-only properties as required: 'a'. These properties were not listed as required in the old version.\",\n      old: {\n        ref: `${oldFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${oldFilePath}:22:13`\n      },\n      new: {\n        ref: `${newFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${newFilePath}:22:13`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1034.md\",\n      mode: \"Addition\"\n    },\n    {\n      code: \"DifferentAllOf\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      id: \"1032\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      mode: \"Update\",\n      new: {\n        location: `${newFilePath}:34:5`,\n        path: \"definitions.Database\",\n        ref: `${newFilePath}#/definitions/Database`\n      },\n      old: {\n        location: `${oldFilePath}:34:5`,\n        path: \"definitions.Database\",\n        ref: `${oldFilePath}#/definitions/Database`\n      },\n      type: \"Error\"\n    },\n    {\n      id: \"1034\",\n      code: \"AddedRequiredProperty\",\n      message:\n        \"The new version lists new non-read-only properties as required: 'a'. These properties were not listed as required in the old version.\",\n      old: {\n        ref: `${oldFilePath}#/definitions/Database`,\n        path: \"definitions.Database\",\n        location: `${oldFilePath}:34:5`\n      },\n      new: {\n        ref: `${newFilePath}#/definitions/Database`,\n        path: \"definitions.Database\",\n        location: `${newFilePath}:34:5`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1034.md\",\n      mode: \"Addition\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/expandsAllOfModelsTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"expands allOf Models\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/expandsAllOf/old/expand_allOf_model.json\"\n  const newFile = \"src/test/specs/expandsAllOf/new/expand_allOf_model.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      id: \"1001\",\n      code: \"NoVersionChange\",\n      message: \"The versions have not changed.\",\n      old: {\n        ref: `${oldFilePath}#`,\n        path: \"\",\n        location: `${oldFilePath}:1:1`\n      },\n      new: {\n        ref: `${newFilePath}#`,\n        path: \"\",\n        location: `${newFilePath}:1:1`\n      },\n      type: \"Info\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      mode: \"Update\"\n    },\n    {\n      id: \"1032\",\n      code: \"DifferentAllOf\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      old: {\n        ref: `${oldFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${oldFilePath}:24:13`\n      },\n      new: {\n        ref: `${newFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${newFilePath}:24:13`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      mode: \"Update\"\n    },\n    {\n      code: \"DifferentAllOf\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      id: \"1032\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      mode: \"Update\",\n      new: {\n        location: `${newFilePath}:36:5`,\n        path: \"definitions.Database\",\n        ref: `${newFilePath}#/definitions/Database`\n      },\n      old: {\n        location: `${oldFilePath}:36:5`,\n        path: \"definitions.Database\",\n        ref: `${oldFilePath}#/definitions/Database`\n      },\n      type: \"Error\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/fileUrl.ts",
    "content": "export const fileUrl = (absPath: string) => {\n  return \"file:///\" + absPath.replace(/^\\//, \"\").split(\"\\\\\").join(\"/\")\n}\n"
  },
  {
    "path": "src/test/full2ReversedTest.ts",
    "content": "import * as assert from \"assert\"\nimport { Messages, OpenApiDiff } from \"..\"\n\ntest(\"full2 reversed\", async () => {\n  const source = {\n    url: \"src/test/specs/full2/target/readme.md\",\n    tag: \"package-compute-2018-04\"\n  }\n\n  const target = {\n    url: \"src/test/specs/full2/source/readme.md\",\n    tag: \"package-compute-only-2017-12\"\n  }\n\n  const diff = new OpenApiDiff({})\n  const resultStr = await diff.compare(source.url, target.url, source.tag, target.tag)\n  const result: Messages = JSON.parse(resultStr)\n  for (const v of result) {\n    assert.deepStrictEqual(v.old.location !== undefined || v.new.location !== undefined, true)\n  }\n})\n"
  },
  {
    "path": "src/test/full2Test.ts",
    "content": "import * as assert from \"assert\"\nimport { Messages, OpenApiDiff } from \"..\"\n\ntest(\"full2\", async () => {\n  const source = {\n    url: \"src/test/specs/full2/source/readme.md\",\n    tag: \"package-compute-only-2017-12\"\n  }\n\n  const target = {\n    url: \"src/test/specs/full2/target/readme.md\",\n    tag: \"package-compute-2018-04\"\n  }\n\n  const diff = new OpenApiDiff({})\n  const resultStr = await diff.compare(source.url, target.url, source.tag, target.tag)\n  const result: Messages = JSON.parse(resultStr)\n  for (const v of result) {\n    assert.deepStrictEqual(v.old.location !== undefined || v.new.location !== undefined, true)\n  }\n})\n"
  },
  {
    "path": "src/test/fullReversedTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"full reversed\", async () => {\n  const oldFile = \"src/test/specs/full/new/readme.md\"\n  const newFile = \"src/test/specs/full/old/readme.md\"\n  const diff = new OpenApiDiff({})\n  const resultStr = await diff.compare(oldFile, newFile, \"2019\", \"2019\")\n  const result = JSON.parse(resultStr)\n  const oldFilePath = fileUrl(path.resolve(\"src/test/specs/full/new/openapi.json\"))\n  const oldFilePath2 = fileUrl(path.resolve(\"src/test/specs/full/new/openapi2.json\"))\n  const newFilePath = fileUrl(path.resolve(\"src/test/specs/full/old/openapi.json\"))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${newFilePath}#`,\n        location: `${newFilePath}:1:1`,\n        path: \"\"\n      },\n      old: {\n        ref: `${oldFilePath}#`,\n        location: `${oldFilePath}:1:1`,\n        path: \"\"\n      },\n      type: \"Info\"\n    },\n    {\n      code: \"RemovedPath\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1005.md\",\n      id: \"1005\",\n      message: \"The new version is missing a path that was found in the old version. Was path '/x' removed or restructured?\",\n      mode: \"Removal\",\n      old: {\n        location: `${oldFilePath2}:8:5`,\n        path: \"paths['/x']\",\n        ref: `${oldFilePath2}#/paths/~1x`\n      },\n      new: {},\n      type: \"Error\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/fullTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"full\", async () => {\n  const oldFile = \"src/test/specs/full/old/readme.md\"\n  const newFile = \"src/test/specs/full/new/readme.md\"\n  const diff = new OpenApiDiff({})\n  const resultStr = await diff.compare(oldFile, newFile, \"2019\", \"2019\")\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(\"src/test/specs/full/new/openapi.json\").replace(/^\\//, \"\"))\n  const newFilePath2 = fileUrl(path.resolve(\"src/test/specs/full/new/openapi2.json\"))\n  const oldFilePath = fileUrl(path.resolve(\"src/test/specs/full/old/openapi.json\"))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${newFilePath}#`,\n        location: `${newFilePath}:1:1`,\n        path: \"\"\n      },\n      old: {\n        ref: `${oldFilePath}#`,\n        location: `${oldFilePath}:1:1`,\n        path: \"\"\n      },\n      type: \"Info\"\n    },\n    {\n      code: \"AddedPath\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1038.md\",\n      id: \"1038\",\n      message: \"The new version is adding a path that was not found in the old version.\",\n      mode: \"Addition\",\n      new: {\n        location: `${newFilePath2}:8:5`,\n        path: \"paths['/x']\",\n        ref: `${newFilePath2}#/paths/~1x`\n      },\n      old: {},\n      type: \"Info\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/incompatiblePropertiesTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\n// This test is part of regression test suite for https://github.com/Azure/azure-sdk-tools/issues/5981\n// Given a property with given type and name\n// When another property with the same name but an incompatible type is referenced\n// Then an issue is reported, with output providing the exact source file locations of both of the occurrences of the property.\n//\n// Also ensures that $ref are resolved when determining if types are compatible.\n// For example, these should be incompatible:\n// 1. \"bar\": { \"type\":\"string\" }\n// 2. \"bar\": { \"$ref\":\"#/definitions/MyObject\" }, \"MyObject\": { \"type\": \"object\" }\ntest.each([\"string-object\", \"string-refobject\", \"refstring-object\", \"refstring-refobject\"])(\"incompatible-properties-%s\", async prop => {\n  const diff = new OpenApiDiff({})\n  const file = `src/test/specs/incompatible-properties/${prop}.json`\n  const filePath = fileUrl(path.resolve(file))\n\n  try {\n    await diff.compare(file, file)\n    assert.fail(\"expected diff.compare() to throw\")\n  } catch (error) {\n    const e = error as Error\n    assert.equal(\n      e.message,\n      `incompatible properties : ${prop}\\n` +\n        `  definitions/Foo/properties/${prop}\\n` +\n        `    at ${filePath}#L12:8\\n` +\n        `  definitions/Foo2/properties/${prop}\\n` +\n        `    at ${filePath}#L25:8`\n    )\n  }\n})\n\n// test(\"incompatible-properties-string-refobject\", async () => {\n//   const diff = new OpenApiDiff({})\n//   const file = \"src/test/specs/incompatible-properties/string-refobject.json\"\n//   const filePath = fileUrl(path.resolve(file))\n\n//   try {\n//     await diff.compare(file, file)\n//     assert.fail(\"expected diff.compare() to throw\")\n//   } catch (error) {\n//     const e = error as Error\n//     assert.equal(\n//       e.message,\n//       \"incompatible properties : string-refobject\\n\" +\n//         \"  definitions/Foo/properties/string-refobject\\n\" +\n//         `    at ${filePath}#L12:8\\n` +\n//         \"  definitions/Foo2/properties/string-refobject\\n\" +\n//         `    at ${filePath}#L25:8`\n//     )\n//   }\n// })\n\n// test(\"incompatible-properties-refstring-object\", async () => {\n//   const diff = new OpenApiDiff({})\n//   const file = \"src/test/specs/incompatible-properties/string-refobject.json\"\n//   const filePath = fileUrl(path.resolve(file))\n\n//   try {\n//     await diff.compare(file, file)\n//     assert.fail(\"expected diff.compare() to throw\")\n//   } catch (error) {\n//     const e = error as Error\n//     assert.equal(\n//       e.message,\n//       \"incompatible properties : refstring-object\\n\" +\n//         \"  definitions/Foo/properties/refstring-object\\n\" +\n//         `    at ${filePath}#L12:8\\n` +\n//         \"  definitions/Foo2/properties/refstring-object\\n\" +\n//         `    at ${filePath}#L25:8`\n//     )\n//   }\n// })\n\n// test(\"incompatible-properties-refstring-refobject\", async () => {\n//   const diff = new OpenApiDiff({})\n//   const file = \"src/test/specs/incompatible-properties/refstring-refobject.json\"\n//   const filePath = fileUrl(path.resolve(file))\n\n//   try {\n//     await diff.compare(file, file)\n//     assert.fail(\"expected diff.compare() to throw\")\n//   } catch (error) {\n//     const e = error as Error\n//     assert.equal(\n//       e.message,\n//       \"incompatible properties : refstring-refobject\\n\" +\n//         \"  definitions/Foo/properties/refstring-refobject\\n\" +\n//         `    at ${filePath}#L12:8\\n` +\n//         \"  definitions/Foo2/properties/refstring-refobject\\n\" +\n//         `    at ${filePath}#L25:8`\n//     )\n//   }\n// })\n"
  },
  {
    "path": "src/test/moveIntoAllOfModelsTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"Move into allOf Models\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/expandsAllOf/old/move_properties_into_allof_model.json\"\n  const newFile = \"src/test/specs/expandsAllOf/new/move_properties_into_allof_model.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      id: \"1001\",\n      code: \"NoVersionChange\",\n      message: \"The versions have not changed.\",\n      old: {\n        ref: `${oldFilePath}#`,\n        path: \"\",\n        location: `${oldFilePath}:1:1`\n      },\n      new: {\n        ref: `${newFilePath}#`,\n        path: \"\",\n        location: `${newFilePath}:1:1`\n      },\n      type: \"Info\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      mode: \"Update\"\n    },\n    {\n      id: \"1032\",\n      code: \"DifferentAllOf\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      old: {\n        ref: `${oldFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${oldFilePath}:24:13`\n      },\n      new: {\n        ref: `${newFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${newFilePath}:24:13`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      mode: \"Update\"\n    },\n    {\n      code: \"DifferentAllOf\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      id: \"1032\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      mode: \"Update\",\n      new: {\n        location: `${newFilePath}:36:5`,\n        path: \"definitions.Database\",\n        ref: `${newFilePath}#/definitions/Database`\n      },\n      old: {\n        location: `${oldFilePath}:36:5`,\n        path: \"definitions.Database\",\n        ref: `${oldFilePath}#/definitions/Database`\n      },\n      type: \"Error\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/multipleLevelAllOfTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"Multiple Level AllOf\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/expandsAllOf/old/multi_level_allOf.json\"\n  const newFile = \"src/test/specs/expandsAllOf/new/multi_level_allOf.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      id: \"1001\",\n      code: \"NoVersionChange\",\n      message: \"The versions have not changed.\",\n      old: {\n        ref: `${oldFilePath}#`,\n        path: \"\",\n        location: `${oldFilePath}:1:1`\n      },\n      new: {\n        ref: `${newFilePath}#`,\n        path: \"\",\n        location: `${newFilePath}:1:1`\n      },\n      type: \"Info\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      mode: \"Update\"\n    },\n    {\n      id: \"1032\",\n      code: \"DifferentAllOf\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      old: {\n        ref: `${oldFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${oldFilePath}:24:13`\n      },\n      new: {\n        ref: `${newFilePath}#/paths/~1api~1Parameters/put/parameters/0/schema`,\n        path: \"paths['/api/Parameters'].put.parameters[0].schema\",\n        location: `${newFilePath}:24:13`\n      },\n      type: \"Error\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      mode: \"Update\"\n    },\n    {\n      code: \"DifferentAllOf\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1032.md\",\n      id: \"1032\",\n      message: \"The new version has a different 'allOf' property than the previous one.\",\n      mode: \"Update\",\n      new: {\n        location: `${newFilePath}:36:5`,\n        path: \"definitions.Database\",\n        ref: `${newFilePath}#/definitions/Database`\n      },\n      old: {\n        location: `${oldFilePath}:36:5`,\n        path: \"definitions.Database\",\n        ref: `${oldFilePath}#/definitions/Database`\n      },\n      type: \"Error\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/operationLocationTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"../index\"\nimport { fileUrl } from \"./fileUrl\"\n\n// Regression test for bug #310\ntest(\"diffing a spec with operation-location bug with itself does not throw\", async () => {\n  const diff = new OpenApiDiff({})\n  const file = \"src/test/specs/operation-location.json\"\n  const resultStr = await diff.compare(file, file)\n  const result = JSON.parse(resultStr)\n  const filePath = fileUrl(path.resolve(file))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${filePath}#`,\n        path: \"\",\n        location: `${filePath}:1:1`\n      },\n      old: {\n        ref: `${filePath}#`,\n        path: \"\",\n        location: `${filePath}:1:1`\n      },\n      type: \"Info\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/requestBodyFormatNoLongerSupportedTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"flags 1003 - RequestBodyFormatNoLongerSupported\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/rule-1003/case1.old.json\"\n  const newFile = \"src/test/specs/rule-1003/case1.new.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      id: \"1003\",\n      code: \"RequestBodyFormatNoLongerSupported\",\n      message: \"The new version does not support 'text/plain' as a request body format.\",\n      mode: \"Removal\",\n      old: {\n        ref: `${oldFilePath}#/consumes`,\n        path: \"paths['/pets'].post.consumes\",\n        location: `${oldFilePath}:7:3`\n      },\n      new: {\n        ref: `${newFilePath}#/consumes`,\n        path: \"paths['/pets'].post.consumes\",\n        location: `${newFilePath}:7:3`\n      },\n      type: \"Warning\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1003.md\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/responseBodyFormatNowSupportedTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"flags 1004 - ResponseBodyFormatNowSupported\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/rule-1004/case1.old.json\"\n  const newFile = \"src/test/specs/rule-1004/case1.new.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      id: \"1004\",\n      code: \"ResponseBodyFormatNowSupported\",\n      message: \"The old version did not support 'text/plain' as a response body format.\",\n      mode: \"Addition\",\n      old: {\n        ref: `${oldFilePath}#/produces`,\n        path: \"paths['/pets'].get.produces\",\n        location: `${oldFilePath}:7:3`\n      },\n      new: {\n        ref: `${newFilePath}#/produces`,\n        path: \"paths['/pets'].get.produces\",\n        location: `${newFilePath}:7:3`\n      },\n      type: \"Warning\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1004.md\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/simpleTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"simple\", async () => {\n  const diff = new OpenApiDiff({})\n  const file = \"src/test/specs/simple.json\"\n  const resultStr = await diff.compare(file, file)\n  const result = JSON.parse(resultStr)\n  const filePath = fileUrl(path.resolve(file))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${filePath}#`,\n        path: \"\",\n        location: `${filePath}:1:1`\n      },\n      old: {\n        ref: `${filePath}#`,\n        path: \"\",\n        location: `${filePath}:1:1`\n      },\n      type: \"Info\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/someChangesTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"some-changes\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/some-changes/old.json\"\n  const newFile = \"src/test/specs/some-changes/new.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${newFilePath}#`,\n        location: `${newFilePath}:1:1`,\n        path: \"\"\n      },\n      old: {\n        ref: `${oldFilePath}#`,\n        location: `${oldFilePath}:1:1`,\n        path: \"\"\n      },\n      type: \"Info\"\n    },\n    {\n      code: \"AddedPath\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1038.md\",\n      id: \"1038\",\n      message: \"The new version is adding a path that was not found in the old version.\",\n      mode: \"Addition\",\n      new: {\n        location: `${newFilePath}:8:5`,\n        path: \"paths['/x']\",\n        ref: `${newFilePath}#/paths/~1x`\n      },\n      old: {},\n      type: \"Info\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/specs/additional-properties/new.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    },\n    \"P2\": {\n      \"name\": \"p2\",\n      \"in\": \"body\",\n      \"schema\": {\n        \"type\": \"object\",\n        \"additionalProperties\": true\n      }\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P2\"\n        }\n      ],\n      \"get\": {\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {\n              \"additionalProperties\": true\n            }\n          },\n          \"200\": {\n            \"description\": \"operation successfully .\",\n            \"schema\": {\n              \"$ref\":\"#/definitions/Foo\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Foo\": {\n      \"type\":\"object\",\n      \"properties\": {\n        \"bar\": {\n          \"type\":\"object\",\n          \"additionalProperties\":true\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/additional-properties/old.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    },\n    \"P2\": {\n      \"name\": \"p2\",\n      \"in\": \"body\",\n      \"schema\": {\n          \"type\": \"object\",\n          \"additionalProperties\": false\n      }\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P2\"\n        }\n      ],\n      \"get\": {\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {\n              \"additionalProperties\": true\n            }\n          },\n          \"200\": {\n            \"description\": \"operation successfully .\",\n            \"schema\": {\n              \"$ref\":\"#/definitions/Foo\"\n            }\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Foo\": {\n      \"type\":\"object\",\n      \"properties\": {\n        \"bar\": {\n          \"type\":\"object\",\n          \"additionalProperties\":true\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/common-parameters/new.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    },\n    \"P2\": {\n      \"name\": \"p2\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P2\"\n        }\n      ],\n      \"get\": {\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {}\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/common-parameters/old.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    },\n    \"P1\": {\n      \"name\": \"p1\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P1\"\n        }\n      ],\n      \"get\": {\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {\n            }\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/compatible-properties.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"compatible-properties\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {\n  },\n  \"definitions\": {\n    \"Foo\": {\n      \"type\":\"object\",\n      \"properties\": {\n        \"string-string\": {\n          \"type\":\"string\"\n        },\n        \"string-refstring\": {\n          \"type\":\"string\"\n        },\n        \"refstring-string\": {\n          \"$ref\": \"#/definitions/MyString\"\n        },\n        \"refstring-refstring\": {\n          \"$ref\": \"#/definitions/MyString\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Foo2\"\n        }\n      ]\n    },\n    \"Foo2\": {\n      \"type\":\"object\",\n      \"properties\": {\n        \"string-string\": {\n          \"type\":\"string\"\n        },\n        \"string-refstring\": {\n          \"$ref\": \"#/definitions/MyString\"\n        },\n        \"refstring-string\": {\n          \"type\":\"string\"\n        },\n        \"refstring-refstring\": {\n          \"$ref\": \"#/definitions/MyString\"\n        }\n      }\n    },\n    \"MyString\": {\n      \"type\": \"string\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/new/expand_allOf_model.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        }\n      },\n      \"required\": [ \"a\",\"b\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/new/move_properties_into_allof_model.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default response\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n        }\n      },\n      \"allOf\":[\n        { \"$ref\":\"#/definitions/DataBaseProperties\"}\n      ],\n      \"required\": [ \"b\" ]\n    },\n    \"DataBaseProperties\" :{\n      \"properties\": {\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        }\n      },\n      \"required\": [ \"b\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/new/multi_level_allOf.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        },\n        \"c\":{\n          \"type\":\"integer\",\n          \"format\": \"int32\",\n          \"description\": \"inter\"\n        }\n      },\n      \"required\": [ \"a\",\"b\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/new/property_format_change.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [\"http\", \"https\"],\n  \"consumes\": [\"text/plain\", \"text/json\"],\n  \"produces\": [\"text/plain\"],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [\"Parameters\"],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\"text/plain\"],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default response\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [\"a1\", \"a2\", \"a3\"]\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\"\n        }\n      },\n      \"required\": [\"b\",\"a\"]\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/old/expand_allOf_model.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n        }\n      },\n      \"allOf\":[\n        { \"$ref\":\"#/definitions/DataBaseProperties\"}\n      ],\n      \"required\": [ \"a\" ]\n    },\n    \"DataBaseProperties\" :{\n      \"properties\" : {\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [\n            \"b1\"\n          ]\n        }\n      },\n      \"required\":[\"b\"]\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/old/move_properties_into_allof_model.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n\n        },\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"b1\" ]\n        }\n      },\n      \"required\": [ \"b\" ]\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/old/multi_level_allOf.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"consumes\": [ \"text/plain\", \"text/json\" ],\n  \"produces\": [ \"text/plain\" ],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [ \"Parameters\" ],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [ \"a1\", \"a2\", \"a3\" ]\n        }\n      },\n      \"allOf\":[\n        { \"$ref\":\"#/definitions/BaseProperties\"}\n      ],\n      \"required\": [ \"a\" ]\n    },\n    \"DataBaseProperties\" :{\n      \"properties\" : {\n        \"b\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [\n            \"b1\"\n          ]\n        },\n         \"c\":{\n          \"type\":\"integer\",\n          \"format\": \"int32\",\n          \"description\": \"inter\"\n        }\n      },\n      \"required\":[\"b\"]\n    },\n    \"BaseProperties\" :{\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/DataBaseProperties\"\n        }\n      ]\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/expandsAllOf/old/property_format_change.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"added_required_property\",\n    \"version\": \"1.0\"\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [\"http\", \"https\"],\n  \"consumes\": [\"text/plain\", \"text/json\"],\n  \"produces\": [\"text/plain\"],\n  \"paths\": {\n    \"/api/Parameters\": {\n      \"put\": {\n        \"tags\": [\"Parameters\"],\n        \"operationId\": \"Parameters_Put\",\n        \"produces\": [\"text/plain\"],\n        \"parameters\": [\n          {\n            \"name\": \"database\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": { \"$ref\": \"#/definitions/Database\" }\n          }\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"default response\"\n          }\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"Database\": {\n      \"properties\": {\n        \"a\": {\n          \"type\": \"string\",\n          \"description\": \"Enum.\",\n          \"enum\": [\"a1\", \"a2\", \"a3\"]\n        }\n      },\n      \"allOf\": [{ \"$ref\": \"#/definitions/DataBaseProperties\" }],\n      \"required\": [\"b\"]\n    },\n    \"DataBaseProperties\": {\n      \"properties\": {\n        \"b\": {\n          \"type\": \"integer\",\n          \"description\": \"Enum.\",\n          \"format\": \"int32\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/full/new/openapi.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"0\"\n  },\n  \"paths\": {\n  }\n}"
  },
  {
    "path": "src/test/specs/full/new/openapi2.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"0\"\n  },\n  \"paths\": {\n    \"/x\": {\n\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/full/new/readme.md",
    "content": "# New\n\n> see https://aka.ms/autorest\n\n```yaml $(tag) == '2019'\ninput-file:\n- openapi.json\n- openapi2.json\n```"
  },
  {
    "path": "src/test/specs/full/old/openapi.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"0\"\n  },\n  \"paths\": {}\n}"
  },
  {
    "path": "src/test/specs/full/old/readme.md",
    "content": "# Old\n\n> see https://aka.ms/autorest\n\n```yaml $(tag) == '2019'\ninput-file:\n- openapi.json\n```\n"
  },
  {
    "path": "src/test/specs/full2/source/Microsoft.Compute/stable/2017-12-01/compute.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"ComputeManagementClient\",\n    \"description\": \"The Compute Management Client.\",\n    \"version\": \"2017-12-01\"\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"security\": [\n    {\n      \"azure_auth\": [\n        \"user_impersonation\"\n      ]\n    }\n  ],\n  \"securityDefinitions\": {\n    \"azure_auth\": {\n      \"type\": \"oauth2\",\n      \"authorizationUrl\": \"https://login.microsoftonline.com/common/oauth2/authorize\",\n      \"flow\": \"implicit\",\n      \"description\": \"Azure Active Directory OAuth2 Flow\",\n      \"scopes\": {\n        \"user_impersonation\": \"impersonate your user account\"\n      }\n    }\n  },\n  \"paths\": {\n    \"/providers/Microsoft.Compute/operations\": {\n      \"get\": {\n        \"tags\": [\n          \"ComputeOperations\"\n        ],\n        \"operationId\": \"Operations_List\",\n        \"description\": \"Gets a list of compute operations.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ComputeOperationListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}\": {\n      \"put\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_CreateOrUpdate\",\n        \"description\": \"Create or update an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            },\n            \"description\": \"Parameters supplied to the Create Availability Set operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_Update\",\n        \"description\": \"Update an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySetUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Availability Set operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_Delete\",\n        \"description\": \"Delete an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_Get\",\n        \"description\": \"Retrieves information about an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/availabilitySets\": {\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_ListBySubscription\",\n        \"description\": \"Lists all availability sets in a subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySetListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets\": {\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_List\",\n        \"description\": \"Lists all availability sets in a resource group.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySetListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes\": {\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_ListAvailableSizes\",\n        \"description\": \"Lists all available virtual machine sizes that can be used to create a new virtual machine in an existing availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineSizeListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensionImages\"\n        ],\n        \"operationId\": \"VirtualMachineExtensionImages_Get\",\n        \"description\": \"Gets a virtual machine extension image.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"type\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"version\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtensionImage\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensionImages\"\n        ],\n        \"operationId\": \"VirtualMachineExtensionImages_ListTypes\",\n        \"description\": \"Gets a list of virtual machine extension image types.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineExtensionImage\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensionImages\"\n        ],\n        \"operationId\": \"VirtualMachineExtensionImages_ListVersions\",\n        \"description\": \"Gets a list of virtual machine extension image versions.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"type\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"$filter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The filter to apply on the operation.\"\n          },\n          {\n            \"name\": \"$top\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"$orderby\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineExtensionImage\"\n              }\n            }\n          }\n        },\n        \"x-ms-odata\": \"#/definitions/VirtualMachineExtensionImage\"\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_CreateOrUpdate\",\n        \"description\": \"The operation to create or update the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine where the extension should be created or updated.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"name\": \"extensionParameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            },\n            \"description\": \"Parameters supplied to the Create Virtual Machine Extension operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_Update\",\n        \"description\": \"The operation to update the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine where the extension should be updated.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"name\": \"extensionParameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtensionUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Virtual Machine Extension operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_Delete\",\n        \"description\": \"The operation to delete the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine where the extension should be deleted.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_Get\",\n        \"description\": \"The operation to get the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine containing the extension.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachines_GetExtensions\",\n        \"description\": \"The operation to get all extensions of a Virtual Machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine containing the extension.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtensionsListResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_Get\",\n        \"description\": \"Gets a virtual machine image.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"name\": \"offer\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher offer.\"\n          },\n          {\n            \"name\": \"skus\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image SKU.\"\n          },\n          {\n            \"name\": \"version\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image SKU version.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineImage\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_List\",\n        \"description\": \"Gets a list of all virtual machine image versions for the specified location, publisher, offer, and SKU.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"name\": \"offer\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher offer.\"\n          },\n          {\n            \"name\": \"skus\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image SKU.\"\n          },\n          {\n            \"name\": \"$filter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The filter to apply on the operation.\"\n          },\n          {\n            \"name\": \"$top\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"$orderby\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        },\n        \"x-ms-odata\": \"#/definitions/VirtualMachineImageResource\"\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_ListOffers\",\n        \"description\": \"Gets a list of virtual machine image offers for the specified location and publisher.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_ListPublishers\",\n        \"description\": \"Gets a list of virtual machine image publishers for the specified Azure location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_ListSkus\",\n        \"description\": \"Gets a list of virtual machine image SKUs for the specified location, publisher, and offer.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"name\": \"offer\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher offer.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets, for the specified location, the current compute resource usage information as well as the limits for compute resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location for which resource usage is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListUsagesResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineSizes\"\n        ],\n        \"operationId\": \"VirtualMachineSizes_List\",\n        \"description\": \"Lists all available virtual machine sizes for a subscription in a location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which virtual-machine-sizes is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineSizeListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}\": {\n      \"put\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_CreateOrUpdate\",\n        \"description\": \"Create or update an image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            },\n            \"description\": \"Parameters supplied to the Create Image operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_Update\",\n        \"description\": \"Update an image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ImageUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Image operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_Delete\",\n        \"description\": \"Deletes an Image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_Get\",\n        \"description\": \"Gets an image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images\": {\n      \"get\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_ListByResourceGroup\",\n        \"description\": \"Gets the list of images under a resource group.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ImageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/images\": {\n      \"get\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_List\",\n        \"description\": \"Gets the list of Images in the subscription. Use nextLink property in the response to get the next page of Images. Do this till nextLink is null to fetch all the Images.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ImageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Capture\",\n        \"description\": \"Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create similar VMs.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineCaptureParameters\"\n            },\n            \"description\": \"Parameters supplied to the Capture Virtual Machine operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineCaptureResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_CreateOrUpdate\",\n        \"description\": \"The operation to create or update a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            },\n            \"description\": \"Parameters supplied to the Create Virtual Machine operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Update\",\n        \"description\": \"The operation to update a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Virtual Machine operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Delete\",\n        \"description\": \"The operation to delete a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Get\",\n        \"description\": \"Retrieves information about the model view or the instance view of a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\",\n            \"enum\": [\n              \"instanceView\"\n            ],\n            \"x-ms-enum\": {\n              \"name\": \"InstanceViewTypes\",\n              \"modelAsString\": false\n            }\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_InstanceView\",\n        \"description\": \"Retrieves information about the run-time state of a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineInstanceView\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_ConvertToManagedDisks\",\n        \"description\": \"Converts virtual machine disks from blob-based to managed disks. Virtual machine must be stop-deallocated before invoking this operation.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Deallocate\",\n        \"description\": \"Shuts down the virtual machine and releases the compute resources. You are not billed for the compute resources that this virtual machine uses.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Generalize\",\n        \"description\": \"Sets the state of the virtual machine to generalized.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_List\",\n        \"description\": \"Lists all of the virtual machines in the specified resource group. Use the nextLink property in the response to get the next page of virtual machines.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_ListAll\",\n        \"description\": \"Lists all of the virtual machines in the specified subscription. Use the nextLink property in the response to get the next page of virtual machines.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_ListAvailableSizes\",\n        \"description\": \"Lists all available virtual machine sizes to which the specified virtual machine can be resized.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineSizeListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_PowerOff\",\n        \"description\": \"The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same provisioned resources. You are still charged for this virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Restart\",\n        \"description\": \"The operation to restart a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Start\",\n        \"description\": \"The operation to start a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Redeploy\",\n        \"description\": \"The operation to redeploy a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_PerformMaintenance\",\n        \"description\": \"The operation to perform maintenance on a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_CreateOrUpdate\",\n        \"description\": \"Create or update a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set to create or update.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            },\n            \"description\": \"The scale set object.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Update\",\n        \"description\": \"Update a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set to create or update.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdate\"\n            },\n            \"description\": \"The scale set object.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Delete\",\n        \"description\": \"Deletes a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Get\",\n        \"description\": \"Display information about a virtual machine scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Deallocate\",\n        \"description\": \"Deallocates specific virtual machines in a VM scale set. Shuts down the virtual machines and releases the compute resources. You are not billed for the compute resources that this virtual machine scale set deallocates.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_DeleteInstances\",\n        \"description\": \"Deletes virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceRequiredIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_GetInstanceView\",\n        \"description\": \"Gets the status of a VM scale set instance.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetInstanceView\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_List\",\n        \"description\": \"Gets a list of all VM scale sets under a resource group.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_CreateOrUpdate\",\n        \"description\": \"The operation to create or update an extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set where the extension should be create or updated.\"\n          },\n          {\n            \"name\": \"vmssExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set extension.\"\n          },\n          {\n            \"name\": \"extensionParameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            },\n            \"description\": \"Parameters supplied to the Create VM scale set Extension operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_Delete\",\n        \"description\": \"The operation to delete the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set where the extension should be deleted.\"\n          },\n          {\n            \"name\": \"vmssExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set extension.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_Get\",\n        \"description\": \"The operation to get the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set containing the extension.\"\n          },\n          {\n            \"name\": \"vmssExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set extension.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_List\",\n        \"description\": \"Gets a list of all extensions in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set containing the extension.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachineScaleSets\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ListAll\",\n        \"description\": \"Gets a list of all VM Scale Sets in the subscription, regardless of the associated resource group. Use nextLink property in the response to get the next page of VM Scale Sets. Do this till nextLink is null to fetch all the VM Scale Sets.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListWithLinkResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ListSkus\",\n        \"description\": \"Gets a list of SKUs available for your VM scale set, including the minimum and maximum VM instances allowed for each SKU.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListSkusResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_GetOSUpgradeHistory\",\n        \"description\": \"Gets list of OS upgrades on a VM scale set instance.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListOSUpgradeHistory\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_PowerOff\",\n        \"description\": \"Power off (stop) one or more virtual machines in a VM scale set. Note that resources are still attached and you are getting charged for the resources. Instead, use deallocate to release resources and avoid charges.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Restart\",\n        \"description\": \"Restarts one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Start\",\n        \"description\": \"Starts one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Redeploy\",\n        \"description\": \"Redeploy one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_PerformMaintenance\",\n        \"description\": \"Perform maintenance on one or more virtual machines in a VM scale set. Operation on instances which are not eligible for perform maintenance will be failed. Please refer to best practices for more details: https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-maintenance-notifications\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_UpdateInstances\",\n        \"description\": \"Upgrades one or more virtual machines to the latest SKU set in the VM scale set model.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceRequiredIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Reimage\",\n        \"description\": \"Reimages (upgrade the operating system) one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ReimageAll\",\n        \"description\": \"Reimages all the disks ( including data disks ) in the virtual machines in a VM scale set. This operation is only supported for managed disks.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetRollingUpgrades\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetRollingUpgrades_Cancel\",\n        \"description\": \"Cancels the current virtual machine scale set rolling upgrade.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetRollingUpgrades\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetRollingUpgrades_StartOSUpgrade\",\n        \"description\": \"Starts a rolling upgrade to move all virtual machine scale set instances to the latest available Platform Image OS version. Instances which are already running the latest available OS version are not affected.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetRollingUpgrades\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetRollingUpgrades_GetLatest\",\n        \"description\": \"Gets the status of the latest virtual machine scale set rolling upgrade.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RollingUpgradeStatusInfo\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ForceRecoveryServiceFabricPlatformUpdateDomainWalk\",\n        \"description\": \"Manual platform update domain walk to update virtual machines in a service fabric virtual machine scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"name\": \"platformUpdateDomain\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"description\": \"The platform update domain for which a manual recovery walk is requested\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RecoveryWalkResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Reimage\",\n        \"description\": \"Reimages (upgrade the operating system) a specific virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_ReimageAll\",\n        \"description\": \"Allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This operation is only supported for managed disks.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Deallocate\",\n        \"description\": \"Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the compute resources it uses. You are not billed for the compute resources of this virtual machine once it is deallocated.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Update\",\n        \"description\": \"Updates a virtual machine of a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set where the extension should be create or updated.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            },\n            \"description\": \"Parameters supplied to the Update Virtual Machine Scale Sets VM operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Delete\",\n        \"description\": \"Deletes a virtual machine from a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Get\",\n        \"description\": \"Gets a virtual machine from a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_GetInstanceView\",\n        \"description\": \"Gets the status of a virtual machine from a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceView\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_List\",\n        \"description\": \"Gets a list of all virtual machines in a VM scale sets.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"virtualMachineScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"$filter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The filter to apply to the operation.\"\n          },\n          {\n            \"name\": \"$select\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The list parameters.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply to the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        },\n        \"x-ms-odata\": \"#/definitions/VirtualMachineScaleSetVM\"\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_PowerOff\",\n        \"description\": \"Power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you are getting charged for the resources. Instead, use deallocate to release resources and avoid charges.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Restart\",\n        \"description\": \"Restarts a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Start\",\n        \"description\": \"Starts a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Redeploy\",\n        \"description\": \"Redeploys a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_PerformMaintenance\",\n        \"description\": \"Performs maintenance on a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/OperationStatusResponse\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval\": {\n      \"post\": {\n        \"tags\": [\n          \"LogAnalytics\"\n        ],\n        \"operationId\": \"LogAnalytics_ExportRequestRateByInterval\",\n        \"description\": \"Export logs that show Api requests made by this subscription in the given time window to show throttling activities.\",\n        \"parameters\": [\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/RequestRateByIntervalInput\"\n            },\n            \"description\": \"Parameters supplied to the LogAnalytics getRequestRateByInterval Api.\"\n          },\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which virtual-machine-sizes is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/LogAnalyticsOperationResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests\": {\n      \"post\": {\n        \"tags\": [\n          \"LogAnalytics\"\n        ],\n        \"operationId\": \"LogAnalytics_ExportThrottledRequests\",\n        \"description\": \"Export logs that show total throttled Api requests for this subscription in the given time window.\",\n        \"parameters\": [\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ThrottledRequestsInput\"\n            },\n            \"description\": \"Parameters supplied to the LogAnalytics getThrottledRequests Api.\"\n          },\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which virtual-machine-sizes is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/LogAnalyticsOperationResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"ComputeOperationListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"readOnly\": true,\n          \"items\": {\n            \"$ref\": \"#/definitions/ComputeOperationValue\"\n          },\n          \"description\": \"The list of compute operations\"\n        }\n      },\n      \"description\": \"The List Compute Operation operation response.\"\n    },\n    \"ComputeOperationValue\": {\n      \"properties\": {\n        \"origin\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The origin of the compute operation.\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The name of the compute operation.\"\n        },\n        \"display\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/ComputeOperationValueDisplay\"\n        }\n      },\n      \"description\": \"Describes the properties of a Compute Operation value.\"\n    },\n    \"ComputeOperationValueDisplay\": {\n      \"properties\": {\n        \"operation\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The display name of the compute operation.\"\n        },\n        \"resource\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The display name of the resource the operation applies to.\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The description of the operation.\"\n        },\n        \"provider\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The resource provider for the operation.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Compute Operation Value Display.\"\n    },\n    \"InstanceViewStatus\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The status code.\"\n        },\n        \"level\": {\n          \"type\": \"string\",\n          \"description\": \"The level code.\",\n          \"enum\": [\n            \"Info\",\n            \"Warning\",\n            \"Error\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"StatusLevelTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"displayStatus\": {\n          \"type\": \"string\",\n          \"description\": \"The short localizable label for the status.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The detailed status message, including for alerts and error messages.\"\n        },\n        \"time\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"The time of the status.\"\n        }\n      },\n      \"description\": \"Instance view status.\"\n    },\n    \"AvailabilitySetProperties\": {\n      \"properties\": {\n        \"platformUpdateDomainCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Update Domain count.\"\n        },\n        \"platformFaultDomainCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Fault Domain count.\"\n        },\n        \"virtualMachines\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"A list of references to all virtual machines in the availability set.\"\n        },\n        \"statuses\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a resource.\"\n    },\n    \"AvailabilitySet\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/AvailabilitySetProperties\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Sku of the availability set\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Manage the availability of virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> For more information on Azure planned maintainance, see [Planned maintenance for virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.\"\n    },\n    \"AvailabilitySetUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/AvailabilitySetProperties\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Sku of the availability set\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Only tags may be updated.\"\n    },\n    \"AvailabilitySetListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/AvailabilitySet\"\n          },\n          \"description\": \"The list of availability sets\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The URI to fetch the next page of AvailabilitySets. Call ListNext() with this URI to fetch the next page of AvailabilitySets.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Availability Set operation response.\"\n    },\n    \"VirtualMachineSize\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the virtual machine size.\"\n        },\n        \"numberOfCores\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of cores supported by the virtual machine size.\"\n        },\n        \"osDiskSizeInMB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The OS disk size, in MB, allowed by the virtual machine size.\"\n        },\n        \"resourceDiskSizeInMB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The resource disk size, in MB, allowed by the virtual machine size.\"\n        },\n        \"memoryInMB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The amount of memory, in MB, supported by the virtual machine size.\"\n        },\n        \"maxDataDiskCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The maximum number of data disks that can be attached to the virtual machine size.\"\n        }\n      },\n      \"description\": \"Describes the properties of a VM size.\"\n    },\n    \"VirtualMachineSizeListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineSize\"\n          },\n          \"description\": \"The list of virtual machine sizes.\"\n        }\n      },\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"VirtualMachineExtensionImageProperties\": {\n      \"properties\": {\n        \"operatingSystem\": {\n          \"type\": \"string\",\n          \"description\": \"The operating system this extension supports.\"\n        },\n        \"computeRole\": {\n          \"type\": \"string\",\n          \"description\": \"The type of role (IaaS or PaaS) this extension supports.\"\n        },\n        \"handlerSchema\": {\n          \"type\": \"string\",\n          \"description\": \"The schema defined by publisher, where extension consumers should provide settings in a matching schema.\"\n        },\n        \"vmScaleSetEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether the extension can be used on xRP VMScaleSets. By default existing extensions are usable on scalesets, but there might be cases where a publisher wants to explicitly indicate the extension is only enabled for CRP VMs but not VMSS.\"\n        },\n        \"supportsMultipleExtensions\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether the handler can support multiple extensions.\"\n        }\n      },\n      \"required\": [\n        \"operatingSystem\",\n        \"computeRole\",\n        \"handlerSchema\"\n      ],\n      \"description\": \"Describes the properties of a Virtual Machine Extension Image.\"\n    },\n    \"VirtualMachineExtensionImage\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineExtensionImageProperties\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"location\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Extension Image.\"\n    },\n    \"VirtualMachineImageResource\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the resource.\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"The supported Azure location of the resource.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Specifies the tags that are assigned to the virtual machine. For more information about using tags, see [Using tags to organize your Azure resources](https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md).\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"location\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Virtual machine image resource information.\"\n    },\n    \"VirtualMachineExtensionInstanceView\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The virtual machine extension name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"substatuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine extension.\"\n    },\n    \"VirtualMachineExtensionProperties\": {\n      \"properties\": {\n        \"forceUpdateTag\": {\n          \"type\": \"string\",\n          \"description\": \"How the extension handler should be forced to update even if the extension configuration has not changed.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension handler publisher.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"autoUpgradeMinorVersion\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true.\"\n        },\n        \"settings\": {\n          \"type\": \"object\",\n          \"description\": \"Json formatted public settings for the extension.\"\n        },\n        \"protectedSettings\": {\n          \"type\": \"object\",\n          \"description\": \"The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"instanceView\": {\n          \"$ref\": \"#/definitions/VirtualMachineExtensionInstanceView\",\n          \"description\": \"The virtual machine extension instance view.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtensionUpdateProperties\": {\n      \"properties\": {\n        \"forceUpdateTag\": {\n          \"type\": \"string\",\n          \"description\": \"How the extension handler should be forced to update even if the extension configuration has not changed.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension handler publisher.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"autoUpgradeMinorVersion\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true.\"\n        },\n        \"settings\": {\n          \"type\": \"object\",\n          \"description\": \"Json formatted public settings for the extension.\"\n        },\n        \"protectedSettings\": {\n          \"type\": \"object\",\n          \"description\": \"The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtension\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineExtensionProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtensionUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineExtensionUpdateProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtensionsListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtension\"\n          },\n          \"description\": \"The list of extensions\"\n        }\n      },\n      \"description\": \"The List Extension operation response\"\n    },\n    \"PurchasePlan\": {\n      \"properties\": {\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The publisher ID.\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The plan ID.\"\n        },\n        \"product\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element.\"\n        }\n      },\n      \"required\": [\n        \"publisher\",\n        \"name\",\n        \"product\"\n      ],\n      \"description\": \"Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.\"\n    },\n    \"OSDiskImage\": {\n      \"properties\": {\n        \"operatingSystem\": {\n          \"type\": \"string\",\n          \"description\": \"The operating system of the osDiskImage.\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"operatingSystem\"\n      ],\n      \"description\": \"Contains the os disk image information.\"\n    },\n    \"DataDiskImage\": {\n      \"properties\": {\n        \"lun\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        }\n      },\n      \"description\": \"Contains the data disk images information.\"\n    },\n    \"VirtualMachineImageProperties\": {\n      \"properties\": {\n        \"plan\": {\n          \"$ref\": \"#/definitions/PurchasePlan\"\n        },\n        \"osDiskImage\": {\n          \"$ref\": \"#/definitions/OSDiskImage\"\n        },\n        \"dataDiskImages\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DataDiskImage\"\n          }\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Image.\"\n    },\n    \"VirtualMachineImage\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineImageProperties\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"location\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Image.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the resource.\"\n        },\n        \"localizedValue\": {\n          \"type\": \"string\",\n          \"description\": \"The localized name of the resource.\"\n        }\n      },\n      \"description\": \"The Usage Names.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"type\": \"string\",\n          \"description\": \"An enum describing the unit of usage measurement.\",\n          \"enum\": [\n            \"Count\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The current usage of the resource.\"\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The maximum permitted usage of the resource.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"description\": \"The name of the type of usage.\"\n        }\n      },\n      \"required\": [\n        \"unit\",\n        \"currentValue\",\n        \"limit\",\n        \"name\"\n      ],\n      \"description\": \"Describes Compute Resource Usage.\"\n    },\n    \"ListUsagesResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"The list of compute resource usages.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The URI to fetch the next page of compute resource usage information. Call ListNext() with this to fetch the next page of compute resource usage information.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Usages operation response.\"\n    },\n    \"VirtualMachineCaptureParameters\": {\n      \"properties\": {\n        \"vhdPrefix\": {\n          \"type\": \"string\",\n          \"description\": \"The captured virtual hard disk's name prefix.\"\n        },\n        \"destinationContainerName\": {\n          \"type\": \"string\",\n          \"description\": \"The destination container name.\"\n        },\n        \"overwriteVhds\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether to overwrite the destination virtual hard disk, in case of conflict.\"\n        }\n      },\n      \"required\": [\n        \"vhdPrefix\",\n        \"destinationContainerName\",\n        \"overwriteVhds\"\n      ],\n      \"description\": \"Capture Virtual Machine parameters.\"\n    },\n    \"VirtualMachineCaptureResultProperties\": {\n      \"properties\": {\n        \"output\": {\n          \"type\": \"object\",\n          \"description\": \"Operation output data (raw JSON)\"\n        }\n      },\n      \"description\": \"Compute-specific operation properties, including output\"\n    },\n    \"VirtualMachineCaptureResult\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineCaptureResultProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Resource Id.\"\n    },\n    \"Plan\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The plan ID.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The publisher ID.\"\n        },\n        \"product\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element.\"\n        },\n        \"promotionCode\": {\n          \"type\": \"string\",\n          \"description\": \"The promotion code.\"\n        }\n      },\n      \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n    },\n    \"HardwareProfile\": {\n      \"properties\": {\n        \"vmSize\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the size of the virtual machine. For more information about virtual machine sizes, see [Sizes for virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> The available VM sizes depend on region and availability set. For a list of available sizes use these APIs:  <br><br> [List all available virtual machine sizes in an availability set](https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes) <br><br> [List all available virtual machine sizes in a region](https://docs.microsoft.com/rest/api/compute/virtualmachinesizes/list) <br><br> [List all available virtual machine sizes for resizing](https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes)\",\n          \"enum\": [\n            \"Basic_A0\",\n            \"Basic_A1\",\n            \"Basic_A2\",\n            \"Basic_A3\",\n            \"Basic_A4\",\n            \"Standard_A0\",\n            \"Standard_A1\",\n            \"Standard_A2\",\n            \"Standard_A3\",\n            \"Standard_A4\",\n            \"Standard_A5\",\n            \"Standard_A6\",\n            \"Standard_A7\",\n            \"Standard_A8\",\n            \"Standard_A9\",\n            \"Standard_A10\",\n            \"Standard_A11\",\n            \"Standard_A1_v2\",\n            \"Standard_A2_v2\",\n            \"Standard_A4_v2\",\n            \"Standard_A8_v2\",\n            \"Standard_A2m_v2\",\n            \"Standard_A4m_v2\",\n            \"Standard_A8m_v2\",\n            \"Standard_B1s\",\n            \"Standard_B1ms\",\n            \"Standard_B2s\",\n            \"Standard_B2ms\",\n            \"Standard_B4ms\",\n            \"Standard_B8ms\",\n            \"Standard_D1\",\n            \"Standard_D2\",\n            \"Standard_D3\",\n            \"Standard_D4\",\n            \"Standard_D11\",\n            \"Standard_D12\",\n            \"Standard_D13\",\n            \"Standard_D14\",\n            \"Standard_D1_v2\",\n            \"Standard_D2_v2\",\n            \"Standard_D3_v2\",\n            \"Standard_D4_v2\",\n            \"Standard_D5_v2\",\n            \"Standard_D2_v3\",\n            \"Standard_D4_v3\",\n            \"Standard_D8_v3\",\n            \"Standard_D16_v3\",\n            \"Standard_D32_v3\",\n            \"Standard_D64_v3\",\n            \"Standard_D2s_v3\",\n            \"Standard_D4s_v3\",\n            \"Standard_D8s_v3\",\n            \"Standard_D16s_v3\",\n            \"Standard_D32s_v3\",\n            \"Standard_D64s_v3\",\n            \"Standard_D11_v2\",\n            \"Standard_D12_v2\",\n            \"Standard_D13_v2\",\n            \"Standard_D14_v2\",\n            \"Standard_D15_v2\",\n            \"Standard_DS1\",\n            \"Standard_DS2\",\n            \"Standard_DS3\",\n            \"Standard_DS4\",\n            \"Standard_DS11\",\n            \"Standard_DS12\",\n            \"Standard_DS13\",\n            \"Standard_DS14\",\n            \"Standard_DS1_v2\",\n            \"Standard_DS2_v2\",\n            \"Standard_DS3_v2\",\n            \"Standard_DS4_v2\",\n            \"Standard_DS5_v2\",\n            \"Standard_DS11_v2\",\n            \"Standard_DS12_v2\",\n            \"Standard_DS13_v2\",\n            \"Standard_DS14_v2\",\n            \"Standard_DS15_v2\",\n            \"Standard_DS13-4_v2\",\n            \"Standard_DS13-2_v2\",\n            \"Standard_DS14-8_v2\",\n            \"Standard_DS14-4_v2\",\n            \"Standard_E2_v3\",\n            \"Standard_E4_v3\",\n            \"Standard_E8_v3\",\n            \"Standard_E16_v3\",\n            \"Standard_E32_v3\",\n            \"Standard_E64_v3\",\n            \"Standard_E2s_v3\",\n            \"Standard_E4s_v3\",\n            \"Standard_E8s_v3\",\n            \"Standard_E16s_v3\",\n            \"Standard_E32s_v3\",\n            \"Standard_E64s_v3\",\n            \"Standard_E32-16_v3\",\n            \"Standard_E32-8s_v3\",\n            \"Standard_E64-32s_v3\",\n            \"Standard_E64-16s_v3\",\n            \"Standard_F1\",\n            \"Standard_F2\",\n            \"Standard_F4\",\n            \"Standard_F8\",\n            \"Standard_F16\",\n            \"Standard_F1s\",\n            \"Standard_F2s\",\n            \"Standard_F4s\",\n            \"Standard_F8s\",\n            \"Standard_F16s\",\n            \"Standard_F2s_v2\",\n            \"Standard_F4s_v2\",\n            \"Standard_F8s_v2\",\n            \"Standard_F16s_v2\",\n            \"Standard_F32s_v2\",\n            \"Standard_F64s_v2\",\n            \"Standard_F72s_v2\",\n            \"Standard_G1\",\n            \"Standard_G2\",\n            \"Standard_G3\",\n            \"Standard_G4\",\n            \"Standard_G5\",\n            \"Standard_GS1\",\n            \"Standard_GS2\",\n            \"Standard_GS3\",\n            \"Standard_GS4\",\n            \"Standard_GS5\",\n            \"Standard_GS4-8\",\n            \"Standard_GS4-4\",\n            \"Standard_GS5-16\",\n            \"Standard_GS5-8\",\n            \"Standard_H8\",\n            \"Standard_H16\",\n            \"Standard_H8m\",\n            \"Standard_H16m\",\n            \"Standard_H16r\",\n            \"Standard_H16mr\",\n            \"Standard_L4s\",\n            \"Standard_L8s\",\n            \"Standard_L16s\",\n            \"Standard_L32s\",\n            \"Standard_M64s\",\n            \"Standard_M64ms\",\n            \"Standard_M128s\",\n            \"Standard_M128ms\",\n            \"Standard_M64-32ms\",\n            \"Standard_M64-16ms\",\n            \"Standard_M128-64ms\",\n            \"Standard_M128-32ms\",\n            \"Standard_NC6\",\n            \"Standard_NC12\",\n            \"Standard_NC24\",\n            \"Standard_NC24r\",\n            \"Standard_NC6s_v2\",\n            \"Standard_NC12s_v2\",\n            \"Standard_NC24s_v2\",\n            \"Standard_NC24rs_v2\",\n            \"Standard_NC6s_v3\",\n            \"Standard_NC12s_v3\",\n            \"Standard_NC24s_v3\",\n            \"Standard_NC24rs_v3\",\n            \"Standard_ND6s\",\n            \"Standard_ND12s\",\n            \"Standard_ND24s\",\n            \"Standard_ND24rs\",\n            \"Standard_NV6\",\n            \"Standard_NV12\",\n            \"Standard_NV24\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachineSizeTypes\",\n            \"modelAsString\": true\n          }\n        }\n      },\n      \"description\": \"Specifies the hardware settings for the virtual machine.\"\n    },\n    \"ImageReference\": {\n      \"properties\": {\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The image publisher.\"\n        },\n        \"offer\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the offer of the platform image or marketplace image used to create the virtual machine.\"\n        },\n        \"sku\": {\n          \"type\": \"string\",\n          \"description\": \"The image SKU.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the platform image or marketplace image used to create the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to use the latest version of an image available at deploy time. Even if you use 'latest', the VM image will not automatically update after deploy time even if a new version becomes available.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations.\"\n    },\n    \"KeyVaultSecretReference\": {\n      \"properties\": {\n        \"secretUrl\": {\n          \"type\": \"string\",\n          \"description\": \"The URL referencing a secret in a Key Vault.\"\n        },\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The relative URL of the Key Vault containing the secret.\"\n        }\n      },\n      \"required\": [\n        \"secretUrl\",\n        \"sourceVault\"\n      ],\n      \"description\": \"Describes a reference to Key Vault Secret\"\n    },\n    \"KeyVaultKeyReference\": {\n      \"properties\": {\n        \"keyUrl\": {\n          \"type\": \"string\",\n          \"description\": \"The URL referencing a key encryption key in Key Vault.\"\n        },\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The relative URL of the Key Vault containing the key.\"\n        }\n      },\n      \"required\": [\n        \"keyUrl\",\n        \"sourceVault\"\n      ],\n      \"description\": \"Describes a reference to Key Vault Key\"\n    },\n    \"DiskEncryptionSettings\": {\n      \"properties\": {\n        \"diskEncryptionKey\": {\n          \"$ref\": \"#/definitions/KeyVaultSecretReference\",\n          \"description\": \"Specifies the location of the disk encryption key, which is a Key Vault Secret.\"\n        },\n        \"keyEncryptionKey\": {\n          \"$ref\": \"#/definitions/KeyVaultKeyReference\",\n          \"description\": \"Specifies the location of the key encryption key in Key Vault.\"\n        },\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether disk encryption should be enabled on the virtual machine.\"\n        }\n      },\n      \"description\": \"Describes a Encryption Settings for a Disk\"\n    },\n    \"VirtualHardDisk\": {\n      \"properties\": {\n        \"uri\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the virtual hard disk's uri.\"\n        }\n      },\n      \"description\": \"Describes the uri of a disk.\"\n    },\n    \"Caching\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\",\n      \"enum\": [\n        \"None\",\n        \"ReadOnly\",\n        \"ReadWrite\"\n      ],\n      \"x-ms-enum\": {\n        \"name\": \"CachingTypes\",\n        \"modelAsString\": false\n      }\n    },\n    \"CreateOption\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \\\\u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\",\n      \"enum\": [\n        \"FromImage\",\n        \"Empty\",\n        \"Attach\"\n      ],\n      \"x-ms-enum\": {\n        \"name\": \"DiskCreateOptionTypes\",\n        \"modelAsString\": true\n      }\n    },\n    \"StorageAccountType\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS or Premium_LRS.\",\n      \"enum\": [\n        \"Standard_LRS\",\n        \"Premium_LRS\"\n      ],\n      \"x-ms-enum\": {\n        \"name\": \"StorageAccountTypes\",\n        \"modelAsString\": true\n      }\n    },\n    \"ManagedDiskParameters\": {\n      \"properties\": {\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS or Premium_LRS.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"The parameters of a managed disk.\"\n    },\n    \"OSDisk\": {\n      \"properties\": {\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. <br><br> Possible values are: <br><br> **Windows** <br><br> **Linux**\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"encryptionSettings\": {\n          \"$ref\": \"#/definitions/DiskEncryptionSettings\",\n          \"description\": \"Specifies the encryption settings for the OS Disk. <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"vhd\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The virtual hard disk.\"\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \\\\u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/ManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"createOption\"\n      ],\n      \"description\": \"Specifies information about the operating system disk used by the virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n    },\n    \"DataDisk\": {\n      \"properties\": {\n        \"lun\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"vhd\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The virtual hard disk.\"\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \\\\u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/ManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"lun\",\n        \"createOption\"\n      ],\n      \"description\": \"Describes a data disk.\"\n    },\n    \"StorageProfile\": {\n      \"properties\": {\n        \"imageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"description\": \"Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations.\"\n        },\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/OSDisk\",\n          \"description\": \"Specifies information about the operating system disk used by the virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DataDisk\"\n          },\n          \"description\": \"Specifies the parameters that are used to add a data disk to a virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        }\n      },\n      \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n    },\n    \"AdditionalUnattendContent\": {\n      \"properties\": {\n        \"passName\": {\n          \"type\": \"string\",\n          \"description\": \"The pass name. Currently, the only allowable value is OobeSystem.\",\n          \"enum\": [\n            \"OobeSystem\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"PassNames\",\n            \"modelAsString\": false\n          }\n        },\n        \"componentName\": {\n          \"type\": \"string\",\n          \"description\": \"The component name. Currently, the only allowable value is Microsoft-Windows-Shell-Setup.\",\n          \"enum\": [\n            \"Microsoft-Windows-Shell-Setup\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ComponentNames\",\n            \"modelAsString\": false\n          }\n        },\n        \"settingName\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the name of the setting to which the content applies. Possible values are: FirstLogonCommands and AutoLogon.\",\n          \"enum\": [\n            \"AutoLogon\",\n            \"FirstLogonCommands\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SettingNames\",\n            \"modelAsString\": false\n          }\n        },\n        \"content\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the XML formatted content that is added to the unattend.xml file for the specified path and component. The XML must be less than 4KB and must include the root element for the setting or feature that is being inserted.\"\n        }\n      },\n      \"description\": \"Specifies additional XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. Contents are defined by setting name, component name, and the pass in which the content is applied.\"\n    },\n    \"WinRMListener\": {\n      \"properties\": {\n        \"protocol\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the protocol of listener. <br><br> Possible values are: <br>**http** <br><br> **https**\",\n          \"enum\": [\n            \"Http\",\n            \"Https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProtocolTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"certificateUrl\": {\n          \"type\": \"string\",\n          \"description\": \"This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8: <br><br> {<br>  \\\"data\\\":\\\"<Base64-encoded-certificate>\\\",<br>  \\\"dataType\\\":\\\"pfx\\\",<br>  \\\"password\\\":\\\"<pfx-file-password>\\\"<br>}\"\n        }\n      },\n      \"description\": \"Describes Protocol and thumbprint of Windows Remote Management listener\"\n    },\n    \"WinRMConfiguration\": {\n      \"properties\": {\n        \"listeners\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/WinRMListener\"\n          },\n          \"description\": \"The list of Windows Remote Management listeners\"\n        }\n      },\n      \"description\": \"Describes Windows Remote Management configuration of the VM\"\n    },\n    \"WindowsConfiguration\": {\n      \"properties\": {\n        \"provisionVMAgent\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether virtual machine agent should be provisioned on the virtual machine. <br><br> When this property is not specified in the request body, default behavior is to set it to true.  This will ensure that VM Agent is installed on the VM so that extensions can be added to the VM later.\"\n        },\n        \"enableAutomaticUpdates\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether virtual machine is enabled for automatic updates.\"\n        },\n        \"timeZone\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the time zone of the virtual machine. e.g. \\\"Pacific Standard Time\\\"\"\n        },\n        \"additionalUnattendContent\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/AdditionalUnattendContent\"\n          },\n          \"description\": \"Specifies additional base-64 encoded XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup.\"\n        },\n        \"winRM\": {\n          \"$ref\": \"#/definitions/WinRMConfiguration\",\n          \"description\": \"Specifies the Windows Remote Management listeners. This enables remote Windows PowerShell.\"\n        }\n      },\n      \"description\": \"Specifies Windows operating system settings on the virtual machine.\"\n    },\n    \"SshPublicKey\": {\n      \"properties\": {\n        \"path\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the full path on the created VM where ssh public key is stored. If the file already exists, the specified key is appended to the file. Example: /home/user/.ssh/authorized_keys\"\n        },\n        \"keyData\": {\n          \"type\": \"string\",\n          \"description\": \"SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. <br><br> For creating ssh keys, see [Create SSH keys on Linux and Mac for Linux VMs in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-mac-create-ssh-keys?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n        }\n      },\n      \"description\": \"Contains information about SSH certificate public key and the path on the Linux VM where the public key is placed.\"\n    },\n    \"SshConfiguration\": {\n      \"properties\": {\n        \"publicKeys\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SshPublicKey\"\n          },\n          \"description\": \"The list of SSH public keys used to authenticate with linux based VMs.\"\n        }\n      },\n      \"description\": \"SSH configuration for Linux based VMs running on Azure\"\n    },\n    \"LinuxConfiguration\": {\n      \"properties\": {\n        \"disablePasswordAuthentication\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether password authentication should be disabled.\"\n        },\n        \"ssh\": {\n          \"$ref\": \"#/definitions/SshConfiguration\",\n          \"description\": \"Specifies the ssh key configuration for a Linux OS.\"\n        }\n      },\n      \"description\": \"Specifies the Linux operating system settings on the virtual machine. <br><br>For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json) <br><br> For running non-endorsed distributions, see [Information for Non-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n    },\n    \"VaultCertificate\": {\n      \"properties\": {\n        \"certificateUrl\": {\n          \"type\": \"string\",\n          \"description\": \"This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8: <br><br> {<br>  \\\"data\\\":\\\"<Base64-encoded-certificate>\\\",<br>  \\\"dataType\\\":\\\"pfx\\\",<br>  \\\"password\\\":\\\"<pfx-file-password>\\\"<br>}\"\n        },\n        \"certificateStore\": {\n          \"type\": \"string\",\n          \"description\": \"For Windows VMs, specifies the certificate store on the Virtual Machine to which the certificate should be added. The specified certificate store is implicitly in the LocalMachine account. <br><br>For Linux VMs, the certificate file is placed under the /var/lib/waagent directory, with the file name <UppercaseThumbprint>.crt for the X509 certificate file and <UppercaseThumbpring>.prv for private key. Both of these files are .pem formatted.\"\n        }\n      },\n      \"description\": \"Describes a single certificate reference in a Key Vault, and where the certificate should reside on the VM.\"\n    },\n    \"VaultSecretGroup\": {\n      \"properties\": {\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The relative URL of the Key Vault containing all of the certificates in VaultCertificates.\"\n        },\n        \"vaultCertificates\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultCertificate\"\n          },\n          \"description\": \"The list of key vault references in SourceVault which contain certificates.\"\n        }\n      },\n      \"description\": \"Describes a set of certificates which are all in the same Key Vault.\"\n    },\n    \"OSProfile\": {\n      \"properties\": {\n        \"computerName\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the host OS name of the virtual machine. <br><br> **Max-length (Windows):** 15 characters <br><br> **Max-length (Linux):** 64 characters. <br><br> For naming conventions and restrictions see [Azure infrastructure services implementation guidelines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions).\"\n        },\n        \"adminUsername\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the name of the administrator account. <br><br> **Windows-only restriction:** Cannot end in \\\".\\\" <br><br> **Disallowed values:** \\\"administrator\\\", \\\"admin\\\", \\\"user\\\", \\\"user1\\\", \\\"test\\\", \\\"user2\\\", \\\"test1\\\", \\\"user3\\\", \\\"admin1\\\", \\\"1\\\", \\\"123\\\", \\\"a\\\", \\\"actuser\\\", \\\"adm\\\", \\\"admin2\\\", \\\"aspnet\\\", \\\"backup\\\", \\\"console\\\", \\\"david\\\", \\\"guest\\\", \\\"john\\\", \\\"owner\\\", \\\"root\\\", \\\"server\\\", \\\"sql\\\", \\\"support\\\", \\\"support_388945a0\\\", \\\"sys\\\", \\\"test2\\\", \\\"test3\\\", \\\"user4\\\", \\\"user5\\\". <br><br> **Minimum-length (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root access to the Linux VM, see [Using root privileges on Linux virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li> For a list of built-in system users on Linux that should not be used in this field, see [Selecting User Names for Linux on Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"adminPassword\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the password of the administrator account. <br><br> **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has lower characters <br>Has upper characters <br> Has a digit <br> Has a special character (Regex match [\\\\W_]) <br><br> **Disallowed values:** \\\"abc@123\\\", \\\"P@$$w0rd\\\", \\\"P@ssw0rd\\\", \\\"P@ssword123\\\", \\\"Pa$$word\\\", \\\"pass@word1\\\", \\\"Password!\\\", \\\"Password1\\\", \\\"Password22\\\", \\\"iloveyou!\\\" <br><br> For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)\"\n        },\n        \"customData\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. <br><br> For using cloud-init for your VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"windowsConfiguration\": {\n          \"$ref\": \"#/definitions/WindowsConfiguration\",\n          \"description\": \"Specifies Windows operating system settings on the virtual machine.\"\n        },\n        \"linuxConfiguration\": {\n          \"$ref\": \"#/definitions/LinuxConfiguration\",\n          \"description\": \"Specifies the Linux operating system settings on the virtual machine. <br><br>For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json) <br><br> For running non-endorsed distributions, see [Information for Non-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n        },\n        \"secrets\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultSecretGroup\"\n          },\n          \"description\": \"Specifies set of certificates that should be installed onto the virtual machine.\"\n        }\n      },\n      \"description\": \"Specifies the operating system settings for the virtual machine.\"\n    },\n    \"NetworkInterfaceReferenceProperties\": {\n      \"properties\": {\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary network interface in case the virtual machine has more than 1 network interface.\"\n        }\n      },\n      \"description\": \"Describes a network interface reference properties.\"\n    },\n    \"NetworkInterfaceReference\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/NetworkInterfaceReferenceProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a network interface reference.\"\n    },\n    \"NetworkProfile\": {\n      \"properties\": {\n        \"networkInterfaces\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/NetworkInterfaceReference\"\n          },\n          \"description\": \"Specifies the list of resource Ids for the network interfaces associated with the virtual machine.\"\n        }\n      },\n      \"description\": \"Specifies the network interfaces of the virtual machine.\"\n    },\n    \"BootDiagnostics\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether boot diagnostics should be enabled on the Virtual Machine.\"\n        },\n        \"storageUri\": {\n          \"type\": \"string\",\n          \"description\": \"Uri of the storage account to use for placing the console output and screenshot.\"\n        }\n      },\n      \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n    },\n    \"DiagnosticsProfile\": {\n      \"properties\": {\n        \"bootDiagnostics\": {\n          \"$ref\": \"#/definitions/BootDiagnostics\",\n          \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n        }\n      },\n      \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n    },\n    \"VirtualMachineExtensionHandlerInstanceView\": {\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/InstanceViewStatus\",\n          \"description\": \"The extension handler status.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine extension handler.\"\n    },\n    \"VirtualMachineAgentInstanceView\": {\n      \"properties\": {\n        \"vmAgentVersion\": {\n          \"type\": \"string\",\n          \"description\": \"The VM Agent full version.\"\n        },\n        \"extensionHandlers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtensionHandlerInstanceView\"\n          },\n          \"description\": \"The virtual machine extension handler instance view.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of the VM Agent running on the virtual machine.\"\n    },\n    \"DiskInstanceView\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"encryptionSettings\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DiskEncryptionSettings\"\n          },\n          \"description\": \"Specifies the encryption settings for the OS Disk. <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of the disk.\"\n    },\n    \"BootDiagnosticsInstanceView\": {\n      \"properties\": {\n        \"consoleScreenshotBlobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The console screenshot blob URI.\"\n        },\n        \"serialConsoleLogBlobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The Linux serial console log blob Uri.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine boot diagnostics.\"\n    },\n    \"VirtualMachineIdentity\": {\n      \"properties\": {\n        \"principalId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The principal id of virtual machine identity. This property will only be provided for a system assigned identity.\"\n        },\n        \"tenantId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The tenant id associated with the virtual machine. This property will only be provided for a system assigned identity.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of identity used for the virtual machine. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine.\",\n          \"enum\": [\n            \"SystemAssigned\",\n            \"UserAssigned\",\n            \"SystemAssigned, UserAssigned\",\n            \"None\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": false\n          }\n        },\n        \"identityIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The list of user identities associated with the Virtual Machine. The user identity references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'.\"\n        }\n      },\n      \"description\": \"Identity for the virtual machine.\"\n    },\n    \"MaintenanceRedeployStatus\": {\n      \"properties\": {\n        \"isCustomerInitiatedMaintenanceAllowed\": {\n          \"type\": \"boolean\",\n          \"description\": \"True, if customer is allowed to perform Maintenance.\"\n        },\n        \"preMaintenanceWindowStartTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start Time for the Pre Maintenance Window.\"\n        },\n        \"preMaintenanceWindowEndTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End Time for the Pre Maintenance Window.\"\n        },\n        \"maintenanceWindowStartTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start Time for the Maintenance Window.\"\n        },\n        \"maintenanceWindowEndTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End Time for the Maintenance Window.\"\n        },\n        \"lastOperationResultCode\": {\n          \"type\": \"string\",\n          \"description\": \"The Last Maintenance Operation Result Code.\",\n          \"enum\": [\n            \"None\",\n            \"RetryLater\",\n            \"MaintenanceAborted\",\n            \"MaintenanceCompleted\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"MaintenanceOperationResultCodeTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastOperationMessage\": {\n          \"type\": \"string\",\n          \"description\": \"Message returned for the last Maintenance Operation.\"\n        }\n      },\n      \"description\": \"Maintenance Operation Status.\"\n    },\n    \"VirtualMachineInstanceView\": {\n      \"properties\": {\n        \"platformUpdateDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the update domain of the virtual machine.\"\n        },\n        \"platformFaultDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the fault domain of the virtual machine.\"\n        },\n        \"computerName\": {\n          \"type\": \"string\",\n          \"description\": \"The computer name assigned to the virtual machine.\"\n        },\n        \"osName\": {\n          \"type\": \"string\",\n          \"description\": \"The Operating System running on the virtual machine.\"\n        },\n        \"osVersion\": {\n          \"type\": \"string\",\n          \"description\": \"The version of Operating System running on the virtual machine.\"\n        },\n        \"rdpThumbPrint\": {\n          \"type\": \"string\",\n          \"description\": \"The Remote desktop certificate thumbprint.\"\n        },\n        \"vmAgent\": {\n          \"$ref\": \"#/definitions/VirtualMachineAgentInstanceView\",\n          \"description\": \"The VM Agent running on the virtual machine.\"\n        },\n        \"maintenanceRedeployStatus\": {\n          \"$ref\": \"#/definitions/MaintenanceRedeployStatus\",\n          \"description\": \"The Maintenance Operation status on the virtual machine.\"\n        },\n        \"disks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DiskInstanceView\"\n          },\n          \"description\": \"The virtual machine disk information.\"\n        },\n        \"extensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtensionInstanceView\"\n          },\n          \"description\": \"The extensions information.\"\n        },\n        \"bootDiagnostics\": {\n          \"$ref\": \"#/definitions/BootDiagnosticsInstanceView\",\n          \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine.\"\n    },\n    \"VirtualMachineProperties\": {\n      \"properties\": {\n        \"hardwareProfile\": {\n          \"$ref\": \"#/definitions/HardwareProfile\",\n          \"description\": \"Specifies the hardware settings for the virtual machine.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/StorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/OSProfile\",\n          \"description\": \"Specifies the operating system settings for the virtual machine.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/NetworkProfile\",\n          \"description\": \"Specifies the network interfaces of the virtual machine.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n        },\n        \"availabilitySet\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Manage the availability of virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> For more information on Azure planned maintainance, see [Planned maintenance for virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"instanceView\": {\n          \"$ref\": \"#/definitions/VirtualMachineInstanceView\",\n          \"readOnly\": true,\n          \"description\": \"The virtual machine instance view.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies that the image or disk that is being used was licensed on-premises. This element is only used for images that contain the Windows Server operating system. <br><br> Possible values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this element is included in a request for an update, the value must match the initial value. This value cannot be updated. <br><br> For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"vmId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Specifies the VM unique ID which is a 128-bits identifier that is encoded and stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine.\"\n    },\n    \"VirtualMachine\": {\n      \"properties\": {\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineProperties\"\n        },\n        \"resources\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtension\"\n          },\n          \"description\": \"The virtual machine child extension resources.\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineIdentity\",\n          \"description\": \"The identity of the virtual machine, if configured.\"\n        },\n        \"zones\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine zones.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine.\"\n    },\n    \"VirtualMachineUpdate\": {\n      \"properties\": {\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineProperties\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineIdentity\",\n          \"description\": \"The identity of the virtual machine, if configured.\"\n        },\n        \"zones\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine zones.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Update.\"\n    },\n    \"VirtualMachineListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachine\"\n          },\n          \"description\": \"The list of virtual machines.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch the next page of Virtual Machines.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The sku name.\"\n        },\n        \"tier\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the tier of virtual machines in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br /><br /> **Basic**\"\n        },\n        \"capacity\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"Specifies the number of virtual machines in the scale set.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set sku.\"\n    },\n    \"AutoOSUpgradePolicy\": {\n      \"properties\": {\n        \"disableAutoRollback\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether OS image rollback feature should be disabled. Default value is false.\"\n        }\n      },\n      \"description\": \"The configuration parameters used for performing automatic OS upgrade.\"\n    },\n    \"UpgradePolicy\": {\n      \"properties\": {\n        \"mode\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the mode of an upgrade to virtual machines in the scale set.<br /><br /> Possible values are:<br /><br /> **Manual** - You  control the application of updates to virtual machines in the scale set. You do this by using the manualUpgrade action.<br /><br /> **Automatic** - All virtual machines in the scale set are  automatically updated at the same time.\",\n          \"enum\": [\n            \"Automatic\",\n            \"Manual\",\n            \"Rolling\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UpgradeMode\",\n            \"modelAsString\": false\n          }\n        },\n        \"rollingUpgradePolicy\": {\n          \"$ref\": \"#/definitions/RollingUpgradePolicy\",\n          \"description\": \"The configuration parameters used while performing a rolling upgrade.\"\n        },\n        \"automaticOSUpgrade\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether OS upgrades should automatically be applied to scale set instances in a rolling fashion when a newer version of the image becomes available.\"\n        },\n        \"autoOSUpgradePolicy\": {\n          \"$ref\": \"#/definitions/AutoOSUpgradePolicy\",\n          \"description\": \"Configuration parameters used for performing automatic OS Upgrade.\"\n        }\n      },\n      \"description\": \"Describes an upgrade policy - automatic, manual, or rolling.\"\n    },\n    \"RollingUpgradePolicy\": {\n      \"properties\": {\n        \"maxBatchInstancePercent\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"minimum\": 5,\n          \"maximum\": 100,\n          \"description\": \"The maximum percent of total virtual machine instances that will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum, unhealthy instances in previous or future batches can cause the percentage of instances in a batch to decrease to ensure higher reliability. The default value for this parameter is 20%.\"\n        },\n        \"maxUnhealthyInstancePercent\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"minimum\": 5,\n          \"maximum\": 100,\n          \"description\": \"The maximum percentage of the total virtual machine instances in the scale set that can be simultaneously unhealthy, either as a result of being upgraded, or by being found in an unhealthy state by the virtual machine health checks before the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The default value for this parameter is 20%.\"\n        },\n        \"maxUnhealthyUpgradedInstancePercent\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"minimum\": 0,\n          \"maximum\": 100,\n          \"description\": \"The maximum percentage of upgraded virtual machine instances that can be found to be in an unhealthy state. This check will happen after each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The default value for this parameter is 20%.\"\n        },\n        \"pauseTimeBetweenBatches\": {\n          \"type\": \"string\",\n          \"description\": \"The wait time between completing the update for all virtual machines in one batch and starting the next batch. The time duration should be specified in ISO 8601 format. The default value is 0 seconds (PT0S).\"\n        }\n      },\n      \"description\": \"The configuration parameters used while performing a rolling upgrade.\"\n    },\n    \"ImageOSDisk\": {\n      \"properties\": {\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"This property allows you to specify the type of the OS that is included in the disk if creating a VM from a custom image. <br><br> Possible values are: <br><br> **Windows** <br><br> **Linux**\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"osState\": {\n          \"type\": \"string\",\n          \"description\": \"The OS State.\",\n          \"enum\": [\n            \"Generalized\",\n            \"Specialized\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemStateTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"snapshot\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The snapshot.\"\n        },\n        \"managedDisk\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The managedDisk.\"\n        },\n        \"blobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The Virtual Hard Disk.\"\n        },\n        \"caching\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\",\n          \"enum\": [\n            \"None\",\n            \"ReadOnly\",\n            \"ReadWrite\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"CachingTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS or Premium_LRS.\"\n        }\n      },\n      \"required\": [\n        \"osType\",\n        \"osState\"\n      ],\n      \"description\": \"Describes an Operating System disk.\"\n    },\n    \"ImageDataDisk\": {\n      \"properties\": {\n        \"lun\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        },\n        \"snapshot\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The snapshot.\"\n        },\n        \"managedDisk\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The managedDisk.\"\n        },\n        \"blobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The Virtual Hard Disk.\"\n        },\n        \"caching\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\",\n          \"enum\": [\n            \"None\",\n            \"ReadOnly\",\n            \"ReadWrite\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"CachingTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS or Premium_LRS.\"\n        }\n      },\n      \"required\": [\n        \"lun\"\n      ],\n      \"description\": \"Describes a data disk.\"\n    },\n    \"ImageStorageProfile\": {\n      \"properties\": {\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/ImageOSDisk\",\n          \"description\": \"Specifies information about the operating system disk used by the virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/ImageDataDisk\"\n          },\n          \"description\": \"Specifies the parameters that are used to add a data disk to a virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"zoneResilient\": {\n          \"type\": \"boolean\",\n          \"description\":  \"Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS).\"\n        }\n      },\n      \"description\": \"Describes a storage profile.\"\n    },\n    \"ImageProperties\": {\n      \"properties\": {\n        \"sourceVirtualMachine\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The source virtual machine from which Image is created.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/ImageStorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state.\"\n        }\n      },\n      \"description\": \"Describes the properties of an Image.\"\n    },\n    \"Image\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/ImageProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist.\"\n    },\n    \"ImageUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/ImageProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"The source user image virtual hard disk. Only tags may be updated.\"\n    },\n    \"ImageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Image\"\n          },\n          \"description\": \"The list of Images.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Images. Call ListNext() with this to fetch the next page of Images.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Image operation response.\"\n    },\n    \"VirtualMachineScaleSetIdentity\": {\n      \"properties\": {\n        \"principalId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The principal id of virtual machine scale set identity. This property will only be provided for a system assigned identity.\"\n        },\n        \"tenantId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The tenant id associated with the virtual machine scale set. This property will only be provided for a system assigned identity.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of identity used for the virtual machine scale set. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine scale set.\",\n          \"enum\": [\n            \"SystemAssigned\",\n            \"UserAssigned\",\n            \"SystemAssigned, UserAssigned\",\n            \"None\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": false\n          }\n        },\n        \"identityIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The list of user identities associated with the virtual machine scale set. The user identity references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'.\"\n        }\n      },\n      \"description\": \"Identity for the virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetOSProfile\": {\n      \"properties\": {\n        \"computerNamePrefix\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the computer name prefix for all of the virtual machines in the scale set. Computer name prefixes must be 1 to 15 characters long.\"\n        },\n        \"adminUsername\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the name of the administrator account. <br><br> **Windows-only restriction:** Cannot end in \\\".\\\" <br><br> **Disallowed values:** \\\"administrator\\\", \\\"admin\\\", \\\"user\\\", \\\"user1\\\", \\\"test\\\", \\\"user2\\\", \\\"test1\\\", \\\"user3\\\", \\\"admin1\\\", \\\"1\\\", \\\"123\\\", \\\"a\\\", \\\"actuser\\\", \\\"adm\\\", \\\"admin2\\\", \\\"aspnet\\\", \\\"backup\\\", \\\"console\\\", \\\"david\\\", \\\"guest\\\", \\\"john\\\", \\\"owner\\\", \\\"root\\\", \\\"server\\\", \\\"sql\\\", \\\"support\\\", \\\"support_388945a0\\\", \\\"sys\\\", \\\"test2\\\", \\\"test3\\\", \\\"user4\\\", \\\"user5\\\". <br><br> **Minimum-length (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root access to the Linux VM, see [Using root privileges on Linux virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li> For a list of built-in system users on Linux that should not be used in this field, see [Selecting User Names for Linux on Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"adminPassword\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the password of the administrator account. <br><br> **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has lower characters <br>Has upper characters <br> Has a digit <br> Has a special character (Regex match [\\\\W_]) <br><br> **Disallowed values:** \\\"abc@123\\\", \\\"P@$$w0rd\\\", \\\"P@ssw0rd\\\", \\\"P@ssword123\\\", \\\"Pa$$word\\\", \\\"pass@word1\\\", \\\"Password!\\\", \\\"Password1\\\", \\\"Password22\\\", \\\"iloveyou!\\\" <br><br> For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)\"\n        },\n        \"customData\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. <br><br> For using cloud-init for your VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"windowsConfiguration\": {\n          \"$ref\": \"#/definitions/WindowsConfiguration\",\n          \"description\": \"Specifies Windows operating system settings on the virtual machine.\"\n        },\n        \"linuxConfiguration\": {\n          \"$ref\": \"#/definitions/LinuxConfiguration\",\n          \"description\": \"Specifies the Linux operating system settings on the virtual machine. <br><br>For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json) <br><br> For running non-endorsed distributions, see [Information for Non-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n        },\n        \"secrets\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultSecretGroup\"\n          },\n          \"description\": \"Specifies set of certificates that should be installed onto the virtual machines in the scale set.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set OS profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateOSProfile\": {\n      \"properties\": {\n        \"customData\": {\n          \"type\": \"string\",\n          \"description\": \"A base-64 encoded string of custom data.\"\n        },\n        \"windowsConfiguration\": {\n          \"$ref\": \"#/definitions/WindowsConfiguration\",\n          \"description\": \"The Windows Configuration of the OS profile.\"\n        },\n        \"linuxConfiguration\": {\n          \"$ref\": \"#/definitions/LinuxConfiguration\",\n          \"description\": \"The Linux Configuration of the OS profile.\"\n        },\n        \"secrets\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultSecretGroup\"\n          },\n          \"description\": \"The List of certificates for addition to the VM.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set OS profile.\"\n    },\n    \"VirtualMachineScaleSetManagedDiskParameters\": {\n      \"properties\": {\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS or Premium_LRS.\"\n        }\n      },\n      \"description\": \"Describes the parameters of a ScaleSet managed disk.\"\n    },\n    \"VirtualMachineScaleSetOSDisk\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"Specifies how the virtual machines in the scale set should be created.<br><br> The only allowed value is: **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\"\n        },\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. <br><br> Possible values are: <br><br> **Windows** <br><br> **Linux**\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"Specifies information about the unmanaged user image to base the scale set on.\"\n        },\n        \"vhdContainers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Specifies the container urls that are used to store operating system disks for the scale set.\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"createOption\"\n      ],\n      \"description\": \"Describes a virtual machine scale set operating system disk.\"\n    },\n    \"VirtualMachineScaleSetUpdateOSDisk\": {\n      \"properties\": {\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"The caching type.\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before using it to attach to the Virtual Machine. If SourceImage is provided, the destination VirtualHardDisk should not exist.\"\n        },\n        \"vhdContainers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The list of virtual hard disk container uris.\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetManagedDiskParameters\"\n        }\n      },\n      \"description\": \"Describes virtual machine scale set operating system disk Update Object. This should be used for Updating VMSS OS Disk.\"\n    },\n    \"VirtualMachineScaleSetDataDisk\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"lun\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"The create option.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"lun\",\n        \"createOption\"\n      ],\n      \"description\": \"Describes a virtual machine scale set data disk.\"\n    },\n    \"VirtualMachineScaleSetStorageProfile\": {\n      \"properties\": {\n        \"imageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"description\": \"Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations.\"\n        },\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetOSDisk\",\n          \"description\": \"Specifies information about the operating system disk used by the virtual machines in the scale set. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetDataDisk\"\n          },\n          \"description\": \"Specifies the parameters that are used to add data disks to the virtual machines in the scale set. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set storage profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateStorageProfile\": {\n      \"properties\": {\n        \"imageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"description\": \"The image reference.\"\n        },\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateOSDisk\",\n          \"description\": \"The OS disk.\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetDataDisk\"\n          },\n          \"description\": \"The data disks.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set storage profile.\"\n    },\n    \"ApiEntityReference\": {\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"The ARM resource id in the form of /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/...\"\n        }\n      },\n      \"description\": \"The API entity reference.\"\n    },\n    \"VirtualMachineScaleSetIPConfigurationProperties\": {\n      \"properties\": {\n        \"subnet\": {\n          \"$ref\": \"#/definitions/ApiEntityReference\",\n          \"description\": \"Specifies the identifier of the subnet.\"\n        },\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary network interface in case the virtual machine has more than 1 network interface.\"\n        },\n        \"publicIPAddressConfiguration\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfiguration\",\n          \"description\": \"The publicIPAddressConfiguration.\"\n        },\n        \"privateIPAddressVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible values are: 'IPv4' and 'IPv6'.\",\n          \"enum\": [\n            \"IPv4\",\n            \"IPv6\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"IPVersion\",\n            \"modelAsString\": true\n          }\n        },\n        \"applicationGatewayBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"Specifies an array of references to backend address pools of application gateways. A scale set can reference backend address pools of multiple application gateways. Multiple scale sets cannot use the same application gateway.\"\n        },\n        \"loadBalancerBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"Specifies an array of references to backend address pools of load balancers. A scale set can reference backend address pools of one public and one internal load balancer. Multiple scale sets cannot use the same load balancer.\"\n        },\n        \"loadBalancerInboundNatPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"Specifies an array of references to inbound Nat pools of the load balancers. A scale set can reference inbound nat pools of one public and one internal load balancer. Multiple scale sets cannot use the same load balancer\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration properties.\"\n    },\n    \"VirtualMachineScaleSetUpdateIPConfigurationProperties\": {\n      \"properties\": {\n        \"subnet\": {\n          \"$ref\": \"#/definitions/ApiEntityReference\",\n          \"description\": \"The subnet.\"\n        },\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary IP Configuration in case the network interface has more than one IP Configuration.\"\n        },\n        \"publicIPAddressConfiguration\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdatePublicIPAddressConfiguration\",\n          \"description\": \"The publicIPAddressConfiguration.\"\n        },\n        \"privateIPAddressVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible values are: 'IPv4' and 'IPv6'.\",\n          \"enum\": [\n            \"IPv4\",\n            \"IPv6\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"IPVersion\",\n            \"modelAsString\": true\n          }\n        },\n        \"applicationGatewayBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"The application gateway backend address pools.\"\n        },\n        \"loadBalancerBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"The load balancer backend address pools.\"\n        },\n        \"loadBalancerInboundNatPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"The load balancer inbound nat pools.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration properties.\"\n    },\n    \"VirtualMachineScaleSetIPConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The IP configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetIPConfigurationProperties\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration.\"\n    },\n    \"VirtualMachineScaleSetUpdateIPConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The IP configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateIPConfigurationProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration.\"\n    },\n    \"VirtualMachineScaleSetNetworkConfigurationProperties\": {\n      \"properties\": {\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary network interface in case the virtual machine has more than 1 network interface.\"\n        },\n        \"enableAcceleratedNetworking\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the network interface is accelerated networking-enabled.\"\n        },\n        \"networkSecurityGroup\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The network security group.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the network interfaces.\"\n        },\n        \"ipConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetIPConfiguration\"\n          },\n          \"description\": \"Specifies the IP configurations of the network interface.\"\n        },\n        \"enableIPForwarding\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether IP forwarding enabled on this NIC.\"\n        }\n      },\n      \"required\": [\n        \"ipConfigurations\"\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration.\"\n    },\n    \"VirtualMachineScaleSetUpdateNetworkConfigurationProperties\": {\n      \"properties\": {\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether this is a primary NIC on a virtual machine.\"\n        },\n        \"enableAcceleratedNetworking\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the network interface is accelerated networking-enabled.\"\n        },\n        \"networkSecurityGroup\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The network security group.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the network interfaces.\"\n        },\n        \"ipConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateIPConfiguration\"\n          },\n          \"description\": \"The virtual machine scale set IP Configuration.\"\n        },\n        \"enableIPForwarding\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether IP forwarding enabled on this NIC.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set updatable network profile's IP configuration.Use this object for updating network profile's IP Configuration.\"\n    },\n    \"VirtualMachineScaleSetNetworkConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The network configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfigurationProperties\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's network configurations.\"\n    },\n    \"VirtualMachineScaleSetUpdateNetworkConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The network configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateNetworkConfigurationProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's network configurations.\"\n    },\n    \"VirtualMachineScaleSetNetworkConfigurationDnsSettings\": {\n      \"properties\": {\n        \"dnsServers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"List of DNS servers IP addresses\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale sets network configuration's DNS settings.\"\n    },\n    \"VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings\": {\n      \"properties\": {\n        \"domainNameLabel\": {\n          \"type\": \"string\",\n          \"description\": \"The Domain name label.The concatenation of the domain name label and vm index will be the domain name labels of the PublicIPAddress resources that will be created\"\n        }\n      },\n      \"required\": [\n        \"domainNameLabel\"\n      ],\n      \"description\": \"Describes a virtual machines scale sets network configuration's DNS settings.\"\n    },\n    \"VirtualMachineScaleSetPublicIPAddressConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The publicIP address configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfigurationProperties\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetUpdatePublicIPAddressConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The publicIP address configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetPublicIPAddressConfigurationProperties\": {\n      \"properties\": {\n        \"idleTimeoutInMinutes\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The idle timeout of the public IP address.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the publicIP addresses .\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties\": {\n      \"properties\": {\n        \"idleTimeoutInMinutes\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The idle timeout of the public IP address.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the publicIP addresses .\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetNetworkProfile\": {\n      \"properties\": {\n        \"healthProbe\": {\n          \"$ref\": \"#/definitions/ApiEntityReference\",\n          \"description\": \"A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.\"\n        },\n        \"networkInterfaceConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfiguration\"\n          },\n          \"description\": \"The list of network configurations.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateNetworkProfile\": {\n      \"properties\": {\n        \"networkInterfaceConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateNetworkConfiguration\"\n          },\n          \"description\": \"The list of network configurations.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile.\"\n    },\n    \"VirtualMachineScaleSetExtensionProperties\": {\n      \"properties\": {\n        \"forceUpdateTag\": {\n          \"type\": \"string\",\n          \"description\": \"If a value is provided and is different from the previous value, the extension handler will be forced to update even if the extension configuration has not changed.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension handler publisher.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"autoUpgradeMinorVersion\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true.\"\n        },\n        \"settings\": {\n          \"type\": \"object\",\n          \"description\": \"Json formatted public settings for the extension.\"\n        },\n        \"protectedSettings\": {\n          \"type\": \"object\",\n          \"description\": \"The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Scale Set Extension.\"\n    },\n    \"VirtualMachineScaleSetExtension\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResourceReadOnly\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Scale Set Extension.\"\n    },\n    \"VirtualMachineScaleSetExtensionListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n          },\n          \"description\": \"The list of VM scale set extensions.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of VM scale set extensions. Call ListNext() with this to fetch the next page of VM scale set extensions.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List VM scale set extension operation response.\"\n    },\n    \"VirtualMachineScaleSetExtensionProfile\": {\n      \"properties\": {\n        \"extensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n          },\n          \"description\": \"The virtual machine scale set child extension resources.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set extension profile.\"\n    },\n    \"VirtualMachineScaleSetVMProfile\": {\n      \"properties\": {\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetOSProfile\",\n          \"description\": \"Specifies the operating system settings for the virtual machines in the scale set.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetStorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkProfile\",\n          \"description\": \"Specifies properties of the network interfaces of the virtual machines in the scale set.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n        },\n        \"extensionProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionProfile\",\n          \"description\": \"Specifies a collection of settings for extensions installed on virtual machines in the scale set.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies that the image or disk that is being used was licensed on-premises. This element is only used for images that contain the Windows Server operating system. <br><br> Possible values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this element is included in a request for an update, the value must match the initial value. This value cannot be updated. <br><br> For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"priority\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the priority for the virtual machines in the scale set. <br><br>Minimum api-version: 2017-10-30-preview\",\n          \"enum\": [\n            \"Regular\",\n            \"Low\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachinePriorityTypes\",\n            \"modelAsString\": true\n          }\n        },\n        \"evictionPolicy\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the eviction policy for virtual machines in a low priority scale set. <br><br>Minimum api-version: 2017-10-30-preview\",\n          \"enum\": [\n            \"Deallocate\",\n            \"Delete\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachineEvictionPolicyTypes\",\n            \"modelAsString\": true\n          }\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set virtual machine profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateVMProfile\": {\n      \"properties\": {\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateOSProfile\",\n          \"description\": \"The virtual machine scale set OS profile.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateStorageProfile\",\n          \"description\": \"The virtual machine scale set storage profile.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateNetworkProfile\",\n          \"description\": \"The virtual machine scale set network profile.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"The virtual machine scale set diagnostics profile.\"\n        },\n        \"extensionProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionProfile\",\n          \"description\": \"The virtual machine scale set extension profile.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"The license type, which is for bring your own license scenario.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set virtual machine profile.\"\n    },\n    \"VirtualMachineScaleSetProperties\": {\n      \"properties\": {\n        \"upgradePolicy\": {\n          \"$ref\": \"#/definitions/UpgradePolicy\",\n          \"description\": \"The upgrade policy.\"\n        },\n        \"virtualMachineProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetVMProfile\",\n          \"description\": \"The virtual machine profile.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"overprovision\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the Virtual Machine Scale Set should be overprovisioned.\"\n        },\n        \"uniqueId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Specifies the ID which uniquely identifies a Virtual Machine Scale Set.\"\n        },\n        \"singlePlacementGroup\": {\n          \"type\": \"boolean\",\n          \"description\": \"When true this limits the scale set to a single placement group, of max size 100 virtual machines.\"\n        },\n        \"zoneBalance\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether to force stictly even Virtual Machine distribution cross x-zones in case there is zone outage.\"\n        },\n        \"platformFaultDomainCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Fault Domain count for each placement group.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSetUpdateProperties\": {\n      \"properties\": {\n        \"upgradePolicy\": {\n          \"$ref\": \"#/definitions/UpgradePolicy\",\n          \"description\": \"The upgrade policy.\"\n        },\n        \"virtualMachineProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateVMProfile\",\n          \"description\": \"The virtual machine profile.\"\n        },\n        \"overprovision\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the Virtual Machine Scale Set should be overprovisioned.\"\n        },\n        \"singlePlacementGroup\": {\n          \"type\": \"boolean\",\n          \"description\": \"When true this limits the scale set to a single placement group, of max size 100 virtual machines.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSet\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"The virtual machine scale set sku.\"\n        },\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetProperties\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetIdentity\",\n          \"description\": \"The identity of the virtual machine scale set, if configured.\"\n        },\n        \"zones\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine scale set zones.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSetUpdate\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"The virtual machine scale set sku.\"\n        },\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"The purchase plan when deploying a virtual machine scale set from VM Marketplace images.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateProperties\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetIdentity\",\n          \"description\": \"The identity of the virtual machine scale set, if configured.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSetVMInstanceIDs\": {\n      \"properties\": {\n        \"instanceIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine scale set instance ids. Omitting the virtual machine scale set instance ids will result in the operation being performed on all virtual machines in the virtual machine scale set.\"\n        }\n      },\n      \"description\": \"Specifies a list of virtual machine instance IDs from the VM scale set.\"\n    },\n    \"VirtualMachineScaleSetVMInstanceRequiredIDs\": {\n      \"properties\": {\n        \"instanceIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine scale set instance ids.\"\n        }\n      },\n      \"required\": [\n        \"instanceIds\"\n      ],\n      \"description\": \"Specifies a list of virtual machine instance IDs from the VM scale set.\"\n    },\n    \"VirtualMachineStatusCodeCount\": {\n      \"properties\": {\n        \"code\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The instance view status code.\"\n        },\n        \"count\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances having a particular status code.\"\n        }\n      },\n      \"description\": \"The status code and count of the virtual machine scale set instance view status summary.\"\n    },\n    \"VirtualMachineScaleSetInstanceViewStatusesSummary\": {\n      \"properties\": {\n        \"statusesSummary\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineStatusCodeCount\"\n          },\n          \"description\": \"The extensions information.\"\n        }\n      },\n      \"description\": \"Instance view statuses summary for virtual machines of a virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetVMExtensionsSummary\": {\n      \"properties\": {\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The extension name.\"\n        },\n        \"statusesSummary\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineStatusCodeCount\"\n          },\n          \"description\": \"The extensions information.\"\n        }\n      },\n      \"description\": \"Extensions summary for virtual machines of a virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetInstanceView\": {\n      \"properties\": {\n        \"virtualMachine\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetInstanceViewStatusesSummary\",\n          \"readOnly\": true,\n          \"description\": \"The instance view status summary for the virtual machine scale set.\"\n        },\n        \"extensions\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetVMExtensionsSummary\"\n          },\n          \"description\": \"The extensions information.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n          },\n          \"description\": \"The list of virtual machine scale sets.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of VMSS.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"VirtualMachineScaleSetListWithLinkResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n          },\n          \"description\": \"The list of virtual machine scale sets.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of Virtual Machine Scale Sets.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"VirtualMachineScaleSetSkuCapacity\": {\n      \"properties\": {\n        \"minimum\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The minimum capacity.\"\n        },\n        \"maximum\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The maximum capacity that can be set.\"\n        },\n        \"defaultCapacity\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The default capacity.\"\n        },\n        \"scaleType\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The scale type applicable to the sku.\",\n          \"enum\": [\n            \"Automatic\",\n            \"None\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachineScaleSetSkuScaleType\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"Describes scaling information of a sku.\"\n    },\n    \"VirtualMachineScaleSetSku\": {\n      \"properties\": {\n        \"resourceType\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The type of resource the sku applies to.\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"The Sku.\"\n        },\n        \"capacity\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetSkuCapacity\",\n          \"readOnly\": true,\n          \"description\": \"Specifies the number of virtual machines in the scale set.\"\n        }\n      },\n      \"description\": \"Describes an available virtual machine scale set sku.\"\n    },\n    \"VirtualMachineScaleSetListSkusResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetSku\"\n          },\n          \"description\": \"The list of skus available for the virtual machine scale set.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Set Skus. Call ListNext() with this to fetch the next page of VMSS Skus.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The Virtual Machine Scale Set List Skus operation response.\"\n    },\n    \"RollbackStatusInfo\": {\n      \"properties\":{\n        \"successfullyRolledbackInstanceCount\" : {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances which have been successfully rolled back.\"\n        },\n        \"failedRolledbackInstanceCount\" : {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances which failed to rollback.\"\n        },\n        \"rollbackError\" : {\n          \"$ref\": \"#/definitions/ApiError\",\n          \"readOnly\": true,\n          \"description\": \"Error details if OS rollback failed.\"\n        }\n      },\n      \"description\": \"Information about rollback on failed VM instances after a OS Upgrade operation.\"\n    },\n    \"UpgradeOperationHistoryStatus\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"Code indicating the current status of the upgrade.\",\n          \"enum\": [\n            \"RollingForward\",\n            \"Cancelled\",\n            \"Completed\",\n            \"Faulted\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UpgradeState\",\n            \"modelAsString\": false\n          }\n        },\n        \"startTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start time of the upgrade.\"\n        },\n        \"endTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End time of the upgrade.\"\n        }\n      },\n      \"description\": \"Information about the current running state of the overall upgrade.\"\n    },\n    \"UpgradeOperationHistoricalStatusInfoProperties\": {\n      \"properties\": {\n        \"runningStatus\": {\n          \"$ref\": \"#/definitions/UpgradeOperationHistoryStatus\",\n          \"readOnly\": true,\n          \"description\": \"Information about the overall status of the upgrade operation.\"\n        },\n        \"progress\": {\n          \"$ref\": \"#/definitions/RollingUpgradeProgressInfo\",\n          \"readOnly\": true,\n          \"description\": \"Counts of the VM's in each state.\"\n        },\n        \"error\": {\n          \"$ref\": \"#/definitions/ApiError\",\n          \"readOnly\": true,\n          \"description\": \"Error Details for this upgrade if there are any.\"\n        },\n        \"startedBy\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Invoker of the Upgrade Operation\",\n          \"enum\": [\n            \"Unknown\",\n            \"User\",\n            \"Platform\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UpgradeOperationInvoker\",\n            \"modelAsString\": false\n          }\n        },\n        \"targetImageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"readOnly\": true,\n          \"description\": \"Image Reference details\"\n        },\n        \"rollbackInfo\": {\n          \"$ref\": \"#/definitions/RollbackStatusInfo\",\n          \"readOnly\": true,\n          \"description\": \"Information about OS rollback if performed\"\n        }\n      },\n      \"description\": \"Describes each OS upgrade on the Virtual Machine Scale Set.\"\n    },\n    \"UpgradeOperationHistoricalStatusInfo\": {\n      \"properties\": {\n        \"properties\": {\n          \"$ref\": \"#/definitions/UpgradeOperationHistoricalStatusInfoProperties\",\n          \"readOnly\": true,\n          \"description\": \"Information about the properties of the upgrade operation.\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        }\n      },\n      \"description\": \"Virtual Machine Scale Set OS Upgrade History operation response.\"\n    },\n    \"VirtualMachineScaleSetListOSUpgradeHistory\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/UpgradeOperationHistoricalStatusInfo\"\n          },\n          \"description\": \"The list of OS upgrades performed on the virtual machine scale set.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of OS Upgrade History. Call ListNext() with this to fetch the next page of history of upgrades.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"List of Virtual Machine Scale Set OS Upgrade History operation response.\"\n    },\n    \"VirtualMachineScaleSetVMProperties\": {\n      \"properties\": {\n        \"latestModelApplied\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the latest model has been applied to the virtual machine.\"\n        },\n        \"vmId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Azure VM unique ID.\"\n        },\n        \"instanceView\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceView\",\n          \"readOnly\": true,\n          \"description\": \"The virtual machine instance view.\"\n        },\n        \"hardwareProfile\": {\n          \"$ref\": \"#/definitions/HardwareProfile\",\n          \"description\": \"Specifies the hardware settings for the virtual machine.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/StorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/OSProfile\",\n          \"description\": \"Specifies the operating system settings for the virtual machine.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/NetworkProfile\",\n          \"description\": \"Specifies the network interfaces of the virtual machine.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n        },\n        \"availabilitySet\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Manage the availability of virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> For more information on Azure planned maintainance, see [Planned maintenance for virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies that the image or disk that is being used was licensed on-premises. This element is only used for images that contain the Windows Server operating system. <br><br> Possible values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this element is included in a request for an update, the value must match the initial value. This value cannot be updated. <br><br> For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Minimum api-version: 2015-06-15\"\n        }\n      },\n      \"description\": \"Describes the properties of a virtual machine scale set virtual machine.\"\n    },\n    \"VirtualMachineScaleSetVM\": {\n      \"properties\": {\n        \"instanceId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The virtual machine instance ID.\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"The virtual machine SKU.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetVMProperties\"\n        },\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"resources\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtension\"\n          },\n          \"description\": \"The virtual machine child extension resources.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set virtual machine.\"\n    },\n    \"VirtualMachineScaleSetVMInstanceView\": {\n      \"properties\": {\n        \"platformUpdateDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The Update Domain count.\"\n        },\n        \"platformFaultDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The Fault Domain count.\"\n        },\n        \"rdpThumbPrint\": {\n          \"type\": \"string\",\n          \"description\": \"The Remote desktop certificate thumbprint.\"\n        },\n        \"vmAgent\": {\n          \"$ref\": \"#/definitions/VirtualMachineAgentInstanceView\",\n          \"description\": \"The VM Agent running on the virtual machine.\"\n        },\n        \"maintenanceRedeployStatus\": {\n          \"$ref\": \"#/definitions/MaintenanceRedeployStatus\",\n          \"description\": \"The Maintenance Operation status on the virtual machine.\"\n        },\n        \"disks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DiskInstanceView\"\n          },\n          \"description\": \"The disks information.\"\n        },\n        \"extensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtensionInstanceView\"\n          },\n          \"description\": \"The extensions information.\"\n        },\n        \"vmHealth\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/VirtualMachineHealthStatus\",\n          \"description\": \"The health status for the VM.\"\n        },\n        \"bootDiagnostics\": {\n          \"$ref\": \"#/definitions/BootDiagnosticsInstanceView\",\n          \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        },\n        \"placementGroupId\": {\n          \"type\": \"string\",\n          \"description\": \"The placement group in which the VM is running. If the VM is deallocated it will not have a placementGroupId.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine scale set VM.\"\n    },\n    \"VirtualMachineHealthStatus\": {\n      \"properties\": {\n        \"status\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/InstanceViewStatus\",\n          \"description\": \"The health status information for the VM.\"\n        }\n      },\n      \"description\": \"The health status of the VM.\"\n    },\n    \"VirtualMachineScaleSetVMListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n          },\n          \"description\": \"The list of virtual machine scale sets VMs.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Set VMs. Call ListNext() with this to fetch the next page of VMSS VMs\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine Scale Set VMs operation response.\"\n    },\n    \"RollingUpgradeStatusInfo\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/RollingUpgradeStatusInfoProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The status of the latest virtual machine scale set rolling upgrade.\"\n    },\n    \"RollingUpgradeStatusInfoProperties\": {\n      \"properties\": {\n        \"policy\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/RollingUpgradePolicy\",\n          \"description\": \"The rolling upgrade policies applied for this upgrade.\"\n        },\n        \"runningStatus\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/RollingUpgradeRunningStatus\",\n          \"description\": \"Information about the current running state of the overall upgrade.\"\n        },\n        \"progress\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/RollingUpgradeProgressInfo\",\n          \"description\": \"Information about the number of virtual machine instances in each upgrade state.\"\n        },\n        \"error\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/ApiError\",\n          \"description\": \"Error details for this upgrade, if there are any.\"\n        }\n      },\n      \"description\": \"The status of the latest virtual machine scale set rolling upgrade.\"\n    },\n    \"RollingUpgradeRunningStatus\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"Code indicating the current status of the upgrade.\",\n          \"enum\": [\n            \"RollingForward\",\n            \"Cancelled\",\n            \"Completed\",\n            \"Faulted\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"RollingUpgradeStatusCode\",\n            \"modelAsString\": false\n          }\n        },\n        \"startTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start time of the upgrade.\"\n        },\n        \"lastAction\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The last action performed on the rolling upgrade.\",\n          \"enum\": [\n            \"Start\",\n            \"Cancel\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"RollingUpgradeActionType\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastActionTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Last action time of the upgrade.\"\n        }\n      },\n      \"description\": \"Information about the current running state of the overall upgrade.\"\n    },\n    \"RollingUpgradeProgressInfo\": {\n      \"properties\": {\n        \"successfulInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that have been successfully upgraded.\"\n        },\n        \"failedInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that have failed to be upgraded successfully.\"\n        },\n        \"inProgressInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that are currently being upgraded.\"\n        },\n        \"pendingInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that have not yet begun to be upgraded.\"\n        }\n      },\n      \"description\": \"Information about the number of virtual machine instances in each upgrade state.\"\n    },\n    \"ApiErrorBase\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The error code.\"\n        },\n        \"target\": {\n          \"type\": \"string\",\n          \"description\": \"The target of the particular error.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The error message.\"\n        }\n      },\n      \"description\": \"Api error base.\"\n    },\n    \"InnerError\": {\n      \"properties\": {\n        \"exceptiontype\": {\n          \"type\": \"string\",\n          \"description\": \"The exception type.\"\n        },\n        \"errordetail\": {\n          \"type\": \"string\",\n          \"description\": \"The internal error message or exception dump.\"\n        }\n      },\n      \"description\": \"Inner error details.\"\n    },\n    \"ApiError\": {\n      \"properties\": {\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/ApiErrorBase\"\n          },\n          \"description\": \"The Api error details\"\n        },\n        \"innererror\": {\n          \"$ref\": \"#/definitions/InnerError\",\n          \"description\": \"The Api inner error\"\n        },\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The error code.\"\n        },\n        \"target\": {\n          \"type\": \"string\",\n          \"description\": \"The target of the particular error.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The error message.\"\n        }\n      },\n      \"description\": \"Api error.\"\n    },\n    \"ComputeLongRunningOperationProperties\": {\n      \"properties\": {\n        \"output\": {\n          \"type\": \"object\",\n          \"description\": \"Operation output data (raw JSON)\"\n        }\n      },\n      \"description\": \"Compute-specific operation properties, including output\"\n    },\n    \"Resource\": {\n      \"description\": \"The Resource model definition.\",\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Resource tags\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ],\n      \"x-ms-azure-resource\": true\n    },\n    \"UpdateResource\": {\n      \"description\": \"The Update Resource model definition.\",\n      \"properties\": {\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Resource tags\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    },\n    \"SubResource\": {\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    },\n    \"SubResourceReadOnly\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    },\n    \"RecoveryWalkResponse\": {\n      \"properties\": {\n        \"walkPerformed\": {\n          \"type\": \"boolean\",\n          \"readOnly\": true,\n          \"description\": \"Whether the recovery walk was performed\"\n        },\n        \"nextPlatformUpdateDomain\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"The next update domain that needs to be walked. Null means walk spanning all update domains has been completed\"\n        }\n      },\n      \"description\": \"Response after calling a manual recovery walk\"\n    },\n    \"OperationStatusResponse\": {\n      \"properties\": {\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Operation ID\"\n        },\n        \"status\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Operation status\"\n        },\n        \"startTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start time of the operation\"\n        },\n        \"endTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End time of the operation\"\n        },\n        \"error\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/ApiError\",\n          \"description\": \"Api error\"\n        }\n      },\n      \"description\": \"Operation status response\"\n    },\n    \"RequestRateByIntervalInput\": {\n      \"properties\": {\n        \"intervalLength\": {\n          \"type\": \"string\",\n          \"description\": \"Interval value in minutes used to create LogAnalytics call rate logs.\",\n          \"enum\": [\n            \"ThreeMins\",\n            \"FiveMins\",\n            \"ThirtyMins\",\n            \"SixtyMins\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"IntervalInMins\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"intervalLength\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/LogAnalyticsInputBase\"\n        }\n      ],\n      \"description\": \"Api request input for LogAnalytics getRequestRateByInterval Api.\"\n    },\n    \"ThrottledRequestsInput\": {\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/LogAnalyticsInputBase\"\n        }\n      ],\n      \"description\": \"Api request input for LogAnalytics getThrottledRequests Api.\"\n    },\n    \"LogAnalyticsInputBase\": {\n      \"properties\": {\n        \"blobContainerSasUri\": {\n          \"type\": \"string\",\n          \"description\": \"SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to.\"\n        },\n        \"fromTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"From time of the query\"\n        },\n        \"toTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"To time of the query\"\n        },\n        \"groupByThrottlePolicy\": {\n          \"type\": \"boolean\",\n          \"description\": \"Group query result by Throttle Policy applied.\"\n        },\n        \"groupByOperationName\": {\n          \"type\": \"boolean\",\n          \"description\": \"Group query result by  by Operation Name.\"\n        },\n        \"groupByResourceName\": {\n          \"type\": \"boolean\",\n          \"description\": \"Group query result by Resource Name.\"\n        }\n      },\n      \"required\": [\n        \"blobContainerSasUri\",\n        \"fromTime\",\n        \"toTime\"\n      ],\n      \"description\": \"Api input base class for LogAnalytics Api.\"\n    },\n    \"LogAnalyticsOperationResult\": {\n      \"properties\": {\n        \"properties\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/LogAnalyticsOutput\",\n          \"description\": \"LogAnalyticsOutput\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/OperationStatusResponse\"\n        }\n      ],\n      \"description\": \"LogAnalytics operation status response\"\n    },\n    \"LogAnalyticsOutput\": {\n      \"properties\": {\n        \"output\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Output file Uri path to blob container.\"\n        }\n      },\n      \"description\": \"LogAnalytics output properties\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/full2/source/Microsoft.Compute/stable/2017-12-01/runCommands.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"RunCommandsClient\",\n    \"description\": \"The Run Commands Client.\",\n    \"version\": \"2017-12-01\"\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"security\": [\n    {\n      \"azure_auth\": [\n        \"user_impersonation\"\n      ]\n    }\n  ],\n  \"securityDefinitions\": {\n    \"azure_auth\": {\n      \"type\": \"oauth2\",\n      \"authorizationUrl\": \"https://login.microsoftonline.com/common/oauth2/authorize\",\n      \"flow\": \"implicit\",\n      \"description\": \"Azure Active Directory OAuth2 Flow\",\n      \"scopes\": {\n        \"user_impersonation\": \"impersonate your user account\"\n      }\n    }\n  },\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineRunCommands\"\n        ],\n        \"operationId\": \"VirtualMachineRunCommands_List\",\n        \"description\": \"Lists all available run commands for a subscription in a location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which run commands is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineRunCommands\"\n        ],\n        \"operationId\": \"VirtualMachineRunCommands_Get\",\n        \"description\": \"Gets specific run command for a subscription in a location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which run commands is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"name\": \"commandId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The command id.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandDocument\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_RunCommand\",\n        \"description\": \"Run command on the VM.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandInput\"\n            },\n            \"description\": \"Parameters supplied to the Run command operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"RunCommandInputParameter\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter name.\"\n        },\n        \"value\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter value.\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"value\"\n      ],\n      \"description\": \"Describes the properties of a run command parameter.\"\n    },\n    \"RunCommandInput\": {\n      \"properties\": {\n        \"commandId\": {\n          \"type\": \"string\",\n          \"description\": \"The run command id.\"\n        },\n        \"script\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Optional. The script to be executed.  When this value is given, the given script will override the default script of the command.\"\n        },\n        \"parameters\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/RunCommandInputParameter\"\n          },\n          \"description\": \"The run command parameters.\"\n        }\n      },\n      \"required\": [\n        \"commandId\"\n      ],\n      \"description\": \"Capture Virtual Machine parameters.\"\n    },\n    \"RunCommandParameterDefinition\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter type.\"\n        },\n        \"defaultValue\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter default value.\"\n        },\n        \"required\": {\n          \"type\": \"boolean\",\n          \"description\": \"The run command parameter required.\",\n          \"default\": false\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"Describes the properties of a run command parameter.\"\n    },\n    \"RunCommandDocumentBase\": {\n      \"properties\": {\n        \"$schema\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command schema.\"\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command id.\"\n        },\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"The Operating System type.\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"label\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command label.\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command description.\"\n        }\n      },\n      \"required\": [\n        \"$schema\",\n        \"id\",\n        \"osType\",\n        \"label\",\n        \"description\"\n      ],\n      \"description\": \"Describes the properties of a Run Command metadata.\"\n    },\n    \"RunCommandDocument\": {\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/RunCommandDocumentBase\"\n        }\n      ],\n      \"properties\": {\n        \"script\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The script to be executed.\"\n        },\n        \"parameters\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/RunCommandParameterDefinition\"\n          },\n          \"description\": \"The parameters used by the script.\"\n        }\n      },\n      \"required\": [\n        \"script\"\n      ],\n      \"description\": \"Describes the properties of a Run Command.\"\n    },\n    \"RunCommandListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/RunCommandDocumentBase\"\n          },\n          \"description\": \"The list of virtual machine run commands.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of run commands. Call ListNext() with this to fetch the next page of run commands.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"RunCommandResultProperties\": {\n      \"properties\": {\n        \"output\": {\n          \"type\": \"object\",\n          \"description\": \"Operation output data (raw JSON)\"\n        }\n      },\n      \"description\": \"Compute-specific operation properties, including output\"\n    },\n    \"RunCommandResult\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/RunCommandResultProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/OperationStatusResponse\"\n        }\n      ],\n      \"description\": \"Run command operation response.\"\n    },\n    \"ApiErrorBase\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The error code.\"\n        },\n        \"target\": {\n          \"type\": \"string\",\n          \"description\": \"The target of the particular error.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The error message.\"\n        }\n      },\n      \"description\": \"Api error base.\"\n    },\n    \"InnerError\": {\n      \"properties\": {\n        \"exceptiontype\": {\n          \"type\": \"string\",\n          \"description\": \"The exception type.\"\n        },\n        \"errordetail\": {\n          \"type\": \"string\",\n          \"description\": \"The internal error message or exception dump.\"\n        }\n      },\n      \"description\": \"Inner error details.\"\n    },\n    \"ApiError\": {\n      \"properties\": {\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/ApiErrorBase\"\n          },\n          \"description\": \"The Api error details\"\n        },\n        \"innererror\": {\n          \"$ref\": \"#/definitions/InnerError\",\n          \"description\": \"The Api inner error\"\n        },\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The error code.\"\n        },\n        \"target\": {\n          \"type\": \"string\",\n          \"description\": \"The target of the particular error.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The error message.\"\n        }\n      },\n      \"description\": \"Api error.\"\n    },\n    \"OperationStatusResponse\": {\n      \"properties\": {\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Operation ID\"\n        },\n        \"status\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Operation status\"\n        },\n        \"startTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start time of the operation\"\n        },\n        \"endTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End time of the operation\"\n        },\n        \"error\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/ApiError\",\n          \"description\": \"Api error\"\n        }\n      },\n      \"description\": \"Operation status response\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/full2/source/readme.md",
    "content": "# Compute\n\n> see https://aka.ms/autorest\n\nThis is the AutoRest configuration file for Compute.\n\n\nThe compute RP comprises of small services where each service has its own tag.\nHence, each sub-service has its own swagger spec.\n\nAll of them are tied together using this configuration and are packaged together into one compute client library.\nThis makes it easier for customers to download one (nuget/npm/pip/maven/gem) compute client library package rather than installing individual packages for each sub service.\n\n\n---\n## Getting Started\nTo build the SDK for Compute, simply [Install AutoRest](https://aka.ms/autorest/install) and in this folder, run:\n\n> `autorest`\n\nTo see additional help and options, run:\n\n> `autorest --help`\n---\n\n## Configuration\n\n\n\n### Basic Information\nThese are the global settings for the Compute API.\n\n``` yaml\ntitle: ComputeManagementClient\ndescription: Compute Client\nopenapi-type: arm\ntag: package-2018-06-exclude-gallery\n\ndirective:\n  - where:\n      - $.definitions.VirtualMachine.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.VirtualMachineScaleSetVM.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.ImageReference.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.ManagedDiskParameters.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.Disk.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.Snapshot.properties\n    suppress:\n      - BodyTopLevelProperties\n\n  - where:\n      - $.definitions.VirtualMachineScaleSetExtension\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineImageResource\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineImage\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.ImageReference\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.ManagedDiskParameters\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.NetworkInterfaceReference\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetIPConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetUpdateIPConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetNetworkConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetUpdateNetworkConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.AvailabilitySetUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineExtensionUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.ImageUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n\n\n  - where:\n      - $.definitions.VirtualMachineScaleSetVM\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineExtensionImage\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.RollingUpgradeStatusInfo\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineImageResource\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineImage\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineImageResource\n    suppress:\n      - TrackedResourceGetOperation\n  - where:\n      - $.definitions.Gallery\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.GalleryImage\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.GalleryImageVersion\n    suppress:\n      - TrackedResourcePatchOperation\n\n```\n### Tag: package-2018-06-exclude-gallery\n\nThese settings apply only when `--tag=package-2018-06-exclude-gallery` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-06-exclude-gallery'\ninput-file:\n- Microsoft.Compute/stable/2018-06-01/compute.json\n- Microsoft.Compute/stable/2018-06-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-2018-06\n\nThese settings apply only when `--tag=package-2018-06` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-06'\ninput-file:\n- Microsoft.Compute/stable/2018-06-01/compute.json\n- Microsoft.Compute/stable/2018-06-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.Compute/stable/2018-06-01/gallery.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-2018-06-01\n\nThese settings apply only when `--tag=package-2018-06-01` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-06-01'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/compute.json\n- Microsoft.Compute/stable/2018-04-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.Compute/stable/2018-06-01/gallery.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-only-2018-06\n\nThese settings apply only when `--tag=package-compute-only-2018-06` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-only-2018-06'\ninput-file:\n- Microsoft.Compute/stable/2018-06-01/compute.json\n- Microsoft.Compute/stable/2018-06-01/runCommands.json\n- Microsoft.Compute/stable/2018-06-01/gallery.json\n```\n\n### Tag: package-2018-04-01\n\nThese settings apply only when `--tag=package-2018-04-01` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-04-01'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/compute.json\n- Microsoft.Compute/stable/2018-04-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-2018-04\n\nThese settings apply only when `--tag=package-2018-04` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-04'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2018-04\n\nThese settings apply only when `--tag=package-compute-2018-04` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2018-04'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/compute.json\n- Microsoft.Compute/stable/2018-04-01/runCommands.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n```\n\n### Tag: package-disks-2018-04\n\nThese settings apply only when `--tag=package-disks-2018-04` is specified on the command line.\n\n``` yaml $(tag) == 'package-disks-2018-04'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/disk.json\n```\n\n### Tag: package-2017-12\n\nThese settings apply only when `--tag=package-2017-12` is specified on the command line.\n\n``` yaml $(tag) == 'package-2017-12'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2017-12\n\nThese settings apply only when `--tag=package-compute-2017-12` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2017-12'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n```\n\n### Tag: package-compute-only-2017-12\n\nThese settings apply only when `--tag=package-compute-only-2017-12` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-only-2017-12'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n```\n\n### Tag: package-skus-2017-09\n\nThese settings apply only when `--tag=package-skus-2017-09` is specified on the command line.\n\n``` yaml $(tag) == 'package-skus-2017-09'\ninput-file:\n- Microsoft.Compute/stable/2017-09-01/skus.json\n```\n\n### Tag: package-2017-03\n\nThese settings apply only when `--tag=package-2017-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-2017-03'\ninput-file:\n- Microsoft.Compute/stable/2017-03-30/compute.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n- Microsoft.Compute/stable/2017-03-30/runCommands.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2017-03\n\nThese settings apply only when `--tag=package-compute-2017-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2017-03'\ninput-file:\n- Microsoft.Compute/stable/2017-03-30/compute.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n- Microsoft.Compute/stable/2017-03-30/runCommands.json\n```\n\n### Tag: package-container-service-2017-01\n\nThese settings apply only when `--tag=package-container-service-2017-01` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2017-01'\ninput-file:\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-container-service-2016-09\n\nThese settings apply only when `--tag=package-container-service-2016-09` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2016-09'\ninput-file:\n- Microsoft.ContainerService/stable/2016-09-30/containerService.json\n```\n\n### Tag: package-2016-04-preview\n\nThese settings apply only when `--tag=package-2016-04-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-2016-04-preview'\ninput-file:\n- Microsoft.Compute/preview/2016-04-30-preview/compute.json\n- Microsoft.Compute/preview/2016-04-30-preview/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2016-04-preview\n\nThese settings apply only when `--tag=package-compute-2016-04-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2016-04-preview'\ninput-file:\n- Microsoft.Compute/preview/2016-04-30-preview/compute.json\n- Microsoft.Compute/preview/2016-04-30-preview/disk.json\n```\n\n### Tag: package-2016-03\n\nThese settings apply only when `--tag=package-2016-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-2016-03'\ninput-file:\n- Microsoft.Compute/stable/2016-03-30/compute.json\n- Microsoft.ContainerService/stable/2016-03-30/containerService.json\n```\n\n### Tag: package-compute-2016-03\n\nThese settings apply only when `--tag=package-compute-2016-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2016-03'\ninput-file:\n- Microsoft.Compute/stable/2016-03-30/compute.json\n```\n\n### Tag: package-container-service-2016-03\n\nThese settings apply only when `--tag=package-container-service-2016-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2016-03'\ninput-file:\n- Microsoft.ContainerService/stable/2016-03-30/containerService.json\n```\n\n### Tag: package-container-service-2015-11-preview\n\nThese setings apply only when `--tag=package-container-service-2015-11-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2015-11-preview'\ninput-file:\n- Microsoft.ContainerService/preview/2015-11-01-preview/containerService.json\n```\n\n### Tag: package-compute-2015-06\n\nThese settings apply only when `--tag=package-compute-2015-06` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2015-06'\ninput-file:\n- Microsoft.Compute/stable/2015-06-15/compute.json\n```\n\n### Tag: package-2015-06-preview\n\nThese settings apply only when `--tag=package-2015-06-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-2015-06-preview'\ninput-file:\n- Microsoft.Compute/stable/2015-06-15/compute.json\n- Microsoft.ContainerService/preview/2015-11-01-preview/containerService.json\n```\n\n\n---\n# Code Generation\n\n\n## Swagger to SDK\n\nThis section describes what SDK should be generated by the automatic system.\nThis is not used by Autorest itself.\n\n``` yaml $(swagger-to-sdk)\nswagger-to-sdk:\n  - repo: azure-sdk-for-python\n    after_scripts:\n      - python ./scripts/multiapi_init_gen.py azure-mgmt-compute\n  - repo: azure-sdk-for-java\n  - repo: azure-sdk-for-go\n  - repo: azure-sdk-for-node\n  - repo: azure-sdk-for-ruby\n    after_scripts:\n      - bundle install && rake arm:regen_all_profiles['azure_mgmt_compute']\n```\n\n## Python\n\nThese settings apply only when `--python` is specified on the command line.\n\n``` yaml $(python)\npython:\n  azure-arm: true\n  license-header: MICROSOFT_MIT_NO_VERSION\n  payload-flattening-threshold: 2\n  package-name: azure-mgmt-compute\n  no-namespace-folders: true\n  clear-output-folder: true\n```\n\n### Python multi-api\n\nGenerate all API versions currently shipped for this package\n\n```yaml $(python) && $(multiapi)\nbatch:\n  - tag: package-compute-only-2018-06\n  - tag: package-compute-2018-04\n  - tag: package-compute-only-2017-12\n  - tag: package-skus-2017-09\n  - tag: package-compute-2017-03\n  - tag: package-compute-2016-04-preview\n  - tag: package-compute-2016-03\n  - tag: package-compute-2015-06\n```\n\n### Tag: package-compute-only-2018-06 and python\n\nThese settings apply only when `--tag=package-compute-only-2018-06 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-only-2018-06' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2018_06_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2018_06_01\n```\n\n### Tag: package-compute-2018-04 and python\n\nThese settings apply only when `--tag=package-compute-2018-04 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2018-04' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2018_04_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2018_04_01\n```\n\n### Tag: package-compute-only-2017-12 and python\n\nThese settings apply only when `--tag=package-compute-only-2017-12 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-only-2017-12' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2017_12_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01\n```\n\n### Tag: package-skus-2017-09 and python\n\nThese settings apply only when `--tag=package-skus-2017-09 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-skus-2017-09' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2017_09_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01\n```\n\n### Tag: package-compute-2017-03 and python\n\nThese settings apply only when `--tag=package-compute-2017-03 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2017-03' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2017_03_30\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30\n```\n\n### Tag: package-compute-2016-04-preview and python\n\nThese settings apply only when `--tag=package-compute-2016-04-preview --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2016-04-preview' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2016_04_30_preview\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2016_04_30_preview\n```\n\n### Tag: package-compute-2016-03 and python\n\nThese settings apply only when `--tag=package-compute-2016-03 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2016-03' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2016_03_30\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30\n```\n\n### Tag: package-compute-2015-06 and python\n\nThese settings apply only when `--tag=package-compute-2015-06 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2015-06' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2015_06_15\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2015_06_15\n```\n\n\n## Java\n\nThese settings apply only when `--java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-libraries-for-java clone>`.\n\n``` yaml $(java)\nazure-arm: true\nfluent: true\nnamespace: com.microsoft.azure.management.compute\nlicense-header: MICROSOFT_MIT_NO_CODEGEN\npayload-flattening-threshold: 1\noutput-folder: $(azure-libraries-for-java-folder)/azure-mgmt-compute\n```\n\n### Java multi-api\n\n```yaml $(java) && $(multiapi)\nbatch:\n  - tag: package-disks-2018-04\n  - tag: package-compute-only-2017-12\n  - tag: package-skus-2017-09\n  - tag: package-compute-2017-03\n```\n\n### Tag: package-disks-2018-04 and java\n\nThese settings apply only when `--tag=package-disks-2018-04 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-disks-2018-04' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2018_04_01\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2018_04_01\nregenerate-manager: true\ngenerate-interface: true\n```\n\n### Tag: package-compute-only-2017-12 and java\n\nThese settings apply only when `--tag=package-compute-only-2017-12 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-compute-only-2017-12' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2017_12_01\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2017_12_01\nregenerate-manager: true\ngenerate-interface: true\n```\n\n### Tag: package-skus-2017-09 and java\n\nThese settings apply only when `--tag=package-skus-2017-09 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-skus-2017-09' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2017_09_01\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2017_09_01\nregenerate-manager: true\ngenerate-interface: true\n```\n\n### Tag: package-compute-2017-03 and java\n\nThese settings apply only when `--tag=package-compute-2017-03 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-compute-2017-03' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2017_03_30\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2017_03_30\nregenerate-manager: true\ngenerate-interface: true\n```"
  },
  {
    "path": "src/test/specs/full2/target/Microsoft.Compute/stable/2018-04-01/compute.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"ComputeManagementClient\",\n    \"description\": \"The Compute Management Client.\",\n    \"version\": \"2018-04-01\"\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"security\": [\n    {\n      \"azure_auth\": [\n        \"user_impersonation\"\n      ]\n    }\n  ],\n  \"securityDefinitions\": {\n    \"azure_auth\": {\n      \"type\": \"oauth2\",\n      \"authorizationUrl\": \"https://login.microsoftonline.com/common/oauth2/authorize\",\n      \"flow\": \"implicit\",\n      \"description\": \"Azure Active Directory OAuth2 Flow\",\n      \"scopes\": {\n        \"user_impersonation\": \"impersonate your user account\"\n      }\n    }\n  },\n  \"paths\": {\n    \"/providers/Microsoft.Compute/operations\": {\n      \"get\": {\n        \"tags\": [\n          \"ComputeOperations\"\n        ],\n        \"operationId\": \"Operations_List\",\n        \"description\": \"Gets a list of compute operations.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ComputeOperationListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}\": {\n      \"put\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_CreateOrUpdate\",\n        \"description\": \"Create or update an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            },\n            \"description\": \"Parameters supplied to the Create Availability Set operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            }\n          }\n        }\n      },\n      \"patch\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_Update\",\n        \"description\": \"Update an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySetUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Availability Set operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_Delete\",\n        \"description\": \"Delete an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        }\n      },\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_Get\",\n        \"description\": \"Retrieves information about an availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySet\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/availabilitySets\": {\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_ListBySubscription\",\n        \"description\": \"Lists all availability sets in a subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySetListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets\": {\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_List\",\n        \"description\": \"Lists all availability sets in a resource group.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AvailabilitySetListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/availabilitySets/{availabilitySetName}/vmSizes\": {\n      \"get\": {\n        \"tags\": [\n          \"AvailabilitySets\"\n        ],\n        \"operationId\": \"AvailabilitySets_ListAvailableSizes\",\n        \"description\": \"Lists all available virtual machine sizes that can be used to create a new virtual machine in an existing availability set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"availabilitySetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the availability set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineSizeListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions/{version}\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensionImages\"\n        ],\n        \"operationId\": \"VirtualMachineExtensionImages_Get\",\n        \"description\": \"Gets a virtual machine extension image.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"type\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"version\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtensionImage\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensionImages\"\n        ],\n        \"operationId\": \"VirtualMachineExtensionImages_ListTypes\",\n        \"description\": \"Gets a list of virtual machine extension image types.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineExtensionImage\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmextension/types/{type}/versions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensionImages\"\n        ],\n        \"operationId\": \"VirtualMachineExtensionImages_ListVersions\",\n        \"description\": \"Gets a list of virtual machine extension image versions.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"type\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\"\n          },\n          {\n            \"name\": \"$filter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The filter to apply on the operation.\"\n          },\n          {\n            \"name\": \"$top\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"$orderby\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineExtensionImage\"\n              }\n            }\n          }\n        },\n        \"x-ms-odata\": \"#/definitions/VirtualMachineExtensionImage\"\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions/{vmExtensionName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_CreateOrUpdate\",\n        \"description\": \"The operation to create or update the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine where the extension should be created or updated.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"name\": \"extensionParameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            },\n            \"description\": \"Parameters supplied to the Create Virtual Machine Extension operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_Update\",\n        \"description\": \"The operation to update the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine where the extension should be updated.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"name\": \"extensionParameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtensionUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Virtual Machine Extension operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_Delete\",\n        \"description\": \"The operation to delete the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine where the extension should be deleted.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_Get\",\n        \"description\": \"The operation to get the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine containing the extension.\"\n          },\n          {\n            \"name\": \"vmExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine extension.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtension\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/extensions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineExtensions_List\",\n        \"description\": \"The operation to get all extensions of a Virtual Machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine containing the extension.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineExtensionsListResult\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions/{version}\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_Get\",\n        \"description\": \"Gets a virtual machine image.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"name\": \"offer\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher offer.\"\n          },\n          {\n            \"name\": \"skus\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image SKU.\"\n          },\n          {\n            \"name\": \"version\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image SKU version.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineImage\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus/{skus}/versions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_List\",\n        \"description\": \"Gets a list of all virtual machine image versions for the specified location, publisher, offer, and SKU.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"name\": \"offer\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher offer.\"\n          },\n          {\n            \"name\": \"skus\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image SKU.\"\n          },\n          {\n            \"name\": \"$filter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The filter to apply on the operation.\"\n          },\n          {\n            \"name\": \"$top\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"integer\",\n            \"format\": \"int32\"\n          },\n          {\n            \"name\": \"$orderby\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        },\n        \"x-ms-odata\": \"#/definitions/VirtualMachineImageResource\"\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_ListOffers\",\n        \"description\": \"Gets a list of virtual machine image offers for the specified location and publisher.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_ListPublishers\",\n        \"description\": \"Gets a list of virtual machine image publishers for the specified Azure location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/publishers/{publisherName}/artifacttypes/vmimage/offers/{offer}/skus\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineImages\"\n        ],\n        \"operationId\": \"VirtualMachineImages_ListSkus\",\n        \"description\": \"Gets a list of virtual machine image SKUs for the specified location, publisher, and offer.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of a supported Azure region.\"\n          },\n          {\n            \"name\": \"publisherName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher.\"\n          },\n          {\n            \"name\": \"offer\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"A valid image publisher offer.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"type\": \"array\",\n              \"items\": {\n                \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n              }\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages\": {\n      \"get\": {\n        \"tags\": [\n          \"Usage\"\n        ],\n        \"operationId\": \"Usage_List\",\n        \"description\": \"Gets, for the specified location, the current compute resource usage information as well as the limits for compute resources under the subscription.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location for which resource usage is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ListUsagesResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/vmSizes\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineSizes\"\n        ],\n        \"operationId\": \"VirtualMachineSizes_List\",\n        \"description\": \"Lists all available virtual machine sizes for a subscription in a location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which virtual-machine-sizes is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineSizeListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}\": {\n      \"put\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_CreateOrUpdate\",\n        \"description\": \"Create or update an image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            },\n            \"description\": \"Parameters supplied to the Create Image operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_Update\",\n        \"description\": \"Update an image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ImageUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Image operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_Delete\",\n        \"description\": \"Deletes an Image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_Get\",\n        \"description\": \"Gets an image.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"imageName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the image.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Image\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images\": {\n      \"get\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_ListByResourceGroup\",\n        \"description\": \"Gets the list of images under a resource group.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ImageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/images\": {\n      \"get\": {\n        \"tags\": [\n          \"Images\"\n        ],\n        \"operationId\": \"Images_List\",\n        \"description\": \"Gets the list of Images in the subscription. Use nextLink property in the response to get the next page of Images. Do this till nextLink is null to fetch all the Images.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ImageListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/capture\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Capture\",\n        \"description\": \"Captures the VM by copying virtual hard disks of the VM and outputs a template that can be used to create similar VMs.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineCaptureParameters\"\n            },\n            \"description\": \"Parameters supplied to the Capture Virtual Machine operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineCaptureResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"location\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_CreateOrUpdate\",\n        \"description\": \"The operation to create or update a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            },\n            \"description\": \"Parameters supplied to the Create Virtual Machine operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Update\",\n        \"description\": \"The operation to update a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineUpdate\"\n            },\n            \"description\": \"Parameters supplied to the Update Virtual Machine operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Delete\",\n        \"description\": \"The operation to delete a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Get\",\n        \"description\": \"Retrieves information about the model view or the instance view of a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\",\n            \"enum\": [\n              \"instanceView\"\n            ],\n            \"x-ms-enum\": {\n              \"name\": \"InstanceViewTypes\",\n              \"modelAsString\": false\n            }\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachine\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/instanceView\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_InstanceView\",\n        \"description\": \"Retrieves information about the run-time state of a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineInstanceView\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/convertToManagedDisks\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_ConvertToManagedDisks\",\n        \"description\": \"Converts virtual machine disks from blob-based to managed disks. Virtual machine must be stop-deallocated before invoking this operation.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/deallocate\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Deallocate\",\n        \"description\": \"Shuts down the virtual machine and releases the compute resources. You are not billed for the compute resources that this virtual machine uses.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/generalize\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Generalize\",\n        \"description\": \"Sets the state of the virtual machine to generalized.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_List\",\n        \"description\": \"Lists all of the virtual machines in the specified resource group. Use the nextLink property in the response to get the next page of virtual machines.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachines\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_ListAll\",\n        \"description\": \"Lists all of the virtual machines in the specified subscription. Use the nextLink property in the response to get the next page of virtual machines.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/vmSizes\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_ListAvailableSizes\",\n        \"description\": \"Lists all available virtual machine sizes to which the specified virtual machine can be resized.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineSizeListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": null\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/powerOff\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_PowerOff\",\n        \"description\": \"The operation to power off (stop) a virtual machine. The virtual machine can be restarted with the same provisioned resources. You are still charged for this virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/restart\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Restart\",\n        \"description\": \"The operation to restart a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/start\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Start\",\n        \"description\": \"The operation to start a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/redeploy\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_Redeploy\",\n        \"description\": \"The operation to redeploy a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/performMaintenance\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_PerformMaintenance\",\n        \"description\": \"The operation to perform maintenance on a virtual machine.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_CreateOrUpdate\",\n        \"description\": \"Create or update a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set to create or update.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            },\n            \"description\": \"The scale set object.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Update\",\n        \"description\": \"Update a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set to create or update.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdate\"\n            },\n            \"description\": \"The scale set object.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Delete\",\n        \"description\": \"Deletes a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Get\",\n        \"description\": \"Display information about a virtual machine scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/deallocate\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Deallocate\",\n        \"description\": \"Deallocates specific virtual machines in a VM scale set. Shuts down the virtual machines and releases the compute resources. You are not billed for the compute resources that this virtual machine scale set deallocates.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/delete\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_DeleteInstances\",\n        \"description\": \"Deletes virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceRequiredIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/instanceView\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_GetInstanceView\",\n        \"description\": \"Gets the status of a VM scale set instance.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetInstanceView\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_List\",\n        \"description\": \"Gets a list of all VM scale sets under a resource group.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions/{vmssExtensionName}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_CreateOrUpdate\",\n        \"description\": \"The operation to create or update an extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set where the extension should be create or updated.\"\n          },\n          {\n            \"name\": \"vmssExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set extension.\"\n          },\n          {\n            \"name\": \"extensionParameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            },\n            \"description\": \"Parameters supplied to the Create VM scale set Extension operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            }\n          },\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_Delete\",\n        \"description\": \"The operation to delete the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set where the extension should be deleted.\"\n          },\n          {\n            \"name\": \"vmssExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set extension.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_Get\",\n        \"description\": \"The operation to get the extension.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set containing the extension.\"\n          },\n          {\n            \"name\": \"vmssExtensionName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set extension.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply on the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/extensions\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetExtensions\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetExtensions_List\",\n        \"description\": \"Gets a list of all extensions in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set containing the extension.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/virtualMachineScaleSets\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ListAll\",\n        \"description\": \"Gets a list of all VM Scale Sets in the subscription, regardless of the associated resource group. Use nextLink property in the response to get the next page of VM Scale Sets. Do this till nextLink is null to fetch all the VM Scale Sets.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListWithLinkResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/skus\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ListSkus\",\n        \"description\": \"Gets a list of SKUs available for your VM scale set, including the minimum and maximum VM instances allowed for each SKU.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListSkusResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osUpgradeHistory\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_GetOSUpgradeHistory\",\n        \"description\": \"Gets list of OS upgrades on a VM scale set instance.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetListOSUpgradeHistory\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/poweroff\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_PowerOff\",\n        \"description\": \"Power off (stop) one or more virtual machines in a VM scale set. Note that resources are still attached and you are getting charged for the resources. Instead, use deallocate to release resources and avoid charges.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/restart\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Restart\",\n        \"description\": \"Restarts one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/start\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Start\",\n        \"description\": \"Starts one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/redeploy\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Redeploy\",\n        \"description\": \"Redeploy one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/performMaintenance\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_PerformMaintenance\",\n        \"description\": \"Perform maintenance on one or more virtual machines in a VM scale set. Operation on instances which are not eligible for perform maintenance will be failed. Please refer to best practices for more details: https://docs.microsoft.com/en-us/azure/virtual-machine-scale-sets/virtual-machine-scale-sets-maintenance-notifications\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/manualupgrade\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_UpdateInstances\",\n        \"description\": \"Upgrades one or more virtual machines to the latest SKU set in the VM scale set model.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceRequiredIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimage\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_Reimage\",\n        \"description\": \"Reimages (upgrade the operating system) one or more virtual machines in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/reimageall\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ReimageAll\",\n        \"description\": \"Reimages all the disks ( including data disks ) in the virtual machines in a VM scale set. This operation is only supported for managed disks.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"vmInstanceIDs\",\n            \"in\": \"body\",\n            \"required\": false,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceIDs\"\n            },\n            \"description\": \"A list of virtual machine instance IDs from the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/cancel\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetRollingUpgrades\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetRollingUpgrades_Cancel\",\n        \"description\": \"Cancels the current virtual machine scale set rolling upgrade.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/osRollingUpgrade\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetRollingUpgrades\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetRollingUpgrades_StartOSUpgrade\",\n        \"description\": \"Starts a rolling upgrade to move all virtual machine scale set instances to the latest available Platform Image OS version. Instances which are already running the latest available OS version are not affected.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/rollingUpgrades/latest\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetRollingUpgrades\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetRollingUpgrades_GetLatest\",\n        \"description\": \"Gets the status of the latest virtual machine scale set rolling upgrade.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RollingUpgradeStatusInfo\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/forceRecoveryServiceFabricPlatformUpdateDomainWalk\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSets\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSets_ForceRecoveryServiceFabricPlatformUpdateDomainWalk\",\n        \"description\": \"Manual platform update domain walk to update virtual machines in a service fabric virtual machine scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"name\": \"platformUpdateDomain\",\n            \"in\": \"query\",\n            \"required\": true,\n            \"type\": \"integer\",\n            \"description\": \"The platform update domain for which a manual recovery walk is requested\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RecoveryWalkResponse\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimage\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Reimage\",\n        \"description\": \"Reimages (upgrade the operating system) a specific virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/reimageall\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_ReimageAll\",\n        \"description\": \"Allows you to re-image all the disks ( including data disks ) in the a VM scale set instance. This operation is only supported for managed disks.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/deallocate\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Deallocate\",\n        \"description\": \"Deallocates a specific virtual machine in a VM scale set. Shuts down the virtual machine and releases the compute resources it uses. You are not billed for the compute resources of this virtual machine once it is deallocated.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}\": {\n      \"put\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Update\",\n        \"description\": \"Updates a virtual machine of a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set where the extension should be create or updated.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            },\n            \"description\": \"Parameters supplied to the Update Virtual Machine Scale Sets VM operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"delete\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Delete\",\n        \"description\": \"Deletes a virtual machine from a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"No Content\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Get\",\n        \"description\": \"Gets a virtual machine from a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/instanceView\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_GetInstanceView\",\n        \"description\": \"Gets the status of a virtual machine from a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceView\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{virtualMachineScaleSetName}/virtualMachines\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_List\",\n        \"description\": \"Gets a list of all virtual machines in a VM scale sets.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"virtualMachineScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"$filter\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The filter to apply to the operation.\"\n          },\n          {\n            \"name\": \"$select\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The list parameters.\"\n          },\n          {\n            \"name\": \"$expand\",\n            \"in\": \"query\",\n            \"required\": false,\n            \"type\": \"string\",\n            \"description\": \"The expand expression to apply to the operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/VirtualMachineScaleSetVMListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        },\n        \"x-ms-odata\": \"#/definitions/VirtualMachineScaleSetVM\"\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/poweroff\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_PowerOff\",\n        \"description\": \"Power off (stop) a virtual machine in a VM scale set. Note that resources are still attached and you are getting charged for the resources. Instead, use deallocate to release resources and avoid charges.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/restart\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Restart\",\n        \"description\": \"Restarts a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/start\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Start\",\n        \"description\": \"Starts a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/redeploy\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_Redeploy\",\n        \"description\": \"Redeploys a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/performMaintenance\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_PerformMaintenance\",\n        \"description\": \"Performs maintenance on a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getRequestRateByInterval\": {\n      \"post\": {\n        \"tags\": [\n          \"LogAnalytics\"\n        ],\n        \"operationId\": \"LogAnalytics_ExportRequestRateByInterval\",\n        \"description\": \"Export logs that show Api requests made by this subscription in the given time window to show throttling activities.\",\n        \"parameters\": [\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/RequestRateByIntervalInput\"\n            },\n            \"description\": \"Parameters supplied to the LogAnalytics getRequestRateByInterval Api.\"\n          },\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which virtual-machine-sizes is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/LogAnalyticsOperationResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/logAnalytics/apiAccess/getThrottledRequests\": {\n      \"post\": {\n        \"tags\": [\n          \"LogAnalytics\"\n        ],\n        \"operationId\": \"LogAnalytics_ExportThrottledRequests\",\n        \"description\": \"Export logs that show total throttled Api requests for this subscription in the given time window.\",\n        \"parameters\": [\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/ThrottledRequestsInput\"\n            },\n            \"description\": \"Parameters supplied to the LogAnalytics getThrottledRequests Api.\"\n          },\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which virtual-machine-sizes is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/LogAnalyticsOperationResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\":\"azure-async-operation\"\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"ComputeOperationListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"readOnly\": true,\n          \"items\": {\n            \"$ref\": \"#/definitions/ComputeOperationValue\"\n          },\n          \"description\": \"The list of compute operations\"\n        }\n      },\n      \"description\": \"The List Compute Operation operation response.\"\n    },\n    \"ComputeOperationValue\": {\n      \"properties\": {\n        \"origin\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The origin of the compute operation.\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The name of the compute operation.\"\n        },\n        \"display\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/ComputeOperationValueDisplay\"\n        }\n      },\n      \"description\": \"Describes the properties of a Compute Operation value.\"\n    },\n    \"ComputeOperationValueDisplay\": {\n      \"properties\": {\n        \"operation\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The display name of the compute operation.\"\n        },\n        \"resource\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The display name of the resource the operation applies to.\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The description of the operation.\"\n        },\n        \"provider\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The resource provider for the operation.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Compute Operation Value Display.\"\n    },\n    \"InstanceViewStatus\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The status code.\"\n        },\n        \"level\": {\n          \"type\": \"string\",\n          \"description\": \"The level code.\",\n          \"enum\": [\n            \"Info\",\n            \"Warning\",\n            \"Error\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"StatusLevelTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"displayStatus\": {\n          \"type\": \"string\",\n          \"description\": \"The short localizable label for the status.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The detailed status message, including for alerts and error messages.\"\n        },\n        \"time\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"The time of the status.\"\n        }\n      },\n      \"description\": \"Instance view status.\"\n    },\n    \"AvailabilitySetProperties\": {\n      \"properties\": {\n        \"platformUpdateDomainCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Update Domain count.\"\n        },\n        \"platformFaultDomainCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Fault Domain count.\"\n        },\n        \"virtualMachines\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"A list of references to all virtual machines in the availability set.\"\n        },\n        \"statuses\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a resource.\"\n    },\n    \"AvailabilitySet\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/AvailabilitySetProperties\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Sku of the availability set\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Manage the availability of virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> For more information on Azure planned maintainance, see [Planned maintenance for virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.\"\n    },\n    \"AvailabilitySetUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/AvailabilitySetProperties\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"Sku of the availability set\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Only tags may be updated.\"\n    },\n    \"AvailabilitySetListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/AvailabilitySet\"\n          },\n          \"description\": \"The list of availability sets\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The URI to fetch the next page of AvailabilitySets. Call ListNext() with this URI to fetch the next page of AvailabilitySets.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Availability Set operation response.\"\n    },\n    \"VirtualMachineSize\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the virtual machine size.\"\n        },\n        \"numberOfCores\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of cores supported by the virtual machine size.\"\n        },\n        \"osDiskSizeInMB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The OS disk size, in MB, allowed by the virtual machine size.\"\n        },\n        \"resourceDiskSizeInMB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The resource disk size, in MB, allowed by the virtual machine size.\"\n        },\n        \"memoryInMB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The amount of memory, in MB, supported by the virtual machine size.\"\n        },\n        \"maxDataDiskCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The maximum number of data disks that can be attached to the virtual machine size.\"\n        }\n      },\n      \"description\": \"Describes the properties of a VM size.\"\n    },\n    \"VirtualMachineSizeListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineSize\"\n          },\n          \"description\": \"The list of virtual machine sizes.\"\n        }\n      },\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"VirtualMachineExtensionImageProperties\": {\n      \"properties\": {\n        \"operatingSystem\": {\n          \"type\": \"string\",\n          \"description\": \"The operating system this extension supports.\"\n        },\n        \"computeRole\": {\n          \"type\": \"string\",\n          \"description\": \"The type of role (IaaS or PaaS) this extension supports.\"\n        },\n        \"handlerSchema\": {\n          \"type\": \"string\",\n          \"description\": \"The schema defined by publisher, where extension consumers should provide settings in a matching schema.\"\n        },\n        \"vmScaleSetEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether the extension can be used on xRP VMScaleSets. By default existing extensions are usable on scalesets, but there might be cases where a publisher wants to explicitly indicate the extension is only enabled for CRP VMs but not VMSS.\"\n        },\n        \"supportsMultipleExtensions\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether the handler can support multiple extensions.\"\n        }\n      },\n      \"required\": [\n        \"operatingSystem\",\n        \"computeRole\",\n        \"handlerSchema\"\n      ],\n      \"description\": \"Describes the properties of a Virtual Machine Extension Image.\"\n    },\n    \"VirtualMachineExtensionImage\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineExtensionImageProperties\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"location\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Extension Image.\"\n    },\n    \"VirtualMachineImageResource\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the resource.\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"The supported Azure location of the resource.\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Specifies the tags that are assigned to the virtual machine. For more information about using tags, see [Using tags to organize your Azure resources](https://docs.microsoft.com/azure/azure-resource-manager/resource-group-using-tags.md).\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"location\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Virtual machine image resource information.\"\n    },\n    \"VirtualMachineExtensionInstanceView\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The virtual machine extension name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"substatuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine extension.\"\n    },\n    \"VirtualMachineExtensionProperties\": {\n      \"properties\": {\n        \"forceUpdateTag\": {\n          \"type\": \"string\",\n          \"description\": \"How the extension handler should be forced to update even if the extension configuration has not changed.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension handler publisher.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"autoUpgradeMinorVersion\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true.\"\n        },\n        \"settings\": {\n          \"type\": \"object\",\n          \"description\": \"Json formatted public settings for the extension.\"\n        },\n        \"protectedSettings\": {\n          \"type\": \"object\",\n          \"description\": \"The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"instanceView\": {\n          \"$ref\": \"#/definitions/VirtualMachineExtensionInstanceView\",\n          \"description\": \"The virtual machine extension instance view.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtensionUpdateProperties\": {\n      \"properties\": {\n        \"forceUpdateTag\": {\n          \"type\": \"string\",\n          \"description\": \"How the extension handler should be forced to update even if the extension configuration has not changed.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension handler publisher.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"autoUpgradeMinorVersion\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true.\"\n        },\n        \"settings\": {\n          \"type\": \"object\",\n          \"description\": \"Json formatted public settings for the extension.\"\n        },\n        \"protectedSettings\": {\n          \"type\": \"object\",\n          \"description\": \"The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtension\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineExtensionProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtensionUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineExtensionUpdateProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Extension.\"\n    },\n    \"VirtualMachineExtensionsListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtension\"\n          },\n          \"description\": \"The list of extensions\"\n        }\n      },\n      \"description\": \"The List Extension operation response\"\n    },\n    \"PurchasePlan\": {\n      \"properties\": {\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The publisher ID.\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The plan ID.\"\n        },\n        \"product\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element.\"\n        }\n      },\n      \"required\": [\n        \"publisher\",\n        \"name\",\n        \"product\"\n      ],\n      \"description\": \"Used for establishing the purchase context of any 3rd Party artifact through MarketPlace.\"\n    },\n    \"OSDiskImage\": {\n      \"properties\": {\n        \"operatingSystem\": {\n          \"type\": \"string\",\n          \"description\": \"The operating system of the osDiskImage.\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"operatingSystem\"\n      ],\n      \"description\": \"Contains the os disk image information.\"\n    },\n    \"DataDiskImage\": {\n      \"properties\": {\n        \"lun\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        }\n      },\n      \"description\": \"Contains the data disk images information.\"\n    },\n    \"VirtualMachineImageProperties\": {\n      \"properties\": {\n        \"plan\": {\n          \"$ref\": \"#/definitions/PurchasePlan\"\n        },\n        \"osDiskImage\": {\n          \"$ref\": \"#/definitions/OSDiskImage\"\n        },\n        \"dataDiskImages\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DataDiskImage\"\n          }\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Image.\"\n    },\n    \"VirtualMachineImage\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineImageProperties\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"location\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/VirtualMachineImageResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Image.\"\n    },\n    \"UsageName\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the resource.\"\n        },\n        \"localizedValue\": {\n          \"type\": \"string\",\n          \"description\": \"The localized name of the resource.\"\n        }\n      },\n      \"description\": \"The Usage Names.\"\n    },\n    \"Usage\": {\n      \"properties\": {\n        \"unit\": {\n          \"type\": \"string\",\n          \"description\": \"An enum describing the unit of usage measurement.\",\n          \"enum\": [\n            \"Count\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UsageUnit\",\n            \"modelAsString\": false\n          }\n        },\n        \"currentValue\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The current usage of the resource.\"\n        },\n        \"limit\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The maximum permitted usage of the resource.\"\n        },\n        \"name\": {\n          \"$ref\": \"#/definitions/UsageName\",\n          \"description\": \"The name of the type of usage.\"\n        }\n      },\n      \"required\": [\n        \"unit\",\n        \"currentValue\",\n        \"limit\",\n        \"name\"\n      ],\n      \"description\": \"Describes Compute Resource Usage.\"\n    },\n    \"ListUsagesResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Usage\"\n          },\n          \"description\": \"The list of compute resource usages.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The URI to fetch the next page of compute resource usage information. Call ListNext() with this to fetch the next page of compute resource usage information.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Usages operation response.\"\n    },\n    \"VirtualMachineCaptureParameters\": {\n      \"properties\": {\n        \"vhdPrefix\": {\n          \"type\": \"string\",\n          \"description\": \"The captured virtual hard disk's name prefix.\"\n        },\n        \"destinationContainerName\": {\n          \"type\": \"string\",\n          \"description\": \"The destination container name.\"\n        },\n        \"overwriteVhds\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether to overwrite the destination virtual hard disk, in case of conflict.\"\n        }\n      },\n      \"required\": [\n        \"vhdPrefix\",\n        \"destinationContainerName\",\n        \"overwriteVhds\"\n      ],\n      \"description\": \"Capture Virtual Machine parameters.\"\n    },\n    \"VirtualMachineCaptureResult\": {\n      \"properties\": {\n        \"$schema\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"the schema of the captured virtual machine\"\n        },\n        \"contentVersion\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"the version of the content\"\n        },\n        \"parameters\": {\n          \"readOnly\": true,\n          \"type\": \"object\",\n          \"description\": \"parameters of the captured virtual machine\"\n        },\n        \"resources\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"object\",\n            \"description\": \"resource item\"\n          },\n          \"description\": \"a list of resource items of the captured virtual machine\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Output of virtual machine capture operation.\"\n    },\n    \"Plan\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The plan ID.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The publisher ID.\"\n        },\n        \"product\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the product of the image from the marketplace. This is the same value as Offer under the imageReference element.\"\n        },\n        \"promotionCode\": {\n          \"type\": \"string\",\n          \"description\": \"The promotion code.\"\n        }\n      },\n      \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n    },\n    \"HardwareProfile\": {\n      \"properties\": {\n        \"vmSize\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the size of the virtual machine. For more information about virtual machine sizes, see [Sizes for virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-sizes?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> The available VM sizes depend on region and availability set. For a list of available sizes use these APIs:  <br><br> [List all available virtual machine sizes in an availability set](https://docs.microsoft.com/rest/api/compute/availabilitysets/listavailablesizes) <br><br> [List all available virtual machine sizes in a region](https://docs.microsoft.com/rest/api/compute/virtualmachinesizes/list) <br><br> [List all available virtual machine sizes for resizing](https://docs.microsoft.com/rest/api/compute/virtualmachines/listavailablesizes)\",\n          \"enum\": [\n            \"Basic_A0\",\n            \"Basic_A1\",\n            \"Basic_A2\",\n            \"Basic_A3\",\n            \"Basic_A4\",\n            \"Standard_A0\",\n            \"Standard_A1\",\n            \"Standard_A2\",\n            \"Standard_A3\",\n            \"Standard_A4\",\n            \"Standard_A5\",\n            \"Standard_A6\",\n            \"Standard_A7\",\n            \"Standard_A8\",\n            \"Standard_A9\",\n            \"Standard_A10\",\n            \"Standard_A11\",\n            \"Standard_A1_v2\",\n            \"Standard_A2_v2\",\n            \"Standard_A4_v2\",\n            \"Standard_A8_v2\",\n            \"Standard_A2m_v2\",\n            \"Standard_A4m_v2\",\n            \"Standard_A8m_v2\",\n            \"Standard_B1s\",\n            \"Standard_B1ms\",\n            \"Standard_B2s\",\n            \"Standard_B2ms\",\n            \"Standard_B4ms\",\n            \"Standard_B8ms\",\n            \"Standard_D1\",\n            \"Standard_D2\",\n            \"Standard_D3\",\n            \"Standard_D4\",\n            \"Standard_D11\",\n            \"Standard_D12\",\n            \"Standard_D13\",\n            \"Standard_D14\",\n            \"Standard_D1_v2\",\n            \"Standard_D2_v2\",\n            \"Standard_D3_v2\",\n            \"Standard_D4_v2\",\n            \"Standard_D5_v2\",\n            \"Standard_D2_v3\",\n            \"Standard_D4_v3\",\n            \"Standard_D8_v3\",\n            \"Standard_D16_v3\",\n            \"Standard_D32_v3\",\n            \"Standard_D64_v3\",\n            \"Standard_D2s_v3\",\n            \"Standard_D4s_v3\",\n            \"Standard_D8s_v3\",\n            \"Standard_D16s_v3\",\n            \"Standard_D32s_v3\",\n            \"Standard_D64s_v3\",\n            \"Standard_D11_v2\",\n            \"Standard_D12_v2\",\n            \"Standard_D13_v2\",\n            \"Standard_D14_v2\",\n            \"Standard_D15_v2\",\n            \"Standard_DS1\",\n            \"Standard_DS2\",\n            \"Standard_DS3\",\n            \"Standard_DS4\",\n            \"Standard_DS11\",\n            \"Standard_DS12\",\n            \"Standard_DS13\",\n            \"Standard_DS14\",\n            \"Standard_DS1_v2\",\n            \"Standard_DS2_v2\",\n            \"Standard_DS3_v2\",\n            \"Standard_DS4_v2\",\n            \"Standard_DS5_v2\",\n            \"Standard_DS11_v2\",\n            \"Standard_DS12_v2\",\n            \"Standard_DS13_v2\",\n            \"Standard_DS14_v2\",\n            \"Standard_DS15_v2\",\n            \"Standard_DS13-4_v2\",\n            \"Standard_DS13-2_v2\",\n            \"Standard_DS14-8_v2\",\n            \"Standard_DS14-4_v2\",\n            \"Standard_E2_v3\",\n            \"Standard_E4_v3\",\n            \"Standard_E8_v3\",\n            \"Standard_E16_v3\",\n            \"Standard_E32_v3\",\n            \"Standard_E64_v3\",\n            \"Standard_E2s_v3\",\n            \"Standard_E4s_v3\",\n            \"Standard_E8s_v3\",\n            \"Standard_E16s_v3\",\n            \"Standard_E32s_v3\",\n            \"Standard_E64s_v3\",\n            \"Standard_E32-16_v3\",\n            \"Standard_E32-8s_v3\",\n            \"Standard_E64-32s_v3\",\n            \"Standard_E64-16s_v3\",\n            \"Standard_F1\",\n            \"Standard_F2\",\n            \"Standard_F4\",\n            \"Standard_F8\",\n            \"Standard_F16\",\n            \"Standard_F1s\",\n            \"Standard_F2s\",\n            \"Standard_F4s\",\n            \"Standard_F8s\",\n            \"Standard_F16s\",\n            \"Standard_F2s_v2\",\n            \"Standard_F4s_v2\",\n            \"Standard_F8s_v2\",\n            \"Standard_F16s_v2\",\n            \"Standard_F32s_v2\",\n            \"Standard_F64s_v2\",\n            \"Standard_F72s_v2\",\n            \"Standard_G1\",\n            \"Standard_G2\",\n            \"Standard_G3\",\n            \"Standard_G4\",\n            \"Standard_G5\",\n            \"Standard_GS1\",\n            \"Standard_GS2\",\n            \"Standard_GS3\",\n            \"Standard_GS4\",\n            \"Standard_GS5\",\n            \"Standard_GS4-8\",\n            \"Standard_GS4-4\",\n            \"Standard_GS5-16\",\n            \"Standard_GS5-8\",\n            \"Standard_H8\",\n            \"Standard_H16\",\n            \"Standard_H8m\",\n            \"Standard_H16m\",\n            \"Standard_H16r\",\n            \"Standard_H16mr\",\n            \"Standard_L4s\",\n            \"Standard_L8s\",\n            \"Standard_L16s\",\n            \"Standard_L32s\",\n            \"Standard_M64s\",\n            \"Standard_M64ms\",\n            \"Standard_M128s\",\n            \"Standard_M128ms\",\n            \"Standard_M64-32ms\",\n            \"Standard_M64-16ms\",\n            \"Standard_M128-64ms\",\n            \"Standard_M128-32ms\",\n            \"Standard_NC6\",\n            \"Standard_NC12\",\n            \"Standard_NC24\",\n            \"Standard_NC24r\",\n            \"Standard_NC6s_v2\",\n            \"Standard_NC12s_v2\",\n            \"Standard_NC24s_v2\",\n            \"Standard_NC24rs_v2\",\n            \"Standard_NC6s_v3\",\n            \"Standard_NC12s_v3\",\n            \"Standard_NC24s_v3\",\n            \"Standard_NC24rs_v3\",\n            \"Standard_ND6s\",\n            \"Standard_ND12s\",\n            \"Standard_ND24s\",\n            \"Standard_ND24rs\",\n            \"Standard_NV6\",\n            \"Standard_NV12\",\n            \"Standard_NV24\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachineSizeTypes\",\n            \"modelAsString\": true\n          }\n        }\n      },\n      \"description\": \"Specifies the hardware settings for the virtual machine.\"\n    },\n    \"ImageReference\": {\n      \"properties\": {\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The image publisher.\"\n        },\n        \"offer\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the offer of the platform image or marketplace image used to create the virtual machine.\"\n        },\n        \"sku\": {\n          \"type\": \"string\",\n          \"description\": \"The image SKU.\"\n        },\n        \"version\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the platform image or marketplace image used to create the virtual machine. The allowed formats are Major.Minor.Build or 'latest'. Major, Minor, and Build are decimal numbers. Specify 'latest' to use the latest version of an image available at deploy time. Even if you use 'latest', the VM image will not automatically update after deploy time even if a new version becomes available.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations.\"\n    },\n    \"KeyVaultSecretReference\": {\n      \"properties\": {\n        \"secretUrl\": {\n          \"type\": \"string\",\n          \"description\": \"The URL referencing a secret in a Key Vault.\"\n        },\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The relative URL of the Key Vault containing the secret.\"\n        }\n      },\n      \"required\": [\n        \"secretUrl\",\n        \"sourceVault\"\n      ],\n      \"description\": \"Describes a reference to Key Vault Secret\"\n    },\n    \"KeyVaultKeyReference\": {\n      \"properties\": {\n        \"keyUrl\": {\n          \"type\": \"string\",\n          \"description\": \"The URL referencing a key encryption key in Key Vault.\"\n        },\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The relative URL of the Key Vault containing the key.\"\n        }\n      },\n      \"required\": [\n        \"keyUrl\",\n        \"sourceVault\"\n      ],\n      \"description\": \"Describes a reference to Key Vault Key\"\n    },\n    \"DiskEncryptionSettings\": {\n      \"properties\": {\n        \"diskEncryptionKey\": {\n          \"$ref\": \"#/definitions/KeyVaultSecretReference\",\n          \"description\": \"Specifies the location of the disk encryption key, which is a Key Vault Secret.\"\n        },\n        \"keyEncryptionKey\": {\n          \"$ref\": \"#/definitions/KeyVaultKeyReference\",\n          \"description\": \"Specifies the location of the key encryption key in Key Vault.\"\n        },\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether disk encryption should be enabled on the virtual machine.\"\n        }\n      },\n      \"description\": \"Describes a Encryption Settings for a Disk\"\n    },\n    \"VirtualHardDisk\": {\n      \"properties\": {\n        \"uri\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the virtual hard disk's uri.\"\n        }\n      },\n      \"description\": \"Describes the uri of a disk.\"\n    },\n    \"Caching\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\",\n      \"enum\": [\n        \"None\",\n        \"ReadOnly\",\n        \"ReadWrite\"\n      ],\n      \"x-ms-enum\": {\n        \"name\": \"CachingTypes\",\n        \"modelAsString\": false\n      }\n    },\n    \"CreateOption\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \\\\u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\",\n      \"enum\": [\n        \"FromImage\",\n        \"Empty\",\n        \"Attach\"\n      ],\n      \"x-ms-enum\": {\n        \"name\": \"DiskCreateOptionTypes\",\n        \"modelAsString\": true\n      }\n    },\n    \"StorageAccountType\": {\n      \"type\": \"string\",\n      \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS, Premium_LRS, and StandardSSD_LRS.\",\n      \"enum\": [\n        \"Standard_LRS\",\n        \"Premium_LRS\",\n        \"StandardSSD_LRS\"\n      ],\n      \"x-ms-enum\": {\n        \"name\": \"StorageAccountTypes\",\n        \"modelAsString\": true\n      }\n    },\n    \"ManagedDiskParameters\": {\n      \"properties\": {\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS, Premium_LRS, and StandardSSD_LRS.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"The parameters of a managed disk.\"\n    },\n    \"OSDisk\": {\n      \"properties\": {\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. <br><br> Possible values are: <br><br> **Windows** <br><br> **Linux**\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"encryptionSettings\": {\n          \"$ref\": \"#/definitions/DiskEncryptionSettings\",\n          \"description\": \"Specifies the encryption settings for the OS Disk. <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"vhd\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The virtual hard disk.\"\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \\\\u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/ManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"createOption\"\n      ],\n      \"description\": \"Specifies information about the operating system disk used by the virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n    },\n    \"DataDisk\": {\n      \"properties\": {\n        \"lun\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        },\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"vhd\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The virtual hard disk.\"\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \\\\u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/ManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"lun\",\n        \"createOption\"\n      ],\n      \"description\": \"Describes a data disk.\"\n    },\n    \"StorageProfile\": {\n      \"properties\": {\n        \"imageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"description\": \"Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations.\"\n        },\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/OSDisk\",\n          \"description\": \"Specifies information about the operating system disk used by the virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DataDisk\"\n          },\n          \"description\": \"Specifies the parameters that are used to add a data disk to a virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        }\n      },\n      \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n    },\n    \"AdditionalUnattendContent\": {\n      \"properties\": {\n        \"passName\": {\n          \"type\": \"string\",\n          \"description\": \"The pass name. Currently, the only allowable value is OobeSystem.\",\n          \"enum\": [\n            \"OobeSystem\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"PassNames\",\n            \"modelAsString\": false\n          }\n        },\n        \"componentName\": {\n          \"type\": \"string\",\n          \"description\": \"The component name. Currently, the only allowable value is Microsoft-Windows-Shell-Setup.\",\n          \"enum\": [\n            \"Microsoft-Windows-Shell-Setup\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ComponentNames\",\n            \"modelAsString\": false\n          }\n        },\n        \"settingName\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the name of the setting to which the content applies. Possible values are: FirstLogonCommands and AutoLogon.\",\n          \"enum\": [\n            \"AutoLogon\",\n            \"FirstLogonCommands\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SettingNames\",\n            \"modelAsString\": false\n          }\n        },\n        \"content\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the XML formatted content that is added to the unattend.xml file for the specified path and component. The XML must be less than 4KB and must include the root element for the setting or feature that is being inserted.\"\n        }\n      },\n      \"description\": \"Specifies additional XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup. Contents are defined by setting name, component name, and the pass in which the content is applied.\"\n    },\n    \"WinRMListener\": {\n      \"properties\": {\n        \"protocol\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the protocol of listener. <br><br> Possible values are: <br>**http** <br><br> **https**\",\n          \"enum\": [\n            \"Http\",\n            \"Https\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ProtocolTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"certificateUrl\": {\n          \"type\": \"string\",\n          \"description\": \"This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8: <br><br> {<br>  \\\"data\\\":\\\"<Base64-encoded-certificate>\\\",<br>  \\\"dataType\\\":\\\"pfx\\\",<br>  \\\"password\\\":\\\"<pfx-file-password>\\\"<br>}\"\n        }\n      },\n      \"description\": \"Describes Protocol and thumbprint of Windows Remote Management listener\"\n    },\n    \"WinRMConfiguration\": {\n      \"properties\": {\n        \"listeners\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/WinRMListener\"\n          },\n          \"description\": \"The list of Windows Remote Management listeners\"\n        }\n      },\n      \"description\": \"Describes Windows Remote Management configuration of the VM\"\n    },\n    \"WindowsConfiguration\": {\n      \"properties\": {\n        \"provisionVMAgent\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether virtual machine agent should be provisioned on the virtual machine. <br><br> When this property is not specified in the request body, default behavior is to set it to true.  This will ensure that VM Agent is installed on the VM so that extensions can be added to the VM later.\"\n        },\n        \"enableAutomaticUpdates\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether virtual machine is enabled for automatic updates.\"\n        },\n        \"timeZone\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the time zone of the virtual machine. e.g. \\\"Pacific Standard Time\\\"\"\n        },\n        \"additionalUnattendContent\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/AdditionalUnattendContent\"\n          },\n          \"description\": \"Specifies additional base-64 encoded XML formatted information that can be included in the Unattend.xml file, which is used by Windows Setup.\"\n        },\n        \"winRM\": {\n          \"$ref\": \"#/definitions/WinRMConfiguration\",\n          \"description\": \"Specifies the Windows Remote Management listeners. This enables remote Windows PowerShell.\"\n        }\n      },\n      \"description\": \"Specifies Windows operating system settings on the virtual machine.\"\n    },\n    \"SshPublicKey\": {\n      \"properties\": {\n        \"path\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the full path on the created VM where ssh public key is stored. If the file already exists, the specified key is appended to the file. Example: /home/user/.ssh/authorized_keys\"\n        },\n        \"keyData\": {\n          \"type\": \"string\",\n          \"description\": \"SSH public key certificate used to authenticate with the VM through ssh. The key needs to be at least 2048-bit and in ssh-rsa format. <br><br> For creating ssh keys, see [Create SSH keys on Linux and Mac for Linux VMs in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-mac-create-ssh-keys?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n        }\n      },\n      \"description\": \"Contains information about SSH certificate public key and the path on the Linux VM where the public key is placed.\"\n    },\n    \"SshConfiguration\": {\n      \"properties\": {\n        \"publicKeys\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SshPublicKey\"\n          },\n          \"description\": \"The list of SSH public keys used to authenticate with linux based VMs.\"\n        }\n      },\n      \"description\": \"SSH configuration for Linux based VMs running on Azure\"\n    },\n    \"LinuxConfiguration\": {\n      \"properties\": {\n        \"disablePasswordAuthentication\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether password authentication should be disabled.\"\n        },\n        \"ssh\": {\n          \"$ref\": \"#/definitions/SshConfiguration\",\n          \"description\": \"Specifies the ssh key configuration for a Linux OS.\"\n        }\n      },\n      \"description\": \"Specifies the Linux operating system settings on the virtual machine. <br><br>For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json) <br><br> For running non-endorsed distributions, see [Information for Non-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n    },\n    \"VaultCertificate\": {\n      \"properties\": {\n        \"certificateUrl\": {\n          \"type\": \"string\",\n          \"description\": \"This is the URL of a certificate that has been uploaded to Key Vault as a secret. For adding a secret to the Key Vault, see [Add a key or secret to the key vault](https://docs.microsoft.com/azure/key-vault/key-vault-get-started/#add). In this case, your certificate needs to be It is the Base64 encoding of the following JSON Object which is encoded in UTF-8: <br><br> {<br>  \\\"data\\\":\\\"<Base64-encoded-certificate>\\\",<br>  \\\"dataType\\\":\\\"pfx\\\",<br>  \\\"password\\\":\\\"<pfx-file-password>\\\"<br>}\"\n        },\n        \"certificateStore\": {\n          \"type\": \"string\",\n          \"description\": \"For Windows VMs, specifies the certificate store on the Virtual Machine to which the certificate should be added. The specified certificate store is implicitly in the LocalMachine account. <br><br>For Linux VMs, the certificate file is placed under the /var/lib/waagent directory, with the file name <UppercaseThumbprint>.crt for the X509 certificate file and <UppercaseThumbpring>.prv for private key. Both of these files are .pem formatted.\"\n        }\n      },\n      \"description\": \"Describes a single certificate reference in a Key Vault, and where the certificate should reside on the VM.\"\n    },\n    \"VaultSecretGroup\": {\n      \"properties\": {\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The relative URL of the Key Vault containing all of the certificates in VaultCertificates.\"\n        },\n        \"vaultCertificates\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultCertificate\"\n          },\n          \"description\": \"The list of key vault references in SourceVault which contain certificates.\"\n        }\n      },\n      \"description\": \"Describes a set of certificates which are all in the same Key Vault.\"\n    },\n    \"OSProfile\": {\n      \"properties\": {\n        \"computerName\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the host OS name of the virtual machine. <br><br> **Max-length (Windows):** 15 characters <br><br> **Max-length (Linux):** 64 characters. <br><br> For naming conventions and restrictions see [Azure infrastructure services implementation guidelines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-infrastructure-subscription-accounts-guidelines?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#1-naming-conventions).\"\n        },\n        \"adminUsername\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the name of the administrator account. <br><br> **Windows-only restriction:** Cannot end in \\\".\\\" <br><br> **Disallowed values:** \\\"administrator\\\", \\\"admin\\\", \\\"user\\\", \\\"user1\\\", \\\"test\\\", \\\"user2\\\", \\\"test1\\\", \\\"user3\\\", \\\"admin1\\\", \\\"1\\\", \\\"123\\\", \\\"a\\\", \\\"actuser\\\", \\\"adm\\\", \\\"admin2\\\", \\\"aspnet\\\", \\\"backup\\\", \\\"console\\\", \\\"david\\\", \\\"guest\\\", \\\"john\\\", \\\"owner\\\", \\\"root\\\", \\\"server\\\", \\\"sql\\\", \\\"support\\\", \\\"support_388945a0\\\", \\\"sys\\\", \\\"test2\\\", \\\"test3\\\", \\\"user4\\\", \\\"user5\\\". <br><br> **Minimum-length (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root access to the Linux VM, see [Using root privileges on Linux virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li> For a list of built-in system users on Linux that should not be used in this field, see [Selecting User Names for Linux on Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"adminPassword\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the password of the administrator account. <br><br> **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has lower characters <br>Has upper characters <br> Has a digit <br> Has a special character (Regex match [\\\\W_]) <br><br> **Disallowed values:** \\\"abc@123\\\", \\\"P@$$w0rd\\\", \\\"P@ssw0rd\\\", \\\"P@ssword123\\\", \\\"Pa$$word\\\", \\\"pass@word1\\\", \\\"Password!\\\", \\\"Password1\\\", \\\"Password22\\\", \\\"iloveyou!\\\" <br><br> For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)\"\n        },\n        \"customData\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. <br><br> For using cloud-init for your VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"windowsConfiguration\": {\n          \"$ref\": \"#/definitions/WindowsConfiguration\",\n          \"description\": \"Specifies Windows operating system settings on the virtual machine.\"\n        },\n        \"linuxConfiguration\": {\n          \"$ref\": \"#/definitions/LinuxConfiguration\",\n          \"description\": \"Specifies the Linux operating system settings on the virtual machine. <br><br>For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json) <br><br> For running non-endorsed distributions, see [Information for Non-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n        },\n        \"secrets\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultSecretGroup\"\n          },\n          \"description\": \"Specifies set of certificates that should be installed onto the virtual machine.\"\n        }\n      },\n      \"description\": \"Specifies the operating system settings for the virtual machine.\"\n    },\n    \"NetworkInterfaceReferenceProperties\": {\n      \"properties\": {\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary network interface in case the virtual machine has more than 1 network interface.\"\n        }\n      },\n      \"description\": \"Describes a network interface reference properties.\"\n    },\n    \"NetworkInterfaceReference\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/NetworkInterfaceReferenceProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a network interface reference.\"\n    },\n    \"NetworkProfile\": {\n      \"properties\": {\n        \"networkInterfaces\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/NetworkInterfaceReference\"\n          },\n          \"description\": \"Specifies the list of resource Ids for the network interfaces associated with the virtual machine.\"\n        }\n      },\n      \"description\": \"Specifies the network interfaces of the virtual machine.\"\n    },\n    \"BootDiagnostics\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether boot diagnostics should be enabled on the Virtual Machine.\"\n        },\n        \"storageUri\": {\n          \"type\": \"string\",\n          \"description\": \"Uri of the storage account to use for placing the console output and screenshot.\"\n        }\n      },\n      \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n    },\n    \"DiagnosticsProfile\": {\n      \"properties\": {\n        \"bootDiagnostics\": {\n          \"$ref\": \"#/definitions/BootDiagnostics\",\n          \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n        }\n      },\n      \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n    },\n    \"VirtualMachineExtensionHandlerInstanceView\": {\n      \"properties\": {\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"status\": {\n          \"$ref\": \"#/definitions/InstanceViewStatus\",\n          \"description\": \"The extension handler status.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine extension handler.\"\n    },\n    \"VirtualMachineAgentInstanceView\": {\n      \"properties\": {\n        \"vmAgentVersion\": {\n          \"type\": \"string\",\n          \"description\": \"The VM Agent full version.\"\n        },\n        \"extensionHandlers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtensionHandlerInstanceView\"\n          },\n          \"description\": \"The virtual machine extension handler instance view.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of the VM Agent running on the virtual machine.\"\n    },\n    \"DiskInstanceView\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"encryptionSettings\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DiskEncryptionSettings\"\n          },\n          \"description\": \"Specifies the encryption settings for the OS Disk. <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of the disk.\"\n    },\n    \"BootDiagnosticsInstanceView\": {\n      \"properties\": {\n        \"consoleScreenshotBlobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The console screenshot blob URI.\"\n        },\n        \"serialConsoleLogBlobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The Linux serial console log blob Uri.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine boot diagnostics.\"\n    },\n    \"VirtualMachineIdentity\": {\n      \"properties\": {\n        \"principalId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The principal id of virtual machine identity. This property will only be provided for a system assigned identity.\"\n        },\n        \"tenantId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The tenant id associated with the virtual machine. This property will only be provided for a system assigned identity.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of identity used for the virtual machine. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine.\",\n          \"enum\": [\n            \"SystemAssigned\",\n            \"UserAssigned\",\n            \"SystemAssigned, UserAssigned\",\n            \"None\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": false\n          }\n        },\n        \"identityIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The list of user identities associated with the Virtual Machine. The user identity references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'.\"\n        }\n      },\n      \"description\": \"Identity for the virtual machine.\"\n    },\n    \"MaintenanceRedeployStatus\": {\n      \"properties\": {\n        \"isCustomerInitiatedMaintenanceAllowed\": {\n          \"type\": \"boolean\",\n          \"description\": \"True, if customer is allowed to perform Maintenance.\"\n        },\n        \"preMaintenanceWindowStartTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start Time for the Pre Maintenance Window.\"\n        },\n        \"preMaintenanceWindowEndTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End Time for the Pre Maintenance Window.\"\n        },\n        \"maintenanceWindowStartTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start Time for the Maintenance Window.\"\n        },\n        \"maintenanceWindowEndTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End Time for the Maintenance Window.\"\n        },\n        \"lastOperationResultCode\": {\n          \"type\": \"string\",\n          \"description\": \"The Last Maintenance Operation Result Code.\",\n          \"enum\": [\n            \"None\",\n            \"RetryLater\",\n            \"MaintenanceAborted\",\n            \"MaintenanceCompleted\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"MaintenanceOperationResultCodeTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastOperationMessage\": {\n          \"type\": \"string\",\n          \"description\": \"Message returned for the last Maintenance Operation.\"\n        }\n      },\n      \"description\": \"Maintenance Operation Status.\"\n    },\n    \"VirtualMachineInstanceView\": {\n      \"properties\": {\n        \"platformUpdateDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the update domain of the virtual machine.\"\n        },\n        \"platformFaultDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the fault domain of the virtual machine.\"\n        },\n        \"computerName\": {\n          \"type\": \"string\",\n          \"description\": \"The computer name assigned to the virtual machine.\"\n        },\n        \"osName\": {\n          \"type\": \"string\",\n          \"description\": \"The Operating System running on the virtual machine.\"\n        },\n        \"osVersion\": {\n          \"type\": \"string\",\n          \"description\": \"The version of Operating System running on the virtual machine.\"\n        },\n        \"rdpThumbPrint\": {\n          \"type\": \"string\",\n          \"description\": \"The Remote desktop certificate thumbprint.\"\n        },\n        \"vmAgent\": {\n          \"$ref\": \"#/definitions/VirtualMachineAgentInstanceView\",\n          \"description\": \"The VM Agent running on the virtual machine.\"\n        },\n        \"maintenanceRedeployStatus\": {\n          \"$ref\": \"#/definitions/MaintenanceRedeployStatus\",\n          \"description\": \"The Maintenance Operation status on the virtual machine.\"\n        },\n        \"disks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DiskInstanceView\"\n          },\n          \"description\": \"The virtual machine disk information.\"\n        },\n        \"extensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtensionInstanceView\"\n          },\n          \"description\": \"The extensions information.\"\n        },\n        \"bootDiagnostics\": {\n          \"$ref\": \"#/definitions/BootDiagnosticsInstanceView\",\n          \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine.\"\n    },\n    \"VirtualMachineProperties\": {\n      \"properties\": {\n        \"hardwareProfile\": {\n          \"$ref\": \"#/definitions/HardwareProfile\",\n          \"description\": \"Specifies the hardware settings for the virtual machine.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/StorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/OSProfile\",\n          \"description\": \"Specifies the operating system settings for the virtual machine.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/NetworkProfile\",\n          \"description\": \"Specifies the network interfaces of the virtual machine.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n        },\n        \"availabilitySet\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Manage the availability of virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> For more information on Azure planned maintainance, see [Planned maintenance for virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"instanceView\": {\n          \"$ref\": \"#/definitions/VirtualMachineInstanceView\",\n          \"readOnly\": true,\n          \"description\": \"The virtual machine instance view.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies that the image or disk that is being used was licensed on-premises. This element is only used for images that contain the Windows Server operating system. <br><br> Possible values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this element is included in a request for an update, the value must match the initial value. This value cannot be updated. <br><br> For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"vmId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Specifies the VM unique ID which is a 128-bits identifier that is encoded and stored in all Azure IaaS VMs SMBIOS and can be read using platform BIOS commands.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine.\"\n    },\n    \"VirtualMachine\": {\n      \"properties\": {\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineProperties\"\n        },\n        \"resources\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtension\"\n          },\n          \"description\": \"The virtual machine child extension resources.\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineIdentity\",\n          \"description\": \"The identity of the virtual machine, if configured.\"\n        },\n        \"zones\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine zones.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine.\"\n    },\n    \"VirtualMachineUpdate\": {\n      \"properties\": {\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineProperties\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineIdentity\",\n          \"description\": \"The identity of the virtual machine, if configured.\"\n        },\n        \"zones\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine zones.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Update.\"\n    },\n    \"VirtualMachineListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachine\"\n          },\n          \"description\": \"The list of virtual machines.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The URI to fetch the next page of VMs. Call ListNext() with this URI to fetch the next page of Virtual Machines.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"Sku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The sku name.\"\n        },\n        \"tier\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the tier of virtual machines in a scale set.<br /><br /> Possible Values:<br /><br /> **Standard**<br /><br /> **Basic**\"\n        },\n        \"capacity\": {\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"Specifies the number of virtual machines in the scale set.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set sku.\"\n    },\n    \"AutoOSUpgradePolicy\": {\n      \"properties\": {\n        \"disableAutoRollback\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether OS image rollback feature should be disabled. Default value is false.\"\n        }\n      },\n      \"description\": \"The configuration parameters used for performing automatic OS upgrade.\"\n    },\n    \"UpgradePolicy\": {\n      \"properties\": {\n        \"mode\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the mode of an upgrade to virtual machines in the scale set.<br /><br /> Possible values are:<br /><br /> **Manual** - You  control the application of updates to virtual machines in the scale set. You do this by using the manualUpgrade action.<br /><br /> **Automatic** - All virtual machines in the scale set are  automatically updated at the same time.\",\n          \"enum\": [\n            \"Automatic\",\n            \"Manual\",\n            \"Rolling\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UpgradeMode\",\n            \"modelAsString\": false\n          }\n        },\n        \"rollingUpgradePolicy\": {\n          \"$ref\": \"#/definitions/RollingUpgradePolicy\",\n          \"description\": \"The configuration parameters used while performing a rolling upgrade.\"\n        },\n        \"automaticOSUpgrade\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether OS upgrades should automatically be applied to scale set instances in a rolling fashion when a newer version of the image becomes available.\"\n        },\n        \"autoOSUpgradePolicy\": {\n          \"$ref\": \"#/definitions/AutoOSUpgradePolicy\",\n          \"description\": \"Configuration parameters used for performing automatic OS Upgrade.\"\n        }\n      },\n      \"description\": \"Describes an upgrade policy - automatic, manual, or rolling.\"\n    },\n    \"RollingUpgradePolicy\": {\n      \"properties\": {\n        \"maxBatchInstancePercent\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"minimum\": 5,\n          \"maximum\": 100,\n          \"description\": \"The maximum percent of total virtual machine instances that will be upgraded simultaneously by the rolling upgrade in one batch. As this is a maximum, unhealthy instances in previous or future batches can cause the percentage of instances in a batch to decrease to ensure higher reliability. The default value for this parameter is 20%.\"\n        },\n        \"maxUnhealthyInstancePercent\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"minimum\": 5,\n          \"maximum\": 100,\n          \"description\": \"The maximum percentage of the total virtual machine instances in the scale set that can be simultaneously unhealthy, either as a result of being upgraded, or by being found in an unhealthy state by the virtual machine health checks before the rolling upgrade aborts. This constraint will be checked prior to starting any batch. The default value for this parameter is 20%.\"\n        },\n        \"maxUnhealthyUpgradedInstancePercent\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"minimum\": 0,\n          \"maximum\": 100,\n          \"description\": \"The maximum percentage of upgraded virtual machine instances that can be found to be in an unhealthy state. This check will happen after each batch is upgraded. If this percentage is ever exceeded, the rolling update aborts. The default value for this parameter is 20%.\"\n        },\n        \"pauseTimeBetweenBatches\": {\n          \"type\": \"string\",\n          \"description\": \"The wait time between completing the update for all virtual machines in one batch and starting the next batch. The time duration should be specified in ISO 8601 format. The default value is 0 seconds (PT0S).\"\n        }\n      },\n      \"description\": \"The configuration parameters used while performing a rolling upgrade.\"\n    },\n    \"ImageOSDisk\": {\n      \"properties\": {\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"This property allows you to specify the type of the OS that is included in the disk if creating a VM from a custom image. <br><br> Possible values are: <br><br> **Windows** <br><br> **Linux**\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"osState\": {\n          \"type\": \"string\",\n          \"description\": \"The OS State.\",\n          \"enum\": [\n            \"Generalized\",\n            \"Specialized\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemStateTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"snapshot\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The snapshot.\"\n        },\n        \"managedDisk\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The managedDisk.\"\n        },\n        \"blobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The Virtual Hard Disk.\"\n        },\n        \"caching\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\",\n          \"enum\": [\n            \"None\",\n            \"ReadOnly\",\n            \"ReadWrite\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"CachingTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS, Premium_LRS, and StandardSSD_LRS.\"\n        }\n      },\n      \"required\": [\n        \"osType\",\n        \"osState\"\n      ],\n      \"description\": \"Describes an Operating System disk.\"\n    },\n    \"ImageDataDisk\": {\n      \"properties\": {\n        \"lun\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        },\n        \"snapshot\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The snapshot.\"\n        },\n        \"managedDisk\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The managedDisk.\"\n        },\n        \"blobUri\": {\n          \"type\": \"string\",\n          \"description\": \"The Virtual Hard Disk.\"\n        },\n        \"caching\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\",\n          \"enum\": [\n            \"None\",\n            \"ReadOnly\",\n            \"ReadWrite\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"CachingTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of empty data disks in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS, Premium_LRS, and StandardSSD_LRS.\"\n        }\n      },\n      \"required\": [\n        \"lun\"\n      ],\n      \"description\": \"Describes a data disk.\"\n    },\n    \"ImageStorageProfile\": {\n      \"properties\": {\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/ImageOSDisk\",\n          \"description\": \"Specifies information about the operating system disk used by the virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/ImageDataDisk\"\n          },\n          \"description\": \"Specifies the parameters that are used to add a data disk to a virtual machine. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"zoneResilient\": {\n          \"type\": \"boolean\",\n          \"description\":  \"Specifies whether an image is zone resilient or not. Default is false. Zone resilient images can be created only in regions that provide Zone Redundant Storage (ZRS).\"\n        }\n      },\n      \"description\": \"Describes a storage profile.\"\n    },\n    \"ImageProperties\": {\n      \"properties\": {\n        \"sourceVirtualMachine\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The source virtual machine from which Image is created.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/ImageStorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state.\"\n        }\n      },\n      \"description\": \"Describes the properties of an Image.\"\n    },\n    \"Image\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/ImageProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The source user image virtual hard disk. The virtual hard disk will be copied before being attached to the virtual machine. If SourceImage is provided, the destination virtual hard drive must not exist.\"\n    },\n    \"ImageUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/ImageProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"The source user image virtual hard disk. Only tags may be updated.\"\n    },\n    \"ImageListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Image\"\n          },\n          \"description\": \"The list of Images.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Images. Call ListNext() with this to fetch the next page of Images.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Image operation response.\"\n    },\n    \"VirtualMachineScaleSetIdentity\": {\n      \"properties\": {\n        \"principalId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The principal id of virtual machine scale set identity. This property will only be provided for a system assigned identity.\"\n        },\n        \"tenantId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The tenant id associated with the virtual machine scale set. This property will only be provided for a system assigned identity.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The type of identity used for the virtual machine scale set. The type 'SystemAssigned, UserAssigned' includes both an implicitly created identity and a set of user assigned identities. The type 'None' will remove any identities from the virtual machine scale set.\",\n          \"enum\": [\n            \"SystemAssigned\",\n            \"UserAssigned\",\n            \"SystemAssigned, UserAssigned\",\n            \"None\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"ResourceIdentityType\",\n            \"modelAsString\": false\n          }\n        },\n        \"identityIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The list of user identities associated with the virtual machine scale set. The user identity references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/identities/{identityName}'.\"\n        }\n      },\n      \"description\": \"Identity for the virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetOSProfile\": {\n      \"properties\": {\n        \"computerNamePrefix\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the computer name prefix for all of the virtual machines in the scale set. Computer name prefixes must be 1 to 15 characters long.\"\n        },\n        \"adminUsername\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the name of the administrator account. <br><br> **Windows-only restriction:** Cannot end in \\\".\\\" <br><br> **Disallowed values:** \\\"administrator\\\", \\\"admin\\\", \\\"user\\\", \\\"user1\\\", \\\"test\\\", \\\"user2\\\", \\\"test1\\\", \\\"user3\\\", \\\"admin1\\\", \\\"1\\\", \\\"123\\\", \\\"a\\\", \\\"actuser\\\", \\\"adm\\\", \\\"admin2\\\", \\\"aspnet\\\", \\\"backup\\\", \\\"console\\\", \\\"david\\\", \\\"guest\\\", \\\"john\\\", \\\"owner\\\", \\\"root\\\", \\\"server\\\", \\\"sql\\\", \\\"support\\\", \\\"support_388945a0\\\", \\\"sys\\\", \\\"test2\\\", \\\"test3\\\", \\\"user4\\\", \\\"user5\\\". <br><br> **Minimum-length (Linux):** 1  character <br><br> **Max-length (Linux):** 64 characters <br><br> **Max-length (Windows):** 20 characters  <br><br><li> For root access to the Linux VM, see [Using root privileges on Linux virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-use-root-privileges?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)<br><li> For a list of built-in system users on Linux that should not be used in this field, see [Selecting User Names for Linux on Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-usernames?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"adminPassword\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the password of the administrator account. <br><br> **Minimum-length (Windows):** 8 characters <br><br> **Minimum-length (Linux):** 6 characters <br><br> **Max-length (Windows):** 123 characters <br><br> **Max-length (Linux):** 72 characters <br><br> **Complexity requirements:** 3 out of 4 conditions below need to be fulfilled <br> Has lower characters <br>Has upper characters <br> Has a digit <br> Has a special character (Regex match [\\\\W_]) <br><br> **Disallowed values:** \\\"abc@123\\\", \\\"P@$$w0rd\\\", \\\"P@ssw0rd\\\", \\\"P@ssword123\\\", \\\"Pa$$word\\\", \\\"pass@word1\\\", \\\"Password!\\\", \\\"Password1\\\", \\\"Password22\\\", \\\"iloveyou!\\\" <br><br> For resetting the password, see [How to reset the Remote Desktop service or its login password in a Windows VM](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-reset-rdp?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> For resetting root password, see [Manage users, SSH, and check or repair disks on Azure Linux VMs using the VMAccess Extension](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-vmaccess-extension?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json#reset-root-password)\"\n        },\n        \"customData\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies a base-64 encoded string of custom data. The base-64 encoded string is decoded to a binary array that is saved as a file on the Virtual Machine. The maximum length of the binary array is 65535 bytes. <br><br> For using cloud-init for your VM, see [Using cloud-init to customize a Linux VM during creation](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-using-cloud-init?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json)\"\n        },\n        \"windowsConfiguration\": {\n          \"$ref\": \"#/definitions/WindowsConfiguration\",\n          \"description\": \"Specifies Windows operating system settings on the virtual machine.\"\n        },\n        \"linuxConfiguration\": {\n          \"$ref\": \"#/definitions/LinuxConfiguration\",\n          \"description\": \"Specifies the Linux operating system settings on the virtual machine. <br><br>For a list of supported Linux distributions, see [Linux on Azure-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-endorsed-distros?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json) <br><br> For running non-endorsed distributions, see [Information for Non-Endorsed Distributions](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-linux-create-upload-generic?toc=%2fazure%2fvirtual-machines%2flinux%2ftoc.json).\"\n        },\n        \"secrets\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultSecretGroup\"\n          },\n          \"description\": \"Specifies set of certificates that should be installed onto the virtual machines in the scale set.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set OS profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateOSProfile\": {\n      \"properties\": {\n        \"customData\": {\n          \"type\": \"string\",\n          \"description\": \"A base-64 encoded string of custom data.\"\n        },\n        \"windowsConfiguration\": {\n          \"$ref\": \"#/definitions/WindowsConfiguration\",\n          \"description\": \"The Windows Configuration of the OS profile.\"\n        },\n        \"linuxConfiguration\": {\n          \"$ref\": \"#/definitions/LinuxConfiguration\",\n          \"description\": \"The Linux Configuration of the OS profile.\"\n        },\n        \"secrets\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VaultSecretGroup\"\n          },\n          \"description\": \"The List of certificates for addition to the VM.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set OS profile.\"\n    },\n    \"VirtualMachineScaleSetManagedDiskParameters\": {\n      \"properties\": {\n        \"storageAccountType\": {\n          \"$ref\": \"#/definitions/StorageAccountType\",\n          \"description\": \"Specifies the storage account type for the managed disk. Possible values are: Standard_LRS, Premium_LRS, and StandardSSD_LRS.\"\n        }\n      },\n      \"description\": \"Describes the parameters of a ScaleSet managed disk.\"\n    },\n    \"VirtualMachineScaleSetOSDisk\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"Specifies how the virtual machines in the scale set should be created.<br><br> The only allowed value is: **FromImage** \\\\u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you  also use the plan element previously described.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of the operating system disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"This property allows you to specify the type of the OS that is included in the disk if creating a VM from user-image or a specialized VHD. <br><br> Possible values are: <br><br> **Windows** <br><br> **Linux**\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"Specifies information about the unmanaged user image to base the scale set on.\"\n        },\n        \"vhdContainers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Specifies the container urls that are used to store operating system disks for the scale set.\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"createOption\"\n      ],\n      \"description\": \"Describes a virtual machine scale set operating system disk.\"\n    },\n    \"VirtualMachineScaleSetUpdateOSDisk\": {\n      \"properties\": {\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"The caching type.\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of the operating system disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"image\": {\n          \"$ref\": \"#/definitions/VirtualHardDisk\",\n          \"description\": \"The Source User Image VirtualHardDisk. This VirtualHardDisk will be copied before using it to attach to the Virtual Machine. If SourceImage is provided, the destination VirtualHardDisk should not exist.\"\n        },\n        \"vhdContainers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The list of virtual hard disk container uris.\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetManagedDiskParameters\"\n        }\n      },\n      \"description\": \"Describes virtual machine scale set operating system disk Update Object. This should be used for Updating VMSS OS Disk.\"\n    },\n    \"VirtualMachineScaleSetDataDisk\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The disk name.\"\n        },\n        \"lun\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the logical unit number of the data disk. This value is used to identify data disks within the VM and therefore must be unique for each data disk attached to a VM.\"\n        },\n        \"caching\": {\n          \"$ref\": \"#/definitions/Caching\",\n          \"description\": \"Specifies the caching requirements. <br><br> Possible values are: <br><br> **None** <br><br> **ReadOnly** <br><br> **ReadWrite** <br><br> Default: **None for Standard storage. ReadOnly for Premium storage**\"\n        },\n        \"writeAcceleratorEnabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether writeAccelerator should be enabled or disabled on the disk.\"\n        },\n        \"createOption\": {\n          \"$ref\": \"#/definitions/CreateOption\",\n          \"description\": \"The create option.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB\"\n        },\n        \"managedDisk\": {\n          \"description\": \"The managed disk parameters.\",\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetManagedDiskParameters\"\n        }\n      },\n      \"required\": [\n        \"lun\",\n        \"createOption\"\n      ],\n      \"description\": \"Describes a virtual machine scale set data disk.\"\n    },\n    \"VirtualMachineScaleSetStorageProfile\": {\n      \"properties\": {\n        \"imageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"description\": \"Specifies information about the image to use. You can specify information about platform images, marketplace images, or virtual machine images. This element is required when you want to use a platform image, marketplace image, or virtual machine image, but is not used in other creation operations.\"\n        },\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetOSDisk\",\n          \"description\": \"Specifies information about the operating system disk used by the virtual machines in the scale set. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetDataDisk\"\n          },\n          \"description\": \"Specifies the parameters that are used to add data disks to the virtual machines in the scale set. <br><br> For more information about disks, see [About disks and VHDs for Azure virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-about-disks-vhds?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json).\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set storage profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateStorageProfile\": {\n      \"properties\": {\n        \"imageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"description\": \"The image reference.\"\n        },\n        \"osDisk\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateOSDisk\",\n          \"description\": \"The OS disk.\"\n        },\n        \"dataDisks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetDataDisk\"\n          },\n          \"description\": \"The data disks.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set storage profile.\"\n    },\n    \"ApiEntityReference\": {\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"The ARM resource id in the form of /subscriptions/{SubcriptionId}/resourceGroups/{ResourceGroupName}/...\"\n        }\n      },\n      \"description\": \"The API entity reference.\"\n    },\n    \"VirtualMachineScaleSetIPConfigurationProperties\": {\n      \"properties\": {\n        \"subnet\": {\n          \"$ref\": \"#/definitions/ApiEntityReference\",\n          \"description\": \"Specifies the identifier of the subnet.\"\n        },\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary network interface in case the virtual machine has more than 1 network interface.\"\n        },\n        \"publicIPAddressConfiguration\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfiguration\",\n          \"description\": \"The publicIPAddressConfiguration.\"\n        },\n        \"privateIPAddressVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible values are: 'IPv4' and 'IPv6'.\",\n          \"enum\": [\n            \"IPv4\",\n            \"IPv6\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"IPVersion\",\n            \"modelAsString\": true\n          }\n        },\n        \"applicationGatewayBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"Specifies an array of references to backend address pools of application gateways. A scale set can reference backend address pools of multiple application gateways. Multiple scale sets cannot use the same application gateway.\"\n        },\n        \"loadBalancerBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"Specifies an array of references to backend address pools of load balancers. A scale set can reference backend address pools of one public and one internal load balancer. Multiple scale sets cannot use the same load balancer.\"\n        },\n        \"loadBalancerInboundNatPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"Specifies an array of references to inbound Nat pools of the load balancers. A scale set can reference inbound nat pools of one public and one internal load balancer. Multiple scale sets cannot use the same load balancer\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration properties.\"\n    },\n    \"VirtualMachineScaleSetUpdateIPConfigurationProperties\": {\n      \"properties\": {\n        \"subnet\": {\n          \"$ref\": \"#/definitions/ApiEntityReference\",\n          \"description\": \"The subnet.\"\n        },\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary IP Configuration in case the network interface has more than one IP Configuration.\"\n        },\n        \"publicIPAddressConfiguration\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdatePublicIPAddressConfiguration\",\n          \"description\": \"The publicIPAddressConfiguration.\"\n        },\n        \"privateIPAddressVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Available from Api-Version 2017-03-30 onwards, it represents whether the specific ipconfiguration is IPv4 or IPv6. Default is taken as IPv4.  Possible values are: 'IPv4' and 'IPv6'.\",\n          \"enum\": [\n            \"IPv4\",\n            \"IPv6\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"IPVersion\",\n            \"modelAsString\": true\n          }\n        },\n        \"applicationGatewayBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"The application gateway backend address pools.\"\n        },\n        \"loadBalancerBackendAddressPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"The load balancer backend address pools.\"\n        },\n        \"loadBalancerInboundNatPools\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/SubResource\"\n          },\n          \"description\": \"The load balancer inbound nat pools.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration properties.\"\n    },\n    \"VirtualMachineScaleSetIPConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The IP configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetIPConfigurationProperties\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration.\"\n    },\n    \"VirtualMachineScaleSetUpdateIPConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The IP configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateIPConfigurationProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration.\"\n    },\n    \"VirtualMachineScaleSetNetworkConfigurationProperties\": {\n      \"properties\": {\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies the primary network interface in case the virtual machine has more than 1 network interface.\"\n        },\n        \"enableAcceleratedNetworking\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the network interface is accelerated networking-enabled.\"\n        },\n        \"networkSecurityGroup\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The network security group.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the network interfaces.\"\n        },\n        \"ipConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetIPConfiguration\"\n          },\n          \"description\": \"Specifies the IP configurations of the network interface.\"\n        },\n        \"enableIPForwarding\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether IP forwarding enabled on this NIC.\"\n        }\n      },\n      \"required\": [\n        \"ipConfigurations\"\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's IP configuration.\"\n    },\n    \"VirtualMachineScaleSetUpdateNetworkConfigurationProperties\": {\n      \"properties\": {\n        \"primary\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether this is a primary NIC on a virtual machine.\"\n        },\n        \"enableAcceleratedNetworking\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the network interface is accelerated networking-enabled.\"\n        },\n        \"networkSecurityGroup\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"The network security group.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the network interfaces.\"\n        },\n        \"ipConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateIPConfiguration\"\n          },\n          \"description\": \"The virtual machine scale set IP Configuration.\"\n        },\n        \"enableIPForwarding\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether IP forwarding enabled on this NIC.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set updatable network profile's IP configuration.Use this object for updating network profile's IP Configuration.\"\n    },\n    \"VirtualMachineScaleSetNetworkConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The network configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfigurationProperties\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's network configurations.\"\n    },\n    \"VirtualMachineScaleSetUpdateNetworkConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The network configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateNetworkConfigurationProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set network profile's network configurations.\"\n    },\n    \"VirtualMachineScaleSetNetworkConfigurationDnsSettings\": {\n      \"properties\": {\n        \"dnsServers\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"List of DNS servers IP addresses\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale sets network configuration's DNS settings.\"\n    },\n    \"VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings\": {\n      \"properties\": {\n        \"domainNameLabel\": {\n          \"type\": \"string\",\n          \"description\": \"The Domain name label.The concatenation of the domain name label and vm index will be the domain name labels of the PublicIPAddress resources that will be created\"\n        }\n      },\n      \"required\": [\n        \"domainNameLabel\"\n      ],\n      \"description\": \"Describes a virtual machines scale sets network configuration's DNS settings.\"\n    },\n    \"VirtualMachineScaleSetIpTag\": {\n      \"properties\": {\n        \"ipTagType\": {\n          \"type\": \"string\",\n          \"description\": \"IP tag type. Example: FirstPartyUsage.\"\n        },\n        \"tag\": {\n          \"type\": \"string\",\n          \"description\": \"IP tag associated with the public IP. Example: SQL, Storage etc.\"\n        }\n      },\n      \"description\": \"Contains the IP tag associated with the public IP address.\"\n    },\n    \"VirtualMachineScaleSetPublicIPAddressConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The publicIP address configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfigurationProperties\"\n        }\n      },\n      \"required\": [\n        \"name\"\n      ],\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetUpdatePublicIPAddressConfiguration\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The publicIP address configuration name.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetPublicIPAddressConfigurationProperties\": {\n      \"properties\": {\n        \"idleTimeoutInMinutes\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The idle timeout of the public IP address.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the publicIP addresses .\"\n        },\n        \"ipTags\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetIpTag\"\n          },\n          \"description\": \"The list of IP tags associated with the public IP address.\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetUpdatePublicIPAddressConfigurationProperties\": {\n      \"properties\": {\n        \"idleTimeoutInMinutes\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The idle timeout of the public IP address.\"\n        },\n        \"dnsSettings\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetPublicIPAddressConfigurationDnsSettings\",\n          \"description\": \"The dns settings to be applied on the publicIP addresses .\"\n        }\n      },\n      \"description\": \"Describes a virtual machines scale set IP Configuration's PublicIPAddress configuration\"\n    },\n    \"VirtualMachineScaleSetNetworkProfile\": {\n      \"properties\": {\n        \"healthProbe\": {\n          \"$ref\": \"#/definitions/ApiEntityReference\",\n          \"description\": \"A reference to a load balancer probe used to determine the health of an instance in the virtual machine scale set. The reference will be in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/loadBalancers/{loadBalancerName}/probes/{probeName}'.\"\n        },\n        \"networkInterfaceConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkConfiguration\"\n          },\n          \"description\": \"The list of network configurations.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateNetworkProfile\": {\n      \"properties\": {\n        \"networkInterfaceConfigurations\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateNetworkConfiguration\"\n          },\n          \"description\": \"The list of network configurations.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set network profile.\"\n    },\n    \"VirtualMachineScaleSetExtensionProperties\": {\n      \"properties\": {\n        \"forceUpdateTag\": {\n          \"type\": \"string\",\n          \"description\": \"If a value is provided and is different from the previous value, the extension handler will be forced to update even if the extension configuration has not changed.\"\n        },\n        \"publisher\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension handler publisher.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the type of the extension; an example is \\\"CustomScriptExtension\\\".\"\n        },\n        \"typeHandlerVersion\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the version of the script handler.\"\n        },\n        \"autoUpgradeMinorVersion\": {\n          \"type\": \"boolean\",\n          \"description\": \"Indicates whether the extension should use a newer minor version if one is available at deployment time. Once deployed, however, the extension will not upgrade minor versions unless redeployed, even with this property set to true.\"\n        },\n        \"settings\": {\n          \"type\": \"object\",\n          \"description\": \"Json formatted public settings for the extension.\"\n        },\n        \"protectedSettings\": {\n          \"type\": \"object\",\n          \"description\": \"The extension can contain either protectedSettings or protectedSettingsFromKeyVault or no protected settings at all.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Scale Set Extension.\"\n    },\n    \"VirtualMachineScaleSetExtension\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The name of the extension.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/SubResourceReadOnly\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Scale Set Extension.\"\n    },\n    \"VirtualMachineScaleSetExtensionListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n          },\n          \"description\": \"The list of VM scale set extensions.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of VM scale set extensions. Call ListNext() with this to fetch the next page of VM scale set extensions.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List VM scale set extension operation response.\"\n    },\n    \"VirtualMachineScaleSetExtensionProfile\": {\n      \"properties\": {\n        \"extensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetExtension\"\n          },\n          \"description\": \"The virtual machine scale set child extension resources.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set extension profile.\"\n    },\n    \"VirtualMachineScaleSetVMProfile\": {\n      \"properties\": {\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetOSProfile\",\n          \"description\": \"Specifies the operating system settings for the virtual machines in the scale set.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetStorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetNetworkProfile\",\n          \"description\": \"Specifies properties of the network interfaces of the virtual machines in the scale set.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n        },\n        \"extensionProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionProfile\",\n          \"description\": \"Specifies a collection of settings for extensions installed on virtual machines in the scale set.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies that the image or disk that is being used was licensed on-premises. This element is only used for images that contain the Windows Server operating system. <br><br> Possible values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this element is included in a request for an update, the value must match the initial value. This value cannot be updated. <br><br> For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Minimum api-version: 2015-06-15\"\n        },\n        \"priority\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the priority for the virtual machines in the scale set. <br><br>Minimum api-version: 2017-10-30-preview\",\n          \"enum\": [\n            \"Regular\",\n            \"Low\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachinePriorityTypes\",\n            \"modelAsString\": true\n          }\n        },\n        \"evictionPolicy\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies the eviction policy for virtual machines in a low priority scale set. <br><br>Minimum api-version: 2017-10-30-preview\",\n          \"enum\": [\n            \"Deallocate\",\n            \"Delete\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachineEvictionPolicyTypes\",\n            \"modelAsString\": true\n          }\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set virtual machine profile.\"\n    },\n    \"VirtualMachineScaleSetUpdateVMProfile\": {\n      \"properties\": {\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateOSProfile\",\n          \"description\": \"The virtual machine scale set OS profile.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateStorageProfile\",\n          \"description\": \"The virtual machine scale set storage profile.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateNetworkProfile\",\n          \"description\": \"The virtual machine scale set network profile.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"The virtual machine scale set diagnostics profile.\"\n        },\n        \"extensionProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetExtensionProfile\",\n          \"description\": \"The virtual machine scale set extension profile.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"The license type, which is for bring your own license scenario.\"\n        }\n      },\n      \"description\": \"Describes a virtual machine scale set virtual machine profile.\"\n    },\n    \"VirtualMachineScaleSetProperties\": {\n      \"properties\": {\n        \"upgradePolicy\": {\n          \"$ref\": \"#/definitions/UpgradePolicy\",\n          \"description\": \"The upgrade policy.\"\n        },\n        \"virtualMachineProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetVMProfile\",\n          \"description\": \"The virtual machine profile.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"overprovision\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the Virtual Machine Scale Set should be overprovisioned.\"\n        },\n        \"uniqueId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Specifies the ID which uniquely identifies a Virtual Machine Scale Set.\"\n        },\n        \"singlePlacementGroup\": {\n          \"type\": \"boolean\",\n          \"description\": \"When true this limits the scale set to a single placement group, of max size 100 virtual machines.\"\n        },\n        \"zoneBalance\": {\n          \"type\": \"boolean\",\n          \"description\": \"Whether to force stictly even Virtual Machine distribution cross x-zones in case there is zone outage.\"\n        },\n        \"platformFaultDomainCount\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Fault Domain count for each placement group.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSetUpdateProperties\": {\n      \"properties\": {\n        \"upgradePolicy\": {\n          \"$ref\": \"#/definitions/UpgradePolicy\",\n          \"description\": \"The upgrade policy.\"\n        },\n        \"virtualMachineProfile\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateVMProfile\",\n          \"description\": \"The virtual machine profile.\"\n        },\n        \"overprovision\": {\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the Virtual Machine Scale Set should be overprovisioned.\"\n        },\n        \"singlePlacementGroup\": {\n          \"type\": \"boolean\",\n          \"description\": \"When true this limits the scale set to a single placement group, of max size 100 virtual machines.\"\n        }\n      },\n      \"description\": \"Describes the properties of a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSet\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"The virtual machine scale set sku.\"\n        },\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetProperties\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetIdentity\",\n          \"description\": \"The identity of the virtual machine scale set, if configured.\"\n        },\n        \"zones\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine scale set zones.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSetUpdate\": {\n      \"properties\": {\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"description\": \"The virtual machine scale set sku.\"\n        },\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"The purchase plan when deploying a virtual machine scale set from VM Marketplace images.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetUpdateProperties\"\n        },\n        \"identity\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetIdentity\",\n          \"description\": \"The identity of the virtual machine scale set, if configured.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/UpdateResource\"\n        }\n      ],\n      \"description\": \"Describes a Virtual Machine Scale Set.\"\n    },\n    \"VirtualMachineScaleSetVMInstanceIDs\": {\n      \"properties\": {\n        \"instanceIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine scale set instance ids. Omitting the virtual machine scale set instance ids will result in the operation being performed on all virtual machines in the virtual machine scale set.\"\n        }\n      },\n      \"description\": \"Specifies a list of virtual machine instance IDs from the VM scale set.\"\n    },\n    \"VirtualMachineScaleSetVMInstanceRequiredIDs\": {\n      \"properties\": {\n        \"instanceIds\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine scale set instance ids.\"\n        }\n      },\n      \"required\": [\n        \"instanceIds\"\n      ],\n      \"description\": \"Specifies a list of virtual machine instance IDs from the VM scale set.\"\n    },\n    \"VirtualMachineStatusCodeCount\": {\n      \"properties\": {\n        \"code\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The instance view status code.\"\n        },\n        \"count\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances having a particular status code.\"\n        }\n      },\n      \"description\": \"The status code and count of the virtual machine scale set instance view status summary.\"\n    },\n    \"VirtualMachineScaleSetInstanceViewStatusesSummary\": {\n      \"properties\": {\n        \"statusesSummary\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineStatusCodeCount\"\n          },\n          \"description\": \"The extensions information.\"\n        }\n      },\n      \"description\": \"Instance view statuses summary for virtual machines of a virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetVMExtensionsSummary\": {\n      \"properties\": {\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The extension name.\"\n        },\n        \"statusesSummary\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineStatusCodeCount\"\n          },\n          \"description\": \"The extensions information.\"\n        }\n      },\n      \"description\": \"Extensions summary for virtual machines of a virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetInstanceView\": {\n      \"properties\": {\n        \"virtualMachine\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetInstanceViewStatusesSummary\",\n          \"readOnly\": true,\n          \"description\": \"The instance view status summary for the virtual machine scale set.\"\n        },\n        \"extensions\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetVMExtensionsSummary\"\n          },\n          \"description\": \"The extensions information.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine scale set.\"\n    },\n    \"VirtualMachineScaleSetListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n          },\n          \"description\": \"The list of virtual machine scale sets.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of VMSS.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"VirtualMachineScaleSetListWithLinkResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSet\"\n          },\n          \"description\": \"The list of virtual machine scale sets.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Sets. Call ListNext() with this to fetch the next page of Virtual Machine Scale Sets.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"VirtualMachineScaleSetSkuCapacity\": {\n      \"properties\": {\n        \"minimum\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The minimum capacity.\"\n        },\n        \"maximum\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The maximum capacity that can be set.\"\n        },\n        \"defaultCapacity\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int64\",\n          \"description\": \"The default capacity.\"\n        },\n        \"scaleType\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The scale type applicable to the sku.\",\n          \"enum\": [\n            \"Automatic\",\n            \"None\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"VirtualMachineScaleSetSkuScaleType\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"description\": \"Describes scaling information of a sku.\"\n    },\n    \"VirtualMachineScaleSetSku\": {\n      \"properties\": {\n        \"resourceType\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The type of resource the sku applies to.\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"The Sku.\"\n        },\n        \"capacity\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetSkuCapacity\",\n          \"readOnly\": true,\n          \"description\": \"Specifies the number of virtual machines in the scale set.\"\n        }\n      },\n      \"description\": \"Describes an available virtual machine scale set sku.\"\n    },\n    \"VirtualMachineScaleSetListSkusResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetSku\"\n          },\n          \"description\": \"The list of skus available for the virtual machine scale set.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Set Skus. Call ListNext() with this to fetch the next page of VMSS Skus.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The Virtual Machine Scale Set List Skus operation response.\"\n    },\n    \"RollbackStatusInfo\": {\n      \"properties\":{\n        \"successfullyRolledbackInstanceCount\" : {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances which have been successfully rolled back.\"\n        },\n        \"failedRolledbackInstanceCount\" : {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances which failed to rollback.\"\n        },\n        \"rollbackError\" : {\n          \"$ref\": \"#/definitions/ApiError\",\n          \"readOnly\": true,\n          \"description\": \"Error details if OS rollback failed.\"\n        }\n      },\n      \"description\": \"Information about rollback on failed VM instances after a OS Upgrade operation.\"\n    },\n    \"UpgradeOperationHistoryStatus\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"Code indicating the current status of the upgrade.\",\n          \"enum\": [\n            \"RollingForward\",\n            \"Cancelled\",\n            \"Completed\",\n            \"Faulted\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UpgradeState\",\n            \"modelAsString\": false\n          }\n        },\n        \"startTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start time of the upgrade.\"\n        },\n        \"endTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"End time of the upgrade.\"\n        }\n      },\n      \"description\": \"Information about the current running state of the overall upgrade.\"\n    },\n    \"UpgradeOperationHistoricalStatusInfoProperties\": {\n      \"properties\": {\n        \"runningStatus\": {\n          \"$ref\": \"#/definitions/UpgradeOperationHistoryStatus\",\n          \"readOnly\": true,\n          \"description\": \"Information about the overall status of the upgrade operation.\"\n        },\n        \"progress\": {\n          \"$ref\": \"#/definitions/RollingUpgradeProgressInfo\",\n          \"readOnly\": true,\n          \"description\": \"Counts of the VM's in each state.\"\n        },\n        \"error\": {\n          \"$ref\": \"#/definitions/ApiError\",\n          \"readOnly\": true,\n          \"description\": \"Error Details for this upgrade if there are any.\"\n        },\n        \"startedBy\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Invoker of the Upgrade Operation\",\n          \"enum\": [\n            \"Unknown\",\n            \"User\",\n            \"Platform\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"UpgradeOperationInvoker\",\n            \"modelAsString\": false\n          }\n        },\n        \"targetImageReference\": {\n          \"$ref\": \"#/definitions/ImageReference\",\n          \"readOnly\": true,\n          \"description\": \"Image Reference details\"\n        },\n        \"rollbackInfo\": {\n          \"$ref\": \"#/definitions/RollbackStatusInfo\",\n          \"readOnly\": true,\n          \"description\": \"Information about OS rollback if performed\"\n        }\n      },\n      \"description\": \"Describes each OS upgrade on the Virtual Machine Scale Set.\"\n    },\n    \"UpgradeOperationHistoricalStatusInfo\": {\n      \"properties\": {\n        \"properties\": {\n          \"$ref\": \"#/definitions/UpgradeOperationHistoricalStatusInfoProperties\",\n          \"readOnly\": true,\n          \"description\": \"Information about the properties of the upgrade operation.\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        }\n      },\n      \"description\": \"Virtual Machine Scale Set OS Upgrade History operation response.\"\n    },\n    \"VirtualMachineScaleSetListOSUpgradeHistory\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/UpgradeOperationHistoricalStatusInfo\"\n          },\n          \"description\": \"The list of OS upgrades performed on the virtual machine scale set.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of OS Upgrade History. Call ListNext() with this to fetch the next page of history of upgrades.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"List of Virtual Machine Scale Set OS Upgrade History operation response.\"\n    },\n    \"VirtualMachineScaleSetVMProperties\": {\n      \"properties\": {\n        \"latestModelApplied\": {\n          \"readOnly\": true,\n          \"type\": \"boolean\",\n          \"description\": \"Specifies whether the latest model has been applied to the virtual machine.\"\n        },\n        \"vmId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Azure VM unique ID.\"\n        },\n        \"instanceView\": {\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetVMInstanceView\",\n          \"readOnly\": true,\n          \"description\": \"The virtual machine instance view.\"\n        },\n        \"hardwareProfile\": {\n          \"$ref\": \"#/definitions/HardwareProfile\",\n          \"description\": \"Specifies the hardware settings for the virtual machine.\"\n        },\n        \"storageProfile\": {\n          \"$ref\": \"#/definitions/StorageProfile\",\n          \"description\": \"Specifies the storage settings for the virtual machine disks.\"\n        },\n        \"osProfile\": {\n          \"$ref\": \"#/definitions/OSProfile\",\n          \"description\": \"Specifies the operating system settings for the virtual machine.\"\n        },\n        \"networkProfile\": {\n          \"$ref\": \"#/definitions/NetworkProfile\",\n          \"description\": \"Specifies the network interfaces of the virtual machine.\"\n        },\n        \"diagnosticsProfile\": {\n          \"$ref\": \"#/definitions/DiagnosticsProfile\",\n          \"description\": \"Specifies the boot diagnostic settings state. <br><br>Minimum api-version: 2015-06-15.\"\n        },\n        \"availabilitySet\": {\n          \"$ref\": \"#/definitions/SubResource\",\n          \"description\": \"Specifies information about the availability set that the virtual machine should be assigned to. Virtual machines specified in the same availability set are allocated to different nodes to maximize availability. For more information about availability sets, see [Manage the availability of virtual machines](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-manage-availability?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json). <br><br> For more information on Azure planned maintainance, see [Planned maintenance for virtual machines in Azure](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-planned-maintenance?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Currently, a VM can only be added to availability set at creation time. An existing VM cannot be added to an availability set.\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The provisioning state, which only appears in the response.\"\n        },\n        \"licenseType\": {\n          \"type\": \"string\",\n          \"description\": \"Specifies that the image or disk that is being used was licensed on-premises. This element is only used for images that contain the Windows Server operating system. <br><br> Possible values are: <br><br> Windows_Client <br><br> Windows_Server <br><br> If this element is included in a request for an update, the value must match the initial value. This value cannot be updated. <br><br> For more information, see [Azure Hybrid Use Benefit for Windows Server](https://docs.microsoft.com/azure/virtual-machines/virtual-machines-windows-hybrid-use-benefit-licensing?toc=%2fazure%2fvirtual-machines%2fwindows%2ftoc.json) <br><br> Minimum api-version: 2015-06-15\"\n        }\n      },\n      \"description\": \"Describes the properties of a virtual machine scale set virtual machine.\"\n    },\n    \"VirtualMachineScaleSetVM\": {\n      \"properties\": {\n        \"instanceId\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The virtual machine instance ID.\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/Sku\",\n          \"readOnly\": true,\n          \"description\": \"The virtual machine SKU.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/VirtualMachineScaleSetVMProperties\"\n        },\n        \"plan\": {\n          \"$ref\": \"#/definitions/Plan\",\n          \"description\": \"Specifies information about the marketplace image used to create the virtual machine. This element is only used for marketplace images. Before you can use a marketplace image from an API, you must enable the image for programmatic use.  In the Azure portal, find the marketplace image that you want to use and then click **Want to deploy programmatically, Get Started ->**. Enter any required information and then click **Save**.\"\n        },\n        \"resources\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtension\"\n          },\n          \"description\": \"The virtual machine child extension resources.\"\n        },\n        \"zones\": {\n          \"readOnly\": true,\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The virtual machine zones.\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Describes a virtual machine scale set virtual machine.\"\n    },\n    \"VirtualMachineScaleSetVMInstanceView\": {\n      \"properties\": {\n        \"platformUpdateDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The Update Domain count.\"\n        },\n        \"platformFaultDomain\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The Fault Domain count.\"\n        },\n        \"rdpThumbPrint\": {\n          \"type\": \"string\",\n          \"description\": \"The Remote desktop certificate thumbprint.\"\n        },\n        \"vmAgent\": {\n          \"$ref\": \"#/definitions/VirtualMachineAgentInstanceView\",\n          \"description\": \"The VM Agent running on the virtual machine.\"\n        },\n        \"maintenanceRedeployStatus\": {\n          \"$ref\": \"#/definitions/MaintenanceRedeployStatus\",\n          \"description\": \"The Maintenance Operation status on the virtual machine.\"\n        },\n        \"disks\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/DiskInstanceView\"\n          },\n          \"description\": \"The disks information.\"\n        },\n        \"extensions\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineExtensionInstanceView\"\n          },\n          \"description\": \"The extensions information.\"\n        },\n        \"vmHealth\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/VirtualMachineHealthStatus\",\n          \"description\": \"The health status for the VM.\"\n        },\n        \"bootDiagnostics\": {\n          \"$ref\": \"#/definitions/BootDiagnosticsInstanceView\",\n          \"description\": \"Boot Diagnostics is a debugging feature which allows you to view Console Output and Screenshot to diagnose VM status. <br><br> For Linux Virtual Machines, you can easily view the output of your console log. <br><br> For both Windows and Linux virtual machines, Azure also enables you to see a screenshot of the VM from the hypervisor.\"\n        },\n        \"statuses\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"The resource status information.\"\n        },\n        \"placementGroupId\": {\n          \"type\": \"string\",\n          \"description\": \"The placement group in which the VM is running. If the VM is deallocated it will not have a placementGroupId.\"\n        }\n      },\n      \"description\": \"The instance view of a virtual machine scale set VM.\"\n    },\n    \"VirtualMachineHealthStatus\": {\n      \"properties\": {\n        \"status\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/InstanceViewStatus\",\n          \"description\": \"The health status information for the VM.\"\n        }\n      },\n      \"description\": \"The health status of the VM.\"\n    },\n    \"VirtualMachineScaleSetVMListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/VirtualMachineScaleSetVM\"\n          },\n          \"description\": \"The list of virtual machine scale sets VMs.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of Virtual Machine Scale Set VMs. Call ListNext() with this to fetch the next page of VMSS VMs\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine Scale Set VMs operation response.\"\n    },\n    \"RollingUpgradeStatusInfo\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/RollingUpgradeStatusInfoProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"The status of the latest virtual machine scale set rolling upgrade.\"\n    },\n    \"RollingUpgradeStatusInfoProperties\": {\n      \"properties\": {\n        \"policy\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/RollingUpgradePolicy\",\n          \"description\": \"The rolling upgrade policies applied for this upgrade.\"\n        },\n        \"runningStatus\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/RollingUpgradeRunningStatus\",\n          \"description\": \"Information about the current running state of the overall upgrade.\"\n        },\n        \"progress\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/RollingUpgradeProgressInfo\",\n          \"description\": \"Information about the number of virtual machine instances in each upgrade state.\"\n        },\n        \"error\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/ApiError\",\n          \"description\": \"Error details for this upgrade, if there are any.\"\n        }\n      },\n      \"description\": \"The status of the latest virtual machine scale set rolling upgrade.\"\n    },\n    \"RollingUpgradeRunningStatus\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"Code indicating the current status of the upgrade.\",\n          \"enum\": [\n            \"RollingForward\",\n            \"Cancelled\",\n            \"Completed\",\n            \"Faulted\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"RollingUpgradeStatusCode\",\n            \"modelAsString\": false\n          }\n        },\n        \"startTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Start time of the upgrade.\"\n        },\n        \"lastAction\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"description\": \"The last action performed on the rolling upgrade.\",\n          \"enum\": [\n            \"Start\",\n            \"Cancel\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"RollingUpgradeActionType\",\n            \"modelAsString\": false\n          }\n        },\n        \"lastActionTime\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"Last action time of the upgrade.\"\n        }\n      },\n      \"description\": \"Information about the current running state of the overall upgrade.\"\n    },\n    \"RollingUpgradeProgressInfo\": {\n      \"properties\": {\n        \"successfulInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that have been successfully upgraded.\"\n        },\n        \"failedInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that have failed to be upgraded successfully.\"\n        },\n        \"inProgressInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that are currently being upgraded.\"\n        },\n        \"pendingInstanceCount\": {\n          \"readOnly\": true,\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"The number of instances that have not yet begun to be upgraded.\"\n        }\n      },\n      \"description\": \"Information about the number of virtual machine instances in each upgrade state.\"\n    },\n    \"ApiErrorBase\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The error code.\"\n        },\n        \"target\": {\n          \"type\": \"string\",\n          \"description\": \"The target of the particular error.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The error message.\"\n        }\n      },\n      \"description\": \"Api error base.\"\n    },\n    \"InnerError\": {\n      \"properties\": {\n        \"exceptiontype\": {\n          \"type\": \"string\",\n          \"description\": \"The exception type.\"\n        },\n        \"errordetail\": {\n          \"type\": \"string\",\n          \"description\": \"The internal error message or exception dump.\"\n        }\n      },\n      \"description\": \"Inner error details.\"\n    },\n    \"ApiError\": {\n      \"properties\": {\n        \"details\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/ApiErrorBase\"\n          },\n          \"description\": \"The Api error details\"\n        },\n        \"innererror\": {\n          \"$ref\": \"#/definitions/InnerError\",\n          \"description\": \"The Api inner error\"\n        },\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The error code.\"\n        },\n        \"target\": {\n          \"type\": \"string\",\n          \"description\": \"The target of the particular error.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The error message.\"\n        }\n      },\n      \"description\": \"Api error.\"\n    },\n    \"Resource\": {\n      \"description\": \"The Resource model definition.\",\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Resource tags\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ],\n      \"x-ms-azure-resource\": true\n    },\n    \"UpdateResource\": {\n      \"description\": \"The Update Resource model definition.\",\n      \"properties\": {\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Resource tags\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    },\n    \"SubResource\": {\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    },\n    \"SubResourceReadOnly\": {\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        }\n      },\n      \"x-ms-azure-resource\": true\n    },\n    \"RecoveryWalkResponse\": {\n      \"properties\": {\n        \"walkPerformed\": {\n          \"type\": \"boolean\",\n          \"readOnly\": true,\n          \"description\": \"Whether the recovery walk was performed\"\n        },\n        \"nextPlatformUpdateDomain\": {\n          \"type\": \"integer\",\n          \"readOnly\": true,\n          \"description\": \"The next update domain that needs to be walked. Null means walk spanning all update domains has been completed\"\n        }\n      },\n      \"description\": \"Response after calling a manual recovery walk\"\n    },\n    \"RequestRateByIntervalInput\": {\n      \"properties\": {\n        \"intervalLength\": {\n          \"type\": \"string\",\n          \"description\": \"Interval value in minutes used to create LogAnalytics call rate logs.\",\n          \"enum\": [\n            \"ThreeMins\",\n            \"FiveMins\",\n            \"ThirtyMins\",\n            \"SixtyMins\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"IntervalInMins\",\n            \"modelAsString\": false\n          }\n        }\n      },\n      \"required\": [\n        \"intervalLength\"\n      ],\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/LogAnalyticsInputBase\"\n        }\n      ],\n      \"description\": \"Api request input for LogAnalytics getRequestRateByInterval Api.\"\n    },\n    \"ThrottledRequestsInput\": {\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/LogAnalyticsInputBase\"\n        }\n      ],\n      \"description\": \"Api request input for LogAnalytics getThrottledRequests Api.\"\n    },\n    \"LogAnalyticsInputBase\": {\n      \"properties\": {\n        \"blobContainerSasUri\": {\n          \"type\": \"string\",\n          \"description\": \"SAS Uri of the logging blob container to which LogAnalytics Api writes output logs to.\"\n        },\n        \"fromTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"From time of the query\"\n        },\n        \"toTime\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"To time of the query\"\n        },\n        \"groupByThrottlePolicy\": {\n          \"type\": \"boolean\",\n          \"description\": \"Group query result by Throttle Policy applied.\"\n        },\n        \"groupByOperationName\": {\n          \"type\": \"boolean\",\n          \"description\": \"Group query result by  by Operation Name.\"\n        },\n        \"groupByResourceName\": {\n          \"type\": \"boolean\",\n          \"description\": \"Group query result by Resource Name.\"\n        }\n      },\n      \"required\": [\n        \"blobContainerSasUri\",\n        \"fromTime\",\n        \"toTime\"\n      ],\n      \"description\": \"Api input base class for LogAnalytics Api.\"\n    },\n    \"LogAnalyticsOperationResult\": {\n      \"properties\": {\n        \"properties\": {\n          \"readOnly\": true,\n          \"$ref\": \"#/definitions/LogAnalyticsOutput\",\n          \"description\": \"LogAnalyticsOutput\"\n        }\n      },\n      \"description\": \"LogAnalytics operation status response\"\n    },\n    \"LogAnalyticsOutput\": {\n      \"properties\": {\n        \"output\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Output file Uri path to blob container.\"\n        }\n      },\n      \"description\": \"LogAnalytics output properties\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/full2/target/Microsoft.Compute/stable/2018-04-01/disk.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"DiskResourceProviderClient\",\n    \"description\": \"The Disk Resource Provider Client.\",\n    \"version\": \"2018-04-01\"\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\"\n  ],\n  \"produces\": [\n    \"application/json\"\n  ],\n  \"security\": [\n    {\n      \"azure_auth\": [\n        \"user_impersonation\"\n      ]\n    }\n  ],\n  \"securityDefinitions\": {\n    \"azure_auth\": {\n      \"type\": \"oauth2\",\n      \"authorizationUrl\": \"https://login.microsoftonline.com/common/oauth2/authorize\",\n      \"flow\": \"implicit\",\n      \"description\": \"Azure Active Directory OAuth2 Flow\",\n      \"scopes\": {\n        \"user_impersonation\": \"impersonate your user account\"\n      }\n    }\n  },\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}\": {\n      \"put\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_CreateOrUpdate\",\n        \"description\": \"Creates or updates a disk.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/DiskNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"name\": \"disk\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/Disk\"\n            },\n            \"description\": \"Disk object supplied in the body of the Put disk operation.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Disk\"\n            }\n          },\n          \"202\": {\n            \"description\":\"Accepted\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Disk\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_Update\",\n        \"description\": \"Updates (patches) a disk.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/DiskNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"name\": \"disk\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/DiskUpdate\"\n            },\n            \"description\": \"Disk object supplied in the body of the Patch disk operation.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Disk\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Disk\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_Get\",\n        \"description\": \"Gets information about a disk.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/DiskNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Disk\"\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_Delete\",\n        \"description\": \"Deletes a disk.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/DiskNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"If the disk is deleted, this is an expected error code.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks\": {\n      \"get\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_ListByResourceGroup\",\n        \"description\": \"Lists all the disks under a resource group.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/DiskList\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/disks\": {\n      \"get\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_List\",\n        \"description\": \"Lists all the disks under a subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/DiskList\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/beginGetAccess\": {\n      \"post\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_GrantAccess\",\n        \"description\": \"Grants access to a disk.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/DiskNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"name\": \"grantAccessData\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/GrantAccessData\"\n            },\n            \"description\": \"Access data object supplied in the body of the get disk access operation.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccessUri\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/disks/{diskName}/endGetAccess\": {\n      \"post\": {\n        \"tags\": [\n          \"Disks\"\n        ],\n        \"operationId\": \"Disks_RevokeAccess\",\n        \"description\": \"Revokes access to a disk.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/DiskNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}\": {\n      \"put\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_CreateOrUpdate\",\n        \"description\": \"Creates or updates a snapshot.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SnapshotNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"name\": \"snapshot\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/Snapshot\"\n            },\n            \"description\": \"Snapshot object supplied in the body of the Put disk operation.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Snapshot\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Snapshot\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"patch\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_Update\",\n        \"description\": \"Updates (patches) a snapshot.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SnapshotNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"name\": \"snapshot\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/SnapshotUpdate\"\n            },\n            \"description\": \"Snapshot object supplied in the body of the Patch snapshot operation.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Snapshot\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Snapshot\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      },\n      \"get\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_Get\",\n        \"description\": \"Gets information about a snapshot.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SnapshotNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Snapshot\"\n            }\n          }\n        }\n      },\n      \"delete\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_Delete\",\n        \"description\": \"Deletes a snapshot.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SnapshotNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          },\n          \"204\": {\n            \"description\": \"If the snapshot is deleted, this is an expected error code.\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots\": {\n      \"get\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_ListByResourceGroup\",\n        \"description\": \"Lists snapshots under a resource group.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/SnapshotList\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/snapshots\": {\n      \"get\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_List\",\n        \"description\": \"Lists snapshots under a subscription.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/SnapshotList\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/beginGetAccess\": {\n      \"post\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_GrantAccess\",\n        \"description\": \"Grants access to a snapshot.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SnapshotNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"name\": \"grantAccessData\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/GrantAccessData\"\n            },\n            \"description\": \"Access data object supplied in the body of the get snapshot access operation.\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/AccessUri\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/snapshots/{snapshotName}/endGetAccess\": {\n      \"post\": {\n        \"tags\": [\n          \"Snapshots\"\n        ],\n        \"operationId\": \"Snapshots_RevokeAccess\",\n        \"description\": \"Revokes access to a snapshot.\",\n        \"parameters\": [\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ResourceGroupNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SnapshotNameParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\"\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true\n      }\n    }\n  },\n  \"definitions\": {\n    \"Resource\": {\n      \"description\": \"The Resource model definition.\",\n      \"properties\": {\n        \"id\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        },\n        \"name\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource name\"\n        },\n        \"type\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Resource type\"\n        },\n        \"location\": {\n          \"type\": \"string\",\n          \"description\": \"Resource location\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Resource tags\"\n        }\n      },\n      \"required\": [\n        \"location\"\n      ],\n      \"x-ms-azure-resource\": true\n    },\n    \"Disk\": {\n      \"properties\": {\n        \"managedBy\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"A relative URI containing the ID of the VM that has the disk attached.\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/DiskSku\"\n        },\n        \"zones\": {\n            \"type\": \"array\",\n            \"items\": {\n                \"type\": \"string\"\n          },\n          \"description\": \"The Logical zone list for Disk.\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/DiskProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Disk resource.\"\n    },\n    \"DiskUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/DiskUpdateProperties\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Resource tags\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/DiskSku\"\n        }\n      },\n      \"description\": \"Disk update resource.\"\n    },\n    \"DiskList\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Disk\"\n          },\n          \"description\": \"A list of disks.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of disks. Call ListNext() with this to fetch the next page of disks.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Disks operation response.\"\n    },\n    \"DiskSku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Premium_LRS\",\n            \"StandardSSD_LRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"StorageAccountTypes\",\n            \"modelAsString\": true\n          },\n          \"description\": \"The sku name.\"\n        },\n        \"tier\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"default\": \"Standard\",\n          \"description\": \"The sku tier.\"\n        }\n      },\n      \"description\": \"The disks sku name. Can be Standard_LRS, Premium_LRS, or StandardSSD_LRS.\"\n    },\n    \"SnapshotSku\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"Standard_LRS\",\n            \"Premium_LRS\",\n            \"Standard_ZRS\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"SnapshotStorageAccountTypes\",\n            \"modelAsString\": true\n          },\n          \"description\": \"The sku name.\"\n        },\n        \"tier\": {\n          \"type\": \"string\",\n          \"readOnly\": true,\n          \"default\": \"Standard\",\n          \"description\": \"The sku tier.\"\n        }\n      },\n      \"description\": \"The snapshots sku name. Can be Standard_LRS, Premium_LRS, or Standard_ZRS.\"\n    },\n    \"DiskProperties\": {\n      \"properties\": {\n        \"timeCreated\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"The time when the disk was created.\"\n        },\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"The Operating System type.\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"creationData\": {\n          \"$ref\": \"#/definitions/CreationData\",\n          \"description\": \"Disk source information. CreationData information cannot be changed after the disk has been created.\"\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"If creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size.\"\n        },\n        \"encryptionSettings\": {\n          \"$ref\": \"#/definitions/EncryptionSettings\",\n          \"description\": \"Encryption settings for disk or snapshot\"\n        },\n        \"provisioningState\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"The disk provisioning state.\"\n        }\n      },\n      \"required\": [\n        \"creationData\"\n      ],\n      \"description\": \"Disk resource properties.\"\n    },\n    \"EncryptionSettings\": {\n      \"properties\": {\n        \"enabled\": {\n          \"type\": \"boolean\",\n          \"description\": \"Set this flag to true and provide DiskEncryptionKey and optional KeyEncryptionKey to enable encryption. Set this flag to false and remove DiskEncryptionKey and KeyEncryptionKey to disable encryption. If EncryptionSettings is null in the request object, the existing settings remain unchanged.\"\n        },\n        \"diskEncryptionKey\": {\n          \"$ref\": \"#/definitions/KeyVaultAndSecretReference\",\n          \"description\": \"Key Vault Secret Url and vault id of the disk encryption key\"\n        },\n        \"keyEncryptionKey\": {\n          \"$ref\": \"#/definitions/KeyVaultAndKeyReference\",\n          \"description\": \"Key Vault Key Url and vault id of the key encryption key\"\n        }\n      },\n      \"description\": \"Encryption settings for disk or snapshot\"\n    },\n    \"KeyVaultAndSecretReference\": {\n      \"properties\": {\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SourceVault\",\n          \"description\": \"Resource id of the KeyVault containing the key or secret\"\n        },\n        \"secretUrl\": {\n          \"type\": \"string\",\n          \"description\": \"Url pointing to a key or secret in KeyVault\"\n        }\n      },\n      \"required\": [\n        \"secretUrl\",\n        \"sourceVault\"\n      ],\n      \"description\": \"Key Vault Secret Url and vault id of the encryption key \"\n    },\n    \"KeyVaultAndKeyReference\": {\n      \"properties\": {\n        \"sourceVault\": {\n          \"$ref\": \"#/definitions/SourceVault\",\n          \"description\": \"Resource id of the KeyVault containing the key or secret\"\n        },\n        \"keyUrl\": {\n          \"type\": \"string\",\n          \"description\": \"Url pointing to a key or secret in KeyVault\"\n        }\n      },\n      \"required\": [\n        \"keyUrl\",\n        \"sourceVault\"\n      ],\n      \"description\": \"Key Vault Key Url and vault id of KeK, KeK is optional and when provided is used to unwrap the encryptionKey\"\n    },\n    \"SourceVault\": {\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"Resource Id\"\n        }\n      },\n      \"description\": \"The vault id is an Azure Resource Manager Resoure id in the form /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.KeyVault/vaults/{vaultName}\"\n    },\n    \"DiskUpdateProperties\": {\n      \"properties\": {\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"the Operating System type.\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"diskSizeGB\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"If creationData.createOption is Empty, this field is mandatory and it indicates the size of the VHD to create. If this field is present for updates or creation with other options, it indicates a resize. Resizes are only allowed if the disk is not attached to a running VM, and can only increase the disk's size.\"\n        },\n        \"encryptionSettings\": {\n          \"$ref\": \"#/definitions/EncryptionSettings\",\n          \"description\": \"Encryption settings for disk or snapshot\"\n        }\n      },\n      \"description\": \"Disk resource update properties.\"\n    },\n    \"CreationData\": {\n      \"properties\": {\n        \"createOption\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"Empty\",\n            \"Attach\",\n            \"FromImage\",\n            \"Import\",\n            \"Copy\",\n            \"Restore\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"DiskCreateOption\",\n            \"modelAsString\": true\n          },\n          \"description\": \"This enumerates the possible sources of a disk's creation.\"\n        },\n        \"storageAccountId\": {\n          \"type\": \"string\",\n          \"description\": \"If createOption is Import, the Azure Resource Manager identifier of the storage account containing the blob to import as a disk. Required only if the blob is in a different subscription\"\n        },\n        \"imageReference\": {\n          \"$ref\": \"#/definitions/ImageDiskReference\",\n          \"description\": \"Disk source information.\"\n        },\n        \"sourceUri\": {\n          \"type\": \"string\",\n          \"description\": \"If createOption is Import, this is the URI of a blob to be imported into a managed disk.\"\n        },\n        \"sourceResourceId\": {\n          \"type\": \"string\",\n          \"description\": \"If createOption is Copy, this is the ARM id of the source snapshot or disk.\"\n        }\n      },\n      \"required\": [\n        \"createOption\"\n      ],\n      \"description\": \"Data used when creating a disk.\"\n    },\n    \"ImageDiskReference\": {\n      \"properties\": {\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"A relative uri containing either a Platform Imgage Repository or user image reference.\"\n        },\n        \"lun\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"If the disk is created from an image's data disk, this is an index that indicates which of the data disks in the image to use. For OS disks, this field is null.\"\n        }\n      },\n      \"required\": [\n        \"id\"\n      ],\n      \"description\": \"The source image used for creating the disk.\"\n    },\n    \"GrantAccessData\": {\n      \"properties\": {\n        \"access\": {\n          \"type\": \"string\",\n          \"enum\": [\n            \"None\",\n            \"Read\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"AccessLevel\",\n            \"modelAsString\": true\n          }\n        },\n        \"durationInSeconds\": {\n          \"type\": \"integer\",\n          \"format\": \"int32\",\n          \"description\": \"Time duration in seconds until the SAS access expires.\"\n        }\n      },\n      \"required\": [\n        \"access\",\n        \"durationInSeconds\"\n      ],\n      \"description\": \"Data used for requesting a SAS.\"\n    },\n    \"AccessUri\": {\n      \"properties\": {\n        \"accessSAS\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"A SAS uri for accessing a disk.\"\n        }\n      },\n      \"description\": \"A disk access SAS uri.\"\n    },\n    \"Snapshot\": {\n      \"properties\": {\n        \"managedBy\": {\n          \"readOnly\": true,\n          \"type\": \"string\",\n          \"description\": \"Unused. Always Null.\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/SnapshotSku\"\n        },\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/DiskProperties\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Resource\"\n        }\n      ],\n      \"description\": \"Snapshot resource.\"\n    },\n    \"SnapshotUpdate\": {\n      \"properties\": {\n        \"properties\": {\n          \"x-ms-client-flatten\": true,\n          \"$ref\": \"#/definitions/DiskUpdateProperties\"\n        },\n        \"tags\": {\n          \"type\": \"object\",\n          \"additionalProperties\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Resource tags\"\n        },\n        \"sku\": {\n          \"$ref\": \"#/definitions/SnapshotSku\"\n        }\n      },\n      \"description\": \"Snapshot update resource.\"\n    },\n    \"SnapshotList\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/Snapshot\"\n          },\n          \"description\": \"A list of snapshots.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of snapshots. Call ListNext() with this to fetch the next page of snapshots.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Snapshots operation response.\"\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    },\n    \"ResourceGroupNameParameter\": {\n      \"name\": \"resourceGroupName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the resource group.\",\n      \"x-ms-parameter-location\": \"method\"\n    },\n    \"DiskNameParameter\": {\n      \"name\": \"diskName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the managed disk that is being created. The name can't be changed after the disk is created. Supported characters for the name are a-z, A-Z, 0-9 and _. The maximum name length is 80 characters.\",\n      \"x-ms-parameter-location\": \"method\"\n    },\n    \"SnapshotNameParameter\": {\n      \"name\": \"snapshotName\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"The name of the snapshot that is being created. The name can't be changed after the snapshot is created. Supported characters for the name are a-z, A-Z, 0-9 and _. The max name length is 80 characters.\",\n      \"x-ms-parameter-location\": \"method\"\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/full2/target/Microsoft.Compute/stable/2018-04-01/runCommands.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"RunCommandsClient\",\n    \"description\": \"The Run Commands Client.\",\n    \"version\": \"2018-04-01\"\n  },\n  \"host\": \"management.azure.com\",\n  \"schemes\": [\n    \"https\"\n  ],\n  \"consumes\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"produces\": [\n    \"application/json\",\n    \"text/json\"\n  ],\n  \"security\": [\n    {\n      \"azure_auth\": [\n        \"user_impersonation\"\n      ]\n    }\n  ],\n  \"securityDefinitions\": {\n    \"azure_auth\": {\n      \"type\": \"oauth2\",\n      \"authorizationUrl\": \"https://login.microsoftonline.com/common/oauth2/authorize\",\n      \"flow\": \"implicit\",\n      \"description\": \"Azure Active Directory OAuth2 Flow\",\n      \"scopes\": {\n        \"user_impersonation\": \"impersonate your user account\"\n      }\n    }\n  },\n  \"paths\": {\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineRunCommands\"\n        ],\n        \"operationId\": \"VirtualMachineRunCommands_List\",\n        \"description\": \"Lists all available run commands for a subscription in a location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which run commands is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandListResult\"\n            }\n          }\n        },\n        \"x-ms-pageable\": {\n          \"nextLinkName\": \"nextLink\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/runCommands/{commandId}\": {\n      \"get\": {\n        \"tags\": [\n          \"VirtualMachineRunCommands\"\n        ],\n        \"operationId\": \"VirtualMachineRunCommands_Get\",\n        \"description\": \"Gets specific run command for a subscription in a location.\",\n        \"parameters\": [\n          {\n            \"name\": \"location\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The location upon which run commands is queried.\",\n            \"pattern\": \"^[-\\\\w\\\\._]+$\"\n          },\n          {\n            \"name\": \"commandId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The command id.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandDocument\"\n            }\n          }\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachines/{vmName}/runCommand\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachines\"\n        ],\n        \"operationId\": \"VirtualMachines_RunCommand\",\n        \"description\": \"Run command on the VM.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandInput\"\n            },\n            \"description\": \"Parameters supplied to the Run command operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\": \"location\"\n        }\n      }\n    },\n    \"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/virtualMachineScaleSets/{vmScaleSetName}/virtualmachines/{instanceId}/runCommand\": {\n      \"post\": {\n        \"tags\": [\n          \"VirtualMachineScaleSetVMs\"\n        ],\n        \"operationId\": \"VirtualMachineScaleSetVMs_RunCommand\",\n        \"description\": \"Run command on a virtual machine in a VM scale set.\",\n        \"parameters\": [\n          {\n            \"name\": \"resourceGroupName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the resource group.\"\n          },\n          {\n            \"name\": \"vmScaleSetName\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The name of the VM scale set.\"\n          },\n          {\n            \"name\": \"instanceId\",\n            \"in\": \"path\",\n            \"required\": true,\n            \"type\": \"string\",\n            \"description\": \"The instance ID of the virtual machine.\"\n          },\n          {\n            \"name\": \"parameters\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandInput\"\n            },\n            \"description\": \"Parameters supplied to the Run command operation.\"\n          },\n          {\n            \"$ref\": \"#/parameters/ApiVersionParameter\"\n          },\n          {\n            \"$ref\": \"#/parameters/SubscriptionIdParameter\"\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"OK\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/RunCommandResult\"\n            }\n          },\n          \"202\": {\n            \"description\": \"Accepted\"\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\": \"location\"\n        }\n      }\n    }\n  },\n  \"definitions\": {\n    \"RunCommandInputParameter\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter name.\"\n        },\n        \"value\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter value.\"\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"value\"\n      ],\n      \"description\": \"Describes the properties of a run command parameter.\"\n    },\n    \"RunCommandInput\": {\n      \"properties\": {\n        \"commandId\": {\n          \"type\": \"string\",\n          \"description\": \"The run command id.\"\n        },\n        \"script\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"Optional. The script to be executed.  When this value is given, the given script will override the default script of the command.\"\n        },\n        \"parameters\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/RunCommandInputParameter\"\n          },\n          \"description\": \"The run command parameters.\"\n        }\n      },\n      \"required\": [\n        \"commandId\"\n      ],\n      \"description\": \"Capture Virtual Machine parameters.\"\n    },\n    \"RunCommandParameterDefinition\": {\n      \"properties\": {\n        \"name\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter name.\"\n        },\n        \"type\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter type.\"\n        },\n        \"defaultValue\": {\n          \"type\": \"string\",\n          \"description\": \"The run command parameter default value.\"\n        },\n        \"required\": {\n          \"type\": \"boolean\",\n          \"description\": \"The run command parameter required.\",\n          \"default\": false\n        }\n      },\n      \"required\": [\n        \"name\",\n        \"type\"\n      ],\n      \"description\": \"Describes the properties of a run command parameter.\"\n    },\n    \"RunCommandDocumentBase\": {\n      \"properties\": {\n        \"$schema\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command schema.\"\n        },\n        \"id\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command id.\"\n        },\n        \"osType\": {\n          \"type\": \"string\",\n          \"description\": \"The Operating System type.\",\n          \"enum\": [\n            \"Windows\",\n            \"Linux\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"OperatingSystemTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"label\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command label.\"\n        },\n        \"description\": {\n          \"type\": \"string\",\n          \"description\": \"The VM run command description.\"\n        }\n      },\n      \"required\": [\n        \"$schema\",\n        \"id\",\n        \"osType\",\n        \"label\",\n        \"description\"\n      ],\n      \"description\": \"Describes the properties of a Run Command metadata.\"\n    },\n    \"RunCommandDocument\": {\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/RunCommandDocumentBase\"\n        }\n      ],\n      \"properties\": {\n        \"script\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"type\": \"string\"\n          },\n          \"description\": \"The script to be executed.\"\n        },\n        \"parameters\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/RunCommandParameterDefinition\"\n          },\n          \"description\": \"The parameters used by the script.\"\n        }\n      },\n      \"required\": [\n        \"script\"\n      ],\n      \"description\": \"Describes the properties of a Run Command.\"\n    },\n    \"RunCommandListResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/RunCommandDocumentBase\"\n          },\n          \"description\": \"The list of virtual machine run commands.\"\n        },\n        \"nextLink\": {\n          \"type\": \"string\",\n          \"description\": \"The uri to fetch the next page of run commands. Call ListNext() with this to fetch the next page of run commands.\"\n        }\n      },\n      \"required\": [\n        \"value\"\n      ],\n      \"description\": \"The List Virtual Machine operation response.\"\n    },\n    \"InstanceViewStatus\": {\n      \"properties\": {\n        \"code\": {\n          \"type\": \"string\",\n          \"description\": \"The status code.\"\n        },\n        \"level\": {\n          \"type\": \"string\",\n          \"description\": \"The level code.\",\n          \"enum\": [\n            \"Info\",\n            \"Warning\",\n            \"Error\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"StatusLevelTypes\",\n            \"modelAsString\": false\n          }\n        },\n        \"displayStatus\": {\n          \"type\": \"string\",\n          \"description\": \"The short localizable label for the status.\"\n        },\n        \"message\": {\n          \"type\": \"string\",\n          \"description\": \"The detailed status message, including for alerts and error messages.\"\n        },\n        \"time\": {\n          \"type\": \"string\",\n          \"format\": \"date-time\",\n          \"description\": \"The time of the status.\"\n        }\n      },\n      \"description\": \"Instance view status.\"\n    },\n    \"RunCommandResult\": {\n      \"properties\": {\n        \"value\": {\n          \"type\": \"array\",\n          \"items\": {\n            \"$ref\": \"#/definitions/InstanceViewStatus\"\n          },\n          \"description\": \"Run command operation response.\"\n        }\n      }\n    }\n  },\n  \"parameters\": {\n    \"SubscriptionIdParameter\": {\n      \"name\": \"subscriptionId\",\n      \"in\": \"path\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call.\"\n    },\n    \"ApiVersionParameter\": {\n      \"name\": \"api-version\",\n      \"in\": \"query\",\n      \"required\": true,\n      \"type\": \"string\",\n      \"description\": \"Client Api Version.\"\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/full2/target/readme.md",
    "content": "# Compute\n\n> see https://aka.ms/autorest\n\nThis is the AutoRest configuration file for Compute.\n\n\nThe compute RP comprises of small services where each service has its own tag.\nHence, each sub-service has its own swagger spec.\n\nAll of them are tied together using this configuration and are packaged together into one compute client library.\nThis makes it easier for customers to download one (nuget/npm/pip/maven/gem) compute client library package rather than installing individual packages for each sub service.\n\n\n---\n## Getting Started\nTo build the SDK for Compute, simply [Install AutoRest](https://aka.ms/autorest/install) and in this folder, run:\n\n> `autorest`\n\nTo see additional help and options, run:\n\n> `autorest --help`\n---\n\n## Configuration\n\n\n\n### Basic Information\nThese are the global settings for the Compute API.\n\n``` yaml\ntitle: ComputeManagementClient\ndescription: Compute Client\nopenapi-type: arm\ntag: package-2018-06-exclude-gallery\n\ndirective:\n  - where:\n      - $.definitions.VirtualMachine.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.VirtualMachineScaleSetVM.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.ImageReference.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.ManagedDiskParameters.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.Disk.properties\n    suppress:\n      - BodyTopLevelProperties\n  - where:\n      - $.definitions.Snapshot.properties\n    suppress:\n      - BodyTopLevelProperties\n\n  - where:\n      - $.definitions.VirtualMachineScaleSetExtension\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineImageResource\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineImage\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.ImageReference\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.ManagedDiskParameters\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.NetworkInterfaceReference\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetIPConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetUpdateIPConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetNetworkConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetUpdateNetworkConfiguration\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineScaleSetUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.AvailabilitySetUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineExtensionUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.VirtualMachineUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n  - where:\n      - $.definitions.ImageUpdate\n    suppress:\n      - RequiredPropertiesMissingInResourceModel\n\n\n  - where:\n      - $.definitions.VirtualMachineScaleSetVM\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineExtensionImage\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.RollingUpgradeStatusInfo\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineImageResource\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineImage\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.VirtualMachineImageResource\n    suppress:\n      - TrackedResourceGetOperation\n  - where:\n      - $.definitions.Gallery\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.GalleryImage\n    suppress:\n      - TrackedResourcePatchOperation\n  - where:\n      - $.definitions.GalleryImageVersion\n    suppress:\n      - TrackedResourcePatchOperation\n\n```\n### Tag: package-2018-06-exclude-gallery\n\nThese settings apply only when `--tag=package-2018-06-exclude-gallery` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-06-exclude-gallery'\ninput-file:\n- Microsoft.Compute/stable/2018-06-01/compute.json\n- Microsoft.Compute/stable/2018-06-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-2018-06\n\nThese settings apply only when `--tag=package-2018-06` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-06'\ninput-file:\n- Microsoft.Compute/stable/2018-06-01/compute.json\n- Microsoft.Compute/stable/2018-06-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.Compute/stable/2018-06-01/gallery.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-2018-06-01\n\nThese settings apply only when `--tag=package-2018-06-01` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-06-01'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/compute.json\n- Microsoft.Compute/stable/2018-04-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.Compute/stable/2018-06-01/gallery.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-only-2018-06\n\nThese settings apply only when `--tag=package-compute-only-2018-06` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-only-2018-06'\ninput-file:\n- Microsoft.Compute/stable/2018-06-01/compute.json\n- Microsoft.Compute/stable/2018-06-01/runCommands.json\n- Microsoft.Compute/stable/2018-06-01/gallery.json\n```\n\n### Tag: package-2018-04-01\n\nThese settings apply only when `--tag=package-2018-04-01` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-04-01'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/compute.json\n- Microsoft.Compute/stable/2018-04-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-2018-04\n\nThese settings apply only when `--tag=package-2018-04` is specified on the command line.\n\n``` yaml $(tag) == 'package-2018-04'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2018-04\n\nThese settings apply only when `--tag=package-compute-2018-04` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2018-04'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/compute.json\n- Microsoft.Compute/stable/2018-04-01/runCommands.json\n- Microsoft.Compute/stable/2018-04-01/disk.json\n```\n\n### Tag: package-disks-2018-04\n\nThese settings apply only when `--tag=package-disks-2018-04` is specified on the command line.\n\n``` yaml $(tag) == 'package-disks-2018-04'\ninput-file:\n- Microsoft.Compute/stable/2018-04-01/disk.json\n```\n\n### Tag: package-2017-12\n\nThese settings apply only when `--tag=package-2017-12` is specified on the command line.\n\n``` yaml $(tag) == 'package-2017-12'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2017-12\n\nThese settings apply only when `--tag=package-compute-2017-12` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2017-12'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n- Microsoft.Compute/stable/2017-09-01/skus.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n```\n\n### Tag: package-compute-only-2017-12\n\nThese settings apply only when `--tag=package-compute-only-2017-12` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-only-2017-12'\ninput-file:\n- Microsoft.Compute/stable/2017-12-01/compute.json\n- Microsoft.Compute/stable/2017-12-01/runCommands.json\n```\n\n### Tag: package-skus-2017-09\n\nThese settings apply only when `--tag=package-skus-2017-09` is specified on the command line.\n\n``` yaml $(tag) == 'package-skus-2017-09'\ninput-file:\n- Microsoft.Compute/stable/2017-09-01/skus.json\n```\n\n### Tag: package-2017-03\n\nThese settings apply only when `--tag=package-2017-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-2017-03'\ninput-file:\n- Microsoft.Compute/stable/2017-03-30/compute.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n- Microsoft.Compute/stable/2017-03-30/runCommands.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2017-03\n\nThese settings apply only when `--tag=package-compute-2017-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2017-03'\ninput-file:\n- Microsoft.Compute/stable/2017-03-30/compute.json\n- Microsoft.Compute/stable/2017-03-30/disk.json\n- Microsoft.Compute/stable/2017-03-30/runCommands.json\n```\n\n### Tag: package-container-service-2017-01\n\nThese settings apply only when `--tag=package-container-service-2017-01` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2017-01'\ninput-file:\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-container-service-2016-09\n\nThese settings apply only when `--tag=package-container-service-2016-09` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2016-09'\ninput-file:\n- Microsoft.ContainerService/stable/2016-09-30/containerService.json\n```\n\n### Tag: package-2016-04-preview\n\nThese settings apply only when `--tag=package-2016-04-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-2016-04-preview'\ninput-file:\n- Microsoft.Compute/preview/2016-04-30-preview/compute.json\n- Microsoft.Compute/preview/2016-04-30-preview/disk.json\n- Microsoft.ContainerService/stable/2017-01-31/containerService.json\n```\n\n### Tag: package-compute-2016-04-preview\n\nThese settings apply only when `--tag=package-compute-2016-04-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2016-04-preview'\ninput-file:\n- Microsoft.Compute/preview/2016-04-30-preview/compute.json\n- Microsoft.Compute/preview/2016-04-30-preview/disk.json\n```\n\n### Tag: package-2016-03\n\nThese settings apply only when `--tag=package-2016-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-2016-03'\ninput-file:\n- Microsoft.Compute/stable/2016-03-30/compute.json\n- Microsoft.ContainerService/stable/2016-03-30/containerService.json\n```\n\n### Tag: package-compute-2016-03\n\nThese settings apply only when `--tag=package-compute-2016-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2016-03'\ninput-file:\n- Microsoft.Compute/stable/2016-03-30/compute.json\n```\n\n### Tag: package-container-service-2016-03\n\nThese settings apply only when `--tag=package-container-service-2016-03` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2016-03'\ninput-file:\n- Microsoft.ContainerService/stable/2016-03-30/containerService.json\n```\n\n### Tag: package-container-service-2015-11-preview\n\nThese setings apply only when `--tag=package-container-service-2015-11-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-container-service-2015-11-preview'\ninput-file:\n- Microsoft.ContainerService/preview/2015-11-01-preview/containerService.json\n```\n\n### Tag: package-compute-2015-06\n\nThese settings apply only when `--tag=package-compute-2015-06` is specified on the command line.\n\n``` yaml $(tag) == 'package-compute-2015-06'\ninput-file:\n- Microsoft.Compute/stable/2015-06-15/compute.json\n```\n\n### Tag: package-2015-06-preview\n\nThese settings apply only when `--tag=package-2015-06-preview` is specified on the command line.\n\n``` yaml $(tag) == 'package-2015-06-preview'\ninput-file:\n- Microsoft.Compute/stable/2015-06-15/compute.json\n- Microsoft.ContainerService/preview/2015-11-01-preview/containerService.json\n```\n\n\n---\n# Code Generation\n\n\n## Swagger to SDK\n\nThis section describes what SDK should be generated by the automatic system.\nThis is not used by Autorest itself.\n\n``` yaml $(swagger-to-sdk)\nswagger-to-sdk:\n  - repo: azure-sdk-for-python\n    after_scripts:\n      - python ./scripts/multiapi_init_gen.py azure-mgmt-compute\n  - repo: azure-sdk-for-java\n  - repo: azure-sdk-for-go\n  - repo: azure-sdk-for-node\n  - repo: azure-sdk-for-ruby\n    after_scripts:\n      - bundle install && rake arm:regen_all_profiles['azure_mgmt_compute']\n```\n\n## Python\n\nThese settings apply only when `--python` is specified on the command line.\n\n``` yaml $(python)\npython:\n  azure-arm: true\n  license-header: MICROSOFT_MIT_NO_VERSION\n  payload-flattening-threshold: 2\n  package-name: azure-mgmt-compute\n  no-namespace-folders: true\n  clear-output-folder: true\n```\n\n### Python multi-api\n\nGenerate all API versions currently shipped for this package\n\n```yaml $(python) && $(multiapi)\nbatch:\n  - tag: package-compute-only-2018-06\n  - tag: package-compute-2018-04\n  - tag: package-compute-only-2017-12\n  - tag: package-skus-2017-09\n  - tag: package-compute-2017-03\n  - tag: package-compute-2016-04-preview\n  - tag: package-compute-2016-03\n  - tag: package-compute-2015-06\n```\n\n### Tag: package-compute-only-2018-06 and python\n\nThese settings apply only when `--tag=package-compute-only-2018-06 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-only-2018-06' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2018_06_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2018_06_01\n```\n\n### Tag: package-compute-2018-04 and python\n\nThese settings apply only when `--tag=package-compute-2018-04 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2018-04' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2018_04_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2018_04_01\n```\n\n### Tag: package-compute-only-2017-12 and python\n\nThese settings apply only when `--tag=package-compute-only-2017-12 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-only-2017-12' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2017_12_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2017_12_01\n```\n\n### Tag: package-skus-2017-09 and python\n\nThese settings apply only when `--tag=package-skus-2017-09 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-skus-2017-09' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2017_09_01\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2017_09_01\n```\n\n### Tag: package-compute-2017-03 and python\n\nThese settings apply only when `--tag=package-compute-2017-03 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2017-03' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2017_03_30\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2017_03_30\n```\n\n### Tag: package-compute-2016-04-preview and python\n\nThese settings apply only when `--tag=package-compute-2016-04-preview --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2016-04-preview' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2016_04_30_preview\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2016_04_30_preview\n```\n\n### Tag: package-compute-2016-03 and python\n\nThese settings apply only when `--tag=package-compute-2016-03 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2016-03' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2016_03_30\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2016_03_30\n```\n\n### Tag: package-compute-2015-06 and python\n\nThese settings apply only when `--tag=package-compute-2015-06 --python` is specified on the command line.\nPlease also specify `--python-sdks-folder=<path to the root directory of your azure-sdk-for-python clone>`.\n\n``` yaml $(tag) == 'package-compute-2015-06' && $(python)\npython:\n  namespace: azure.mgmt.compute.v2015_06_15\n  output-folder: $(python-sdks-folder)/azure-mgmt-compute/azure/mgmt/compute/v2015_06_15\n```\n\n\n## Java\n\nThese settings apply only when `--java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-libraries-for-java clone>`.\n\n``` yaml $(java)\nazure-arm: true\nfluent: true\nnamespace: com.microsoft.azure.management.compute\nlicense-header: MICROSOFT_MIT_NO_CODEGEN\npayload-flattening-threshold: 1\noutput-folder: $(azure-libraries-for-java-folder)/azure-mgmt-compute\n```\n\n### Java multi-api\n\n```yaml $(java) && $(multiapi)\nbatch:\n  - tag: package-disks-2018-04\n  - tag: package-compute-only-2017-12\n  - tag: package-skus-2017-09\n  - tag: package-compute-2017-03\n```\n\n### Tag: package-disks-2018-04 and java\n\nThese settings apply only when `--tag=package-disks-2018-04 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-disks-2018-04' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2018_04_01\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2018_04_01\nregenerate-manager: true\ngenerate-interface: true\n```\n\n### Tag: package-compute-only-2017-12 and java\n\nThese settings apply only when `--tag=package-compute-only-2017-12 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-compute-only-2017-12' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2017_12_01\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2017_12_01\nregenerate-manager: true\ngenerate-interface: true\n```\n\n### Tag: package-skus-2017-09 and java\n\nThese settings apply only when `--tag=package-skus-2017-09 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-skus-2017-09' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2017_09_01\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2017_09_01\nregenerate-manager: true\ngenerate-interface: true\n```\n\n### Tag: package-compute-2017-03 and java\n\nThese settings apply only when `--tag=package-compute-2017-03 --java` is specified on the command line.\nPlease also specify `--azure-libraries-for-java-folder=<path to the root directory of your azure-sdk-for-java clone>`.\n\n``` yaml $(tag) == 'package-compute-2017-03' && $(java) && $(multiapi)\njava:\n  namespace: com.microsoft.azure.management.compute.v2017_03_30\n  output-folder: $(azure-libraries-for-java-folder)/compute/resource-manager/v2017_03_30\nregenerate-manager: true\ngenerate-interface: true\n```"
  },
  {
    "path": "src/test/specs/incompatible-properties/refstring-object.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"incompatible-properties-refstring-object\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {},\n  \"definitions\": {\n    \"Foo\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"refstring-object\": {\n          \"$ref\": \"#/definitions/MyString\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Foo2\"\n        }\n      ]\n    },\n    \"Foo2\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"refstring-object\": {\n          \"type\": \"object\"\n        }\n      }\n    },\n    \"MyString\": {\n      \"type\": \"string\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/incompatible-properties/refstring-refobject.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"incompatible-properties-refstring-refobject\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {},\n  \"definitions\": {\n    \"Foo\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"refstring-refobject\": {\n          \"$ref\": \"#/definitions/MyString\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Foo2\"\n        }\n      ]\n    },\n    \"Foo2\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"refstring-refobject\": {\n          \"$ref\": \"#/definitions/MyObject\"\n        }\n      }\n    },\n    \"MyObject\": {\n      \"type\": \"object\"\n    },\n    \"MyString\": {\n      \"type\": \"string\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/incompatible-properties/string-object.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"incompatible-properties-string-object\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {},\n  \"definitions\": {\n    \"Foo\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"string-object\": {\n          \"type\": \"string\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Foo2\"\n        }\n      ]\n    },\n    \"Foo2\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"string-object\": {\n          \"type\": \"object\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/incompatible-properties/string-refobject.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"incompatible-properties-string-refobject\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {},\n  \"definitions\": {\n    \"Foo\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"string-refobject\": {\n          \"type\": \"string\"\n        }\n      },\n      \"allOf\": [\n        {\n          \"$ref\": \"#/definitions/Foo2\"\n        }\n      ]\n    },\n    \"Foo2\": {\n      \"type\": \"object\",\n      \"properties\": {\n        \"string-refobject\": {\n          \"$ref\": \"#/definitions/MyObject\"\n        }\n      }\n    },\n    \"MyObject\": {\n      \"type\": \"object\"\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/operation-location.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"operation-location\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {\n    \"/foo\": {\n      \"post\": {\n        \"responses\": {\n          \"201\": {\n            \"description\": \"Created\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/Consent\"\n            },\n            \"headers\": {\n              \"Operation-Id\": {\n                \"type\": \"string\",\n                \"description\": \"ID of the operation.\"\n              },\n              \"Operation-Location\": {\n                \"description\": \"The location of the operation job. Use this URL to monitor operation status.\",\n                \"type\": \"string\",\n                \"format\": \"uri\"\n              }\n            }\n          },\n          \"default\": {\n            \"description\": \"An error occurred.\",\n            \"schema\": {\n              \"$ref\": \"#/definitions/ErrorResponse\"\n            }\n          }\n        },\n        \"x-ms-long-running-operation\": true,\n        \"x-ms-long-running-operation-options\": {\n          \"final-state-via\": \"operation-location\"\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/rule-1003/case1.new.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"2021-06-26\"\n  },\n  \"consumes\":[\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/pets\": {\n      \"post\": {\n        \"summary\": \"post\",\n        \"operationId\": \"post_pets\",\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"description\": \"body\",\n            \"schema\": {\n              \"description\": \"body\"\n            }\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"success\"\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/rule-1003/case1.old.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"2021-06-25\"\n  },\n  \"consumes\":[\n    \"application/json\",\n    \"text/plain\"\n  ],\n  \"paths\": {\n    \"/pets\": {\n      \"post\": {\n        \"summary\": \"post\",\n        \"operationId\": \"post_pets\",\n        \"parameters\": [\n          {\n            \"name\": \"body\",\n            \"in\": \"body\",\n            \"required\": true,\n            \"description\": \"body\",\n            \"schema\": {\n              \"description\": \"body\"\n            }\n          }\n        ],\n        \"responses\": {\n          \"200\": {\n            \"description\": \"success\"\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/rule-1004/case1.new.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"2021-06-26\"\n  },\n  \"produces\":[\n    \"application/json\",\n    \"text/plain\"\n  ],\n  \"paths\": {\n    \"/pets\": {\n      \"get\": {\n        \"summary\": \"get\",\n        \"operationId\": \"list_pets\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"success\"\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/rule-1004/case1.old.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"2021-06-25\"\n  },\n  \"produces\":[\n    \"application/json\"\n  ],\n  \"paths\": {\n    \"/pets\": {\n      \"get\": {\n        \"summary\": \"get\",\n        \"operationId\": \"list_pets\",\n        \"responses\": {\n          \"200\": {\n            \"description\": \"success\"\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/simple.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"0\"\n  },\n  \"paths\": {}\n}"
  },
  {
    "path": "src/test/specs/some-changes/new.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"0\"\n  },\n  \"paths\": {\n    \"/x\": {\n      \n    }\n  }\n}"
  },
  {
    "path": "src/test/specs/some-changes/old.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"title\",\n    \"version\": \"0\"\n  },\n  \"paths\": {}\n}"
  },
  {
    "path": "src/test/specs/xms-enum-name/new.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"xms-enum-name\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {\n  },\n  \"definitions\": {\n    \"Foo\": {\n      \"type\":\"object\",\n      \"properties\": {\n        \"bar\": {\n          \"type\":\"string\",\n          \"enum\": [\n            \"baz\"\n          ],\n          \"x-ms-enum\": {\n            \"modelAsString\": false\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/xms-enum-name/old.json",
    "content": "﻿{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"xms-enum-name\",\n    \"version\": \"1.0\"\n  },\n  \"paths\": {\n  },\n  \"definitions\": {\n    \"Foo\": {\n      \"type\":\"object\",\n      \"properties\": {\n        \"bar\": {\n          \"type\":\"string\",\n          \"enum\": [\n            \"baz\"\n          ],\n          \"x-ms-enum\": {\n            \"name\": \"Foo\",\n            \"modelAsString\": false\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/xmspath/new.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    },\n    \"P2\": {\n      \"name\": \"p2\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"x-ms-paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P2\"\n        }\n      ],\n      \"get\": {\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {}\n          }\n        }\n      }\n    },\n    \"?does-not-start-with-slash\": {}\n  },\n  \"paths\": {\n    \"/api/Operations1\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P2\"\n        }\n      ],\n      \"post\": {\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {}\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/specs/xmspath/old.json",
    "content": "{\n  \"swagger\": \"2.0\",\n  \"info\": {\n    \"title\": \"common_parameter_check_04\",\n    \"version\": \"1.0\"\n  },\n  \"parameters\": {\n    \"P0\": {\n      \"name\": \"p0\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    },\n    \"P2\": {\n      \"name\": \"p2\",\n      \"in\": \"query\",\n      \"type\": \"string\"\n    }\n  },\n  \"host\": \"localhost:8000\",\n  \"schemes\": [ \"http\", \"https\" ],\n  \"paths\": {\n    \"/api/Operations\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P2\"\n        }\n      ],\n      \"get\": {\n        \"operationId\": \"Operations_Get\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {}\n          }\n        }\n      }\n    },\n    \"/api/Operations1\": {\n      \"parameters\": [\n        {\n          \"$ref\": \"#/parameters/P0\"\n        },\n        {\n          \"$ref\": \"#/parameters/P2\"\n        }\n      ],\n      \"post\": {\n        \"operationId\": \"Operations_Post\",\n        \"produces\": [\n          \"text/plain\"\n        ],\n        \"responses\": {\n          \"default\": {\n            \"description\": \"Error response describing why the operation failed.\",\n            \"schema\": {}\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/test/utilTest.ts",
    "content": "import * as assert from \"assert\"\nimport { pathToJsonPointer } from \"../lib/util/utils\"\n\ndescribe(\"index\", () => {\n  it(\"get json point from json path\", () => {\n    let result = pathToJsonPointer(\"paths['Mircosoft.Compute/resoucemaneger'].operation.get[1].past\")\n    assert.equal(result, \"/paths/Mircosoft.Compute~1resoucemaneger/operation/get/1/past\")\n    result = pathToJsonPointer(\"\")\n    assert.equal(result, \"\")\n    result = pathToJsonPointer(\"paths['Mircosoft.Compute~resoucemaneger/test'].operation.get[1].past\")\n    assert.equal(result, \"/paths/Mircosoft.Compute~0resoucemaneger~1test/operation/get/1/past\")\n    result = pathToJsonPointer(\"paths['Mircosoft.Compute~resouce.maneger/test'].operation.get[1].past\")\n    assert.equal(result, \"/paths/Mircosoft.Compute~0resouce.maneger~1test/operation/get/1/past\")\n    result = pathToJsonPointer(\n      \"paths['/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}\" +\n        \"/providers/Microsoft.Network/loadBalancers/{loadBalancerName}'].put.parameters[3]\"\n    )\n    assert.equal(\n      result,\n      \"/paths/~1subscriptions~1{subscriptionId}~1resourceGroups~1\" +\n        \"{resourceGroupName}~1providers~1Microsoft.Network~1loadBalancers~1{loadBalancerName}/put/parameters/3\"\n    )\n  })\n})\n"
  },
  {
    "path": "src/test/xmsEnumNameTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"xms-enum-name\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/xms-enum-name/old.json\"\n  const newFile = \"src/test/specs/xms-enum-name/new.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${newFilePath}#`,\n        path: \"\",\n        location: `${newFilePath}:1:1`\n      },\n      old: {\n        ref: `${oldFilePath}#`,\n        path: \"\",\n        location: `${oldFilePath}:1:1`\n      },\n      type: \"Info\"\n    },\n    {\n      code: \"XmsEnumChanged\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1047.md\",\n      id: \"1047\",\n      message: \"The new version has a different x-ms-enum 'name' than the previous one.\",\n      mode: \"Update\",\n      new: {\n        ref: `${newFilePath}#/definitions/Foo/properties/bar`,\n        path: \"definitions.Foo.properties.bar\",\n        location: `${newFilePath}:13:9`\n      },\n      old: {\n        ref: `${oldFilePath}#/definitions/Foo/properties/bar`,\n        path: \"definitions.Foo.properties.bar\",\n        location: `${oldFilePath}:13:9`\n      },\n      type: \"Error\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "src/test/xmsPathTest.ts",
    "content": "import * as assert from \"assert\"\nimport * as path from \"path\"\nimport { OpenApiDiff } from \"..\"\nimport { fileUrl } from \"./fileUrl\"\n\ntest(\"xms-path\", async () => {\n  const diff = new OpenApiDiff({})\n  const oldFile = \"src/test/specs/xmspath/old.json\"\n  const newFile = \"src/test/specs/xmspath/new.json\"\n  const resultStr = await diff.compare(oldFile, newFile)\n  const result = JSON.parse(resultStr)\n  const newFilePath = fileUrl(path.resolve(newFile))\n  const oldFilePath = fileUrl(path.resolve(oldFile))\n  const expected = [\n    {\n      code: \"NoVersionChange\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1001.md\",\n      id: \"1001\",\n      message: \"The versions have not changed.\",\n      mode: \"Update\",\n      new: {\n        ref: `${newFilePath}#`,\n        location: `${newFilePath}:1:1`,\n        path: \"\"\n      },\n      old: {\n        ref: `${oldFilePath}#`,\n        location: `${oldFilePath}:1:1`,\n        path: \"\"\n      },\n      type: \"Info\"\n    },\n    {\n      code: \"AddedPath\",\n      docUrl: \"https://github.com/Azure/openapi-diff/tree/master/docs/rules/1038.md\",\n      id: \"1038\",\n      message: \"The new version is adding a path that was not found in the old version.\",\n      mode: \"Addition\",\n      new: {\n        ref: `${newFilePath}#/x-ms-paths/?does-not-start-with-slash`,\n        location: `${newFilePath}:44:5`,\n        path: \"paths.?does-not-start-with-slash\"\n      },\n      old: {},\n      type: \"Info\"\n    }\n  ]\n  assert.deepStrictEqual(result, expected)\n})\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    /* Basic Options */\n    \"target\": \"es2017\",                          /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017','ES2018' or 'ESNEXT'. */\n    \"module\": \"commonjs\",                     /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */\n    // \"lib\": [],                             /* Specify library files to be included in the compilation. */\n    // \"allowJs\": true,                       /* Allow javascript files to be compiled. */\n    // \"checkJs\": true,                       /* Report errors in .js files. */\n    // \"jsx\": \"preserve\",                     /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */\n    \"declaration\": true,                   /* Generates corresponding '.d.ts' file. */\n    \"declarationMap\": true,                /* Generates a sourcemap for each corresponding '.d.ts' file. */\n    \"sourceMap\": true,                     /* Generates corresponding '.map' file. */\n    // \"outFile\": \"./\",                       /* Concatenate and emit output to single file. */\n    \"outDir\": \"./dist\",                        /* Redirect output structure to the directory. */\n    \"rootDir\": \"./src\",                       /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */\n    // \"composite\": true,                     /* Enable project compilation */\n    // \"removeComments\": true,                /* Do not emit comments to output. */\n    // \"noEmit\": true,                        /* Do not emit outputs. */\n    \"importHelpers\": true,                 /* Import emit helpers from 'tslib'. */\n    // \"downlevelIteration\": true,            /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */\n    // \"isolatedModules\": true,               /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */\n\n    /* Strict Type-Checking Options */\n    \"strict\": true,                           /* Enable all strict type-checking options. */\n    // \"noImplicitAny\": true,                 /* Raise error on expressions and declarations with an implied 'any' type. */\n    // \"strictNullChecks\": true,              /* Enable strict null checks. */\n    // \"strictFunctionTypes\": true,           /* Enable strict checking of function types. */\n    // \"strictBindCallApply\": true,           /* Enable strict 'bind', 'call', and 'apply' methods on functions. */\n    // \"strictPropertyInitialization\": true,  /* Enable strict checking of property initialization in classes. */\n    // \"noImplicitThis\": true,                /* Raise error on 'this' expressions with an implied 'any' type. */\n    // \"alwaysStrict\": true,                  /* Parse in strict mode and emit \"use strict\" for each source file. */\n\n    /* Additional Checks */\n    // \"noUnusedLocals\": true,                /* Report errors on unused locals. */\n    // \"noUnusedParameters\": true,            /* Report errors on unused parameters. */\n    // \"noImplicitReturns\": true,             /* Report error when not all code paths in function return a value. */\n    // \"noFallthroughCasesInSwitch\": true,    /* Report errors for fallthrough cases in switch statement. */\n\n    /* Module Resolution Options */\n    // \"moduleResolution\": \"node\",            /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */\n    // \"baseUrl\": \"./\",                       /* Base directory to resolve non-absolute module names. */\n    // \"paths\": {},                           /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */\n    // \"rootDirs\": [],                        /* List of root folders whose combined content represents the structure of the project at runtime. */\n    // \"typeRoots\": [],                       /* List of folders to include type definitions from. */\n    // \"types\": [],                           /* Type declaration files to be included in compilation. */\n    // \"allowSyntheticDefaultImports\": true,  /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */\n    \"esModuleInterop\": true,                   /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */\n    // \"preserveSymlinks\": true,              /* Do not resolve the real path of symlinks. */\n\n    /* Source Map Options */\n    // \"sourceRoot\": \"\",                      /* Specify the location where debugger should locate TypeScript files instead of source locations. */\n    // \"mapRoot\": \"\",                         /* Specify the location where debugger should locate map files instead of generated locations. */\n    // \"inlineSourceMap\": true,               /* Emit a single file with source maps instead of having a separate file. */\n    // \"inlineSources\": true,                 /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */\n\n    /* Experimental Options */\n    // \"experimentalDecorators\": true,        /* Enables experimental support for ES7 decorators. */\n    // \"emitDecoratorMetadata\": true,         /* Enables experimental support for emitting type metadata for decorators. */\n  }\n}\n"
  }
]