diff --git a/README.md b/README.md index bb03ff0..a6c7139 100644 --- a/README.md +++ b/README.md @@ -31,18 +31,21 @@ Provide either `prompt` or `prompt_file`; the other may be left empty. The actio ## Inputs -| Name | Required | Description | Default | -| ------------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- | ---------------- | -| `openai_api_key` | Yes | Secret used to authenticate the helper proxy with OpenAI. Store it in `secrets` and never hardcode it. | — | -| `prompt` | Conditionally | Inline prompt text. Provide this or `prompt_file`. | `""` | -| `prompt_file` | Conditionally | Path (relative to the repository root) of a file that contains the prompt. Provide this or `prompt`. | `""` | -| `working_directory` | No | Directory passed to `codex exec --cd`. Defaults to the repository root. | `""` | -| `codex_version` | No | Version of `@openai/codex` to install. | `0.42.0-alpha.3` | -| `codex_args` | No | Extra arguments forwarded to `codex exec`. Accepts JSON arrays (`["--flag", "value"]`) or shell-style strings. | `""` | -| `output_file` | No | File where the final Codex message is written. Leave empty to skip writing a file. | `""` | -| `codex_home` | No | Directory to use as the Codex CLI home (config/cache). Uses the CLI default when empty. | `""` | -| `safety_strategy` | No | Controls how the action restricts Codex privileges. See [Safety strategy](#safety-strategy). | `drop_sudo` | -| `codex_user` | No | Username to run Codex as when `safety_strategy` is `unprivileged_user`. | `""` | +| Name | Required | Description | Default | +| -------------------- | ------------- | -------------------------------------------------------------------------------------------------------------- | ---------------- | +| `openai_api_key` | Yes | Secret used to authenticate the helper proxy with OpenAI. Store it in `secrets` and never hardcode it. | — | +| `prompt` | Conditionally | Inline prompt text. Provide this or `prompt_file`. | `""` | +| `prompt_file` | Conditionally | Path (relative to the repository root) of a file that contains the prompt. Provide this or `prompt`. | `""` | +| `working_directory` | No | Directory passed to `codex exec --cd`. Defaults to the repository root. | `""` | +| `codex_version` | No | Version of `@openai/codex` to install. | `0.42.0-alpha.3` | +| `codex_args` | No | Extra arguments forwarded to `codex exec`. Accepts JSON arrays (`["--flag", "value"]`) or shell-style strings. | `""` | +| `output_file` | No | File where the final Codex message is written. Leave empty to skip writing a file. | `""` | +| `output_schema_file` | No | Schema file forwarded to `codex exec --output-schema`. Leave empty to skip passing the option. | `""` | +| `codex_home` | No | Directory to use as the Codex CLI home (config/cache). Uses the CLI default when empty. | `""` | +| `safety_strategy` | No | Controls how the action restricts Codex privileges. See [Safety strategy](#safety-strategy). | `drop_sudo` | +| `codex_user` | No | Username to run Codex as when `safety_strategy` is `unprivileged_user`. | `""` | +| `require_repo_write` | No | Whether to require the triggering actor to have write access to the repository before running. | "true" | +| `allow_bots` | No | Allow runs triggered by GitHub Apps/bot accounts to bypass the write-access check. | "false" | ## Safety Strategy diff --git a/action.yml b/action.yml index a8487fe..362b9eb 100644 --- a/action.yml +++ b/action.yml @@ -20,13 +20,17 @@ inputs: codex_version: description: "Version of `@openai/codex` to install." required: false - default: "0.43.0-alpha.3" + default: "0.43.0-alpha.17" codex_args: description: "Additional args to pass through to `codex exec`. If this value starts with `[`, it will be parsed as a JSON array; otherwise, it will be parsed as a shell-like string." required: false default: "" output_file: - description: "File path where the Codex output should be written. Ignored if the empty string." + description: "Path to a JSON Schema file describing the model's final response shape." + required: false + default: "" + output_schema_file: + description: "File path to the schema that should be passed to `codex exec --output-schema`." required: false default: "" codex_home: @@ -174,6 +178,7 @@ runs: CODEX_WORKING_DIRECTORY: ${{ inputs.working_directory || github.workspace }} CODEX_ARGS: ${{ inputs.codex_args }} CODEX_OUTPUT_FILE: ${{ inputs.output_file }} + CODEX_OUTPUT_SCHEMA_FILE: ${{ inputs.output_schema_file }} CODEX_SAFETY_STRATEGY: ${{ inputs.safety_strategy }} CODEX_USER: ${{ inputs.codex_user }} shell: bash @@ -186,6 +191,7 @@ runs: --proxy-port "${{ steps.read_server_info.outputs.port }}" \ --extra-args "$CODEX_ARGS" \ --output-file "$CODEX_OUTPUT_FILE" \ + --output-schema-file "$CODEX_OUTPUT_SCHEMA_FILE" \ --safety-strategy "$CODEX_SAFETY_STRATEGY" \ --codex-user "$CODEX_USER" diff --git a/dist/main.js b/dist/main.js index 6031bcd..08a0366 100644 --- a/dist/main.js +++ b/dist/main.js @@ -23404,6 +23404,7 @@ async function runCodexExec({ proxyPort, extraArgs, explicitOutputFile, + outputSchemaFile, safetyStrategy, codexUser }) { @@ -23447,6 +23448,9 @@ async function runCodexExec({ "--output-last-message", outputFile.file ); + if (outputSchemaFile != null) { + command.push("--output-schema", outputSchemaFile); + } command.push(...extraArgs); if (safetyStrategy === "read_only") { command.push("--config", 'sandbox_mode="read-only"'); @@ -27470,6 +27474,9 @@ async function main() { ).requiredOption( "--output-file ", "Path where the final message from `codex exec` will be written." + ).requiredOption( + "--output-schema-file ", + "Path to a schema file to pass to `codex exec --output-schema`." ).requiredOption( "--safety-strategy ", "Safety strategy to use. One of 'drop_sudo', 'read_only', 'unprivileged_user', or 'unsafe'." @@ -27486,6 +27493,7 @@ async function main() { proxyPort, extraArgs, outputFile, + outputSchemaFile, safetyStrategy, codexUser } = options; @@ -27508,6 +27516,7 @@ async function main() { proxyPort, extraArgs, explicitOutputFile: emptyAsNull(outputFile), + outputSchemaFile: emptyAsNull(outputSchemaFile), safetyStrategy: toSafetyStrategy(safetyStrategy), codexUser: emptyAsNull(codexUser) }); @@ -27594,4 +27603,4 @@ undici/lib/fetch/body.js: undici/lib/websocket/frame.js: (*! ws. MIT License. Einar Otto Stangvik *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1jb250ZW50LXR5cGUtcGFyc2VAMi4wLjEvbm9kZV9tb2R1bGVzL2Zhc3QtY29udGVudC10eXBlLXBhcnNlL2luZGV4LmpzIiwgIi4uL3NyYy9tYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb21tYW5kZXJAMTQuMC4xL25vZGVfbW9kdWxlcy9jb21tYW5kZXIvZXNtLm1qcyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL3JlYWRTZXJ2ZXJJbmZvLnRzIiwgIi4uL3NyYy9ydW5Db2RleEV4ZWMudHMiLCAiLi4vc3JjL2Ryb3BTdWRvLnRzIiwgIi4uL3NyYy9jaGVja0FjdG9yUGVybWlzc2lvbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXZlcnNhbC11c2VyLWFnZW50QDcuMC4zL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVtb3ZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2VuZHBvaW50QDEwLjEuNC9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3JlcXVlc3RAOS4yLjQvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3JlcXVlc3QtZXJyb3JANi4xLjgvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2dyYXBocWxAOC4yLjIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2F1dGgtdG9rZW5ANS4xLjIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlcXVlc3QtbG9nQDUuMy4xX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVxdWVzdC1sb2dANS4zLjFfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcGFnaW5hdGUtcmVzdEAxMS42LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy92ZXJzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2VuZHBvaW50cy10by1tZXRob2RzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3Jlc3RAMjEuMS4xL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3Jlc3RAMjEuMS4xL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmctYXJndkAwLjMuMi9ub2RlX21vZHVsZXMvc3RyaW5nLWFyZ3YvaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29tbWFuZGVyRXJyb3IgY2xhc3NcbiAqL1xuY2xhc3MgQ29tbWFuZGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBDb21tYW5kZXJFcnJvciBjbGFzc1xuICAgKiBAcGFyYW0ge251bWJlcn0gZXhpdENvZGUgc3VnZ2VzdGVkIGV4aXQgY29kZSB3aGljaCBjb3VsZCBiZSB1c2VkIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvclxuICAgKi9cbiAgY29uc3RydWN0b3IoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAvLyBwcm9wZXJseSBjYXB0dXJlIHN0YWNrIHRyYWNlIGluIE5vZGUuanNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLmV4aXRDb2RlID0gZXhpdENvZGU7XG4gICAgdGhpcy5uZXN0ZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEludmFsaWRBcmd1bWVudEVycm9yIGNsYXNzXG4gKi9cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQ29tbWFuZGVyRXJyb3Ige1xuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgSW52YWxpZEFyZ3VtZW50RXJyb3IgY2xhc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSBleHBsYW5hdGlvbiBvZiB3aHkgYXJndW1lbnQgaXMgaW52YWxpZFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKDEsICdjb21tYW5kZXIuaW52YWxpZEFyZ3VtZW50JywgbWVzc2FnZSk7XG4gICAgLy8gcHJvcGVybHkgY2FwdHVyZSBzdGFjayB0cmFjZSBpbiBOb2RlLmpzXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbmV4cG9ydHMuQ29tbWFuZGVyRXJyb3IgPSBDb21tYW5kZXJFcnJvcjtcbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbiIsICJjb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5cbmNsYXNzIEFyZ3VtZW50IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgY29tbWFuZCBhcmd1bWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBkZXNjcmlwdGlvbi5cbiAgICogVGhlIGRlZmF1bHQgaXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgcmVxdWlyZWQsIGFuZCB5b3UgY2FuIGV4cGxpY2l0bHlcbiAgICogaW5kaWNhdGUgdGhpcyB3aXRoIDw+IGFyb3VuZCB0aGUgbmFtZS4gUHV0IFtdIGFyb3VuZCB0aGUgbmFtZSBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICcnO1xuICAgIHRoaXMudmFyaWFkaWMgPSBmYWxzZTtcbiAgICB0aGlzLnBhcnNlQXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdW5kZWZpbmVkO1xuXG4gICAgc3dpdGNoIChuYW1lWzBdKSB7XG4gICAgICBjYXNlICc8JzogLy8gZS5nLiA8cmVxdWlyZWQ+XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnWyc6IC8vIGUuZy4gW29wdGlvbmFsXVxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9uYW1lLmVuZHNXaXRoKCcuLi4nKSkge1xuICAgICAgdGhpcy52YXJpYWRpYyA9IHRydWU7XG4gICAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZS5zbGljZSgwLCAtMyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhcmd1bWVudCBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2NvbGxlY3RWYWx1ZSh2YWx1ZSwgcHJldmlvdXMpIHtcbiAgICBpZiAocHJldmlvdXMgPT09IHRoaXMuZGVmYXVsdFZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHByZXZpb3VzKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuXG4gICAgcHJldmlvdXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIHByZXZpb3VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIG9wdGlvbmFsbHkgc3VwcGx5IHRoZSBkZXNjcmlwdGlvbiB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7QXJndW1lbnR9XG4gICAqL1xuXG4gIGRlZmF1bHQodmFsdWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXN0b20gaGFuZGxlciBmb3IgcHJvY2Vzc2luZyBDTEkgY29tbWFuZCBhcmd1bWVudHMgaW50byBhcmd1bWVudCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAgICogQHJldHVybiB7QXJndW1lbnR9XG4gICAqL1xuXG4gIGFyZ1BhcnNlcihmbikge1xuICAgIHRoaXMucGFyc2VBcmcgPSBmbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGFsbG93IGFyZ3VtZW50IHZhbHVlIHRvIGJlIG9uZSBvZiBjaG9pY2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXNcbiAgICogQHJldHVybiB7QXJndW1lbnR9XG4gICAqL1xuXG4gIGNob2ljZXModmFsdWVzKSB7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdmFsdWVzLnNsaWNlKCk7XG4gICAgdGhpcy5wYXJzZUFyZyA9IChhcmcsIHByZXZpb3VzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXJnQ2hvaWNlcy5pbmNsdWRlcyhhcmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICBgQWxsb3dlZCBjaG9pY2VzIGFyZSAke3RoaXMuYXJnQ2hvaWNlcy5qb2luKCcsICcpfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFyaWFkaWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RWYWx1ZShhcmcsIHByZXZpb3VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFyZ3VtZW50IHJlcXVpcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJndW1lbnR9XG4gICAqL1xuICBhcmdSZXF1aXJlZCgpIHtcbiAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFyZ3VtZW50IG9wdGlvbmFsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJndW1lbnR9XG4gICAqL1xuICBhcmdPcHRpb25hbCgpIHtcbiAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpdHMgaHVtYW4gcmVhZGFibGUgZXF1aXZhbGVudCBmb3IgaGVscCB1c2FnZS5cbiAqXG4gKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKSB7XG4gIGNvbnN0IG5hbWVPdXRwdXQgPSBhcmcubmFtZSgpICsgKGFyZy52YXJpYWRpYyA9PT0gdHJ1ZSA/ICcuLi4nIDogJycpO1xuXG4gIHJldHVybiBhcmcucmVxdWlyZWQgPyAnPCcgKyBuYW1lT3V0cHV0ICsgJz4nIDogJ1snICsgbmFtZU91dHB1dCArICddJztcbn1cblxuZXhwb3J0cy5Bcmd1bWVudCA9IEFyZ3VtZW50O1xuZXhwb3J0cy5odW1hblJlYWRhYmxlQXJnTmFtZSA9IGh1bWFuUmVhZGFibGVBcmdOYW1lO1xuIiwgImNvbnN0IHsgaHVtYW5SZWFkYWJsZUFyZ05hbWUgfSA9IHJlcXVpcmUoJy4vYXJndW1lbnQuanMnKTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IGltcG9ydCB0eXBlcyBmb3IgSlNEb2MsIHVzZWQgYnkgVmlzdWFsIFN0dWRpbyBDb2RlIEludGVsbGlTZW5zZSBhbmQgYG5wbSBydW4gdHlwZXNjcmlwdC1jaGVja0pTYFxuICogaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svanNkb2Mtc3VwcG9ydGVkLXR5cGVzLmh0bWwjaW1wb3J0LXR5cGVzXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vYXJndW1lbnQuanNcIikuQXJndW1lbnQgfSBBcmd1bWVudFxuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL2NvbW1hbmQuanNcIikuQ29tbWFuZCB9IENvbW1hbmRcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9vcHRpb24uanNcIikuT3B0aW9uIH0gT3B0aW9uXG4gKi9cblxuLy8gQWx0aG91Z2ggdGhpcyBpcyBhIGNsYXNzLCBtZXRob2RzIGFyZSBzdGF0aWMgaW4gc3R5bGUgdG8gYWxsb3cgb3ZlcnJpZGUgdXNpbmcgc3ViY2xhc3Mgb3IganVzdCBmdW5jdGlvbnMuXG5jbGFzcyBIZWxwIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWxwV2lkdGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5taW5XaWR0aFRvV3JhcCA9IDQwO1xuICAgIHRoaXMuc29ydFN1YmNvbW1hbmRzID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0T3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0dsb2JhbE9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlQ29udGV4dCBpcyBjYWxsZWQgYnkgQ29tbWFuZGVyIGFmdGVyIGFwcGx5aW5nIG92ZXJyaWRlcyBmcm9tIGBDb21tYW5kLmNvbmZpZ3VyZUhlbHAoKWBcbiAgICogYW5kIGp1c3QgYmVmb3JlIGNhbGxpbmcgYGZvcm1hdEhlbHAoKWAuXG4gICAqXG4gICAqIENvbW1hbmRlciBqdXN0IHVzZXMgdGhlIGhlbHBXaWR0aCBhbmQgdGhlIHJlc3QgaXMgcHJvdmlkZWQgZm9yIG9wdGlvbmFsIHVzZSBieSBtb3JlIGNvbXBsZXggc3ViY2xhc3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yPzogYm9vbGVhbiwgaGVscFdpZHRoPzogbnVtYmVyLCBvdXRwdXRIYXNDb2xvcnM/OiBib29sZWFuIH19IGNvbnRleHRPcHRpb25zXG4gICAqL1xuICBwcmVwYXJlQ29udGV4dChjb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGVscFdpZHRoID0gdGhpcy5oZWxwV2lkdGggPz8gY29udGV4dE9wdGlvbnMuaGVscFdpZHRoID8/IDgwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBzdWJjb21tYW5kcy4gSW5jbHVkZXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGltcGxpY2l0IGhlbHAgY29tbWFuZCwgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7Q29tbWFuZFtdfVxuICAgKi9cblxuICB2aXNpYmxlQ29tbWFuZHMoY21kKSB7XG4gICAgY29uc3QgdmlzaWJsZUNvbW1hbmRzID0gY21kLmNvbW1hbmRzLmZpbHRlcigoY21kKSA9PiAhY21kLl9oaWRkZW4pO1xuICAgIGNvbnN0IGhlbHBDb21tYW5kID0gY21kLl9nZXRIZWxwQ29tbWFuZCgpO1xuICAgIGlmIChoZWxwQ29tbWFuZCAmJiAhaGVscENvbW1hbmQuX2hpZGRlbikge1xuICAgICAgdmlzaWJsZUNvbW1hbmRzLnB1c2goaGVscENvbW1hbmQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0U3ViY29tbWFuZHMpIHtcbiAgICAgIHZpc2libGVDb21tYW5kcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgICAgICByZXR1cm4gYS5uYW1lKCkubG9jYWxlQ29tcGFyZShiLm5hbWUoKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVDb21tYW5kcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIG9wdGlvbnMgZm9yIHNvcnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBhXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjb21wYXJlT3B0aW9ucyhhLCBiKSB7XG4gICAgY29uc3QgZ2V0U29ydEtleSA9IChvcHRpb24pID0+IHtcbiAgICAgIC8vIFdZU0lXWUcgZm9yIG9yZGVyIGRpc3BsYXllZCBpbiBoZWxwLiBTaG9ydCB1c2VkIGZvciBjb21wYXJpc29uIGlmIHByZXNlbnQuIE5vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIG5lZ2F0ZWQuXG4gICAgICByZXR1cm4gb3B0aW9uLnNob3J0XG4gICAgICAgID8gb3B0aW9uLnNob3J0LnJlcGxhY2UoL14tLywgJycpXG4gICAgICAgIDogb3B0aW9uLmxvbmcucmVwbGFjZSgvXi0tLywgJycpO1xuICAgIH07XG4gICAgcmV0dXJuIGdldFNvcnRLZXkoYSkubG9jYWxlQ29tcGFyZShnZXRTb3J0S2V5KGIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgb3B0aW9ucy4gSW5jbHVkZXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGltcGxpY2l0IGhlbHAgb3B0aW9uLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtPcHRpb25bXX1cbiAgICovXG5cbiAgdmlzaWJsZU9wdGlvbnMoY21kKSB7XG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbnMgPSBjbWQub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gIW9wdGlvbi5oaWRkZW4pO1xuICAgIC8vIEJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgIGNvbnN0IGhlbHBPcHRpb24gPSBjbWQuX2dldEhlbHBPcHRpb24oKTtcbiAgICBpZiAoaGVscE9wdGlvbiAmJiAhaGVscE9wdGlvbi5oaWRkZW4pIHtcbiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgaGlkZSBjb25mbGljdGluZyBmbGFncy4gQml0IGR1YmlvdXMgYnV0IGEgaGlzdG9yaWNhbCBiZWhhdmlvdXIgdGhhdCBpcyBjb252ZW5pZW50IGZvciBzaW5nbGUtY29tbWFuZCBwcm9ncmFtcy5cbiAgICAgIGNvbnN0IHJlbW92ZVNob3J0ID0gaGVscE9wdGlvbi5zaG9ydCAmJiBjbWQuX2ZpbmRPcHRpb24oaGVscE9wdGlvbi5zaG9ydCk7XG4gICAgICBjb25zdCByZW1vdmVMb25nID0gaGVscE9wdGlvbi5sb25nICYmIGNtZC5fZmluZE9wdGlvbihoZWxwT3B0aW9uLmxvbmcpO1xuICAgICAgaWYgKCFyZW1vdmVTaG9ydCAmJiAhcmVtb3ZlTG9uZykge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKGhlbHBPcHRpb24pOyAvLyBubyBjaGFuZ2VzIG5lZWRlZFxuICAgICAgfSBlbHNlIGlmIChoZWxwT3B0aW9uLmxvbmcgJiYgIXJlbW92ZUxvbmcpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChcbiAgICAgICAgICBjbWQuY3JlYXRlT3B0aW9uKGhlbHBPcHRpb24ubG9uZywgaGVscE9wdGlvbi5kZXNjcmlwdGlvbiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGhlbHBPcHRpb24uc2hvcnQgJiYgIXJlbW92ZVNob3J0KSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goXG4gICAgICAgICAgY21kLmNyZWF0ZU9wdGlvbihoZWxwT3B0aW9uLnNob3J0LCBoZWxwT3B0aW9uLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydE9wdGlvbnMpIHtcbiAgICAgIHZpc2libGVPcHRpb25zLnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgZ2xvYmFsIG9wdGlvbnMuIChOb3QgaW5jbHVkaW5nIGhlbHAuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7T3B0aW9uW119XG4gICAqL1xuXG4gIHZpc2libGVHbG9iYWxPcHRpb25zKGNtZCkge1xuICAgIGlmICghdGhpcy5zaG93R2xvYmFsT3B0aW9ucykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9ucyA9IFtdO1xuICAgIGZvciAoXG4gICAgICBsZXQgYW5jZXN0b3JDbWQgPSBjbWQucGFyZW50O1xuICAgICAgYW5jZXN0b3JDbWQ7XG4gICAgICBhbmNlc3RvckNtZCA9IGFuY2VzdG9yQ21kLnBhcmVudFxuICAgICkge1xuICAgICAgY29uc3QgdmlzaWJsZU9wdGlvbnMgPSBhbmNlc3RvckNtZC5vcHRpb25zLmZpbHRlcihcbiAgICAgICAgKG9wdGlvbikgPT4gIW9wdGlvbi5oaWRkZW4sXG4gICAgICApO1xuICAgICAgZ2xvYmFsT3B0aW9ucy5wdXNoKC4uLnZpc2libGVPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydE9wdGlvbnMpIHtcbiAgICAgIGdsb2JhbE9wdGlvbnMuc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSBhcmd1bWVudHMgaWYgYW55IGhhdmUgYSBkZXNjcmlwdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge0FyZ3VtZW50W119XG4gICAqL1xuXG4gIHZpc2libGVBcmd1bWVudHMoY21kKSB7XG4gICAgLy8gU2lkZSBlZmZlY3QhIEFwcGx5IHRoZSBsZWdhY3kgZGVzY3JpcHRpb25zIGJlZm9yZSB0aGUgYXJndW1lbnRzIGFyZSBkaXNwbGF5ZWQuXG4gICAgaWYgKGNtZC5fYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgICBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCkgPT4ge1xuICAgICAgICBhcmd1bWVudC5kZXNjcmlwdGlvbiA9XG4gICAgICAgICAgYXJndW1lbnQuZGVzY3JpcHRpb24gfHwgY21kLl9hcmdzRGVzY3JpcHRpb25bYXJndW1lbnQubmFtZSgpXSB8fCAnJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgYXJndW1lbnRzIHdpdGggYSBkZXNjcmlwdGlvbiB0aGVuIHJldHVybiBhbGwgdGhlIGFyZ3VtZW50cy5cbiAgICBpZiAoY21kLnJlZ2lzdGVyZWRBcmd1bWVudHMuZmluZCgoYXJndW1lbnQpID0+IGFyZ3VtZW50LmRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb21tYW5kIHRlcm0gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgc3ViY29tbWFuZFRlcm0oY21kKSB7XG4gICAgLy8gTGVnYWN5LiBJZ25vcmVzIGN1c3RvbSB1c2FnZSBzdHJpbmcsIGFuZCBuZXN0ZWQgY29tbWFuZHMuXG4gICAgY29uc3QgYXJncyA9IGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzXG4gICAgICAubWFwKChhcmcpID0+IGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZykpXG4gICAgICAuam9pbignICcpO1xuICAgIHJldHVybiAoXG4gICAgICBjbWQuX25hbWUgK1xuICAgICAgKGNtZC5fYWxpYXNlc1swXSA/ICd8JyArIGNtZC5fYWxpYXNlc1swXSA6ICcnKSArXG4gICAgICAoY21kLm9wdGlvbnMubGVuZ3RoID8gJyBbb3B0aW9uc10nIDogJycpICsgLy8gc2ltcGxpc3RpYyBjaGVjayBmb3Igbm9uLWhlbHAgb3B0aW9uXG4gICAgICAoYXJncyA/ICcgJyArIGFyZ3MgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIHRlcm0gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIG9wdGlvblRlcm0ob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5mbGFncztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFyZ3VtZW50IHRlcm0gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGFyZ3VtZW50VGVybShhcmd1bWVudCkge1xuICAgIHJldHVybiBhcmd1bWVudC5uYW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGNvbW1hbmQgdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RTdWJjb21tYW5kVGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZUNvbW1hbmRzKGNtZCkucmVkdWNlKChtYXgsIGNvbW1hbmQpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kVGVybShoZWxwZXIuc3ViY29tbWFuZFRlcm0oY29tbWFuZCkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3Qgb3B0aW9uIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0T3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZU9wdGlvbnMoY21kKS5yZWR1Y2UoKG1heCwgb3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBnbG9iYWwgb3B0aW9uIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0R2xvYmFsT3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKS5yZWR1Y2UoKG1heCwgb3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBhcmd1bWVudCB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdEFyZ3VtZW50VGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZUFyZ3VtZW50cyhjbWQpLnJlZHVjZSgobWF4LCBhcmd1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKFxuICAgICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50VGVybShoZWxwZXIuYXJndW1lbnRUZXJtKGFyZ3VtZW50KSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbWFuZCB1c2FnZSB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgYnVpbHQtaW4gaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgY29tbWFuZFVzYWdlKGNtZCkge1xuICAgIC8vIFVzYWdlXG4gICAgbGV0IGNtZE5hbWUgPSBjbWQuX25hbWU7XG4gICAgaWYgKGNtZC5fYWxpYXNlc1swXSkge1xuICAgICAgY21kTmFtZSA9IGNtZE5hbWUgKyAnfCcgKyBjbWQuX2FsaWFzZXNbMF07XG4gICAgfVxuICAgIGxldCBhbmNlc3RvckNtZE5hbWVzID0gJyc7XG4gICAgZm9yIChcbiAgICAgIGxldCBhbmNlc3RvckNtZCA9IGNtZC5wYXJlbnQ7XG4gICAgICBhbmNlc3RvckNtZDtcbiAgICAgIGFuY2VzdG9yQ21kID0gYW5jZXN0b3JDbWQucGFyZW50XG4gICAgKSB7XG4gICAgICBhbmNlc3RvckNtZE5hbWVzID0gYW5jZXN0b3JDbWQubmFtZSgpICsgJyAnICsgYW5jZXN0b3JDbWROYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yQ21kTmFtZXMgKyBjbWROYW1lICsgJyAnICsgY21kLnVzYWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGNvbW1hbmREZXNjcmlwdGlvbihjbWQpIHtcbiAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICByZXR1cm4gY21kLmRlc2NyaXB0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdWJjb21tYW5kIHN1bW1hcnkgdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcy5cbiAgICogKEZhbGxiYWNrIHRvIGRlc2NyaXB0aW9uIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4pXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIHN1YmNvbW1hbmREZXNjcmlwdGlvbihjbWQpIHtcbiAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICByZXR1cm4gY21kLnN1bW1hcnkoKSB8fCBjbWQuZGVzY3JpcHRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbiBkZXNjcmlwdGlvbiB0byBzaG93IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBvcHRpb25EZXNjcmlwdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCBleHRyYUluZm8gPSBbXTtcblxuICAgIGlmIChvcHRpb24uYXJnQ2hvaWNlcykge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIC8vIHVzZSBzdHJpbmdpZnkgdG8gbWF0Y2ggdGhlIGRpc3BsYXkgb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgYGNob2ljZXM6ICR7b3B0aW9uLmFyZ0Nob2ljZXMubWFwKChjaG9pY2UpID0+IEpTT04uc3RyaW5naWZ5KGNob2ljZSkpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb24uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGRlZmF1bHQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgbW9yZSBmb3IgcHJvZ3JhbW1lciB0aGFuIGVuZCB1c2VyLFxuICAgICAgLy8gYnV0IHNob3cgdHJ1ZS9mYWxzZSBmb3IgYm9vbGVhbiBvcHRpb24gYXMgbWF5IGJlIGZvciBoYW5kLXJvbGxlZCBlbnYgb3IgY29uZmlnIHByb2Nlc3NpbmcuXG4gICAgICBjb25zdCBzaG93RGVmYXVsdCA9XG4gICAgICAgIG9wdGlvbi5yZXF1aXJlZCB8fFxuICAgICAgICBvcHRpb24ub3B0aW9uYWwgfHxcbiAgICAgICAgKG9wdGlvbi5pc0Jvb2xlYW4oKSAmJiB0eXBlb2Ygb3B0aW9uLmRlZmF1bHRWYWx1ZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgICAgIGlmIChzaG93RGVmYXVsdCkge1xuICAgICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgICBgZGVmYXVsdDogJHtvcHRpb24uZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gfHwgSlNPTi5zdHJpbmdpZnkob3B0aW9uLmRlZmF1bHRWYWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcHJlc2V0IGZvciBib29sZWFuIGFuZCBuZWdhdGVkIGFyZSBtb3JlIGZvciBwcm9ncmFtbWVyIHRoYW4gZW5kIHVzZXJcbiAgICBpZiAob3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgZXh0cmFJbmZvLnB1c2goYHByZXNldDogJHtKU09OLnN0cmluZ2lmeShvcHRpb24ucHJlc2V0QXJnKX1gKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbi5lbnZWYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0cmFJbmZvLnB1c2goYGVudjogJHtvcHRpb24uZW52VmFyfWApO1xuICAgIH1cbiAgICBpZiAoZXh0cmFJbmZvLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4dHJhRGVzY3JpcHRpb24gPSBgKCR7ZXh0cmFJbmZvLmpvaW4oJywgJyl9KWA7XG4gICAgICBpZiAob3B0aW9uLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb24uZGVzY3JpcHRpb259ICR7ZXh0cmFEZXNjcmlwdGlvbn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbi5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFyZ3VtZW50IGRlc2NyaXB0aW9uIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGFyZ3VtZW50RGVzY3JpcHRpb24oYXJndW1lbnQpIHtcbiAgICBjb25zdCBleHRyYUluZm8gPSBbXTtcbiAgICBpZiAoYXJndW1lbnQuYXJnQ2hvaWNlcykge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIC8vIHVzZSBzdHJpbmdpZnkgdG8gbWF0Y2ggdGhlIGRpc3BsYXkgb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgYGNob2ljZXM6ICR7YXJndW1lbnQuYXJnQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gSlNPTi5zdHJpbmdpZnkoY2hvaWNlKSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgYGRlZmF1bHQ6ICR7YXJndW1lbnQuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gfHwgSlNPTi5zdHJpbmdpZnkoYXJndW1lbnQuZGVmYXVsdFZhbHVlKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGV4dHJhSW5mby5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHRyYURlc2NyaXB0aW9uID0gYCgke2V4dHJhSW5mby5qb2luKCcsICcpfSlgO1xuICAgICAgaWYgKGFyZ3VtZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBgJHthcmd1bWVudC5kZXNjcmlwdGlvbn0gJHtleHRyYURlc2NyaXB0aW9ufWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0cmFEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3VtZW50LmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBhIGxpc3Qgb2YgaXRlbXMsIGdpdmVuIGEgaGVhZGluZyBhbmQgYW4gYXJyYXkgb2YgZm9ybWF0dGVkIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVhZGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtc1xuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyBzdHJpbmdbXVxuICAgKi9cbiAgZm9ybWF0SXRlbUxpc3QoaGVhZGluZywgaXRlbXMsIGhlbHBlcikge1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICAgIHJldHVybiBbaGVscGVyLnN0eWxlVGl0bGUoaGVhZGluZyksIC4uLml0ZW1zLCAnJ107XG4gIH1cblxuICAvKipcbiAgICogR3JvdXAgaXRlbXMgYnkgdGhlaXIgaGVscCBncm91cCBoZWFkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmRbXSB8IE9wdGlvbltdfSB1bnNvcnRlZEl0ZW1zXG4gICAqIEBwYXJhbSB7Q29tbWFuZFtdIHwgT3B0aW9uW119IHZpc2libGVJdGVtc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXRHcm91cFxuICAgKiBAcmV0dXJucyB7TWFwPHN0cmluZywgQ29tbWFuZFtdIHwgT3B0aW9uW10+fVxuICAgKi9cbiAgZ3JvdXBJdGVtcyh1bnNvcnRlZEl0ZW1zLCB2aXNpYmxlSXRlbXMsIGdldEdyb3VwKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIC8vIEFkZCBncm91cHMgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiB1bnNvcnRlZEl0ZW1zLlxuICAgIHVuc29ydGVkSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRHcm91cChpdGVtKTtcbiAgICAgIGlmICghcmVzdWx0Lmhhcyhncm91cCkpIHJlc3VsdC5zZXQoZ3JvdXAsIFtdKTtcbiAgICB9KTtcbiAgICAvLyBBZGQgaXRlbXMgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiB2aXNpYmxlSXRlbXMuXG4gICAgdmlzaWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0R3JvdXAoaXRlbSk7XG4gICAgICBpZiAoIXJlc3VsdC5oYXMoZ3JvdXApKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoZ3JvdXAsIFtdKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5nZXQoZ3JvdXApLnB1c2goaXRlbSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgYnVpbHQtaW4gaGVscCB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBmb3JtYXRIZWxwKGNtZCwgaGVscGVyKSB7XG4gICAgY29uc3QgdGVybVdpZHRoID0gaGVscGVyLnBhZFdpZHRoKGNtZCwgaGVscGVyKTtcbiAgICBjb25zdCBoZWxwV2lkdGggPSBoZWxwZXIuaGVscFdpZHRoID8/IDgwOyAvLyBpbiBjYXNlIHByZXBhcmVDb250ZXh0KCkgd2FzIG5vdCBjYWxsZWRcblxuICAgIGZ1bmN0aW9uIGNhbGxGb3JtYXRJdGVtKHRlcm0sIGRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gaGVscGVyLmZvcm1hdEl0ZW0odGVybSwgdGVybVdpZHRoLCBkZXNjcmlwdGlvbiwgaGVscGVyKTtcbiAgICB9XG5cbiAgICAvLyBVc2FnZVxuICAgIGxldCBvdXRwdXQgPSBbXG4gICAgICBgJHtoZWxwZXIuc3R5bGVUaXRsZSgnVXNhZ2U6Jyl9ICR7aGVscGVyLnN0eWxlVXNhZ2UoaGVscGVyLmNvbW1hbmRVc2FnZShjbWQpKX1gLFxuICAgICAgJycsXG4gICAgXTtcblxuICAgIC8vIERlc2NyaXB0aW9uXG4gICAgY29uc3QgY29tbWFuZERlc2NyaXB0aW9uID0gaGVscGVyLmNvbW1hbmREZXNjcmlwdGlvbihjbWQpO1xuICAgIGlmIChjb21tYW5kRGVzY3JpcHRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChbXG4gICAgICAgIGhlbHBlci5ib3hXcmFwKFxuICAgICAgICAgIGhlbHBlci5zdHlsZUNvbW1hbmREZXNjcmlwdGlvbihjb21tYW5kRGVzY3JpcHRpb24pLFxuICAgICAgICAgIGhlbHBXaWR0aCxcbiAgICAgICAgKSxcbiAgICAgICAgJycsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBBcmd1bWVudHNcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBoZWxwZXIudmlzaWJsZUFyZ3VtZW50cyhjbWQpLm1hcCgoYXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgaGVscGVyLnN0eWxlQXJndW1lbnRUZXJtKGhlbHBlci5hcmd1bWVudFRlcm0oYXJndW1lbnQpKSxcbiAgICAgICAgaGVscGVyLnN0eWxlQXJndW1lbnREZXNjcmlwdGlvbihoZWxwZXIuYXJndW1lbnREZXNjcmlwdGlvbihhcmd1bWVudCkpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgdGhpcy5mb3JtYXRJdGVtTGlzdCgnQXJndW1lbnRzOicsIGFyZ3VtZW50TGlzdCwgaGVscGVyKSxcbiAgICApO1xuXG4gICAgLy8gT3B0aW9uc1xuICAgIGNvbnN0IG9wdGlvbkdyb3VwcyA9IHRoaXMuZ3JvdXBJdGVtcyhcbiAgICAgIGNtZC5vcHRpb25zLFxuICAgICAgaGVscGVyLnZpc2libGVPcHRpb25zKGNtZCksXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uaGVscEdyb3VwSGVhZGluZyA/PyAnT3B0aW9uczonLFxuICAgICk7XG4gICAgb3B0aW9uR3JvdXBzLmZvckVhY2goKG9wdGlvbnMsIGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25MaXN0ID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSxcbiAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25EZXNjcmlwdGlvbihoZWxwZXIub3B0aW9uRGVzY3JpcHRpb24ob3B0aW9uKSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQodGhpcy5mb3JtYXRJdGVtTGlzdChncm91cCwgb3B0aW9uTGlzdCwgaGVscGVyKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaGVscGVyLnNob3dHbG9iYWxPcHRpb25zKSB7XG4gICAgICBjb25zdCBnbG9iYWxPcHRpb25MaXN0ID0gaGVscGVyXG4gICAgICAgIC52aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSksXG4gICAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25EZXNjcmlwdGlvbihoZWxwZXIub3B0aW9uRGVzY3JpcHRpb24ob3B0aW9uKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgICB0aGlzLmZvcm1hdEl0ZW1MaXN0KCdHbG9iYWwgT3B0aW9uczonLCBnbG9iYWxPcHRpb25MaXN0LCBoZWxwZXIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tYW5kc1xuICAgIGNvbnN0IGNvbW1hbmRHcm91cHMgPSB0aGlzLmdyb3VwSXRlbXMoXG4gICAgICBjbWQuY29tbWFuZHMsXG4gICAgICBoZWxwZXIudmlzaWJsZUNvbW1hbmRzKGNtZCksXG4gICAgICAoc3ViKSA9PiBzdWIuaGVscEdyb3VwKCkgfHwgJ0NvbW1hbmRzOicsXG4gICAgKTtcbiAgICBjb21tYW5kR3JvdXBzLmZvckVhY2goKGNvbW1hbmRzLCBncm91cCkgPT4ge1xuICAgICAgY29uc3QgY29tbWFuZExpc3QgPSBjb21tYW5kcy5tYXAoKHN1YikgPT4ge1xuICAgICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZFRlcm0oaGVscGVyLnN1YmNvbW1hbmRUZXJtKHN1YikpLFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmREZXNjcmlwdGlvbihoZWxwZXIuc3ViY29tbWFuZERlc2NyaXB0aW9uKHN1YikpLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KHRoaXMuZm9ybWF0SXRlbUxpc3QoZ3JvdXAsIGNvbW1hbmRMaXN0LCBoZWxwZXIpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGRpc3BsYXkgd2lkdGggb2Ygc3RyaW5nLCBpZ25vcmluZyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuIFVzZWQgaW4gcGFkZGluZyBhbmQgd3JhcHBpbmcgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXNwbGF5V2lkdGgoc3RyKSB7XG4gICAgcmV0dXJuIHN0cmlwQ29sb3Ioc3RyKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogU3R5bGUgdGhlIHRpdGxlIGZvciBkaXNwbGF5aW5nIGluIHRoZSBoZWxwLiBDYWxsZWQgd2l0aCAnVXNhZ2U6JywgJ09wdGlvbnM6JywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdHlsZVRpdGxlKHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBzdHlsZVVzYWdlKHN0cikge1xuICAgIC8vIFVzYWdlIGhhcyBsb3RzIG9mIHBhcnRzIHRoZSB1c2VyIG1pZ2h0IGxpa2UgdG8gY29sb3Igc2VwYXJhdGVseSEgQXNzdW1lIGRlZmF1bHQgdXNhZ2Ugc3RyaW5nIHdoaWNoIGlzIGZvcm1lZCBsaWtlOlxuICAgIC8vICAgIGNvbW1hbmQgc3ViY29tbWFuZCBbb3B0aW9uc10gW2NvbW1hbmRdIDxmb28+IFtiYXJdXG4gICAgcmV0dXJuIHN0clxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbb3B0aW9uc10nKSByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkID09PSAnW2NvbW1hbmRdJykgcmV0dXJuIHRoaXMuc3R5bGVTdWJjb21tYW5kVGV4dCh3b3JkKTtcbiAgICAgICAgaWYgKHdvcmRbMF0gPT09ICdbJyB8fCB3b3JkWzBdID09PSAnPCcpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVBcmd1bWVudFRleHQod29yZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlQ29tbWFuZFRleHQod29yZCk7IC8vIFJlc3RyaWN0IHRvIGluaXRpYWwgd29yZHM/XG4gICAgICB9KVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuICBzdHlsZUNvbW1hbmREZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlT3B0aW9uRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmREZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlQXJndW1lbnREZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVPcHRpb25UZXJtKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlT3B0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZFRlcm0oc3RyKSB7XG4gICAgLy8gVGhpcyBpcyB2ZXJ5IGxpa2UgdXNhZ2Ugd2l0aCBsb3RzIG9mIHBhcnRzISBBc3N1bWUgZGVmYXVsdCBzdHJpbmcgd2hpY2ggaXMgZm9ybWVkIGxpa2U6XG4gICAgLy8gICAgc3ViY29tbWFuZCBbb3B0aW9uc10gPGZvbz4gW2Jhcl1cbiAgICByZXR1cm4gc3RyXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLm1hcCgod29yZCkgPT4ge1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tvcHRpb25zXScpIHJldHVybiB0aGlzLnN0eWxlT3B0aW9uVGV4dCh3b3JkKTtcbiAgICAgICAgaWYgKHdvcmRbMF0gPT09ICdbJyB8fCB3b3JkWzBdID09PSAnPCcpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVBcmd1bWVudFRleHQod29yZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlU3ViY29tbWFuZFRleHQod29yZCk7IC8vIFJlc3RyaWN0IHRvIGluaXRpYWwgd29yZHM/XG4gICAgICB9KVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuICBzdHlsZUFyZ3VtZW50VGVybShzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dChzdHIpO1xuICB9XG4gIHN0eWxlT3B0aW9uVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlQXJndW1lbnRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlQ29tbWFuZFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBhZCB3aWR0aCBmcm9tIHRoZSBtYXhpbXVtIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBwYWRXaWR0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIGhlbHBlci5sb25nZXN0T3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdEdsb2JhbE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RTdWJjb21tYW5kVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdEFyZ3VtZW50VGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3QgbWFudWFsbHkgd3JhcHBlZCBhbmQgaW5kZW50ZWQgc3RyaW5ncyBieSBjaGVja2luZyBmb3IgbGluZSBicmVhayBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcHJlZm9ybWF0dGVkKHN0cikge1xuICAgIHJldHVybiAvXFxuW15cXFNcXHJcXG5dLy50ZXN0KHN0cik7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBcIml0ZW1cIiwgd2hpY2ggY29uc2lzdHMgb2YgYSB0ZXJtIGFuZCBkZXNjcmlwdGlvbi4gUGFkIHRoZSB0ZXJtIGFuZCB3cmFwIHRoZSBkZXNjcmlwdGlvbiwgaW5kZW50aW5nIHRoZSBmb2xsb3dpbmcgbGluZXMuXG4gICAqXG4gICAqIFNvIFwiVFRUXCIsIDUsIFwiREREIEREREQgREQgREREXCIgbWlnaHQgYmUgZm9ybWF0dGVkIGZvciB0aGlzLmhlbHBXaWR0aD0xNyBsaWtlIHNvOlxuICAgKiAgIFRUVCAgREREIERERERcbiAgICogICAgICAgIEREIERERFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVybVxuICAgKiBAcGFyYW0ge251bWJlcn0gdGVybVdpZHRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZm9ybWF0SXRlbSh0ZXJtLCB0ZXJtV2lkdGgsIGRlc2NyaXB0aW9uLCBoZWxwZXIpIHtcbiAgICBjb25zdCBpdGVtSW5kZW50ID0gMjtcbiAgICBjb25zdCBpdGVtSW5kZW50U3RyID0gJyAnLnJlcGVhdChpdGVtSW5kZW50KTtcbiAgICBpZiAoIWRlc2NyaXB0aW9uKSByZXR1cm4gaXRlbUluZGVudFN0ciArIHRlcm07XG5cbiAgICAvLyBQYWQgdGhlIHRlcm0gb3V0IHRvIGEgY29uc2lzdGVudCB3aWR0aCwgc28gZGVzY3JpcHRpb25zIGFyZSBhbGlnbmVkLlxuICAgIGNvbnN0IHBhZGRlZFRlcm0gPSB0ZXJtLnBhZEVuZChcbiAgICAgIHRlcm1XaWR0aCArIHRlcm0ubGVuZ3RoIC0gaGVscGVyLmRpc3BsYXlXaWR0aCh0ZXJtKSxcbiAgICApO1xuXG4gICAgLy8gRm9ybWF0IHRoZSBkZXNjcmlwdGlvbi5cbiAgICBjb25zdCBzcGFjZXJXaWR0aCA9IDI7IC8vIGJldHdlZW4gdGVybSBhbmQgZGVzY3JpcHRpb25cbiAgICBjb25zdCBoZWxwV2lkdGggPSB0aGlzLmhlbHBXaWR0aCA/PyA4MDsgLy8gaW4gY2FzZSBwcmVwYXJlQ29udGV4dCgpIHdhcyBub3QgY2FsbGVkXG4gICAgY29uc3QgcmVtYWluaW5nV2lkdGggPSBoZWxwV2lkdGggLSB0ZXJtV2lkdGggLSBzcGFjZXJXaWR0aCAtIGl0ZW1JbmRlbnQ7XG4gICAgbGV0IGZvcm1hdHRlZERlc2NyaXB0aW9uO1xuICAgIGlmIChcbiAgICAgIHJlbWFpbmluZ1dpZHRoIDwgdGhpcy5taW5XaWR0aFRvV3JhcCB8fFxuICAgICAgaGVscGVyLnByZWZvcm1hdHRlZChkZXNjcmlwdGlvbilcbiAgICApIHtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHdyYXBwZWREZXNjcmlwdGlvbiA9IGhlbHBlci5ib3hXcmFwKGRlc2NyaXB0aW9uLCByZW1haW5pbmdXaWR0aCk7XG4gICAgICBmb3JtYXR0ZWREZXNjcmlwdGlvbiA9IHdyYXBwZWREZXNjcmlwdGlvbi5yZXBsYWNlKFxuICAgICAgICAvXFxuL2csXG4gICAgICAgICdcXG4nICsgJyAnLnJlcGVhdCh0ZXJtV2lkdGggKyBzcGFjZXJXaWR0aCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBhbmQgb3ZlcmFsbCBpbmRlbnQuXG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW1JbmRlbnRTdHIgK1xuICAgICAgcGFkZGVkVGVybSArXG4gICAgICAnICcucmVwZWF0KHNwYWNlcldpZHRoKSArXG4gICAgICBmb3JtYXR0ZWREZXNjcmlwdGlvbi5yZXBsYWNlKC9cXG4vZywgYFxcbiR7aXRlbUluZGVudFN0cn1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCBhIHN0cmluZyBhdCB3aGl0ZXNwYWNlLCBwcmVzZXJ2aW5nIGV4aXN0aW5nIGxpbmUgYnJlYWtzLlxuICAgKiBXcmFwcGluZyBpcyBza2lwcGVkIGlmIHRoZSB3aWR0aCBpcyBsZXNzIHRoYW4gYG1pbldpZHRoVG9XcmFwYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGJveFdyYXAoc3RyLCB3aWR0aCkge1xuICAgIGlmICh3aWR0aCA8IHRoaXMubWluV2lkdGhUb1dyYXApIHJldHVybiBzdHI7XG5cbiAgICBjb25zdCByYXdMaW5lcyA9IHN0ci5zcGxpdCgvXFxyXFxufFxcbi8pO1xuICAgIC8vIHNwbGl0IHVwIHRleHQgYnkgd2hpdGVzcGFjZVxuICAgIGNvbnN0IGNodW5rUGF0dGVybiA9IC9bXFxzXSpbXlxcc10rL2c7XG4gICAgY29uc3Qgd3JhcHBlZExpbmVzID0gW107XG4gICAgcmF3TGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgY29uc3QgY2h1bmtzID0gbGluZS5tYXRjaChjaHVua1BhdHRlcm4pO1xuICAgICAgaWYgKGNodW5rcyA9PT0gbnVsbCkge1xuICAgICAgICB3cmFwcGVkTGluZXMucHVzaCgnJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHN1bUNodW5rcyA9IFtjaHVua3Muc2hpZnQoKV07XG4gICAgICBsZXQgc3VtV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChzdW1DaHVua3NbMF0pO1xuICAgICAgY2h1bmtzLmZvckVhY2goKGNodW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2libGVXaWR0aCA9IHRoaXMuZGlzcGxheVdpZHRoKGNodW5rKTtcbiAgICAgICAgLy8gQWNjdW11bGF0ZSBjaHVua3Mgd2hpbGUgdGhleSBmaXQgaW50byB3aWR0aC5cbiAgICAgICAgaWYgKHN1bVdpZHRoICsgdmlzaWJsZVdpZHRoIDw9IHdpZHRoKSB7XG4gICAgICAgICAgc3VtQ2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgIHN1bVdpZHRoICs9IHZpc2libGVXaWR0aDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd3JhcHBlZExpbmVzLnB1c2goc3VtQ2h1bmtzLmpvaW4oJycpKTtcblxuICAgICAgICBjb25zdCBuZXh0Q2h1bmsgPSBjaHVuay50cmltU3RhcnQoKTsgLy8gdHJpbSBzcGFjZSBhdCBsaW5lIGJyZWFrXG4gICAgICAgIHN1bUNodW5rcyA9IFtuZXh0Q2h1bmtdO1xuICAgICAgICBzdW1XaWR0aCA9IHRoaXMuZGlzcGxheVdpZHRoKG5leHRDaHVuayk7XG4gICAgICB9KTtcbiAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1bUNodW5rcy5qb2luKCcnKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gd3JhcHBlZExpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgc3R5bGUgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIHN0cmluZy4gSW4gcGFydGljdWxhciwgU0dSIChTZWxlY3QgR3JhcGhpYyBSZW5kaXRpb24pIGNvZGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAcGFja2FnZVxuICovXG5cbmZ1bmN0aW9uIHN0cmlwQ29sb3Ioc3RyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gIGNvbnN0IHNnclBhdHRlcm4gPSAvXFx4MWJcXFtcXGQqKDtcXGQqKSptL2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShzZ3JQYXR0ZXJuLCAnJyk7XG59XG5cbmV4cG9ydHMuSGVscCA9IEhlbHA7XG5leHBvcnRzLnN0cmlwQ29sb3IgPSBzdHJpcENvbG9yO1xuIiwgImNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcblxuY2xhc3MgT3B0aW9uIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgYE9wdGlvbmAgd2l0aCB0aGUgZ2l2ZW4gYGZsYWdzYCBhbmQgYGRlc2NyaXB0aW9uYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG5cbiAgICB0aGlzLnJlcXVpcmVkID0gZmxhZ3MuaW5jbHVkZXMoJzwnKTsgLy8gQSB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkIHdoZW4gdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQuXG4gICAgdGhpcy5vcHRpb25hbCA9IGZsYWdzLmluY2x1ZGVzKCdbJyk7IC8vIEEgdmFsdWUgaXMgb3B0aW9uYWwgd2hlbiB0aGUgb3B0aW9uIGlzIHNwZWNpZmllZC5cbiAgICAvLyB2YXJpYWRpYyB0ZXN0IGlnbm9yZXMgPHZhbHVlLC4uLj4gZXQgYWwgd2hpY2ggbWlnaHQgYmUgdXNlZCB0byBkZXNjcmliZSBjdXN0b20gc3BsaXR0aW5nIG9mIHNpbmdsZSBhcmd1bWVudFxuICAgIHRoaXMudmFyaWFkaWMgPSAvXFx3XFwuXFwuXFwuWz5cXF1dJC8udGVzdChmbGFncyk7IC8vIFRoZSBvcHRpb24gY2FuIHRha2UgbXVsdGlwbGUgdmFsdWVzLlxuICAgIHRoaXMubWFuZGF0b3J5ID0gZmFsc2U7IC8vIFRoZSBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZywgd2hpY2ggdXN1YWxseSBtZWFucyBpdCBtdXN0IGJlIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuXG4gICAgY29uc3Qgb3B0aW9uRmxhZ3MgPSBzcGxpdE9wdGlvbkZsYWdzKGZsYWdzKTtcbiAgICB0aGlzLnNob3J0ID0gb3B0aW9uRmxhZ3Muc2hvcnRGbGFnOyAvLyBNYXkgYmUgYSBzaG9ydCBmbGFnLCB1bmRlZmluZWQsIG9yIGV2ZW4gYSBsb25nIGZsYWcgKGlmIG9wdGlvbiBoYXMgdHdvIGxvbmcgZmxhZ3MpLlxuICAgIHRoaXMubG9uZyA9IG9wdGlvbkZsYWdzLmxvbmdGbGFnO1xuICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgdGhpcy5uZWdhdGUgPSB0aGlzLmxvbmcuc3RhcnRzV2l0aCgnLS1uby0nKTtcbiAgICB9XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnByZXNldEFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVudlZhciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhcnNlQXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29uZmxpY3RzV2l0aCA9IFtdO1xuICAgIHRoaXMuaW1wbGllZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlbHBHcm91cEhlYWRpbmcgPSB1bmRlZmluZWQ7IC8vIHNvZnQgaW5pdGlhbGlzZWQgd2hlbiBvcHRpb24gYWRkZWQgdG8gY29tbWFuZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIG9wdGlvbmFsbHkgc3VwcGx5IHRoZSBkZXNjcmlwdGlvbiB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBkZWZhdWx0KHZhbHVlLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXNldCB0byB1c2Ugd2hlbiBvcHRpb24gdXNlZCB3aXRob3V0IG9wdGlvbi1hcmd1bWVudCwgZXNwZWNpYWxseSBvcHRpb25hbCBidXQgYWxzbyBib29sZWFuIGFuZCBuZWdhdGVkLlxuICAgKiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgKHBhcnNlQXJnKSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBPcHRpb24oJy0tY29sb3InKS5kZWZhdWx0KCdHUkVZU0NBTEUnKS5wcmVzZXQoJ1JHQicpO1xuICAgKiBuZXcgT3B0aW9uKCctLWRvbmF0ZSBbYW1vdW50XScpLnByZXNldCgnMjAnKS5hcmdQYXJzZXIocGFyc2VGbG9hdCk7XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gYXJnXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgcHJlc2V0KGFyZykge1xuICAgIHRoaXMucHJlc2V0QXJnID0gYXJnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvcHRpb24gbmFtZShzKSB0aGF0IGNvbmZsaWN0IHdpdGggdGhpcyBvcHRpb24uXG4gICAqIEFuIGVycm9yIHdpbGwgYmUgZGlzcGxheWVkIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIGZvdW5kIGR1cmluZyBwYXJzaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBuZXcgT3B0aW9uKCctLXJnYicpLmNvbmZsaWN0cygnY215aycpO1xuICAgKiBuZXcgT3B0aW9uKCctLWpzJykuY29uZmxpY3RzKFsndHMnLCAnanN4J10pO1xuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBzdHJpbmdbXSl9IG5hbWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgY29uZmxpY3RzKG5hbWVzKSB7XG4gICAgdGhpcy5jb25mbGljdHNXaXRoID0gdGhpcy5jb25mbGljdHNXaXRoLmNvbmNhdChuYW1lcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBpbXBsaWVkIG9wdGlvbiB2YWx1ZXMgZm9yIHdoZW4gdGhpcyBvcHRpb24gaXMgc2V0IGFuZCB0aGUgaW1wbGllZCBvcHRpb25zIGFyZSBub3QuXG4gICAqXG4gICAqIFRoZSBjdXN0b20gcHJvY2Vzc2luZyAocGFyc2VBcmcpIGlzIG5vdCBjYWxsZWQgb24gdGhlIGltcGxpZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxvZycsICd3cml0ZSBsb2dnaW5nIGluZm9ybWF0aW9uIHRvIGZpbGUnKSlcbiAgICogICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHJhY2UnLCAnbG9nIGV4dHJhIGRldGFpbHMnKS5pbXBsaWVzKHsgbG9nOiAndHJhY2UudHh0JyB9KSk7XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbXBsaWVkT3B0aW9uVmFsdWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG4gIGltcGxpZXMoaW1wbGllZE9wdGlvblZhbHVlcykge1xuICAgIGxldCBuZXdJbXBsaWVkID0gaW1wbGllZE9wdGlvblZhbHVlcztcbiAgICBpZiAodHlwZW9mIGltcGxpZWRPcHRpb25WYWx1ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBzdHJpbmcgaXMgbm90IGRvY3VtZW50ZWQsIGJ1dCBlYXN5IG1pc3Rha2UgYW5kIHdlIGNhbiBkbyB3aGF0IHVzZXIgcHJvYmFibHkgaW50ZW5kZWQuXG4gICAgICBuZXdJbXBsaWVkID0geyBbaW1wbGllZE9wdGlvblZhbHVlc106IHRydWUgfTtcbiAgICB9XG4gICAgdGhpcy5pbXBsaWVkID0gT2JqZWN0LmFzc2lnbih0aGlzLmltcGxpZWQgfHwge30sIG5ld0ltcGxpZWQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBjaGVjayBmb3Igb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgaWYgd2hlbiBwcm9jZXNzZWQgdGhlIGN1cnJlbnQgb3B0aW9uIHZhbHVlIGlzXG4gICAqIHVuZGVmaW5lZCwgb3IgdGhlIHNvdXJjZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBpcyAnZGVmYXVsdCcgb3IgJ2NvbmZpZycgb3IgJ2VudicuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgZW52KG5hbWUpIHtcbiAgICB0aGlzLmVudlZhciA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXN0b20gaGFuZGxlciBmb3IgcHJvY2Vzc2luZyBDTEkgb3B0aW9uIGFyZ3VtZW50cyBpbnRvIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBhcmdQYXJzZXIoZm4pIHtcbiAgICB0aGlzLnBhcnNlQXJnID0gZm47XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgb3B0aW9uIGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbbWFuZGF0b3J5PXRydWVdXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgbWFrZU9wdGlvbk1hbmRhdG9yeShtYW5kYXRvcnkgPSB0cnVlKSB7XG4gICAgdGhpcy5tYW5kYXRvcnkgPSAhIW1hbmRhdG9yeTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIG9wdGlvbiBpbiBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtoaWRlPXRydWVdXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgaGlkZUhlbHAoaGlkZSA9IHRydWUpIHtcbiAgICB0aGlzLmhpZGRlbiA9ICEhaGlkZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfY29sbGVjdFZhbHVlKHZhbHVlLCBwcmV2aW91cykge1xuICAgIGlmIChwcmV2aW91cyA9PT0gdGhpcy5kZWZhdWx0VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcmV2aW91cy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gcHJldmlvdXM7XG4gIH1cblxuICAvKipcbiAgICogT25seSBhbGxvdyBvcHRpb24gdmFsdWUgdG8gYmUgb25lIG9mIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGNob2ljZXModmFsdWVzKSB7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdmFsdWVzLnNsaWNlKCk7XG4gICAgdGhpcy5wYXJzZUFyZyA9IChhcmcsIHByZXZpb3VzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXJnQ2hvaWNlcy5pbmNsdWRlcyhhcmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICBgQWxsb3dlZCBjaG9pY2VzIGFyZSAke3RoaXMuYXJnQ2hvaWNlcy5qb2luKCcsICcpfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFyaWFkaWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RWYWx1ZShhcmcsIHByZXZpb3VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gb3B0aW9uIG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgbmFtZSgpIHtcbiAgICBpZiAodGhpcy5sb25nKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb25nLnJlcGxhY2UoL14tLS8sICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvcnQucmVwbGFjZSgvXi0vLCAnJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG9wdGlvbiBuYW1lLCBpbiBhIGNhbWVsY2FzZSBmb3JtYXQgdGhhdCBjYW4gYmUgdXNlZFxuICAgKiBhcyBhbiBvYmplY3QgYXR0cmlidXRlIGtleS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBhdHRyaWJ1dGVOYW1lKCkge1xuICAgIGlmICh0aGlzLm5lZ2F0ZSkge1xuICAgICAgcmV0dXJuIGNhbWVsY2FzZSh0aGlzLm5hbWUoKS5yZXBsYWNlKC9ebm8tLywgJycpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbWVsY2FzZSh0aGlzLm5hbWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBoZWxwIGdyb3VwIGhlYWRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkaW5nXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG4gIGhlbHBHcm91cChoZWFkaW5nKSB7XG4gICAgdGhpcy5oZWxwR3JvdXBIZWFkaW5nID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBgYXJnYCBtYXRjaGVzIHRoZSBzaG9ydCBvciBsb25nIGZsYWcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgaXMoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvcnQgPT09IGFyZyB8fCB0aGlzLmxvbmcgPT09IGFyZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciBhIGJvb2xlYW4gb3B0aW9uLlxuICAgKlxuICAgKiBPcHRpb25zIGFyZSBvbmUgb2YgYm9vbGVhbiwgbmVnYXRlZCwgcmVxdWlyZWQgYXJndW1lbnQsIG9yIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBpc0Jvb2xlYW4oKSB7XG4gICAgcmV0dXJuICF0aGlzLnJlcXVpcmVkICYmICF0aGlzLm9wdGlvbmFsICYmICF0aGlzLm5lZ2F0ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gd29yayB3aXRoIGR1YWwgb3B0aW9ucywgd2l0aG91dCBjaGFuZ2luZyB0aGUgZXhpc3RpbmdcbiAqIGltcGxlbWVudGF0aW9uLiBXZSBzdXBwb3J0IHNlcGFyYXRlIGR1YWwgb3B0aW9ucyBmb3Igc2VwYXJhdGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG9wdGlvbnMsXG4gKiBsaWtlIGAtLWJ1aWxkYCBhbmQgYC0tbm8tYnVpbGRgLCB3aGljaCBzaGFyZSBhIHNpbmdsZSBvcHRpb24gdmFsdWUuIFRoaXMgd29ya3MgbmljZWx5IGZvciBzb21lXG4gKiB1c2UgY2FzZXMsIGJ1dCBpcyB0cmlja3kgZm9yIG90aGVycyB3aGVyZSB3ZSB3YW50IHNlcGFyYXRlIGJlaGF2aW91cnMgZGVzcGl0ZVxuICogdGhlIHNpbmdsZSBzaGFyZWQgb3B0aW9uIHZhbHVlLlxuICovXG5jbGFzcyBEdWFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge09wdGlvbltdfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5wb3NpdGl2ZU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5kdWFsT3B0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5uZWdhdGUpIHtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMuc2V0KG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCksIG9wdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aXZlT3B0aW9ucy5zZXQob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSwgb3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodGhpcy5wb3NpdGl2ZU9wdGlvbnMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy5kdWFsT3B0aW9ucy5hZGQoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaWQgdGhlIHZhbHVlIGNvbWUgZnJvbSB0aGUgb3B0aW9uLCBhbmQgbm90IGZyb20gcG9zc2libGUgbWF0Y2hpbmcgZHVhbCBvcHRpb24/XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHZhbHVlRnJvbU9wdGlvbih2YWx1ZSwgb3B0aW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICBpZiAoIXRoaXMuZHVhbE9wdGlvbnMuaGFzKG9wdGlvbktleSkpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gVXNlIHRoZSB2YWx1ZSB0byBkZWR1Y2UgaWYgKHByb2JhYmx5KSBjYW1lIGZyb20gdGhlIG9wdGlvbi5cbiAgICBjb25zdCBwcmVzZXQgPSB0aGlzLm5lZ2F0aXZlT3B0aW9ucy5nZXQob3B0aW9uS2V5KS5wcmVzZXRBcmc7XG4gICAgY29uc3QgbmVnYXRpdmVWYWx1ZSA9IHByZXNldCAhPT0gdW5kZWZpbmVkID8gcHJlc2V0IDogZmFsc2U7XG4gICAgcmV0dXJuIG9wdGlvbi5uZWdhdGUgPT09IChuZWdhdGl2ZVZhbHVlID09PSB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IHN0cmluZyBmcm9tIGtlYmFiLWNhc2UgdG8gY2FtZWxDYXNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY2FtZWxjYXNlKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCctJykucmVkdWNlKChzdHIsIHdvcmQpID0+IHtcbiAgICByZXR1cm4gc3RyICsgd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHNob3J0IGFuZCBsb25nIGZsYWcgb3V0IG9mIHNvbWV0aGluZyBsaWtlICctbSwtLW1peGVkIDx2YWx1ZT4nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzcGxpdE9wdGlvbkZsYWdzKGZsYWdzKSB7XG4gIGxldCBzaG9ydEZsYWc7XG4gIGxldCBsb25nRmxhZztcbiAgLy8gc2hvcnQgZmxhZywgc2luZ2xlIGRhc2ggYW5kIHNpbmdsZSBjaGFyYWN0ZXJcbiAgY29uc3Qgc2hvcnRGbGFnRXhwID0gL14tW14tXSQvO1xuICAvLyBsb25nIGZsYWcsIGRvdWJsZSBkYXNoIGFuZCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXG4gIGNvbnN0IGxvbmdGbGFnRXhwID0gL14tLVteLV0vO1xuXG4gIGNvbnN0IGZsYWdQYXJ0cyA9IGZsYWdzLnNwbGl0KC9bIHwsXSsvKS5jb25jYXQoJ2d1YXJkJyk7XG4gIC8vIE5vcm1hbCBpcyBzaG9ydCBhbmQvb3IgbG9uZy5cbiAgaWYgKHNob3J0RmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpIHNob3J0RmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICBpZiAobG9uZ0ZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSBsb25nRmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICAvLyBMb25nIHRoZW4gc2hvcnQuIFJhcmVseSB1c2VkIGJ1dCBmaW5lLlxuICBpZiAoIXNob3J0RmxhZyAmJiBzaG9ydEZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKVxuICAgIHNob3J0RmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICAvLyBBbGxvdyB0d28gbG9uZyBmbGFncywgbGlrZSAnLS13cywgLS13b3Jrc3BhY2UnXG4gIC8vIFRoaXMgaXMgdGhlIHN1cHBvcnRlZCB3YXkgdG8gaGF2ZSBhIHNob3J0aXNoIG9wdGlvbiBmbGFnLlxuICBpZiAoIXNob3J0RmxhZyAmJiBsb25nRmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpIHtcbiAgICBzaG9ydEZsYWcgPSBsb25nRmxhZztcbiAgICBsb25nRmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHVucHJvY2Vzc2VkIGZsYWcuIEZhaWwgbm9pc2lseSByYXRoZXIgdGhhbiBzaWxlbnRseSBpZ25vcmUuXG4gIGlmIChmbGFnUGFydHNbMF0uc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRGbGFnID0gZmxhZ1BhcnRzWzBdO1xuICAgIGNvbnN0IGJhc2VFcnJvciA9IGBvcHRpb24gY3JlYXRpb24gZmFpbGVkIGR1ZSB0byAnJHt1bnN1cHBvcnRlZEZsYWd9JyBpbiBvcHRpb24gZmxhZ3MgJyR7ZmxhZ3N9J2A7XG4gICAgaWYgKC9eLVteLV1bXi1dLy50ZXN0KHVuc3VwcG9ydGVkRmxhZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2Jhc2VFcnJvcn1cbi0gYSBzaG9ydCBmbGFnIGlzIGEgc2luZ2xlIGRhc2ggYW5kIGEgc2luZ2xlIGNoYXJhY3RlclxuICAtIGVpdGhlciB1c2UgYSBzaW5nbGUgZGFzaCBhbmQgYSBzaW5nbGUgY2hhcmFjdGVyIChmb3IgYSBzaG9ydCBmbGFnKVxuICAtIG9yIHVzZSBhIGRvdWJsZSBkYXNoIGZvciBhIGxvbmcgb3B0aW9uIChhbmQgY2FuIGhhdmUgdHdvLCBsaWtlICctLXdzLCAtLXdvcmtzcGFjZScpYCxcbiAgICAgICk7XG4gICAgaWYgKHNob3J0RmxhZ0V4cC50ZXN0KHVuc3VwcG9ydGVkRmxhZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFzZUVycm9yfVxuLSB0b28gbWFueSBzaG9ydCBmbGFnc2ApO1xuICAgIGlmIChsb25nRmxhZ0V4cC50ZXN0KHVuc3VwcG9ydGVkRmxhZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFzZUVycm9yfVxuLSB0b28gbWFueSBsb25nIGZsYWdzYCk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFzZUVycm9yfVxuLSB1bnJlY29nbmlzZWQgZmxhZyBmb3JtYXRgKTtcbiAgfVxuICBpZiAoc2hvcnRGbGFnID09PSB1bmRlZmluZWQgJiYgbG9uZ0ZsYWcgPT09IHVuZGVmaW5lZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgb3B0aW9uIGNyZWF0aW9uIGZhaWxlZCBkdWUgdG8gbm8gZmxhZ3MgZm91bmQgaW4gJyR7ZmxhZ3N9Jy5gLFxuICAgICk7XG5cbiAgcmV0dXJuIHsgc2hvcnRGbGFnLCBsb25nRmxhZyB9O1xufVxuXG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcbmV4cG9ydHMuRHVhbE9wdGlvbnMgPSBEdWFsT3B0aW9ucztcbiIsICJjb25zdCBtYXhEaXN0YW5jZSA9IDM7XG5cbmZ1bmN0aW9uIGVkaXREaXN0YW5jZShhLCBiKSB7XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhbWVyYXVcdTIwMTNMZXZlbnNodGVpbl9kaXN0YW5jZVxuICAvLyBDYWxjdWxhdGluZyBvcHRpbWFsIHN0cmluZyBhbGlnbm1lbnQgZGlzdGFuY2UsIG5vIHN1YnN0cmluZyBpcyBlZGl0ZWQgbW9yZSB0aGFuIG9uY2UuXG4gIC8vIChTaW1wbGUgaW1wbGVtZW50YXRpb24uKVxuXG4gIC8vIFF1aWNrIGVhcmx5IGV4aXQsIHJldHVybiB3b3JzdCBjYXNlLlxuICBpZiAoTWF0aC5hYnMoYS5sZW5ndGggLSBiLmxlbmd0aCkgPiBtYXhEaXN0YW5jZSlcbiAgICByZXR1cm4gTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuICAvLyBkaXN0YW5jZSBiZXR3ZWVuIHByZWZpeCBzdWJzdHJpbmdzIG9mIGEgYW5kIGJcbiAgY29uc3QgZCA9IFtdO1xuXG4gIC8vIHB1cmUgZGVsZXRpb25zIHR1cm4gYSBpbnRvIGVtcHR5IHN0cmluZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgZFtpXSA9IFtpXTtcbiAgfVxuICAvLyBwdXJlIGluc2VydGlvbnMgdHVybiBlbXB0eSBzdHJpbmcgaW50byBiXG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICBkWzBdW2pdID0gajtcbiAgfVxuXG4gIC8vIGZpbGwgbWF0cml4XG4gIGZvciAobGV0IGogPSAxOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY29zdCA9IDE7XG4gICAgICBpZiAoYVtpIC0gMV0gPT09IGJbaiAtIDFdKSB7XG4gICAgICAgIGNvc3QgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29zdCA9IDE7XG4gICAgICB9XG4gICAgICBkW2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgIGRbaSAtIDFdW2pdICsgMSwgLy8gZGVsZXRpb25cbiAgICAgICAgZFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgZFtpIC0gMV1baiAtIDFdICsgY29zdCwgLy8gc3Vic3RpdHV0aW9uXG4gICAgICApO1xuICAgICAgLy8gdHJhbnNwb3NpdGlvblxuICAgICAgaWYgKGkgPiAxICYmIGogPiAxICYmIGFbaSAtIDFdID09PSBiW2ogLSAyXSAmJiBhW2kgLSAyXSA9PT0gYltqIC0gMV0pIHtcbiAgICAgICAgZFtpXVtqXSA9IE1hdGgubWluKGRbaV1bal0sIGRbaSAtIDJdW2ogLSAyXSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkW2EubGVuZ3RoXVtiLmxlbmd0aF07XG59XG5cbi8qKlxuICogRmluZCBjbG9zZSBtYXRjaGVzLCByZXN0cmljdGVkIHRvIHNhbWUgbnVtYmVyIG9mIGVkaXRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIHN1Z2dlc3RTaW1pbGFyKHdvcmQsIGNhbmRpZGF0ZXMpIHtcbiAgaWYgKCFjYW5kaWRhdGVzIHx8IGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIC8vIHJlbW92ZSBwb3NzaWJsZSBkdXBsaWNhdGVzXG4gIGNhbmRpZGF0ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoY2FuZGlkYXRlcykpO1xuXG4gIGNvbnN0IHNlYXJjaGluZ09wdGlvbnMgPSB3b3JkLnN0YXJ0c1dpdGgoJy0tJyk7XG4gIGlmIChzZWFyY2hpbmdPcHRpb25zKSB7XG4gICAgd29yZCA9IHdvcmQuc2xpY2UoMik7XG4gICAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMubWFwKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5zbGljZSgyKSk7XG4gIH1cblxuICBsZXQgc2ltaWxhciA9IFtdO1xuICBsZXQgYmVzdERpc3RhbmNlID0gbWF4RGlzdGFuY2U7XG4gIGNvbnN0IG1pblNpbWlsYXJpdHkgPSAwLjQ7XG4gIGNhbmRpZGF0ZXMuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG4gICAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggPD0gMSkgcmV0dXJuOyAvLyBubyBvbmUgY2hhcmFjdGVyIGd1ZXNzZXNcblxuICAgIGNvbnN0IGRpc3RhbmNlID0gZWRpdERpc3RhbmNlKHdvcmQsIGNhbmRpZGF0ZSk7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgod29yZC5sZW5ndGgsIGNhbmRpZGF0ZS5sZW5ndGgpO1xuICAgIGNvbnN0IHNpbWlsYXJpdHkgPSAobGVuZ3RoIC0gZGlzdGFuY2UpIC8gbGVuZ3RoO1xuICAgIGlmIChzaW1pbGFyaXR5ID4gbWluU2ltaWxhcml0eSkge1xuICAgICAgaWYgKGRpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgIC8vIGJldHRlciBlZGl0IGRpc3RhbmNlLCB0aHJvdyBhd2F5IHByZXZpb3VzIHdvcnNlIG1hdGNoZXNcbiAgICAgICAgYmVzdERpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgIHNpbWlsYXIgPSBbY2FuZGlkYXRlXTtcbiAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPT09IGJlc3REaXN0YW5jZSkge1xuICAgICAgICBzaW1pbGFyLnB1c2goY2FuZGlkYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHNpbWlsYXIuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgaWYgKHNlYXJjaGluZ09wdGlvbnMpIHtcbiAgICBzaW1pbGFyID0gc2ltaWxhci5tYXAoKGNhbmRpZGF0ZSkgPT4gYC0tJHtjYW5kaWRhdGV9YCk7XG4gIH1cblxuICBpZiAoc2ltaWxhci5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIGBcXG4oRGlkIHlvdSBtZWFuIG9uZSBvZiAke3NpbWlsYXIuam9pbignLCAnKX0/KWA7XG4gIH1cbiAgaWYgKHNpbWlsYXIubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGBcXG4oRGlkIHlvdSBtZWFuICR7c2ltaWxhclswXX0/KWA7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnRzLnN1Z2dlc3RTaW1pbGFyID0gc3VnZ2VzdFNpbWlsYXI7XG4iLCAiY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5jb25zdCBjaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdub2RlOmNoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdub2RlOnBhdGgnKTtcbmNvbnN0IGZzID0gcmVxdWlyZSgnbm9kZTpmcycpO1xuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ25vZGU6cHJvY2VzcycpO1xuXG5jb25zdCB7IEFyZ3VtZW50LCBodW1hblJlYWRhYmxlQXJnTmFtZSB9ID0gcmVxdWlyZSgnLi9hcmd1bWVudC5qcycpO1xuY29uc3QgeyBDb21tYW5kZXJFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuY29uc3QgeyBIZWxwLCBzdHJpcENvbG9yIH0gPSByZXF1aXJlKCcuL2hlbHAuanMnKTtcbmNvbnN0IHsgT3B0aW9uLCBEdWFsT3B0aW9ucyB9ID0gcmVxdWlyZSgnLi9vcHRpb24uanMnKTtcbmNvbnN0IHsgc3VnZ2VzdFNpbWlsYXIgfSA9IHJlcXVpcmUoJy4vc3VnZ2VzdFNpbWlsYXInKTtcblxuY2xhc3MgQ29tbWFuZCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGBDb21tYW5kYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogQHR5cGUge0NvbW1hbmRbXX0gKi9cbiAgICB0aGlzLmNvbW1hbmRzID0gW107XG4gICAgLyoqIEB0eXBlIHtPcHRpb25bXX0gKi9cbiAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgdGhpcy5fYWxsb3dVbmtub3duT3B0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSBmYWxzZTtcbiAgICAvKiogQHR5cGUge0FyZ3VtZW50W119ICovXG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzID0gW107XG4gICAgdGhpcy5fYXJncyA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50czsgLy8gZGVwcmVjYXRlZCBvbGQgbmFtZVxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgdGhpcy5hcmdzID0gW107IC8vIGNsaSBhcmdzIHdpdGggb3B0aW9ucyByZW1vdmVkXG4gICAgdGhpcy5yYXdBcmdzID0gW107XG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gW107IC8vIGxpa2UgLmFyZ3MgYnV0IGFmdGVyIGN1c3RvbSBwcm9jZXNzaW5nIGFuZCBjb2xsZWN0aW5nIHZhcmlhZGljXG4gICAgdGhpcy5fc2NyaXB0UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWUgfHwgJyc7XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVzID0ge307XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzID0ge307IC8vIGRlZmF1bHQsIGVudiwgY2xpIGV0Y1xuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGlvbkhhbmRsZXIgPSBudWxsO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVIYW5kbGVyID0gZmFsc2U7XG4gICAgdGhpcy5fZXhlY3V0YWJsZUZpbGUgPSBudWxsOyAvLyBjdXN0b20gbmFtZSBmb3IgZXhlY3V0YWJsZVxuICAgIHRoaXMuX2V4ZWN1dGFibGVEaXIgPSBudWxsOyAvLyBjdXN0b20gc2VhcmNoIGRpcmVjdG9yeSBmb3Igc3ViY29tbWFuZHNcbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUgPSBudWxsO1xuICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fYWxpYXNlcyA9IFtdO1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSAnJztcbiAgICB0aGlzLl9zdW1tYXJ5ID0gJyc7XG4gICAgdGhpcy5fYXJnc0Rlc2NyaXB0aW9uID0gdW5kZWZpbmVkOyAvLyBsZWdhY3lcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzID0ge307IC8vIGEgaGFzaCBvZiBhcnJheXNcbiAgICAvKiogQHR5cGUgeyhib29sZWFuIHwgc3RyaW5nKX0gKi9cbiAgICB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSB0cnVlO1xuICAgIHRoaXMuX3NhdmVkU3RhdGUgPSBudWxsOyAvLyB1c2VkIGluIHNhdmUvcmVzdG9yZVN0YXRlQmVmb3JlUGFyc2VcblxuICAgIC8vIHNlZSBjb25maWd1cmVPdXRwdXQoKSBmb3IgZG9jc1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICB3cml0ZU91dDogKHN0cikgPT4gcHJvY2Vzcy5zdGRvdXQud3JpdGUoc3RyKSxcbiAgICAgIHdyaXRlRXJyOiAoc3RyKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShzdHIpLFxuICAgICAgb3V0cHV0RXJyb3I6IChzdHIsIHdyaXRlKSA9PiB3cml0ZShzdHIpLFxuICAgICAgZ2V0T3V0SGVscFdpZHRoOiAoKSA9PlxuICAgICAgICBwcm9jZXNzLnN0ZG91dC5pc1RUWSA/IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgOiB1bmRlZmluZWQsXG4gICAgICBnZXRFcnJIZWxwV2lkdGg6ICgpID0+XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLmlzVFRZID8gcHJvY2Vzcy5zdGRlcnIuY29sdW1ucyA6IHVuZGVmaW5lZCxcbiAgICAgIGdldE91dEhhc0NvbG9yczogKCkgPT5cbiAgICAgICAgdXNlQ29sb3IoKSA/PyAocHJvY2Vzcy5zdGRvdXQuaXNUVFkgJiYgcHJvY2Vzcy5zdGRvdXQuaGFzQ29sb3JzPy4oKSksXG4gICAgICBnZXRFcnJIYXNDb2xvcnM6ICgpID0+XG4gICAgICAgIHVzZUNvbG9yKCkgPz8gKHByb2Nlc3Muc3RkZXJyLmlzVFRZICYmIHByb2Nlc3Muc3RkZXJyLmhhc0NvbG9ycz8uKCkpLFxuICAgICAgc3RyaXBDb2xvcjogKHN0cikgPT4gc3RyaXBDb2xvcihzdHIpLFxuICAgIH07XG5cbiAgICB0aGlzLl9oaWRkZW4gPSBmYWxzZTtcbiAgICAvKiogQHR5cGUgeyhPcHRpb24gfCBudWxsIHwgdW5kZWZpbmVkKX0gKi9cbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gdW5kZWZpbmVkOyAvLyBMYXp5IGNyZWF0ZWQgb24gZGVtYW5kLiBNYXkgYmUgbnVsbCBpZiBoZWxwIG9wdGlvbiBpcyBkaXNhYmxlZC5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdW5kZWZpbmVkOyAvLyB1bmRlY2lkZWQgd2hldGhlciB0cnVlIG9yIGZhbHNlIHlldCwgbm90IGluaGVyaXRlZFxuICAgIC8qKiBAdHlwZSB7Q29tbWFuZH0gKi9cbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IHVuZGVmaW5lZDsgLy8gbGF6eSBpbml0aWFsaXNlZCwgaW5oZXJpdGVkXG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9oZWxwR3JvdXBIZWFkaW5nID0gdW5kZWZpbmVkOyAvLyBzb2Z0IGluaXRpYWxpc2VkIHdoZW4gYWRkZWQgdG8gcGFyZW50XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA9IHVuZGVmaW5lZDtcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29weSBzZXR0aW5ncyB0aGF0IGFyZSB1c2VmdWwgdG8gaGF2ZSBpbiBjb21tb24gYWNyb3NzIHJvb3QgY29tbWFuZCBhbmQgc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIChVc2VkIGludGVybmFsbHkgd2hlbiBhZGRpbmcgYSBjb21tYW5kIHVzaW5nIGAuY29tbWFuZCgpYCBzbyBzdWJjb21tYW5kcyBpbmhlcml0IHBhcmVudCBzZXR0aW5ncy4pXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gc291cmNlQ29tbWFuZFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGNvcHlJbmhlcml0ZWRTZXR0aW5ncyhzb3VyY2VDb21tYW5kKSB7XG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHNvdXJjZUNvbW1hbmQuX291dHB1dENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5faGVscE9wdGlvbiA9IHNvdXJjZUNvbW1hbmQuX2hlbHBPcHRpb247XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBzb3VyY2VDb21tYW5kLl9oZWxwQ29tbWFuZDtcbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IHNvdXJjZUNvbW1hbmQuX2hlbHBDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IHNvdXJjZUNvbW1hbmQuX2V4aXRDYWxsYmFjaztcbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSBzb3VyY2VDb21tYW5kLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXM7XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID1cbiAgICAgIHNvdXJjZUNvbW1hbmQuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZTtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9IHNvdXJjZUNvbW1hbmQuX2FsbG93RXhjZXNzQXJndW1lbnRzO1xuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gc291cmNlQ29tbWFuZC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnM7XG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gc291cmNlQ29tbWFuZC5fc2hvd0hlbHBBZnRlckVycm9yO1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9IHNvdXJjZUNvbW1hbmQuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtDb21tYW5kW119XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGZvciAobGV0IGNvbW1hbmQgPSB0aGlzOyBjb21tYW5kOyBjb21tYW5kID0gY29tbWFuZC5wYXJlbnQpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGNvbW1hbmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIGNvbW1hbmQuXG4gICAqXG4gICAqIFRoZXJlIGFyZSB0d28gc3R5bGVzIG9mIGNvbW1hbmQ6IHBheSBhdHRlbnRpb24gdG8gd2hlcmUgdG8gcHV0IHRoZSBkZXNjcmlwdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ29tbWFuZCBpbXBsZW1lbnRlZCB1c2luZyBhY3Rpb24gaGFuZGxlciAoZGVzY3JpcHRpb24gaXMgc3VwcGxpZWQgc2VwYXJhdGVseSB0byBgLmNvbW1hbmRgKVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ2Nsb25lIDxzb3VyY2U+IFtkZXN0aW5hdGlvbl0nKVxuICAgKiAgIC5kZXNjcmlwdGlvbignY2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeScpXG4gICAqICAgLmFjdGlvbigoc291cmNlLCBkZXN0aW5hdGlvbikgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coJ2Nsb25lIGNvbW1hbmQgY2FsbGVkJyk7XG4gICAqICAgfSk7XG4gICAqXG4gICAqIC8vIENvbW1hbmQgaW1wbGVtZW50ZWQgdXNpbmcgc2VwYXJhdGUgZXhlY3V0YWJsZSBmaWxlIChkZXNjcmlwdGlvbiBpcyBzZWNvbmQgcGFyYW1ldGVyIHRvIGAuY29tbWFuZGApXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnc3RhcnQgPHNlcnZpY2U+JywgJ3N0YXJ0IG5hbWVkIHNlcnZpY2UnKVxuICAgKiAgIC5jb21tYW5kKCdzdG9wIFtzZXJ2aWNlXScsICdzdG9wIG5hbWVkIHNlcnZpY2UsIG9yIGFsbCBpZiBubyBuYW1lIHN1cHBsaWVkJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lQW5kQXJncyAtIGNvbW1hbmQgbmFtZSBhbmQgYXJndW1lbnRzLCBhcmdzIGFyZSBgPHJlcXVpcmVkPmAgb3IgYFtvcHRpb25hbF1gIGFuZCBsYXN0IG1heSBhbHNvIGJlIGB2YXJpYWRpYy4uLmBcbiAgICogQHBhcmFtIHsob2JqZWN0IHwgc3RyaW5nKX0gW2FjdGlvbk9wdHNPckV4ZWNEZXNjXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoZm9yIGFjdGlvbiksIG9yIGRlc2NyaXB0aW9uIChmb3IgZXhlY3V0YWJsZSlcbiAgICogQHBhcmFtIHtvYmplY3R9IFtleGVjT3B0c10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGZvciBleGVjdXRhYmxlKVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSByZXR1cm5zIG5ldyBjb21tYW5kIGZvciBhY3Rpb24gaGFuZGxlciwgb3IgYHRoaXNgIGZvciBleGVjdXRhYmxlIGNvbW1hbmRcbiAgICovXG5cbiAgY29tbWFuZChuYW1lQW5kQXJncywgYWN0aW9uT3B0c09yRXhlY0Rlc2MsIGV4ZWNPcHRzKSB7XG4gICAgbGV0IGRlc2MgPSBhY3Rpb25PcHRzT3JFeGVjRGVzYztcbiAgICBsZXQgb3B0cyA9IGV4ZWNPcHRzO1xuICAgIGlmICh0eXBlb2YgZGVzYyA9PT0gJ29iamVjdCcgJiYgZGVzYyAhPT0gbnVsbCkge1xuICAgICAgb3B0cyA9IGRlc2M7XG4gICAgICBkZXNjID0gbnVsbDtcbiAgICB9XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgY29uc3QgWywgbmFtZSwgYXJnc10gPSBuYW1lQW5kQXJncy5tYXRjaCgvKFteIF0rKSAqKC4qKS8pO1xuXG4gICAgY29uc3QgY21kID0gdGhpcy5jcmVhdGVDb21tYW5kKG5hbWUpO1xuICAgIGlmIChkZXNjKSB7XG4gICAgICBjbWQuZGVzY3JpcHRpb24oZGVzYyk7XG4gICAgICBjbWQuX2V4ZWN1dGFibGVIYW5kbGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdHMuaXNEZWZhdWx0KSB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUgPSBjbWQuX25hbWU7XG4gICAgY21kLl9oaWRkZW4gPSAhIShvcHRzLm5vSGVscCB8fCBvcHRzLmhpZGRlbik7IC8vIG5vSGVscCBpcyBkZXByZWNhdGVkIG9sZCBuYW1lIGZvciBoaWRkZW5cbiAgICBjbWQuX2V4ZWN1dGFibGVGaWxlID0gb3B0cy5leGVjdXRhYmxlRmlsZSB8fCBudWxsOyAvLyBDdXN0b20gbmFtZSBmb3IgZXhlY3V0YWJsZSBmaWxlLCBzZXQgbWlzc2luZyB0byBudWxsIHRvIG1hdGNoIGNvbnN0cnVjdG9yXG4gICAgaWYgKGFyZ3MpIGNtZC5hcmd1bWVudHMoYXJncyk7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb21tYW5kKGNtZCk7XG4gICAgY21kLnBhcmVudCA9IHRoaXM7XG4gICAgY21kLmNvcHlJbmhlcml0ZWRTZXR0aW5ncyh0aGlzKTtcblxuICAgIGlmIChkZXNjKSByZXR1cm4gdGhpcztcbiAgICByZXR1cm4gY21kO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBjb21tYW5kLlxuICAgKlxuICAgKiBTZWUgLmNvbW1hbmQoKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgc3ViY29tbWFuZCwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBjb21tYW5kLiBZb3UgY2FuIG92ZXJyaWRlIGNyZWF0ZUNvbW1hbmQgdG8gY3VzdG9taXNlIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IG5ldyBjb21tYW5kXG4gICAqL1xuXG4gIGNyZWF0ZUNvbW1hbmQobmFtZSkge1xuICAgIHJldHVybiBuZXcgQ29tbWFuZChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGN1c3RvbWlzZSB0aGUgaGVscCB3aXRoIGEgc3ViY2xhc3Mgb2YgSGVscCBieSBvdmVycmlkaW5nIGNyZWF0ZUhlbHAsXG4gICAqIG9yIGJ5IG92ZXJyaWRpbmcgSGVscCBwcm9wZXJ0aWVzIHVzaW5nIGNvbmZpZ3VyZUhlbHAoKS5cbiAgICpcbiAgICogQHJldHVybiB7SGVscH1cbiAgICovXG5cbiAgY3JlYXRlSGVscCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgSGVscCgpLCB0aGlzLmNvbmZpZ3VyZUhlbHAoKSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjdXN0b21pc2UgdGhlIGhlbHAgYnkgb3ZlcnJpZGluZyBIZWxwIHByb3BlcnRpZXMgdXNpbmcgY29uZmlndXJlSGVscCgpLFxuICAgKiBvciB3aXRoIGEgc3ViY2xhc3Mgb2YgSGVscCBieSBvdmVycmlkaW5nIGNyZWF0ZUhlbHAoKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtjb25maWd1cmF0aW9uXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHsoQ29tbWFuZCB8IG9iamVjdCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICovXG5cbiAgY29uZmlndXJlSGVscChjb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uO1xuXG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IG91dHB1dCBnb2VzIHRvIHN0ZG91dCBhbmQgc3RkZXJyLiBZb3UgY2FuIGN1c3RvbWlzZSB0aGlzIGZvciBzcGVjaWFsXG4gICAqIGFwcGxpY2F0aW9ucy4gWW91IGNhbiBhbHNvIGN1c3RvbWlzZSB0aGUgZGlzcGxheSBvZiBlcnJvcnMgYnkgb3ZlcnJpZGluZyBvdXRwdXRFcnJvci5cbiAgICpcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBhcmUgYWxsIGZ1bmN0aW9uczpcbiAgICpcbiAgICogICAgIC8vIGNoYW5nZSBob3cgb3V0cHV0IGJlaW5nIHdyaXR0ZW4sIGRlZmF1bHRzIHRvIHN0ZG91dCBhbmQgc3RkZXJyXG4gICAqICAgICB3cml0ZU91dChzdHIpXG4gICAqICAgICB3cml0ZUVycihzdHIpXG4gICAqICAgICAvLyBjaGFuZ2UgaG93IG91dHB1dCBiZWluZyB3cml0dGVuIGZvciBlcnJvcnMsIGRlZmF1bHRzIHRvIHdyaXRlRXJyXG4gICAqICAgICBvdXRwdXRFcnJvcihzdHIsIHdyaXRlKSAvLyB1c2VkIGZvciBkaXNwbGF5aW5nIGVycm9ycyBhbmQgbm90IHVzZWQgZm9yIGRpc3BsYXlpbmcgaGVscFxuICAgKiAgICAgLy8gc3BlY2lmeSB3aWR0aCBmb3Igd3JhcHBpbmcgaGVscFxuICAgKiAgICAgZ2V0T3V0SGVscFdpZHRoKClcbiAgICogICAgIGdldEVyckhlbHBXaWR0aCgpXG4gICAqICAgICAvLyBjb2xvciBzdXBwb3J0LCBjdXJyZW50bHkgb25seSB1c2VkIHdpdGggSGVscFxuICAgKiAgICAgZ2V0T3V0SGFzQ29sb3JzKClcbiAgICogICAgIGdldEVyckhhc0NvbG9ycygpXG4gICAqICAgICBzdHJpcENvbG9yKCkgLy8gdXNlZCB0byByZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgaWYgb3V0cHV0IGRvZXMgbm90IGhhdmUgY29sb3JzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl0gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7KENvbW1hbmQgfCBvYmplY3QpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHN0b3JlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuXG4gIGNvbmZpZ3VyZU91dHB1dChjb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb247XG5cbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4udGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbixcbiAgICAgIC4uLmNvbmZpZ3VyYXRpb24sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBoZWxwIG9yIGEgY3VzdG9tIG1lc3NhZ2UgYWZ0ZXIgYW4gZXJyb3Igb2NjdXJzLlxuICAgKlxuICAgKiBAcGFyYW0geyhib29sZWFufHN0cmluZyl9IFtkaXNwbGF5SGVscF1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBzaG93SGVscEFmdGVyRXJyb3IoZGlzcGxheUhlbHAgPSB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBkaXNwbGF5SGVscCAhPT0gJ3N0cmluZycpIGRpc3BsYXlIZWxwID0gISFkaXNwbGF5SGVscDtcbiAgICB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPSBkaXNwbGF5SGVscDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHN1Z2dlc3Rpb24gb2Ygc2ltaWxhciBjb21tYW5kcyBmb3IgdW5rbm93biBjb21tYW5kcywgb3Igb3B0aW9ucyBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwbGF5U3VnZ2VzdGlvbl1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBzaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IoZGlzcGxheVN1Z2dlc3Rpb24gPSB0cnVlKSB7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gISFkaXNwbGF5U3VnZ2VzdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwcmVwYXJlZCBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBTZWUgLmNvbW1hbmQoKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgc3ViY29tbWFuZCB3aGljaCBpbmhlcml0cyBzZXR0aW5ncyBmcm9tIGl0cyBwYXJlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kIC0gbmV3IHN1YmNvbW1hbmRcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRzXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYWRkQ29tbWFuZChjbWQsIG9wdHMpIHtcbiAgICBpZiAoIWNtZC5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21tYW5kIHBhc3NlZCB0byAuYWRkQ29tbWFuZCgpIG11c3QgaGF2ZSBhIG5hbWVcbi0gc3BlY2lmeSB0aGUgbmFtZSBpbiBDb21tYW5kIGNvbnN0cnVjdG9yIG9yIHVzaW5nIC5uYW1lKClgKTtcbiAgICB9XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBpZiAob3B0cy5pc0RlZmF1bHQpIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBpZiAob3B0cy5ub0hlbHAgfHwgb3B0cy5oaWRkZW4pIGNtZC5faGlkZGVuID0gdHJ1ZTsgLy8gbW9kaWZ5aW5nIHBhc3NlZCBjb21tYW5kIGR1ZSB0byBleGlzdGluZyBpbXBsZW1lbnRhdGlvblxuXG4gICAgdGhpcy5fcmVnaXN0ZXJDb21tYW5kKGNtZCk7XG4gICAgY21kLnBhcmVudCA9IHRoaXM7XG4gICAgY21kLl9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgYXJndW1lbnQuXG4gICAqXG4gICAqIFNlZSAuYXJndW1lbnQoKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgYXJndW1lbnQsIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgYXJndW1lbnQuIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlQXJndW1lbnQgdG8gcmV0dXJuIGEgY3VzdG9tIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH0gbmV3IGFyZ3VtZW50XG4gICAqL1xuXG4gIGNyZWF0ZUFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgcmVxdWlyZWQsIGFuZCB5b3UgY2FuIGV4cGxpY2l0bHlcbiAgICogaW5kaWNhdGUgdGhpcyB3aXRoIDw+IGFyb3VuZCB0aGUgbmFtZS4gUHV0IFtdIGFyb3VuZCB0aGUgbmFtZSBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uYXJndW1lbnQoJzxpbnB1dC1maWxlPicpO1xuICAgKiBwcm9ncmFtLmFyZ3VtZW50KCdbb3V0cHV0LWZpbGVdJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIGFyZ3VtZW50IHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCBhcmd1bWVudCA9IHRoaXMuY3JlYXRlQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuICAgIGlmICh0eXBlb2YgcGFyc2VBcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIocGFyc2VBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmd1bWVudC5kZWZhdWx0KHBhcnNlQXJnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRBcmd1bWVudChhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZCwgYWRkaW5nIG11bHRpcGxlIGF0IG9uY2UgKHdpdGhvdXQgZGVzY3JpcHRpb25zKS5cbiAgICpcbiAgICogU2VlIGFsc28gLmFyZ3VtZW50KCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uYXJndW1lbnRzKCc8Y21kPiBbZW52XScpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFyZ3VtZW50cyhuYW1lcykge1xuICAgIG5hbWVzXG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoLyArLylcbiAgICAgIC5mb3JFYWNoKChkZXRhaWwpID0+IHtcbiAgICAgICAgdGhpcy5hcmd1bWVudChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZCwgYWRkaW5nIGEgcHJlcGFyZWQgYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkQXJndW1lbnQoYXJndW1lbnQpIHtcbiAgICBjb25zdCBwcmV2aW91c0FyZ3VtZW50ID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLnNsaWNlKC0xKVswXTtcbiAgICBpZiAocHJldmlvdXNBcmd1bWVudD8udmFyaWFkaWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG9ubHkgdGhlIGxhc3QgYXJndW1lbnQgY2FuIGJlIHZhcmlhZGljICcke3ByZXZpb3VzQXJndW1lbnQubmFtZSgpfSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYXJndW1lbnQucmVxdWlyZWQgJiZcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhcmd1bWVudC5wYXJzZUFyZyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVxdWlyZWQgYXJndW1lbnQgaXMgbmV2ZXIgdXNlZDogJyR7YXJndW1lbnQubmFtZSgpfSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLnB1c2goYXJndW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbWlzZSBvciBvdmVycmlkZSBkZWZhdWx0IGhlbHAgY29tbWFuZC4gQnkgZGVmYXVsdCBhIGhlbHAgY29tbWFuZCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGlmIHlvdXIgY29tbWFuZCBoYXMgc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoJ2hlbHAgW2NtZF0nKTtcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCgnaGVscCBbY21kXScsICdzaG93IGhlbHAnKTtcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZChmYWxzZSk7IC8vIHN1cHByZXNzIGRlZmF1bHQgaGVscCBjb21tYW5kXG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQodHJ1ZSk7IC8vIGFkZCBoZWxwIGNvbW1hbmQgZXZlbiBpZiBubyBzdWJjb21tYW5kc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xib29sZWFufSBlbmFibGVPck5hbWVBbmRBcmdzIC0gZW5hYmxlIHdpdGggY3VzdG9tIG5hbWUgYW5kL29yIGFyZ3VtZW50cywgb3IgYm9vbGVhbiB0byBvdmVycmlkZSB3aGV0aGVyIGFkZGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dIC0gY3VzdG9tIGRlc2NyaXB0aW9uXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBoZWxwQ29tbWFuZChlbmFibGVPck5hbWVBbmRBcmdzLCBkZXNjcmlwdGlvbikge1xuICAgIGlmICh0eXBlb2YgZW5hYmxlT3JOYW1lQW5kQXJncyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gZW5hYmxlT3JOYW1lQW5kQXJncztcbiAgICAgIGlmIChlbmFibGVPck5hbWVBbmRBcmdzICYmIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXApIHtcbiAgICAgICAgLy8gbWFrZSB0aGUgY29tbWFuZCB0byBzdG9yZSB0aGUgZ3JvdXBcbiAgICAgICAgdGhpcy5faW5pdENvbW1hbmRHcm91cCh0aGlzLl9nZXRIZWxwQ29tbWFuZCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVBbmRBcmdzID0gZW5hYmxlT3JOYW1lQW5kQXJncyA/PyAnaGVscCBbY29tbWFuZF0nO1xuICAgIGNvbnN0IFssIGhlbHBOYW1lLCBoZWxwQXJnc10gPSBuYW1lQW5kQXJncy5tYXRjaCgvKFteIF0rKSAqKC4qKS8pO1xuICAgIGNvbnN0IGhlbHBEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uID8/ICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnO1xuXG4gICAgY29uc3QgaGVscENvbW1hbmQgPSB0aGlzLmNyZWF0ZUNvbW1hbmQoaGVscE5hbWUpO1xuICAgIGhlbHBDb21tYW5kLmhlbHBPcHRpb24oZmFsc2UpO1xuICAgIGlmIChoZWxwQXJncykgaGVscENvbW1hbmQuYXJndW1lbnRzKGhlbHBBcmdzKTtcbiAgICBpZiAoaGVscERlc2NyaXB0aW9uKSBoZWxwQ29tbWFuZC5kZXNjcmlwdGlvbihoZWxwRGVzY3JpcHRpb24pO1xuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHRydWU7XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBoZWxwQ29tbWFuZDtcbiAgICAvLyBpbml0IGdyb3VwIHVubGVzcyBsYXp5IGNyZWF0ZVxuICAgIGlmIChlbmFibGVPck5hbWVBbmRBcmdzIHx8IGRlc2NyaXB0aW9uKSB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKGhlbHBDb21tYW5kKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBwcmVwYXJlZCBjdXN0b20gaGVscCBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0geyhDb21tYW5kfHN0cmluZ3xib29sZWFuKX0gaGVscENvbW1hbmQgLSBjdXN0b20gaGVscCBjb21tYW5kLCBvciBkZXByZWNhdGVkIGVuYWJsZU9yTmFtZUFuZEFyZ3MgYXMgZm9yIGAuaGVscENvbW1hbmQoKWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXByZWNhdGVkRGVzY3JpcHRpb25dIC0gZGVwcmVjYXRlZCBjdXN0b20gZGVzY3JpcHRpb24gdXNlZCB3aXRoIGN1c3RvbSBuYW1lIG9ubHlcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRIZWxwQ29tbWFuZChoZWxwQ29tbWFuZCwgZGVwcmVjYXRlZERlc2NyaXB0aW9uKSB7XG4gICAgLy8gSWYgbm90IHBhc3NlZCBhbiBvYmplY3QsIGNhbGwgdGhyb3VnaCB0byBoZWxwQ29tbWFuZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksXG4gICAgLy8gYXMgYWRkSGVscENvbW1hbmQgd2FzIG9yaWdpbmFsbHkgdXNlZCBsaWtlIGhlbHBDb21tYW5kIGlzIG5vdy5cbiAgICBpZiAodHlwZW9mIGhlbHBDb21tYW5kICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5oZWxwQ29tbWFuZChoZWxwQ29tbWFuZCwgZGVwcmVjYXRlZERlc2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB0cnVlO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gaGVscENvbW1hbmQ7XG4gICAgdGhpcy5faW5pdENvbW1hbmRHcm91cChoZWxwQ29tbWFuZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBjcmVhdGUgaGVscCBjb21tYW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHsoQ29tbWFuZHxudWxsKX1cbiAgICogQHBhY2thZ2VcbiAgICovXG4gIF9nZXRIZWxwQ29tbWFuZCgpIHtcbiAgICBjb25zdCBoYXNJbXBsaWNpdEhlbHBDb21tYW5kID1cbiAgICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPz9cbiAgICAgICh0aGlzLmNvbW1hbmRzLmxlbmd0aCAmJlxuICAgICAgICAhdGhpcy5fYWN0aW9uSGFuZGxlciAmJlxuICAgICAgICAhdGhpcy5fZmluZENvbW1hbmQoJ2hlbHAnKSk7XG5cbiAgICBpZiAoaGFzSW1wbGljaXRIZWxwQ29tbWFuZCkge1xuICAgICAgaWYgKHRoaXMuX2hlbHBDb21tYW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5oZWxwQ29tbWFuZCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7IC8vIHVzZSBkZWZhdWx0IG5hbWUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5faGVscENvbW1hbmQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBob29rIGZvciBsaWZlIGN5Y2xlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhvb2soZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgY29uc3QgYWxsb3dlZFZhbHVlcyA9IFsncHJlU3ViY29tbWFuZCcsICdwcmVBY3Rpb24nLCAncG9zdEFjdGlvbiddO1xuICAgIGlmICghYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3IgZXZlbnQgcGFzc2VkIHRvIGhvb2sgOiAnJHtldmVudH0nLlxuRXhwZWN0aW5nIG9uZSBvZiAnJHthbGxvd2VkVmFsdWVzLmpvaW4oXCInLCAnXCIpfSdgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSkge1xuICAgICAgdGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0gPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBjYWxsYmFjayB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIGNhbGxpbmcgcHJvY2Vzcy5leGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGEgQ29tbWFuZGVyRXJyb3IsIGRlZmF1bHRzIHRvIHRocm93aW5nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBleGl0T3ZlcnJpZGUoZm4pIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IGZuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIuY29kZSAhPT0gJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJykge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBc3luYyBjYWxsYmFjayBmcm9tIHNwYXduIGV2ZW50cywgbm90IHVzZWZ1bCB0byB0aHJvdy5cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBwcm9jZXNzLmV4aXQsIGFuZCBfZXhpdENhbGxiYWNrIGlmIGRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleGl0Q29kZSBleGl0IGNvZGUgZm9yIHVzaW5nIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIG5ldmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGl0KGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuX2V4aXRDYWxsYmFjaykge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrKG5ldyBDb21tYW5kZXJFcnJvcihleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkpO1xuICAgICAgLy8gRXhwZWN0aW5nIHRoaXMgbGluZSBpcyBub3QgcmVhY2hlZC5cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBjYWxsYmFjayBgZm5gIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdzZXJ2ZScpXG4gICAqICAgLmRlc2NyaXB0aW9uKCdzdGFydCBzZXJ2aWNlJylcbiAgICogICAuYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgKiAgICAgIC8vIGRvIHdvcmsgaGVyZVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYWN0aW9uKGZuKSB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoYXJncykgPT4ge1xuICAgICAgLy8gVGhlIC5hY3Rpb24gY2FsbGJhY2sgdGFrZXMgYW4gZXh0cmEgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBjb21tYW5kIG9yIG9wdGlvbnMuXG4gICAgICBjb25zdCBleHBlY3RlZEFyZ3NDb3VudCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBjb25zdCBhY3Rpb25BcmdzID0gYXJncy5zbGljZSgwLCBleHBlY3RlZEFyZ3NDb3VudCk7XG4gICAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGFjdGlvbkFyZ3NbZXhwZWN0ZWRBcmdzQ291bnRdID0gdGhpczsgLy8gYmFja3dhcmRzIGNvbXBhdGlibGUgXCJvcHRpb25zXCJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbkFyZ3NbZXhwZWN0ZWRBcmdzQ291bnRdID0gdGhpcy5vcHRzKCk7XG4gICAgICB9XG4gICAgICBhY3Rpb25BcmdzLnB1c2godGhpcyk7XG5cbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhY3Rpb25BcmdzKTtcbiAgICB9O1xuICAgIHRoaXMuX2FjdGlvbkhhbmRsZXIgPSBsaXN0ZW5lcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgb3B0aW9uLlxuICAgKlxuICAgKiBTZWUgLm9wdGlvbigpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBvcHRpb24sIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgb3B0aW9uLiBZb3UgY2FuIG92ZXJyaWRlIGNyZWF0ZU9wdGlvbiB0byByZXR1cm4gYSBjdXN0b20gb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7T3B0aW9ufSBuZXcgb3B0aW9uXG4gICAqL1xuXG4gIGNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgcGFyc2VBcmdzIHRvIGNhdGNoICdjb21tYW5kZXIuaW52YWxpZEFyZ3VtZW50Jy5cbiAgICpcbiAgICogQHBhcmFtIHsoT3B0aW9uIHwgQXJndW1lbnQpfSB0YXJnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gcHJldmlvdXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGludmFsaWRBcmd1bWVudE1lc3NhZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NhbGxQYXJzZUFyZyh0YXJnZXQsIHZhbHVlLCBwcmV2aW91cywgaW52YWxpZEFyZ3VtZW50TWVzc2FnZSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnBhcnNlQXJnKHZhbHVlLCBwcmV2aW91cyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdjb21tYW5kZXIuaW52YWxpZEFyZ3VtZW50Jykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7aW52YWxpZEFyZ3VtZW50TWVzc2FnZX0gJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgZXhpdENvZGU6IGVyci5leGl0Q29kZSwgY29kZTogZXJyLmNvZGUgfSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBvcHRpb24gZmxhZyBjb25mbGljdHMuXG4gICAqIFJlZ2lzdGVyIG9wdGlvbiBpZiBubyBjb25mbGljdHMgZm91bmQsIG9yIHRocm93IG9uIGNvbmZsaWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9yZWdpc3Rlck9wdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCBtYXRjaGluZ09wdGlvbiA9XG4gICAgICAob3B0aW9uLnNob3J0ICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLnNob3J0KSkgfHxcbiAgICAgIChvcHRpb24ubG9uZyAmJiB0aGlzLl9maW5kT3B0aW9uKG9wdGlvbi5sb25nKSk7XG4gICAgaWYgKG1hdGNoaW5nT3B0aW9uKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ0ZsYWcgPVxuICAgICAgICBvcHRpb24ubG9uZyAmJiB0aGlzLl9maW5kT3B0aW9uKG9wdGlvbi5sb25nKVxuICAgICAgICAgID8gb3B0aW9uLmxvbmdcbiAgICAgICAgICA6IG9wdGlvbi5zaG9ydDtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFkZCBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScke3RoaXMuX25hbWUgJiYgYCB0byBjb21tYW5kICcke3RoaXMuX25hbWV9J2B9IGR1ZSB0byBjb25mbGljdGluZyBmbGFnICcke21hdGNoaW5nRmxhZ30nXG4tICBhbHJlYWR5IHVzZWQgYnkgb3B0aW9uICcke21hdGNoaW5nT3B0aW9uLmZsYWdzfSdgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0T3B0aW9uR3JvdXAob3B0aW9uKTtcbiAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBjb21tYW5kIG5hbWUgYW5kIGFsaWFzIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGNvbW1hbmRzLlxuICAgKiBSZWdpc3RlciBjb21tYW5kIGlmIG5vIGNvbmZsaWN0cyBmb3VuZCwgb3IgdGhyb3cgb24gY29uZmxpY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY29tbWFuZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcmVnaXN0ZXJDb21tYW5kKGNvbW1hbmQpIHtcbiAgICBjb25zdCBrbm93bkJ5ID0gKGNtZCkgPT4ge1xuICAgICAgcmV0dXJuIFtjbWQubmFtZSgpXS5jb25jYXQoY21kLmFsaWFzZXMoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFscmVhZHlVc2VkID0ga25vd25CeShjb21tYW5kKS5maW5kKChuYW1lKSA9PlxuICAgICAgdGhpcy5fZmluZENvbW1hbmQobmFtZSksXG4gICAgKTtcbiAgICBpZiAoYWxyZWFkeVVzZWQpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ21kID0ga25vd25CeSh0aGlzLl9maW5kQ29tbWFuZChhbHJlYWR5VXNlZCkpLmpvaW4oJ3wnKTtcbiAgICAgIGNvbnN0IG5ld0NtZCA9IGtub3duQnkoY29tbWFuZCkuam9pbignfCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgY2Fubm90IGFkZCBjb21tYW5kICcke25ld0NtZH0nIGFzIGFscmVhZHkgaGF2ZSBjb21tYW5kICcke2V4aXN0aW5nQ21kfSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKGNvbW1hbmQpO1xuICAgIHRoaXMuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkT3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMuX3JlZ2lzdGVyT3B0aW9uKG9wdGlvbik7XG5cbiAgICBjb25zdCBvbmFtZSA9IG9wdGlvbi5uYW1lKCk7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG5cbiAgICAvLyBzdG9yZSBkZWZhdWx0IHZhbHVlXG4gICAgaWYgKG9wdGlvbi5uZWdhdGUpIHtcbiAgICAgIC8vIC0tbm8tZm9vIGlzIHNwZWNpYWwgYW5kIGRlZmF1bHRzIGZvbyB0byB0cnVlLCB1bmxlc3MgYSAtLWZvbyBvcHRpb24gaXMgYWxyZWFkeSBkZWZpbmVkXG4gICAgICBjb25zdCBwb3NpdGl2ZUxvbmdGbGFnID0gb3B0aW9uLmxvbmcucmVwbGFjZSgvXi0tbm8tLywgJy0tJyk7XG4gICAgICBpZiAoIXRoaXMuX2ZpbmRPcHRpb24ocG9zaXRpdmVMb25nRmxhZykpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UoXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBvcHRpb24uZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9uLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb24uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKG5hbWUsIG9wdGlvbi5kZWZhdWx0VmFsdWUsICdkZWZhdWx0Jyk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlciBmb3IgY2xpIGFuZCBlbnYgc3VwcGxpZWQgdmFsdWVzXG4gICAgY29uc3QgaGFuZGxlT3B0aW9uVmFsdWUgPSAodmFsLCBpbnZhbGlkVmFsdWVNZXNzYWdlLCB2YWx1ZVNvdXJjZSkgPT4ge1xuICAgICAgLy8gdmFsIGlzIG51bGwgZm9yIG9wdGlvbmFsIG9wdGlvbiB1c2VkIHdpdGhvdXQgYW4gb3B0aW9uYWwtYXJndW1lbnQuXG4gICAgICAvLyB2YWwgaXMgdW5kZWZpbmVkIGZvciBib29sZWFuIGFuZCBuZWdhdGVkIG9wdGlvbi5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCAmJiBvcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsID0gb3B0aW9uLnByZXNldEFyZztcbiAgICAgIH1cblxuICAgICAgLy8gY3VzdG9tIHByb2Nlc3NpbmdcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZShuYW1lKTtcbiAgICAgIGlmICh2YWwgIT09IG51bGwgJiYgb3B0aW9uLnBhcnNlQXJnKSB7XG4gICAgICAgIHZhbCA9IHRoaXMuX2NhbGxQYXJzZUFyZyhvcHRpb24sIHZhbCwgb2xkVmFsdWUsIGludmFsaWRWYWx1ZU1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmICh2YWwgIT09IG51bGwgJiYgb3B0aW9uLnZhcmlhZGljKSB7XG4gICAgICAgIHZhbCA9IG9wdGlvbi5fY29sbGVjdFZhbHVlKHZhbCwgb2xkVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaWxsLWluIGFwcHJvcHJpYXRlIG1pc3NpbmcgdmFsdWVzLiBMb25nIHdpbmRlZCBidXQgZWFzeSB0byBmb2xsb3cuXG4gICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgaWYgKG9wdGlvbi5uZWdhdGUpIHtcbiAgICAgICAgICB2YWwgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uaXNCb29sZWFuKCkgfHwgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgdmFsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgPSAnJzsgLy8gbm90IG5vcm1hbCwgcGFyc2VBcmcgbWlnaHQgaGF2ZSBmYWlsZWQgb3IgYmUgYSBtb2NrIGZ1bmN0aW9uIGZvciB0ZXN0aW5nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKG5hbWUsIHZhbCwgdmFsdWVTb3VyY2UpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uKCdvcHRpb246JyArIG9uYW1lLCAodmFsKSA9PiB7XG4gICAgICBjb25zdCBpbnZhbGlkVmFsdWVNZXNzYWdlID0gYGVycm9yOiBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgYXJndW1lbnQgJyR7dmFsfScgaXMgaW52YWxpZC5gO1xuICAgICAgaGFuZGxlT3B0aW9uVmFsdWUodmFsLCBpbnZhbGlkVmFsdWVNZXNzYWdlLCAnY2xpJyk7XG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9uLmVudlZhcikge1xuICAgICAgdGhpcy5vbignb3B0aW9uRW52OicgKyBvbmFtZSwgKHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBpbnZhbGlkVmFsdWVNZXNzYWdlID0gYGVycm9yOiBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgdmFsdWUgJyR7dmFsfScgZnJvbSBlbnYgJyR7b3B0aW9uLmVudlZhcn0nIGlzIGludmFsaWQuYDtcbiAgICAgICAgaGFuZGxlT3B0aW9uVmFsdWUodmFsLCBpbnZhbGlkVmFsdWVNZXNzYWdlLCAnZW52Jyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBzaGFyZWQgYnkgLm9wdGlvbigpIGFuZCAucmVxdWlyZWRPcHRpb24oKVxuICAgKlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vcHRpb25FeChjb25maWcsIGZsYWdzLCBkZXNjcmlwdGlvbiwgZm4sIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdvYmplY3QnICYmIGZsYWdzIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUbyBhZGQgYW4gT3B0aW9uIG9iamVjdCB1c2UgYWRkT3B0aW9uKCkgaW5zdGVhZCBvZiBvcHRpb24oKSBvciByZXF1aXJlZE9wdGlvbigpJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gICAgb3B0aW9uLm1ha2VPcHRpb25NYW5kYXRvcnkoISFjb25maWcubWFuZGF0b3J5KTtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb24uZGVmYXVsdChkZWZhdWx0VmFsdWUpLmFyZ1BhcnNlcihmbik7XG4gICAgfSBlbHNlIGlmIChmbiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgY29uc3QgcmVnZXggPSBmbjtcbiAgICAgIGZuID0gKHZhbCwgZGVmKSA9PiB7XG4gICAgICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHZhbCk7XG4gICAgICAgIHJldHVybiBtID8gbVswXSA6IGRlZjtcbiAgICAgIH07XG4gICAgICBvcHRpb24uZGVmYXVsdChkZWZhdWx0VmFsdWUpLmFyZ1BhcnNlcihmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgb3B0aW9uIHdpdGggYGZsYWdzYCwgYGRlc2NyaXB0aW9uYCwgYW5kIG9wdGlvbmFsIGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb24gb3IgYGRlZmF1bHRWYWx1ZWAgb3IgYm90aC5cbiAgICpcbiAgICogVGhlIGBmbGFnc2Agc3RyaW5nIGNvbnRhaW5zIHRoZSBzaG9ydCBhbmQvb3IgbG9uZyBmbGFncywgc2VwYXJhdGVkIGJ5IGNvbW1hLCBhIHBpcGUgb3Igc3BhY2UuIEEgcmVxdWlyZWRcbiAgICogb3B0aW9uLWFyZ3VtZW50IGlzIGluZGljYXRlZCBieSBgPD5gIGFuZCBhbiBvcHRpb25hbCBvcHRpb24tYXJndW1lbnQgYnkgYFtdYC5cbiAgICpcbiAgICogU2VlIHRoZSBSRUFETUUgZm9yIG1vcmUgZGV0YWlscywgYW5kIHNlZSBhbHNvIGFkZE9wdGlvbigpIGFuZCByZXF1aXJlZE9wdGlvbigpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgICAub3B0aW9uKCctcCwgLS1wZXBwZXInLCAnYWRkIHBlcHBlcicpXG4gICAqICAgICAub3B0aW9uKCctLXB0LCAtLXBpenphLXR5cGUgPFRZUEU+JywgJ3R5cGUgb2YgcGl6emEnKSAvLyByZXF1aXJlZCBvcHRpb24tYXJndW1lbnRcbiAgICogICAgIC5vcHRpb24oJy1jLCAtLWNoZWVzZSBbQ0hFRVNFXScsICdhZGQgZXh0cmEgY2hlZXNlJywgJ21venphcmVsbGEnKSAvLyBvcHRpb25hbCBvcHRpb24tYXJndW1lbnQgd2l0aCBkZWZhdWx0XG4gICAqICAgICAub3B0aW9uKCctdCwgLS10aXAgPFZBTFVFPicsICdhZGQgdGlwIHRvIHB1cmNoYXNlIGNvc3QnLCBwYXJzZUZsb2F0KSAvLyBjdXN0b20gcGFyc2UgZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIG9wdGlvbiBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgb3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25FeCh7fSwgZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByZXF1aXJlZCBvcHRpb24gd2hpY2ggbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZy4gVGhpcyB1c3VhbGx5IG1lYW5zXG4gICAqIHRoZSBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gKE90aGVyd2lzZSB0aGUgc2FtZSBhcyAub3B0aW9uKCkuKVxuICAgKlxuICAgKiBUaGUgYGZsYWdzYCBzdHJpbmcgY29udGFpbnMgdGhlIHNob3J0IGFuZC9vciBsb25nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIG9wdGlvbiBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgcmVxdWlyZWRPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkV4KFxuICAgICAgeyBtYW5kYXRvcnk6IHRydWUgfSxcbiAgICAgIGZsYWdzLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBwYXJzZUFyZyxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsdGVyIHBhcnNpbmcgb2Ygc2hvcnQgZmxhZ3Mgd2l0aCBvcHRpb25hbCB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIGZvciBgLm9wdGlvbignLWYsLS1mbGFnIFt2YWx1ZV0nKTpcbiAgICogcHJvZ3JhbS5jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUodHJ1ZSk7ICAvLyBgLWY4MGAgaXMgdHJlYXRlZCBsaWtlIGAtLWZsYWc9ODBgLCB0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91clxuICAgKiBwcm9ncmFtLmNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZShmYWxzZSkgLy8gYC1mYmAgaXMgdHJlYXRlZCBsaWtlIGAtZiAtYmBcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbY29tYmluZV0gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgYW4gb3B0aW9uYWwgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBkaXJlY3RseSBhZnRlciB0aGUgZmxhZy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBjb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUoY29tYmluZSA9IHRydWUpIHtcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPSAhIWNvbWJpbmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdW5rbm93biBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93VW5rbm93bl0gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd24gZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhbGxvd1Vua25vd25PcHRpb24oYWxsb3dVbmtub3duID0gdHJ1ZSkge1xuICAgIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9ICEhYWxsb3dVbmtub3duO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGV4Y2VzcyBjb21tYW5kLWFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZCBsaW5lLiBQYXNzIGZhbHNlIHRvIG1ha2UgZXhjZXNzIGFyZ3VtZW50cyBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dFeGNlc3NdIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duIGZvciBleGNlc3MgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFsbG93RXhjZXNzQXJndW1lbnRzKGFsbG93RXhjZXNzID0gdHJ1ZSkge1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gISFhbGxvd0V4Y2VzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgcG9zaXRpb25hbCBvcHRpb25zLiBQb3NpdGlvbmFsIG1lYW5zIGdsb2JhbCBvcHRpb25zIGFyZSBzcGVjaWZpZWQgYmVmb3JlIHN1YmNvbW1hbmRzIHdoaWNoIGxldHNcbiAgICogc3ViY29tbWFuZHMgcmV1c2UgdGhlIHNhbWUgb3B0aW9uIG5hbWVzLCBhbmQgYWxzbyBlbmFibGVzIHN1YmNvbW1hbmRzIHRvIHR1cm4gb24gcGFzc1Rocm91Z2hPcHRpb25zLlxuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm9uLXBvc2l0aW9uYWwgYW5kIGdsb2JhbCBvcHRpb25zIG1heSBhcHBlYXIgYW55d2hlcmUgb24gdGhlIGNvbW1hbmQgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbcG9zaXRpb25hbF1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBlbmFibGVQb3NpdGlvbmFsT3B0aW9ucyhwb3NpdGlvbmFsID0gdHJ1ZSkge1xuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gISFwb3NpdGlvbmFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3MgdGhyb3VnaCBvcHRpb25zIHRoYXQgY29tZSBhZnRlciBjb21tYW5kLWFyZ3VtZW50cyByYXRoZXIgdGhhbiB0cmVhdCB0aGVtIGFzIGNvbW1hbmQtb3B0aW9ucyxcbiAgICogc28gYWN0dWFsIGNvbW1hbmQtb3B0aW9ucyBjb21lIGJlZm9yZSBjb21tYW5kLWFyZ3VtZW50cy4gVHVybmluZyB0aGlzIG9uIGZvciBhIHN1YmNvbW1hbmQgcmVxdWlyZXNcbiAgICogcG9zaXRpb25hbCBvcHRpb25zIHRvIGhhdmUgYmVlbiBlbmFibGVkIG9uIHRoZSBwcm9ncmFtIChwYXJlbnQgY29tbWFuZHMpLlxuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm9uLXBvc2l0aW9uYWwgYW5kIG9wdGlvbnMgbWF5IGFwcGVhciBiZWZvcmUgb3IgYWZ0ZXIgY29tbWFuZC1hcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Bhc3NUaHJvdWdoXSBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHBhc3NUaHJvdWdoT3B0aW9ucyhwYXNzVGhyb3VnaCA9IHRydWUpIHtcbiAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgPSAhIXBhc3NUaHJvdWdoO1xuICAgIHRoaXMuX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudCAmJlxuICAgICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zICYmXG4gICAgICAhdGhpcy5wYXJlbnQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwYXNzVGhyb3VnaE9wdGlvbnMgY2Fubm90IGJlIHVzZWQgZm9yICcke3RoaXMuX25hbWV9JyB3aXRob3V0IHR1cm5pbmcgb24gZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgZm9yIHBhcmVudCBjb21tYW5kKHMpYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3RvcmUgb3B0aW9uIHZhbHVlcyBhcyBwcm9wZXJ0aWVzIG9uIGNvbW1hbmQgb2JqZWN0LFxuICAgKiBvciBzdG9yZSBzZXBhcmF0ZWx5IChzcGVjaWZ5IGZhbHNlKS4gSW4gYm90aCBjYXNlcyB0aGUgb3B0aW9uIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgLm9wdHMoKS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVBc1Byb3BlcnRpZXM9dHJ1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHN0b3JlT3B0aW9uc0FzUHJvcGVydGllcyhzdG9yZUFzUHJvcGVydGllcyA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsIC5zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoKSBiZWZvcmUgYWRkaW5nIG9wdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX29wdGlvblZhbHVlcykubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdjYWxsIC5zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoKSBiZWZvcmUgc2V0dGluZyBvcHRpb24gdmFsdWVzJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9ICEhc3RvcmVBc1Byb3BlcnRpZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge29iamVjdH0gdmFsdWVcbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWUoa2V5KSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHNldE9wdGlvblZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2Uoa2V5LCB2YWx1ZSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBvcHRpb24gdmFsdWUgYW5kIHdoZXJlIHRoZSB2YWx1ZSBjYW1lIGZyb20uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBleHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQvY29uZmlnL2Vudi9jbGkvaW1wbGllZFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKGtleSwgdmFsdWUsIHNvdXJjZSkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcHRpb25WYWx1ZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXNba2V5XSA9IHNvdXJjZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc291cmNlIG9mIG9wdGlvbiB2YWx1ZS5cbiAgICogRXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0IHwgY29uZmlnIHwgZW52IHwgY2xpIHwgaW1wbGllZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlU291cmNlc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2Ugb2Ygb3B0aW9uIHZhbHVlLiBTZWUgYWxzbyAub3B0c1dpdGhHbG9iYWxzKCkuXG4gICAqIEV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdCB8IGNvbmZpZyB8IGVudiB8IGNsaSB8IGltcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlU291cmNlV2l0aEdsb2JhbHMoa2V5KSB7XG4gICAgLy8gZ2xvYmFsIG92ZXJ3cml0ZXMgbG9jYWwsIGxpa2Ugb3B0c1dpdGhHbG9iYWxzXG4gICAgbGV0IHNvdXJjZTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBpZiAoY21kLmdldE9wdGlvblZhbHVlU291cmNlKGtleSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzb3VyY2UgPSBjbWQuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFyZ3VtZW50cyBmcm9tIGltcGxpZWQgb3IgZXhwbGljaXQgYXJndW1lbnRzLlxuICAgKiBTaWRlLWVmZmVjdHM6IHNldCBfc2NyaXB0UGF0aCBpZiBhcmdzIGluY2x1ZGVkIHNjcmlwdC4gVXNlZCBmb3IgZGVmYXVsdCBwcm9ncmFtIG5hbWUsIGFuZCBzdWJjb21tYW5kIHNlYXJjaGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIGlmIChhcmd2ICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkoYXJndikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3QgcGFyYW1ldGVyIHRvIHBhcnNlIG11c3QgYmUgYXJyYXkgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHBhcnNlT3B0aW9ucyA9IHBhcnNlT3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIGF1dG8tZGV0ZWN0IGFyZ3VtZW50IGNvbnZlbnRpb25zIGlmIG5vdGhpbmcgc3VwcGxpZWRcbiAgICBpZiAoYXJndiA9PT0gdW5kZWZpbmVkICYmIHBhcnNlT3B0aW9ucy5mcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnZlcnNpb25zPy5lbGVjdHJvbikge1xuICAgICAgICBwYXJzZU9wdGlvbnMuZnJvbSA9ICdlbGVjdHJvbic7XG4gICAgICB9XG4gICAgICAvLyBjaGVjayBub2RlIHNwZWNpZmljIG9wdGlvbnMgZm9yIHNjZW5hcmlvcyB3aGVyZSB1c2VyIENMSSBhcmdzIGZvbGxvdyBleGVjdXRhYmxlIHdpdGhvdXQgc2NyaXB0bmFtZVxuICAgICAgY29uc3QgZXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2ID8/IFtdO1xuICAgICAgaWYgKFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLWUnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLS1ldmFsJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy1wJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy0tcHJpbnQnKVxuICAgICAgKSB7XG4gICAgICAgIHBhcnNlT3B0aW9ucy5mcm9tID0gJ2V2YWwnOyAvLyBpbnRlcm5hbCB1c2FnZSwgbm90IGRvY3VtZW50ZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHRvIHVzaW5nIHByb2Nlc3MuYXJndlxuICAgIGlmIChhcmd2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgfVxuICAgIHRoaXMucmF3QXJncyA9IGFyZ3Yuc2xpY2UoKTtcblxuICAgIC8vIGV4dHJhY3QgdGhlIHVzZXIgYXJncyBhbmQgc2NyaXB0UGF0aFxuICAgIGxldCB1c2VyQXJncztcbiAgICBzd2l0Y2ggKHBhcnNlT3B0aW9ucy5mcm9tKSB7XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICB0aGlzLl9zY3JpcHRQYXRoID0gYXJndlsxXTtcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VsZWN0cm9uJzpcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBkZWZhdWx0QXBwIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgICAgaWYgKHByb2Nlc3MuZGVmYXVsdEFwcCkge1xuICAgICAgICAgIHRoaXMuX3NjcmlwdFBhdGggPSBhcmd2WzFdO1xuICAgICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2YWwnOlxuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB1bmV4cGVjdGVkIHBhcnNlIG9wdGlvbiB7IGZyb206ICcke3BhcnNlT3B0aW9ucy5mcm9tfScgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBkZWZhdWx0IG5hbWUgZm9yIHByb2dyYW0gZnJvbSBhcmd1bWVudHMuXG4gICAgaWYgKCF0aGlzLl9uYW1lICYmIHRoaXMuX3NjcmlwdFBhdGgpXG4gICAgICB0aGlzLm5hbWVGcm9tRmlsZW5hbWUodGhpcy5fc2NyaXB0UGF0aCk7XG4gICAgdGhpcy5fbmFtZSA9IHRoaXMuX25hbWUgfHwgJ3Byb2dyYW0nO1xuXG4gICAgcmV0dXJuIHVzZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGBhcmd2YCwgc2V0dGluZyBvcHRpb25zIGFuZCBpbnZva2luZyBjb21tYW5kcyB3aGVuIGRlZmluZWQuXG4gICAqXG4gICAqIFVzZSBwYXJzZUFzeW5jIGluc3RlYWQgb2YgcGFyc2UgaWYgYW55IG9mIHlvdXIgYWN0aW9uIGhhbmRsZXJzIGFyZSBhc3luYy5cbiAgICpcbiAgICogQ2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcGFyc2UgYHByb2Nlc3MuYXJndmAuIERldGVjdHMgRWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBvcHRpb25zIGxpa2UgYG5vZGUgLS1ldmFsYC4gRWFzeSBtb2RlIVxuICAgKlxuICAgKiBPciBjYWxsIHdpdGggYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSwgYW5kIG9wdGlvbmFsbHkgd2hlcmUgdGhlIHVzZXIgYXJndW1lbnRzIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgYGZyb21gOlxuICAgKiAtIGAnbm9kZSdgOiBkZWZhdWx0LCBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgaXMgdGhlIHNjcmlwdCBiZWluZyBydW4sIHdpdGggdXNlciBhcmd1bWVudHMgYWZ0ZXIgdGhhdFxuICAgKiAtIGAnZWxlY3Ryb24nYDogYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZWxlY3Ryb24gYXBwbGljYXRpb24gaXMgcGFja2FnZWRcbiAgICogLSBgJ3VzZXInYDoganVzdCB1c2VyIGFyZ3VtZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLnBhcnNlKCk7IC8vIHBhcnNlIHByb2Nlc3MuYXJndiBhbmQgYXV0by1kZXRlY3QgZWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBmbGFnc1xuICAgKiBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7IC8vIGFzc3VtZSBhcmd2WzBdIGlzIGFwcCBhbmQgYXJndlsxXSBpcyBzY3JpcHRcbiAgICogcHJvZ3JhbS5wYXJzZShteS1hcmdzLCB7IGZyb206ICd1c2VyJyB9KTsgLy8ganVzdCB1c2VyIHN1cHBsaWVkIGFyZ3VtZW50cywgbm90aGluZyBzcGVjaWFsIGFib3V0IGFyZ3ZbMF1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3ZdIC0gb3B0aW9uYWwsIGRlZmF1bHRzIHRvIHByb2Nlc3MuYXJndlxuICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcnNlT3B0aW9uc10gLSBvcHRpb25hbGx5IHNwZWNpZnkgc3R5bGUgb2Ygb3B0aW9ucyB3aXRoIGZyb206IG5vZGUvdXNlci9lbGVjdHJvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcnNlT3B0aW9ucy5mcm9tXSAtIHdoZXJlIHRoZSBhcmdzIGFyZSBmcm9tOiAnbm9kZScsICd1c2VyJywgJ2VsZWN0cm9uJ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgcGFyc2UoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgdGhpcy5fcHJlcGFyZUZvclBhcnNlKCk7XG4gICAgY29uc3QgdXNlckFyZ3MgPSB0aGlzLl9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKTtcbiAgICB0aGlzLl9wYXJzZUNvbW1hbmQoW10sIHVzZXJBcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGBhcmd2YCwgc2V0dGluZyBvcHRpb25zIGFuZCBpbnZva2luZyBjb21tYW5kcyB3aGVuIGRlZmluZWQuXG4gICAqXG4gICAqIENhbGwgd2l0aCBubyBwYXJhbWV0ZXJzIHRvIHBhcnNlIGBwcm9jZXNzLmFyZ3ZgLiBEZXRlY3RzIEVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgb3B0aW9ucyBsaWtlIGBub2RlIC0tZXZhbGAuIEVhc3kgbW9kZSFcbiAgICpcbiAgICogT3IgY2FsbCB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UsIGFuZCBvcHRpb25hbGx5IHdoZXJlIHRoZSB1c2VyIGFyZ3VtZW50cyBzdGFydCBieSBzcGVjaWZ5aW5nIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIGBmcm9tYDpcbiAgICogLSBgJ25vZGUnYDogZGVmYXVsdCwgYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIGlzIHRoZSBzY3JpcHQgYmVpbmcgcnVuLCB3aXRoIHVzZXIgYXJndW1lbnRzIGFmdGVyIHRoYXRcbiAgICogLSBgJ2VsZWN0cm9uJ2A6IGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGVsZWN0cm9uIGFwcGxpY2F0aW9uIGlzIHBhY2thZ2VkXG4gICAqIC0gYCd1c2VyJ2A6IGp1c3QgdXNlciBhcmd1bWVudHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKCk7IC8vIHBhcnNlIHByb2Nlc3MuYXJndiBhbmQgYXV0by1kZXRlY3QgZWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBmbGFnc1xuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTsgLy8gYXNzdW1lIGFyZ3ZbMF0gaXMgYXBwIGFuZCBhcmd2WzFdIGlzIHNjcmlwdFxuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMobXktYXJncywgeyBmcm9tOiAndXNlcicgfSk7IC8vIGp1c3QgdXNlciBzdXBwbGllZCBhcmd1bWVudHMsIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBhcmd2WzBdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmd2XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcnNlT3B0aW9uc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcnNlT3B0aW9ucy5mcm9tIC0gd2hlcmUgdGhlIGFyZ3MgYXJlIGZyb206ICdub2RlJywgJ3VzZXInLCAnZWxlY3Ryb24nXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuXG4gIGFzeW5jIHBhcnNlQXN5bmMoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgdGhpcy5fcHJlcGFyZUZvclBhcnNlKCk7XG4gICAgY29uc3QgdXNlckFyZ3MgPSB0aGlzLl9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKTtcbiAgICBhd2FpdCB0aGlzLl9wYXJzZUNvbW1hbmQoW10sIHVzZXJBcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX3ByZXBhcmVGb3JQYXJzZSgpIHtcbiAgICBpZiAodGhpcy5fc2F2ZWRTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5zYXZlU3RhdGVCZWZvcmVQYXJzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB0aGUgZmlyc3QgdGltZSBwYXJzZSBpcyBjYWxsZWQgdG8gc2F2ZSBzdGF0ZSBhbmQgYWxsb3cgYSByZXN0b3JlIGJlZm9yZSBzdWJzZXF1ZW50IGNhbGxzIHRvIHBhcnNlLlxuICAgKiBOb3QgdXN1YWxseSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBhdmFpbGFibGUgZm9yIHN1YmNsYXNzZXMgdG8gc2F2ZSB0aGVpciBjdXN0b20gc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGluIGEgbGF6eSB3YXkuIE9ubHkgY29tbWFuZHMgdXNlZCBpbiBwYXJzaW5nIGNoYWluIHdpbGwgaGF2ZSBzdGF0ZSBzYXZlZC5cbiAgICovXG4gIHNhdmVTdGF0ZUJlZm9yZVBhcnNlKCkge1xuICAgIHRoaXMuX3NhdmVkU3RhdGUgPSB7XG4gICAgICAvLyBuYW1lIGlzIHN0YWJsZSBpZiBzdXBwbGllZCBieSBhdXRob3IsIGJ1dCBtYXkgYmUgdW5zcGVjaWZpZWQgZm9yIHJvb3QgY29tbWFuZCBhbmQgZGVkdWNlZCBkdXJpbmcgcGFyc2luZ1xuICAgICAgX25hbWU6IHRoaXMuX25hbWUsXG4gICAgICAvLyBvcHRpb24gdmFsdWVzIGJlZm9yZSBwYXJzZSBoYXZlIGRlZmF1bHQgdmFsdWVzIChpbmNsdWRpbmcgZmFsc2UgZm9yIG5lZ2F0ZWQgb3B0aW9ucylcbiAgICAgIC8vIHNoYWxsb3cgY2xvbmVzXG4gICAgICBfb3B0aW9uVmFsdWVzOiB7IC4uLnRoaXMuX29wdGlvblZhbHVlcyB9LFxuICAgICAgX29wdGlvblZhbHVlU291cmNlczogeyAuLi50aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgc3RhdGUgYmVmb3JlIHBhcnNlIGZvciBjYWxscyBhZnRlciB0aGUgZmlyc3QuXG4gICAqIE5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IGF2YWlsYWJsZSBmb3Igc3ViY2xhc3NlcyB0byBzYXZlIHRoZWlyIGN1c3RvbSBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBpcyBjYWxsZWQgaW4gYSBsYXp5IHdheS4gT25seSBjb21tYW5kcyB1c2VkIGluIHBhcnNpbmcgY2hhaW4gd2lsbCBoYXZlIHN0YXRlIHJlc3RvcmVkLlxuICAgKi9cbiAgcmVzdG9yZVN0YXRlQmVmb3JlUGFyc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBjYWxsIHBhcnNlIGFnYWluIHdoZW4gc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzIGlzIHRydWUuXG4tIGVpdGhlciBtYWtlIGEgbmV3IENvbW1hbmQgZm9yIGVhY2ggY2FsbCB0byBwYXJzZSwgb3Igc3RvcCBzdG9yaW5nIG9wdGlvbnMgYXMgcHJvcGVydGllc2ApO1xuXG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBfcHJlcGFyZVVzZXJBcmdzXG4gICAgdGhpcy5fbmFtZSA9IHRoaXMuX3NhdmVkU3RhdGUuX25hbWU7XG4gICAgdGhpcy5fc2NyaXB0UGF0aCA9IG51bGw7XG4gICAgdGhpcy5yYXdBcmdzID0gW107XG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBzZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2VcbiAgICB0aGlzLl9vcHRpb25WYWx1ZXMgPSB7IC4uLnRoaXMuX3NhdmVkU3RhdGUuX29wdGlvblZhbHVlcyB9O1xuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlcyA9IHsgLi4udGhpcy5fc2F2ZWRTdGF0ZS5fb3B0aW9uVmFsdWVTb3VyY2VzIH07XG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBfcGFyc2VDb21tYW5kXG4gICAgdGhpcy5hcmdzID0gW107XG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBfcHJvY2Vzc0FyZ3VtZW50c1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93IGlmIGV4cGVjdGVkIGV4ZWN1dGFibGUgaXMgbWlzc2luZy4gQWRkIGxvdHMgb2YgaGVscCBmb3IgYXV0aG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhlY3V0YWJsZUZpbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4ZWN1dGFibGVEaXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmNvbW1hbmROYW1lXG4gICAqL1xuICBfY2hlY2tGb3JNaXNzaW5nRXhlY3V0YWJsZShleGVjdXRhYmxlRmlsZSwgZXhlY3V0YWJsZURpciwgc3ViY29tbWFuZE5hbWUpIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhleGVjdXRhYmxlRmlsZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGV4ZWN1dGFibGVEaXJNZXNzYWdlID0gZXhlY3V0YWJsZURpclxuICAgICAgPyBgc2VhcmNoZWQgZm9yIGxvY2FsIHN1YmNvbW1hbmQgcmVsYXRpdmUgdG8gZGlyZWN0b3J5ICcke2V4ZWN1dGFibGVEaXJ9J2BcbiAgICAgIDogJ25vIGRpcmVjdG9yeSBmb3Igc2VhcmNoIGZvciBsb2NhbCBzdWJjb21tYW5kLCB1c2UgLmV4ZWN1dGFibGVEaXIoKSB0byBzdXBwbHkgYSBjdXN0b20gZGlyZWN0b3J5JztcbiAgICBjb25zdCBleGVjdXRhYmxlTWlzc2luZyA9IGAnJHtleGVjdXRhYmxlRmlsZX0nIGRvZXMgbm90IGV4aXN0XG4gLSBpZiAnJHtzdWJjb21tYW5kTmFtZX0nIGlzIG5vdCBtZWFudCB0byBiZSBhbiBleGVjdXRhYmxlIGNvbW1hbmQsIHJlbW92ZSBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIgZnJvbSAnLmNvbW1hbmQoKScgYW5kIHVzZSAnLmRlc2NyaXB0aW9uKCknIGluc3RlYWRcbiAtIGlmIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUgbmFtZSBpcyBub3Qgc3VpdGFibGUsIHVzZSB0aGUgZXhlY3V0YWJsZUZpbGUgb3B0aW9uIHRvIHN1cHBseSBhIGN1c3RvbSBuYW1lIG9yIHBhdGhcbiAtICR7ZXhlY3V0YWJsZURpck1lc3NhZ2V9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXhlY3V0YWJsZU1pc3NpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBzdWItY29tbWFuZCBleGVjdXRhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhlY3V0ZVN1YkNvbW1hbmQoc3ViY29tbWFuZCwgYXJncykge1xuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKCk7XG4gICAgbGV0IGxhdW5jaFdpdGhOb2RlID0gZmFsc2U7IC8vIFVzZSBub2RlIGZvciBzb3VyY2UgdGFyZ2V0cyBzbyBkbyBub3QgbmVlZCB0byBnZXQgcGVybWlzc2lvbnMgY29ycmVjdCwgYW5kIG9uIFdpbmRvd3MuXG4gICAgY29uc3Qgc291cmNlRXh0ID0gWycuanMnLCAnLnRzJywgJy50c3gnLCAnLm1qcycsICcuY2pzJ107XG5cbiAgICBmdW5jdGlvbiBmaW5kRmlsZShiYXNlRGlyLCBiYXNlTmFtZSkge1xuICAgICAgLy8gTG9vayBmb3Igc3BlY2lmaWVkIGZpbGVcbiAgICAgIGNvbnN0IGxvY2FsQmluID0gcGF0aC5yZXNvbHZlKGJhc2VEaXIsIGJhc2VOYW1lKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGxvY2FsQmluKSkgcmV0dXJuIGxvY2FsQmluO1xuXG4gICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgY2FuZGlkYXRlIGFscmVhZHkgaGFzIGFuIGV4cGVjdGVkIGV4dGVuc2lvbi5cbiAgICAgIGlmIChzb3VyY2VFeHQuaW5jbHVkZXMocGF0aC5leHRuYW1lKGJhc2VOYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIFRyeSBhbGwgdGhlIGV4dGVuc2lvbnMuXG4gICAgICBjb25zdCBmb3VuZEV4dCA9IHNvdXJjZUV4dC5maW5kKChleHQpID0+XG4gICAgICAgIGZzLmV4aXN0c1N5bmMoYCR7bG9jYWxCaW59JHtleHR9YCksXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kRXh0KSByZXR1cm4gYCR7bG9jYWxCaW59JHtmb3VuZEV4dH1gO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIE5vdCBjaGVja2luZyBmb3IgaGVscCBmaXJzdC4gVW5saWtlbHkgdG8gaGF2ZSBtYW5kYXRvcnkgYW5kIGV4ZWN1dGFibGUsIGFuZCBjYW4ndCByb2J1c3RseSB0ZXN0IGZvciBoZWxwIGZsYWdzIGluIGV4dGVybmFsIGNvbW1hbmQuXG4gICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpO1xuICAgIHRoaXMuX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCk7XG5cbiAgICAvLyBleGVjdXRhYmxlRmlsZSBhbmQgZXhlY3V0YWJsZURpciBtaWdodCBiZSBmdWxsIHBhdGgsIG9yIGp1c3QgYSBuYW1lXG4gICAgbGV0IGV4ZWN1dGFibGVGaWxlID1cbiAgICAgIHN1YmNvbW1hbmQuX2V4ZWN1dGFibGVGaWxlIHx8IGAke3RoaXMuX25hbWV9LSR7c3ViY29tbWFuZC5fbmFtZX1gO1xuICAgIGxldCBleGVjdXRhYmxlRGlyID0gdGhpcy5fZXhlY3V0YWJsZURpciB8fCAnJztcbiAgICBpZiAodGhpcy5fc2NyaXB0UGF0aCkge1xuICAgICAgbGV0IHJlc29sdmVkU2NyaXB0UGF0aDsgLy8gcmVzb2x2ZSBwb3NzaWJsZSBzeW1saW5rIGZvciBpbnN0YWxsZWQgbnBtIGJpbmFyeVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZWRTY3JpcHRQYXRoID0gZnMucmVhbHBhdGhTeW5jKHRoaXMuX3NjcmlwdFBhdGgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJlc29sdmVkU2NyaXB0UGF0aCA9IHRoaXMuX3NjcmlwdFBhdGg7XG4gICAgICB9XG4gICAgICBleGVjdXRhYmxlRGlyID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICBwYXRoLmRpcm5hbWUocmVzb2x2ZWRTY3JpcHRQYXRoKSxcbiAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9vayBmb3IgYSBsb2NhbCBmaWxlIGluIHByZWZlcmVuY2UgdG8gYSBjb21tYW5kIGluIFBBVEguXG4gICAgaWYgKGV4ZWN1dGFibGVEaXIpIHtcbiAgICAgIGxldCBsb2NhbEZpbGUgPSBmaW5kRmlsZShleGVjdXRhYmxlRGlyLCBleGVjdXRhYmxlRmlsZSk7XG5cbiAgICAgIC8vIExlZ2FjeSBzZWFyY2ggdXNpbmcgcHJlZml4IG9mIHNjcmlwdCBuYW1lIGluc3RlYWQgb2YgY29tbWFuZCBuYW1lXG4gICAgICBpZiAoIWxvY2FsRmlsZSAmJiAhc3ViY29tbWFuZC5fZXhlY3V0YWJsZUZpbGUgJiYgdGhpcy5fc2NyaXB0UGF0aCkge1xuICAgICAgICBjb25zdCBsZWdhY3lOYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgICB0aGlzLl9zY3JpcHRQYXRoLFxuICAgICAgICAgIHBhdGguZXh0bmFtZSh0aGlzLl9zY3JpcHRQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGxlZ2FjeU5hbWUgIT09IHRoaXMuX25hbWUpIHtcbiAgICAgICAgICBsb2NhbEZpbGUgPSBmaW5kRmlsZShcbiAgICAgICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgICAgICBgJHtsZWdhY3lOYW1lfS0ke3N1YmNvbW1hbmQuX25hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGVjdXRhYmxlRmlsZSA9IGxvY2FsRmlsZSB8fCBleGVjdXRhYmxlRmlsZTtcbiAgICB9XG5cbiAgICBsYXVuY2hXaXRoTm9kZSA9IHNvdXJjZUV4dC5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoZXhlY3V0YWJsZUZpbGUpKTtcblxuICAgIGxldCBwcm9jO1xuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgICBpZiAobGF1bmNoV2l0aE5vZGUpIHtcbiAgICAgICAgYXJncy51bnNoaWZ0KGV4ZWN1dGFibGVGaWxlKTtcbiAgICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICAgIGFyZ3MgPSBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChwcm9jZXNzLmV4ZWNBcmd2KS5jb25jYXQoYXJncyk7XG5cbiAgICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihwcm9jZXNzLmFyZ3ZbMF0sIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24oZXhlY3V0YWJsZUZpbGUsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nRXhlY3V0YWJsZShcbiAgICAgICAgZXhlY3V0YWJsZUZpbGUsXG4gICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgIHN1YmNvbW1hbmQuX25hbWUsXG4gICAgICApO1xuICAgICAgYXJncy51bnNoaWZ0KGV4ZWN1dGFibGVGaWxlKTtcbiAgICAgIC8vIGFkZCBleGVjdXRhYmxlIGFyZ3VtZW50cyB0byBzcGF3blxuICAgICAgYXJncyA9IGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KHByb2Nlc3MuZXhlY0FyZ3YpLmNvbmNhdChhcmdzKTtcbiAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgIH1cblxuICAgIGlmICghcHJvYy5raWxsZWQpIHtcbiAgICAgIC8vIHRlc3RpbmcgbWFpbmx5IHRvIGF2b2lkIGxlYWsgd2FybmluZ3MgZHVyaW5nIHVuaXQgdGVzdHMgd2l0aCBtb2NrZWQgc3Bhd25cbiAgICAgIGNvbnN0IHNpZ25hbHMgPSBbJ1NJR1VTUjEnLCAnU0lHVVNSMicsICdTSUdURVJNJywgJ1NJR0lOVCcsICdTSUdIVVAnXTtcbiAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Mua2lsbGVkID09PSBmYWxzZSAmJiBwcm9jLmV4aXRDb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIGJlY2F1c2Ugc2lnbmFscyBub3QgdHlwZWQgdG8ga25vd24gc3RyaW5nc1xuICAgICAgICAgICAgcHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQgdGVybWluYXRlIHByb2Nlc3Mgd2hlbiBzcGF3bmVkIHByb2Nlc3MgdGVybWluYXRlcy5cbiAgICBjb25zdCBleGl0Q2FsbGJhY2sgPSB0aGlzLl9leGl0Q2FsbGJhY2s7XG4gICAgcHJvYy5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgY29kZSA9IGNvZGUgPz8gMTsgLy8gY29kZSBpcyBudWxsIGlmIHNwYXduZWQgcHJvY2VzcyB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbFxuICAgICAgaWYgKCFleGl0Q2FsbGJhY2spIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpdENhbGxiYWNrKFxuICAgICAgICAgIG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnLFxuICAgICAgICAgICAgJyhjbG9zZSknLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvYy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGVyci5jb2RlIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nRXhlY3V0YWJsZShcbiAgICAgICAgICBleGVjdXRhYmxlRmlsZSxcbiAgICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICAgIHN1YmNvbW1hbmQuX25hbWUsXG4gICAgICAgICk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZXJyLmNvZGUgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VBQ0NFUycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtleGVjdXRhYmxlRmlsZX0nIG5vdCBleGVjdXRhYmxlYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXRDYWxsYmFjaykge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3cmFwcGVkRXJyb3IgPSBuZXcgQ29tbWFuZGVyRXJyb3IoXG4gICAgICAgICAgMSxcbiAgICAgICAgICAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnLFxuICAgICAgICAgICcoZXJyb3IpJyxcbiAgICAgICAgKTtcbiAgICAgICAgd3JhcHBlZEVycm9yLm5lc3RlZEVycm9yID0gZXJyO1xuICAgICAgICBleGl0Q2FsbGJhY2sod3JhcHBlZEVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkIHByb2Nlc3NcbiAgICB0aGlzLnJ1bm5pbmdDb21tYW5kID0gcHJvYztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZGlzcGF0Y2hTdWJjb21tYW5kKGNvbW1hbmROYW1lLCBvcGVyYW5kcywgdW5rbm93bikge1xuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSB0aGlzLl9maW5kQ29tbWFuZChjb21tYW5kTmFtZSk7XG4gICAgaWYgKCFzdWJDb21tYW5kKSB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcblxuICAgIHN1YkNvbW1hbmQuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGxldCBwcm9taXNlQ2hhaW47XG4gICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxTdWJDb21tYW5kSG9vayhcbiAgICAgIHByb21pc2VDaGFpbixcbiAgICAgIHN1YkNvbW1hbmQsXG4gICAgICAncHJlU3ViY29tbWFuZCcsXG4gICAgKTtcbiAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+IHtcbiAgICAgIGlmIChzdWJDb21tYW5kLl9leGVjdXRhYmxlSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9leGVjdXRlU3ViQ29tbWFuZChzdWJDb21tYW5kLCBvcGVyYW5kcy5jb25jYXQodW5rbm93bikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN1YkNvbW1hbmQuX3BhcnNlQ29tbWFuZChvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2VDaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgaGVscCBkaXJlY3RseSBpZiBwb3NzaWJsZSwgb3IgZGlzcGF0Y2ggaWYgbmVjZXNzYXJ5LlxuICAgKiBlLmcuIGhlbHAgZm9vXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9kaXNwYXRjaEhlbHBDb21tYW5kKHN1YmNvbW1hbmROYW1lKSB7XG4gICAgaWYgKCFzdWJjb21tYW5kTmFtZSkge1xuICAgICAgdGhpcy5oZWxwKCk7XG4gICAgfVxuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSB0aGlzLl9maW5kQ29tbWFuZChzdWJjb21tYW5kTmFtZSk7XG4gICAgaWYgKHN1YkNvbW1hbmQgJiYgIXN1YkNvbW1hbmQuX2V4ZWN1dGFibGVIYW5kbGVyKSB7XG4gICAgICBzdWJDb21tYW5kLmhlbHAoKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBwYXJzaW5nIHRoZSBoZWxwIGZsYWcgdG8gaW52b2tlIHRoZSBoZWxwLlxuICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoXG4gICAgICBzdWJjb21tYW5kTmFtZSxcbiAgICAgIFtdLFxuICAgICAgW3RoaXMuX2dldEhlbHBPcHRpb24oKT8ubG9uZyA/PyB0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LnNob3J0ID8/ICctLWhlbHAnXSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoaXMuYXJncyBhZ2FpbnN0IGV4cGVjdGVkIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrTnVtYmVyT2ZBcmd1bWVudHMoKSB7XG4gICAgLy8gdG9vIGZld1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChhcmcsIGkpID0+IHtcbiAgICAgIGlmIChhcmcucmVxdWlyZWQgJiYgdGhpcy5hcmdzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5taXNzaW5nQXJndW1lbnQoYXJnLm5hbWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gdG9vIG1hbnlcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzW3RoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggLSAxXS52YXJpYWRpY1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5hcmdzLmxlbmd0aCA+IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2V4Y2Vzc0FyZ3VtZW50cyh0aGlzLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoaXMuYXJncyB1c2luZyB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMgYW5kIHNhdmUgYXMgdGhpcy5wcm9jZXNzZWRBcmdzIVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcHJvY2Vzc0FyZ3VtZW50cygpIHtcbiAgICBjb25zdCBteVBhcnNlQXJnID0gKGFyZ3VtZW50LCB2YWx1ZSwgcHJldmlvdXMpID0+IHtcbiAgICAgIC8vIEV4dHJhIHByb2Nlc3NpbmcgZm9yIG5pY2UgZXJyb3IgbWVzc2FnZSBvbiBwYXJzaW5nIGZhaWx1cmUuXG4gICAgICBsZXQgcGFyc2VkVmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBhcmd1bWVudC5wYXJzZUFyZykge1xuICAgICAgICBjb25zdCBpbnZhbGlkVmFsdWVNZXNzYWdlID0gYGVycm9yOiBjb21tYW5kLWFyZ3VtZW50IHZhbHVlICcke3ZhbHVlfScgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgJyR7YXJndW1lbnQubmFtZSgpfScuYDtcbiAgICAgICAgcGFyc2VkVmFsdWUgPSB0aGlzLl9jYWxsUGFyc2VBcmcoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXMsXG4gICAgICAgICAgaW52YWxpZFZhbHVlTWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZWRWYWx1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5fY2hlY2tOdW1iZXJPZkFyZ3VtZW50cygpO1xuXG4gICAgY29uc3QgcHJvY2Vzc2VkQXJncyA9IFtdO1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChkZWNsYXJlZEFyZywgaW5kZXgpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChkZWNsYXJlZEFyZy52YXJpYWRpYykge1xuICAgICAgICAvLyBDb2xsZWN0IHRvZ2V0aGVyIHJlbWFpbmluZyBhcmd1bWVudHMgZm9yIHBhc3NpbmcgdG9nZXRoZXIgYXMgYW4gYXJyYXkuXG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuYXJncy5zbGljZShpbmRleCk7XG4gICAgICAgICAgaWYgKGRlY2xhcmVkQXJnLnBhcnNlQXJnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlZHVjZSgocHJvY2Vzc2VkLCB2KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBteVBhcnNlQXJnKGRlY2xhcmVkQXJnLCB2LCBwcm9jZXNzZWQpO1xuICAgICAgICAgICAgfSwgZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5hcmdzW2luZGV4XTtcbiAgICAgICAgaWYgKGRlY2xhcmVkQXJnLnBhcnNlQXJnKSB7XG4gICAgICAgICAgdmFsdWUgPSBteVBhcnNlQXJnKGRlY2xhcmVkQXJnLCB2YWx1ZSwgZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkQXJnc1tpbmRleF0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBwcm9jZXNzZWRBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uY2Ugd2UgaGF2ZSBhIHByb21pc2Ugd2UgY2hhaW4sIGJ1dCBjYWxsIHN5bmNocm9ub3VzbHkgdW50aWwgdGhlbi5cbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbChwcm9taXNlLCBmbikge1xuICAgIC8vIHRoZW5hYmxlXG4gICAgaWYgKHByb21pc2U/LnRoZW4gJiYgdHlwZW9mIHByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gYWxyZWFkeSBoYXZlIGEgcHJvbWlzZSwgY2hhaW4gY2FsbGJhY2tcbiAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4gZm4oKSk7XG4gICAgfVxuICAgIC8vIGNhbGxiYWNrIG1pZ2h0IHJldHVybiBhIHByb21pc2VcbiAgICByZXR1cm4gZm4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyhQcm9taXNlfHVuZGVmaW5lZCl9IHByb21pc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2UsIGV2ZW50KSB7XG4gICAgbGV0IHJlc3VsdCA9IHByb21pc2U7XG4gICAgY29uc3QgaG9va3MgPSBbXTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maWx0ZXIoKGNtZCkgPT4gY21kLl9saWZlQ3ljbGVIb29rc1tldmVudF0gIT09IHVuZGVmaW5lZClcbiAgICAgIC5mb3JFYWNoKChob29rZWRDb21tYW5kKSA9PiB7XG4gICAgICAgIGhvb2tlZENvbW1hbmQuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgIGhvb2tzLnB1c2goeyBob29rZWRDb21tYW5kLCBjYWxsYmFjayB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBpZiAoZXZlbnQgPT09ICdwb3N0QWN0aW9uJykge1xuICAgICAgaG9va3MucmV2ZXJzZSgpO1xuICAgIH1cblxuICAgIGhvb2tzLmZvckVhY2goKGhvb2tEZXRhaWwpID0+IHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2NoYWluT3JDYWxsKHJlc3VsdCwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaG9va0RldGFpbC5jYWxsYmFjayhob29rRGV0YWlsLmhvb2tlZENvbW1hbmQsIHRoaXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyhQcm9taXNlfHVuZGVmaW5lZCl9IHByb21pc2VcbiAgICogQHBhcmFtIHtDb21tYW5kfSBzdWJDb21tYW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGxTdWJDb21tYW5kSG9vayhwcm9taXNlLCBzdWJDb21tYW5kLCBldmVudCkge1xuICAgIGxldCByZXN1bHQgPSBwcm9taXNlO1xuICAgIGlmICh0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdLmZvckVhY2goKGhvb2spID0+IHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fY2hhaW5PckNhbGwocmVzdWx0LCAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGhvb2sodGhpcywgc3ViQ29tbWFuZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhcmd1bWVudHMgaW4gY29udGV4dCBvZiB0aGlzIGNvbW1hbmQuXG4gICAqIFJldHVybnMgYWN0aW9uIHJlc3VsdCwgaW4gY2FzZSBpdCBpcyBhIHByb21pc2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wYXJzZUNvbW1hbmQob3BlcmFuZHMsIHVua25vd24pIHtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlT3B0aW9ucyh1bmtub3duKTtcbiAgICB0aGlzLl9wYXJzZU9wdGlvbnNFbnYoKTsgLy8gYWZ0ZXIgY2xpLCBzbyBwYXJzZUFyZyBub3QgY2FsbGVkIG9uIGJvdGggY2xpIGFuZCBlbnZcbiAgICB0aGlzLl9wYXJzZU9wdGlvbnNJbXBsaWVkKCk7XG4gICAgb3BlcmFuZHMgPSBvcGVyYW5kcy5jb25jYXQocGFyc2VkLm9wZXJhbmRzKTtcbiAgICB1bmtub3duID0gcGFyc2VkLnVua25vd247XG4gICAgdGhpcy5hcmdzID0gb3BlcmFuZHMuY29uY2F0KHVua25vd24pO1xuXG4gICAgaWYgKG9wZXJhbmRzICYmIHRoaXMuX2ZpbmRDb21tYW5kKG9wZXJhbmRzWzBdKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZChvcGVyYW5kc1swXSwgb3BlcmFuZHMuc2xpY2UoMSksIHVua25vd24pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpICYmXG4gICAgICBvcGVyYW5kc1swXSA9PT0gdGhpcy5fZ2V0SGVscENvbW1hbmQoKS5uYW1lKClcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaEhlbHBDb21tYW5kKG9wZXJhbmRzWzFdKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgdGhpcy5fb3V0cHV0SGVscElmUmVxdWVzdGVkKHVua25vd24pOyAvLyBSdW4gdGhlIGhlbHAgZm9yIGRlZmF1bHQgY29tbWFuZCBmcm9tIHBhcmVudCByYXRoZXIgdGhhbiBwYXNzaW5nIHRvIGRlZmF1bHQgY29tbWFuZFxuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZChcbiAgICAgICAgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lLFxuICAgICAgICBvcGVyYW5kcyxcbiAgICAgICAgdW5rbm93bixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoICYmXG4gICAgICB0aGlzLmFyZ3MubGVuZ3RoID09PSAwICYmXG4gICAgICAhdGhpcy5fYWN0aW9uSGFuZGxlciAmJlxuICAgICAgIXRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZVxuICAgICkge1xuICAgICAgLy8gcHJvYmFibHkgbWlzc2luZyBzdWJjb21tYW5kIGFuZCBubyBoYW5kbGVyLCB1c2VyIG5lZWRzIGhlbHAgKGFuZCBleGl0KVxuICAgICAgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0SGVscElmUmVxdWVzdGVkKHBhcnNlZC51bmtub3duKTtcbiAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCk7XG4gICAgdGhpcy5fY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKTtcblxuICAgIC8vIFdlIGRvIG5vdCBhbHdheXMgY2FsbCB0aGlzIGNoZWNrIHRvIGF2b2lkIG1hc2tpbmcgYSBcImJldHRlclwiIGVycm9yLCBsaWtlIHVua25vd24gY29tbWFuZC5cbiAgICBjb25zdCBjaGVja0ZvclVua25vd25PcHRpb25zID0gKCkgPT4ge1xuICAgICAgaWYgKHBhcnNlZC51bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy51bmtub3duT3B0aW9uKHBhcnNlZC51bmtub3duWzBdKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29tbWFuZEV2ZW50ID0gYGNvbW1hbmQ6JHt0aGlzLm5hbWUoKX1gO1xuICAgIGlmICh0aGlzLl9hY3Rpb25IYW5kbGVyKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG5cbiAgICAgIGxldCBwcm9taXNlQ2hhaW47XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2VDaGFpbiwgJ3ByZUFjdGlvbicpO1xuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PlxuICAgICAgICB0aGlzLl9hY3Rpb25IYW5kbGVyKHRoaXMucHJvY2Vzc2VkQXJncyksXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucGFyZW50LmVtaXQoY29tbWFuZEV2ZW50LCBvcGVyYW5kcywgdW5rbm93bik7IC8vIGxlZ2FjeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZUNoYWluLCAncG9zdEFjdGlvbicpO1xuICAgICAgcmV0dXJuIHByb21pc2VDaGFpbjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyZW50Py5saXN0ZW5lckNvdW50KGNvbW1hbmRFdmVudCkpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIHRoaXMucGFyZW50LmVtaXQoY29tbWFuZEV2ZW50LCBvcGVyYW5kcywgdW5rbm93bik7IC8vIGxlZ2FjeVxuICAgIH0gZWxzZSBpZiAob3BlcmFuZHMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5fZmluZENvbW1hbmQoJyonKSkge1xuICAgICAgICAvLyBsZWdhY3kgZGVmYXVsdCBjb21tYW5kXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoJyonLCBvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdjb21tYW5kOionKSkge1xuICAgICAgICAvLyBza2lwIG9wdGlvbiBjaGVjaywgZW1pdCBldmVudCBmb3IgcG9zc2libGUgbWlzc3BlbGxpbmcgc3VnZ2VzdGlvblxuICAgICAgICB0aGlzLmVtaXQoJ2NvbW1hbmQ6KicsIG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bmtub3duQ29tbWFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgLy8gVGhpcyBjb21tYW5kIGhhcyBzdWJjb21tYW5kcyBhbmQgbm90aGluZyBob29rZWQgdXAgYXQgdGhpcyBsZXZlbCwgc28gZGlzcGxheSBoZWxwIChhbmQgZXhpdCkuXG4gICAgICB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgLy8gZmFsbCB0aHJvdWdoIGZvciBjYWxsZXIgdG8gaGFuZGxlIGFmdGVyIGNhbGxpbmcgLnBhcnNlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBtYXRjaGluZyBjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgX2ZpbmRDb21tYW5kKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZHMuZmluZChcbiAgICAgIChjbWQpID0+IGNtZC5fbmFtZSA9PT0gbmFtZSB8fCBjbWQuX2FsaWFzZXMuaW5jbHVkZXMobmFtZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9uIG1hdGNoaW5nIGBhcmdgIGlmIGFueS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9maW5kT3B0aW9uKGFyZykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24uaXMoYXJnKSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGEgbWFuZGF0b3J5IG9wdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsdWUuXG4gICAqIENhbGxlZCBhZnRlciBjaGVja2luZyBmb3IgaGVscCBmbGFncyBpbiBsZWFmIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCkge1xuICAgIC8vIFdhbGsgdXAgaGllcmFyY2h5IHNvIGNhbiBjYWxsIGluIHN1YmNvbW1hbmQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGRpc3BsYXlpbmcgaGVscC5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBjbWQub3B0aW9ucy5mb3JFYWNoKChhbk9wdGlvbikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYW5PcHRpb24ubWFuZGF0b3J5ICYmXG4gICAgICAgICAgY21kLmdldE9wdGlvblZhbHVlKGFuT3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSkgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjbWQubWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlKGFuT3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIHVzZWQgdG9nZXRoZXIgaW4gdGhpcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0ZvckNvbmZsaWN0aW5nTG9jYWxPcHRpb25zKCkge1xuICAgIGNvbnN0IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGlmICh0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpICE9PSAnZGVmYXVsdCc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRpb25zV2l0aENvbmZsaWN0aW5nID0gZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zLmZpbHRlcihcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5jb25mbGljdHNXaXRoLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIG9wdGlvbnNXaXRoQ29uZmxpY3RpbmcuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb25mbGljdGluZ0FuZERlZmluZWQgPSBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMuZmluZCgoZGVmaW5lZCkgPT5cbiAgICAgICAgb3B0aW9uLmNvbmZsaWN0c1dpdGguaW5jbHVkZXMoZGVmaW5lZC5hdHRyaWJ1dGVOYW1lKCkpLFxuICAgICAgKTtcbiAgICAgIGlmIChjb25mbGljdGluZ0FuZERlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY29uZmxpY3RpbmdPcHRpb24ob3B0aW9uLCBjb25mbGljdGluZ0FuZERlZmluZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSB1c2VkIHRvZ2V0aGVyLlxuICAgKiBDYWxsZWQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGhlbHAgZmxhZ3MgaW4gbGVhZiBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCkge1xuICAgIC8vIFdhbGsgdXAgaGllcmFyY2h5IHNvIGNhbiBjYWxsIGluIHN1YmNvbW1hbmQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGRpc3BsYXlpbmcgaGVscC5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBjbWQuX2NoZWNrRm9yQ29uZmxpY3RpbmdMb2NhbE9wdGlvbnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBvcHRpb25zIGZyb20gYGFyZ3ZgIHJlbW92aW5nIGtub3duIG9wdGlvbnMsXG4gICAqIGFuZCByZXR1cm4gYXJndiBzcGxpdCBpbnRvIG9wZXJhbmRzIGFuZCB1bmtub3duIGFyZ3VtZW50cy5cbiAgICpcbiAgICogU2lkZSBlZmZlY3RzOiBtb2RpZmllcyBjb21tYW5kIGJ5IHN0b3Jpbmcgb3B0aW9ucy4gRG9lcyBub3QgcmVzZXQgc3RhdGUgaWYgY2FsbGVkIGFnYWluLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGFyZ3YgPT4gb3BlcmFuZHMsIHVua25vd25cbiAgICogICAgIC0ta25vd24ga2trIG9wID0+IFtvcF0sIFtdXG4gICAqICAgICBvcCAtLWtub3duIGtrayA9PiBbb3BdLCBbXVxuICAgKiAgICAgc3ViIC0tdW5rbm93biB1dXUgb3AgPT4gW3N1Yl0sIFstLXVua25vd24gdXV1IG9wXVxuICAgKiAgICAgc3ViIC0tIC0tdW5rbm93biB1dXUgb3AgPT4gW3N1YiAtLXVua25vd24gdXV1IG9wXSwgW11cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcmV0dXJuIHt7b3BlcmFuZHM6IHN0cmluZ1tdLCB1bmtub3duOiBzdHJpbmdbXX19XG4gICAqL1xuXG4gIHBhcnNlT3B0aW9ucyhhcmdzKSB7XG4gICAgY29uc3Qgb3BlcmFuZHMgPSBbXTsgLy8gb3BlcmFuZHMsIG5vdCBvcHRpb25zIG9yIHZhbHVlc1xuICAgIGNvbnN0IHVua25vd24gPSBbXTsgLy8gZmlyc3QgdW5rbm93biBvcHRpb24gYW5kIHJlbWFpbmluZyB1bmtub3duIGFyZ3NcbiAgICBsZXQgZGVzdCA9IG9wZXJhbmRzO1xuXG4gICAgZnVuY3Rpb24gbWF5YmVPcHRpb24oYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLmxlbmd0aCA+IDEgJiYgYXJnWzBdID09PSAnLSc7XG4gICAgfVxuXG4gICAgY29uc3QgbmVnYXRpdmVOdW1iZXJBcmcgPSAoYXJnKSA9PiB7XG4gICAgICAvLyByZXR1cm4gZmFsc2UgaWYgbm90IGEgbmVnYXRpdmUgbnVtYmVyXG4gICAgICBpZiAoIS9eLVxcZCpcXC4/XFxkKyhlWystXT9cXGQrKT8kLy50ZXN0KGFyZykpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIG5lZ2F0aXZlIG51bWJlciBpcyBvayB1bmxlc3MgZGlnaXQgdXNlZCBhcyBhbiBvcHRpb24gaW4gY29tbWFuZCBoaWVyYXJjaHlcbiAgICAgIHJldHVybiAhdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLnNvbWUoKGNtZCkgPT5cbiAgICAgICAgY21kLm9wdGlvbnNcbiAgICAgICAgICAubWFwKChvcHQpID0+IG9wdC5zaG9ydClcbiAgICAgICAgICAuc29tZSgoc2hvcnQpID0+IC9eLVxcZCQvLnRlc3Qoc2hvcnQpKSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIHBhcnNlIG9wdGlvbnNcbiAgICBsZXQgYWN0aXZlVmFyaWFkaWNPcHRpb24gPSBudWxsO1xuICAgIGxldCBhY3RpdmVHcm91cCA9IG51bGw7IC8vIHdvcmtpbmcgdGhyb3VnaCBncm91cCBvZiBzaG9ydCBvcHRpb25zLCBsaWtlIC1hYmNcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCB8fCBhY3RpdmVHcm91cCkge1xuICAgICAgY29uc3QgYXJnID0gYWN0aXZlR3JvdXAgPz8gYXJnc1tpKytdO1xuICAgICAgYWN0aXZlR3JvdXAgPSBudWxsO1xuXG4gICAgICAvLyBsaXRlcmFsXG4gICAgICBpZiAoYXJnID09PSAnLS0nKSB7XG4gICAgICAgIGlmIChkZXN0ID09PSB1bmtub3duKSBkZXN0LnB1c2goYXJnKTtcbiAgICAgICAgZGVzdC5wdXNoKC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiAmJlxuICAgICAgICAoIW1heWJlT3B0aW9uKGFyZykgfHwgbmVnYXRpdmVOdW1iZXJBcmcoYXJnKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke2FjdGl2ZVZhcmlhZGljT3B0aW9uLm5hbWUoKX1gLCBhcmcpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gbnVsbDtcblxuICAgICAgaWYgKG1heWJlT3B0aW9uKGFyZykpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihhcmcpO1xuICAgICAgICAvLyByZWNvZ25pc2VkIG9wdGlvbiwgY2FsbCBsaXN0ZW5lciB0byBhc3NpZ24gdmFsdWUgd2l0aCBwb3NzaWJsZSBjdXN0b20gcHJvY2Vzc2luZ1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzW2krK107XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdGhpcy5vcHRpb25NaXNzaW5nQXJndW1lbnQob3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAvLyBoaXN0b3JpY2FsIGJlaGF2aW91ciBpcyBvcHRpb25hbCB2YWx1ZSBpcyBmb2xsb3dpbmcgYXJnIHVubGVzcyBhbiBvcHRpb25cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaSA8IGFyZ3MubGVuZ3RoICYmXG4gICAgICAgICAgICAgICghbWF5YmVPcHRpb24oYXJnc1tpXSkgfHwgbmVnYXRpdmVOdW1iZXJBcmcoYXJnc1tpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzW2krK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuIGZsYWdcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gPSBvcHRpb24udmFyaWFkaWMgPyBvcHRpb24gOiBudWxsO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvb2sgZm9yIGNvbWJvIG9wdGlvbnMgZm9sbG93aW5nIHNpbmdsZSBkYXNoLCBlYXQgZmlyc3Qgb25lIGlmIGtub3duLlxuICAgICAgaWYgKGFyZy5sZW5ndGggPiAyICYmIGFyZ1swXSA9PT0gJy0nICYmIGFyZ1sxXSAhPT0gJy0nKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYC0ke2FyZ1sxXX1gKTtcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9wdGlvbi5yZXF1aXJlZCB8fFxuICAgICAgICAgICAgKG9wdGlvbi5vcHRpb25hbCAmJiB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBvcHRpb24gd2l0aCB2YWx1ZSBmb2xsb3dpbmcgaW4gc2FtZSBhcmd1bWVudFxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIGFyZy5zbGljZSgyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW4gb3B0aW9uXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIHByb2Nlc3NlZCBvcHRpb24gYW5kIGtlZXAgcHJvY2Vzc2luZyBncm91cFxuICAgICAgICAgICAgYWN0aXZlR3JvdXAgPSBgLSR7YXJnLnNsaWNlKDIpfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvb2sgZm9yIGtub3duIGxvbmcgZmxhZyB3aXRoIHZhbHVlLCBsaWtlIC0tZm9vPWJhclxuICAgICAgaWYgKC9eLS1bXj1dKz0vLnRlc3QoYXJnKSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGFyZy5pbmRleE9mKCc9Jyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYXJnLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgICAgIGlmIChvcHRpb24gJiYgKG9wdGlvbi5yZXF1aXJlZCB8fCBvcHRpb24ub3B0aW9uYWwpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIGFyZy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBOb3QgYSByZWNvZ25pc2VkIG9wdGlvbiBieSB0aGlzIGNvbW1hbmQuXG4gICAgICAvLyBNaWdodCBiZSBhIGNvbW1hbmQtYXJndW1lbnQsIG9yIHN1YmNvbW1hbmQgb3B0aW9uLCBvciB1bmtub3duIG9wdGlvbiwgb3IgaGVscCBjb21tYW5kIG9yIG9wdGlvbi5cblxuICAgICAgLy8gQW4gdW5rbm93biBvcHRpb24gbWVhbnMgZnVydGhlciBhcmd1bWVudHMgYWxzbyBjbGFzc2lmaWVkIGFzIHVua25vd24gc28gY2FuIGJlIHJlcHJvY2Vzc2VkIGJ5IHN1YmNvbW1hbmRzLlxuICAgICAgLy8gQSBuZWdhdGl2ZSBudW1iZXIgaW4gYSBsZWFmIGNvbW1hbmQgaXMgbm90IGFuIHVua25vd24gb3B0aW9uLlxuICAgICAgaWYgKFxuICAgICAgICBkZXN0ID09PSBvcGVyYW5kcyAmJlxuICAgICAgICBtYXliZU9wdGlvbihhcmcpICYmXG4gICAgICAgICEodGhpcy5jb21tYW5kcy5sZW5ndGggPT09IDAgJiYgbmVnYXRpdmVOdW1iZXJBcmcoYXJnKSlcbiAgICAgICkge1xuICAgICAgICBkZXN0ID0gdW5rbm93bjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdXNpbmcgcG9zaXRpb25hbE9wdGlvbnMsIHN0b3AgcHJvY2Vzc2luZyBvdXIgb3B0aW9ucyBhdCBzdWJjb21tYW5kLlxuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgfHwgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zKSAmJlxuICAgICAgICBvcGVyYW5kcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgdW5rbm93bi5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5fZmluZENvbW1hbmQoYXJnKSkge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2goYXJnKTtcbiAgICAgICAgICB1bmtub3duLnB1c2goLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5fZ2V0SGVscENvbW1hbmQoKSAmJlxuICAgICAgICAgIGFyZyA9PT0gdGhpcy5fZ2V0SGVscENvbW1hbmQoKS5uYW1lKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3BlcmFuZHMucHVzaChhcmcsIC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgICAgIHVua25vd24ucHVzaChhcmcsIC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVzaW5nIHBhc3NUaHJvdWdoT3B0aW9ucywgc3RvcCBwcm9jZXNzaW5nIG9wdGlvbnMgYXQgZmlyc3QgY29tbWFuZC1hcmd1bWVudC5cbiAgICAgIGlmICh0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMpIHtcbiAgICAgICAgZGVzdC5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgYXJnXG4gICAgICBkZXN0LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcGVyYW5kcywgdW5rbm93biB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBsb2NhbCBvcHRpb24gdmFsdWVzIGFzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3B0cygpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBiZWhhdmlvdXIgc28gYmFja3dhcmRzIGNvbXBhdGlibGUgd2hlbiBzdGlsbCB1c2luZyBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgIGNvbnN0IGxlbiA9IHRoaXMub3B0aW9ucy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5vcHRpb25zW2ldLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgIGtleSA9PT0gdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPyB0aGlzLl92ZXJzaW9uIDogdGhpc1trZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBtZXJnZWQgbG9jYWwgYW5kIGdsb2JhbCBvcHRpb24gdmFsdWVzIGFzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3B0c1dpdGhHbG9iYWxzKCkge1xuICAgIC8vIGdsb2JhbHMgb3ZlcndyaXRlIGxvY2Fsc1xuICAgIHJldHVybiB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkucmVkdWNlKFxuICAgICAgKGNvbWJpbmVkT3B0aW9ucywgY21kKSA9PiBPYmplY3QuYXNzaWduKGNvbWJpbmVkT3B0aW9ucywgY21kLm9wdHMoKSksXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCAob3IgY2FsbCBleGl0T3ZlcnJpZGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2Vycm9yT3B0aW9uc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtlcnJvck9wdGlvbnMuY29kZV0gLSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Vycm9yT3B0aW9ucy5leGl0Q29kZV0gLSB1c2VkIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqL1xuICBlcnJvcihtZXNzYWdlLCBlcnJvck9wdGlvbnMpIHtcbiAgICAvLyBvdXRwdXQgaGFuZGxpbmdcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLm91dHB1dEVycm9yKFxuICAgICAgYCR7bWVzc2FnZX1cXG5gLFxuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycixcbiAgICApO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycihgJHt0aGlzLl9zaG93SGVscEFmdGVyRXJyb3J9XFxuYCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IpIHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gZXhpdCBoYW5kbGluZ1xuICAgIGNvbnN0IGNvbmZpZyA9IGVycm9yT3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBleGl0Q29kZSA9IGNvbmZpZy5leGl0Q29kZSB8fCAxO1xuICAgIGNvbnN0IGNvZGUgPSBjb25maWcuY29kZSB8fCAnY29tbWFuZGVyLmVycm9yJztcbiAgICB0aGlzLl9leGl0KGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbnkgb3B0aW9uIHJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBpZiBvcHRpb24gZG9lc1xuICAgKiBub3QgaGF2ZSBhIHZhbHVlIGZyb20gY2xpIG9yIGNsaWVudCBjb2RlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlT3B0aW9uc0VudigpIHtcbiAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uLmVudlZhciAmJiBvcHRpb24uZW52VmFyIGluIHByb2Nlc3MuZW52KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICAgIC8vIFByaW9yaXR5IGNoZWNrLiBEbyBub3Qgb3ZlcndyaXRlIGNsaSBvciBvcHRpb25zIGZyb20gdW5rbm93biBzb3VyY2UgKGNsaWVudC1jb2RlKS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgWydkZWZhdWx0JywgJ2NvbmZpZycsICdlbnYnXS5pbmNsdWRlcyhcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQgfHwgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAvLyBvcHRpb24gY2FuIHRha2UgYSB2YWx1ZVxuICAgICAgICAgICAgLy8ga2VlcCB2ZXJ5IHNpbXBsZSwgb3B0aW9uYWwgYWx3YXlzIHRha2VzIHZhbHVlXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbkVudjoke29wdGlvbi5uYW1lKCl9YCwgcHJvY2Vzcy5lbnZbb3B0aW9uLmVudlZhcl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuXG4gICAgICAgICAgICAvLyBrZWVwIHZlcnkgc2ltcGxlLCBvbmx5IGNhcmUgdGhhdCBlbnZWYXIgZGVmaW5lZCBhbmQgbm90IHRoZSB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb25FbnY6JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFueSBpbXBsaWVkIG9wdGlvbiB2YWx1ZXMsIGlmIG9wdGlvbiBpcyB1bmRlZmluZWQgb3IgZGVmYXVsdCB2YWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZU9wdGlvbnNJbXBsaWVkKCkge1xuICAgIGNvbnN0IGR1YWxIZWxwZXIgPSBuZXcgRHVhbE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCBoYXNDdXN0b21PcHRpb25WYWx1ZSA9IChvcHRpb25LZXkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICFbJ2RlZmF1bHQnLCAnaW1wbGllZCddLmluY2x1ZGVzKHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSlcbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgb3B0aW9uLmltcGxpZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGhhc0N1c3RvbU9wdGlvblZhbHVlKG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpICYmXG4gICAgICAgICAgZHVhbEhlbHBlci52YWx1ZUZyb21PcHRpb24oXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpLFxuICAgICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgICksXG4gICAgICApXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbi5pbXBsaWVkKVxuICAgICAgICAgIC5maWx0ZXIoKGltcGxpZWRLZXkpID0+ICFoYXNDdXN0b21PcHRpb25WYWx1ZShpbXBsaWVkS2V5KSlcbiAgICAgICAgICAuZm9yRWFjaCgoaW1wbGllZEtleSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UoXG4gICAgICAgICAgICAgIGltcGxpZWRLZXksXG4gICAgICAgICAgICAgIG9wdGlvbi5pbXBsaWVkW2ltcGxpZWRLZXldLFxuICAgICAgICAgICAgICAnaW1wbGllZCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXJndW1lbnQgYG5hbWVgIGlzIG1pc3NpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG1pc3NpbmdBcmd1bWVudChuYW1lKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCAnJHtuYW1lfSdgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm1pc3NpbmdBcmd1bWVudCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgaXMgbWlzc2luZyBhbiBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBvcHRpb25NaXNzaW5nQXJndW1lbnQob3B0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIGFyZ3VtZW50IG1pc3NpbmdgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm9wdGlvbk1pc3NpbmdBcmd1bWVudCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLCBhbmQgaXMgYSBtYW5kYXRvcnkgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZShvcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiByZXF1aXJlZCBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgbm90IHNwZWNpZmllZGA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIubWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBjb25mbGljdHMgd2l0aCBhbm90aGVyIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcGFyYW0ge09wdGlvbn0gY29uZmxpY3RpbmdPcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb25mbGljdGluZ09wdGlvbihvcHRpb24sIGNvbmZsaWN0aW5nT3B0aW9uKSB7XG4gICAgLy8gVGhlIGNhbGxpbmcgY29kZSBkb2VzIG5vdCBrbm93IHdoZXRoZXIgYSBuZWdhdGVkIG9wdGlvbiBpcyB0aGUgc291cmNlIG9mIHRoZVxuICAgIC8vIHZhbHVlLCBzbyBkbyBzb21lIHdvcmsgdG8gdGFrZSBhbiBlZHVjYXRlZCBndWVzcy5cbiAgICBjb25zdCBmaW5kQmVzdE9wdGlvbkZyb21WYWx1ZSA9IChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KTtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICAgICh0YXJnZXQpID0+IHRhcmdldC5uZWdhdGUgJiYgb3B0aW9uS2V5ID09PSB0YXJnZXQuYXR0cmlidXRlTmFtZSgpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBvc2l0aXZlT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICAgICh0YXJnZXQpID0+ICF0YXJnZXQubmVnYXRlICYmIG9wdGlvbktleSA9PT0gdGFyZ2V0LmF0dHJpYnV0ZU5hbWUoKSxcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIG5lZ2F0aXZlT3B0aW9uICYmXG4gICAgICAgICgobmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnID09PSB1bmRlZmluZWQgJiYgb3B0aW9uVmFsdWUgPT09IGZhbHNlKSB8fFxuICAgICAgICAgIChuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPT09IG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5lZ2F0aXZlT3B0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBvc2l0aXZlT3B0aW9uIHx8IG9wdGlvbjtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgYmVzdE9wdGlvbiA9IGZpbmRCZXN0T3B0aW9uRnJvbVZhbHVlKG9wdGlvbik7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBiZXN0T3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KTtcbiAgICAgIGlmIChzb3VyY2UgPT09ICdlbnYnKSB7XG4gICAgICAgIHJldHVybiBgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7YmVzdE9wdGlvbi5lbnZWYXJ9J2A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYG9wdGlvbiAnJHtiZXN0T3B0aW9uLmZsYWdzfSdgO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiAke2dldEVycm9yTWVzc2FnZShvcHRpb24pfSBjYW5ub3QgYmUgdXNlZCB3aXRoICR7Z2V0RXJyb3JNZXNzYWdlKGNvbmZsaWN0aW5nT3B0aW9uKX1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLmNvbmZsaWN0aW5nT3B0aW9uJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmtub3duIG9wdGlvbiBgZmxhZ2AuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIHVua25vd25PcHRpb24oZmxhZykge1xuICAgIGlmICh0aGlzLl9hbGxvd1Vua25vd25PcHRpb24pIHJldHVybjtcbiAgICBsZXQgc3VnZ2VzdGlvbiA9ICcnO1xuXG4gICAgaWYgKGZsYWcuc3RhcnRzV2l0aCgnLS0nKSAmJiB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IpIHtcbiAgICAgIC8vIExvb3BpbmcgdG8gcGljayB1cCB0aGUgZ2xvYmFsIG9wdGlvbnMgdG9vXG4gICAgICBsZXQgY2FuZGlkYXRlRmxhZ3MgPSBbXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgbGV0IGNvbW1hbmQgPSB0aGlzO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtb3JlRmxhZ3MgPSBjb21tYW5kXG4gICAgICAgICAgLmNyZWF0ZUhlbHAoKVxuICAgICAgICAgIC52aXNpYmxlT3B0aW9ucyhjb21tYW5kKVxuICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmxvbmcpXG4gICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubG9uZyk7XG4gICAgICAgIGNhbmRpZGF0ZUZsYWdzID0gY2FuZGlkYXRlRmxhZ3MuY29uY2F0KG1vcmVGbGFncyk7XG4gICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnBhcmVudDtcbiAgICAgIH0gd2hpbGUgKGNvbW1hbmQgJiYgIWNvbW1hbmQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zKTtcbiAgICAgIHN1Z2dlc3Rpb24gPSBzdWdnZXN0U2ltaWxhcihmbGFnLCBjYW5kaWRhdGVGbGFncyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdW5rbm93biBvcHRpb24gJyR7ZmxhZ30nJHtzdWdnZXN0aW9ufWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIudW5rbm93bk9wdGlvbicgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhjZXNzIGFyZ3VtZW50cywgbW9yZSB0aGFuIGV4cGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByZWNlaXZlZEFyZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4Y2Vzc0FyZ3VtZW50cyhyZWNlaXZlZEFyZ3MpIHtcbiAgICBpZiAodGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMpIHJldHVybjtcblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aDtcbiAgICBjb25zdCBzID0gZXhwZWN0ZWQgPT09IDEgPyAnJyA6ICdzJztcbiAgICBjb25zdCBmb3JTdWJjb21tYW5kID0gdGhpcy5wYXJlbnQgPyBgIGZvciAnJHt0aGlzLm5hbWUoKX0nYCA6ICcnO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHRvbyBtYW55IGFyZ3VtZW50cyR7Zm9yU3ViY29tbWFuZH0uIEV4cGVjdGVkICR7ZXhwZWN0ZWR9IGFyZ3VtZW50JHtzfSBidXQgZ290ICR7cmVjZWl2ZWRBcmdzLmxlbmd0aH0uYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5leGNlc3NBcmd1bWVudHMnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVua25vd24gY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgdW5rbm93bkNvbW1hbmQoKSB7XG4gICAgY29uc3QgdW5rbm93bk5hbWUgPSB0aGlzLmFyZ3NbMF07XG4gICAgbGV0IHN1Z2dlc3Rpb24gPSAnJztcblxuICAgIGlmICh0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IpIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZU5hbWVzID0gW107XG4gICAgICB0aGlzLmNyZWF0ZUhlbHAoKVxuICAgICAgICAudmlzaWJsZUNvbW1hbmRzKHRoaXMpXG4gICAgICAgIC5mb3JFYWNoKChjb21tYW5kKSA9PiB7XG4gICAgICAgICAgY2FuZGlkYXRlTmFtZXMucHVzaChjb21tYW5kLm5hbWUoKSk7XG4gICAgICAgICAgLy8ganVzdCB2aXNpYmxlIGFsaWFzXG4gICAgICAgICAgaWYgKGNvbW1hbmQuYWxpYXMoKSkgY2FuZGlkYXRlTmFtZXMucHVzaChjb21tYW5kLmFsaWFzKCkpO1xuICAgICAgICB9KTtcbiAgICAgIHN1Z2dlc3Rpb24gPSBzdWdnZXN0U2ltaWxhcih1bmtub3duTmFtZSwgY2FuZGlkYXRlTmFtZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHVua25vd24gY29tbWFuZCAnJHt1bmtub3duTmFtZX0nJHtzdWdnZXN0aW9ufWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIudW5rbm93bkNvbW1hbmQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIHByb2dyYW0gdmVyc2lvbi5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYXV0by1yZWdpc3RlcnMgdGhlIFwiLVYsIC0tdmVyc2lvblwiIG9wdGlvbiB3aGljaCB3aWxsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlci5cbiAgICpcbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHN1cHBseSB0aGUgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4geyh0aGlzIHwgc3RyaW5nIHwgdW5kZWZpbmVkKX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciB2ZXJzaW9uIHN0cmluZyBpZiBubyBhcmd1bWVudHNcbiAgICovXG5cbiAgdmVyc2lvbihzdHIsIGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgdGhpcy5fdmVyc2lvbiA9IHN0cjtcbiAgICBmbGFncyA9IGZsYWdzIHx8ICctViwgLS12ZXJzaW9uJztcbiAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICdvdXRwdXQgdGhlIHZlcnNpb24gbnVtYmVyJztcbiAgICBjb25zdCB2ZXJzaW9uT3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA9IHZlcnNpb25PcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyT3B0aW9uKHZlcnNpb25PcHRpb24pO1xuXG4gICAgdGhpcy5vbignb3B0aW9uOicgKyB2ZXJzaW9uT3B0aW9uLm5hbWUoKSwgKCkgPT4ge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZU91dChgJHtzdHJ9XFxuYCk7XG4gICAgICB0aGlzLl9leGl0KDAsICdjb21tYW5kZXIudmVyc2lvbicsIHN0cik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZXNjcmlwdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc0Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cbiAgZGVzY3JpcHRpb24oc3RyLCBhcmdzRGVzY3JpcHRpb24pIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQgJiYgYXJnc0Rlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSBzdHI7XG4gICAgaWYgKGFyZ3NEZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fYXJnc0Rlc2NyaXB0aW9uID0gYXJnc0Rlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN1bW1hcnkuIFVzZWQgd2hlbiBsaXN0ZWQgYXMgc3ViY29tbWFuZCBvZiBwYXJlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cbiAgc3VtbWFyeShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9zdW1tYXJ5O1xuICAgIHRoaXMuX3N1bW1hcnkgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGFsaWFzIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIG1vcmUgdGhhbiBvbmNlIHRvIGFkZCBtdWx0aXBsZSBhbGlhc2VzLiBPbmx5IHRoZSBmaXJzdCBhbGlhcyBpcyBzaG93biBpbiB0aGUgYXV0by1nZW5lcmF0ZWQgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc11cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgYWxpYXMoYWxpYXMpIHtcbiAgICBpZiAoYWxpYXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2FsaWFzZXNbMF07IC8vIGp1c3QgcmV0dXJuIGZpcnN0LCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgIC8qKiBAdHlwZSB7Q29tbWFuZH0gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBsZXQgY29tbWFuZCA9IHRoaXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggIT09IDAgJiZcbiAgICAgIHRoaXMuY29tbWFuZHNbdGhpcy5jb21tYW5kcy5sZW5ndGggLSAxXS5fZXhlY3V0YWJsZUhhbmRsZXJcbiAgICApIHtcbiAgICAgIC8vIGFzc3VtZSBhZGRpbmcgYWxpYXMgZm9yIGxhc3QgYWRkZWQgZXhlY3V0YWJsZSBzdWJjb21tYW5kLCByYXRoZXIgdGhhbiB0aGlzXG4gICAgICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1t0aGlzLmNvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIGlmIChhbGlhcyA9PT0gY29tbWFuZC5fbmFtZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbW1hbmQgYWxpYXMgY2FuJ3QgYmUgdGhlIHNhbWUgYXMgaXRzIG5hbWVcIik7XG4gICAgY29uc3QgbWF0Y2hpbmdDb21tYW5kID0gdGhpcy5wYXJlbnQ/Ll9maW5kQ29tbWFuZChhbGlhcyk7XG4gICAgaWYgKG1hdGNoaW5nQ29tbWFuZCkge1xuICAgICAgLy8gYy5mLiBfcmVnaXN0ZXJDb21tYW5kXG4gICAgICBjb25zdCBleGlzdGluZ0NtZCA9IFttYXRjaGluZ0NvbW1hbmQubmFtZSgpXVxuICAgICAgICAuY29uY2F0KG1hdGNoaW5nQ29tbWFuZC5hbGlhc2VzKCkpXG4gICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYW5ub3QgYWRkIGFsaWFzICcke2FsaWFzfScgdG8gY29tbWFuZCAnJHt0aGlzLm5hbWUoKX0nIGFzIGFscmVhZHkgaGF2ZSBjb21tYW5kICcke2V4aXN0aW5nQ21kfSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb21tYW5kLl9hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbGlhc2VzIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogT25seSB0aGUgZmlyc3QgYWxpYXMgaXMgc2hvd24gaW4gdGhlIGF1dG8tZ2VuZXJhdGVkIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthbGlhc2VzXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nW118Q29tbWFuZCl9XG4gICAqL1xuXG4gIGFsaWFzZXMoYWxpYXNlcykge1xuICAgIC8vIEdldHRlciBmb3IgdGhlIGFycmF5IG9mIGFsaWFzZXMgaXMgdGhlIG1haW4gcmVhc29uIGZvciBoYXZpbmcgYWxpYXNlcygpIGluIGFkZGl0aW9uIHRvIGFsaWFzKCkuXG4gICAgaWYgKGFsaWFzZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2FsaWFzZXM7XG5cbiAgICBhbGlhc2VzLmZvckVhY2goKGFsaWFzKSA9PiB0aGlzLmFsaWFzKGFsaWFzKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IC8gZ2V0IHRoZSBjb21tYW5kIHVzYWdlIGBzdHJgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgdXNhZ2Uoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fdXNhZ2UpIHJldHVybiB0aGlzLl91c2FnZTtcblxuICAgICAgY29uc3QgYXJncyA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5tYXAoKGFyZykgPT4ge1xuICAgICAgICByZXR1cm4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFtdXG4gICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxlbmd0aCB8fCB0aGlzLl9oZWxwT3B0aW9uICE9PSBudWxsID8gJ1tvcHRpb25zXScgOiBbXSxcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCA/ICdbY29tbWFuZF0nIDogW10sXG4gICAgICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCA/IGFyZ3MgOiBbXSxcbiAgICAgICAgKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cblxuICAgIHRoaXMuX3VzYWdlID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICBuYW1lKHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgdGhpcy5fbmFtZSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IHRoZSBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIHRoaXMgc3ViY29tbWFuZCBpbiBwYXJlbnQgY29tbWFuZCdzIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaGVhZGluZ11cbiAgICogQHJldHVybiB7Q29tbWFuZCB8IHN0cmluZ31cbiAgICovXG5cbiAgaGVscEdyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5faGVscEdyb3VwSGVhZGluZyA/PyAnJztcbiAgICB0aGlzLl9oZWxwR3JvdXBIZWFkaW5nID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IHRoZSBkZWZhdWx0IGhlbHAgZ3JvdXAgaGVhZGluZyBmb3Igc3ViY29tbWFuZHMgYWRkZWQgdG8gdGhpcyBjb21tYW5kLlxuICAgKiAoVGhpcyBkb2VzIG5vdCBvdmVycmlkZSBhIGdyb3VwIHNldCBkaXJlY3RseSBvbiB0aGUgc3ViY29tbWFuZCB1c2luZyAuaGVscEdyb3VwKCkuKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmNvbW1hbmRzR3JvdXAoJ0RldmVsb3BtZW50IENvbW1hbmRzOik7XG4gICAqIHByb2dyYW0uY29tbWFuZCgnd2F0Y2gnKS4uLlxuICAgKiBwcm9ncmFtLmNvbW1hbmQoJ2xpbnQnKS4uLlxuICAgKiAuLi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJucyB7Q29tbWFuZCB8IHN0cmluZ31cbiAgICovXG4gIGNvbW1hbmRzR3JvdXAoaGVhZGluZykge1xuICAgIGlmIChoZWFkaW5nID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID8/ICcnO1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGRlZmF1bHQgaGVscCBncm91cCBoZWFkaW5nIGZvciBvcHRpb25zIGFkZGVkIHRvIHRoaXMgY29tbWFuZC5cbiAgICogKFRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgYSBncm91cCBzZXQgZGlyZWN0bHkgb24gdGhlIG9wdGlvbiB1c2luZyAuaGVscEdyb3VwKCkuKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLm9wdGlvbnNHcm91cCgnRGV2ZWxvcG1lbnQgT3B0aW9uczonKVxuICAgKiAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ291dHB1dCBleHRyYSBkZWJ1Z2dpbmcnKVxuICAgKiAgIC5vcHRpb24oJy1wLCAtLXByb2ZpbGUnLCAnb3V0cHV0IHByb2ZpbGluZyBpbmZvcm1hdGlvbicpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaGVhZGluZ11cbiAgICogQHJldHVybnMge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuICBvcHRpb25zR3JvdXAoaGVhZGluZykge1xuICAgIGlmIChoZWFkaW5nID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgPz8gJyc7XG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdE9wdGlvbkdyb3VwKG9wdGlvbikge1xuICAgIGlmICh0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgJiYgIW9wdGlvbi5oZWxwR3JvdXBIZWFkaW5nKVxuICAgICAgb3B0aW9uLmhlbHBHcm91cCh0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdENvbW1hbmRHcm91cChjbWQpIHtcbiAgICBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCAmJiAhY21kLmhlbHBHcm91cCgpKVxuICAgICAgY21kLmhlbHBHcm91cCh0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgZnJvbSBzY3JpcHQgZmlsZW5hbWUsIHN1Y2ggYXMgcHJvY2Vzcy5hcmd2WzFdLFxuICAgKiBvciByZXF1aXJlLm1haW4uZmlsZW5hbWUsIG9yIF9fZmlsZW5hbWUuXG4gICAqXG4gICAqIChVc2VkIGludGVybmFsbHkgYW5kIHB1YmxpYyBhbHRob3VnaCBub3QgZG9jdW1lbnRlZCBpbiBSRUFETUUuKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLm5hbWVGcm9tRmlsZW5hbWUocmVxdWlyZS5tYWluLmZpbGVuYW1lKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9XG4gICAqL1xuXG4gIG5hbWVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICB0aGlzLl9uYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgcGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBkaXJlY3RvcnkgZm9yIHNlYXJjaGluZyBmb3IgZXhlY3V0YWJsZSBzdWJjb21tYW5kcyBvZiB0aGlzIGNvbW1hbmQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uZXhlY3V0YWJsZURpcihfX2Rpcm5hbWUpO1xuICAgKiAvLyBvclxuICAgKiBwcm9ncmFtLmV4ZWN1dGFibGVEaXIoJ3N1YmNvbW1hbmRzJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF1cbiAgICogQHJldHVybiB7KHN0cmluZ3xudWxsfENvbW1hbmQpfVxuICAgKi9cblxuICBleGVjdXRhYmxlRGlyKHBhdGgpIHtcbiAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZXhlY3V0YWJsZURpcjtcbiAgICB0aGlzLl9leGVjdXRhYmxlRGlyID0gcGF0aDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gcHJvZ3JhbSBoZWxwIGRvY3VtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9fSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JhcCBmb3Igc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgaGVscEluZm9ybWF0aW9uKGNvbnRleHRPcHRpb25zKSB7XG4gICAgY29uc3QgaGVscGVyID0gdGhpcy5jcmVhdGVIZWxwKCk7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpO1xuICAgIGhlbHBlci5wcmVwYXJlQ29udGV4dCh7XG4gICAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICAgIGhlbHBXaWR0aDogY29udGV4dC5oZWxwV2lkdGgsXG4gICAgICBvdXRwdXRIYXNDb2xvcnM6IGNvbnRleHQuaGFzQ29sb3JzLFxuICAgIH0pO1xuICAgIGNvbnN0IHRleHQgPSBoZWxwZXIuZm9ybWF0SGVscCh0aGlzLCBoZWxwZXIpO1xuICAgIGlmIChjb250ZXh0Lmhhc0NvbG9ycykgcmV0dXJuIHRleHQ7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uc3RyaXBDb2xvcih0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiBIZWxwQ29udGV4dFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGVycm9yXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWxwV2lkdGhcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBoYXNDb2xvcnNcbiAgICogQHByb3BlcnR5IHtmdW5jdGlvbn0gd3JpdGUgLSBpbmNsdWRlcyBzdHJpcENvbG9yIGlmIG5lZWRlZFxuICAgKlxuICAgKiBAcmV0dXJucyB7SGVscENvbnRleHR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKSB7XG4gICAgY29udGV4dE9wdGlvbnMgPSBjb250ZXh0T3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBlcnJvciA9ICEhY29udGV4dE9wdGlvbnMuZXJyb3I7XG4gICAgbGV0IGJhc2VXcml0ZTtcbiAgICBsZXQgaGFzQ29sb3JzO1xuICAgIGxldCBoZWxwV2lkdGg7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBiYXNlV3JpdGUgPSAoc3RyKSA9PiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKHN0cik7XG4gICAgICBoYXNDb2xvcnMgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldEVyckhhc0NvbG9ycygpO1xuICAgICAgaGVscFdpZHRoID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRFcnJIZWxwV2lkdGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVdyaXRlID0gKHN0cikgPT4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZU91dChzdHIpO1xuICAgICAgaGFzQ29sb3JzID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRPdXRIYXNDb2xvcnMoKTtcbiAgICAgIGhlbHBXaWR0aCA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0T3V0SGVscFdpZHRoKCk7XG4gICAgfVxuICAgIGNvbnN0IHdyaXRlID0gKHN0cikgPT4ge1xuICAgICAgaWYgKCFoYXNDb2xvcnMpIHN0ciA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uc3RyaXBDb2xvcihzdHIpO1xuICAgICAgcmV0dXJuIGJhc2VXcml0ZShzdHIpO1xuICAgIH07XG4gICAgcmV0dXJuIHsgZXJyb3IsIHdyaXRlLCBoYXNDb2xvcnMsIGhlbHBXaWR0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbW1hbmQuXG4gICAqXG4gICAqIE91dHB1dHMgYnVpbHQtaW4gaGVscCwgYW5kIGN1c3RvbSB0ZXh0IGFkZGVkIHVzaW5nIGAuYWRkSGVscFRleHQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9IHwgRnVuY3Rpb259IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICovXG5cbiAgb3V0cHV0SGVscChjb250ZXh0T3B0aW9ucykge1xuICAgIGxldCBkZXByZWNhdGVkQ2FsbGJhY2s7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGVwcmVjYXRlZENhbGxiYWNrID0gY29udGV4dE9wdGlvbnM7XG4gICAgICBjb250ZXh0T3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRDb250ZXh0ID0gdGhpcy5fZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucyk7XG4gICAgLyoqIEB0eXBlIHtIZWxwVGV4dEV2ZW50Q29udGV4dH0gKi9cbiAgICBjb25zdCBldmVudENvbnRleHQgPSB7XG4gICAgICBlcnJvcjogb3V0cHV0Q29udGV4dC5lcnJvcixcbiAgICAgIHdyaXRlOiBvdXRwdXRDb250ZXh0LndyaXRlLFxuICAgICAgY29tbWFuZDogdGhpcyxcbiAgICB9O1xuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZm9yRWFjaCgoY29tbWFuZCkgPT4gY29tbWFuZC5lbWl0KCdiZWZvcmVBbGxIZWxwJywgZXZlbnRDb250ZXh0KSk7XG4gICAgdGhpcy5lbWl0KCdiZWZvcmVIZWxwJywgZXZlbnRDb250ZXh0KTtcblxuICAgIGxldCBoZWxwSW5mb3JtYXRpb24gPSB0aGlzLmhlbHBJbmZvcm1hdGlvbih7IGVycm9yOiBvdXRwdXRDb250ZXh0LmVycm9yIH0pO1xuICAgIGlmIChkZXByZWNhdGVkQ2FsbGJhY2spIHtcbiAgICAgIGhlbHBJbmZvcm1hdGlvbiA9IGRlcHJlY2F0ZWRDYWxsYmFjayhoZWxwSW5mb3JtYXRpb24pO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaGVscEluZm9ybWF0aW9uICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAhQnVmZmVyLmlzQnVmZmVyKGhlbHBJbmZvcm1hdGlvbilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ291dHB1dEhlbHAgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgYSBCdWZmZXInKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0cHV0Q29udGV4dC53cml0ZShoZWxwSW5mb3JtYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuX2dldEhlbHBPcHRpb24oKT8ubG9uZykge1xuICAgICAgdGhpcy5lbWl0KHRoaXMuX2dldEhlbHBPcHRpb24oKS5sb25nKTsgLy8gZGVwcmVjYXRlZFxuICAgIH1cbiAgICB0aGlzLmVtaXQoJ2FmdGVySGVscCcsIGV2ZW50Q29udGV4dCk7XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNvbW1hbmQpID0+XG4gICAgICBjb21tYW5kLmVtaXQoJ2FmdGVyQWxsSGVscCcsIGV2ZW50Q29udGV4dCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHBhc3MgaW4gZmxhZ3MgYW5kIGEgZGVzY3JpcHRpb24gdG8gY3VzdG9taXNlIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICogUGFzcyBpbiBmYWxzZSB0byBkaXNhYmxlIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5oZWxwT3B0aW9uKCctPywgLS1oZWxwJyAnc2hvdyBoZWxwJyk7IC8vIGN1c3RvbWlzZVxuICAgKiBwcm9ncmFtLmhlbHBPcHRpb24oZmFsc2UpOyAvLyBkaXNhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IGJvb2xlYW4pfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaGVscE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICAvLyBTdXBwb3J0IGVuYWJsaW5nL2Rpc2FibGluZyBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChmbGFncykge1xuICAgICAgICBpZiAodGhpcy5faGVscE9wdGlvbiA9PT0gbnVsbCkgdGhpcy5faGVscE9wdGlvbiA9IHVuZGVmaW5lZDsgLy8gcmVlbmFibGVcbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCkge1xuICAgICAgICAgIC8vIG1ha2UgdGhlIG9wdGlvbiB0byBzdG9yZSB0aGUgZ3JvdXBcbiAgICAgICAgICB0aGlzLl9pbml0T3B0aW9uR3JvdXAodGhpcy5fZ2V0SGVscE9wdGlvbigpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faGVscE9wdGlvbiA9IG51bGw7IC8vIGRpc2FibGVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbWlzZSBmbGFncyBhbmQgZGVzY3JpcHRpb24uXG4gICAgdGhpcy5faGVscE9wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uKFxuICAgICAgZmxhZ3MgPz8gJy1oLCAtLWhlbHAnLFxuICAgICAgZGVzY3JpcHRpb24gPz8gJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCcsXG4gICAgKTtcbiAgICAvLyBpbml0IGdyb3VwIHVubGVzcyBsYXp5IGNyZWF0ZVxuICAgIGlmIChmbGFncyB8fCBkZXNjcmlwdGlvbikgdGhpcy5faW5pdE9wdGlvbkdyb3VwKHRoaXMuX2hlbHBPcHRpb24pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBjcmVhdGUgaGVscCBvcHRpb24uXG4gICAqIFJldHVybnMgbnVsbCBpZiBoYXMgYmVlbiBkaXNhYmxlZCB3aXRoIC5oZWxwT3B0aW9uKGZhbHNlKS5cbiAgICpcbiAgICogQHJldHVybnMgeyhPcHRpb24gfCBudWxsKX0gdGhlIGhlbHAgb3B0aW9uXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuICBfZ2V0SGVscE9wdGlvbigpIHtcbiAgICAvLyBMYXp5IGNyZWF0ZSBoZWxwIG9wdGlvbiBvbiBkZW1hbmQuXG4gICAgaWYgKHRoaXMuX2hlbHBPcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oZWxwT3B0aW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2hlbHBPcHRpb247XG4gIH1cblxuICAvKipcbiAgICogU3VwcGx5IHlvdXIgb3duIG9wdGlvbiB0byB1c2UgZm9yIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICogVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBoZWxwT3B0aW9uKCkgdG8gY3VzdG9taXNlIHRoZSBmbGFncyBhbmQgZGVzY3JpcHRpb24gZXRjLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkSGVscE9wdGlvbihvcHRpb24pIHtcbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gb3B0aW9uO1xuICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cChvcHRpb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGFuZCBleGl0LlxuICAgKlxuICAgKiBPdXRwdXRzIGJ1aWx0LWluIGhlbHAsIGFuZCBjdXN0b20gdGV4dCBhZGRlZCB1c2luZyBgLmFkZEhlbHBUZXh0KClgLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfX0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKi9cblxuICBoZWxwKGNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5vdXRwdXRIZWxwKGNvbnRleHRPcHRpb25zKTtcbiAgICBsZXQgZXhpdENvZGUgPSBOdW1iZXIocHJvY2Vzcy5leGl0Q29kZSA/PyAwKTsgLy8gcHJvY2Vzcy5leGl0Q29kZSBkb2VzIGFsbG93IGEgc3RyaW5nIG9yIGFuIGludGVnZXIsIGJ1dCB3ZSBwcmVmZXIganVzdCBhIG51bWJlclxuICAgIGlmIChcbiAgICAgIGV4aXRDb2RlID09PSAwICYmXG4gICAgICBjb250ZXh0T3B0aW9ucyAmJlxuICAgICAgdHlwZW9mIGNvbnRleHRPcHRpb25zICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICBjb250ZXh0T3B0aW9ucy5lcnJvclxuICAgICkge1xuICAgICAgZXhpdENvZGUgPSAxO1xuICAgIH1cbiAgICAvLyBtZXNzYWdlOiBkbyBub3QgaGF2ZSBhbGwgZGlzcGxheWVkIHRleHQgYXZhaWxhYmxlIHNvIG9ubHkgcGFzc2luZyBwbGFjZWhvbGRlci5cbiAgICB0aGlzLl9leGl0KGV4aXRDb2RlLCAnY29tbWFuZGVyLmhlbHAnLCAnKG91dHB1dEhlbHApJyk7XG4gIH1cblxuICAvKipcbiAgICogLy8gRG8gYSBsaXR0bGUgdHlwaW5nIHRvIGNvb3JkaW5hdGUgZW1pdCBhbmQgbGlzdGVuZXIgZm9yIHRoZSBoZWxwIHRleHQgZXZlbnRzLlxuICAgKiBAdHlwZWRlZiBIZWxwVGV4dEV2ZW50Q29udGV4dFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGVycm9yXG4gICAqIEBwcm9wZXJ0eSB7Q29tbWFuZH0gY29tbWFuZFxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSB3cml0ZVxuICAgKi9cblxuICAvKipcbiAgICogQWRkIGFkZGl0aW9uYWwgdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgYnVpbHQtaW4gaGVscC5cbiAgICpcbiAgICogUG9zaXRpb24gaXMgJ2JlZm9yZScgb3IgJ2FmdGVyJyB0byBhZmZlY3QganVzdCB0aGlzIGNvbW1hbmQsXG4gICAqIGFuZCAnYmVmb3JlQWxsJyBvciAnYWZ0ZXJBbGwnIHRvIGFmZmVjdCB0aGlzIGNvbW1hbmQgYW5kIGFsbCBpdHMgc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvbiAtIGJlZm9yZSBvciBhZnRlciBidWlsdC1pbiBoZWxwXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IEZ1bmN0aW9uKX0gdGV4dCAtIHN0cmluZyB0byBhZGQsIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhZGRIZWxwVGV4dChwb3NpdGlvbiwgdGV4dCkge1xuICAgIGNvbnN0IGFsbG93ZWRWYWx1ZXMgPSBbJ2JlZm9yZUFsbCcsICdiZWZvcmUnLCAnYWZ0ZXInLCAnYWZ0ZXJBbGwnXTtcbiAgICBpZiAoIWFsbG93ZWRWYWx1ZXMuaW5jbHVkZXMocG9zaXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIHBvc2l0aW9uIHRvIGFkZEhlbHBUZXh0LlxuRXhwZWN0aW5nIG9uZSBvZiAnJHthbGxvd2VkVmFsdWVzLmpvaW4oXCInLCAnXCIpfSdgKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWxwRXZlbnQgPSBgJHtwb3NpdGlvbn1IZWxwYDtcbiAgICB0aGlzLm9uKGhlbHBFdmVudCwgKC8qKiBAdHlwZSB7SGVscFRleHRFdmVudENvbnRleHR9ICovIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCBoZWxwU3RyO1xuICAgICAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGhlbHBTdHIgPSB0ZXh0KHsgZXJyb3I6IGNvbnRleHQuZXJyb3IsIGNvbW1hbmQ6IGNvbnRleHQuY29tbWFuZCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbHBTdHIgPSB0ZXh0O1xuICAgICAgfVxuICAgICAgLy8gSWdub3JlIGZhbHN5IHZhbHVlIHdoZW4gbm90aGluZyB0byBvdXRwdXQuXG4gICAgICBpZiAoaGVscFN0cikge1xuICAgICAgICBjb250ZXh0LndyaXRlKGAke2hlbHBTdHJ9XFxuYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gaWYgaGVscCBmbGFncyBzcGVjaWZpZWRcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYXJncyAtIGFycmF5IG9mIG9wdGlvbnMgdG8gc2VhcmNoIGZvciBoZWxwIGZsYWdzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQoYXJncykge1xuICAgIGNvbnN0IGhlbHBPcHRpb24gPSB0aGlzLl9nZXRIZWxwT3B0aW9uKCk7XG4gICAgY29uc3QgaGVscFJlcXVlc3RlZCA9IGhlbHBPcHRpb24gJiYgYXJncy5maW5kKChhcmcpID0+IGhlbHBPcHRpb24uaXMoYXJnKSk7XG4gICAgaWYgKGhlbHBSZXF1ZXN0ZWQpIHtcbiAgICAgIHRoaXMub3V0cHV0SGVscCgpO1xuICAgICAgLy8gKERvIG5vdCBoYXZlIGFsbCBkaXNwbGF5ZWQgdGV4dCBhdmFpbGFibGUgc28gb25seSBwYXNzaW5nIHBsYWNlaG9sZGVyLilcbiAgICAgIHRoaXMuX2V4aXQoMCwgJ2NvbW1hbmRlci5oZWxwRGlzcGxheWVkJywgJyhvdXRwdXRIZWxwKScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNjYW4gYXJndW1lbnRzIGFuZCBpbmNyZW1lbnQgcG9ydCBudW1iZXIgZm9yIGluc3BlY3QgY2FsbHMgKHRvIGF2b2lkIGNvbmZsaWN0cyB3aGVuIHNwYXduaW5nIG5ldyBjb21tYW5kKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzIC0gYXJyYXkgb2YgYXJndW1lbnRzIGZyb20gbm9kZS5leGVjQXJndlxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChhcmdzKSB7XG4gIC8vIFRlc3RpbmcgZm9yIHRoZXNlIG9wdGlvbnM6XG4gIC8vICAtLWluc3BlY3RbPVtob3N0Ol1wb3J0XVxuICAvLyAgLS1pbnNwZWN0LWJya1s9W2hvc3Q6XXBvcnRdXG4gIC8vICAtLWluc3BlY3QtcG9ydD1baG9zdDpdcG9ydFxuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIGlmICghYXJnLnN0YXJ0c1dpdGgoJy0taW5zcGVjdCcpKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICBsZXQgZGVidWdPcHRpb247XG4gICAgbGV0IGRlYnVnSG9zdCA9ICcxMjcuMC4wLjEnO1xuICAgIGxldCBkZWJ1Z1BvcnQgPSAnOTIyOSc7XG4gICAgbGV0IG1hdGNoO1xuICAgIGlmICgobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmspPykkLykpICE9PSBudWxsKSB7XG4gICAgICAvLyBlLmcuIC0taW5zcGVjdFxuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrfC1wb3J0KT8pPShbXjpdKykkLykpICE9PSBudWxsXG4gICAgKSB7XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgICAgaWYgKC9eXFxkKyQvLnRlc3QobWF0Y2hbM10pKSB7XG4gICAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PTEyMzRcbiAgICAgICAgZGVidWdQb3J0ID0gbWF0Y2hbM107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlLmcuIC0taW5zcGVjdD1sb2NhbGhvc3RcbiAgICAgICAgZGVidWdIb3N0ID0gbWF0Y2hbM107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJya3wtcG9ydCk/KT0oW146XSspOihcXGQrKSQvKSkgIT09IG51bGxcbiAgICApIHtcbiAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PWxvY2FsaG9zdDoxMjM0XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgICAgZGVidWdIb3N0ID0gbWF0Y2hbM107XG4gICAgICBkZWJ1Z1BvcnQgPSBtYXRjaFs0XTtcbiAgICB9XG5cbiAgICBpZiAoZGVidWdPcHRpb24gJiYgZGVidWdQb3J0ICE9PSAnMCcpIHtcbiAgICAgIHJldHVybiBgJHtkZWJ1Z09wdGlvbn09JHtkZWJ1Z0hvc3R9OiR7cGFyc2VJbnQoZGVidWdQb3J0KSArIDF9YDtcbiAgICB9XG4gICAgcmV0dXJuIGFyZztcbiAgfSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWR9XG4gKiBAcGFja2FnZVxuICovXG5mdW5jdGlvbiB1c2VDb2xvcigpIHtcbiAgLy8gVGVzdCBmb3IgY29tbW9uIGNvbnZlbnRpb25zLlxuICAvLyBOQjogdGhlIG9ic2VydmVkIGJlaGF2aW91ciBpcyBpbiBjb21iaW5hdGlvbiB3aXRoIGhvdyBhdXRob3IgYWRkcyBjb2xvciEgRm9yIGV4YW1wbGU6XG4gIC8vICAgLSB3ZSBkbyBub3QgdGVzdCBOT0RFX0RJU0FCTEVfQ09MT1JTLCBidXQgdXRpbDpzdHlsZXRleHQgZG9lc1xuICAvLyAgIC0gd2UgZG8gdGVzdCBOT19DT0xPUiwgYnV0IENoYWxrIGRvZXMgbm90XG4gIC8vXG4gIC8vIFJlZmVyZW5jZXM6XG4gIC8vIGh0dHBzOi8vbm8tY29sb3Iub3JnXG4gIC8vIGh0dHBzOi8vYml4ZW5zZS5jb20vY2xpY29sb3JzL1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi8wYTAwMjE3YTVmNjdlZjRhMjIzODRjZmM4MGViNmRkOWE5MTdmZGMxL2xpYi9pbnRlcm5hbC90dHkuanMjTDEwOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3IvYmxvYi9jMjE0MzE0YTE0YmNiMTc0YjEyYjMwMTRiMmIwYThkZTM3NTAyOWFlL2luZGV4LmpzI0wzM1xuICAvLyAoaHR0cHM6Ly9mb3JjZS1jb2xvci5vcmcgcmVjZW50IHdlYiBwYWdlIGZyb20gMjAyMywgZG9lcyBub3QgbWF0Y2ggbWFqb3IgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbnMpXG5cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PX0NPTE9SIHx8XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09ICcwJyB8fFxuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiB8fCBwcm9jZXNzLmVudi5DTElDT0xPUl9GT1JDRSAhPT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiB0cnVlO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuZXhwb3J0cy51c2VDb2xvciA9IHVzZUNvbG9yOyAvLyBleHBvcnRpbmcgZm9yIHRlc3RzXG4iLCAiY29uc3QgeyBBcmd1bWVudCB9ID0gcmVxdWlyZSgnLi9saWIvYXJndW1lbnQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZCB9ID0gcmVxdWlyZSgnLi9saWIvY29tbWFuZC5qcycpO1xuY29uc3QgeyBDb21tYW5kZXJFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vbGliL2Vycm9yLmpzJyk7XG5jb25zdCB7IEhlbHAgfSA9IHJlcXVpcmUoJy4vbGliL2hlbHAuanMnKTtcbmNvbnN0IHsgT3B0aW9uIH0gPSByZXF1aXJlKCcuL2xpYi9vcHRpb24uanMnKTtcblxuZXhwb3J0cy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuZXhwb3J0cy5jcmVhdGVDb21tYW5kID0gKG5hbWUpID0+IG5ldyBDb21tYW5kKG5hbWUpO1xuZXhwb3J0cy5jcmVhdGVPcHRpb24gPSAoZmxhZ3MsIGRlc2NyaXB0aW9uKSA9PiBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG5leHBvcnRzLmNyZWF0ZUFyZ3VtZW50ID0gKG5hbWUsIGRlc2NyaXB0aW9uKSA9PiBuZXcgQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuXG4vKipcbiAqIEV4cG9zZSBjbGFzc2VzXG4gKi9cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcbmV4cG9ydHMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0cy5Bcmd1bWVudCA9IEFyZ3VtZW50O1xuZXhwb3J0cy5IZWxwID0gSGVscDtcblxuZXhwb3J0cy5Db21tYW5kZXJFcnJvciA9IENvbW1hbmRlckVycm9yO1xuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuZXhwb3J0cy5JbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yOyAvLyBEZXByZWNhdGVkXG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbmV0ID0gcmVxdWlyZSgnbmV0Jyk7XG52YXIgdGxzID0gcmVxdWlyZSgndGxzJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgZXZlbnRzID0gcmVxdWlyZSgnZXZlbnRzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuXG5leHBvcnRzLmh0dHBPdmVySHR0cCA9IGh0dHBPdmVySHR0cDtcbmV4cG9ydHMuaHR0cHNPdmVySHR0cCA9IGh0dHBzT3Zlckh0dHA7XG5leHBvcnRzLmh0dHBPdmVySHR0cHMgPSBodHRwT3Zlckh0dHBzO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwcyA9IGh0dHBzT3Zlckh0dHBzO1xuXG5cbmZ1bmN0aW9uIGh0dHBPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHAucmVxdWVzdDtcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHBzKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdDtcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0O1xuICBhZ2VudC5kZWZhdWx0UG9ydCA9IDQ0MztcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5cbmZ1bmN0aW9uIFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBzZWxmLnByb3h5T3B0aW9ucyA9IHNlbGYub3B0aW9ucy5wcm94eSB8fCB7fTtcbiAgc2VsZi5tYXhTb2NrZXRzID0gc2VsZi5vcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5BZ2VudC5kZWZhdWx0TWF4U29ja2V0cztcbiAgc2VsZi5yZXF1ZXN0cyA9IFtdO1xuICBzZWxmLnNvY2tldHMgPSBbXTtcblxuICBzZWxmLm9uKCdmcmVlJywgZnVuY3Rpb24gb25GcmVlKHNvY2tldCwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc2VsZi5yZXF1ZXN0cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgdmFyIHBlbmRpbmcgPSBzZWxmLnJlcXVlc3RzW2ldO1xuICAgICAgaWYgKHBlbmRpbmcuaG9zdCA9PT0gb3B0aW9ucy5ob3N0ICYmIHBlbmRpbmcucG9ydCA9PT0gb3B0aW9ucy5wb3J0KSB7XG4gICAgICAgIC8vIERldGVjdCB0aGUgcmVxdWVzdCB0byBjb25uZWN0IHNhbWUgb3JpZ2luIHNlcnZlcixcbiAgICAgICAgLy8gcmV1c2UgdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgIHNlbGYucmVxdWVzdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gIH0pO1xufVxudXRpbC5pbmhlcml0cyhUdW5uZWxpbmdBZ2VudCwgZXZlbnRzLkV2ZW50RW1pdHRlcik7XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5hZGRSZXF1ZXN0ID0gZnVuY3Rpb24gYWRkUmVxdWVzdChyZXEsIGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBvcHRpb25zID0gbWVyZ2VPcHRpb25zKHtyZXF1ZXN0OiByZXF9LCBzZWxmLm9wdGlvbnMsIHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpKTtcblxuICBpZiAoc2VsZi5zb2NrZXRzLmxlbmd0aCA+PSB0aGlzLm1heFNvY2tldHMpIHtcbiAgICAvLyBXZSBhcmUgb3ZlciBsaW1pdCBzbyB3ZSdsbCBhZGQgaXQgdG8gdGhlIHF1ZXVlLlxuICAgIHNlbGYucmVxdWVzdHMucHVzaChvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiB3ZSBhcmUgdW5kZXIgbWF4U29ja2V0cyBjcmVhdGUgYSBuZXcgb25lLlxuICBzZWxmLmNyZWF0ZVNvY2tldChvcHRpb25zLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICBzb2NrZXQub24oJ2ZyZWUnLCBvbkZyZWUpO1xuICAgIHNvY2tldC5vbignY2xvc2UnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIHNvY2tldC5vbignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIHJlcS5vblNvY2tldChzb2NrZXQpO1xuXG4gICAgZnVuY3Rpb24gb25GcmVlKCkge1xuICAgICAgc2VsZi5lbWl0KCdmcmVlJywgc29ja2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkNsb3NlT3JSZW1vdmUoZXJyKSB7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChzb2NrZXQpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdmcmVlJywgb25GcmVlKTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5jcmVhdGVTb2NrZXQgPSBmdW5jdGlvbiBjcmVhdGVTb2NrZXQob3B0aW9ucywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcGxhY2Vob2xkZXIgPSB7fTtcbiAgc2VsZi5zb2NrZXRzLnB1c2gocGxhY2Vob2xkZXIpO1xuXG4gIHZhciBjb25uZWN0T3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7fSwgc2VsZi5wcm94eU9wdGlvbnMsIHtcbiAgICBtZXRob2Q6ICdDT05ORUNUJyxcbiAgICBwYXRoOiBvcHRpb25zLmhvc3QgKyAnOicgKyBvcHRpb25zLnBvcnQsXG4gICAgYWdlbnQ6IGZhbHNlLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIGhvc3Q6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydFxuICAgIH1cbiAgfSk7XG4gIGlmIChvcHRpb25zLmxvY2FsQWRkcmVzcykge1xuICAgIGNvbm5lY3RPcHRpb25zLmxvY2FsQWRkcmVzcyA9IG9wdGlvbnMubG9jYWxBZGRyZXNzO1xuICB9XG4gIGlmIChjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpIHtcbiAgICBjb25uZWN0T3B0aW9ucy5oZWFkZXJzID0gY29ubmVjdE9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICBjb25uZWN0T3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArXG4gICAgICAgIG5ldyBCdWZmZXIoY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cblxuICBkZWJ1ZygnbWFraW5nIENPTk5FQ1QgcmVxdWVzdCcpO1xuICB2YXIgY29ubmVjdFJlcSA9IHNlbGYucmVxdWVzdChjb25uZWN0T3B0aW9ucyk7XG4gIGNvbm5lY3RSZXEudXNlQ2h1bmtlZEVuY29kaW5nQnlEZWZhdWx0ID0gZmFsc2U7IC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgncmVzcG9uc2UnLCBvblJlc3BvbnNlKTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCd1cGdyYWRlJywgb25VcGdyYWRlKTsgICAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpOyAgIC8vIGZvciB2MC43IG9yIGxhdGVyXG4gIGNvbm5lY3RSZXEub25jZSgnZXJyb3InLCBvbkVycm9yKTtcbiAgY29ubmVjdFJlcS5lbmQoKTtcblxuICBmdW5jdGlvbiBvblJlc3BvbnNlKHJlcykge1xuICAgIC8vIFZlcnkgaGFja3kuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGh0dHAtcGFyc2VyIGxlYWtzLlxuICAgIHJlcy51cGdyYWRlID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVXBncmFkZShyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIC8vIEhhY2t5LlxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Db25uZWN0KHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgY29ubmVjdFJlcS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBzdGF0dXNDb2RlPSVkJyxcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUpO1xuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAnc3RhdHVzQ29kZT0nICsgcmVzLnN0YXR1c0NvZGUpO1xuICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGhlYWQubGVuZ3RoID4gMCkge1xuICAgICAgZGVidWcoJ2dvdCBpbGxlZ2FsIHJlc3BvbnNlIGJvZHkgZnJvbSBwcm94eScpO1xuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWJ1ZygndHVubmVsaW5nIGNvbm5lY3Rpb24gaGFzIGVzdGFibGlzaGVkJyk7XG4gICAgc2VsZi5zb2NrZXRzW3NlbGYuc29ja2V0cy5pbmRleE9mKHBsYWNlaG9sZGVyKV0gPSBzb2NrZXQ7XG4gICAgcmV0dXJuIGNiKHNvY2tldCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVycm9yKGNhdXNlKSB7XG4gICAgY29ubmVjdFJlcS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgY2F1c2U9JXNcXG4nLFxuICAgICAgICAgIGNhdXNlLm1lc3NhZ2UsIGNhdXNlLnN0YWNrKTtcbiAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdXNlPScgKyBjYXVzZS5tZXNzYWdlKTtcbiAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gIH1cbn07XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5yZW1vdmVTb2NrZXQgPSBmdW5jdGlvbiByZW1vdmVTb2NrZXQoc29ja2V0KSB7XG4gIHZhciBwb3MgPSB0aGlzLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXG4gIGlmIChwb3MgPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuc29ja2V0cy5zcGxpY2UocG9zLCAxKTtcblxuICB2YXIgcGVuZGluZyA9IHRoaXMucmVxdWVzdHMuc2hpZnQoKTtcbiAgaWYgKHBlbmRpbmcpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgcmVxdWVzdHMgYW5kIGEgc29ja2V0IGdldHMgY2xvc2VkIGEgbmV3IG9uZVxuICAgIC8vIG5lZWRzIHRvIGJlIGNyZWF0ZWQgdG8gdGFrZSBvdmVyIGluIHRoZSBwb29sIGZvciB0aGUgb25lIHRoYXQgY2xvc2VkLlxuICAgIHRoaXMuY3JlYXRlU29ja2V0KHBlbmRpbmcsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlY3VyZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIFR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5jcmVhdGVTb2NrZXQuY2FsbChzZWxmLCBvcHRpb25zLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICB2YXIgaG9zdEhlYWRlciA9IG9wdGlvbnMucmVxdWVzdC5nZXRIZWFkZXIoJ2hvc3QnKTtcbiAgICB2YXIgdGxzT3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7fSwgc2VsZi5vcHRpb25zLCB7XG4gICAgICBzb2NrZXQ6IHNvY2tldCxcbiAgICAgIHNlcnZlcm5hbWU6IGhvc3RIZWFkZXIgPyBob3N0SGVhZGVyLnJlcGxhY2UoLzouKiQvLCAnJykgOiBvcHRpb25zLmhvc3RcbiAgICB9KTtcblxuICAgIC8vIDAgaXMgZHVtbXkgcG9ydCBmb3IgdjAuNlxuICAgIHZhciBzZWN1cmVTb2NrZXQgPSB0bHMuY29ubmVjdCgwLCB0bHNPcHRpb25zKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KV0gPSBzZWN1cmVTb2NrZXQ7XG4gICAgY2Ioc2VjdXJlU29ja2V0KTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7IC8vIHNpbmNlIHYwLjEwXG4gICAgcmV0dXJuIHtcbiAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICBwb3J0OiBwb3J0LFxuICAgICAgbG9jYWxBZGRyZXNzOiBsb2NhbEFkZHJlc3NcbiAgICB9O1xuICB9XG4gIHJldHVybiBob3N0OyAvLyBmb3IgdjAuMTEgb3IgbGF0ZXJcbn1cblxuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIG92ZXJyaWRlcyA9IGFyZ3VtZW50c1tpXTtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3ZlcnJpZGVzKTtcbiAgICAgIGZvciAodmFyIGogPSAwLCBrZXlMZW4gPSBrZXlzLmxlbmd0aDsgaiA8IGtleUxlbjsgKytqKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1tqXTtcbiAgICAgICAgaWYgKG92ZXJyaWRlc1trXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGFyZ2V0W2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxudmFyIGRlYnVnO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfREVCVUcgJiYgL1xcYnR1bm5lbFxcYi8udGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKSkge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBhcmdzWzBdID0gJ1RVTk5FTDogJyArIGFyZ3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MudW5zaGlmdCgnVFVOTkVMOicpO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICB9XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWc7IC8vIGZvciB0ZXN0XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi90dW5uZWwnKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHtcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtEZXN0cm95OiBTeW1ib2woJ2Rlc3Ryb3knKSxcbiAga0Rpc3BhdGNoOiBTeW1ib2woJ2Rpc3BhdGNoJyksXG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtXcml0aW5nOiBTeW1ib2woJ3dyaXRpbmcnKSxcbiAga1Jlc3VtaW5nOiBTeW1ib2woJ3Jlc3VtaW5nJyksXG4gIGtRdWV1ZTogU3ltYm9sKCdxdWV1ZScpLFxuICBrQ29ubmVjdDogU3ltYm9sKCdjb25uZWN0JyksXG4gIGtDb25uZWN0aW5nOiBTeW1ib2woJ2Nvbm5lY3RpbmcnKSxcbiAga0hlYWRlcnNMaXN0OiBTeW1ib2woJ2hlYWRlcnMgbGlzdCcpLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQ6IFN5bWJvbCgnZGVmYXVsdCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQ6IFN5bWJvbCgnbWF4IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZDogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQgdGhyZXNob2xkJyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWU6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmU6IFN5bWJvbCgna2VlcCBhbGl2ZScpLFxuICBrSGVhZGVyc1RpbWVvdXQ6IFN5bWJvbCgnaGVhZGVycyB0aW1lb3V0JyksXG4gIGtCb2R5VGltZW91dDogU3ltYm9sKCdib2R5IHRpbWVvdXQnKSxcbiAga1NlcnZlck5hbWU6IFN5bWJvbCgnc2VydmVyIG5hbWUnKSxcbiAga0xvY2FsQWRkcmVzczogU3ltYm9sKCdsb2NhbCBhZGRyZXNzJyksXG4gIGtIb3N0OiBTeW1ib2woJ2hvc3QnKSxcbiAga05vUmVmOiBTeW1ib2woJ25vIHJlZicpLFxuICBrQm9keVVzZWQ6IFN5bWJvbCgndXNlZCcpLFxuICBrUnVubmluZzogU3ltYm9sKCdydW5uaW5nJyksXG4gIGtCbG9ja2luZzogU3ltYm9sKCdibG9ja2luZycpLFxuICBrUGVuZGluZzogU3ltYm9sKCdwZW5kaW5nJyksXG4gIGtTaXplOiBTeW1ib2woJ3NpemUnKSxcbiAga0J1c3k6IFN5bWJvbCgnYnVzeScpLFxuICBrUXVldWVkOiBTeW1ib2woJ3F1ZXVlZCcpLFxuICBrRnJlZTogU3ltYm9sKCdmcmVlJyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJyksXG4gIGtDbG9zZWQ6IFN5bWJvbCgnY2xvc2VkJyksXG4gIGtOZWVkRHJhaW46IFN5bWJvbCgnbmVlZCBkcmFpbicpLFxuICBrUmVzZXQ6IFN5bWJvbCgncmVzZXQnKSxcbiAga0Rlc3Ryb3llZDogU3ltYm9sLmZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKSxcbiAga01heEhlYWRlcnNTaXplOiBTeW1ib2woJ21heCBoZWFkZXJzIHNpemUnKSxcbiAga1J1bm5pbmdJZHg6IFN5bWJvbCgncnVubmluZyBpbmRleCcpLFxuICBrUGVuZGluZ0lkeDogU3ltYm9sKCdwZW5kaW5nIGluZGV4JyksXG4gIGtFcnJvcjogU3ltYm9sKCdlcnJvcicpLFxuICBrQ2xpZW50czogU3ltYm9sKCdjbGllbnRzJyksXG4gIGtDbGllbnQ6IFN5bWJvbCgnY2xpZW50JyksXG4gIGtQYXJzZXI6IFN5bWJvbCgncGFyc2VyJyksXG4gIGtPbkRlc3Ryb3llZDogU3ltYm9sKCdkZXN0cm95IGNhbGxiYWNrcycpLFxuICBrUGlwZWxpbmluZzogU3ltYm9sKCdwaXBlbGluaW5nJyksXG4gIGtTb2NrZXQ6IFN5bWJvbCgnc29ja2V0JyksXG4gIGtIb3N0SGVhZGVyOiBTeW1ib2woJ2hvc3QgaGVhZGVyJyksXG4gIGtDb25uZWN0b3I6IFN5bWJvbCgnY29ubmVjdG9yJyksXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoOiBTeW1ib2woJ3N0cmljdCBjb250ZW50IGxlbmd0aCcpLFxuICBrTWF4UmVkaXJlY3Rpb25zOiBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpLFxuICBrTWF4UmVxdWVzdHM6IFN5bWJvbCgnbWF4UmVxdWVzdHNQZXJDbGllbnQnKSxcbiAga1Byb3h5OiBTeW1ib2woJ3Byb3h5IGFnZW50IG9wdGlvbnMnKSxcbiAga0NvdW50ZXI6IFN5bWJvbCgnc29ja2V0IHJlcXVlc3QgY291bnRlcicpLFxuICBrSW50ZXJjZXB0b3JzOiBTeW1ib2woJ2Rpc3BhdGNoIGludGVyY2VwdG9ycycpLFxuICBrTWF4UmVzcG9uc2VTaXplOiBTeW1ib2woJ21heCByZXNwb25zZSBzaXplJyksXG4gIGtIVFRQMlNlc3Npb246IFN5bWJvbCgnaHR0cDJTZXNzaW9uJyksXG4gIGtIVFRQMlNlc3Npb25TdGF0ZTogU3ltYm9sKCdodHRwMlNlc3Npb24gc3RhdGUnKSxcbiAga0hUVFAyQnVpbGRSZXF1ZXN0OiBTeW1ib2woJ2h0dHAyIGJ1aWxkIHJlcXVlc3QnKSxcbiAga0hUVFAxQnVpbGRSZXF1ZXN0OiBTeW1ib2woJ2h0dHAxIGJ1aWxkIHJlcXVlc3QnKSxcbiAga0hUVFAyQ29weUhlYWRlcnM6IFN5bWJvbCgnaHR0cDIgY29weSBoZWFkZXJzJyksXG4gIGtIVFRQQ29ublZlcnNpb246IFN5bWJvbCgnaHR0cCBjb25uZWN0aW9uIHZlcnNpb24nKSxcbiAga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeTogU3ltYm9sKCdyZXRyeSBhZ2VudCBkZWZhdWx0IHJldHJ5JyksXG4gIGtDb25zdHJ1Y3Q6IFN5bWJvbCgnY29uc3RydWN0YWJsZScpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNsYXNzIFVuZGljaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1VuZGljaUVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSJ1xuICB9XG59XG5cbmNsYXNzIENvbm5lY3RUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDb25uZWN0VGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDb25uZWN0VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0Nvbm5lY3QgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgSGVhZGVyc1RpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEhlYWRlcnNUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSGVhZGVycyBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzT3ZlcmZsb3dFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEhlYWRlcnNPdmVyZmxvd0Vycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzT3ZlcmZsb3dFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIE92ZXJmbG93IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1cnXG4gIH1cbn1cblxuY2xhc3MgQm9keVRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEJvZHlUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0JvZHlUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQm9keSBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JPRFlfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVN0YXR1c0NvZGVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBTdGF0dXMgQ29kZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERSdcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRBcmd1bWVudEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkQXJndW1lbnRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIEFyZ3VtZW50IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lOVkFMSURfQVJHJ1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZFJldHVyblZhbHVlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRSZXR1cm5WYWx1ZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgUmV0dXJuIFZhbHVlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RBYm9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0QWJvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYWJvcnRlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9BQk9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEluZm9ybWF0aW9uYWxFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEluZm9ybWF0aW9uYWxFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW5mb3JtYXRpb25hbEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgaW5mb3JtYXRpb24nXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5GTydcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGJvZHkgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVFfQ09OVEVOVF9MRU5HVEhfTUlTTUFUQ0gnXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnREZXN0cm95ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudERlc3Ryb3llZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnREZXN0cm95ZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGRlc3Ryb3llZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9ERVNUUk9ZRUQnXG4gIH1cbn1cblxuY2xhc3MgQ2xpZW50Q2xvc2VkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDbGllbnRDbG9zZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50Q2xvc2VkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBjbG9zZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQ0xPU0VEJ1xuICB9XG59XG5cbmNsYXNzIFNvY2tldEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc29ja2V0KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBTb2NrZXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnU29ja2V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU29ja2V0IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1NPQ0tFVCdcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICB9XG59XG5cbmNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ05vdFN1cHBvcnRlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vdCBzdXBwb3J0ZWQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfTk9UX1NVUFBPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE5vdFN1cHBvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdNaXNzaW5nVXBzdHJlYW1FcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdObyB1cHN0cmVhbSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgQmFsYW5jZWRQb29sJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JQTF9NSVNTSU5HX1VQU1RSRUFNJ1xuICB9XG59XG5cbmNsYXNzIEhUVFBQYXJzZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIGRhdGEpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEhUVFBQYXJzZXJFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSFRUUFBhcnNlckVycm9yJ1xuICAgIHRoaXMuY29kZSA9IGNvZGUgPyBgSFBFXyR7Y29kZX1gIDogdW5kZWZpbmVkXG4gICAgdGhpcy5kYXRhID0gZGF0YSA/IGRhdGEudG9TdHJpbmcoKSA6IHVuZGVmaW5lZFxuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGNvbnRlbnQgZXhjZWVkZWQgbWF4IHNpemUnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0VYQ0VFREVEX01BWF9TSVpFJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RSZXRyeUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RSZXRyeUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0UmV0cnlFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IHJldHJ5IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9SRVRSWSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSFRUUFBhcnNlckVycm9yLFxuICBVbmRpY2lFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQ29ubmVjdFRpbWVvdXRFcnJvcixcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIFJlcXVlc3RSZXRyeUVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsga0Rlc3Ryb3llZCwga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBJbmNvbWluZ01lc3NhZ2UgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7IEJsb2IgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJylcbmNvbnN0IHsgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuY29uc3QgW25vZGVNYWpvciwgbm9kZU1pbm9yXSA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh2ID0+IE51bWJlcih2KSlcblxuZnVuY3Rpb24gbm9wICgpIHt9XG5cbmZ1bmN0aW9uIGlzU3RyZWFtIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLnBpcGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbm9kZS1mZXRjaC9mZXRjaC1ibG9iL2Jsb2IvOGFiNTg3ZDM0MDgwZGU5NDE0MGI1NGYwNzE2ODQ1MWU3ZDBiNjU1ZS9pbmRleC5qcyNMMjI5LUwyNDEgKE1JVCBMaWNlbnNlKVxuZnVuY3Rpb24gaXNCbG9iTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoQmxvYiAmJiBvYmplY3QgaW5zdGFuY2VvZiBCbG9iKSB8fCAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10pXG4gIClcbn1cblxuZnVuY3Rpb24gYnVpbGRVUkwgKHVybCwgcXVlcnlQYXJhbXMpIHtcbiAgaWYgKHVybC5pbmNsdWRlcygnPycpIHx8IHVybC5pbmNsdWRlcygnIycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdRdWVyeSBwYXJhbXMgY2Fubm90IGJlIHBhc3NlZCB3aGVuIHVybCBhbHJlYWR5IGNvbnRhaW5zIFwiP1wiIG9yIFwiI1wiLicpXG4gIH1cblxuICBjb25zdCBzdHJpbmdpZmllZCA9IHN0cmluZ2lmeShxdWVyeVBhcmFtcylcblxuICBpZiAoc3RyaW5naWZpZWQpIHtcbiAgICB1cmwgKz0gJz8nICsgc3RyaW5naWZpZWRcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VVUkwgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAgIGlmICghL15odHRwcz86Ly50ZXN0KHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICAgIH1cblxuICAgIHJldHVybiB1cmxcbiAgfVxuXG4gIGlmICghdXJsIHx8IHR5cGVvZiB1cmwgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogVGhlIFVSTCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLW51bGwgb2JqZWN0LicpXG4gIH1cblxuICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gIH1cblxuICBpZiAoISh1cmwgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgaWYgKHVybC5wb3J0ICE9IG51bGwgJiYgdXJsLnBvcnQgIT09ICcnICYmICFOdW1iZXIuaXNGaW5pdGUocGFyc2VJbnQodXJsLnBvcnQpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogcG9ydCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRoICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRoOiB0aGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGhuYW1lOiB0aGUgcGF0aG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwuaG9zdG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLmhvc3RuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLm9yaWdpbiAhPSBudWxsICYmIHR5cGVvZiB1cmwub3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBvcmlnaW46IHRoZSBvcmlnaW4gbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAhPSBudWxsXG4gICAgICA/IHVybC5wb3J0XG4gICAgICA6ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApXG4gICAgbGV0IG9yaWdpbiA9IHVybC5vcmlnaW4gIT0gbnVsbFxuICAgICAgPyB1cmwub3JpZ2luXG4gICAgICA6IGAke3VybC5wcm90b2NvbH0vLyR7dXJsLmhvc3RuYW1lfToke3BvcnR9YFxuICAgIGxldCBwYXRoID0gdXJsLnBhdGggIT0gbnVsbFxuICAgICAgPyB1cmwucGF0aFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWBcblxuICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoJy8nKSkge1xuICAgICAgb3JpZ2luID0gb3JpZ2luLnN1YnN0cmluZygwLCBvcmlnaW4ubGVuZ3RoIC0gMSlcbiAgICB9XG5cbiAgICBpZiAocGF0aCAmJiAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgfVxuICAgIC8vIG5ldyBVUkwocGF0aCwgb3JpZ2luKSBpcyB1bnNhZmUgd2hlbiBgcGF0aGAgY29udGFpbnMgYW4gYWJzb2x1dGUgVVJMXG4gICAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML1VSTDpcbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByZWxhdGl2ZSBVUkwsIHNlY29uZCBwYXJhbSBpcyByZXF1aXJlZCwgYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBVUkwuXG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGFuIGFic29sdXRlIFVSTCwgYSBnaXZlbiBzZWNvbmQgcGFyYW0gd2lsbCBiZSBpZ25vcmVkLlxuICAgIHVybCA9IG5ldyBVUkwob3JpZ2luICsgcGF0aClcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4gKHVybCkge1xuICB1cmwgPSBwYXJzZVVSTCh1cmwpXG5cbiAgaWYgKHVybC5wYXRobmFtZSAhPT0gJy8nIHx8IHVybC5zZWFyY2ggfHwgdXJsLmhhc2gpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUgKGhvc3QpIHtcbiAgaWYgKGhvc3RbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMSwgaWR4KVxuICB9XG5cbiAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCc6JylcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBob3N0XG5cbiAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDAsIGlkeClcbn1cblxuLy8gSVAgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgc2VydmVyIG5hbWVzIHBlciBSRkM2MDY2XG4vLyA+IEN1cnJlbnRseSwgdGhlIG9ubHkgc2VydmVyIG5hbWVzIHN1cHBvcnRlZCBhcmUgRE5TIGhvc3RuYW1lc1xuZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSAoaG9zdCkge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBob3N0LCAnc3RyaW5nJylcblxuICBjb25zdCBzZXJ2ZXJuYW1lID0gZ2V0SG9zdG5hbWUoaG9zdClcbiAgaWYgKG5ldC5pc0lQKHNlcnZlcm5hbWUpKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gc2VydmVybmFtZVxufVxuXG5mdW5jdGlvbiBkZWVwQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpXG59XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgKHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykpXG59XG5cbmZ1bmN0aW9uIGJvZHlMZW5ndGggKGJvZHkpIHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUub2JqZWN0TW9kZSA9PT0gZmFsc2UgJiYgc3RhdGUuZW5kZWQgPT09IHRydWUgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXRlLmxlbmd0aClcbiAgICAgID8gc3RhdGUubGVuZ3RoXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZSAhPSBudWxsID8gYm9keS5zaXplIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQgKHN0cmVhbSkge1xuICByZXR1cm4gIXN0cmVhbSB8fCAhIShzdHJlYW0uZGVzdHJveWVkIHx8IHN0cmVhbVtrRGVzdHJveWVkXSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZUFib3J0ZWQgKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgcmV0dXJuIGlzRGVzdHJveWVkKHN0cmVhbSkgJiYgc3RhdGUgJiYgIXN0YXRlLmVuZEVtaXR0ZWRcbn1cblxuZnVuY3Rpb24gZGVzdHJveSAoc3RyZWFtLCBlcnIpIHtcbiAgaWYgKHN0cmVhbSA9PSBudWxsIHx8ICFpc1N0cmVhbShzdHJlYW0pIHx8IGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0cmVhbSkuY29uc3RydWN0b3IgPT09IEluY29taW5nTWVzc2FnZSkge1xuICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zODUwNS9maWxlc1xuICAgICAgc3RyZWFtLnNvY2tldCA9IG51bGxcbiAgICB9XG5cbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoc3RyZWFtLCBlcnIpID0+IHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycilcbiAgICB9LCBzdHJlYW0sIGVycilcbiAgfVxuXG4gIGlmIChzdHJlYW0uZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgc3RyZWFtW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5cbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX0VYUFIgPSAvdGltZW91dD0oXFxkKykvXG5mdW5jdGlvbiBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQgKHZhbCkge1xuICBjb25zdCBtID0gdmFsLnRvU3RyaW5nKCkubWF0Y2goS0VFUEFMSVZFX1RJTUVPVVRfRVhQUilcbiAgcmV0dXJuIG0gPyBwYXJzZUludChtWzFdLCAxMCkgKiAxMDAwIDogbnVsbFxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGhlYWRlciBuYW1lIGFuZCByZXR1cm5zIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGhlYWRlck5hbWVUb1N0cmluZyAodmFsdWUpIHtcbiAgcmV0dXJuIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3ZhbHVlXSB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyAoaGVhZGVycywgb2JqID0ge30pIHtcbiAgLy8gRm9yIEgyIHN1cHBvcnRcbiAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcnMpKSByZXR1cm4gaGVhZGVyc1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXG4gICAgbGV0IHZhbCA9IG9ialtrZXldXG5cbiAgICBpZiAoIXZhbCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVyc1tpICsgMV0pKSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0ubWFwKHggPT4geC50b1N0cmluZygndXRmOCcpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSBoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhbCA9IFt2YWxdXG4gICAgICAgIG9ialtrZXldID0gdmFsXG4gICAgICB9XG4gICAgICB2YWwucHVzaChoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoJ2NvbnRlbnQtbGVuZ3RoJyBpbiBvYmogJiYgJ2NvbnRlbnQtZGlzcG9zaXRpb24nIGluIG9iaikge1xuICAgIG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddID0gQnVmZmVyLmZyb20ob2JqWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiBwYXJzZVJhd0hlYWRlcnMgKGhlYWRlcnMpIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgbGV0IGhhc0NvbnRlbnRMZW5ndGggPSBmYWxzZVxuICBsZXQgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gLTFcblxuICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW24gKyAwXS50b1N0cmluZygpXG4gICAgY29uc3QgdmFsID0gaGVhZGVyc1tuICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIChrZXkgPT09ICdjb250ZW50LWxlbmd0aCcgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICByZXQucHVzaChrZXksIHZhbClcbiAgICAgIGhhc0NvbnRlbnRMZW5ndGggPSB0cnVlXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxOSAmJiAoa2V5ID09PSAnY29udGVudC1kaXNwb3NpdGlvbicgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJykpIHtcbiAgICAgIGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IHJldC5wdXNoKGtleSwgdmFsKSAtIDFcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ2NTI4XG4gIGlmIChoYXNDb250ZW50TGVuZ3RoICYmIGNvbnRlbnREaXNwb3NpdGlvbklkeCAhPT0gLTEpIHtcbiAgICByZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSA9IEJ1ZmZlci5mcm9tKHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKGJ1ZmZlcikge1xuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvcHVsbC8zMTlcbiAgcmV0dXJuIGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcilcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVIYW5kbGVyIChoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpIHtcbiAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Db25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29ubmVjdCBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25FcnJvciBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQm9keVNlbnQgIT09ICdmdW5jdGlvbicgJiYgaGFuZGxlci5vbkJvZHlTZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Cb2R5U2VudCBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHVwZ3JhZGUgfHwgbWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25VcGdyYWRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25VcGdyYWRlIG1ldGhvZCcpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkhlYWRlcnMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkhlYWRlcnMgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25EYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25EYXRhIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29tcGxldGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbXBsZXRlIG1ldGhvZCcpXG4gICAgfVxuICB9XG59XG5cbi8vIEEgYm9keSBpcyBkaXN0dXJiZWQgaWYgaXQgaGFzIGJlZW4gcmVhZCBmcm9tIGFuZCBpdCBjYW5ub3Rcbi8vIGJlIHJlLXVzZWQgd2l0aG91dCBsb3Npbmcgc3RhdGUgb3IgZGF0YS5cbmZ1bmN0aW9uIGlzRGlzdHVyYmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNEaXN0dXJiZWRcbiAgICAgID8gc3RyZWFtLmlzRGlzdHVyYmVkKGJvZHkpIHx8IGJvZHlba0JvZHlVc2VkXSAvLyBUT0RPIChmaXgpOiBXaHkgaXMgYm9keVtrQm9keVVzZWRdIG5lZWRlZD9cbiAgICAgIDogYm9keVtrQm9keVVzZWRdIHx8XG4gICAgICAgIGJvZHkucmVhZGFibGVEaWRSZWFkIHx8XG4gICAgICAgIChib2R5Ll9yZWFkYWJsZVN0YXRlICYmIGJvZHkuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQpIHx8XG4gICAgICAgIGlzUmVhZGFibGVBYm9ydGVkKGJvZHkpXG4gICkpXG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRXJyb3JlZFxuICAgICAgPyBzdHJlYW0uaXNFcnJvcmVkKGJvZHkpXG4gICAgICA6IC9zdGF0ZTogJ2Vycm9yZWQnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNSZWFkYWJsZVxuICAgICAgPyBzdHJlYW0uaXNSZWFkYWJsZShib2R5KVxuICAgICAgOiAvc3RhdGU6ICdyZWFkYWJsZScvLnRlc3Qobm9kZVV0aWwuaW5zcGVjdChib2R5KVxuICAgICAgKSkpXG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm8gKHNvY2tldCkge1xuICByZXR1cm4ge1xuICAgIGxvY2FsQWRkcmVzczogc29ja2V0LmxvY2FsQWRkcmVzcyxcbiAgICBsb2NhbFBvcnQ6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgcmVtb3RlQWRkcmVzczogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgcmVtb3RlUG9ydDogc29ja2V0LnJlbW90ZVBvcnQsXG4gICAgcmVtb3RlRmFtaWx5OiBzb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgIHRpbWVvdXQ6IHNvY2tldC50aW1lb3V0LFxuICAgIGJ5dGVzV3JpdHRlbjogc29ja2V0LmJ5dGVzV3JpdHRlbixcbiAgICBieXRlc1JlYWQ6IHNvY2tldC5ieXRlc1JlYWRcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnZlcnRJdGVyYWJsZVRvQnVmZmVyIChpdGVyYWJsZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQgQnVmZmVyLmlzQnVmZmVyKGNodW5rKSA/IGNodW5rIDogQnVmZmVyLmZyb20oY2h1bmspXG4gIH1cbn1cblxubGV0IFJlYWRhYmxlU3RyZWFtXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZyb20gKGl0ZXJhYmxlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgaWYgKFJlYWRhYmxlU3RyZWFtLmZyb20pIHtcbiAgICByZXR1cm4gUmVhZGFibGVTdHJlYW0uZnJvbShjb252ZXJ0SXRlcmFibGVUb0J1ZmZlcihpdGVyYWJsZSkpXG4gIH1cblxuICBsZXQgaXRlcmF0b3JcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSA/IHZhbHVlIDogQnVmZmVyLmZyb20odmFsdWUpXG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH1cbiAgICB9LFxuICAgIDBcbiAgKVxufVxuXG4vLyBUaGUgY2h1bmsgc2hvdWxkIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UgYW5kIGNvbnRhaW5zXG4vLyBhbGwgdGhlIHJlcXVpcmVkIG1ldGhvZHMuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJ1xuICApXG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzaWduYWwpIHtcbiAgaWYgKCFzaWduYWwpIHsgcmV0dXJuIH1cbiAgaWYgKHR5cGVvZiBzaWduYWwudGhyb3dJZkFib3J0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKVxuICB9IGVsc2Uge1xuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgLy8gRE9NRXhjZXB0aW9uIG5vdCBhdmFpbGFibGUgPCB2MTcuMC4wXG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnKVxuICAgICAgZXJyLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRBYm9ydExpc3RlbmVyIChzaWduYWwsIGxpc3RlbmVyKSB7XG4gIGlmICgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gc2lnbmFsKSB7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KVxuICAgIHJldHVybiAoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgfVxuICBzaWduYWwuYWRkTGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIHJldHVybiAoKSA9PiBzaWduYWwucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG59XG5cbmNvbnN0IGhhc1RvV2VsbEZvcm1lZCA9ICEhU3RyaW5nLnByb3RvdHlwZS50b1dlbGxGb3JtZWRcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKi9cbmZ1bmN0aW9uIHRvVVNWU3RyaW5nICh2YWwpIHtcbiAgaWYgKGhhc1RvV2VsbEZvcm1lZCkge1xuICAgIHJldHVybiBgJHt2YWx9YC50b1dlbGxGb3JtZWQoKVxuICB9IGVsc2UgaWYgKG5vZGVVdGlsLnRvVVNWU3RyaW5nKSB7XG4gICAgcmV0dXJuIG5vZGVVdGlsLnRvVVNWU3RyaW5nKHZhbClcbiAgfVxuXG4gIHJldHVybiBgJHt2YWx9YFxufVxuXG4vLyBQYXJzZWQgYWNjb3JkaW5nbHkgdG8gUkZDIDkxMTBcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmNvbnRlbnQtcmFuZ2VcbmZ1bmN0aW9uIHBhcnNlUmFuZ2VIZWFkZXIgKHJhbmdlKSB7XG4gIGlmIChyYW5nZSA9PSBudWxsIHx8IHJhbmdlID09PSAnJykgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogbnVsbCwgc2l6ZTogbnVsbCB9XG5cbiAgY29uc3QgbSA9IHJhbmdlID8gcmFuZ2UubWF0Y2goL15ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspPyQvKSA6IG51bGxcbiAgcmV0dXJuIG1cbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IHBhcnNlSW50KG1bMV0pLFxuICAgICAgICBlbmQ6IG1bMl0gPyBwYXJzZUludChtWzJdKSA6IG51bGwsXG4gICAgICAgIHNpemU6IG1bM10gPyBwYXJzZUludChtWzNdKSA6IG51bGxcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuY29uc3Qga0VudW1lcmFibGVQcm9wZXJ0eSA9IE9iamVjdC5jcmVhdGUobnVsbClcbmtFbnVtZXJhYmxlUHJvcGVydHkuZW51bWVyYWJsZSA9IHRydWVcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG5vcCxcbiAgaXNEaXN0dXJiZWQsXG4gIGlzRXJyb3JlZCxcbiAgaXNSZWFkYWJsZSxcbiAgdG9VU1ZTdHJpbmcsXG4gIGlzUmVhZGFibGVBYm9ydGVkLFxuICBpc0Jsb2JMaWtlLFxuICBwYXJzZU9yaWdpbixcbiAgcGFyc2VVUkwsXG4gIGdldFNlcnZlck5hbWUsXG4gIGlzU3RyZWFtLFxuICBpc0l0ZXJhYmxlLFxuICBpc0FzeW5jSXRlcmFibGUsXG4gIGlzRGVzdHJveWVkLFxuICBoZWFkZXJOYW1lVG9TdHJpbmcsXG4gIHBhcnNlUmF3SGVhZGVycyxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQsXG4gIGRlc3Ryb3ksXG4gIGJvZHlMZW5ndGgsXG4gIGRlZXBDbG9uZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0J1ZmZlcixcbiAgdmFsaWRhdGVIYW5kbGVyLFxuICBnZXRTb2NrZXRJbmZvLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgYnVpbGRVUkwsXG4gIHRocm93SWZBYm9ydGVkLFxuICBhZGRBYm9ydExpc3RlbmVyLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICBub2RlTWFqb3IsXG4gIG5vZGVNaW5vcixcbiAgbm9kZUhhc0F1dG9TZWxlY3RGYW1pbHk6IG5vZGVNYWpvciA+IDE4IHx8IChub2RlTWFqb3IgPT09IDE4ICYmIG5vZGVNaW5vciA+PSAxMyksXG4gIHNhZmVIVFRQTWV0aG9kczogWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbn1cbiIsICIndXNlIHN0cmljdCdcblxubGV0IGZhc3ROb3cgPSBEYXRlLm5vdygpXG5sZXQgZmFzdE5vd1RpbWVvdXRcblxuY29uc3QgZmFzdFRpbWVycyA9IFtdXG5cbmZ1bmN0aW9uIG9uVGltZW91dCAoKSB7XG4gIGZhc3ROb3cgPSBEYXRlLm5vdygpXG5cbiAgbGV0IGxlbiA9IGZhc3RUaW1lcnMubGVuZ3RoXG4gIGxldCBpZHggPSAwXG4gIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICBjb25zdCB0aW1lciA9IGZhc3RUaW1lcnNbaWR4XVxuXG4gICAgaWYgKHRpbWVyLnN0YXRlID09PSAwKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IGZhc3ROb3cgKyB0aW1lci5kZWxheVxuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhdGUgPiAwICYmIGZhc3ROb3cgPj0gdGltZXIuc3RhdGUpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTFcbiAgICAgIHRpbWVyLmNhbGxiYWNrKHRpbWVyLm9wYXF1ZSlcbiAgICB9XG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IC0xKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IC0yXG4gICAgICBpZiAoaWR4ICE9PSBsZW4gLSAxKSB7XG4gICAgICAgIGZhc3RUaW1lcnNbaWR4XSA9IGZhc3RUaW1lcnMucG9wKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhc3RUaW1lcnMucG9wKClcbiAgICAgIH1cbiAgICAgIGxlbiAtPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGlkeCArPSAxXG4gICAgfVxuICB9XG5cbiAgaWYgKGZhc3RUaW1lcnMubGVuZ3RoID4gMCkge1xuICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoVGltZW91dCAoKSB7XG4gIGlmIChmYXN0Tm93VGltZW91dCAmJiBmYXN0Tm93VGltZW91dC5yZWZyZXNoKSB7XG4gICAgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCgpXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJUaW1lb3V0KGZhc3ROb3dUaW1lb3V0KVxuICAgIGZhc3ROb3dUaW1lb3V0ID0gc2V0VGltZW91dChvblRpbWVvdXQsIDFlMylcbiAgICBpZiAoZmFzdE5vd1RpbWVvdXQudW5yZWYpIHtcbiAgICAgIGZhc3ROb3dUaW1lb3V0LnVucmVmKClcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgVGltZW91dCB7XG4gIGNvbnN0cnVjdG9yIChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuZGVsYXkgPSBkZWxheVxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlXG5cbiAgICAvLyAgLTIgbm90IGluIHRpbWVyIGxpc3RcbiAgICAvLyAgLTEgaW4gdGltZXIgbGlzdCBidXQgaW5hY3RpdmVcbiAgICAvLyAgIDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lXG4gICAgLy8gPiAwIGluIHRpbWVyIGxpc3Qgd2FpdGluZyBmb3IgdGltZSB0byBleHBpcmVcbiAgICB0aGlzLnN0YXRlID0gLTJcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICByZWZyZXNoICgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gLTIpIHtcbiAgICAgIGZhc3RUaW1lcnMucHVzaCh0aGlzKVxuICAgICAgaWYgKCFmYXN0Tm93VGltZW91dCB8fCBmYXN0VGltZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZWZyZXNoVGltZW91dCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IDBcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLnN0YXRlID0gLTFcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0VGltZW91dCAoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpIHtcbiAgICByZXR1cm4gZGVsYXkgPCAxZTNcbiAgICAgID8gc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgICAgIDogbmV3IFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpXG4gIH0sXG4gIGNsZWFyVGltZW91dCAodGltZW91dCkge1xuICAgIGlmICh0aW1lb3V0IGluc3RhbmNlb2YgVGltZW91dCkge1xuICAgICAgdGltZW91dC5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuY29uc3QgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLlJlYWRhYmxlXG5cbmZ1bmN0aW9uIFBhcnRTdHJlYW0gKG9wdHMpIHtcbiAgUmVhZGFibGVTdHJlYW0uY2FsbCh0aGlzLCBvcHRzKVxufVxuaW5oZXJpdHMoUGFydFN0cmVhbSwgUmVhZGFibGVTdHJlYW0pXG5cblBhcnRTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydFN0cmVhbVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldExpbWl0IChsaW1pdHMsIG5hbWUsIGRlZmF1bHRMaW1pdCkge1xuICBpZiAoXG4gICAgIWxpbWl0cyB8fFxuICAgIGxpbWl0c1tuYW1lXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgbGltaXRzW25hbWVdID09PSBudWxsXG4gICkgeyByZXR1cm4gZGVmYXVsdExpbWl0IH1cblxuICBpZiAoXG4gICAgdHlwZW9mIGxpbWl0c1tuYW1lXSAhPT0gJ251bWJlcicgfHxcbiAgICBpc05hTihsaW1pdHNbbmFtZV0pXG4gICkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW1pdCAnICsgbmFtZSArICcgaXMgbm90IGEgdmFsaWQgbnVtYmVyJykgfVxuXG4gIHJldHVybiBsaW1pdHNbbmFtZV1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuXG5jb25zdCBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCcuLi8uLi9zdHJlYW1zZWFyY2gvc2JtaCcpXG5cbmNvbnN0IFBhcnRTdHJlYW0gPSByZXF1aXJlKCcuL1BhcnRTdHJlYW0nKVxuY29uc3QgSGVhZGVyUGFyc2VyID0gcmVxdWlyZSgnLi9IZWFkZXJQYXJzZXInKVxuXG5jb25zdCBEQVNIID0gNDVcbmNvbnN0IEJfT05FREFTSCA9IEJ1ZmZlci5mcm9tKCctJylcbmNvbnN0IEJfQ1JMRiA9IEJ1ZmZlci5mcm9tKCdcXHJcXG4nKVxuY29uc3QgRU1QVFlfRk4gPSBmdW5jdGlvbiAoKSB7fVxuXG5mdW5jdGlvbiBEaWNlciAoY2ZnKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaWNlcikpIHsgcmV0dXJuIG5ldyBEaWNlcihjZmcpIH1cbiAgV3JpdGFibGVTdHJlYW0uY2FsbCh0aGlzLCBjZmcpXG5cbiAgaWYgKCFjZmcgfHwgKCFjZmcuaGVhZGVyRmlyc3QgJiYgdHlwZW9mIGNmZy5ib3VuZGFyeSAhPT0gJ3N0cmluZycpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvdW5kYXJ5IHJlcXVpcmVkJykgfVxuXG4gIGlmICh0eXBlb2YgY2ZnLmJvdW5kYXJ5ID09PSAnc3RyaW5nJykgeyB0aGlzLnNldEJvdW5kYXJ5KGNmZy5ib3VuZGFyeSkgfSBlbHNlIHsgdGhpcy5fYnBhcnNlciA9IHVuZGVmaW5lZCB9XG5cbiAgdGhpcy5faGVhZGVyRmlyc3QgPSBjZmcuaGVhZGVyRmlyc3RcblxuICB0aGlzLl9kYXNoZXMgPSAwXG4gIHRoaXMuX3BhcnRzID0gMFxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICB0aGlzLl9pc1ByZWFtYmxlID0gdHJ1ZVxuICB0aGlzLl9qdXN0TWF0Y2hlZCA9IGZhbHNlXG4gIHRoaXMuX2ZpcnN0V3JpdGUgPSB0cnVlXG4gIHRoaXMuX2luSGVhZGVyID0gdHJ1ZVxuICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX2lnbm9yZURhdGEgPSBmYWxzZVxuICB0aGlzLl9wYXJ0T3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLnBhcnRId20gfVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5faHBhcnNlciA9IG5ldyBIZWFkZXJQYXJzZXIoY2ZnKVxuICB0aGlzLl9ocGFyc2VyLm9uKCdoZWFkZXInLCBmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgc2VsZi5faW5IZWFkZXIgPSBmYWxzZVxuICAgIHNlbGYuX3BhcnQuZW1pdCgnaGVhZGVyJywgaGVhZGVyKVxuICB9KVxufVxuaW5oZXJpdHMoRGljZXIsIFdyaXRhYmxlU3RyZWFtKVxuXG5EaWNlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldikge1xuICBpZiAoZXYgPT09ICdmaW5pc2gnICYmICF0aGlzLl9yZWFsRmluaXNoKSB7XG4gICAgaWYgKCF0aGlzLl9maW5pc2hlZCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVuZCBvZiBtdWx0aXBhcnQgZGF0YScpKVxuICAgICAgICBpZiAoc2VsZi5fcGFydCAmJiAhc2VsZi5faWdub3JlRGF0YSkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSAoc2VsZi5faXNQcmVhbWJsZSA/ICdQcmVhbWJsZScgOiAnUGFydCcpXG4gICAgICAgICAgc2VsZi5fcGFydC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcih0eXBlICsgJyB0ZXJtaW5hdGVkIGVhcmx5IGR1ZSB0byB1bmV4cGVjdGVkIGVuZCBvZiBtdWx0aXBhcnQgZGF0YScpKVxuICAgICAgICAgIHNlbGYuX3BhcnQucHVzaChudWxsKVxuICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9IGVsc2UgeyBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuZW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2IpIHtcbiAgLy8gaWdub3JlIHVuZXhwZWN0ZWQgZGF0YSAoZS5nLiBleHRyYSB0cmFpbGVyIGRhdGEgYWZ0ZXIgZmluaXNoZWQpXG4gIGlmICghdGhpcy5faHBhcnNlciAmJiAhdGhpcy5fYnBhcnNlcikgeyByZXR1cm4gY2IoKSB9XG5cbiAgaWYgKHRoaXMuX2hlYWRlckZpcnN0ICYmIHRoaXMuX2lzUHJlYW1ibGUpIHtcbiAgICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICAgIHRoaXMuX3BhcnQgPSBuZXcgUGFydFN0cmVhbSh0aGlzLl9wYXJ0T3B0cylcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQoJ3ByZWFtYmxlJykgIT09IDApIHsgdGhpcy5lbWl0KCdwcmVhbWJsZScsIHRoaXMuX3BhcnQpIH0gZWxzZSB7IHRoaXMuX2lnbm9yZSgpIH1cbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMuX2hwYXJzZXIucHVzaChkYXRhKVxuICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBkYXRhLmxlbmd0aCkgeyBkYXRhID0gZGF0YS5zbGljZShyKSB9IGVsc2UgeyByZXR1cm4gY2IoKSB9XG4gIH1cblxuICAvLyBhbGxvd3MgZm9yIFwiZWFzaWVyXCIgdGVzdGluZ1xuICBpZiAodGhpcy5fZmlyc3RXcml0ZSkge1xuICAgIHRoaXMuX2JwYXJzZXIucHVzaChCX0NSTEYpXG4gICAgdGhpcy5fZmlyc3RXcml0ZSA9IGZhbHNlXG4gIH1cblxuICB0aGlzLl9icGFyc2VyLnB1c2goZGF0YSlcblxuICBpZiAodGhpcy5fcGF1c2UpIHsgdGhpcy5fY2IgPSBjYiB9IGVsc2UgeyBjYigpIH1cbn1cblxuRGljZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gIHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWRcbiAgdGhpcy5faHBhcnNlciA9IHVuZGVmaW5lZFxufVxuXG5EaWNlci5wcm90b3R5cGUuc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoYm91bmRhcnkpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5fYnBhcnNlciA9IG5ldyBTdHJlYW1TZWFyY2goJ1xcclxcbi0tJyArIGJvdW5kYXJ5KVxuICB0aGlzLl9icGFyc2VyLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBzZWxmLl9vbmluZm8oaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZClcbiAgfSlcbn1cblxuRGljZXIucHJvdG90eXBlLl9pZ25vcmUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9wYXJ0ICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgdGhpcy5faWdub3JlRGF0YSA9IHRydWVcbiAgICB0aGlzLl9wYXJ0Lm9uKCdlcnJvcicsIEVNUFRZX0ZOKVxuICAgIC8vIHdlIG11c3QgcGVyZm9ybSBzb21lIGtpbmQgb2YgcmVhZCBvbiB0aGUgc3RyZWFtIGV2ZW4gdGhvdWdoIHdlIGFyZVxuICAgIC8vIGlnbm9yaW5nIHRoZSBkYXRhLCBvdGhlcndpc2Ugbm9kZSdzIFJlYWRhYmxlIHN0cmVhbSB3aWxsIG5vdCBlbWl0ICdlbmQnXG4gICAgLy8gYWZ0ZXIgcHVzaGluZyBudWxsIHRvIHRoZSBzdHJlYW1cbiAgICB0aGlzLl9wYXJ0LnJlc3VtZSgpXG4gIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl9vbmluZm8gPSBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICBsZXQgYnVmOyBjb25zdCBzZWxmID0gdGhpczsgbGV0IGkgPSAwOyBsZXQgcjsgbGV0IHNob3VsZFdyaXRlTW9yZSA9IHRydWVcblxuICBpZiAoIXRoaXMuX3BhcnQgJiYgdGhpcy5fanVzdE1hdGNoZWQgJiYgZGF0YSkge1xuICAgIHdoaWxlICh0aGlzLl9kYXNoZXMgPCAyICYmIChzdGFydCArIGkpIDwgZW5kKSB7XG4gICAgICBpZiAoZGF0YVtzdGFydCArIGldID09PSBEQVNIKSB7XG4gICAgICAgICsraVxuICAgICAgICArK3RoaXMuX2Rhc2hlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX2Rhc2hlcykgeyBidWYgPSBCX09ORURBU0ggfVxuICAgICAgICB0aGlzLl9kYXNoZXMgPSAwXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9kYXNoZXMgPT09IDIpIHtcbiAgICAgIGlmICgoc3RhcnQgKyBpKSA8IGVuZCAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3RyYWlsZXInKSAhPT0gMCkgeyB0aGlzLmVtaXQoJ3RyYWlsZXInLCBkYXRhLnNsaWNlKHN0YXJ0ICsgaSwgZW5kKSkgfVxuICAgICAgdGhpcy5yZXNldCgpXG4gICAgICB0aGlzLl9maW5pc2hlZCA9IHRydWVcbiAgICAgIC8vIG5vIG1vcmUgcGFydHMgd2lsbCBiZSBhZGRlZFxuICAgICAgaWYgKHNlbGYuX3BhcnRzID09PSAwKSB7XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgcmV0dXJuIH1cbiAgfVxuICBpZiAodGhpcy5fanVzdE1hdGNoZWQpIHsgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZSB9XG4gIGlmICghdGhpcy5fcGFydCkge1xuICAgIHRoaXMuX3BhcnQgPSBuZXcgUGFydFN0cmVhbSh0aGlzLl9wYXJ0T3B0cylcbiAgICB0aGlzLl9wYXJ0Ll9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgIHNlbGYuX3VucGF1c2UoKVxuICAgIH1cbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3ByZWFtYmxlJykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KVxuICAgIH0gZWxzZSBpZiAodGhpcy5faXNQcmVhbWJsZSAhPT0gdHJ1ZSAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3BhcnQnKSAhPT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdwYXJ0JywgdGhpcy5fcGFydClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faWdub3JlKClcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2luSGVhZGVyID0gdHJ1ZSB9XG4gIH1cbiAgaWYgKGRhdGEgJiYgc3RhcnQgPCBlbmQgJiYgIXRoaXMuX2lnbm9yZURhdGEpIHtcbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSB8fCAhdGhpcy5faW5IZWFkZXIpIHtcbiAgICAgIGlmIChidWYpIHsgc2hvdWxkV3JpdGVNb3JlID0gdGhpcy5fcGFydC5wdXNoKGJ1ZikgfVxuICAgICAgc2hvdWxkV3JpdGVNb3JlID0gdGhpcy5fcGFydC5wdXNoKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gICAgICBpZiAoIXNob3VsZFdyaXRlTW9yZSkgeyB0aGlzLl9wYXVzZSA9IHRydWUgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5faW5IZWFkZXIpIHtcbiAgICAgIGlmIChidWYpIHsgdGhpcy5faHBhcnNlci5wdXNoKGJ1ZikgfVxuICAgICAgciA9IHRoaXMuX2hwYXJzZXIucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCF0aGlzLl9pbkhlYWRlciAmJiByICE9PSB1bmRlZmluZWQgJiYgciA8IGVuZCkgeyB0aGlzLl9vbmluZm8oZmFsc2UsIGRhdGEsIHN0YXJ0ICsgciwgZW5kKSB9XG4gICAgfVxuICB9XG4gIGlmIChpc01hdGNoKSB7XG4gICAgdGhpcy5faHBhcnNlci5yZXNldCgpXG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUpIHsgdGhpcy5faXNQcmVhbWJsZSA9IGZhbHNlIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnQgIT09IGVuZCkge1xuICAgICAgICArK3RoaXMuX3BhcnRzXG4gICAgICAgIHRoaXMuX3BhcnQub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoLS1zZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLl91bnBhdXNlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3BhcnQucHVzaChudWxsKVxuICAgIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgICB0aGlzLl9qdXN0TWF0Y2hlZCA9IHRydWVcbiAgICB0aGlzLl9kYXNoZXMgPSAwXG4gIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl91bnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuX3BhdXNlKSB7IHJldHVybiB9XG5cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuICBpZiAodGhpcy5fY2IpIHtcbiAgICBjb25zdCBjYiA9IHRoaXMuX2NiXG4gICAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgICBjYigpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaWNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBOb2RlIGhhcyBhbHdheXMgdXRmLThcbmNvbnN0IHV0ZjhEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpXG5jb25zdCB0ZXh0RGVjb2RlcnMgPSBuZXcgTWFwKFtcbiAgWyd1dGYtOCcsIHV0ZjhEZWNvZGVyXSxcbiAgWyd1dGY4JywgdXRmOERlY29kZXJdXG5dKVxuXG5mdW5jdGlvbiBnZXREZWNvZGVyIChjaGFyc2V0KSB7XG4gIGxldCBsY1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoY2hhcnNldCkge1xuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy51dGY4XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYXNjaWknOiAvLyBUT0RPOiBNYWtlIHRoZXNlIGEgc2VwYXJhdGUsIHN0cmljdCBkZWNvZGVyP1xuICAgICAgY2FzZSAndXMtYXNjaWknOlxuICAgICAgY2FzZSAnaXNvLTg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5LTEnOlxuICAgICAgY2FzZSAnaXNvODg1OTEnOlxuICAgICAgY2FzZSAnaXNvXzg4NTktMSc6XG4gICAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgICAgY2FzZSAnaXNvXzg4NTktMToxOTg3JzpcbiAgICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgICBjYXNlICd4LWNwMTI1Mic6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5sYXRpbjFcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy51dGYxNmxlXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMuYmFzZTY0XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobGMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxjID0gdHJ1ZVxuICAgICAgICAgIGNoYXJzZXQgPSBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5vdGhlci5iaW5kKGNoYXJzZXQpXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGRlY29kZXJzID0ge1xuICB1dGY4OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLnV0ZjhTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBsYXRpbjE6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmxhdGluMVNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIHV0ZjE2bGU6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudWNzMlNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGJhc2U2NDogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS5iYXNlNjRTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBvdGhlcjogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cblxuICAgIGlmICh0ZXh0RGVjb2RlcnMuaGFzKHRoaXMudG9TdHJpbmcoKSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0ZXh0RGVjb2RlcnMuZ2V0KHRoaXMpLmRlY29kZShkYXRhKVxuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnXG4gICAgICA/IGRhdGFcbiAgICAgIDogZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVjb2RlVGV4dCAodGV4dCwgc291cmNlRW5jb2RpbmcsIGRlc3RFbmNvZGluZykge1xuICBpZiAodGV4dCkge1xuICAgIHJldHVybiBnZXREZWNvZGVyKGRlc3RFbmNvZGluZykodGV4dCwgc291cmNlRW5jb2RpbmcpXG4gIH1cbiAgcmV0dXJuIHRleHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWNvZGVUZXh0XG4iLCAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlbmFtZSAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7IHJldHVybiAnJyB9XG4gIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgc3dpdGNoIChwYXRoLmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgIGNhc2UgMHgyRjogLy8gJy8nXG4gICAgICBjYXNlIDB4NUM6IC8vICdcXCdcbiAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoaSArIDEpXG4gICAgICAgIHJldHVybiAocGF0aCA9PT0gJy4uJyB8fCBwYXRoID09PSAnLicgPyAnJyA6IHBhdGgpXG4gICAgfVxuICB9XG4gIHJldHVybiAocGF0aCA9PT0gJy4uJyB8fCBwYXRoID09PSAnLicgPyAnJyA6IHBhdGgpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRPRE86XG4vLyAgKiBzdXBwb3J0IDEgbmVzdGVkIG11bHRpcGFydCBsZXZlbFxuLy8gICAgKHNlZSBzZWNvbmQgbXVsdGlwYXJ0IGV4YW1wbGUgaGVyZTpcbi8vICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2ludGVyYWN0L2Zvcm1zLmh0bWwjZGlkeC1tdWx0aXBhcnRmb3JtLWRhdGEpXG4vLyAgKiBzdXBwb3J0IGxpbWl0cy5maWVsZE5hbWVTaXplXG4vLyAgICAgLS0gdGhpcyB3aWxsIHJlcXVpcmUgbW9kaWZpY2F0aW9ucyB0byB1dGlscy5wYXJzZVBhcmFtc1xuXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGluaGVyaXRzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCBEaWNlciA9IHJlcXVpcmUoJy4uLy4uL2RlcHMvZGljZXIvbGliL0RpY2VyJylcblxuY29uc3QgcGFyc2VQYXJhbXMgPSByZXF1aXJlKCcuLi91dGlscy9wYXJzZVBhcmFtcycpXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZGVjb2RlVGV4dCcpXG5jb25zdCBiYXNlbmFtZSA9IHJlcXVpcmUoJy4uL3V0aWxzL2Jhc2VuYW1lJylcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBSRV9CT1VOREFSWSA9IC9eYm91bmRhcnkkL2lcbmNvbnN0IFJFX0ZJRUxEID0gL15mb3JtLWRhdGEkL2lcbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcbmNvbnN0IFJFX0ZJTEVOQU1FID0gL15maWxlbmFtZSQvaVxuY29uc3QgUkVfTkFNRSA9IC9ebmFtZSQvaVxuXG5NdWx0aXBhcnQuZGV0ZWN0ID0gL15tdWx0aXBhcnRcXC9mb3JtLWRhdGEvaVxuZnVuY3Rpb24gTXVsdGlwYXJ0IChib3ksIGNmZykge1xuICBsZXQgaVxuICBsZXQgbGVuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGxldCBib3VuZGFyeVxuICBjb25zdCBsaW1pdHMgPSBjZmcubGltaXRzXG4gIGNvbnN0IGlzUGFydEFGaWxlID0gY2ZnLmlzUGFydEFGaWxlIHx8ICgoZmllbGROYW1lLCBjb250ZW50VHlwZSwgZmlsZU5hbWUpID0+IChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfHwgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkpXG4gIGNvbnN0IHBhcnNlZENvblR5cGUgPSBjZmcucGFyc2VkQ29uVHlwZSB8fCBbXVxuICBjb25zdCBkZWZDaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnXG4gIGNvbnN0IHByZXNlcnZlUGF0aCA9IGNmZy5wcmVzZXJ2ZVBhdGhcbiAgY29uc3QgZmlsZU9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5maWxlSHdtIH1cblxuICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWRDb25UeXBlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkQ29uVHlwZVtpXSkgJiZcbiAgICAgIFJFX0JPVU5EQVJZLnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGJvdW5kYXJ5ID0gcGFyc2VkQ29uVHlwZVtpXVsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0ZpbmlzaGVkICgpIHtcbiAgICBpZiAobmVuZHMgPT09IDAgJiYgZmluaXNoZWQgJiYgIWJveS5fZG9uZSkge1xuICAgICAgZmluaXNoZWQgPSBmYWxzZVxuICAgICAgc2VsZi5lbmQoKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgYm91bmRhcnkgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBFcnJvcignTXVsdGlwYXJ0OiBCb3VuZGFyeSBub3QgZm91bmQnKSB9XG5cbiAgY29uc3QgZmllbGRTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZFNpemUnLCAxICogMTAyNCAqIDEwMjQpXG4gIGNvbnN0IGZpbGVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlU2l6ZScsIEluZmluaXR5KVxuICBjb25zdCBmaWxlc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmlsZXMnLCBJbmZpbml0eSlcbiAgY29uc3QgZmllbGRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZHMnLCBJbmZpbml0eSlcbiAgY29uc3QgcGFydHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ3BhcnRzJywgSW5maW5pdHkpXG4gIGNvbnN0IGhlYWRlclBhaXJzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdoZWFkZXJQYWlycycsIDIwMDApXG4gIGNvbnN0IGhlYWRlclNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclNpemUnLCA4MCAqIDEwMjQpXG5cbiAgbGV0IG5maWxlcyA9IDBcbiAgbGV0IG5maWVsZHMgPSAwXG4gIGxldCBuZW5kcyA9IDBcbiAgbGV0IGN1ckZpbGVcbiAgbGV0IGN1ckZpZWxkXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgdGhpcy5fbmVlZERyYWluID0gZmFsc2VcbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9ucGFydHMgPSAwXG4gIHRoaXMuX2JveSA9IGJveVxuXG4gIGNvbnN0IHBhcnNlckNmZyA9IHtcbiAgICBib3VuZGFyeSxcbiAgICBtYXhIZWFkZXJQYWlyczogaGVhZGVyUGFpcnNMaW1pdCxcbiAgICBtYXhIZWFkZXJTaXplOiBoZWFkZXJTaXplTGltaXQsXG4gICAgcGFydEh3bTogZmlsZU9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBoaWdoV2F0ZXJNYXJrOiBjZmcuaGlnaFdhdGVyTWFya1xuICB9XG5cbiAgdGhpcy5wYXJzZXIgPSBuZXcgRGljZXIocGFyc2VyQ2ZnKVxuICB0aGlzLnBhcnNlci5vbignZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5fbmVlZERyYWluID0gZmFsc2VcbiAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX3BhdXNlKSB7XG4gICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgY2IoKVxuICAgIH1cbiAgfSkub24oJ3BhcnQnLCBmdW5jdGlvbiBvblBhcnQgKHBhcnQpIHtcbiAgICBpZiAoKytzZWxmLl9ucGFydHMgPiBwYXJ0c0xpbWl0KSB7XG4gICAgICBzZWxmLnBhcnNlci5yZW1vdmVMaXN0ZW5lcigncGFydCcsIG9uUGFydClcbiAgICAgIHNlbGYucGFyc2VyLm9uKCdwYXJ0Jywgc2tpcFBhcnQpXG4gICAgICBib3kuaGl0UGFydHNMaW1pdCA9IHRydWVcbiAgICAgIGJveS5lbWl0KCdwYXJ0c0xpbWl0JylcbiAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgIH1cblxuICAgIC8vIGhhY2sgYmVjYXVzZSBzdHJlYW1zMiBfYWx3YXlzXyBkb2Vzbid0IGVtaXQgJ2VuZCcgdW50aWwgbmV4dFRpY2ssIHNvIGxldFxuICAgIC8vIHVzIGVtaXQgJ2VuZCcgZWFybHkgc2luY2Ugd2Uga25vdyB0aGUgcGFydCBoYXMgZW5kZWQgaWYgd2UgYXJlIGFscmVhZHlcbiAgICAvLyBzZWVpbmcgdGhlIG5leHQgcGFydFxuICAgIGlmIChjdXJGaWVsZCkge1xuICAgICAgY29uc3QgZmllbGQgPSBjdXJGaWVsZFxuICAgICAgZmllbGQuZW1pdCgnZW5kJylcbiAgICAgIGZpZWxkLnJlbW92ZUFsbExpc3RlbmVycygnZW5kJylcbiAgICB9XG5cbiAgICBwYXJ0Lm9uKCdoZWFkZXInLCBmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgICBsZXQgY29udHlwZVxuICAgICAgbGV0IGZpZWxkbmFtZVxuICAgICAgbGV0IHBhcnNlZFxuICAgICAgbGV0IGNoYXJzZXRcbiAgICAgIGxldCBlbmNvZGluZ1xuICAgICAgbGV0IGZpbGVuYW1lXG4gICAgICBsZXQgbnNpemUgPSAwXG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlclsnY29udGVudC10eXBlJ11bMF0pXG4gICAgICAgIGlmIChwYXJzZWRbMF0pIHtcbiAgICAgICAgICBjb250eXBlID0gcGFyc2VkWzBdLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChSRV9DSEFSU0VULnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgICBjaGFyc2V0ID0gcGFyc2VkW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnR5cGUgPT09IHVuZGVmaW5lZCkgeyBjb250eXBlID0gJ3RleHQvcGxhaW4nIH1cbiAgICAgIGlmIChjaGFyc2V0ID09PSB1bmRlZmluZWQpIHsgY2hhcnNldCA9IGRlZkNoYXJzZXQgfVxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LWRpc3Bvc2l0aW9uJ11bMF0pXG4gICAgICAgIGlmICghUkVfRklFTEQudGVzdChwYXJzZWRbMF0pKSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgIGlmIChSRV9OQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmllbGRuYW1lID0gcGFyc2VkW2ldWzFdXG4gICAgICAgICAgfSBlbHNlIGlmIChSRV9GSUxFTkFNRS50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgIGZpbGVuYW1lID0gcGFyc2VkW2ldWzFdXG4gICAgICAgICAgICBpZiAoIXByZXNlcnZlUGF0aCkgeyBmaWxlbmFtZSA9IGJhc2VuYW1lKGZpbGVuYW1lKSB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgeyByZXR1cm4gc2tpcFBhcnQocGFydCkgfVxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10pIHsgZW5jb2RpbmcgPSBoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXVswXS50b0xvd2VyQ2FzZSgpIH0gZWxzZSB7IGVuY29kaW5nID0gJzdiaXQnIH1cblxuICAgICAgbGV0IG9uRGF0YSxcbiAgICAgICAgb25FbmRcblxuICAgICAgaWYgKGlzUGFydEFGaWxlKGZpZWxkbmFtZSwgY29udHlwZSwgZmlsZW5hbWUpKSB7XG4gICAgICAgIC8vIGZpbGUvYmluYXJ5IGZpZWxkXG4gICAgICAgIGlmIChuZmlsZXMgPT09IGZpbGVzTGltaXQpIHtcbiAgICAgICAgICBpZiAoIWJveS5oaXRGaWxlc0xpbWl0KSB7XG4gICAgICAgICAgICBib3kuaGl0RmlsZXNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWxlc0xpbWl0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgICAgIH1cblxuICAgICAgICArK25maWxlc1xuXG4gICAgICAgIGlmIChib3kubGlzdGVuZXJDb3VudCgnZmlsZScpID09PSAwKSB7XG4gICAgICAgICAgc2VsZi5wYXJzZXIuX2lnbm9yZSgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICArK25lbmRzXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZVN0cmVhbShmaWxlT3B0cylcbiAgICAgICAgY3VyRmlsZSA9IGZpbGVcbiAgICAgICAgZmlsZS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC0tbmVuZHNcbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBmaWxlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICBpZiAoIXNlbGYuX3BhdXNlKSB7IHJldHVybiB9XG4gICAgICAgICAgc2VsZi5fcGF1c2UgPSBmYWxzZVxuICAgICAgICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fbmVlZERyYWluKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICAgICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgY2IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBib3kuZW1pdCgnZmlsZScsIGZpZWxkbmFtZSwgZmlsZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBjb250eXBlKVxuXG4gICAgICAgIG9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgaWYgKChuc2l6ZSArPSBkYXRhLmxlbmd0aCkgPiBmaWxlU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYWxlbiA9IGZpbGVTaXplTGltaXQgLSBuc2l6ZSArIGRhdGEubGVuZ3RoXG4gICAgICAgICAgICBpZiAoZXh0cmFsZW4gPiAwKSB7IGZpbGUucHVzaChkYXRhLnNsaWNlKDAsIGV4dHJhbGVuKSkgfVxuICAgICAgICAgICAgZmlsZS50cnVuY2F0ZWQgPSB0cnVlXG4gICAgICAgICAgICBmaWxlLmJ5dGVzUmVhZCA9IGZpbGVTaXplTGltaXRcbiAgICAgICAgICAgIHBhcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJylcbiAgICAgICAgICAgIGZpbGUuZW1pdCgnbGltaXQnKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfSBlbHNlIGlmICghZmlsZS5wdXNoKGRhdGEpKSB7IHNlbGYuX3BhdXNlID0gdHJ1ZSB9XG5cbiAgICAgICAgICBmaWxlLmJ5dGVzUmVhZCA9IG5zaXplXG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWxlID0gdW5kZWZpbmVkXG4gICAgICAgICAgZmlsZS5wdXNoKG51bGwpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vbi1maWxlIGZpZWxkXG4gICAgICAgIGlmIChuZmllbGRzID09PSBmaWVsZHNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgICBib3kuaGl0RmllbGRzTGltaXQgPSB0cnVlXG4gICAgICAgICAgICBib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpZWxkc1xuICAgICAgICArK25lbmRzXG4gICAgICAgIGxldCBidWZmZXIgPSAnJ1xuICAgICAgICBsZXQgdHJ1bmNhdGVkID0gZmFsc2VcbiAgICAgICAgY3VyRmllbGQgPSBwYXJ0XG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYWxlbiA9IChmaWVsZFNpemVMaW1pdCAtIChuc2l6ZSAtIGRhdGEubGVuZ3RoKSlcbiAgICAgICAgICAgIGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCAwLCBleHRyYWxlbilcbiAgICAgICAgICAgIHRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIHBhcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJylcbiAgICAgICAgICB9IGVsc2UgeyBidWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5JykgfVxuICAgICAgICB9XG5cbiAgICAgICAgb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VyRmllbGQgPSB1bmRlZmluZWRcbiAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkgeyBidWZmZXIgPSBkZWNvZGVUZXh0KGJ1ZmZlciwgJ2JpbmFyeScsIGNoYXJzZXQpIH1cbiAgICAgICAgICBib3kuZW1pdCgnZmllbGQnLCBmaWVsZG5hbWUsIGJ1ZmZlciwgZmFsc2UsIHRydW5jYXRlZCwgZW5jb2RpbmcsIGNvbnR5cGUpXG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIGNoZWNrRmluaXNoZWQoKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEFzIG9mIG5vZGVAMmVmZTRhYjc2MTY2NiAodjAuMTAuMjkrL3YwLjExLjE0KyksIGJ1c2JveSBoYWQgYmVjb21lXG4gICAgICAgICBicm9rZW4uIFN0cmVhbXMyL3N0cmVhbXMzIGlzIGEgaHVnZSBibGFjayBib3ggb2YgY29uZnVzaW9uLCBidXRcbiAgICAgICAgIHNvbWVob3cgb3ZlcnJpZGluZyB0aGUgc3luYyBzdGF0ZSBzZWVtcyB0byBmaXggdGhpbmdzIGFnYWluIChhbmQgc3RpbGxcbiAgICAgICAgIHNlZW1zIHRvIHdvcmsgZm9yIHByZXZpb3VzIG5vZGUgdmVyc2lvbnMpLlxuICAgICAgKi9cbiAgICAgIHBhcnQuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlXG5cbiAgICAgIHBhcnQub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgICBwYXJ0Lm9uKCdlbmQnLCBvbkVuZClcbiAgICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoY3VyRmlsZSkgeyBjdXJGaWxlLmVtaXQoJ2Vycm9yJywgZXJyKSB9XG4gICAgfSlcbiAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGJveS5lbWl0KCdlcnJvcicsIGVycilcbiAgfSkub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmaW5pc2hlZCA9IHRydWVcbiAgICBjaGVja0ZpbmlzaGVkKClcbiAgfSlcbn1cblxuTXVsdGlwYXJ0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgY2IpIHtcbiAgY29uc3QgciA9IHRoaXMucGFyc2VyLndyaXRlKGNodW5rKVxuICBpZiAociAmJiAhdGhpcy5fcGF1c2UpIHtcbiAgICBjYigpXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbmVlZERyYWluID0gIXJcbiAgICB0aGlzLl9jYiA9IGNiXG4gIH1cbn1cblxuTXVsdGlwYXJ0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgaWYgKHNlbGYucGFyc2VyLndyaXRhYmxlKSB7XG4gICAgc2VsZi5wYXJzZXIuZW5kKClcbiAgfSBlbHNlIGlmICghc2VsZi5fYm95Ll9kb25lKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9ib3kuX2RvbmUgPSB0cnVlXG4gICAgICBzZWxmLl9ib3kuZW1pdCgnZmluaXNoJylcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHNraXBQYXJ0IChwYXJ0KSB7XG4gIHBhcnQucmVzdW1lKClcbn1cblxuZnVuY3Rpb24gRmlsZVN0cmVhbSAob3B0cykge1xuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdHMpXG5cbiAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgdGhpcy50cnVuY2F0ZWQgPSBmYWxzZVxufVxuXG5pbmhlcml0cyhGaWxlU3RyZWFtLCBSZWFkYWJsZSlcblxuRmlsZVN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge31cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXBhcnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEZWNvZGVyID0gcmVxdWlyZSgnLi4vdXRpbHMvRGVjb2RlcicpXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZGVjb2RlVGV4dCcpXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuXG5VcmxFbmNvZGVkLmRldGVjdCA9IC9eYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWQvaVxuZnVuY3Rpb24gVXJsRW5jb2RlZCAoYm95LCBjZmcpIHtcbiAgY29uc3QgbGltaXRzID0gY2ZnLmxpbWl0c1xuICBjb25zdCBwYXJzZWRDb25UeXBlID0gY2ZnLnBhcnNlZENvblR5cGVcbiAgdGhpcy5ib3kgPSBib3lcblxuICB0aGlzLmZpZWxkU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRTaXplJywgMSAqIDEwMjQgKiAxMDI0KVxuICB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkTmFtZVNpemUnLCAxMDApXG4gIHRoaXMuZmllbGRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZHMnLCBJbmZpbml0eSlcblxuICBsZXQgY2hhcnNldFxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGFyc2VkQ29uVHlwZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZENvblR5cGVbaV0pICYmXG4gICAgICAgIFJFX0NIQVJTRVQudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgY2hhcnNldCA9IHBhcnNlZENvblR5cGVbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoY2hhcnNldCA9PT0gdW5kZWZpbmVkKSB7IGNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCcgfVxuXG4gIHRoaXMuZGVjb2RlciA9IG5ldyBEZWNvZGVyKClcbiAgdGhpcy5jaGFyc2V0ID0gY2hhcnNldFxuICB0aGlzLl9maWVsZHMgPSAwXG4gIHRoaXMuX3N0YXRlID0gJ2tleSdcbiAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gIHRoaXMuX2J5dGVzVmFsID0gMFxuICB0aGlzLl9rZXkgPSAnJ1xuICB0aGlzLl92YWwgPSAnJ1xuICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX3ZhbFRydW5jID0gZmFsc2VcbiAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxufVxuXG5VcmxFbmNvZGVkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBjYikge1xuICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7XG4gICAgaWYgKCF0aGlzLmJveS5oaXRGaWVsZHNMaW1pdCkge1xuICAgICAgdGhpcy5ib3kuaGl0RmllbGRzTGltaXQgPSB0cnVlXG4gICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgfVxuICAgIHJldHVybiBjYigpXG4gIH1cblxuICBsZXQgaWR4ZXE7IGxldCBpZHhhbXA7IGxldCBpOyBsZXQgcCA9IDA7IGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoXG5cbiAgd2hpbGUgKHAgPCBsZW4pIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknKSB7XG4gICAgICBpZHhlcSA9IGlkeGFtcCA9IHVuZGVmaW5lZFxuICAgICAgZm9yIChpID0gcDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3AgfVxuICAgICAgICBpZiAoZGF0YVtpXSA9PT0gMHgzRC8qID0gKi8pIHtcbiAgICAgICAgICBpZHhlcSA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNLZXkgPT09IHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgdGhpcy5faGl0TGltaXQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrdGhpcy5fYnl0ZXNLZXkgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWR4ZXEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBhc3NpZ25tZW50XG4gICAgICAgIGlmIChpZHhlcSA+IHApIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhlcSkpIH1cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAndmFsJ1xuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fdmFsID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNWYWwgPSAwXG4gICAgICAgIHRoaXMuX3ZhbFRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBwID0gaWR4ZXEgKyAxXG4gICAgICB9IGVsc2UgaWYgKGlkeGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGtleSB3aXRoIG5vIGFzc2lnbm1lbnRcbiAgICAgICAgKyt0aGlzLl9maWVsZHNcbiAgICAgICAgbGV0IGtleTsgY29uc3Qga2V5VHJ1bmMgPSB0aGlzLl9rZXlUcnVuY1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyBrZXkgPSAodGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhhbXApKSkgfSBlbHNlIHsga2V5ID0gdGhpcy5fa2V5IH1cblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX2tleSA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzS2V5ID0gMFxuICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgaWYgKGtleS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQoa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAga2V5VHJ1bmMsXG4gICAgICAgICAgICBmYWxzZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl9ieXRlc0tleSA9IHRoaXMuX2tleS5sZW5ndGgpID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkeGFtcCA9IHVuZGVmaW5lZFxuICAgICAgZm9yIChpID0gcDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3AgfVxuICAgICAgICBpZiAoZGF0YVtpXSA9PT0gMHgyNi8qICYgKi8pIHtcbiAgICAgICAgICBpZHhhbXAgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcyAmJiB0aGlzLl9ieXRlc1ZhbCA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzVmFsIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGlmIChpZHhhbXAgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkgfVxuICAgICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICAgICAgdGhpcy5fdmFsVHJ1bmMpXG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2tleSdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX2tleSA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzS2V5ID0gMFxuICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGFtcCArIDFcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkgeyByZXR1cm4gY2IoKSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpdExpbWl0KSB7XG4gICAgICAgIC8vIHdlIG1heSBub3QgaGF2ZSBoaXQgdGhlIGFjdHVhbCBsaW1pdCBpZiB0aGVyZSBhcmUgZW5jb2RlZCBieXRlcy4uLlxuICAgICAgICBpZiAoaSA+IHApIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpKSkgfVxuICAgICAgICBwID0gaVxuICAgICAgICBpZiAoKHRoaXMuX3ZhbCA9PT0gJycgJiYgdGhpcy5maWVsZFNpemVMaW1pdCA9PT0gMCkgfHxcbiAgICAgICAgICAgICh0aGlzLl9ieXRlc1ZhbCA9IHRoaXMuX3ZhbC5sZW5ndGgpID09PSB0aGlzLmZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgLy8geWVwLCB3ZSBhY3R1YWxseSBkaWQgaGl0IHRoZSBsaW1pdFxuICAgICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocCA8IGxlbikgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHApKSB9XG4gICAgICAgIHAgPSBsZW5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2IoKVxufVxuXG5VcmxFbmNvZGVkLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJveS5fZG9uZSkgeyByZXR1cm4gfVxuXG4gIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2tleScgJiYgdGhpcy5fa2V5Lmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICcnLFxuICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICBmYWxzZSlcbiAgfSBlbHNlIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3ZhbCcpIHtcbiAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgIGRlY29kZVRleHQodGhpcy5fdmFsLCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgdGhpcy5fdmFsVHJ1bmMpXG4gIH1cbiAgdGhpcy5ib3kuX2RvbmUgPSB0cnVlXG4gIHRoaXMuYm95LmVtaXQoJ2ZpbmlzaCcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsRW5jb2RlZFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCBEaWNlciA9IHJlcXVpcmUoJy4uL2RlcHMvZGljZXIvbGliL0RpY2VyJylcblxuY29uc3QgTXVsdGlwYXJ0UGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy9tdWx0aXBhcnQnKVxuY29uc3QgVXJsZW5jb2RlZFBhcnNlciA9IHJlcXVpcmUoJy4vdHlwZXMvdXJsZW5jb2RlZCcpXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4vdXRpbHMvcGFyc2VQYXJhbXMnKVxuXG5mdW5jdGlvbiBCdXNib3kgKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1c2JveSkpIHsgcmV0dXJuIG5ldyBCdXNib3kob3B0cykgfVxuXG4gIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCdXNib3kgZXhwZWN0ZWQgYW4gb3B0aW9ucy1PYmplY3QuJylcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCdXNib3kgZXhwZWN0ZWQgYW4gb3B0aW9ucy1PYmplY3Qgd2l0aCBoZWFkZXJzLWF0dHJpYnV0ZS4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNzaW5nIENvbnRlbnQtVHlwZS1oZWFkZXIuJylcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBoZWFkZXJzLFxuICAgIC4uLnN0cmVhbU9wdGlvbnNcbiAgfSA9IG9wdHNcblxuICB0aGlzLm9wdHMgPSB7XG4gICAgYXV0b0Rlc3Ryb3k6IGZhbHNlLFxuICAgIC4uLnN0cmVhbU9wdGlvbnNcbiAgfVxuICBXcml0YWJsZVN0cmVhbS5jYWxsKHRoaXMsIHRoaXMub3B0cylcblxuICB0aGlzLl9kb25lID0gZmFsc2VcbiAgdGhpcy5fcGFyc2VyID0gdGhpcy5nZXRQYXJzZXJCeUhlYWRlcnMoaGVhZGVycylcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxufVxuaW5oZXJpdHMoQnVzYm95LCBXcml0YWJsZVN0cmVhbSlcblxuQnVzYm95LnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2KSB7XG4gIGlmIChldiA9PT0gJ2ZpbmlzaCcpIHtcbiAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgIHRoaXMuX3BhcnNlcj8uZW5kKClcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAodGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLl9maW5pc2hlZCA9IHRydWVcbiAgfVxuICBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuZW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1c2JveS5wcm90b3R5cGUuZ2V0UGFyc2VyQnlIZWFkZXJzID0gZnVuY3Rpb24gKGhlYWRlcnMpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyc1snY29udGVudC10eXBlJ10pXG5cbiAgY29uc3QgY2ZnID0ge1xuICAgIGRlZkNoYXJzZXQ6IHRoaXMub3B0cy5kZWZDaGFyc2V0LFxuICAgIGZpbGVId206IHRoaXMub3B0cy5maWxlSHdtLFxuICAgIGhlYWRlcnMsXG4gICAgaGlnaFdhdGVyTWFyazogdGhpcy5vcHRzLmhpZ2hXYXRlck1hcmssXG4gICAgaXNQYXJ0QUZpbGU6IHRoaXMub3B0cy5pc1BhcnRBRmlsZSxcbiAgICBsaW1pdHM6IHRoaXMub3B0cy5saW1pdHMsXG4gICAgcGFyc2VkQ29uVHlwZTogcGFyc2VkLFxuICAgIHByZXNlcnZlUGF0aDogdGhpcy5vcHRzLnByZXNlcnZlUGF0aFxuICB9XG5cbiAgaWYgKE11bHRpcGFydFBhcnNlci5kZXRlY3QudGVzdChwYXJzZWRbMF0pKSB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBhcnRQYXJzZXIodGhpcywgY2ZnKVxuICB9XG4gIGlmIChVcmxlbmNvZGVkUGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IFVybGVuY29kZWRQYXJzZXIodGhpcywgY2ZnKVxuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgQ29udGVudC1UeXBlLicpXG59XG5cbkJ1c2JveS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5fcGFyc2VyLndyaXRlKGNodW5rLCBjYilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdXNib3lcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBCdXNib3lcbm1vZHVsZS5leHBvcnRzLkJ1c2JveSA9IEJ1c2JveVxuXG5tb2R1bGUuZXhwb3J0cy5EaWNlciA9IERpY2VyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gSW4gY2FzZSBvZiBicmVha2luZyBjaGFuZ2VzLCBpbmNyZWFzZSB0aGUgdmVyc2lvblxuLy8gbnVtYmVyIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbE9yaWdpbiA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxPcmlnaW4uMScpXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE9yaWdpbiAoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzW2dsb2JhbE9yaWdpbl1cbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsT3JpZ2luIChuZXdPcmlnaW4pIHtcbiAgaWYgKG5ld09yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTChuZXdPcmlnaW4pXG5cbiAgaWYgKHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHA6JyAmJiBwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgT25seSBodHRwICYgaHR0cHMgdXJscyBhcmUgYWxsb3dlZCwgcmVjZWl2ZWQgJHtwYXJzZWRVUkwucHJvdG9jb2x9YClcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICB2YWx1ZTogcGFyc2VkVVJMLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEdsb2JhbE9yaWdpbixcbiAgc2V0R2xvYmFsT3JpZ2luXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcmVkaXJlY3RTdGF0dXNTZXQsIHJlZmVycmVyUG9saWN5U2V0OiByZWZlcnJlclBvbGljeVRva2VucywgYmFkUG9ydHNTZXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IHBlcmZvcm1hbmNlIH0gPSByZXF1aXJlKCdwZXJmX2hvb2tzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSwgdG9VU1ZTdHJpbmcsIFJlYWRhYmxlU3RyZWFtRnJvbSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGlzVWludDhBcnJheSB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5cbmxldCBzdXBwb3J0ZWRIYXNoZXMgPSBbXVxuXG4vLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2NyeXB0by5odG1sI2RldGVybWluaW5nLWlmLWNyeXB0by1zdXBwb3J0LWlzLXVuYXZhaWxhYmxlXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl8dW5kZWZpbmVkfSAqL1xubGV0IGNyeXB0b1xuXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxuICBjb25zdCBwb3NzaWJsZVJlbGV2YW50SGFzaGVzID0gWydzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMiddXG4gIHN1cHBvcnRlZEhhc2hlcyA9IGNyeXB0by5nZXRIYXNoZXMoKS5maWx0ZXIoKGhhc2gpID0+IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMuaW5jbHVkZXMoaGFzaCkpXG4vKiBjOCBpZ25vcmUgbmV4dCAzICovXG59IGNhdGNoIHtcbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VVUkwgKHJlc3BvbnNlKSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZXNcbiAgLy8gQSByZXNwb25zZSBoYXMgYW4gYXNzb2NpYXRlZCBVUkwuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgbGFzdCBVUkxcbiAgLy8gaW4gcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGFuZCBudWxsIGlmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eS5cbiAgY29uc3QgdXJsTGlzdCA9IHJlc3BvbnNlLnVybExpc3RcbiAgY29uc3QgbGVuZ3RoID0gdXJsTGlzdC5sZW5ndGhcbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IG51bGwgOiB1cmxMaXN0W2xlbmd0aCAtIDFdLnRvU3RyaW5nKClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtbG9jYXRpb24tdXJsXG5mdW5jdGlvbiByZXNwb25zZUxvY2F0aW9uVVJMIChyZXNwb25zZSwgcmVxdWVzdEZyYWdtZW50KSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHJldHVybiBudWxsLlxuICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDIuIExldCBsb2NhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuXG4gIC8vIGBMb2NhdGlvbmAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdsb2NhdGlvbicpXG5cbiAgLy8gMy4gSWYgbG9jYXRpb24gaXMgYSBoZWFkZXIgdmFsdWUsIHRoZW4gc2V0IGxvY2F0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgcGFyc2luZyBsb2NhdGlvbiB3aXRoIHJlc3BvbnNlXHUyMDE5cyBVUkwuXG4gIGlmIChsb2NhdGlvbiAhPT0gbnVsbCAmJiBpc1ZhbGlkSGVhZGVyVmFsdWUobG9jYXRpb24pKSB7XG4gICAgbG9jYXRpb24gPSBuZXcgVVJMKGxvY2F0aW9uLCByZXNwb25zZVVSTChyZXNwb25zZSkpXG4gIH1cblxuICAvLyA0LiBJZiBsb2NhdGlvbiBpcyBhIFVSTCB3aG9zZSBmcmFnbWVudCBpcyBudWxsLCB0aGVuIHNldCBsb2NhdGlvblx1MjAxOXNcbiAgLy8gZnJhZ21lbnQgdG8gcmVxdWVzdEZyYWdtZW50LlxuICBpZiAobG9jYXRpb24gJiYgIWxvY2F0aW9uLmhhc2gpIHtcbiAgICBsb2NhdGlvbi5oYXNoID0gcmVxdWVzdEZyYWdtZW50XG4gIH1cblxuICAvLyA1LiBSZXR1cm4gbG9jYXRpb24uXG4gIHJldHVybiBsb2NhdGlvblxufVxuXG4vKiogQHJldHVybnMge1VSTH0gKi9cbmZ1bmN0aW9uIHJlcXVlc3RDdXJyZW50VVJMIChyZXF1ZXN0KSB7XG4gIHJldHVybiByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RCYWRQb3J0IChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCB1cmwgYmUgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgLy8gMi4gSWYgdXJsXHUyMDE5cyBzY2hlbWUgaXMgYW4gSFRUUChTKSBzY2hlbWUgYW5kIHVybFx1MjAxOXMgcG9ydCBpcyBhIGJhZCBwb3J0LFxuICAvLyB0aGVuIHJldHVybiBibG9ja2VkLlxuICBpZiAodXJsSXNIdHRwSHR0cHNTY2hlbWUodXJsKSAmJiBiYWRQb3J0c1NldC5oYXModXJsLnBvcnQpKSB7XG4gICAgcmV0dXJuICdibG9ja2VkJ1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGFsbG93ZWQuXG4gIHJldHVybiAnYWxsb3dlZCdcbn1cblxuZnVuY3Rpb24gaXNFcnJvckxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgRXJyb3IgfHwgKFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFcnJvcicgfHxcbiAgICBvYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRE9NRXhjZXB0aW9uJ1xuICApXG59XG5cbi8vIENoZWNrIHdoZXRoZXIgfHN0YXR1c1RleHR8IGlzIGEgQnl0ZVN0cmluZyBhbmRcbi8vIG1hdGNoZXMgdGhlIFJlYXNvbi1QaHJhc2UgdG9rZW4gcHJvZHVjdGlvbi5cbi8vIFJGQyAyNjE2OiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNlxuLy8gUkZDIDcyMzA6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwXG4vLyBcInJlYXNvbi1waHJhc2UgPSAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcIlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2Nocm9taXVtL2Jsb2IvOTQuMC40NjA0LjEvdGhpcmRfcGFydHkvYmxpbmsvcmVuZGVyZXIvY29yZS9mZXRjaC9yZXNwb25zZS5jYyNMMTE2XG5mdW5jdGlvbiBpc1ZhbGlkUmVhc29uUGhyYXNlIChzdGF0dXNUZXh0KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdHVzVGV4dC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGMgPSBzdGF0dXNUZXh0LmNoYXJDb2RlQXQoaSlcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICAoXG4gICAgICAgICAgYyA9PT0gMHgwOSB8fCAvLyBIVEFCXG4gICAgICAgICAgKGMgPj0gMHgyMCAmJiBjIDw9IDB4N2UpIHx8IC8vIFNQIC8gVkNIQVJcbiAgICAgICAgICAoYyA+PSAweDgwICYmIGMgPD0gMHhmZilcbiAgICAgICAgKSAvLyBvYnMtdGV4dFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi42XG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICovXG5mdW5jdGlvbiBpc1Rva2VuQ2hhckNvZGUgKGMpIHtcbiAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAweDIyOlxuICAgIGNhc2UgMHgyODpcbiAgICBjYXNlIDB4Mjk6XG4gICAgY2FzZSAweDJjOlxuICAgIGNhc2UgMHgyZjpcbiAgICBjYXNlIDB4M2E6XG4gICAgY2FzZSAweDNiOlxuICAgIGNhc2UgMHgzYzpcbiAgICBjYXNlIDB4M2Q6XG4gICAgY2FzZSAweDNlOlxuICAgIGNhc2UgMHgzZjpcbiAgICBjYXNlIDB4NDA6XG4gICAgY2FzZSAweDViOlxuICAgIGNhc2UgMHg1YzpcbiAgICBjYXNlIDB4NWQ6XG4gICAgY2FzZSAweDdiOlxuICAgIGNhc2UgMHg3ZDpcbiAgICAgIC8vIERRVU9URSBhbmQgXCIoKSwvOjs8PT4/QFtcXF17fVwiXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVkNIQVIgJXgyMS03RVxuICAgICAgcmV0dXJuIGMgPj0gMHgyMSAmJiBjIDw9IDB4N2VcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyYWN0ZXJzXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIVFRQVG9rZW4gKGNoYXJhY3RlcnMpIHtcbiAgaWYgKGNoYXJhY3RlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFpc1Rva2VuQ2hhckNvZGUoY2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLW5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyTmFtZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgcmV0dXJuIGlzVmFsaWRIVFRQVG9rZW4ocG90ZW50aWFsVmFsdWUpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLXZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhlYWRlclZhbHVlIChwb3RlbnRpYWxWYWx1ZSkge1xuICAvLyAtIEhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIEhUVFAgdGFiIG9yIHNwYWNlIGJ5dGVzLlxuICAvLyAtIENvbnRhaW5zIG5vIDB4MDAgKE5VTCkgb3IgSFRUUCBuZXdsaW5lIGJ5dGVzLlxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuc3RhcnRzV2l0aCgnXFx0JykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCcgJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5lbmRzV2l0aCgnXFx0JykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5lbmRzV2l0aCgnICcpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXDAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXHInKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXG4nKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzZXQtcmVxdWVzdHMtcmVmZXJyZXItcG9saWN5LW9uLXJlZGlyZWN0XG5mdW5jdGlvbiBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSkge1xuICAvLyAgR2l2ZW4gYSByZXF1ZXN0IHJlcXVlc3QgYW5kIGEgcmVzcG9uc2UgYWN0dWFsUmVzcG9uc2UsIHRoaXMgYWxnb3JpdGhtXG4gIC8vICB1cGRhdGVzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBhY2NvcmRpbmcgdG8gdGhlIFJlZmVycmVyLVBvbGljeVxuICAvLyAgaGVhZGVyIChpZiBhbnkpIGluIGFjdHVhbFJlc3BvbnNlLlxuXG4gIC8vIDEuIExldCBwb2xpY3kgYmUgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgXHUwMEE3IDguMSBQYXJzZSBhIHJlZmVycmVyIHBvbGljeVxuICAvLyBmcm9tIGEgUmVmZXJyZXItUG9saWN5IGhlYWRlciBvbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3kgZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXJcbiAgLy8gMS4gTGV0IHBvbGljeS10b2tlbnMgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlcyBnaXZlbiBgUmVmZXJyZXItUG9saWN5YCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBjb25zdCB7IGhlYWRlcnNMaXN0IH0gPSBhY3R1YWxSZXNwb25zZVxuICAvLyAyLiBMZXQgcG9saWN5IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIC8vIDMuIEZvciBlYWNoIHRva2VuIGluIHBvbGljeS10b2tlbnMsIGlmIHRva2VuIGlzIGEgcmVmZXJyZXIgcG9saWN5IGFuZCB0b2tlbiBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcG9saWN5IHRvIHRva2VuLlxuICAvLyA0LiBSZXR1cm4gcG9saWN5LlxuICBjb25zdCBwb2xpY3lIZWFkZXIgPSAoaGVhZGVyc0xpc3QuZ2V0KCdyZWZlcnJlci1wb2xpY3knKSA/PyAnJykuc3BsaXQoJywnKVxuXG4gIC8vIE5vdGU6IEFzIHRoZSByZWZlcnJlci1wb2xpY3kgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcG9saWNpZXNcbiAgLy8gc2VwYXJhdGVkIGJ5IGNvbW1hLCB3ZSBuZWVkIHRvIGxvb3AgdGhyb3VnaCBhbGwgb2YgdGhlbVxuICAvLyBhbmQgcGljayB0aGUgZmlyc3QgdmFsaWQgb25lLlxuICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcnJlci1Qb2xpY3kjc3BlY2lmeV9hX2ZhbGxiYWNrX3BvbGljeVxuICBsZXQgcG9saWN5ID0gJydcbiAgaWYgKHBvbGljeUhlYWRlci5sZW5ndGggPiAwKSB7XG4gICAgLy8gVGhlIHJpZ2h0LW1vc3QgcG9saWN5IHRha2VzIHByZWNlZGVuY2UuXG4gICAgLy8gVGhlIGxlZnQtbW9zdCBwb2xpY3kgaXMgdGhlIGZhbGxiYWNrLlxuICAgIGZvciAobGV0IGkgPSBwb2xpY3lIZWFkZXIubGVuZ3RoOyBpICE9PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHRva2VuID0gcG9saWN5SGVhZGVyW2kgLSAxXS50cmltKClcbiAgICAgIGlmIChyZWZlcnJlclBvbGljeVRva2Vucy5oYXModG9rZW4pKSB7XG4gICAgICAgIHBvbGljeSA9IHRva2VuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMi4gSWYgcG9saWN5IGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gcG9saWN5LlxuICBpZiAocG9saWN5ICE9PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBwb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeS1jaGVja1xuZnVuY3Rpb24gY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ2FsbG93ZWQnXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWNvcnMtY2hlY2tcbmZ1bmN0aW9uIGNvcnNDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC10YW8tY2hlY2tcbmZ1bmN0aW9uIFRBT0NoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ3N1Y2Nlc3MnXG59XG5cbmZ1bmN0aW9uIGFwcGVuZEZldGNoTWV0YWRhdGEgKGh0dHBSZXF1ZXN0KSB7XG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtZGVzdC1oZWFkZXJcbiAgLy8gIFRPRE9cblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLW1vZGUtaGVhZGVyXG5cbiAgLy8gIDEuIEFzc2VydDogclx1MjAxOXMgdXJsIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLlxuICAvLyAgVE9ET1xuXG4gIC8vICAyLiBMZXQgaGVhZGVyIGJlIGEgU3RydWN0dXJlZCBIZWFkZXIgd2hvc2UgdmFsdWUgaXMgYSB0b2tlbi5cbiAgbGV0IGhlYWRlciA9IG51bGxcblxuICAvLyAgMy4gU2V0IGhlYWRlclx1MjAxOXMgdmFsdWUgdG8gclx1MjAxOXMgbW9kZS5cbiAgaGVhZGVyID0gaHR0cFJlcXVlc3QubW9kZVxuXG4gIC8vICA0LiBTZXQgYSBzdHJ1Y3R1cmVkIGZpZWxkIHZhbHVlIGBTZWMtRmV0Y2gtTW9kZWAvaGVhZGVyIGluIHJcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5zZXQoJ3NlYy1mZXRjaC1tb2RlJywgaGVhZGVyKVxuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtc2l0ZS1oZWFkZXJcbiAgLy8gIFRPRE9cblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXVzZXItaGVhZGVyXG4gIC8vICBUT0RPXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhcHBlbmQtYS1yZXF1ZXN0LW9yaWdpbi1oZWFkZXJcbmZ1bmN0aW9uIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHNlcmlhbGl6ZWRPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBieXRlLXNlcmlhbGl6aW5nIGEgcmVxdWVzdCBvcmlnaW4gd2l0aCByZXF1ZXN0LlxuICBsZXQgc2VyaWFsaXplZE9yaWdpbiA9IHJlcXVlc3Qub3JpZ2luXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgb3IgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIndlYnNvY2tldFwiLCB0aGVuIGFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0Jykge1xuICAgIGlmIChzZXJpYWxpemVkT3JpZ2luKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbilcbiAgICB9XG5cbiAgLy8gMy4gT3RoZXJ3aXNlLCBpZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbmVpdGhlciBgR0VUYCBub3IgYEhFQURgLCB0aGVuOlxuICB9IGVsc2UgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnKSB7XG4gICAgLy8gMS4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeTpcbiAgICBzd2l0Y2ggKHJlcXVlc3QucmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyJzpcbiAgICAgICAgLy8gU2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6XG4gICAgICBjYXNlICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIGEgdHVwbGUgb3JpZ2luLCBpdHMgc2NoZW1lIGlzIFwiaHR0cHNcIiwgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwiaHR0cHNcIiwgdGhlbiBzZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIGlmIChyZXF1ZXN0Lm9yaWdpbiAmJiB1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Lm9yaWdpbikgJiYgIXVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4sIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAoIXNhbWVPcmlnaW4ocmVxdWVzdCwgcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUgKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtYW4tb3BhcXVlLXRpbWluZy1pbmZvXG5mdW5jdGlvbiBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvICh0aW1pbmdJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIHJlZGlyZWN0U3RhcnRUaW1lOiAwLFxuICAgIHJlZGlyZWN0RW5kVGltZTogMCxcbiAgICBwb3N0UmVkaXJlY3RTdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgZmluYWxTZXJ2aWNlV29ya2VyU3RhcnRUaW1lOiAwLFxuICAgIGZpbmFsTmV0d29ya1Jlc3BvbnNlU3RhcnRUaW1lOiAwLFxuICAgIGZpbmFsTmV0d29ya1JlcXVlc3RTdGFydFRpbWU6IDAsXG4gICAgZW5kVGltZTogMCxcbiAgICBlbmNvZGVkQm9keVNpemU6IDAsXG4gICAgZGVjb2RlZEJvZHlTaXplOiAwLFxuICAgIGZpbmFsQ29ubmVjdGlvblRpbWluZ0luZm86IG51bGxcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNwb2xpY3ktY29udGFpbmVyXG5mdW5jdGlvbiBtYWtlUG9saWN5Q29udGFpbmVyICgpIHtcbiAgLy8gTm90ZTogdGhlIGZldGNoIHNwZWMgZG9lc24ndCBtYWtlIHVzZSBvZiBlbWJlZGRlciBwb2xpY3kgb3IgQ1NQIGxpc3RcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjY2xvbmUtYS1wb2xpY3ktY29udGFpbmVyXG5mdW5jdGlvbiBjbG9uZVBvbGljeUNvbnRhaW5lciAocG9saWN5Q29udGFpbmVyKSB7XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6IHBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNkZXRlcm1pbmUtcmVxdWVzdHMtcmVmZXJyZXJcbmZ1bmN0aW9uIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHBvbGljeSBiZSByZXF1ZXN0J3MgcmVmZXJyZXIgcG9saWN5LlxuICBjb25zdCBwb2xpY3kgPSByZXF1ZXN0LnJlZmVycmVyUG9saWN5XG5cbiAgLy8gTm90ZTogcG9saWN5IGNhbm5vdCAoc2hvdWxkbid0KSBiZSBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAgYXNzZXJ0KHBvbGljeSlcblxuICAvLyAyLiBMZXQgZW52aXJvbm1lbnQgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50LlxuXG4gIGxldCByZWZlcnJlclNvdXJjZSA9IG51bGxcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXI6XG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIE5vdGU6IG5vZGUgaXNuJ3QgYSBicm93c2VyIGFuZCBkb2Vzbid0IGltcGxlbWVudCBkb2N1bWVudC9pZnJhbWVzLFxuICAgIC8vIHNvIHdlIGJ5cGFzcyB0aGlzIHN0ZXAgYW5kIHJlcGxhY2UgaXQgd2l0aCBvdXIgb3duLlxuXG4gICAgY29uc3QgZ2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIGlmICghZ2xvYmFsT3JpZ2luIHx8IGdsb2JhbE9yaWdpbi5vcmlnaW4gPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICB9XG5cbiAgICAvLyBub3RlOiB3ZSBuZWVkIHRvIGNsb25lIGl0IGFzIGl0J3MgbXV0YXRlZFxuICAgIHJlZmVycmVyU291cmNlID0gbmV3IFVSTChnbG9iYWxPcmlnaW4pXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIC8vIExldCByZWZlcnJlclNvdXJjZSBiZSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgICByZWZlcnJlclNvdXJjZSA9IHJlcXVlc3QucmVmZXJyZXJcbiAgfVxuXG4gIC8vIDQuIExldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlclVSTCBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3JcbiAgLy8gICAgdXNlIGFzIGEgcmVmZXJyZXIuXG4gIGxldCByZWZlcnJlclVSTCA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UpXG5cbiAgLy8gNS4gTGV0IHJlZmVycmVyT3JpZ2luIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvciB1c2UgYXNcbiAgLy8gICAgYSByZWZlcnJlciwgd2l0aCB0aGUgb3JpZ2luLW9ubHkgZmxhZyBzZXQgdG8gdHJ1ZS5cbiAgY29uc3QgcmVmZXJyZXJPcmlnaW4gPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlLCB0cnVlKVxuXG4gIC8vIDYuIElmIHRoZSByZXN1bHQgb2Ygc2VyaWFsaXppbmcgcmVmZXJyZXJVUkwgaXMgYSBzdHJpbmcgd2hvc2UgbGVuZ3RoIGlzXG4gIC8vICAgIGdyZWF0ZXIgdGhhbiA0MDk2LCBzZXQgcmVmZXJyZXJVUkwgdG8gcmVmZXJyZXJPcmlnaW4uXG4gIGlmIChyZWZlcnJlclVSTC50b1N0cmluZygpLmxlbmd0aCA+IDQwOTYpIHtcbiAgICByZWZlcnJlclVSTCA9IHJlZmVycmVyT3JpZ2luXG4gIH1cblxuICBjb25zdCBhcmVTYW1lT3JpZ2luID0gc2FtZU9yaWdpbihyZXF1ZXN0LCByZWZlcnJlclVSTClcbiAgY29uc3QgaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID0gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlZmVycmVyVVJMKSAmJlxuICAgICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVxdWVzdC51cmwpXG5cbiAgLy8gOC4gRXhlY3V0ZSB0aGUgc3dpdGNoIHN0YXRlbWVudHMgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgcG9saWN5OlxuICBzd2l0Y2ggKHBvbGljeSkge1xuICAgIGNhc2UgJ29yaWdpbic6IHJldHVybiByZWZlcnJlck9yaWdpbiAhPSBudWxsID8gcmVmZXJyZXJPcmlnaW4gOiBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlLCB0cnVlKVxuICAgIGNhc2UgJ3Vuc2FmZS11cmwnOiByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICByZXR1cm4gYXJlU2FtZU9yaWdpbiA/IHJlZmVycmVyT3JpZ2luIDogJ25vLXJlZmVycmVyJ1xuICAgIGNhc2UgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICByZXR1cm4gYXJlU2FtZU9yaWdpbiA/IHJlZmVycmVyVVJMIDogcmVmZXJyZXJPcmlnaW5cbiAgICBjYXNlICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzoge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIDEuIElmIHRoZSBvcmlnaW4gb2YgcmVmZXJyZXJVUkwgYW5kIHRoZSBvcmlnaW4gb2YgcmVxdWVzdFx1MjAxOXMgY3VycmVudFxuICAgICAgLy8gICAgVVJMIGFyZSB0aGUgc2FtZSwgdGhlbiByZXR1cm4gcmVmZXJyZXJVUkwuXG4gICAgICBpZiAoc2FtZU9yaWdpbihyZWZlcnJlclVSTCwgY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZCByZXF1ZXN0XHUyMDE5c1xuICAgICAgLy8gICAgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLCB0aGVuIHJldHVybiBub1xuICAgICAgLy8gICAgcmVmZXJyZXIuXG4gICAgICBpZiAoaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlZmVycmVyVVJMKSAmJiAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFJldHVybiByZWZlcnJlck9yaWdpbi5cbiAgICAgIHJldHVybiByZWZlcnJlck9yaWdpblxuICAgIH1cbiAgICBjYXNlICdzdHJpY3Qtb3JpZ2luJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICAgKiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsXG4gICAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICAgKi9cbiAgICBjYXNlICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSc6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgKiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsXG4gICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgKi9cblxuICAgIGRlZmF1bHQ6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHJldHVybiBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPyAnbm8tcmVmZXJyZXInIDogcmVmZXJyZXJPcmlnaW5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3N0cmlwLXVybFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gb3JpZ2luT25seVxuICovXG5mdW5jdGlvbiBzdHJpcFVSTEZvclJlZmVycmVyICh1cmwsIG9yaWdpbk9ubHkpIHtcbiAgLy8gMS4gQXNzZXJ0OiB1cmwgaXMgYSBVUkwuXG4gIGFzc2VydCh1cmwgaW5zdGFuY2VvZiBVUkwpXG5cbiAgLy8gMi4gSWYgdXJsXHUyMDE5cyBzY2hlbWUgaXMgYSBsb2NhbCBzY2hlbWUsIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICBpZiAodXJsLnByb3RvY29sID09PSAnZmlsZTonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2Fib3V0OicgfHwgdXJsLnByb3RvY29sID09PSAnYmxhbms6Jykge1xuICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gIH1cblxuICAvLyAzLiBTZXQgdXJsXHUyMDE5cyB1c2VybmFtZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwudXNlcm5hbWUgPSAnJ1xuXG4gIC8vIDQuIFNldCB1cmxcdTIwMTlzIHBhc3N3b3JkIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC5wYXNzd29yZCA9ICcnXG5cbiAgLy8gNS4gU2V0IHVybFx1MjAxOXMgZnJhZ21lbnQgdG8gbnVsbC5cbiAgdXJsLmhhc2ggPSAnJ1xuXG4gIC8vIDYuIElmIHRoZSBvcmlnaW4tb25seSBmbGFnIGlzIHRydWUsIHRoZW46XG4gIGlmIChvcmlnaW5Pbmx5KSB7XG4gICAgLy8gMS4gU2V0IHVybFx1MjAxOXMgcGF0aCB0byBcdTAwQUIgdGhlIGVtcHR5IHN0cmluZyBcdTAwQkIuXG4gICAgdXJsLnBhdGhuYW1lID0gJydcblxuICAgIC8vIDIuIFNldCB1cmxcdTIwMTlzIHF1ZXJ5IHRvIG51bGwuXG4gICAgdXJsLnNlYXJjaCA9ICcnXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdXJsLlxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeSAodXJsKSB7XG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIElmIGNoaWxkIG9mIGFib3V0LCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLmhyZWYgPT09ICdhYm91dDpibGFuaycgfHwgdXJsLmhyZWYgPT09ICdhYm91dDpzcmNkb2MnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIElmIHNjaGVtZSBpcyBkYXRhLCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLnByb3RvY29sID09PSAnZGF0YTonKSByZXR1cm4gdHJ1ZVxuXG4gIC8vIElmIGZpbGUsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicpIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIGlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSh1cmwub3JpZ2luKVxuXG4gIGZ1bmN0aW9uIGlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSAob3JpZ2luKSB7XG4gICAgLy8gSWYgb3JpZ2luIGlzIGV4cGxpY2l0bHkgbnVsbCwgcmV0dXJuIGZhbHNlXG4gICAgaWYgKG9yaWdpbiA9PSBudWxsIHx8IG9yaWdpbiA9PT0gJ251bGwnKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IG9yaWdpbkFzVVJMID0gbmV3IFVSTChvcmlnaW4pXG5cbiAgICAvLyBJZiBzZWN1cmUsIHJldHVybiB0cnVlXG4gICAgaWYgKG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnaHR0cHM6JyB8fCBvcmlnaW5Bc1VSTC5wcm90b2NvbCA9PT0gJ3dzczonKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGxvY2FsaG9zdCBvciB2YXJpYW50cywgcmV0dXJuIHRydWVcbiAgICBpZiAoL14xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF5cXFsoPzowKjopKj86PzAqMVxcXSQvLnRlc3Qob3JpZ2luQXNVUkwuaG9zdG5hbWUpIHx8XG4gICAgIChvcmlnaW5Bc1VSTC5ob3N0bmFtZSA9PT0gJ2xvY2FsaG9zdCcgfHwgb3JpZ2luQXNVUkwuaG9zdG5hbWUuaW5jbHVkZXMoJ2xvY2FsaG9zdC4nKSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lLmVuZHNXaXRoKCcubG9jYWxob3N0JykpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGFueSBvdGhlciwgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNkb2VzLXJlc3BvbnNlLW1hdGNoLW1ldGFkYXRhbGlzdFxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IG1ldGFkYXRhTGlzdFxuICovXG5mdW5jdGlvbiBieXRlc01hdGNoIChieXRlcywgbWV0YWRhdGFMaXN0KSB7XG4gIC8vIElmIG5vZGUgaXMgbm90IGJ1aWx0IHdpdGggT3BlblNTTCBzdXBwb3J0LCB3ZSBjYW5ub3QgY2hlY2tcbiAgLy8gYSByZXF1ZXN0J3MgaW50ZWdyaXR5LCBzbyBhbGxvdyBpdCBieSBkZWZhdWx0ICh0aGUgc3BlYyB3aWxsXG4gIC8vIGFsbG93IHJlcXVlc3RzIGlmIGFuIGludmFsaWQgaGFzaCBpcyBnaXZlbiwgYXMgcHJlY2VkZW5jZSkuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZjogb25seSBpZiBub2RlIGlzIGJ1aWx0IHdpdGggLS13aXRob3V0LXNzbCAqL1xuICBpZiAoY3J5cHRvID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMS4gTGV0IHBhcnNlZE1ldGFkYXRhIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBtZXRhZGF0YUxpc3QuXG4gIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0gcGFyc2VNZXRhZGF0YShtZXRhZGF0YUxpc3QpXG5cbiAgLy8gMi4gSWYgcGFyc2VkTWV0YWRhdGEgaXMgbm8gbWV0YWRhdGEsIHJldHVybiB0cnVlLlxuICBpZiAocGFyc2VkTWV0YWRhdGEgPT09ICdubyBtZXRhZGF0YScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gSWYgcmVzcG9uc2UgaXMgbm90IGVsaWdpYmxlIGZvciBpbnRlZ3JpdHkgdmFsaWRhdGlvbiwgcmV0dXJuIGZhbHNlLlxuICAvLyBUT0RPXG5cbiAgLy8gNC4gSWYgcGFyc2VkTWV0YWRhdGEgaXMgdGhlIGVtcHR5IHNldCwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gNS4gTGV0IG1ldGFkYXRhIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgc3Ryb25nZXN0XG4gIC8vICAgIG1ldGFkYXRhIGZyb20gcGFyc2VkTWV0YWRhdGEuXG4gIGNvbnN0IHN0cm9uZ2VzdCA9IGdldFN0cm9uZ2VzdE1ldGFkYXRhKHBhcnNlZE1ldGFkYXRhKVxuICBjb25zdCBtZXRhZGF0YSA9IGZpbHRlck1ldGFkYXRhTGlzdEJ5QWxnb3JpdGhtKHBhcnNlZE1ldGFkYXRhLCBzdHJvbmdlc3QpXG5cbiAgLy8gNi4gRm9yIGVhY2ggaXRlbSBpbiBtZXRhZGF0YTpcbiAgZm9yIChjb25zdCBpdGVtIG9mIG1ldGFkYXRhKSB7XG4gICAgLy8gMS4gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGFsZ29yaXRobSA9IGl0ZW0uYWxnb1xuXG4gICAgLy8gMi4gTGV0IGV4cGVjdGVkVmFsdWUgYmUgdGhlIHZhbCBjb21wb25lbnQgb2YgaXRlbS5cbiAgICBjb25zdCBleHBlY3RlZFZhbHVlID0gaXRlbS5oYXNoXG5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvY29tbWl0L2U0YzVjYzdhNWU0ODA5MzIyMDUyOGRmZGQxYzQwMTJkYzM4MzdhMGVcbiAgICAvLyBcImJlIGxpYmVyYWwgd2l0aCBwYWRkaW5nXCIuIFRoaXMgaXMgYW5ub3lpbmcsIGFuZCBpdCdzIG5vdCBldmVuIGluIHRoZSBzcGVjLlxuXG4gICAgLy8gMy4gTGV0IGFjdHVhbFZhbHVlIGJlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgYWxnb3JpdGhtIHRvIGJ5dGVzLlxuICAgIGxldCBhY3R1YWxWYWx1ZSA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSkudXBkYXRlKGJ5dGVzKS5kaWdlc3QoJ2Jhc2U2NCcpXG5cbiAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICc9Jykge1xuICAgICAgaWYgKGFjdHVhbFZhbHVlW2FjdHVhbFZhbHVlLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWUuc2xpY2UoMCwgLTEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgYWN0dWFsVmFsdWUgaXMgYSBjYXNlLXNlbnNpdGl2ZSBtYXRjaCBmb3IgZXhwZWN0ZWRWYWx1ZSxcbiAgICAvLyAgICByZXR1cm4gdHJ1ZS5cbiAgICBpZiAoY29tcGFyZUJhc2U2NE1peGVkKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBSZXR1cm4gZmFsc2UuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jZ3JhbW1hcmRlZi1oYXNoLXdpdGgtb3B0aW9uc1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUDIvI3NvdXJjZS1saXN0LXN5bnRheFxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzUyMzQjYXBwZW5kaXgtQi4xXG5jb25zdCBwYXJzZUhhc2hXaXRoT3B0aW9ucyA9IC8oPzxhbGdvPnNoYTI1NnxzaGEzODR8c2hhNTEyKS0oKD88aGFzaD5bQS1aYS16MC05Ky9dK3xbQS1aYS16MC05Xy1dKyk9ezAsMn0oPzpcXHN8JCkoICtbIS1+XSopPyk/L2lcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNwYXJzZS1tZXRhZGF0YVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWV0YWRhdGEgKG1ldGFkYXRhKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIGVtcHR5IHNldC5cbiAgLyoqIEB0eXBlIHt7IGFsZ286IHN0cmluZywgaGFzaDogc3RyaW5nIH1bXX0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cblxuICAvLyAyLiBMZXQgZW1wdHkgYmUgZXF1YWwgdG8gdHJ1ZS5cbiAgbGV0IGVtcHR5ID0gdHJ1ZVxuXG4gIC8vIDMuIEZvciBlYWNoIHRva2VuIHJldHVybmVkIGJ5IHNwbGl0dGluZyBtZXRhZGF0YSBvbiBzcGFjZXM6XG4gIGZvciAoY29uc3QgdG9rZW4gb2YgbWV0YWRhdGEuc3BsaXQoJyAnKSkge1xuICAgIC8vIDEuIFNldCBlbXB0eSB0byBmYWxzZS5cbiAgICBlbXB0eSA9IGZhbHNlXG5cbiAgICAvLyAyLiBQYXJzZSB0b2tlbiBhcyBhIGhhc2gtd2l0aC1vcHRpb25zLlxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gcGFyc2VIYXNoV2l0aE9wdGlvbnMuZXhlYyh0b2tlbilcblxuICAgIC8vIDMuIElmIHRva2VuIGRvZXMgbm90IHBhcnNlLCBjb250aW51ZSB0byB0aGUgbmV4dCB0b2tlbi5cbiAgICBpZiAoXG4gICAgICBwYXJzZWRUb2tlbiA9PT0gbnVsbCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHBhcnNlZFRva2VuLmdyb3Vwcy5hbGdvID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5vdGU6IENocm9taXVtIGJsb2NrcyB0aGUgcmVxdWVzdCBhdCB0aGlzIHBvaW50LCBidXQgRmlyZWZveFxuICAgICAgLy8gZ2l2ZXMgYSB3YXJuaW5nIHRoYXQgYW4gaW52YWxpZCBpbnRlZ3JpdHkgd2FzIGdpdmVuLiBUaGVcbiAgICAgIC8vIGNvcnJlY3QgYmVoYXZpb3IgaXMgdG8gaWdub3JlIHRoZXNlLCBhbmQgc3Vic2VxdWVudGx5IG5vdFxuICAgICAgLy8gY2hlY2sgdGhlIGludGVncml0eSBvZiB0aGUgcmVzb3VyY2UuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIDQuIExldCBhbGdvcml0aG0gYmUgdGhlIGhhc2gtYWxnbyBjb21wb25lbnQgb2YgdG9rZW4uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNS4gSWYgYWxnb3JpdGhtIGlzIGEgaGFzaCBmdW5jdGlvbiByZWNvZ25pemVkIGJ5IHRoZSB1c2VyXG4gICAgLy8gICAgYWdlbnQsIGFkZCB0aGUgcGFyc2VkIHRva2VuIHRvIHJlc3VsdC5cbiAgICBpZiAoc3VwcG9ydGVkSGFzaGVzLmluY2x1ZGVzKGFsZ29yaXRobSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHBhcnNlZFRva2VuLmdyb3VwcylcbiAgICB9XG4gIH1cblxuICAvLyA0LiBSZXR1cm4gbm8gbWV0YWRhdGEgaWYgZW1wdHkgaXMgdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiByZXN1bHQuXG4gIGlmIChlbXB0eSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiAnbm8gbWV0YWRhdGEnXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHBhcmFtIHt7IGFsZ286ICdzaGEyNTYnIHwgJ3NoYTM4NCcgfCAnc2hhNTEyJyB9W119IG1ldGFkYXRhTGlzdFxuICovXG5mdW5jdGlvbiBnZXRTdHJvbmdlc3RNZXRhZGF0YSAobWV0YWRhdGFMaXN0KSB7XG4gIC8vIExldCBhbGdvcml0aG0gYmUgdGhlIGFsZ28gY29tcG9uZW50IG9mIHRoZSBmaXJzdCBpdGVtIGluIG1ldGFkYXRhTGlzdC5cbiAgLy8gQ2FuIGJlIHNoYTI1NlxuICBsZXQgYWxnb3JpdGhtID0gbWV0YWRhdGFMaXN0WzBdLmFsZ29cbiAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGE1MTIsIHRoZW4gaXQgaXMgdGhlIHN0cm9uZ2VzdFxuICAvLyBhbmQgd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseVxuICBpZiAoYWxnb3JpdGhtWzNdID09PSAnNScpIHtcbiAgICByZXR1cm4gYWxnb3JpdGhtXG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGE1MTIsIHRoZW4gaXQgaXMgdGhlIHN0cm9uZ2VzdFxuICAgIC8vIGFuZCB3ZSBjYW4gYnJlYWsgdGhlIGxvb3AgaW1tZWRpYXRlbHlcbiAgICBpZiAobWV0YWRhdGEuYWxnb1szXSA9PT0gJzUnKSB7XG4gICAgICBhbGdvcml0aG0gPSAnc2hhNTEyJ1xuICAgICAgYnJlYWtcbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTM4NCwgdGhlbiBhIHBvdGVudGlhbCBzaGEyNTYgb3Igc2hhMzg0IGlzIGlnbm9yZWRcbiAgICB9IGVsc2UgaWYgKGFsZ29yaXRobVszXSA9PT0gJzMnKSB7XG4gICAgICBjb250aW51ZVxuICAgIC8vIGFsZ29yaXRobSBpcyBzaGEyNTYsIGNoZWNrIGlmIGFsZ29yaXRobSBpcyBzaGEzODQgYW5kIGlmIHNvLCBzZXQgaXQgYXNcbiAgICAvLyB0aGUgc3Ryb25nZXN0XG4gICAgfSBlbHNlIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnMycpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGEzODQnXG4gICAgfVxuICB9XG4gIHJldHVybiBhbGdvcml0aG1cbn1cblxuZnVuY3Rpb24gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0gKG1ldGFkYXRhTGlzdCwgYWxnb3JpdGhtKSB7XG4gIGlmIChtZXRhZGF0YUxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhTGlzdFxuICB9XG5cbiAgbGV0IHBvcyA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhZGF0YUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobWV0YWRhdGFMaXN0W2ldLmFsZ28gPT09IGFsZ29yaXRobSkge1xuICAgICAgbWV0YWRhdGFMaXN0W3BvcysrXSA9IG1ldGFkYXRhTGlzdFtpXVxuICAgIH1cbiAgfVxuXG4gIG1ldGFkYXRhTGlzdC5sZW5ndGggPSBwb3NcblxuICByZXR1cm4gbWV0YWRhdGFMaXN0XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIGJhc2U2NCBzdHJpbmdzLCBhbGxvd2luZyBmb3IgYmFzZTY0dXJsXG4gKiBpbiB0aGUgc2Vjb25kIHN0cmluZy5cbiAqXG4qIEBwYXJhbSB7c3RyaW5nfSBhY3R1YWxWYWx1ZSBhbHdheXMgYmFzZTY0XG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWRWYWx1ZSBiYXNlNjQgb3IgYmFzZTY0dXJsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJhc2U2NE1peGVkIChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSkge1xuICBpZiAoYWN0dWFsVmFsdWUubGVuZ3RoICE9PSBleHBlY3RlZFZhbHVlLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsVmFsdWUubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYWN0dWFsVmFsdWVbaV0gIT09IGV4cGVjdGVkVmFsdWVbaV0pIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGFjdHVhbFZhbHVlW2ldID09PSAnKycgJiYgZXhwZWN0ZWRWYWx1ZVtpXSA9PT0gJy0nKSB8fFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcvJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnXycpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtdXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0cy8jdXBncmFkZS1yZXF1ZXN0XG5mdW5jdGlvbiB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwgKHJlcXVlc3QpIHtcbiAgLy8gVE9ET1xufVxuXG4vKipcbiAqIEBsaW5rIHtodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNzYW1lLW9yaWdpbn1cbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICovXG5mdW5jdGlvbiBzYW1lT3JpZ2luIChBLCBCKSB7XG4gIC8vIDEuIElmIEEgYW5kIEIgYXJlIHRoZSBzYW1lIG9wYXF1ZSBvcmlnaW4sIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLm9yaWdpbiA9PT0gQi5vcmlnaW4gJiYgQS5vcmlnaW4gPT09ICdudWxsJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAyLiBJZiBBIGFuZCBCIGFyZSBib3RoIHR1cGxlIG9yaWdpbnMgYW5kIHRoZWlyIHNjaGVtZXMsXG4gIC8vICAgIGhvc3RzLCBhbmQgcG9ydCBhcmUgaWRlbnRpY2FsLCB0aGVuIHJldHVybiB0cnVlLlxuICBpZiAoQS5wcm90b2NvbCA9PT0gQi5wcm90b2NvbCAmJiBBLmhvc3RuYW1lID09PSBCLmhvc3RuYW1lICYmIEEucG9ydCA9PT0gQi5wb3J0KSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlZmVycmVkUHJvbWlzZSAoKSB7XG4gIGxldCByZXNcbiAgbGV0IHJlalxuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcyA9IHJlc29sdmVcbiAgICByZWogPSByZWplY3RcbiAgfSlcblxuICByZXR1cm4geyBwcm9taXNlLCByZXNvbHZlOiByZXMsIHJlamVjdDogcmVqIH1cbn1cblxuZnVuY3Rpb24gaXNBYm9ydGVkIChmZXRjaFBhcmFtcykge1xuICByZXR1cm4gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zdGF0ZSA9PT0gJ2Fib3J0ZWQnXG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsbGVkIChmZXRjaFBhcmFtcykge1xuICByZXR1cm4gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zdGF0ZSA9PT0gJ2Fib3J0ZWQnIHx8XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zdGF0ZSA9PT0gJ3Rlcm1pbmF0ZWQnXG59XG5cbmNvbnN0IG5vcm1hbGl6ZU1ldGhvZFJlY29yZCA9IHtcbiAgZGVsZXRlOiAnREVMRVRFJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbiAgZ2V0OiAnR0VUJyxcbiAgR0VUOiAnR0VUJyxcbiAgaGVhZDogJ0hFQUQnLFxuICBIRUFEOiAnSEVBRCcsXG4gIG9wdGlvbnM6ICdPUFRJT05TJyxcbiAgT1BUSU9OUzogJ09QVElPTlMnLFxuICBwb3N0OiAnUE9TVCcsXG4gIFBPU1Q6ICdQT1NUJyxcbiAgcHV0OiAnUFVUJyxcbiAgUFVUOiAnUFVUJ1xufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihub3JtYWxpemVNZXRob2RSZWNvcmQsIG51bGwpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1tZXRob2Qtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZCAobWV0aG9kKSB7XG4gIHJldHVybiBub3JtYWxpemVNZXRob2RSZWNvcmRbbWV0aG9kLnRvTG93ZXJDYXNlKCldID8/IG1ldGhvZFxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtamF2YXNjcmlwdC12YWx1ZS10by1hLWpzb24tc3RyaW5nXG5mdW5jdGlvbiBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcgKHZhbHVlKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgPyBDYWxsKCVKU09OLnN0cmluZ2lmeSUsIHVuZGVmaW5lZCwgXHUwMEFCIHZhbHVlIFx1MDBCQikuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdFx1MjAxOXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3RcdTIwMTlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdFx1MjAxOXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3RcdTIwMTlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXRcdTIwMTlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dFx1MjAxOXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dFx1MjAxOXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrSGVhZGVyczogU3ltYm9sKCdoZWFkZXJzJyksXG4gIGtTaWduYWw6IFN5bWJvbCgnc2lnbmFsJyksXG4gIGtTdGF0ZTogU3ltYm9sKCdzdGF0ZScpLFxuICBrR3VhcmQ6IFN5bWJvbCgnZ3VhcmQnKSxcbiAga1JlYWxtOiBTeW1ib2woJ3JlYWxtJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGhhc093biwgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi90eXBlcy93ZWJpZGwnKS5XZWJpZGx9ICovXG5jb25zdCB3ZWJpZGwgPSB7fVxud2ViaWRsLmNvbnZlcnRlcnMgPSB7fVxud2ViaWRsLnV0aWwgPSB7fVxud2ViaWRsLmVycm9ycyA9IHt9XG5cbndlYmlkbC5lcnJvcnMuZXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYCR7bWVzc2FnZS5oZWFkZXJ9OiAke21lc3NhZ2UubWVzc2FnZX1gKVxufVxuXG53ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBwbHVyYWwgPSBjb250ZXh0LnR5cGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJyBvbmUgb2YnXG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgIGAke2NvbnRleHQuYXJndW1lbnR9IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG9gICtcbiAgICBgJHtwbHVyYWx9OiAke2NvbnRleHQudHlwZXMuam9pbignLCAnKX0uYFxuXG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbndlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2U6IGBcIiR7Y29udGV4dC52YWx1ZX1cIiBpcyBhbiBpbnZhbGlkICR7Y29udGV4dC50eXBlfS5gXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaW1wbGVtZW50c1xud2ViaWRsLmJyYW5kQ2hlY2sgPSBmdW5jdGlvbiAoViwgSSwgb3B0cyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0cz8uc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBJKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgaW52b2NhdGlvbicpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFY/LltTeW1ib2wudG9TdHJpbmdUYWddID09PSBJLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddXG4gIH1cbn1cblxud2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2sgPSBmdW5jdGlvbiAoeyBsZW5ndGggfSwgbWluLCBjdHgpIHtcbiAgaWYgKGxlbmd0aCA8IG1pbikge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIG1lc3NhZ2U6IGAke21pbn0gYXJndW1lbnQke21pbiAhPT0gMSA/ICdzJyA6ICcnfSByZXF1aXJlZCwgYCArXG4gICAgICAgICAgICAgICBgYnV0JHtsZW5ndGggPyAnIG9ubHknIDogJyd9ICR7bGVuZ3RofSBmb3VuZC5gLFxuICAgICAgLi4uY3R4XG4gICAgfSlcbiAgfVxufVxuXG53ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiAnVHlwZUVycm9yJyxcbiAgICBtZXNzYWdlOiAnSWxsZWdhbCBjb25zdHJ1Y3RvcidcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xud2ViaWRsLnV0aWwuVHlwZSA9IGZ1bmN0aW9uIChWKSB7XG4gIHN3aXRjaCAodHlwZW9mIFYpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gJ1VuZGVmaW5lZCdcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuICdCb29sZWFuJ1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiAnU3RyaW5nJ1xuICAgIGNhc2UgJ3N5bWJvbCc6IHJldHVybiAnU3ltYm9sJ1xuICAgIGNhc2UgJ251bWJlcic6IHJldHVybiAnTnVtYmVyJ1xuICAgIGNhc2UgJ2JpZ2ludCc6IHJldHVybiAnQmlnSW50J1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ051bGwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnT2JqZWN0J1xuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWNvbnZlcnR0b2ludFxud2ViaWRsLnV0aWwuQ29udmVydFRvSW50ID0gZnVuY3Rpb24gKFYsIGJpdExlbmd0aCwgc2lnbmVkbmVzcywgb3B0cyA9IHt9KSB7XG4gIGxldCB1cHBlckJvdW5kXG4gIGxldCBsb3dlckJvdW5kXG5cbiAgLy8gMS4gSWYgYml0TGVuZ3RoIGlzIDY0LCB0aGVuOlxuICBpZiAoYml0TGVuZ3RoID09PSA2NCkge1xuICAgIC8vIDEuIExldCB1cHBlckJvdW5kIGJlIDJeNTMgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDFcblxuICAgIC8vIDIuIElmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuIGxldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIGxvd2VyQm91bmQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSBsZXQgbG93ZXJCb3VuZCBiZSBcdTIyMTIyXjUzICsgMS5cbiAgICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgNTMpICsgMVxuICAgIH1cbiAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbjpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgbG93ZXJCb3VuZCA9IDBcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIC0yXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIGJpdExlbmd0aCkgLSAxXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMSBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxXG4gIH1cblxuICAvLyA0LiBMZXQgeCBiZSA/IFRvTnVtYmVyKFYpLlxuICBsZXQgeCA9IE51bWJlcihWKVxuXG4gIC8vIDUuIElmIHggaXMgXHUyMjEyMCwgdGhlbiBzZXQgeCB0byArMC5cbiAgaWYgKHggPT09IDApIHtcbiAgICB4ID0gMFxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbRW5mb3JjZVJhbmdlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmIChvcHRzLmVuZm9yY2VSYW5nZSA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIElmIHggaXMgTmFOLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhbiBpbnRlZ2VyLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gICAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgICAvLyAzLiBJZiB4IDwgbG93ZXJCb3VuZCBvciB4ID4gdXBwZXJCb3VuZCwgdGhlblxuICAgIC8vICAgIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7bG93ZXJCb3VuZH0tJHt1cHBlckJvdW5kfSwgZ290ICR7eH0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gNy4gSWYgeCBpcyBub3QgTmFOIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJRExcbiAgLy8gICAgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFtDbGFtcF0gZXh0ZW5kZWRcbiAgLy8gICAgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAoIU51bWJlci5pc05hTih4KSAmJiBvcHRzLmNsYW1wID09PSB0cnVlKSB7XG4gICAgLy8gMS4gU2V0IHggdG8gbWluKG1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZCkuXG4gICAgeCA9IE1hdGgubWluKE1hdGgubWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKVxuXG4gICAgLy8gMi4gUm91bmQgeCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBjaG9vc2luZyB0aGVcbiAgICAvLyAgICBldmVuIGludGVnZXIgaWYgaXQgbGllcyBoYWxmd2F5IGJldHdlZW4gdHdvLFxuICAgIC8vICAgIGFuZCBjaG9vc2luZyArMCByYXRoZXIgdGhhbiBcdTIyMTIwLlxuICAgIGlmIChNYXRoLmZsb29yKHgpICUgMiA9PT0gMCkge1xuICAgICAgeCA9IE1hdGguZmxvb3IoeClcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IE1hdGguY2VpbCh4KVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA4LiBJZiB4IGlzIE5hTiwgKzAsICtcdTIyMUUsIG9yIFx1MjIxMlx1MjIxRSwgdGhlbiByZXR1cm4gKzAuXG4gIGlmIChcbiAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAoeCA9PT0gMCAmJiBPYmplY3QuaXMoMCwgeCkpIHx8XG4gICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyA5LiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgLy8gMTAuIFNldCB4IHRvIHggbW9kdWxvIDJeYml0TGVuZ3RoLlxuICB4ID0geCAlIE1hdGgucG93KDIsIGJpdExlbmd0aClcblxuICAvLyAxMS4gSWYgc2lnbmVkbmVzcyBpcyBcInNpZ25lZFwiIGFuZCB4IFx1MjI2NSAyXmJpdExlbmd0aCBcdTIyMTIgMSxcbiAgLy8gICAgdGhlbiByZXR1cm4geCBcdTIyMTIgMl5iaXRMZW5ndGguXG4gIGlmIChzaWduZWRuZXNzID09PSAnc2lnbmVkJyAmJiB4ID49IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxKSB7XG4gICAgcmV0dXJuIHggLSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG4gIH1cblxuICAvLyAxMi4gT3RoZXJ3aXNlLCByZXR1cm4geC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNhYnN0cmFjdC1vcGRlZi1pbnRlZ2VycGFydFxud2ViaWRsLnV0aWwuSW50ZWdlclBhcnQgPSBmdW5jdGlvbiAobikge1xuICAvLyAxLiBMZXQgciBiZSBmbG9vcihhYnMobikpLlxuICBjb25zdCByID0gTWF0aC5mbG9vcihNYXRoLmFicyhuKSlcblxuICAvLyAyLiBJZiBuIDwgMCwgdGhlbiByZXR1cm4gLTEgXHUwMEQ3IHIuXG4gIGlmIChuIDwgMCkge1xuICAgIHJldHVybiAtMSAqIHJcbiAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHIuXG4gIHJldHVybiByXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnU2VxdWVuY2UnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgb2YgdHlwZSAke3dlYmlkbC51dGlsLlR5cGUoVil9IGlzIG5vdCBhbiBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgbWV0aG9kIGJlID8gR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLlxuICAgIC8qKiBAdHlwZSB7R2VuZXJhdG9yfSAqL1xuICAgIGNvbnN0IG1ldGhvZCA9IFY/LltTeW1ib2wuaXRlcmF0b3JdPy4oKVxuICAgIGNvbnN0IHNlcSA9IFtdXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogJ09iamVjdCBpcyBub3QgYW4gaXRlcmF0b3IuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1zZXF1ZW5jZS1mcm9tLWl0ZXJhYmxlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IG1ldGhvZC5uZXh0KClcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgc2VxLnB1c2goY29udmVydGVyKHZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8pID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZWNvcmQnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgb2YgdHlwZSAke3dlYmlkbC51dGlsLlR5cGUoTyl9IGlzIG5vdCBhbiBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi5cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgaWYgKCF0eXBlcy5pc1Byb3h5KE8pKSB7XG4gICAgICAvLyBPYmplY3Qua2V5cyBvbmx5IHJldHVybnMgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoTylcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIFJldHVybiByZXN1bHQuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS5cbiAgICBjb25zdCBrZXlzID0gUmVmbGVjdC5vd25LZXlzKE8pXG5cbiAgICAvLyA0LiBGb3IgZWFjaCBrZXkgb2Yga2V5cy5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuXG4gICAgICBjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5KVxuXG4gICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZTpcbiAgICAgIGlmIChkZXNjPy5lbnVtZXJhYmxlKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuXG4gICAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5Q29udmVydGVyKGtleSlcblxuICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS5cbiAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuXG4gICAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB2YWx1ZUNvbnZlcnRlcihPW2tleV0pXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3VsdFt0eXBlZEtleV0gdG8gdHlwZWRWYWx1ZS5cbiAgICAgICAgcmVzdWx0W3R5cGVkS2V5XSA9IHR5cGVkVmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG53ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyID0gZnVuY3Rpb24gKGkpIHtcbiAgcmV0dXJuIChWLCBvcHRzID0ge30pID0+IHtcbiAgICBpZiAob3B0cy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogaS5uYW1lLFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtWfSB0byBiZSBhbiBpbnN0YW5jZSBvZiAke2kubmFtZX0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gVlxuICB9XG59XG5cbndlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcnMpIHtcbiAgcmV0dXJuIChkaWN0aW9uYXJ5KSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHdlYmlkbC51dGlsLlR5cGUoZGljdGlvbmFyeSlcbiAgICBjb25zdCBkaWN0ID0ge31cblxuICAgIGlmICh0eXBlID09PSAnTnVsbCcgfHwgdHlwZSA9PT0gJ1VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkaWN0XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7ZGljdGlvbmFyeX0gdG8gYmUgb25lIG9mOiBOdWxsLCBVbmRlZmluZWQsIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb3B0aW9ucyBvZiBjb252ZXJ0ZXJzKSB7XG4gICAgICBjb25zdCB7IGtleSwgZGVmYXVsdFZhbHVlLCByZXF1aXJlZCwgY29udmVydGVyIH0gPSBvcHRpb25zXG5cbiAgICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAoIWhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBoYXNPd24ob3B0aW9ucywgJ2RlZmF1bHRWYWx1ZScpXG5cbiAgICAgIC8vIE9ubHkgdXNlIGRlZmF1bHRWYWx1ZSBpZiB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kXG4gICAgICAvLyBhIGRlZmF1bHRWYWx1ZSBvcHRpb25zIHdhcyBwcm92aWRlZC5cbiAgICAgIGlmIChoYXNEZWZhdWx0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgPz8gZGVmYXVsdFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIEEga2V5IGNhbiBiZSBvcHRpb25hbCBhbmQgaGF2ZSBubyBkZWZhdWx0IHZhbHVlLlxuICAgICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIGRvIG5vdCBwZXJmb3JtIGEgY29udmVyc2lvbixcbiAgICAgIC8vIGFuZCBkbyBub3QgYXNzaWduIHRoZSBrZXkgYSB2YWx1ZS5cbiAgICAgIGlmIChyZXF1aXJlZCB8fCBoYXNEZWZhdWx0IHx8IHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSBjb252ZXJ0ZXIodmFsdWUpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9wdGlvbnMuYWxsb3dlZFZhbHVlcyAmJlxuICAgICAgICAgICFvcHRpb25zLmFsbG93ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7dmFsdWV9IGlzIG5vdCBhbiBhY2NlcHRlZCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgJHtvcHRpb25zLmFsbG93ZWRWYWx1ZXMuam9pbignLCAnKX0uYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaWN0XG4gIH1cbn1cblxud2ViaWRsLm51bGxhYmxlQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICByZXR1cm4gKFYpID0+IHtcbiAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFZcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydGVyKFYpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ET01TdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzLmxlZ2FjeU51bGxUb0VtcHR5U3RyaW5nKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAyLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICBpZiAodHlwZW9mIFYgPT09ICdzeW1ib2wnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSBzeW1ib2wgdG8gc3RyaW5nLicpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gdGhlIElETCBET01TdHJpbmcgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZVxuICAvLyAgICBzYW1lIHNlcXVlbmNlIG9mIGNvZGUgdW5pdHMgYXMgdGhlIG9uZSB0aGVcbiAgLy8gICAgRUNNQVNjcmlwdCBTdHJpbmcgdmFsdWUgeCByZXByZXNlbnRzLlxuICByZXR1cm4gU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtQnl0ZVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gVG9TdHJpbmcoVikuXG4gIC8vIE5vdGU6IERPTVN0cmluZyBjb252ZXJ0ZXIgcGVyZm9ybSA/IFRvU3RyaW5nKFYpXG4gIGNvbnN0IHggPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcblxuICAvLyAyLiBJZiB0aGUgdmFsdWUgb2YgYW55IGVsZW1lbnQgb2YgeCBpcyBncmVhdGVyIHRoYW5cbiAgLy8gICAgMjU1LCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgeC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoeC5jaGFyQ29kZUF0KGluZGV4KSA+IDI1NSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGEgQnl0ZVN0cmluZyBiZWNhdXNlIHRoZSBjaGFyYWN0ZXIgYXQgJyArXG4gICAgICAgIGBpbmRleCAke2luZGV4fSBoYXMgYSB2YWx1ZSBvZiAke3guY2hhckNvZGVBdChpbmRleCl9IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiAyNTUuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBhbiBJREwgQnl0ZVN0cmluZyB2YWx1ZSB3aG9zZSBsZW5ndGggaXMgdGhlXG4gIC8vICAgIGxlbmd0aCBvZiB4LCBhbmQgd2hlcmUgdGhlIHZhbHVlIG9mIGVhY2ggZWxlbWVudCBpc1xuICAvLyAgICB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLVVTVlN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBsb25nIGxvbmcgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAndW5zaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCAzMiwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCAzMiwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhblxuICAvLyAgICBbW0FycmF5QnVmZmVyRGF0YV1dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1hcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgLy8gc2VlOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLXNoYXJlZGFycmF5YnVmZmVyLWluc3RhbmNlc1xuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKVxuICApIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiBgJHtWfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFsnQXJyYXlCdWZmZXInXVxuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVikgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVikgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWwuXG5cbiAgLy8gNC4gUmV0dXJuIHRoZSBJREwgQXJyYXlCdWZmZXIgdmFsdWUgdGhhdCBpcyBhXG4gIC8vICAgIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChWLCBULCBvcHRzID0ge30pIHtcbiAgLy8gMS4gTGV0IFQgYmUgdGhlIElETCB0eXBlIFYgaXMgYmVpbmcgY29udmVydGVkIHRvLlxuXG4gIC8vIDIuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tUeXBlZEFycmF5TmFtZV1dIGludGVybmFsIHNsb3Qgd2l0aCBhIHZhbHVlXG4gIC8vICAgIGVxdWFsIHRvIFRcdTIwMTlzIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChcbiAgICB3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fFxuICAgICF0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHxcbiAgICBWLmNvbnN0cnVjdG9yLm5hbWUgIT09IFQubmFtZVxuICApIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiBgJHtULm5hbWV9YCxcbiAgICAgIGFyZ3VtZW50OiBgJHtWfWAsXG4gICAgICB0eXBlczogW1QubmFtZV1cbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWLmJ1ZmZlcikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyA0LiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBhcnJheSBidWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbFxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnRGF0YVZpZXcnLFxuICAgICAgbWVzc2FnZTogJ09iamVjdCBpcyBub3QgYSBEYXRhVmlldy4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgQXJyYXlCdWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbFxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIG9wdHMpXG4gIH1cblxuICBpZiAodHlwZXMuaXNUeXBlZEFycmF5KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkoViwgVi5jb25zdHJ1Y3RvcilcbiAgfVxuXG4gIGlmICh0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRhdGFWaWV3KFYsIG9wdHMpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGEgQnVmZmVyU291cmNlLmApXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJ5dGVTdHJpbmc+J11cbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddID0gd2ViaWRsLnJlY29yZENvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyxcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2ViaWRsXG59XG4iLCAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgYXRvYiB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgaXNvbW9ycGhpY0RlY29kZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICovXG5jb25zdCBIVFRQX1RPS0VOX0NPREVQT0lOVFMgPSAvXlshIyQlJicqKy0uXl98fkEtWmEtejAtOV0rJC9cbmNvbnN0IEhUVFBfV0hJVEVTUEFDRV9SRUdFWCA9IC8oXFx1MDAwQXxcXHUwMDBEfFxcdTAwMDl8XFx1MDAyMCkvIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcXVvdGVkLXN0cmluZy10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMgPSAvW1xcdTAwMDl8XFx1MDAyMC1cXHUwMDdFfFxcdTAwODAtXFx1MDBGRl0vIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RhdGEtdXJsLXByb2Nlc3NvclxuLyoqIEBwYXJhbSB7VVJMfSBkYXRhVVJMICovXG5mdW5jdGlvbiBkYXRhVVJMUHJvY2Vzc29yIChkYXRhVVJMKSB7XG4gIC8vIDEuIEFzc2VydDogZGF0YVVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiZGF0YVwiLlxuICBhc3NlcnQoZGF0YVVSTC5wcm90b2NvbCA9PT0gJ2RhdGE6JylcblxuICAvLyAyLiBMZXQgaW5wdXQgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZSBVUkxcbiAgLy8gc2VyaWFsaXplciBvbiBkYXRhVVJMIHdpdGggZXhjbHVkZSBmcmFnbWVudFxuICAvLyBzZXQgdG8gdHJ1ZS5cbiAgbGV0IGlucHV0ID0gVVJMU2VyaWFsaXplcihkYXRhVVJMLCB0cnVlKVxuXG4gIC8vIDMuIFJlbW92ZSB0aGUgbGVhZGluZyBcImRhdGE6XCIgc3RyaW5nIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gaW5wdXQuc2xpY2UoNSlcblxuICAvLyA0LiBMZXQgcG9zaXRpb24gcG9pbnQgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDUuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAvLyBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgZXF1YWxcbiAgLy8gdG8gVSswMDJDICgsKSwgZ2l2ZW4gcG9zaXRpb24uXG4gIGxldCBtaW1lVHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICcsJyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gNi4gU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZVxuICAvLyBmcm9tIG1pbWVUeXBlLlxuICAvLyBVbmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogd2UgbmVlZCB0byBzdG9yZSB0aGVcbiAgLy8gbGVuZ3RoIGJlY2F1c2UgaWYgdGhlIG1pbWV0eXBlIGhhcyBzcGFjZXMgcmVtb3ZlZCxcbiAgLy8gdGhlIHdyb25nIGFtb3VudCB3aWxsIGJlIHNsaWNlZCBmcm9tIHRoZSBpbnB1dCBpblxuICAvLyBzdGVwICM5XG4gIGNvbnN0IG1pbWVUeXBlTGVuZ3RoID0gbWltZVR5cGUubGVuZ3RoXG4gIG1pbWVUeXBlID0gcmVtb3ZlQVNDSUlXaGl0ZXNwYWNlKG1pbWVUeXBlLCB0cnVlLCB0cnVlKVxuXG4gIC8vIDcuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlblxuICAvLyByZXR1cm4gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gOC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gOS4gTGV0IGVuY29kZWRCb2R5IGJlIHRoZSByZW1haW5kZXIgb2YgaW5wdXQuXG4gIGNvbnN0IGVuY29kZWRCb2R5ID0gaW5wdXQuc2xpY2UobWltZVR5cGVMZW5ndGggKyAxKVxuXG4gIC8vIDEwLiBMZXQgYm9keSBiZSB0aGUgcGVyY2VudC1kZWNvZGluZyBvZiBlbmNvZGVkQm9keS5cbiAgbGV0IGJvZHkgPSBzdHJpbmdQZXJjZW50RGVjb2RlKGVuY29kZWRCb2R5KVxuXG4gIC8vIDExLiBJZiBtaW1lVHlwZSBlbmRzIHdpdGggVSswMDNCICg7KSwgZm9sbG93ZWQgYnlcbiAgLy8gemVybyBvciBtb3JlIFUrMDAyMCBTUEFDRSwgZm9sbG93ZWQgYnkgYW4gQVNDSUlcbiAgLy8gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgXCJiYXNlNjRcIiwgdGhlbjpcbiAgaWYgKC87KFxcdTAwMjApezAsfWJhc2U2NCQvaS50ZXN0KG1pbWVUeXBlKSkge1xuICAgIC8vIDEuIExldCBzdHJpbmdCb2R5IGJlIHRoZSBpc29tb3JwaGljIGRlY29kZSBvZiBib2R5LlxuICAgIGNvbnN0IHN0cmluZ0JvZHkgPSBpc29tb3JwaGljRGVjb2RlKGJvZHkpXG5cbiAgICAvLyAyLiBTZXQgYm9keSB0byB0aGUgZm9yZ2l2aW5nLWJhc2U2NCBkZWNvZGUgb2ZcbiAgICAvLyBzdHJpbmdCb2R5LlxuICAgIGJvZHkgPSBmb3JnaXZpbmdCYXNlNjQoc3RyaW5nQm9keSlcblxuICAgIC8vIDMuIElmIGJvZHkgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgICBpZiAoYm9keSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gNC4gUmVtb3ZlIHRoZSBsYXN0IDYgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC02KVxuXG4gICAgLy8gNS4gUmVtb3ZlIHRyYWlsaW5nIFUrMDAyMCBTUEFDRSBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLFxuICAgIC8vIGlmIGFueS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnJlcGxhY2UoLyhcXHUwMDIwKSskLywgJycpXG5cbiAgICAvLyA2LiBSZW1vdmUgdGhlIGxhc3QgVSswMDNCICg7KSBjb2RlIHBvaW50IGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtMSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBtaW1lVHlwZSBzdGFydHMgd2l0aCBVKzAwM0IgKDspLCB0aGVuIHByZXBlbmRcbiAgLy8gXCJ0ZXh0L3BsYWluXCIgdG8gbWltZVR5cGUuXG4gIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCc7JykpIHtcbiAgICBtaW1lVHlwZSA9ICd0ZXh0L3BsYWluJyArIG1pbWVUeXBlXG4gIH1cblxuICAvLyAxMy4gTGV0IG1pbWVUeXBlUmVjb3JkIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZ1xuICAvLyBtaW1lVHlwZS5cbiAgbGV0IG1pbWVUeXBlUmVjb3JkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAvLyAxNC4gSWYgbWltZVR5cGVSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiBzZXRcbiAgLy8gbWltZVR5cGVSZWNvcmQgdG8gdGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJLlxuICBpZiAobWltZVR5cGVSZWNvcmQgPT09ICdmYWlsdXJlJykge1xuICAgIG1pbWVUeXBlUmVjb3JkID0gcGFyc2VNSU1FVHlwZSgndGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJJylcbiAgfVxuXG4gIC8vIDE1LiBSZXR1cm4gYSBuZXcgZGF0YTogVVJMIHN0cnVjdCB3aG9zZSBNSU1FXG4gIC8vIHR5cGUgaXMgbWltZVR5cGVSZWNvcmQgYW5kIGJvZHkgaXMgYm9keS5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RhdGEtdXJsLXN0cnVjdFxuICByZXR1cm4geyBtaW1lVHlwZTogbWltZVR5cGVSZWNvcmQsIGJvZHkgfVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLXNlcmlhbGl6ZXJcbi8qKlxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtib29sZWFufSBleGNsdWRlRnJhZ21lbnRcbiAqL1xuZnVuY3Rpb24gVVJMU2VyaWFsaXplciAodXJsLCBleGNsdWRlRnJhZ21lbnQgPSBmYWxzZSkge1xuICBpZiAoIWV4Y2x1ZGVGcmFnbWVudCkge1xuICAgIHJldHVybiB1cmwuaHJlZlxuICB9XG5cbiAgY29uc3QgaHJlZiA9IHVybC5ocmVmXG4gIGNvbnN0IGhhc2hMZW5ndGggPSB1cmwuaGFzaC5sZW5ndGhcblxuICByZXR1cm4gaGFzaExlbmd0aCA9PT0gMCA/IGhyZWYgOiBocmVmLnN1YnN0cmluZygwLCBocmVmLmxlbmd0aCAtIGhhc2hMZW5ndGgpXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWEtc2VxdWVuY2Utb2YtY29kZS1wb2ludHNcbi8qKlxuICogQHBhcmFtIHsoY2hhcjogc3RyaW5nKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyAyLiBXaGlsZSBwb3NpdGlvbiBkb2Vzblx1MjAxOXQgcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGlucHV0IGFuZCB0aGVcbiAgLy8gY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgbWVldHMgdGhlIGNvbmRpdGlvbiBjb25kaXRpb246XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBjb25kaXRpb24oaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dKSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGF0IGNvZGUgcG9pbnQgdG8gdGhlIGVuZCBvZiByZXN1bHQuXG4gICAgcmVzdWx0ICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDMuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBIGZhc3RlciBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIHRoYXQgb25seSB3b3JrcyB3aGVuIGNvbXBhcmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCAoY2hhciwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGlkeCA9IGlucHV0LmluZGV4T2YoY2hhciwgcG9zaXRpb24ucG9zaXRpb24pXG4gIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uID0gaW5wdXQubGVuZ3RoXG4gICAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0KVxuICB9XG5cbiAgcG9zaXRpb24ucG9zaXRpb24gPSBpZHhcbiAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdHJpbmctcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHN0cmluZ1BlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgaW5wdXQuXG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGJ5dGVzLlxuICByZXR1cm4gcGVyY2VudERlY29kZShieXRlcylcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNwZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXQgKi9cbmZ1bmN0aW9uIHBlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgY29uc3Qgb3V0cHV0ID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBieXRlIGJ5dGUgaW4gaW5wdXQ6XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gaW5wdXRbaV1cblxuICAgIC8vIDEuIElmIGJ5dGUgaXMgbm90IDB4MjUgKCUpLCB0aGVuIGFwcGVuZCBieXRlIHRvIG91dHB1dC5cbiAgICBpZiAoYnl0ZSAhPT0gMHgyNSkge1xuICAgICAgb3V0cHV0LnB1c2goYnl0ZSlcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgYnl0ZSBpcyAweDI1ICglKSBhbmQgdGhlIG5leHQgdHdvIGJ5dGVzXG4gICAgLy8gYWZ0ZXIgYnl0ZSBpbiBpbnB1dCBhcmUgbm90IGluIHRoZSByYW5nZXNcbiAgICAvLyAweDMwICgwKSB0byAweDM5ICg5KSwgMHg0MSAoQSkgdG8gMHg0NiAoRiksXG4gICAgLy8gYW5kIDB4NjEgKGEpIHRvIDB4NjYgKGYpLCBhbGwgaW5jbHVzaXZlLCBhcHBlbmQgYnl0ZVxuICAgIC8vIHRvIG91dHB1dC5cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYnl0ZSA9PT0gMHgyNSAmJlxuICAgICAgIS9eWzAtOUEtRmEtZl17Mn0kL2kudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKSlcbiAgICApIHtcbiAgICAgIG91dHB1dC5wdXNoKDB4MjUpXG5cbiAgICAvLyAzLiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIExldCBieXRlUG9pbnQgYmUgdGhlIHR3byBieXRlcyBhZnRlciBieXRlIGluIGlucHV0LFxuICAgICAgLy8gZGVjb2RlZCwgYW5kIHRoZW4gaW50ZXJwcmV0ZWQgYXMgaGV4YWRlY2ltYWwgbnVtYmVyLlxuICAgICAgY29uc3QgbmV4dFR3b0J5dGVzID0gU3RyaW5nLmZyb21DaGFyQ29kZShpbnB1dFtpICsgMV0sIGlucHV0W2kgKyAyXSlcbiAgICAgIGNvbnN0IGJ5dGVQb2ludCA9IE51bWJlci5wYXJzZUludChuZXh0VHdvQnl0ZXMsIDE2KVxuXG4gICAgICAvLyAyLiBBcHBlbmQgYSBieXRlIHdob3NlIHZhbHVlIGlzIGJ5dGVQb2ludCB0byBvdXRwdXQuXG4gICAgICBvdXRwdXQucHVzaChieXRlUG9pbnQpXG5cbiAgICAgIC8vIDMuIFNraXAgdGhlIG5leHQgdHdvIGJ5dGVzIGluIGlucHV0LlxuICAgICAgaSArPSAyXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShvdXRwdXQpXG59XG5cbi8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtYS1taW1lLXR5cGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUgKGlucHV0KSB7XG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UoaW5wdXQsIHRydWUsIHRydWUpXG5cbiAgLy8gMi4gTGV0IHBvc2l0aW9uIGJlIGEgcG9zaXRpb24gdmFyaWFibGUgZm9yIGlucHV0LFxuICAvLyBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDMuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlXG4gIC8vIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMkYgKC8pIGZyb21cbiAgLy8gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCB0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJy8nLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA0LiBJZiB0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAgaWYgKHR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDUuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiByZXR1cm5cbiAgLy8gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDJGICgvKS4pXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBMZXQgc3VidHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZlxuICAvLyBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlblxuICAvLyBwb3NpdGlvbi5cbiAgbGV0IHN1YnR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnOycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDguIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gc3VidHlwZS5cbiAgc3VidHlwZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHN1YnR5cGUsIGZhbHNlLCB0cnVlKVxuXG4gIC8vIDkuIElmIHN1YnR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHN1YnR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgdHlwZUxvd2VyY2FzZSA9IHR5cGUudG9Mb3dlckNhc2UoKVxuICBjb25zdCBzdWJ0eXBlTG93ZXJjYXNlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gMTAuIExldCBtaW1lVHlwZSBiZSBhIG5ldyBNSU1FIHR5cGUgcmVjb3JkIHdob3NlIHR5cGVcbiAgLy8gaXMgdHlwZSwgaW4gQVNDSUkgbG93ZXJjYXNlLCBhbmQgc3VidHlwZSBpcyBzdWJ0eXBlLFxuICAvLyBpbiBBU0NJSSBsb3dlcmNhc2UuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlXG4gIGNvbnN0IG1pbWVUeXBlID0ge1xuICAgIHR5cGU6IHR5cGVMb3dlcmNhc2UsXG4gICAgc3VidHlwZTogc3VidHlwZUxvd2VyY2FzZSxcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlLWVzc2VuY2VcbiAgICBlc3NlbmNlOiBgJHt0eXBlTG93ZXJjYXNlfS8ke3N1YnR5cGVMb3dlcmNhc2V9YFxuICB9XG5cbiAgLy8gMTEuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDEuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0IgKDspLilcbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgSFRUUFxuICAgIC8vIHdoaXRlc3BhY2UgZnJvbSBpbnB1dCBnaXZlbiBwb3NpdGlvbi5cbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICAgICAgY2hhciA9PiBIVFRQX1dISVRFU1BBQ0VfUkVHRVgudGVzdChjaGFyKSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAzLiBMZXQgcGFyYW1ldGVyTmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAgIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgLy8gb3IgVSswMDNEICg9KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJzsnICYmIGNoYXIgIT09ICc9JyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA0LiBTZXQgcGFyYW1ldGVyTmFtZSB0byBwYXJhbWV0ZXJOYW1lLCBpbiBBU0NJSVxuICAgIC8vIGxvd2VyY2FzZS5cbiAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuOlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgLy8gMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgICAvLyBVKzAwM0IgKDspLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0QgKD0pLilcbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgICB9XG5cbiAgICAvLyA2LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDcuIExldCBwYXJhbWV0ZXJWYWx1ZSBiZSBudWxsLlxuICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IG51bGxcblxuICAgIC8vIDguIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgIC8vIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGFuIEhUVFAgcXVvdGVkIHN0cmluZyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvblxuICAgICAgLy8gYW5kIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uLCB0cnVlKVxuXG4gICAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAvLyA5LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAgIC8vIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgICAgLy8gMi4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBwYXJhbWV0ZXJWYWx1ZS5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUsIGZhbHNlLCB0cnVlKVxuXG4gICAgICAvLyAzLiBJZiBwYXJhbWV0ZXJWYWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBzb2xlbHkgY29udGFpbnMgSFRUUCB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gcGFyYW1ldGVyVmFsdWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gZG9lcyBub3QgZXhpc3RcbiAgICAvLyB0aGVuIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSB0byBwYXJhbWV0ZXJWYWx1ZS5cbiAgICBpZiAoXG4gICAgICBwYXJhbWV0ZXJOYW1lLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUy50ZXN0KHBhcmFtZXRlclZhbHVlKSkgJiZcbiAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKVxuICAgICkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNmb3JnaXZpbmctYmFzZTY0LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICovXG5mdW5jdGlvbiBmb3JnaXZpbmdCYXNlNjQgKGRhdGEpIHtcbiAgLy8gMS4gUmVtb3ZlIGFsbCBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gZGF0YS5cbiAgZGF0YSA9IGRhdGEucmVwbGFjZSgvW1xcdTAwMDlcXHUwMDBBXFx1MDAwQ1xcdTAwMERcXHUwMDIwXS9nLCAnJykgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAvLyAyLiBJZiBkYXRhXHUyMDE5cyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBubyByZW1haW5kZXIsIHRoZW46XG4gIGlmIChkYXRhLmxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAvLyAxLiBJZiBkYXRhIGVuZHMgd2l0aCBvbmUgb3IgdHdvIFUrMDAzRCAoPSkgY29kZSBwb2ludHMsXG4gICAgLy8gdGhlbiByZW1vdmUgdGhlbSBmcm9tIGRhdGEuXG4gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvPT89JC8sICcnKVxuICB9XG5cbiAgLy8gMy4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gYSByZW1haW5kZXIgb2YgMSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDQuIElmIGRhdGEgY29udGFpbnMgYSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG9uZSBvZlxuICAvLyAgVSswMDJCICgrKVxuICAvLyAgVSswMDJGICgvKVxuICAvLyAgQVNDSUkgYWxwaGFudW1lcmljXG4gIC8vIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICgvW14rLzAtOUEtWmEtel0vLnRlc3QoZGF0YSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCBiaW5hcnkgPSBhdG9iKGRhdGEpXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5Lmxlbmd0aClcblxuICBmb3IgKGxldCBieXRlID0gMDsgYnl0ZSA8IGJpbmFyeS5sZW5ndGg7IGJ5dGUrKykge1xuICAgIGJ5dGVzW2J5dGVdID0gYmluYXJ5LmNoYXJDb2RlQXQoYnl0ZSlcbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29sbGVjdC1hbi1odHRwLXF1b3RlZC1zdHJpbmdcbi8vIHRlc3RzOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZXhhbXBsZS1odHRwLXF1b3RlZC1zdHJpbmdcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICogQHBhcmFtIHtib29sZWFuP30gZXh0cmFjdFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcgKGlucHV0LCBwb3NpdGlvbiwgZXh0cmFjdFZhbHVlKSB7XG4gIC8vIDEuIExldCBwb3NpdGlvblN0YXJ0IGJlIHBvc2l0aW9uLlxuICBjb25zdCBwb3NpdGlvblN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAzLiBBc3NlcnQ6IHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dFxuICAvLyBpcyBVKzAwMjIgKFwiKS5cbiAgYXNzZXJ0KGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJylcblxuICAvLyA0LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA1LiBXaGlsZSB0cnVlOlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50c1xuICAgIC8vIHRoYXQgYXJlIG5vdCBVKzAwMjIgKFwiKSBvciBVKzAwNUMgKFxcKSBmcm9tIGlucHV0LCBnaXZlblxuICAgIC8vIHBvc2l0aW9uLCB0byB2YWx1ZS5cbiAgICB2YWx1ZSArPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgIT09ICdcIicgJiYgY2hhciAhPT0gJ1xcXFwnLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDIuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDMuIExldCBxdW90ZU9yQmFja3NsYXNoIGJlIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpblxuICAgIC8vIGlucHV0LlxuICAgIGNvbnN0IHF1b3RlT3JCYWNrc2xhc2ggPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA1LiBJZiBxdW90ZU9yQmFja3NsYXNoIGlzIFUrMDA1QyAoXFwpLCB0aGVuOlxuICAgIGlmIChxdW90ZU9yQmFja3NsYXNoID09PSAnXFxcXCcpIHtcbiAgICAgIC8vIDEuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBhcHBlbmRcbiAgICAgIC8vIFUrMDA1QyAoXFwpIHRvIHZhbHVlIGFuZCBicmVhay5cbiAgICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgKz0gJ1xcXFwnXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFwcGVuZCB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSArPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgICAgLy8gMy4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gNi4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBBc3NlcnQ6IHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDIyIChcIikuXG4gICAgICBhc3NlcnQocXVvdGVPckJhY2tzbGFzaCA9PT0gJ1wiJylcblxuICAgICAgLy8gMi4gQnJlYWsuXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDYuIElmIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcgaXMgc2V0LCB0aGVuIHJldHVybiB2YWx1ZS5cbiAgaWYgKGV4dHJhY3RWYWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gNy4gUmV0dXJuIHRoZSBjb2RlIHBvaW50cyBmcm9tIHBvc2l0aW9uU3RhcnQgdG8gcG9zaXRpb24sXG4gIC8vIGluY2x1c2l2ZSwgd2l0aGluIGlucHV0LlxuICByZXR1cm4gaW5wdXQuc2xpY2UocG9zaXRpb25TdGFydCwgcG9zaXRpb24ucG9zaXRpb24pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGl6ZS1hLW1pbWUtdHlwZVxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVBTWltZVR5cGUgKG1pbWVUeXBlKSB7XG4gIGFzc2VydChtaW1lVHlwZSAhPT0gJ2ZhaWx1cmUnKVxuICBjb25zdCB7IHBhcmFtZXRlcnMsIGVzc2VuY2UgfSA9IG1pbWVUeXBlXG5cbiAgLy8gMS4gTGV0IHNlcmlhbGl6YXRpb24gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgbWltZVR5cGVcdTIwMTlzXG4gIC8vICAgIHR5cGUsIFUrMDAyRiAoLyksIGFuZCBtaW1lVHlwZVx1MjAxOXMgc3VidHlwZS5cbiAgbGV0IHNlcmlhbGl6YXRpb24gPSBlc3NlbmNlXG5cbiAgLy8gMi4gRm9yIGVhY2ggbmFtZSBcdTIxOTIgdmFsdWUgb2YgbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnM6XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgcGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAvLyAxLiBBcHBlbmQgVSswMDNCICg7KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJzsnXG5cbiAgICAvLyAyLiBBcHBlbmQgbmFtZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gbmFtZVxuXG4gICAgLy8gMy4gQXBwZW5kIFUrMDAzRCAoPSkgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9ICc9J1xuXG4gICAgLy8gNC4gSWYgdmFsdWUgZG9lcyBub3Qgc29sZWx5IGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlXG4gICAgLy8gICAgcG9pbnRzIG9yIHZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKCFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh2YWx1ZSkpIHtcbiAgICAgIC8vIDEuIFByZWNlZGUgZWFjaCBvY2N1cmVuY2Ugb2YgVSswMDIyIChcIikgb3JcbiAgICAgIC8vICAgIFUrMDA1QyAoXFwpIGluIHZhbHVlIHdpdGggVSswMDVDIChcXCkuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhcXFxcfFwiKS9nLCAnXFxcXCQxJylcblxuICAgICAgLy8gMi4gUHJlcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlID0gJ1wiJyArIHZhbHVlXG5cbiAgICAgIC8vIDMuIEFwcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9ICdcIidcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgdmFsdWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gc2VyaWFsaXphdGlvbi5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb25cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2UgKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPT09ICdcXHInIHx8IGNoYXIgPT09ICdcXG4nIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICcgJ1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiByZW1vdmVIVFRQV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzSFRUUFdoaXRlU3BhY2Uoc3RyW2xlYWRdKTsgbGVhZCsrKTtcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIGZvciAoOyB0cmFpbCA+IDAgJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbdHJhaWxdKTsgdHJhaWwtLSk7XG4gIH1cblxuICByZXR1cm4gc3RyLnNsaWNlKGxlYWQsIHRyYWlsICsgMSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNhc2NpaS13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICovXG5mdW5jdGlvbiBpc0FTQ0lJV2hpdGVzcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJ1xcZicgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtbGVhZGluZy1hbmQtdHJhaWxpbmctYXNjaWktd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiByZW1vdmVBU0NJSVdoaXRlc3BhY2UgKHN0ciwgbGVhZGluZyA9IHRydWUsIHRyYWlsaW5nID0gdHJ1ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIGZvciAoOyBsZWFkIDwgc3RyLmxlbmd0aCAmJiBpc0FTQ0lJV2hpdGVzcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0FTQ0lJV2hpdGVzcGFjZShzdHJbdHJhaWxdKTsgdHJhaWwtLSk7XG4gIH1cblxuICByZXR1cm4gc3RyLnNsaWNlKGxlYWQsIHRyYWlsICsgMSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRhdGFVUkxQcm9jZXNzb3IsXG4gIFVSTFNlcmlhbGl6ZXIsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0LFxuICBzdHJpbmdQZXJjZW50RGVjb2RlLFxuICBwYXJzZU1JTUVUeXBlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLFxuICBzZXJpYWxpemVBTWltZVR5cGVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybVx1MjAxOXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgaXNCbG9iTGlrZSwgdG9VU1ZTdHJpbmcsIG1ha2VJdGVyYXRvciB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBGaWxlOiBVbmRpY2lGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRmlsZSddfSAqL1xuY29uc3QgRmlsZSA9IE5hdGl2ZUZpbGUgPz8gVW5kaWNpRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgaWYgKGZvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgICAgcHJlZml4OiAnRm9ybURhdGEgY29uc3RydWN0b3InLFxuICAgICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgICB0eXBlczogWyd1bmRlZmluZWQnXVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0ZV0gPSBbXVxuICB9XG5cbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGb3JtRGF0YS5hcHBlbmQnIH0pXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FwcGVuZCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aFxuICAgIC8vIG5hbWUsIHZhbHVlLCBhbmQgZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gQXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdLnB1c2goZW50cnkpXG4gIH1cblxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiBudWxsLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBmcm9tXG4gICAgLy8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdW2lkeF0udmFsdWVcbiAgfVxuXG4gIGdldEFsbCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmdldEFsbCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LFxuICAgIC8vIHRoZW4gcmV0dXJuIHRoZSBlbXB0eSBsaXN0LlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBlbnRyaWVzIHdob3NlIG5hbWUgaXMgbmFtZSwgaW4gb3JkZXIsXG4gICAgLy8gZnJvbSB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV1cbiAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgICAgLm1hcCgoZW50cnkpID0+IGVudHJ5LnZhbHVlKVxuICB9XG5cbiAgaGFzIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuaGFzJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGb3JtRGF0YS5zZXQnIH0pXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgICAgOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodmFsdWUpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHRvVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGggbmFtZSwgdmFsdWUsIGFuZFxuICAgIC8vIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Qgd2hvc2UgbmFtZSBpcyBuYW1lLCB0aGVuXG4gICAgLy8gcmVwbGFjZSB0aGUgZmlyc3Qgc3VjaCBlbnRyeSB3aXRoIGVudHJ5IGFuZCByZW1vdmUgdGhlIG90aGVycy5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpc1trU3RhdGVdID0gW1xuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoMCwgaWR4KSxcbiAgICAgICAgZW50cnksXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZShpZHggKyAxKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICAgICAgXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIGFwcGVuZCBlbnRyeSB0byB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgICAgdGhpc1trU3RhdGVdLnB1c2goZW50cnkpXG4gICAgfVxuICB9XG5cbiAgZW50cmllcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSdcbiAgICApXG4gIH1cblxuICB2YWx1ZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogRm9ybURhdGEpID0+IHZvaWR9IGNhbGxiYWNrRm5cbiAgICogQHBhcmFtIHt1bmtub3dufSB0aGlzQXJnXG4gICAqL1xuICBmb3JFYWNoIChjYWxsYmFja0ZuLCB0aGlzQXJnID0gZ2xvYmFsVGhpcykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdGdW5jdGlvbicuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzKSB7XG4gICAgICBjYWxsYmFja0ZuLmFwcGx5KHRoaXNBcmcsIFt2YWx1ZSwga2V5LCB0aGlzXSlcbiAgICB9XG4gIH1cbn1cblxuRm9ybURhdGEucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBGb3JtRGF0YS5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gXCJUbyBjb252ZXJ0IGEgc3RyaW5nIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLCByZXBsYWNlIGFueSBzdXJyb2dhdGVzXG4gIC8vICB3aXRoIFUrRkZGRC5cIlxuICAvLyBzZWU6IGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC12MTgueC9kb2NzL2FwaS9idWZmZXIuaHRtbCNidWZ0b3N0cmluZ2VuY29kaW5nLXN0YXJ0LWVuZFxuICBuYW1lID0gQnVmZmVyLmZyb20obmFtZSkudG9TdHJpbmcoJ3V0ZjgnKVxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ3V0ZjgnKVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IChOYXRpdmVGaWxlICYmIHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBVbmRpY2lGaWxlXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgICAgIDogbmV3IEZpbGVMaWtlKHZhbHVlLCBmaWxlbmFtZSwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICAvLyA0LiBSZXR1cm4gYW4gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGFuZCB3aG9zZSB2YWx1ZSBpcyB2YWx1ZS5cbiAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgRm9ybURhdGEgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBCdXNib3kgPSByZXF1aXJlKCdAZmFzdGlmeS9idXNib3knKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCbG9iTGlrZSxcbiAgaXNSZWFkYWJsZVN0cmVhbUxpa2UsXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgZnVsbHlSZWFkQm9keVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uLCBzdHJ1Y3R1cmVkQ2xvbmUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNFcnJvcmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBpc1VpbnQ4QXJyYXksIGlzQXJyYXlCdWZmZXIgfSA9IHJlcXVpcmUoJ3V0aWwvdHlwZXMnKVxuY29uc3QgeyBGaWxlOiBVbmRpY2lGaWxlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5cbmxldCByYW5kb21cbnRyeSB7XG4gIGNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbiAgcmFuZG9tID0gKG1heCkgPT4gY3J5cHRvLnJhbmRvbUludCgwLCBtYXgpXG59IGNhdGNoIHtcbiAgcmFuZG9tID0gKG1heCkgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbShtYXgpKVxufVxuXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRmlsZSddfSAqL1xuY29uc3QgRmlsZSA9IE5hdGl2ZUZpbGUgPz8gVW5kaWNpRmlsZVxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuY29uc3QgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XG5mdW5jdGlvbiBleHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIC8vIDEuIExldCBzdHJlYW0gYmUgbnVsbC5cbiAgbGV0IHN0cmVhbSA9IG51bGxcblxuICAvLyAyLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW4gc2V0IHN0cmVhbSB0byBvYmplY3QuXG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIHN0cmVhbSA9IG9iamVjdFxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2Uob2JqZWN0KSkge1xuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgb2JqZWN0IGlzIGEgQmxvYiBvYmplY3QsIHNldCBzdHJlYW0gdG8gdGhlXG4gICAgLy8gICAgcmVzdWx0IG9mIHJ1bm5pbmcgb2JqZWN0XHUyMDE5cyBnZXQgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG9iamVjdC5zdHJlYW0oKVxuICB9IGVsc2Uge1xuICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHN0cmVhbSB0byBhIG5ldyBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIGFuZCBzZXRcbiAgICAvLyAgICB1cCBzdHJlYW0uXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKFxuICAgICAgICAgIHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcbiAgICAgICAgKVxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiByZWFkYWJsZVN0cmVhbUNsb3NlKGNvbnRyb2xsZXIpKVxuICAgICAgfSxcbiAgICAgIHN0YXJ0ICgpIHt9LFxuICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIEFzc2VydDogc3RyZWFtIGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LlxuICBhc3NlcnQoaXNSZWFkYWJsZVN0cmVhbUxpa2Uoc3RyZWFtKSlcblxuICAvLyA2LiBMZXQgYWN0aW9uIGJlIG51bGwuXG4gIGxldCBhY3Rpb24gPSBudWxsXG5cbiAgLy8gNy4gTGV0IHNvdXJjZSBiZSBudWxsLlxuICBsZXQgc291cmNlID0gbnVsbFxuXG4gIC8vIDguIExldCBsZW5ndGggYmUgbnVsbC5cbiAgbGV0IGxlbmd0aCA9IG51bGxcblxuICAvLyA5LiBMZXQgdHlwZSBiZSBudWxsLlxuICBsZXQgdHlwZSA9IG51bGxcblxuICAvLyAxMC4gU3dpdGNoIG9uIG9iamVjdDpcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgVVRGLTggZW5jb2Rpbmcgb2Ygb2JqZWN0LlxuICAgIC8vIE5vdGU6IHNldHRpbmcgc291cmNlIHRvIGEgVWludDhBcnJheSBoZXJlIGJyZWFrcyBzb21lIG1vY2tpbmcgYXNzdW1wdGlvbnMuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgdGV4dC9wbGFpbjtjaGFyc2V0PVVURi04YC5cbiAgICB0eXBlID0gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAvLyBVUkxTZWFyY2hQYXJhbXNcblxuICAgIC8vIHNwZWMgc2F5cyB0byBydW4gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIG9uIGJvZHkubGlzdFxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgaW4gTm9kZS5qcyBhcyBhcGFydCBvZiBhbiBVUkxTZWFyY2hQYXJhbXMgaW5zdGFuY2UgdG9TdHJpbmcgbWV0aG9kXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9lNDZjNjgwYmYyYjIxMWJiZDUyY2Y5NTljYTE3ZWU5OGM3ZjY1N2Y1L2xpYi9pbnRlcm5hbC91cmwuanMjTDQ5MFxuICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9lNDZjNjgwYmYyYjIxMWJiZDUyY2Y5NTljYTE3ZWU5OGM3ZjY1N2Y1L2xpYi9pbnRlcm5hbC91cmwuanMjTDExMDBcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgc2VyaWFsaXplciB3aXRoIG9iamVjdFx1MjAxOXMgbGlzdC5cbiAgICBzb3VyY2UgPSBvYmplY3QudG9TdHJpbmcoKVxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04YC5cbiAgICB0eXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBhIGNvcHkgb2YgdGhlIGJ5dGVzIGhlbGQgYnkgb2JqZWN0LlxuICAgIHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KG9iamVjdC5zbGljZSgpKVxuICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyVmlld1xuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBhIGNvcHkgb2YgdGhlIGJ5dGVzIGhlbGQgYnkgb2JqZWN0LlxuICAgIHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KG9iamVjdC5idWZmZXIuc2xpY2Uob2JqZWN0LmJ5dGVPZmZzZXQsIG9iamVjdC5ieXRlT2Zmc2V0ICsgb2JqZWN0LmJ5dGVMZW5ndGgpKVxuICB9IGVsc2UgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2Uob2JqZWN0KSkge1xuICAgIGNvbnN0IGJvdW5kYXJ5ID0gYC0tLS1mb3JtZGF0YS11bmRpY2ktMCR7YCR7cmFuZG9tKDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV1x1MDBFNHJ0aW5nIDxodHRwczovL2ppbW15LndhcnRpbmcuc2Uvb3BlbnNvdXJjZT4gKi9cbiAgICBjb25zdCBlc2NhcGUgPSAoc3RyKSA9PlxuICAgICAgc3RyLnJlcGxhY2UoL1xcbi9nLCAnJTBBJykucmVwbGFjZSgvXFxyL2csICclMEQnKS5yZXBsYWNlKC9cIi9nLCAnJTIyJylcbiAgICBjb25zdCBub3JtYWxpemVMaW5lZmVlZHMgPSAodmFsdWUpID0+IHZhbHVlLnJlcGxhY2UoL1xccj9cXG58XFxyL2csICdcXHJcXG4nKVxuXG4gICAgLy8gU2V0IGFjdGlvbiB0byB0aGlzIHN0ZXA6IHJ1biB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgIC8vIGVuY29kaW5nIGFsZ29yaXRobSwgd2l0aCBvYmplY3RcdTIwMTlzIGVudHJ5IGxpc3QgYW5kIFVURi04LlxuICAgIC8vIC0gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGJvZHkgaXMgaW1tdXRhYmxlIGFuZCBjYW4ndCBiZSBjaGFuZ2VkIGFmdGVyd29yZHNcbiAgICAvLyAtIFRoYXQgdGhlIGNvbnRlbnQtbGVuZ3RoIGlzIGNhbGN1bGF0ZWQgaW4gYWR2YW5jZS5cbiAgICAvLyAtIEFuZCB0aGF0IGFsbCBwYXJ0cyBhcmUgcHJlLWVuY29kZWQgYW5kIHJlYWR5IHRvIGJlIHNlbnQuXG5cbiAgICBjb25zdCBibG9iUGFydHMgPSBbXVxuICAgIGNvbnN0IHJuID0gbmV3IFVpbnQ4QXJyYXkoWzEzLCAxMF0pIC8vICdcXHJcXG4nXG4gICAgbGVuZ3RoID0gMFxuICAgIGxldCBoYXNVbmtub3duU2l6ZVZhbHVlID0gZmFsc2VcblxuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBvYmplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKHByZWZpeCArXG4gICAgICAgICAgYDsgbmFtZT1cIiR7ZXNjYXBlKG5vcm1hbGl6ZUxpbmVmZWVkcyhuYW1lKSl9XCJgICtcbiAgICAgICAgICBgXFxyXFxuXFxyXFxuJHtub3JtYWxpemVMaW5lZmVlZHModmFsdWUpfVxcclxcbmApXG4gICAgICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgICAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYCR7cHJlZml4fTsgbmFtZT1cIiR7ZXNjYXBlKG5vcm1hbGl6ZUxpbmVmZWVkcyhuYW1lKSl9XCJgICtcbiAgICAgICAgICAodmFsdWUubmFtZSA/IGA7IGZpbGVuYW1lPVwiJHtlc2NhcGUodmFsdWUubmFtZSl9XCJgIDogJycpICsgJ1xcclxcbicgK1xuICAgICAgICAgIGBDb250ZW50LVR5cGU6ICR7XG4gICAgICAgICAgICB2YWx1ZS50eXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICAgICAgfVxcclxcblxcclxcbmApXG4gICAgICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rLCB2YWx1ZSwgcm4pXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aCArIHZhbHVlLnNpemUgKyBybi5ieXRlTGVuZ3RoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFzVW5rbm93blNpemVWYWx1ZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAtLSR7Ym91bmRhcnl9LS1gKVxuICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgaWYgKGhhc1Vua25vd25TaXplVmFsdWUpIHtcbiAgICAgIGxlbmd0aCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAocGFydC5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHBhcnQuc3RyZWFtKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB5aWVsZCBwYXJ0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9YCxcbiAgICAvLyBmb2xsb3dlZCBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBib3VuZGFyeSBzdHJpbmcgZ2VuZXJhdGVkXG4gICAgLy8gYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgZW5jb2RpbmcgYWxnb3JpdGhtLlxuICAgIHR5cGUgPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JyArIGJvdW5kYXJ5XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gQmxvYlxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgbGVuZ3RoIHRvIG9iamVjdFx1MjAxOXMgc2l6ZS5cbiAgICBsZW5ndGggPSBvYmplY3Quc2l6ZVxuXG4gICAgLy8gSWYgb2JqZWN0XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSBpcyBub3QgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIHNldFxuICAgIC8vIHR5cGUgdG8gaXRzIHZhbHVlLlxuICAgIGlmIChvYmplY3QudHlwZSkge1xuICAgICAgdHlwZSA9IG9iamVjdC50eXBlXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3RbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYga2VlcGFsaXZlIGlzIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGtlZXBhbGl2ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2VlcGFsaXZlJylcbiAgICB9XG5cbiAgICAvLyBJZiBvYmplY3QgaXMgZGlzdHVyYmVkIG9yIGxvY2tlZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpIHx8IG9iamVjdC5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdSZXNwb25zZSBib2R5IG9iamVjdCBzaG91bGQgbm90IGJlIGRpc3R1cmJlZCBvciBsb2NrZWQnXG4gICAgICApXG4gICAgfVxuXG4gICAgc3RyZWFtID1cbiAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtID8gb2JqZWN0IDogUmVhZGFibGVTdHJlYW1Gcm9tKG9iamVjdClcbiAgfVxuXG4gIC8vIDExLiBJZiBzb3VyY2UgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCBhY3Rpb24gdG8gYVxuICAvLyBzdGVwIHRoYXQgcmV0dXJucyBzb3VyY2UgYW5kIGxlbmd0aCB0byBzb3VyY2VcdTIwMTlzIGxlbmd0aC5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnIHx8IHV0aWwuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNvdXJjZSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBhY3Rpb24gaXMgbm9uLW51bGwsIHRoZW4gcnVuIHRoZXNlIHN0ZXBzIGluIGluIHBhcmFsbGVsOlxuICBpZiAoYWN0aW9uICE9IG51bGwpIHtcbiAgICAvLyBSdW4gYWN0aW9uLlxuICAgIGxldCBpdGVyYXRvclxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gYWN0aW9uKG9iamVjdClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIFdoZW4gcnVubmluZyBhY3Rpb24gaXMgZG9uZSwgY2xvc2Ugc3RyZWFtLlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgb25lIG9yIG1vcmUgYnl0ZXMgYXJlIGF2YWlsYWJsZSBhbmQgc3RyZWFtIGlzIG5vdCBlcnJvcmVkLFxuICAgICAgICAgIC8vIGVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZVxuICAgICAgICAgIC8vIGJ5dGVzIGludG8gc3RyZWFtLlxuICAgICAgICAgIGlmICghaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8vIDEzLiBMZXQgYm9keSBiZSBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIHN0cmVhbSwgc291cmNlIGlzIHNvdXJjZSxcbiAgLy8gYW5kIGxlbmd0aCBpcyBsZW5ndGguXG4gIGNvbnN0IGJvZHkgPSB7IHN0cmVhbSwgc291cmNlLCBsZW5ndGggfVxuXG4gIC8vIDE0LiBSZXR1cm4gKGJvZHksIHR5cGUpLlxuICByZXR1cm4gW2JvZHksIHR5cGVdXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdC1zYWZlbHktZXh0cmFjdFxuZnVuY3Rpb24gc2FmZWx5RXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIC8vIFRvIHNhZmVseSBleHRyYWN0IGEgYm9keSBhbmQgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tXG4gIC8vIGEgYnl0ZSBzZXF1ZW5jZSBvciBCb2R5SW5pdCBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuOlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBBc3NlcnQ6IG9iamVjdCBpcyBuZWl0aGVyIGRpc3R1cmJlZCBub3IgbG9ja2VkLlxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCF1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCksICdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIW9iamVjdC5sb2NrZWQsICdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGV4dHJhY3Rpbmcgb2JqZWN0LlxuICByZXR1cm4gZXh0cmFjdEJvZHkob2JqZWN0LCBrZWVwYWxpdmUpXG59XG5cbmZ1bmN0aW9uIGNsb25lQm9keSAoYm9keSkge1xuICAvLyBUbyBjbG9uZSBhIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY2xvbmVcblxuICAvLyAxLiBMZXQgXHUwMEFCIG91dDEsIG91dDIgXHUwMEJCIGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHlcdTIwMTlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHlcdTIwMTlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc1x1MjAxOXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZVx1MjAxOXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN0XHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN0XHUyMDE5cyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdFx1MjAxOXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keVx1MjAxOXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi04XHUyMDE5c1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtIVFRQMkJ1aWxkUmVxdWVzdCwga0hUVFAyQ29weUhlYWRlcnMsIGtIVFRQMUJ1aWxkUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vLyB0b2tlblJlZ0V4cCBhbmQgaGVhZGVyQ2hhclJlZ2V4IGhhdmUgYmVlbiBsaWZ0ZWQgZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFpbi9saWIvX2h0dHBfY29tbW9uLmpzXG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gdmFsIGlzIGEgdmFsaWQgSFRUUCB0b2tlblxuICogcGVyIHRoZSBydWxlcyBkZWZpbmVkIGluIFJGQyA3MjMwXG4gKiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICovXG5jb25zdCB0b2tlblJlZ0V4cCA9IC9eW1xcXl9gYS16QS1aXFwtMC05ISMkJSYnKisufH5dKyQvXG5cbi8qKlxuICogTWF0Y2hlcyBpZiB2YWwgY29udGFpbnMgYW4gaW52YWxpZCBmaWVsZC12Y2hhclxuICogIGZpZWxkLXZhbHVlICAgID0gKiggZmllbGQtY29udGVudCAvIG9icy1mb2xkIClcbiAqICBmaWVsZC1jb250ZW50ICA9IGZpZWxkLXZjaGFyIFsgMSooIFNQIC8gSFRBQiApIGZpZWxkLXZjaGFyIF1cbiAqICBmaWVsZC12Y2hhciAgICA9IFZDSEFSIC8gb2JzLXRleHRcbiAqL1xuY29uc3QgaGVhZGVyQ2hhclJlZ2V4ID0gL1teXFx0XFx4MjAtXFx4N2VcXHg4MC1cXHhmZl0vXG5cbi8vIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBwYXRoIGlzIHZhbGlkIGRvZXMgbm90IGNvbnRhaW4gY29udHJvbCBjaGFycyBcXHgwMCB0byBcXHgyMFxuY29uc3QgaW52YWxpZFBhdGhSZWdleCA9IC9bXlxcdTAwMjEtXFx1MDBmZl0vXG5cbmNvbnN0IGtIYW5kbGVyID0gU3ltYm9sKCdoYW5kbGVyJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuXG5sZXQgZXh0cmFjdEJvZHlcblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLmNyZWF0ZSA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpjcmVhdGUnKVxuICBjaGFubmVscy5ib2R5U2VudCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpib2R5U2VudCcpXG4gIGNoYW5uZWxzLmhlYWRlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpXG4gIGNoYW5uZWxzLnRyYWlsZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJylcbiAgY2hhbm5lbHMuZXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKVxufSBjYXRjaCB7XG4gIGNoYW5uZWxzLmNyZWF0ZSA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuYm9keVNlbnQgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLnRyYWlsZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5lcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbn1cblxuY2xhc3MgUmVxdWVzdCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnksXG4gICAgaWRlbXBvdGVudCxcbiAgICBibG9ja2luZyxcbiAgICB1cGdyYWRlLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIHJlc2V0LFxuICAgIHRocm93T25FcnJvcixcbiAgICBleHBlY3RDb250aW51ZVxuICB9LCBoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwYXRoWzBdICE9PSAnLycgJiZcbiAgICAgICEocGF0aC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgcGF0aC5zdGFydHNXaXRoKCdodHRwczovLycpKSAmJlxuICAgICAgbWV0aG9kICE9PSAnQ09OTkVDVCdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGFuIGFic29sdXRlIFVSTCBvciBzdGFydCB3aXRoIGEgc2xhc2gnKVxuICAgIH0gZWxzZSBpZiAoaW52YWxpZFBhdGhSZWdleC5leGVjKHBhdGgpICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVxdWVzdCBwYXRoJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWV0aG9kIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhtZXRob2QpID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVxdWVzdCBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlICYmIHR5cGVvZiB1cGdyYWRlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1cGdyYWRlIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5XG5cbiAgICAgIGNvbnN0IHJTdGF0ZSA9IHRoaXMuYm9keS5fcmVhZGFibGVTdGF0ZVxuICAgICAgaWYgKCFyU3RhdGUgfHwgIXJTdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgICB0aGlzLmVuZEhhbmRsZXIgPSBmdW5jdGlvbiBhdXRvRGVzdHJveSAoKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHRoaXMpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5Lm9uKCdlbmQnLCB0aGlzLmVuZEhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gZXJyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVycm9yID0gZXJyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5vbignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkgfHwgdXRpbC5pc0l0ZXJhYmxlKGJvZHkpIHx8IHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gdXRpbC5idWlsZFVSTChwYXRoLCBxdWVyeSkgOiBwYXRoXG5cbiAgICB0aGlzLm9yaWdpbiA9IG9yaWdpblxuXG4gICAgdGhpcy5pZGVtcG90ZW50ID0gaWRlbXBvdGVudCA9PSBudWxsXG4gICAgICA/IG1ldGhvZCA9PT0gJ0hFQUQnIHx8IG1ldGhvZCA9PT0gJ0dFVCdcbiAgICAgIDogaWRlbXBvdGVudFxuXG4gICAgdGhpcy5ibG9ja2luZyA9IGJsb2NraW5nID09IG51bGwgPyBmYWxzZSA6IGJsb2NraW5nXG5cbiAgICB0aGlzLnJlc2V0ID0gcmVzZXQgPT0gbnVsbCA/IG51bGwgOiByZXNldFxuXG4gICAgdGhpcy5ob3N0ID0gbnVsbFxuXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gbnVsbFxuXG4gICAgdGhpcy5jb250ZW50VHlwZSA9IG51bGxcblxuICAgIHRoaXMuaGVhZGVycyA9ICcnXG5cbiAgICAvLyBPbmx5IGZvciBIMlxuICAgIHRoaXMuZXhwZWN0Q29udGludWUgPSBleHBlY3RDb250aW51ZSAhPSBudWxsID8gZXhwZWN0Q29udGludWUgOiBmYWxzZVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UodGhpcy5ib2R5KSkge1xuICAgICAgaWYgKHV0aWwubm9kZU1ham9yIDwgMTYgfHwgKHV0aWwubm9kZU1ham9yID09PSAxNiAmJiB1dGlsLm5vZGVNaW5vciA8IDgpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignRm9ybS1EYXRhIGJvZGllcyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gbm9kZSB2MTYuOCBhbmQgbmV3ZXIuJylcbiAgICAgIH1cblxuICAgICAgaWYgKCFleHRyYWN0Qm9keSkge1xuICAgICAgICBleHRyYWN0Qm9keSA9IHJlcXVpcmUoJy4uL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuICAgICAgfVxuXG4gICAgICBjb25zdCBbYm9keVN0cmVhbSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG4gICAgICAgIHRoaXMuaGVhZGVycyArPSBgY29udGVudC10eXBlOiAke2NvbnRlbnRUeXBlfVxcclxcbmBcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBib2R5U3RyZWFtLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpICYmIHRoaXMuY29udGVudFR5cGUgPT0gbnVsbCAmJiBib2R5LnR5cGUpIHtcbiAgICAgIHRoaXMuY29udGVudFR5cGUgPSBib2R5LnR5cGVcbiAgICAgIHRoaXMuaGVhZGVycyArPSBgY29udGVudC10eXBlOiAke2JvZHkudHlwZX1cXHJcXG5gXG4gICAgfVxuXG4gICAgdXRpbC52YWxpZGF0ZUhhbmRsZXIoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKVxuXG4gICAgdGhpcy5zZXJ2ZXJuYW1lID0gdXRpbC5nZXRTZXJ2ZXJOYW1lKHRoaXMuaG9zdClcblxuICAgIHRoaXNba0hhbmRsZXJdID0gaGFuZGxlclxuXG4gICAgaWYgKGNoYW5uZWxzLmNyZWF0ZS5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY3JlYXRlLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQoY2h1bmspXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXF1ZXN0U2VudCAoKSB7XG4gICAgaWYgKGNoYW5uZWxzLmJvZHlTZW50Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5ib2R5U2VudC5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgYWJvcnQodGhpcy5lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db25uZWN0KGFib3J0KVxuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IGFkanVzdCB0byBzdXBwb3J0IEgyXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhdGljIFtrSFRUUDFCdWlsZFJlcXVlc3RdIChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBUT0RPOiBNaWdyYXRlIGhlYWRlciBwYXJzaW5nIGhlcmUsIHRvIG1ha2UgUmVxdWVzdHNcbiAgICAvLyBIVFRQIGFnbm9zdGljXG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdHMuaGVhZGVyc1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGhlYWRlcnM6IG51bGwgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHJlcXVlc3QuaGVhZGVycyA9IHt9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgYXJyYXkgbXVzdCBiZSBldmVuJylcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBwcm9jZXNzSGVhZGVyKHJlcXVlc3QsIGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdLCB0cnVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBrZXksIGhlYWRlcnNba2V5XSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdFxuICB9XG5cbiAgc3RhdGljIFtrSFRUUDJDb3B5SGVhZGVyc10gKHJhdykge1xuICAgIGNvbnN0IHJhd0hlYWRlcnMgPSByYXcuc3BsaXQoJ1xcclxcbicpXG4gICAgY29uc3QgaGVhZGVycyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiByYXdIZWFkZXJzKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBoZWFkZXIuc3BsaXQoJzogJylcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICBpZiAoaGVhZGVyc1trZXldKSBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbHVlfWBcbiAgICAgIGVsc2UgaGVhZGVyc1trZXldID0gdmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXJWYWx1ZSAoa2V5LCB2YWwsIHNraXBBcHBlbmQpIHtcbiAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHZhbCA9IHZhbCAhPSBudWxsID8gYCR7dmFsfWAgOiAnJ1xuXG4gIGlmIChoZWFkZXJDaGFyUmVnZXguZXhlYyh2YWwpICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9XG5cbiAgcmV0dXJuIHNraXBBcHBlbmQgPyB2YWwgOiBgJHtrZXl9OiAke3ZhbH1cXHJcXG5gXG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsLCBza2lwQXBwZW5kID0gZmFsc2UpIHtcbiAgaWYgKHZhbCAmJiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH0gZWxzZSBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChcbiAgICByZXF1ZXN0Lmhvc3QgPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSA0ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdob3N0J1xuICApIHtcbiAgICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgICAvLyBDb25zdW1lZCBieSBDbGllbnRcbiAgICByZXF1ZXN0Lmhvc3QgPSB2YWxcbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSAxNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnXG4gICkge1xuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9IHBhcnNlSW50KHZhbCwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVxdWVzdC5jb250ZW50TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHJlcXVlc3QuY29udGVudFR5cGUgPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSAxMiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID0gdmFsXG4gICAgaWYgKHNraXBBcHBlbmQpIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsLCBza2lwQXBwZW5kKVxuICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxNyAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAndHJhbnNmZXItZW5jb2RpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB0cmFuc2Zlci1lbmNvZGluZyBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb25uZWN0aW9uJ1xuICApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBudWxsXG4gICAgaWYgKHZhbHVlICE9PSAnY2xvc2UnICYmIHZhbHVlICE9PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9uIGhlYWRlcicpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgcmVxdWVzdC5yZXNldCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTAgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwLWFsaXZlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNyAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAndXBncmFkZSdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVwZ3JhZGUgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSA2ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdleHBlY3QnXG4gICkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcignZXhwZWN0IGhlYWRlciBub3Qgc3VwcG9ydGVkJylcbiAgfSBlbHNlIGlmICh0b2tlblJlZ0V4cC5leGVjKGtleSkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyIGtleScpXG4gIH0gZWxzZSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNraXBBcHBlbmQpIHtcbiAgICAgICAgICBpZiAocmVxdWVzdC5oZWFkZXJzW2tleV0pIHJlcXVlc3QuaGVhZGVyc1trZXldICs9IGAsJHtwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0sIHNraXBBcHBlbmQpfWBcbiAgICAgICAgICBlbHNlIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNraXBBcHBlbmQpIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsLCBza2lwQXBwZW5kKVxuICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJylcblxuY2xhc3MgRGlzcGF0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRpc3BhdGNoICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzcGF0Y2hlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5cbmxldCB0bHMgLy8gaW5jbHVkZSB0bHMgY29uZGl0aW9uYWxseSBzaW5jZSBpdCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZVxuXG4vLyBUT0RPOiBzZXNzaW9uIHJlLXVzZSBkb2VzIG5vdCB3YWl0IGZvciB0aGUgZmlyc3Rcbi8vIGNvbm5lY3Rpb24gdG8gcmVzb2x2ZSB0aGUgc2Vzc2lvbiBhbmQgbWlnaHQgdGhlcmVmb3JlXG4vLyByZXNvbHZlIHRoZSBzYW1lIHNlcnZlcm5hbWUgbXVsdGlwbGUgdGltZXMgZXZlbiB3aGVuXG4vLyByZS11c2UgaXMgZW5hYmxlZC5cblxubGV0IFNlc3Npb25DYWNoZVxuLy8gRklYTUU6IHJlbW92ZSB3b3JrYXJvdW5kIHdoZW4gdGhlIE5vZGUgYnVnIGlzIGZpeGVkXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG5pZiAoZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmICFwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFdlYWtTZXNzaW9uQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yIChtYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPSBtYXhDYWNoZWRTZXNzaW9uc1xuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlID0gbmV3IE1hcCgpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkgPSBuZXcgZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5KChrZXkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplIDwgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoa2V5KVxuICAgICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5kZWxldGUoa2V5KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KVxuICAgICAgcmV0dXJuIHJlZiA/IHJlZi5kZXJlZigpIDogbnVsbFxuICAgIH1cblxuICAgIHNldCAoc2Vzc2lvbktleSwgc2Vzc2lvbikge1xuICAgICAgaWYgKHRoaXMuX21heENhY2hlZFNlc3Npb25zID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIG5ldyBXZWFrUmVmKHNlc3Npb24pKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5LnJlZ2lzdGVyKHNlc3Npb24sIHNlc3Npb25LZXkpXG4gICAgfVxuICB9XG59IGVsc2Uge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBTaW1wbGVTZXNzaW9uQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yIChtYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPSBtYXhDYWNoZWRTZXNzaW9uc1xuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlID0gbmV3IE1hcCgpXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KVxuICAgIH1cblxuICAgIHNldCAoc2Vzc2lvbktleSwgc2Vzc2lvbikge1xuICAgICAgaWYgKHRoaXMuX21heENhY2hlZFNlc3Npb25zID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPj0gdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBvbGRlc3Qgc2Vzc2lvblxuICAgICAgICBjb25zdCB7IHZhbHVlOiBvbGRlc3RLZXkgfSA9IHRoaXMuX3Nlc3Npb25DYWNoZS5rZXlzKCkubmV4dCgpXG4gICAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5kZWxldGUob2xkZXN0S2V5KVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29ubmVjdG9yICh7IGFsbG93SDIsIG1heENhY2hlZFNlc3Npb25zLCBzb2NrZXRQYXRoLCB0aW1lb3V0LCAuLi5vcHRzIH0pIHtcbiAgaWYgKG1heENhY2hlZFNlc3Npb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heENhY2hlZFNlc3Npb25zKSB8fCBtYXhDYWNoZWRTZXNzaW9ucyA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDYWNoZWRTZXNzaW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7IHBhdGg6IHNvY2tldFBhdGgsIC4uLm9wdHMgfVxuICBjb25zdCBzZXNzaW9uQ2FjaGUgPSBuZXcgU2Vzc2lvbkNhY2hlKG1heENhY2hlZFNlc3Npb25zID09IG51bGwgPyAxMDAgOiBtYXhDYWNoZWRTZXNzaW9ucylcbiAgdGltZW91dCA9IHRpbWVvdXQgPT0gbnVsbCA/IDEwZTMgOiB0aW1lb3V0XG4gIGFsbG93SDIgPSBhbGxvd0gyICE9IG51bGwgPyBhbGxvd0gyIDogZmFsc2VcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QgKHsgaG9zdG5hbWUsIGhvc3QsIHByb3RvY29sLCBwb3J0LCBzZXJ2ZXJuYW1lLCBsb2NhbEFkZHJlc3MsIGh0dHBTb2NrZXQgfSwgY2FsbGJhY2spIHtcbiAgICBsZXQgc29ja2V0XG4gICAgaWYgKHByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgaWYgKCF0bHMpIHtcbiAgICAgICAgdGxzID0gcmVxdWlyZSgndGxzJylcbiAgICAgIH1cbiAgICAgIHNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IG9wdGlvbnMuc2VydmVybmFtZSB8fCB1dGlsLmdldFNlcnZlck5hbWUoaG9zdCkgfHwgbnVsbFxuXG4gICAgICBjb25zdCBzZXNzaW9uS2V5ID0gc2VydmVybmFtZSB8fCBob3N0bmFtZVxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSkgfHwgbnVsbFxuXG4gICAgICBhc3NlcnQoc2Vzc2lvbktleSlcblxuICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3Qoe1xuICAgICAgICBoaWdoV2F0ZXJNYXJrOiAxNjM4NCwgLy8gVExTIGluIG5vZGUgY2FuJ3QgaGF2ZSBiaWdnZXIgSFdNIGFueXdheS4uLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzZXJ2ZXJuYW1lLFxuICAgICAgICBzZXNzaW9uLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIC8vIFRPRE8oSFRUUC8yKTogQWRkIHN1cHBvcnQgZm9yIGgyY1xuICAgICAgICBBTFBOUHJvdG9jb2xzOiBhbGxvd0gyID8gWydodHRwLzEuMScsICdoMiddIDogWydodHRwLzEuMSddLFxuICAgICAgICBzb2NrZXQ6IGh0dHBTb2NrZXQsIC8vIHVwZ3JhZGUgc29ja2V0IGNvbm5lY3Rpb25cbiAgICAgICAgcG9ydDogcG9ydCB8fCA0NDMsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3Qoe1xuICAgICAgICBoaWdoV2F0ZXJNYXJrOiA2NCAqIDEwMjQsIC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGxvY2FsQWRkcmVzcyxcbiAgICAgICAgcG9ydDogcG9ydCB8fCA4MCxcbiAgICAgICAgaG9zdDogaG9zdG5hbWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gU2V0IFRDUCBrZWVwIGFsaXZlIG9wdGlvbnMgb24gdGhlIHNvY2tldCBoZXJlIGluc3RlYWQgb2YgaW4gY29ubmVjdCgpIGZvciB0aGUgY2FzZSBvZiBhc3NpZ25pbmcgdGhlIHNvY2tldFxuICAgIGlmIChvcHRpb25zLmtlZXBBbGl2ZSA9PSBudWxsIHx8IG9wdGlvbnMua2VlcEFsaXZlKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVJbml0aWFsRGVsYXkgPSBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheSA9PT0gdW5kZWZpbmVkID8gNjBlMyA6IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5XG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIGtlZXBBbGl2ZUluaXRpYWxEZWxheSlcbiAgICB9XG5cbiAgICBjb25zdCBjYW5jZWxUaW1lb3V0ID0gc2V0dXBUaW1lb3V0KCgpID0+IG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0KSwgdGltZW91dClcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IobnVsbCwgdGhpcylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQoKVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihlcnIpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICByZXR1cm4gc29ja2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBUaW1lb3V0IChvbkNvbm5lY3RUaW1lb3V0LCB0aW1lb3V0KSB7XG4gIGlmICghdGltZW91dCkge1xuICAgIHJldHVybiAoKSA9PiB7fVxuICB9XG5cbiAgbGV0IHMxID0gbnVsbFxuICBsZXQgczIgPSBudWxsXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vIHNldEltbWVkaWF0ZSBpcyBhZGRlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBwcmlvdG9yaXNlIHNvY2tldCBlcnJvciBldmVudHMgb3ZlciB0aW1lb3V0c1xuICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIC8vIFdpbmRvd3MgbmVlZHMgYW4gZXh0cmEgc2V0SW1tZWRpYXRlIHByb2JhYmx5IGR1ZSB0byBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcyBpbiB0aGUgc29ja2V0IGxvZ2ljXG4gICAgICAgIHMyID0gc2V0SW1tZWRpYXRlKCgpID0+IG9uQ29ubmVjdFRpbWVvdXQoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoKVxuICAgICAgfVxuICAgIH0pXG4gIH0sIHRpbWVvdXQpXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQpIHtcbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IoKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbm5lY3RvclxuIiwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcblxuY29uc3QgcmVkaXJlY3RhYmxlU3RhdHVzQ29kZXMgPSBbMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuY29uc3Qga0JvZHkgPSBTeW1ib2woJ2JvZHknKVxuXG5jbGFzcyBCb2R5QXN5bmNJdGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChib2R5KSB7XG4gICAgdGhpc1trQm9keV0gPSBib2R5XG4gICAgdGhpc1trQm9keVVzZWRdID0gZmFsc2VcbiAgfVxuXG4gIGFzeW5jICogW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgYXNzZXJ0KCF0aGlzW2tCb2R5VXNlZF0sICdkaXN0dXJiZWQnKVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IHRydWVcbiAgICB5aWVsZCAqIHRoaXNba0JvZHldXG4gIH1cbn1cblxuY2xhc3MgUmVkaXJlY3RIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoLCBtYXhSZWRpcmVjdGlvbnMsIG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG9wdHMubWV0aG9kLCBvcHRzLnVwZ3JhZGUpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gZGlzcGF0Y2hcbiAgICB0aGlzLmxvY2F0aW9uID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBtYXhSZWRpcmVjdGlvbnM6IDAgfSAvLyBvcHRzIG11c3QgYmUgYSBjb3B5XG4gICAgdGhpcy5tYXhSZWRpcmVjdGlvbnMgPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5oaXN0b3J5ID0gW11cblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgLy8gVE9ETyAoZml4KTogUHJvdmlkZSBzb21lIHdheSBmb3IgdGhlIHVzZXIgdG8gY2FjaGUgdGhlIGZpbGUgdG8gZS5nLiAvdG1wXG4gICAgICAvLyBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVkIGFnYWluP1xuICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCAxMDAtZXhwZWN0IHN1cHBvcnQgdG8gcHJvdmlkZSBhIHdheSB0byBkbyB0aGlzIHByb3Blcmx5P1xuICAgICAgaWYgKHV0aWwuYm9keUxlbmd0aCh0aGlzLm9wdHMuYm9keSkgPT09IDApIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlcbiAgICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuYm9keS5yZWFkYWJsZURpZFJlYWQgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLm9wdHMuYm9keVtrQm9keVVzZWRdID0gZmFsc2VcbiAgICAgICAgRUUucHJvdG90eXBlLm9uLmNhbGwodGhpcy5vcHRzLmJvZHksICdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXNba0JvZHlVc2VkXSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5ib2R5ICYmIHR5cGVvZiB0aGlzLm9wdHMuYm9keS5waXBlVG8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFdlIGNhbid0IGFjY2VzcyBSZWFkYWJsZVN0cmVhbSBpbnRlcm5hbCBzdGF0ZVxuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGRpc3R1cmJlZC4gVGhpcyBpcyBqdXN0XG4gICAgICAvLyBhIHdvcmthcm91bmQuXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5vcHRzLmJvZHkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLm9wdHMuYm9keSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICFBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5vcHRzLmJvZHkpICYmXG4gICAgICB1dGlsLmlzSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgYWxsb3cgcmUtdXNpbmcgaXRlcmFibGUgaWYgIXRoaXMub3B0cy5pZGVtcG90ZW50XG4gICAgICAvLyBvciB0aHJvdWdoIHNvbWUgb3RoZXIgZmxhZz9cbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbmV3IEJvZHlBc3luY0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmhhbmRsZXIub25Db25uZWN0KGFib3J0LCB7IGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSB9KVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIHRoaXMubG9jYXRpb24gPSB0aGlzLmhpc3RvcnkubGVuZ3RoID49IHRoaXMubWF4UmVkaXJlY3Rpb25zIHx8IHV0aWwuaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpXG4gICAgICA/IG51bGxcbiAgICAgIDogcGFyc2VMb2NhdGlvbihzdGF0dXNDb2RlLCBoZWFkZXJzKVxuXG4gICAgaWYgKHRoaXMub3B0cy5vcmlnaW4pIHtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKG5ldyBVUkwodGhpcy5vcHRzLnBhdGgsIHRoaXMub3B0cy5vcmlnaW4pKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IHsgb3JpZ2luLCBwYXRobmFtZSwgc2VhcmNoIH0gPSB1dGlsLnBhcnNlVVJMKG5ldyBVUkwodGhpcy5sb2NhdGlvbiwgdGhpcy5vcHRzLm9yaWdpbiAmJiBuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSkpXG4gICAgY29uc3QgcGF0aCA9IHNlYXJjaCA/IGAke3BhdGhuYW1lfSR7c2VhcmNofWAgOiBwYXRobmFtZVxuXG4gICAgLy8gUmVtb3ZlIGhlYWRlcnMgcmVmZXJyaW5nIHRvIHRoZSBvcmlnaW5hbCBVUkwuXG4gICAgLy8gQnkgZGVmYXVsdCBpdCBpcyBIb3N0IG9ubHksIHVubGVzcyBpdCdzIGEgMzAzIChzZWUgYmVsb3cpLCB3aGljaCByZW1vdmVzIGFsc28gYWxsIENvbnRlbnQtKiBoZWFkZXJzLlxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG4gICAgdGhpcy5vcHRzLmhlYWRlcnMgPSBjbGVhblJlcXVlc3RIZWFkZXJzKHRoaXMub3B0cy5oZWFkZXJzLCBzdGF0dXNDb2RlID09PSAzMDMsIHRoaXMub3B0cy5vcmlnaW4gIT09IG9yaWdpbilcbiAgICB0aGlzLm9wdHMucGF0aCA9IHBhdGhcbiAgICB0aGlzLm9wdHMub3JpZ2luID0gb3JpZ2luXG4gICAgdGhpcy5vcHRzLm1heFJlZGlyZWN0aW9ucyA9IDBcbiAgICB0aGlzLm9wdHMucXVlcnkgPSBudWxsXG5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG4gICAgLy8gSW4gY2FzZSBvZiBIVFRQIDMwMywgYWx3YXlzIHJlcGxhY2UgbWV0aG9kIHRvIGJlIGVpdGhlciBIRUFEIG9yIEdFVFxuICAgIGlmIChzdGF0dXNDb2RlID09PSAzMDMgJiYgdGhpcy5vcHRzLm1ldGhvZCAhPT0gJ0hFQUQnKSB7XG4gICAgICB0aGlzLm9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIGJvZGllcy5cblxuICAgICAgICBSZWRpcmVjdGlvbiBpcyB1c2VkIHRvIHNlcnZlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgZnJvbSBhbm90aGVyIFVSTCwgc28gaXQgaXMgYXNzdW1lcyB0aGF0XG4gICAgICAgIG5vIGJvZHkgaXMgZ2VuZXJhdGVkIChhbmQgdGh1cyBjYW4gYmUgaWdub3JlZCkuIEV2ZW4gdGhvdWdoIGdlbmVyYXRpbmcgYSBib2R5IGlzIG5vdCBwcm9oaWJpdGVkLlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAxLCAzMDIsIDMwMywgMzA3IGFuZCAzMDggKHRoZSBsYXR0ZXIgZnJvbSBSRkMgNzIzOCksIHRoZSBzcGVjcyBtZW50aW9uIHRoYXQgdGhlIGJvZHkgdXN1YWxseVxuICAgICAgICAod2hpY2ggbWVhbnMgaXQncyBvcHRpb25hbCBhbmQgbm90IG1hbmRhdGVkKSBjb250YWluIGp1c3QgYW4gaHlwZXJsaW5rIHRvIHRoZSB2YWx1ZSBvZlxuICAgICAgICB0aGUgTG9jYXRpb24gcmVzcG9uc2UgaGVhZGVyLCBzbyB0aGUgYm9keSBjYW4gYmUgaWdub3JlZCBzYWZlbHkuXG5cbiAgICAgICAgRm9yIHN0YXR1cyAzMDAsIHdoaWNoIGlzIFwiTXVsdGlwbGUgQ2hvaWNlc1wiLCB0aGUgc3BlYyBtZW50aW9ucyBib3RoIGdlbmVyYXRpbmcgYSBMb2NhdGlvblxuICAgICAgICByZXNwb25zZSBoZWFkZXIgQU5EIGEgcmVzcG9uc2UgYm9keSB3aXRoIHRoZSBvdGhlciBwb3NzaWJsZSBsb2NhdGlvbiB0byBmb2xsb3cuXG4gICAgICAgIFNpbmNlIHRoZSBzcGVjIGV4cGxpY2l0aWx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMuXG4gICAgICAqL1xuXG4gICAgICB0aGlzLmxvY2F0aW9uID0gbnVsbFxuICAgICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgICAgdGhpcy5kaXNwYXRjaCh0aGlzLm9wdHMsIHRoaXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHRyYWlsZXJzKVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VMb2NhdGlvbiAoc3RhdHVzQ29kZSwgaGVhZGVycykge1xuICBpZiAocmVkaXJlY3RhYmxlU3RhdHVzQ29kZXMuaW5kZXhPZihzdGF0dXNDb2RlKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgaWYgKGhlYWRlcnNbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlSGVhZGVyIChoZWFkZXIsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgaWYgKGhlYWRlci5sZW5ndGggPT09IDQpIHtcbiAgICByZXR1cm4gdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKSA9PT0gJ2hvc3QnXG4gIH1cbiAgaWYgKHJlbW92ZUNvbnRlbnQgJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKS5zdGFydHNXaXRoKCdjb250ZW50LScpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodW5rbm93bk9yaWdpbiAmJiAoaGVhZGVyLmxlbmd0aCA9PT0gMTMgfHwgaGVhZGVyLmxlbmd0aCA9PT0gNiB8fCBoZWFkZXIubGVuZ3RoID09PSAxOSkpIHtcbiAgICBjb25zdCBuYW1lID0gdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKVxuICAgIHJldHVybiBuYW1lID09PSAnYXV0aG9yaXphdGlvbicgfHwgbmFtZSA9PT0gJ2Nvb2tpZScgfHwgbmFtZSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5mdW5jdGlvbiBjbGVhblJlcXVlc3RIZWFkZXJzIChoZWFkZXJzLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihoZWFkZXJzW2ldLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSkge1xuICAgICAgICByZXQucHVzaChoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoa2V5LCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSkge1xuICAgICAgICByZXQucHVzaChrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGhlYWRlcnMgPT0gbnVsbCwgJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWRpcmVjdEhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9SZWRpcmVjdEhhbmRsZXInKVxuXG5mdW5jdGlvbiBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yICh7IG1heFJlZGlyZWN0aW9uczogZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IG1heFJlZGlyZWN0aW9ucyA9IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSA9IG9wdHNcblxuICAgICAgaWYgKCFtYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZGlyZWN0SGFuZGxlciA9IG5ldyBSZWRpcmVjdEhhbmRsZXIoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcilcbiAgICAgIG9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIFN0b3Agc3ViIGRpc3BhdGNoZXIgZnJvbSBhbHNvIHJlZGlyZWN0aW5nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG4iLCAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwgIm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQk1BaGdBWDhCZjJBRGYzOS9BWDlnQkg5L2YzOEJmMkFBQUdBRGYzOS9BR0FCZndCZ0FuOS9BR0FHZjM5L2YzOS9BQUxMQVFnRFpXNTJHSGRoYzIxZmIyNWZhR1ZoWkdWeWMxOWpiMjF3YkdWMFpRQUNBMlZ1ZGhWM1lYTnRYMjl1WDIxbGMzTmhaMlZmWW1WbmFXNEFBQU5sYm5ZTGQyRnpiVjl2Ymw5MWNtd0FBUU5sYm5ZT2QyRnpiVjl2Ymw5emRHRjBkWE1BQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZlptbGxiR1FBQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZmRtRnNkV1VBQVFObGJuWU1kMkZ6YlY5dmJsOWliMlI1QUFFRFpXNTJHSGRoYzIxZmIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpRQUFBMFpGQXdNRUFBQUZBQUFBQUFBQUJRRUZBQVVGQlFBQUJnQUFBQUFHQmdZR0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBQUJBUWNBQUFVRkF3QUJCQVVCY0FFU0VnVURBUUFDQmdnQmZ3RkJnTlFFQ3dmUkJTSUdiV1Z0YjNKNUFnQUxYMmx1YVhScFlXeHBlbVVBQ1JsZlgybHVaR2x5WldOMFgyWjFibU4wYVc5dVgzUmhZbXhsQVFBTGJHeG9kSFJ3WDJsdWFYUUFDaGhzYkdoMGRIQmZjMmh2ZFd4a1gydGxaWEJmWVd4cGRtVUFRUXhzYkdoMGRIQmZZV3hzYjJNQURBWnRZV3hzYjJNQVJndHNiR2gwZEhCZlpuSmxaUUFOQkdaeVpXVUFTQTlzYkdoMGRIQmZaMlYwWDNSNWNHVUFEaFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV0ZxYjNJQUR4VnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXbHViM0lBRUJGc2JHaDBkSEJmWjJWMFgyMWxkR2h2WkFBUkZteHNhSFIwY0Y5blpYUmZjM1JoZEhWelgyTnZaR1VBRWhKc2JHaDBkSEJmWjJWMFgzVndaM0poWkdVQUV3eHNiR2gwZEhCZmNtVnpaWFFBRkE1c2JHaDBkSEJmWlhobFkzVjBaUUFWRkd4c2FIUjBjRjl6WlhSMGFXNW5jMTlwYm1sMEFCWU5iR3hvZEhSd1gyWnBibWx6YUFBWERHeHNhSFIwY0Y5d1lYVnpaUUFZRFd4c2FIUjBjRjl5WlhOMWJXVUFHUnRzYkdoMGRIQmZjbVZ6ZFcxbFgyRm1kR1Z5WDNWd1ozSmhaR1VBR2hCc2JHaDBkSEJmWjJWMFgyVnljbTV2QUJzWGJHeG9kSFJ3WDJkbGRGOWxjbkp2Y2w5eVpXRnpiMjRBSEJkc2JHaDBkSEJmYzJWMFgyVnljbTl5WDNKbFlYTnZiZ0FkRkd4c2FIUjBjRjluWlhSZlpYSnliM0pmY0c5ekFCNFJiR3hvZEhSd1gyVnljbTV2WDI1aGJXVUFIeEpzYkdoMGRIQmZiV1YwYUc5a1gyNWhiV1VBSUJKc2JHaDBkSEJmYzNSaGRIVnpYMjVoYldVQUlScHNiR2gwZEhCZmMyVjBYMnhsYm1sbGJuUmZhR1ZoWkdWeWN3QWlJV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlqYUhWdWEyVmtYMnhsYm1kMGFBQWpIV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlyWldWd1gyRnNhWFpsQUNRa2JHeG9kSFJ3WDNObGRGOXNaVzVwWlc1MFgzUnlZVzV6Wm1WeVgyVnVZMjlrYVc1bkFDVVliR3hvZEhSd1gyMWxjM05oWjJWZmJtVmxaSE5mWlc5bUFEOEpGd0VBUVFFTEVRRUNBd1FGQ3dZSE5UazNNUzh0SnlzcENyTGdBa1VDQUFzSUFCQ0lnSUNBQUFzWkFDQUFFTUtBZ0lBQUdpQUFJQUkyQWpnZ0FDQUJPZ0FvQ3h3QUlBQWdBQzhCTWlBQUxRQXVJQUFRd1lDQWdBQVFnSUNBZ0FBTEtnRUJmMEhBQUJER2dJQ0FBQ0lCRU1LQWdJQUFHaUFCUVlDSWdJQUFOZ0k0SUFFZ0FEb0FLQ0FCQ3dvQUlBQVF5SUNBZ0FBTEJ3QWdBQzBBS0FzSEFDQUFMUUFxQ3djQUlBQXRBQ3NMQndBZ0FDMEFLUXNIQUNBQUx3RXlDd2NBSUFBdEFDNExSUUVFZnlBQUtBSVlJUUVnQUMwQUxTRUNJQUF0QUNnaEF5QUFLQUk0SVFRZ0FCRENnSUNBQUJvZ0FDQUVOZ0k0SUFBZ0F6b0FLQ0FBSUFJNkFDMGdBQ0FCTmdJWUN4RUFJQUFnQVNBQklBSnFFTU9BZ0lBQUN4QUFJQUJCQUVIY0FCRE1nSUNBQUJvTFp3RUJmMEVBSVFFQ1FDQUFLQUlNRFFBQ1FBSkFBa0FDUUNBQUxRQXZEZ01CQUFNQ0N5QUFLQUk0SWdGRkRRQWdBU2dDTENJQlJRMEFJQUFnQVJHQWdJQ0FBQUFpQVEwREMwRUFEd3NReW9DQWdBQUFDeUFBUWNPV2dJQUFOZ0lRUVE0aEFRc2dBUXNlQUFKQUlBQW9BZ3dOQUNBQVFkR2JnSUFBTmdJUUlBQkJGVFlDREFzTEZnQUNRQ0FBS0FJTVFSVkhEUUFnQUVFQU5nSU1Dd3NXQUFKQUlBQW9BZ3hCRmtjTkFDQUFRUUEyQWd3TEN3Y0FJQUFvQWd3TEJ3QWdBQ2dDRUFzSkFDQUFJQUUyQWhBTEJ3QWdBQ2dDRkFzaUFBSkFJQUJCSkVrTkFCREtnSUNBQUFBTElBQkJBblJCb0xPQWdBQnFLQUlBQ3lJQUFrQWdBRUV1U1EwQUVNcUFnSUFBQUFzZ0FFRUNkRUd3dElDQUFHb29BZ0FMN2dzQkFYOUI2NmlBZ0FBaEFRSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCbkg5cUR2UURZMklBQVdGaFlXRmhZUUlEQkFWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhCZ2NJQ1FvTERBME9EMkZoWVdGaEVHRmhZV0ZoWVdGaFlXRmhFV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZUklURkJVV0Z4Z1pHaHRoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyWVRjNE9UcGhZV0ZoWVdGaFlUdGhZV0U4WVdGaFlUMCtQMkZoWVdGaFlXRmhRR0ZoUVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UyRmhZV0ZoWVdGaFZGVldWMWhaV2x0aFhGMWhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZlWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWDJCaEMwSGhwNENBQUE4TFFhU2hnSUFBRHd0Qnk2eUFnQUFQQzBIK3NZQ0FBQThMUWNDa2dJQUFEd3RCcTZTQWdBQVBDMEdOcUlDQUFBOExRZUttZ0lBQUR3dEJnTENBZ0FBUEMwRzVyNENBQUE4TFFkZWtnSUFBRHd0Qjc1K0FnQUFQQzBIaG40Q0FBQThMUWZxZmdJQUFEd3RCOHFDQWdBQVBDMEdvcjRDQUFBOExRYTZ5Z0lBQUR3dEJpTENBZ0FBUEMwSHNwNENBQUE4TFFZS2lnSUFBRHd0QmpwMkFnQUFQQzBIUXJvQ0FBQThMUWNxamdJQUFEd3RCeGJLQWdBQVBDMEhmbklDQUFBOExRZEtjZ0lBQUR3dEJ4S0NBZ0FBUEMwSFhvSUNBQUE4TFFhS2ZnSUFBRHd0QjdhNkFnQUFQQzBHcnNJQ0FBQThMUWRTbGdJQUFEd3RCeks2QWdBQVBDMEg2cm9DQUFBOExRZnlyZ0lBQUR3dEIwckNBZ0FBUEMwSHhuWUNBQUE4TFFidWdnSUFBRHd0Qjk2dUFnQUFQQzBHUXNZQ0FBQThMUWRleGdJQUFEd3RCb3EyQWdBQVBDMEhVcDRDQUFBOExRZUNyZ0lBQUR3dEJuNnlBZ0FBUEMwSHJzWUNBQUE4TFFkV2ZnSUFBRHd0QnlyR0FnQUFQQzBIZXBZQ0FBQThMUWRTZWdJQUFEd3RCOUp5QWdBQVBDMEduc29DQUFBOExRYkdkZ0lBQUR3dEJvSjJBZ0FBUEMwRzVzWUNBQUE4TFFieXdnSUFBRHd0QmtxR0FnQUFQQzBHenBvQ0FBQThMUWVtc2dJQUFEd3RCcko2QWdBQVBDMEhVcTRDQUFBOExRZmVtZ0lBQUR3dEJnS2FBZ0FBUEMwR3dvWUNBQUE4TFFmNmVnSUFBRHd0QmphT0FnQUFQQzBHSnJZQ0FBQThMUWZlaWdJQUFEd3RCb0xHQWdBQVBDMEd1bjRDQUFBOExRY2FsZ0lBQUR3dEI2SjZBZ0FBUEMwR1Rvb0NBQUE4TFFjS3ZnSUFBRHd0Qnc1MkFnQUFQQzBHTHJJQ0FBQThMUWVHZGdJQUFEd3RCamErQWdBQVBDMEhxb1lDQUFBOExRYlN0Z0lBQUR3dEIwcStBZ0FBUEMwSGZzb0NBQUE4TFFkS3lnSUFBRHd0QjhMQ0FnQUFQQzBHcG9vQ0FBQThMUWZtamdJQUFEd3RCbVo2QWdBQVBDMEcxcklDQUFBOExRWnV3Z0lBQUR3dEJrcktBZ0FBUEMwRzJxNENBQUE4TFFjS2lnSUFBRHd0QitMS0FnQUFQQzBHZXBZQ0FBQThMUWRDaWdJQUFEd3RCdXA2QWdBQVBDMEdCbm9DQUFBOExFTXFBZ0lBQUFBdEIxcUdBZ0FBaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ0FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDQkNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRY2FSZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJd0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlvQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NOQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlNSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3WnFBZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWpnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0VDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpXUWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSThJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaFFpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFR3FtNENBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDUUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJWUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pPQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NKQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlzSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWlnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaUlDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1VDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSWNJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQndwbUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba2dpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWlNVZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FKTUlnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FsUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NXQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0RkFRRi9Ba0FDUUNBQUx3RXdRUlJ4UVJSSERRQkJBU0VESUFBdEFDaEJBVVlOQVNBQUx3RXlRZVVBUmlFRERBRUxJQUF0QUNsQkJVWWhBd3NnQUNBRE9nQXVRUUFML2dFQkEzOUJBU0VEQWtBZ0FDOEJNQ0lFUVFoeERRQWdBQ2tESUVJQVVpRURDd0pBQWtBZ0FDMEFMa1VOQUVFQklRVWdBQzBBS1VFRlJnMEJRUUVoQlNBRVFjQUFjVVVnQTNGQkFVY05BUXRCQUNFRklBUkJ3QUJ4RFFCQkFpRUZJQVJCLy84RGNTSURRUWh4RFFBQ1FDQURRWUFFY1VVTkFBSkFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRcHhEUUJCQlE4TFFRUVBDd0pBSUFOQklIRU5BQUpBSUFBdEFDaEJBVVlOQUNBQUx3RXlRZi8vQTNFaUFFR2NmMnBCNUFCSkRRQWdBRUhNQVVZTkFDQUFRYkFDUmcwQVFRUWhCU0FFUVNoeFJRMENJQU5CaUFSeFFZQUVSZzBDQzBFQUR3dEJBRUVESUFBcEF5QlFHeUVGQ3lBRkMySUJBbjlCQUNFQkFrQWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lDUVp4L2FrSGtBRWtOQUNBQ1Fjd0JSZzBBSUFKQnNBSkdEUUFnQUM4Qk1DSUFRY0FBY1EwQVFRRWhBU0FBUVlnRWNVR0FCRVlOQUNBQVFTaHhSU0VCQ3lBQkM2Y0JBUU4vQWtBQ1FBSkFJQUF0QUNwRkRRQWdBQzBBSzBVTkFFRUFJUU1nQUM4Qk1DSUVRUUp4UlEwQkRBSUxRUUFoQXlBQUx3RXdJZ1JCQVhGRkRRRUxRUUVoQXlBQUxRQW9RUUZHRFFBZ0FDOEJNa0gvL3dOeElnVkJuSDlxUWVRQVNRMEFJQVZCekFGR0RRQWdCVUd3QWtZTkFDQUVRY0FBY1EwQVFRQWhBeUFFUVlnRWNVR0FCRVlOQUNBRVFTaHhRUUJISVFNTElBQkJBRHNCTUNBQVFRQTZBQzhnQXd1WkFRRUNmd0pBQWtBQ1FDQUFMUUFxUlEwQUlBQXRBQ3RGRFFCQkFDRUJJQUF2QVRBaUFrRUNjVVVOQVF3Q0MwRUFJUUVnQUM4Qk1DSUNRUUZ4UlEwQkMwRUJJUUVnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQVFaeC9ha0hrQUVrTkFDQUFRY3dCUmcwQUlBQkJzQUpHRFFBZ0FrSEFBSEVOQUVFQUlRRWdBa0dJQkhGQmdBUkdEUUFnQWtFb2NVRUFSeUVCQ3lBQkMwa0JBWHNnQUVFUWF2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDSUIvUXNEQUNBQUlBSDlDd01BSUFCQk1Hb2dBZjBMQXdBZ0FFRWdhaUFCL1FzREFDQUFRZDBCTmdJY1FRQUxld0VCZndKQUlBQW9BZ3dpQXcwQUFrQWdBQ2dDQkVVTkFDQUFJQUUyQWdRTEFrQWdBQ0FCSUFJUXhJQ0FnQUFpQXcwQUlBQW9BZ3dQQ3lBQUlBTTJBaHhCQUNFRElBQW9BZ1FpQVVVTkFDQUFJQUVnQWlBQUtBSUlFWUdBZ0lBQUFDSUJSUTBBSUFBZ0FqWUNGQ0FBSUFFMkFnd2dBU0VEQ3lBREMrVHpBUU1PZndOK0JIOGpnSUNBZ0FCQkVHc2lBeVNBZ0lDQUFDQUJJUVFnQVNFRklBRWhCaUFCSVFjZ0FTRUlJQUVoQ1NBQklRb2dBU0VMSUFFaERDQUJJUTBnQVNFT0lBRWhEd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBS0FJY0loQkJmMm9PM1FIYUFRSFpBUUlEQkFVR0J3Z0pDZ3NNRFE3WUFROFExd0VSRXRZQkV4UVZGaGNZR1JvYjRBSGZBUndkSHRVQkh5QWhJaU1rSmRRQkppY29LU29yTE5NQjBnRXRMdEVCMEFFdk1ERXlNelExTmpjNE9UbzdQRDArUDBCQlFrTkVSVWJiQVVkSVNVclBBYzRCUzgwQlRNd0JUVTVQVUZGU1UxUlZWbGRZV1ZwYlhGMWVYMkJoWW1Oa1pXWm5hR2xxYTJ4dGJtOXdjWEp6ZEhWMmQzaDVlbnQ4Zlg1L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBY3NCeWdHNEFja0J1UUhJQWJvQnV3RzhBYjBCdmdHL0FjQUJ3UUhDQWNNQnhBSEZBY1lCQU53QkMwRUFJUkFNeGdFTFFRNGhFQXpGQVF0QkRTRVFETVFCQzBFUElSQU13d0VMUVJBaEVBekNBUXRCRXlFUURNRUJDMEVVSVJBTXdBRUxRUlVoRUF5L0FRdEJGaUVRREw0QkMwRVhJUkFNdlFFTFFSZ2hFQXk4QVF0QkdTRVFETHNCQzBFYUlSQU11Z0VMUVJzaEVBeTVBUXRCSENFUURMZ0JDMEVJSVJBTXR3RUxRUjBoRUF5MkFRdEJJQ0VRRExVQkMwRWZJUkFNdEFFTFFRY2hFQXl6QVF0QklTRVFETElCQzBFaUlSQU1zUUVMUVI0aEVBeXdBUXRCSXlFUURLOEJDMEVTSVJBTXJnRUxRUkVoRUF5dEFRdEJKQ0VRREt3QkMwRWxJUkFNcXdFTFFTWWhFQXlxQVF0Qkp5RVFES2tCQzBIREFTRVFES2dCQzBFcElSQU1wd0VMUVNzaEVBeW1BUXRCTENFUURLVUJDMEV0SVJBTXBBRUxRUzRoRUF5akFRdEJMeUVRREtJQkMwSEVBU0VRREtFQkMwRXdJUkFNb0FFTFFUUWhFQXlmQVF0QkRDRVFESjRCQzBFeElSQU1uUUVMUVRJaEVBeWNBUXRCTXlFUURKc0JDMEU1SVJBTW1nRUxRVFVoRUF5WkFRdEJ4UUVoRUF5WUFRdEJDeUVRREpjQkMwRTZJUkFNbGdFTFFUWWhFQXlWQVF0QkNpRVFESlFCQzBFM0lSQU1rd0VMUVRnaEVBeVNBUXRCUENFUURKRUJDMEU3SVJBTWtBRUxRVDBoRUF5UEFRdEJDU0VRREk0QkMwRW9JUkFNalFFTFFUNGhFQXlNQVF0QlB5RVFESXNCQzBIQUFDRVFESW9CQzBIQkFDRVFESWtCQzBIQ0FDRVFESWdCQzBIREFDRVFESWNCQzBIRUFDRVFESVlCQzBIRkFDRVFESVVCQzBIR0FDRVFESVFCQzBFcUlSQU1nd0VMUWNjQUlSQU1nZ0VMUWNnQUlSQU1nUUVMUWNrQUlSQU1nQUVMUWNvQUlSQU1md3RCeXdBaEVBeCtDMEhOQUNFUURIMExRY3dBSVJBTWZBdEJ6Z0FoRUF4N0MwSFBBQ0VRREhvTFFkQUFJUkFNZVF0QjBRQWhFQXg0QzBIU0FDRVFESGNMUWRNQUlSQU1kZ3RCMUFBaEVBeDFDMEhXQUNFUURIUUxRZFVBSVJBTWN3dEJCaUVRREhJTFFkY0FJUkFNY1F0QkJTRVFESEFMUWRnQUlSQU1id3RCQkNFUURHNExRZGtBSVJBTWJRdEIyZ0FoRUF4c0MwSGJBQ0VRREdzTFFkd0FJUkFNYWd0QkF5RVFER2tMUWQwQUlSQU1hQXRCM2dBaEVBeG5DMEhmQUNFUURHWUxRZUVBSVJBTVpRdEI0QUFoRUF4a0MwSGlBQ0VRREdNTFFlTUFJUkFNWWd0QkFpRVFER0VMUWVRQUlSQU1ZQXRCNVFBaEVBeGZDMEhtQUNFUURGNExRZWNBSVJBTVhRdEI2QUFoRUF4Y0MwSHBBQ0VRREZzTFFlb0FJUkFNV2d0QjZ3QWhFQXhaQzBIc0FDRVFERmdMUWUwQUlSQU1Wd3RCN2dBaEVBeFdDMEh2QUNFUURGVUxRZkFBSVJBTVZBdEI4UUFoRUF4VEMwSHlBQ0VRREZJTFFmTUFJUkFNVVF0QjlBQWhFQXhRQzBIMUFDRVFERThMUWZZQUlSQU1UZ3RCOXdBaEVBeE5DMEg0QUNFUURFd0xRZmtBSVJBTVN3dEIrZ0FoRUF4S0MwSDdBQ0VRREVrTFFmd0FJUkFNU0F0Qi9RQWhFQXhIQzBIK0FDRVFERVlMUWY4QUlSQU1SUXRCZ0FFaEVBeEVDMEdCQVNFUURFTUxRWUlCSVJBTVFndEJnd0VoRUF4QkMwR0VBU0VRREVBTFFZVUJJUkFNUHd0QmhnRWhFQXcrQzBHSEFTRVFERDBMUVlnQklSQU1QQXRCaVFFaEVBdzdDMEdLQVNFUUREb0xRWXNCSVJBTU9RdEJqQUVoRUF3NEMwR05BU0VRRERjTFFZNEJJUkFNTmd0Qmp3RWhFQXcxQzBHUUFTRVFERFFMUVpFQklSQU1Nd3RCa2dFaEVBd3lDMEdUQVNFUURERUxRWlFCSVJBTU1BdEJsUUVoRUF3dkMwR1dBU0VRREM0TFFaY0JJUkFNTFF0Qm1BRWhFQXdzQzBHWkFTRVFEQ3NMUVpvQklSQU1LZ3RCbXdFaEVBd3BDMEdjQVNFUURDZ0xRWjBCSVJBTUp3dEJuZ0VoRUF3bUMwR2ZBU0VRRENVTFFhQUJJUkFNSkF0Qm9RRWhFQXdqQzBHaUFTRVFEQ0lMUWFNQklSQU1JUXRCcEFFaEVBd2dDMEdsQVNFUURCOExRYVlCSVJBTUhndEJwd0VoRUF3ZEMwR29BU0VRREJ3TFFha0JJUkFNR3d0QnFnRWhFQXdhQzBHckFTRVFEQmtMUWF3QklSQU1HQXRCclFFaEVBd1hDMEd1QVNFUURCWUxRUUVoRUF3VkMwR3ZBU0VRREJRTFFiQUJJUkFNRXd0QnNRRWhFQXdTQzBHekFTRVFEQkVMUWJJQklSQU1FQXRCdEFFaEVBd1BDMEcxQVNFUURBNExRYllCSVJBTURRdEJ0d0VoRUF3TUMwRzRBU0VRREFzTFFia0JJUkFNQ2d0QnVnRWhFQXdKQzBHN0FTRVFEQWdMUWNZQklSQU1Cd3RCdkFFaEVBd0dDMEc5QVNFUURBVUxRYjRCSVJBTUJBdEJ2d0VoRUF3REMwSEFBU0VRREFJTFFjSUJJUkFNQVF0QndRRWhFQXNEUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQU94d0VBQVFJREJBVUdCd2dKQ2dzTURRNFBFQkVTRXhRVkZoY1lHUm9iSEI0ZklDRWpKU2cvUUVGRVJVWkhTRWxLUzB4TlQxQlJVbFBlQTFkWlcxeGRZR0psWm1kb2FXcHJiRzF2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStnQUdDQVlVQmhnR0hBWWtCaXdHTUFZMEJqZ0dQQVpBQmtRR1VBWlVCbGdHWEFaZ0JtUUdhQVpzQm5BR2RBWjRCbndHZ0FhRUJvZ0dqQWFRQnBRR21BYWNCcUFHcEFhb0Jxd0dzQWEwQnJnR3ZBYkFCc1FHeUFiTUJ0QUcxQWJZQnR3RzRBYmtCdWdHN0Fid0J2UUcrQWI4QndBSEJBY0lCd3dIRUFjVUJ4Z0hIQWNnQnlRSEtBY3NCekFITkFjNEJ6d0hRQWRFQjBnSFRBZFFCMVFIV0FkY0IyQUhaQWRvQjJ3SGNBZDBCM2dIZ0FlRUI0Z0hqQWVRQjVRSG1BZWNCNkFIcEFlb0I2d0hzQWUwQjdnSHZBZkFCOFFIeUFmTUJtUUtrQXJBQy9nTCtBZ3NnQVNJRUlBSkhEZk1CUWQwQklSQU0vd01MSUFFaUVDQUNSdzNkQVVIREFTRVFEUDREQ3lBQklnRWdBa2NOa0FGQjl3QWhFQXo5QXdzZ0FTSUJJQUpIRFlZQlFlOEFJUkFNL0FNTElBRWlBU0FDUncxL1Flb0FJUkFNK3dNTElBRWlBU0FDUncxN1FlZ0FJUkFNK2dNTElBRWlBU0FDUncxNFFlWUFJUkFNK1FNTElBRWlBU0FDUncwYVFSZ2hFQXo0QXdzZ0FTSUJJQUpIRFJSQkVpRVFEUGNEQ3lBQklnRWdBa2NOV1VIRkFDRVFEUFlEQ3lBQklnRWdBa2NOU2tFL0lSQU05UU1MSUFFaUFTQUNSdzFJUVR3aEVBejBBd3NnQVNJQklBSkhEVUZCTVNFUURQTURDeUFBTFFBdVFRRkdEZXNEREljQ0N5QUFJQUVpQVNBQ0VNQ0FnSUFBUVFGSERlWUJJQUJDQURjRElBem5BUXNnQUNBQklnRWdBaEMwZ0lDQUFDSVFEZWNCSUFFaEFRejFBZ3NDUUNBQklnRWdBa2NOQUVFR0lSQU04QU1MSUFBZ0FVRUJhaUlCSUFJUXU0Q0FnQUFpRUEzb0FTQUJJUUVNTVFzZ0FFSUFOd01nUVJJaEVBelZBd3NnQVNJUUlBSkhEU3RCSFNFUURPMERDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBVUVRSVJBTTFBTUxRUWNoRUF6c0F3c2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzbEFVRUlJUkFNNndNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVJRaEVBelNBd3RCQ1NFUURPb0RDeUFCSVFFZ0FDa0RJRkFONUFFZ0FTRUJEUElDQ3dKQUlBRWlBU0FDUncwQVFRc2hFQXpwQXdzZ0FDQUJRUUZxSWdFZ0FoQzJnSUNBQUNJUURlVUJJQUVoQVF6eUFnc2dBQ0FCSWdFZ0FoQzRnSUNBQUNJUURlVUJJQUVoQVF6eUFnc2dBQ0FCSWdFZ0FoQzRnSUNBQUNJUURlWUJJQUVoQVF3TkN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjV3RWdBU0VCRFBBQ0N3SkFJQUVpQVNBQ1J3MEFRUThoRUF6bEF3c2dBUzBBQUNJUVFUdEdEUWdnRUVFTlJ3M29BU0FCUVFGcUlRRU03d0lMSUFBZ0FTSUJJQUlRdW9DQWdBQWlFQTNvQVNBQklRRU04Z0lMQTBBQ1FDQUJMUUFBUWZDMWdJQUFhaTBBQUNJUVFRRkdEUUFnRUVFQ1J3M3JBU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCUVFGcUlnRVF1WUNBZ0FBaUVBM3FBU0FCSVFFTTlBSUxJQUZCQVdvaUFTQUNSdzBBQzBFU0lSQU00Z01MSUFBZ0FTSUJJQUlRdW9DQWdBQWlFQTNwQVNBQklRRU1DZ3NnQVNJQklBSkhEUVpCR3lFUURPQURDd0pBSUFFaUFTQUNSdzBBUVJZaEVBemdBd3NnQUVHS2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQUNBQklBSVF1SUNBZ0FBaUVBM3FBU0FCSVFGQklDRVFETVlEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFmQzNnSUFBYWkwQUFDSVFRUUpHRFFBQ1FDQVFRWDlxRGdUbEFld0JBT3NCN0FFTElBRkJBV29oQVVFSUlSQU15QU1MSUFGQkFXb2lBU0FDUncwQUMwRVZJUkFNM3dNTFFSVWhFQXplQXdzRFFBSkFJQUV0QUFCQjhMbUFnQUJxTFFBQUloQkJBa1lOQUNBUVFYOXFEZ1RlQWV3QjRBSHJBZXdCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJHQ0VRRE4wREN3SkFJQUVpQVNBQ1JnMEFJQUJCaTRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFSElSQU14QU1MUVJraEVBemNBd3NnQVVFQmFpRUJEQUlMQWtBZ0FTSVVJQUpIRFFCQkdpRVFETnNEQ3lBVUlRRUNRQ0FVTFFBQVFYTnFEaFRkQXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QWdEdUFndEJBQ0VRSUFCQkFEWUNIQ0FBUWErTGdJQUFOZ0lRSUFCQkFqWUNEQ0FBSUJSQkFXbzJBaFFNMmdNTEFrQWdBUzBBQUNJUVFUdEdEUUFnRUVFTlJ3M29BU0FCUVFGcUlRRU01UUlMSUFGQkFXb2hBUXRCSWlFUURMOERDd0pBSUFFaUVDQUNSdzBBUVJ3aEVBellBd3RDQUNFUklCQWhBU0FRTFFBQVFWQnFEamZuQWVZQkFRSURCQVVHQndnQUFBQUFBQUFBQ1FvTERBME9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVBFQkVTRXhRQUMwRWVJUkFNdlFNTFFnSWhFUXpsQVF0Q0F5RVJET1FCQzBJRUlSRU00d0VMUWdVaEVRemlBUXRDQmlFUkRPRUJDMElISVJFTTRBRUxRZ2doRVF6ZkFRdENDU0VSRE40QkMwSUtJUkVNM1FFTFFnc2hFUXpjQVF0Q0RDRVJETnNCQzBJTklSRU0yZ0VMUWc0aEVRelpBUXRDRHlFUkROZ0JDMElLSVJFTTF3RUxRZ3NoRVF6V0FRdENEQ0VSRE5VQkMwSU5JUkVNMUFFTFFnNGhFUXpUQVF0Q0R5RVJETklCQzBJQUlSRUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJBdEFBQkJVR29PTitVQjVBRUFBUUlEQkFVR0IrWUI1Z0htQWVZQjVnSG1BZVlCQ0FrS0N3d041Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFRNFBFQkVTRStZQkMwSUNJUkVNNUFFTFFnTWhFUXpqQVF0Q0JDRVJET0lCQzBJRklSRU00UUVMUWdZaEVRemdBUXRDQnlFUkROOEJDMElJSVJFTTNnRUxRZ2toRVF6ZEFRdENDaUVSRE53QkMwSUxJUkVNMndFTFFnd2hFUXphQVF0Q0RTRVJETmtCQzBJT0lSRU0yQUVMUWc4aEVRelhBUXRDQ2lFUkROWUJDMElMSVJFTTFRRUxRZ3doRVF6VUFRdENEU0VSRE5NQkMwSU9JUkVNMGdFTFFnOGhFUXpSQVFzZ0FFSUFJQUFwQXlBaUVTQUNJQUVpRUd1dEloSjlJaE1nRXlBUlZoczNBeUFnRVNBU1ZpSVVSUTNTQVVFZklSQU13QU1MQWtBZ0FTSUJJQUpHRFFBZ0FFR0pnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRU1FoRUF5bkF3dEJJQ0VRREw4REN5QUFJQUVpRUNBQ0VMNkFnSUFBUVg5cURnVzJBUURGQWdIUkFkSUJDMEVSSVJBTXBBTUxJQUJCQVRvQUx5QVFJUUVNdXdNTElBRWlBU0FDUnczU0FVRWtJUkFNdXdNTElBRWlEU0FDUncwZVFjWUFJUkFNdWdNTElBQWdBU0lCSUFJUXNvQ0FnQUFpRUEzVUFTQUJJUUVNdFFFTElBRWlFQ0FDUncwbVFkQUFJUkFNdUFNTEFrQWdBU0lCSUFKSERRQkJLQ0VRRExnREN5QUFRUUEyQWdRZ0FFR01nSUNBQURZQ0NDQUFJQUVnQVJDeGdJQ0FBQ0lRRGRNQklBRWhBUXpZQVFzQ1FDQUJJaEFnQWtjTkFFRXBJUkFNdHdNTElCQXRBQUFpQVVFZ1JnMFVJQUZCQ1VjTjB3RWdFRUVCYWlFQkRCVUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQmNMUVNvaEVBeTFBd3NDUUNBQkloQWdBa2NOQUVFcklSQU10UU1MQWtBZ0VDMEFBQ0lCUVFsR0RRQWdBVUVnUnczVkFRc2dBQzBBTEVFSVJnM1RBU0FRSVFFTWtRTUxBa0FnQVNJQklBSkhEUUJCTENFUURMUURDeUFCTFFBQVFRcEhEZFVCSUFGQkFXb2hBUXpKQWdzZ0FTSU9JQUpIRGRVQlFTOGhFQXl5QXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBZ0VFRjJhZzRFQU53QjNBRUEyZ0VMSUFFaEFRemdBUXNnQVVFQmFpSUJJQUpIRFFBTFFURWhFQXl4QXd0Qk1pRVFJQUVpRkNBQ1JnMndBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFOcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkI4THVBZ0FCcUxRQUFSdzBCQWtBZ0FVRURSdzBBUVFZaEFReVdBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNc1FNTElBQkJBRFlDQUNBVUlRRU0yUUVMUVRNaEVDQUJJaFFnQWtZTnJ3TWdBaUFVYXlBQUtBSUFJZ0ZxSVJVZ0ZDQUJhMEVJYWlFV0FrQURRQ0FVTFFBQUloZEJJSElnRnlBWFFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFmUzdnSUFBYWkwQUFFY05BUUpBSUFGQkNFY05BRUVGSVFFTWxRTUxJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBVk5nSUFETEFEQ3lBQVFRQTJBZ0FnRkNFQkROZ0JDMEUwSVJBZ0FTSVVJQUpHRGE0RElBSWdGR3NnQUNnQ0FDSUJhaUVWSUJRZ0FXdEJCV29oRmdKQUEwQWdGQzBBQUNJWFFTQnlJQmNnRjBHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIUXdvQ0FBR290QUFCSERRRUNRQ0FCUVFWSERRQkJCeUVCREpRREN5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRlRZQ0FBeXZBd3NnQUVFQU5nSUFJQlFoQVF6WEFRc0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUdBdm9DQUFHb3RBQUFpRUVFQlJnMEFJQkJCQWtZTkNpQUJJUUVNM1FFTElBRkJBV29pQVNBQ1J3MEFDMEV3SVJBTXJnTUxRVEFoRUF5dEF3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBQ0lRUVNCR0RRQWdFRUYyYWc0RTJRSGFBZG9CMlFIYUFRc2dBVUVCYWlJQklBSkhEUUFMUVRnaEVBeXRBd3RCT0NFUURLd0RDd05BQWtBZ0FTMEFBQ0lRUVNCR0RRQWdFRUVKUncwREN5QUJRUUZxSWdFZ0FrY05BQXRCUENFUURLc0RDd05BQWtBZ0FTMEFBQ0lRUVNCR0RRQUNRQUpBSUJCQmRtb09CTm9CQVFIYUFRQUxJQkJCTEVZTjJ3RUxJQUVoQVF3RUN5QUJRUUZxSWdFZ0FrY05BQXRCUHlFUURLb0RDeUFCSVFFTTJ3RUxRY0FBSVJBZ0FTSVVJQUpHRGFnRElBSWdGR3NnQUNnQ0FDSUJhaUVXSUJRZ0FXdEJCbW9oRndKQUEwQWdGQzBBQUVFZ2NpQUJRWURBZ0lBQWFpMEFBRWNOQVNBQlFRWkdEWTRESUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVdOZ0lBREtrREN5QUFRUUEyQWdBZ0ZDRUJDMEUySVJBTWpnTUxBa0FnQVNJUElBSkhEUUJCd1FBaEVBeW5Bd3NnQUVHTWdJQ0FBRFlDQ0NBQUlBODJBZ1FnRHlFQklBQXRBQ3hCZjJvT0JNMEIxUUhYQWRrQmh3TUxJQUZCQVdvaEFRek1BUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQnlJQkFnRUVHL2YycEIvd0Z4UVJwSkcwSC9BWEVpRUVFSlJnMEFJQkJCSUVZTkFBSkFBa0FDUUFKQUlCQkJuWDlxRGhNQUF3TURBd01EQXdFREF3TURBd01EQXdNQ0F3c2dBVUVCYWlFQlFURWhFQXlSQXdzZ0FVRUJhaUVCUVRJaEVBeVFBd3NnQVVFQmFpRUJRVE1oRUF5UEF3c2dBU0VCRE5BQkN5QUJRUUZxSWdFZ0FrY05BQXRCTlNFUURLVURDMEUxSVJBTXBBTUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUJCZ0x5QWdBQnFMUUFBUVFGR0RRQWdBU0VCRE5NQkN5QUJRUUZxSWdFZ0FrY05BQXRCUFNFUURLUURDMEU5SVJBTW93TUxJQUFnQVNJQklBSVFzSUNBZ0FBaUVBM1dBU0FCSVFFTUFRc2dFRUVCYWlFQkMwRThJUkFNaHdNTEFrQWdBU0lCSUFKSERRQkJ3Z0FoRUF5Z0F3c0NRQU5BQWtBZ0FTMEFBRUYzYWc0WUFBTCtBdjRDaEFQK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dJQS9nSUxJQUZCQVdvaUFTQUNSdzBBQzBIQ0FDRVFES0FEQ3lBQlFRRnFJUUVnQUMwQUxVRUJjVVVOdlFFZ0FTRUJDMEVzSVJBTWhRTUxJQUVpQVNBQ1J3M1RBVUhFQUNFUURKMERDd05BQWtBZ0FTMEFBRUdRd0lDQUFHb3RBQUJCQVVZTkFDQUJJUUVNdHdJTElBRkJBV29pQVNBQ1J3MEFDMEhGQUNFUURKd0RDeUFOTFFBQUloQkJJRVlOc3dFZ0VFRTZSdzJCQXlBQUtBSUVJUUVnQUVFQU5nSUVJQUFnQVNBTkVLK0FnSUFBSWdFTjBBRWdEVUVCYWlFQkRMTUNDMEhIQUNFUUlBRWlEU0FDUmcyYUF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUVZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUVpEQ2dJQUFhaTBBQUVjTmdBTWdBVUVGUmczMEFpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeWFBd3RCeUFBaEVDQUJJZzBnQWtZTm1RTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVKYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHV3dvQ0FBR290QUFCSERmOENBa0FnQVVFSlJ3MEFRUUloQVF6MUFnc2dBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1tUU1MQWtBZ0FTSU5JQUpIRFFCQnlRQWhFQXlaQXdzQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVpKL2FnNEhBSUFEZ0FPQUE0QURnQU1CZ0FNTElBMUJBV29oQVVFK0lSQU1nQU1MSUExQkFXb2hBVUUvSVJBTS93SUxRY29BSVJBZ0FTSU5JQUpHRFpjRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJBV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCb01LQWdBQnFMUUFBUnczOUFpQUJRUUZHRGZBQ0lBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKY0RDMEhMQUNFUUlBRWlEU0FDUmcyV0F5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUTVxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWFMQ2dJQUFhaTBBQUVjTi9BSWdBVUVPUmczd0FpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVdBd3RCekFBaEVDQUJJZzBnQWtZTmxRTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVQYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIQXdvQ0FBR290QUFCSERmc0NBa0FnQVVFUFJ3MEFRUU1oQVF6eEFnc2dBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1sUU1MUWMwQUlSQWdBU0lOSUFKR0RaUURJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQldvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjBNS0FnQUJxTFFBQVJ3MzZBZ0pBSUFGQkJVY05BRUVFSVFFTThBSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESlFEQ3dKQUlBRWlEU0FDUncwQVFjNEFJUkFNbEFNTEFrQUNRQUpBQWtBZ0RTMEFBQ0lCUVNCeUlBRWdBVUcvZjJwQi93RnhRUnBKRzBIL0FYRkJuWDlxRGhNQS9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDQWYwQy9RTDlBZ0lEL1FJTElBMUJBV29oQVVIQkFDRVFEUDBDQ3lBTlFRRnFJUUZCd2dBaEVBejhBZ3NnRFVFQmFpRUJRY01BSVJBTSt3SUxJQTFCQVdvaEFVSEVBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1JnMEFJQUJCallDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVIRkFDRVFEUG9DQzBIUEFDRVFESklEQ3lBUUlRRUNRQUpBSUJBdEFBQkJkbW9PQkFHb0FxZ0NBS2dDQ3lBUVFRRnFJUUVMUVNjaEVBejRBZ3NDUUNBQklnRWdBa2NOQUVIUkFDRVFESkVEQ3dKQUlBRXRBQUJCSUVZTkFDQUJJUUVNalFFTElBRkJBV29oQVNBQUxRQXRRUUZ4UlEzSEFTQUJJUUVNakFFTElBRWlGeUFDUnczSUFVSFNBQ0VRREk4REMwSFRBQ0VRSUFFaUZDQUNSZzJPQXlBQ0lCUnJJQUFvQWdBaUFXb2hGaUFVSUFGclFRRnFJUmNEUUNBVUxRQUFJQUZCMXNLQWdBQnFMUUFBUnczTUFTQUJRUUZHRGNjQklBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURJNERDd0pBSUFFaUFTQUNSdzBBUWRVQUlSQU1qZ01MSUFFdEFBQkJDa2NOekFFZ0FVRUJhaUVCRE1jQkN3SkFJQUVpQVNBQ1J3MEFRZFlBSVJBTWpRTUxBa0FDUUNBQkxRQUFRWFpxRGdRQXpRSE5BUUhOQVFzZ0FVRUJhaUVCRE1jQkN5QUJRUUZxSVFGQnlnQWhFQXp6QWdzZ0FDQUJJZ0VnQWhDdWdJQ0FBQ0lRRGNzQklBRWhBVUhOQUNFUURQSUNDeUFBTFFBcFFTSkdEWVVEREtZQ0N3SkFJQUVpQVNBQ1J3MEFRZHNBSVJBTWlnTUxRUUFoRkVFQklSZEJBU0VXUVFBaEVBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUJMUUFBUVZCcURnclVBZE1CQUFFQ0F3UUZCZ2pWQVF0QkFpRVFEQVlMUVFNaEVBd0ZDMEVFSVJBTUJBdEJCU0VRREFNTFFRWWhFQXdDQzBFSElSQU1BUXRCQ0NFUUMwRUFJUmRCQUNFV1FRQWhGQXpNQVF0QkNTRVFRUUVoRkVFQUlSZEJBQ0VXRE1zQkN3SkFJQUVpQVNBQ1J3MEFRZDBBSVJBTWlRTUxJQUV0QUFCQkxrY056QUVnQVVFQmFpRUJES1lDQ3lBQklnRWdBa2NOekFGQjN3QWhFQXlIQXdzQ1FDQUJJZ0VnQWtZTkFDQUFRWTZBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCMEFBaEVBenVBZ3RCNEFBaEVBeUdBd3RCNFFBaEVDQUJJZ0VnQWtZTmhRTWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlTENnSUFBYWkwQUFFY056UUVnRkVFRFJnM01BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlGQXd0QjRnQWhFQ0FCSWdFZ0FrWU5oQU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFQ2FpRVhBMEFnQVMwQUFDQVVRZWJDZ0lBQWFpMEFBRWNOekFFZ0ZFRUNSZzNPQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RUF3dEI0d0FoRUNBQklnRWdBa1lOZ3dNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRURhaUVYQTBBZ0FTMEFBQ0FVUWVuQ2dJQUFhaTBBQUVjTnl3RWdGRUVEUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeURBd3NDUUNBQklnRWdBa2NOQUVIbEFDRVFESU1EQ3lBQUlBRkJBV29pQVNBQ0VLaUFnSUFBSWhBTnpRRWdBU0VCUWRZQUlSQU02UUlMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FBSkFJQkJCdUg5cURnc0FBYzhCendIUEFjOEJ6d0hQQWM4Qnp3RUN6d0VMSUFGQkFXb2hBVUhTQUNFUURPMENDeUFCUVFGcUlRRkIwd0FoRUF6c0Fnc2dBVUVCYWlFQlFkUUFJUkFNNndJTElBRkJBV29pQVNBQ1J3MEFDMEhrQUNFUURJSURDMEhrQUNFUURJRURDd05BQWtBZ0FTMEFBRUh3d29DQUFHb3RBQUFpRUVFQlJnMEFJQkJCZm1vT0E4OEIwQUhSQWRJQkN5QUJRUUZxSWdFZ0FrY05BQXRCNWdBaEVBeUFBd3NDUUNBQklnRWdBa1lOQUNBQlFRRnFJUUVNQXd0QjV3QWhFQXovQWdzRFFBSkFJQUV0QUFCQjhNU0FnQUJxTFFBQUloQkJBVVlOQUFKQUlCQkJmbW9PQk5JQjB3SFVBUURWQVFzZ0FTRUJRZGNBSVJBTTV3SUxJQUZCQVdvaUFTQUNSdzBBQzBIb0FDRVFEUDRDQ3dKQUlBRWlBU0FDUncwQVFla0FJUkFNL2dJTEFrQWdBUzBBQUNJUVFYWnFEaHE2QWRVQjFRRzhBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBY29CMVFIVkFRRFRBUXNnQVVFQmFpRUJDMEVHSVJBTTR3SUxBMEFDUUNBQkxRQUFRZkRHZ0lBQWFpMEFBRUVCUmcwQUlBRWhBUXllQWdzZ0FVRUJhaUlCSUFKSERRQUxRZW9BSVJBTSt3SUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQU1MUWVzQUlSQU0rZ0lMQWtBZ0FTSUJJQUpIRFFCQjdBQWhFQXo2QWdzZ0FVRUJhaUVCREFFTEFrQWdBU0lCSUFKSERRQkI3UUFoRUF6NUFnc2dBVUVCYWlFQkMwRUVJUkFNM2dJTEFrQWdBU0lVSUFKSERRQkI3Z0FoRUF6M0Fnc2dGQ0VCQWtBQ1FBSkFJQlF0QUFCQjhNaUFnQUJxTFFBQVFYOXFEZ2ZVQWRVQjFnRUFuQUlCQXRjQkN5QVVRUUZxSVFFTUNnc2dGRUVCYWlFQkRNMEJDMEVBSVJBZ0FFRUFOZ0ljSUFCQm01S0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF6MkFnc0NRQU5BQWtBZ0FTMEFBRUh3eUlDQUFHb3RBQUFpRUVFRVJnMEFBa0FDUUNBUVFYOXFEZ2ZTQWRNQjFBSFpBUUFFQWRrQkN5QUJJUUZCMmdBaEVBemdBZ3NnQVVFQmFpRUJRZHdBSVJBTTN3SUxJQUZCQVdvaUFTQUNSdzBBQzBIdkFDRVFEUFlDQ3lBQlFRRnFJUUVNeXdFTEFrQWdBU0lVSUFKSERRQkI4QUFoRUF6MUFnc2dGQzBBQUVFdlJ3M1VBU0FVUVFGcUlRRU1CZ3NDUUNBQkloUWdBa2NOQUVIeEFDRVFEUFFDQ3dKQUlCUXRBQUFpQVVFdlJ3MEFJQlJCQVdvaEFVSGRBQ0VRRE5zQ0N5QUJRWFpxSWdSQkZrc04wd0ZCQVNBRWRFR0pnSUFDY1VVTjB3RU15Z0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCUWQ0QUlSQU0yZ0lMUWZJQUlSQU04Z0lMQWtBZ0FTSVVJQUpIRFFCQjlBQWhFQXp5QWdzZ0ZDRUJBa0FnRkMwQUFFSHd6SUNBQUdvdEFBQkJmMm9PQThrQ2xBSUExQUVMUWVFQUlSQU0yQUlMQWtBZ0FTSVVJQUpHRFFBRFFBSkFJQlF0QUFCQjhNcUFnQUJxTFFBQUlnRkJBMFlOQUFKQUlBRkJmMm9PQXNzQ0FOVUJDeUFVSVFGQjN3QWhFQXphQWdzZ0ZFRUJhaUlVSUFKSERRQUxRZk1BSVJBTThRSUxRZk1BSVJBTThBSUxBa0FnQVNJQklBSkdEUUFnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFlQUFJUkFNMXdJTFFmVUFJUkFNN3dJTEFrQWdBU0lCSUFKSERRQkI5Z0FoRUF6dkFnc2dBRUdQZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCQzBFRElSQU0xQUlMQTBBZ0FTMEFBRUVnUnczREFpQUJRUUZxSWdFZ0FrY05BQXRCOXdBaEVBenNBZ3NDUUNBQklnRWdBa2NOQUVINEFDRVFET3dDQ3lBQkxRQUFRU0JIRGM0QklBRkJBV29oQVF6dkFRc2dBQ0FCSWdFZ0FoQ3NnSUNBQUNJUURjNEJJQUVoQVF5T0Fnc0NRQ0FCSWdRZ0FrY05BRUg2QUNFUURPb0NDeUFFTFFBQVFjd0FSdzNSQVNBRVFRRnFJUUZCRXlFUURNOEJDd0pBSUFFaUJDQUNSdzBBUWZzQUlSQU02UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQU5BSUFRdEFBQWdBVUh3em9DQUFHb3RBQUJIRGRBQklBRkJCVVlOemdFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQit3QWhFQXpvQWdzQ1FDQUJJZ1FnQWtjTkFFSDhBQ0VRRE9nQ0N3SkFBa0FnQkMwQUFFRzlmMm9PREFEUkFkRUIwUUhSQWRFQjBRSFJBZEVCMFFIUkFRSFJBUXNnQkVFQmFpRUJRZVlBSVJBTXp3SUxJQVJCQVdvaEFVSG5BQ0VRRE00Q0N3SkFJQUVpQkNBQ1J3MEFRZjBBSVJBTTV3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOendFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWYwQUlSQU01d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJFQ0VRRE13QkN3SkFJQUVpQkNBQ1J3MEFRZjRBSVJBTTVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRZmJPZ0lBQWFpMEFBRWNOemdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWY0QUlSQU01Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGaUVRRE1zQkN3SkFJQUVpQkNBQ1J3MEFRZjhBSVJBTTVRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZnpPZ0lBQWFpMEFBRWNOelFFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWY4QUlSQU01UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCU0VRRE1vQkN3SkFJQUVpQkNBQ1J3MEFRWUFCSVJBTTVBSUxJQVF0QUFCQjJRQkhEY3NCSUFSQkFXb2hBVUVJSVJBTXlRRUxBa0FnQVNJRUlBSkhEUUJCZ1FFaEVBempBZ3NDUUFKQUlBUXRBQUJCc245cURnTUF6QUVCekFFTElBUkJBV29oQVVIckFDRVFETW9DQ3lBRVFRRnFJUUZCN0FBaEVBekpBZ3NDUUNBQklnUWdBa2NOQUVHQ0FTRVFET0lDQ3dKQUFrQWdCQzBBQUVHNGYyb09DQURMQWNzQnl3SExBY3NCeXdFQnl3RUxJQVJCQVdvaEFVSHFBQ0VRRE1rQ0N5QUVRUUZxSVFGQjdRQWhFQXpJQWdzQ1FDQUJJZ1FnQWtjTkFFR0RBU0VRRE9FQ0N5QUNJQVJySUFBb0FnQWlBV29oRUNBRUlBRnJRUUpxSVJRQ1FBTkFJQVF0QUFBZ0FVR0F6NENBQUdvdEFBQkhEY2tCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0VEWUNBRUdEQVNFUURPRUNDMEVBSVJBZ0FFRUFOZ0lBSUJSQkFXb2hBUXpHQVFzQ1FDQUJJZ1FnQWtjTkFFR0VBU0VRRE9BQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVJxSVJBQ1FBTkFJQVF0QUFBZ0FVR0R6NENBQUdvdEFBQkhEY2dCSUFGQkJFWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdFQVNFUURPQUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFTTWhFQXpGQVFzQ1FDQUJJZ1FnQWtjTkFFR0ZBU0VRRE44Q0N3SkFBa0FnQkMwQUFFRzBmMm9PQ0FESUFjZ0J5QUhJQWNnQnlBRUJ5QUVMSUFSQkFXb2hBVUh2QUNFUURNWUNDeUFFUVFGcUlRRkI4QUFoRUF6RkFnc0NRQ0FCSWdRZ0FrY05BRUdHQVNFUURONENDeUFFTFFBQVFjVUFSdzNGQVNBRVFRRnFJUUVNZ3dJTEFrQWdBU0lFSUFKSERRQkJod0VoRUF6ZEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkJpTStBZ0FCcUxRQUFSdzNGQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaHdFaEVBemRBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXRJUkFNd2dFTEFrQWdBU0lFSUFKSERRQkJpQUVoRUF6Y0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVJYWlFUUFrQURRQ0FFTFFBQUlBRkIwTStBZ0FCcUxRQUFSdzNFQVNBQlFRaEdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaUFFaEVBemNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXBJUkFNd1FFTEFrQWdBU0lCSUFKSERRQkJpUUVoRUF6YkFndEJBU0VRSUFFdEFBQkIzd0JIRGNBQklBRkJBV29oQVF5QkFnc0NRQ0FCSWdRZ0FrY05BRUdLQVNFUUROb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQURRQ0FFTFFBQUlBRkJqTStBZ0FCcUxRQUFSdzNCQVNBQlFRRkdEYThDSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlvQklSQU0yUUlMQWtBZ0FTSUVJQUpIRFFCQml3RWhFQXpaQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQmpzK0FnQUJxTFFBQVJ3M0JBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJpd0VoRUF6WkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFQ0lSQU12Z0VMQWtBZ0FTSUVJQUpIRFFCQmpBRWhFQXpZQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhNK0FnQUJxTFFBQVJ3M0FBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJqQUVoRUF6WUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFZklSQU12UUVMQWtBZ0FTSUVJQUpIRFFCQmpRRWhFQXpYQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhzK0FnQUJxTFFBQVJ3Mi9BU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJqUUVoRUF6WEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFSklSQU12QUVMQWtBZ0FTSUVJQUpIRFFCQmpnRWhFQXpXQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NBdndHL0FiOEJ2d0cvQVFHL0FRc2dCRUVCYWlFQlFmZ0FJUkFNdlFJTElBUkJBV29oQVVINUFDRVFETHdDQ3dKQUlBRWlCQ0FDUncwQVFZOEJJUkFNMVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFaSFBnSUFBYWkwQUFFY052UUVnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWThCSVJBTTFRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdDRVFETG9CQ3dKQUlBRWlCQ0FDUncwQVFaQUJJUkFNMUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFaZlBnSUFBYWkwQUFFY052QUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWkFCSVJBTTFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZ5RVFETGtCQ3dKQUlBRWlCQ0FDUncwQVFaRUJJUkFNMHdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFaclBnSUFBYWkwQUFFY051d0VnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWkVCSVJBTTB3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZTRVFETGdCQ3dKQUlBRWlCQ0FDUncwQVFaSUJJUkFNMGdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFhSFBnSUFBYWkwQUFFY051Z0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWklCSVJBTTBnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkhpRVFETGNCQ3dKQUlBRWlCQ0FDUncwQVFaTUJJUkFNMFFJTElBUXRBQUJCekFCSERiZ0JJQVJCQVdvaEFVRUtJUkFNdGdFTEFrQWdCQ0FDUncwQVFaUUJJUkFNMEFJTEFrQUNRQ0FFTFFBQVFiOS9hZzRQQUxrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCQWJrQkN5QUVRUUZxSVFGQi9nQWhFQXkzQWdzZ0JFRUJhaUVCUWY4QUlSQU10Z0lMQWtBZ0JDQUNSdzBBUVpVQklSQU16d0lMQWtBQ1FDQUVMUUFBUWI5L2FnNERBTGdCQWJnQkN5QUVRUUZxSVFGQi9RQWhFQXkyQWdzZ0JFRUJhaUVFUVlBQklSQU10UUlMQWtBZ0JDQUNSdzBBUVpZQklSQU16Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWFmUGdJQUFhaTBBQUVjTnRnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaWUJJUkFNemdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQ3lFUURMTUJDd0pBSUFRZ0FrY05BRUdYQVNFUURNMENDd0pBQWtBQ1FBSkFJQVF0QUFCQlUyb09Jd0M0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCQWJnQnVBRzRBYmdCdUFFQ3VBRzRBYmdCQTdnQkN5QUVRUUZxSVFGQit3QWhFQXkyQWdzZ0JFRUJhaUVCUWZ3QUlSQU10UUlMSUFSQkFXb2hCRUdCQVNFUURMUUNDeUFFUVFGcUlRUkJnZ0VoRUF5ekFnc0NRQ0FFSUFKSERRQkJtQUVoRUF6TUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJxYytBZ0FCcUxRQUFSdzIwQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbUFFaEVBek1BZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRVpJUkFNc1FFTEFrQWdCQ0FDUncwQVFaa0JJUkFNeXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFhN1BnSUFBYWkwQUFFY05zd0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWmtCSVJBTXl3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJpRVFETEFCQ3dKQUlBUWdBa2NOQUVHYUFTRVFETW9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHMHo0Q0FBR290QUFCSERiSUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2FBU0VRRE1vQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJ3aEVBeXZBUXNDUUNBRUlBSkhEUUJCbXdFaEVBekpBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdHMrQWdBQnFMUUFBUncyeEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm13RWhFQXpKQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVuSVJBTXJnRUxBa0FnQkNBQ1J3MEFRWndCSVJBTXlBSUxBa0FDUUNBRUxRQUFRYXgvYWc0Q0FBR3hBUXNnQkVFQmFpRUVRWVlCSVJBTXJ3SUxJQVJCQVdvaEJFR0hBU0VRREs0Q0N3SkFJQVFnQWtjTkFFR2RBU0VRRE1jQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzR6NENBQUdvdEFBQkhEYThCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdkQVNFUURNY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFTWWhFQXlzQVFzQ1FDQUVJQUpIRFFCQm5nRWhFQXpHQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnVzK0FnQUJxTFFBQVJ3MnVBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJuZ0VoRUF6R0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFRElSQU1xd0VMQWtBZ0JDQUNSdzBBUVo4QklSQU14UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnJRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaOEJJUkFNeFFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRENFUURLb0JDd0pBSUFRZ0FrY05BRUdnQVNFUURNUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFOcUlSQUNRQU5BSUFRdEFBQWdBVUc4ejRDQUFHb3RBQUJIRGF3QklBRkJBMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZ0FTRVFETVFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUTBoRUF5cEFRc0NRQ0FFSUFKSERRQkJvUUVoRUF6REFnc0NRQUpBSUFRdEFBQkJ1bjlxRGdzQXJBR3NBYXdCckFHc0Fhd0JyQUdzQWF3QkFhd0JDeUFFUVFGcUlRUkJpd0VoRUF5cUFnc2dCRUVCYWlFRVFZd0JJUkFNcVFJTEFrQWdCQ0FDUncwQVFhSUJJUkFNd2dJTElBUXRBQUJCMEFCSERha0JJQVJCQVdvaEJBenBBUXNDUUNBRUlBSkhEUUJCb3dFaEVBekJBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0JxZ0dxQWFvQnFnR3FBUUNxQVFzZ0JFRUJhaUVFUVk0QklSQU1xQUlMSUFSQkFXb2hBVUVpSVJBTXBnRUxBa0FnQkNBQ1J3MEFRYVFCSVJBTXdBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRY0RQZ0lBQWFpMEFBRWNOcUFFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFRQklSQU13QUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIU0VRREtVQkN3SkFJQVFnQWtjTkFFR2xBU0VRREw4Q0N3SkFBa0FnQkMwQUFFR3VmMm9PQXdDb0FRR29BUXNnQkVFQmFpRUVRWkFCSVJBTXBnSUxJQVJCQVdvaEFVRUVJUkFNcEFFTEFrQWdCQ0FDUncwQVFhWUJJUkFNdmdJTEFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBS29CcWdHcUFhb0JxZ0dxQWFvQnFnR3FBYW9CQWFvQnFnRUNxZ0dxQVFPcUFhb0JCS29CQ3lBRVFRRnFJUVJCaUFFaEVBeW9BZ3NnQkVFQmFpRUVRWWtCSVJBTXB3SUxJQVJCQVdvaEJFR0tBU0VRREtZQ0N5QUVRUUZxSVFSQmp3RWhFQXlsQWdzZ0JFRUJhaUVFUVpFQklSQU1wQUlMQWtBZ0JDQUNSdzBBUWFjQklSQU12UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnBRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhY0JJUkFNdlFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRVNFUURLSUJDd0pBSUFRZ0FrY05BRUdvQVNFUURMd0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhDejRDQUFHb3RBQUJIRGFRQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHb0FTRVFETHdDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU3doRUF5aEFRc0NRQ0FFSUFKSERRQkJxUUVoRUF5N0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJ4YytBZ0FCcUxRQUFSdzJqQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcVFFaEVBeTdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXJJUkFNb0FFTEFrQWdCQ0FDUncwQVFhb0JJUkFNdWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFjclBnSUFBYWkwQUFFY05vZ0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYW9CSVJBTXVnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZDRVFESjhCQ3dKQUlBUWdBa2NOQUVHckFTRVFETGtDQ3dKQUFrQUNRQUpBSUFRdEFBQkJ2bjlxRGc4QUFRS2tBYVFCcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCQTZRQkN5QUVRUUZxSVFSQmt3RWhFQXlpQWdzZ0JFRUJhaUVFUVpRQklSQU1vUUlMSUFSQkFXb2hCRUdWQVNFUURLQUNDeUFFUVFGcUlRUkJsZ0VoRUF5ZkFnc0NRQ0FFSUFKSERRQkJyQUVoRUF5NEFnc2dCQzBBQUVIRkFFY05ud0VnQkVFQmFpRUVET0FCQ3dKQUlBUWdBa2NOQUVHdEFTRVFETGNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVITno0Q0FBR290QUFCSERaOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3RBU0VRRExjQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVE0aEVBeWNBUXNDUUNBRUlBSkhEUUJCcmdFaEVBeTJBZ3NnQkMwQUFFSFFBRWNOblFFZ0JFRUJhaUVCUVNVaEVBeWJBUXNDUUNBRUlBSkhEUUJCcndFaEVBeTFBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUncyZEFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnJ3RWhFQXkxQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVxSVJBTW1nRUxBa0FnQkNBQ1J3MEFRYkFCSVJBTXRBSUxBa0FDUUNBRUxRQUFRYXQvYWc0TEFKMEJuUUdkQVowQm5RR2RBWjBCblFHZEFRR2RBUXNnQkVFQmFpRUVRWm9CSVJBTW13SUxJQVJCQVdvaEJFR2JBU0VRREpvQ0N3SkFJQVFnQWtjTkFFR3hBU0VRRExNQ0N3SkFBa0FnQkMwQUFFRy9mMm9PRkFDY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFFQm5BRUxJQVJCQVdvaEJFR1pBU0VRREpvQ0N5QUVRUUZxSVFSQm5BRWhFQXlaQWdzQ1FDQUVJQUpIRFFCQnNnRWhFQXl5QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQjJjK0FnQUJxTFFBQVJ3MmFBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJzZ0VoRUF5eUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFaElSQU1sd0VMQWtBZ0JDQUNSdzBBUWJNQklSQU1zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJtb2hFQUpBQTBBZ0JDMEFBQ0FCUWQzUGdJQUFhaTBBQUVjTm1RRWdBVUVHUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiTUJJUkFNc1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCR2lFUURKWUJDd0pBSUFRZ0FrY05BRUcwQVNFUURMQUNDd0pBQWtBQ1FDQUVMUUFBUWJ0L2FnNFJBSm9CbWdHYUFab0JtZ0dhQVpvQm1nR2FBUUdhQVpvQm1nR2FBWm9CQXBvQkN5QUVRUUZxSVFSQm5RRWhFQXlZQWdzZ0JFRUJhaUVFUVo0QklSQU1sd0lMSUFSQkFXb2hCRUdmQVNFUURKWUNDd0pBSUFRZ0FrY05BRUcxQVNFUURLOENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUhrejRDQUFHb3RBQUJIRFpjQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHMUFTRVFESzhDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU2doRUF5VUFRc0NRQ0FFSUFKSERRQkJ0Z0VoRUF5dUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkI2cytBZ0FCcUxRQUFSdzJXQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdGdFaEVBeXVBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUhJUkFNa3dFTEFrQWdCQ0FDUncwQVFiY0JJUkFNclFJTEFrQUNRQ0FFTFFBQVFidC9hZzRPQUpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBUUdXQVFzZ0JFRUJhaUVFUWFFQklSQU1sQUlMSUFSQkFXb2hCRUdpQVNFUURKTUNDd0pBSUFRZ0FrY05BRUc0QVNFUURLd0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRFpRQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNEFTRVFES3dDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkloRUF5UkFRc0NRQ0FFSUFKSERRQkJ1UUVoRUF5ckFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzJUQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdVFFaEVBeXJBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWdJUkFNa0FFTEFrQWdCQ0FDUncwQVFib0JJUkFNcWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmTFBnSUFBYWkwQUFFY05rZ0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYm9CSVJBTXFnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkR5RVFESThCQ3dKQUlBUWdBa2NOQUVHN0FTRVFES2tDQ3dKQUFrQWdCQzBBQUVHM2Yyb09Cd0NTQVpJQmtnR1NBWklCQVpJQkN5QUVRUUZxSVFSQnBRRWhFQXlRQWdzZ0JFRUJhaUVFUWFZQklSQU1qd0lMQWtBZ0JDQUNSdzBBUWJ3QklSQU1xQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkIyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZUUGdJQUFhaTBBQUVjTmtBRWdBVUVIUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFid0JJUkFNcUFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR3lFUURJMEJDd0pBSUFRZ0FrY05BRUc5QVNFUURLY0NDd0pBQWtBQ1FDQUVMUUFBUWI1L2FnNFNBSkVCa1FHUkFaRUJrUUdSQVpFQmtRR1JBUUdSQVpFQmtRR1JBWkVCa1FFQ2tRRUxJQVJCQVdvaEJFR2tBU0VRREk4Q0N5QUVRUUZxSVFSQnB3RWhFQXlPQWdzZ0JFRUJhaUVFUWFnQklSQU1qUUlMQWtBZ0JDQUNSdzBBUWI0QklSQU1wZ0lMSUFRdEFBQkJ6Z0JIRFkwQklBUkJBV29oQkF6UEFRc0NRQ0FFSUFKSERRQkJ2d0VoRUF5bEFnc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUxRQUFRYjkvYWc0VkFBRUNBNXdCQkFVR25BR2NBWndCQndnSkNndWNBUXdORGcrY0FRc2dCRUVCYWlFQlFlZ0FJUkFNbWdJTElBUkJBV29oQVVIcEFDRVFESmtDQ3lBRVFRRnFJUUZCN2dBaEVBeVlBZ3NnQkVFQmFpRUJRZklBSVJBTWx3SUxJQVJCQVdvaEFVSHpBQ0VRREpZQ0N5QUVRUUZxSVFGQjlnQWhFQXlWQWdzZ0JFRUJhaUVCUWZjQUlSQU1sQUlMSUFSQkFXb2hBVUg2QUNFUURKTUNDeUFFUVFGcUlRUkJnd0VoRUF5U0Fnc2dCRUVCYWlFRVFZUUJJUkFNa1FJTElBUkJBV29oQkVHRkFTRVFESkFDQ3lBRVFRRnFJUVJCa2dFaEVBeVBBZ3NnQkVFQmFpRUVRWmdCSVJBTWpnSUxJQVJCQVdvaEJFR2dBU0VRREkwQ0N5QUVRUUZxSVFSQm93RWhFQXlNQWdzZ0JFRUJhaUVFUWFvQklSQU1pd0lMQWtBZ0JDQUNSZzBBSUFCQmtJQ0FnQUEyQWdnZ0FDQUVOZ0lFUWFzQklSQU1pd0lMUWNBQklSQU1vd0lMSUFBZ0JTQUNFS3FBZ0lBQUlnRU5pd0VnQlNFQkRGd0xBa0FnQmlBQ1JnMEFJQVpCQVdvaEJReU5BUXRCd2dFaEVBeWhBZ3NEUUFKQUlCQXRBQUJCZG1vT0JJd0JBQUNQQVFBTElCQkJBV29pRUNBQ1J3MEFDMEhEQVNFUURLQUNDd0pBSUFjZ0FrWU5BQ0FBUVpHQWdJQUFOZ0lJSUFBZ0J6WUNCQ0FISVFGQkFTRVFESWNDQzBIRUFTRVFESjhDQ3dKQUlBY2dBa2NOQUVIRkFTRVFESjhDQ3dKQUFrQWdCeTBBQUVGMmFnNEVBYzRCemdFQXpnRUxJQWRCQVdvaEJneU5BUXNnQjBFQmFpRUZESWtCQ3dKQUlBY2dBa2NOQUVIR0FTRVFESjRDQ3dKQUFrQWdCeTBBQUVGMmFnNFhBWThCandFQmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFJOEJDeUFIUVFGcUlRY0xRYkFCSVJBTWhBSUxBa0FnQ0NBQ1J3MEFRY2dCSVJBTW5RSUxJQWd0QUFCQklFY05qUUVnQUVFQU93RXlJQWhCQVdvaEFVR3pBU0VRRElNQ0N5QUJJUmNDUUFOQUlCY2lCeUFDUmcwQklBY3RBQUJCVUdwQi93RnhJaEJCQ2s4TnpBRUNRQ0FBTHdFeUloUkJtVE5MRFFBZ0FDQVVRUXBzSWhRN0FUSWdFRUgvL3dOeklCUkIvdjhEY1VrTkFDQUhRUUZxSVJjZ0FDQVVJQkJxSWhBN0FUSWdFRUgvL3dOeFFlZ0hTUTBCQ3d0QkFDRVFJQUJCQURZQ0hDQUFRY0dKZ0lBQU5nSVFJQUJCRFRZQ0RDQUFJQWRCQVdvMkFoUU1uQUlMUWNjQklSQU1td0lMSUFBZ0NDQUNFSzZBZ0lBQUloQkZEY29CSUJCQkZVY05qQUVnQUVISUFUWUNIQ0FBSUFnMkFoUWdBRUhKbDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREpvQ0N3SkFJQWtnQWtjTkFFSE1BU0VRREpvQ0MwRUFJUlJCQVNFWFFRRWhGa0VBSVJBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0NTMEFBRUZRYWc0S2xnR1ZBUUFCQWdNRUJRWUlsd0VMUVFJaEVBd0dDMEVESVJBTUJRdEJCQ0VRREFRTFFRVWhFQXdEQzBFR0lSQU1BZ3RCQnlFUURBRUxRUWdoRUF0QkFDRVhRUUFoRmtFQUlSUU1qZ0VMUVFraEVFRUJJUlJCQUNFWFFRQWhGZ3lOQVFzQ1FDQUtJQUpIRFFCQnpnRWhFQXlaQWdzZ0NpMEFBRUV1UncyT0FTQUtRUUZxSVFrTXlnRUxJQXNnQWtjTmpnRkIwQUVoRUF5WEFnc0NRQ0FMSUFKR0RRQWdBRUdPZ0lDQUFEWUNDQ0FBSUFzMkFnUkJ0d0VoRUF6K0FRdEIwUUVoRUF5V0Fnc0NRQ0FFSUFKSERRQkIwZ0VoRUF5V0Fnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVFYWlFTEEwQWdCQzBBQUNBUVFmelBnSUFBYWkwQUFFY05qZ0VnRUVFRVJnM3BBU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhTQVNFUURKVUNDeUFBSUF3Z0FoQ3NnSUNBQUNJQkRZMEJJQXdoQVF5NEFRc0NRQ0FFSUFKSERRQkIxQUVoRUF5VUFnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVCYWlFTUEwQWdCQzBBQUNBUVFZSFFnSUFBYWkwQUFFY05qd0VnRUVFQlJnMk9BU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhVQVNFUURKTUNDd0pBSUFRZ0FrY05BRUhXQVNFUURKTUNDeUFDSUFScklBQW9BZ0FpRUdvaEZDQUVJQkJyUVFKcUlRc0RRQ0FFTFFBQUlCQkJnOUNBZ0FCcUxRQUFSdzJPQVNBUVFRSkdEWkFCSUJCQkFXb2hFQ0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWRZQklSQU1rZ0lMQWtBZ0JDQUNSdzBBUWRjQklSQU1rZ0lMQWtBQ1FDQUVMUUFBUWJ0L2FnNFFBSThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0VCandFTElBUkJBV29oQkVHN0FTRVFEUGtCQ3lBRVFRRnFJUVJCdkFFaEVBejRBUXNDUUNBRUlBSkhEUUJCMkFFaEVBeVJBZ3NnQkMwQUFFSElBRWNOakFFZ0JFRUJhaUVFRE1RQkN3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFRytBU0VRRFBjQkMwSFpBU0VRREk4Q0N3SkFJQVFnQWtjTkFFSGFBU0VRREk4Q0N5QUVMUUFBUWNnQVJnM0RBU0FBUVFFNkFDZ011UUVMSUFCQkFqb0FMeUFBSUFRZ0FoQ21nSUNBQUNJUURZMEJRY0lCSVJBTTlBRUxJQUF0QUNoQmYyb09BcmNCdVFHNEFRc0RRQUpBSUFRdEFBQkJkbW9PQkFDT0FZNEJBSTRCQ3lBRVFRRnFJZ1FnQWtjTkFBdEIzUUVoRUF5TEFnc2dBRUVBT2dBdklBQXRBQzFCQkhGRkRZUUNDeUFBUVFBNkFDOGdBRUVCT2dBMElBRWhBUXlNQVFzZ0VFRVZSZzNhQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCcDQ2QWdBQTJBaEFnQUVFU05nSU1RUUFoRUF5SUFnc0NRQ0FBSUJBZ0FoQzBnSUNBQUNJRURRQWdFQ0VCRElFQ0N3SkFJQVJCRlVjTkFDQUFRUU0yQWh3Z0FDQVFOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeUlBZ3NnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNaHdJTElCQkJGVVlOMWdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWRxTmdJQUFOZ0lRSUFCQkZEWUNERUVBSVJBTWhnSUxJQUFvQWdRaEZ5QUFRUUEyQWdRZ0VDQVJwMm9pRmlFQklBQWdGeUFRSUJZZ0ZCc2lFQkMxZ0lDQUFDSVVSUTJOQVNBQVFRYzJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNaFFJTElBQWdBQzhCTUVHQUFYSTdBVEFnQVNFQkMwRXFJUkFNNmdFTElCQkJGVVlOMFFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVlPTWdJQUFOZ0lRSUFCQkV6WUNERUVBSVJBTWdnSUxJQkJCRlVZTnp3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU1nUUlMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJMEJDeUFBUVF3MkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNZ0FJTElCQkJGVVlOekFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTS93RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCREl3QkN5QUFRUTAyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vZ0VMSUJCQkZVWU55UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY2FNZ0lBQU5nSVFJQUJCSXpZQ0RFRUFJUkFNL1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkM1Z0lDQUFDSVFEUUFnQVVFQmFpRUJESXNCQ3lBQVFRNDJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTS9BRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEFsWUNBQURZQ0VDQUFRUUkyQWd4QkFDRVFEUHNCQ3lBUVFSVkdEY1VCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFBvQkN5QUFRUkEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTStRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDNWdJQ0FBQ0lFRFFBZ0FVRUJhaUVCRFBFQkN5QUFRUkUyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0rQUVMSUJCQkZVWU53UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY2FNZ0lBQU5nSVFJQUJCSXpZQ0RFRUFJUkFNOXdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkM1Z0lDQUFDSVFEUUFnQVVFQmFpRUJESWdCQ3lBQVFSTTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTlnRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDNWdJQ0FBQ0lFRFFBZ0FVRUJhaUVCRE8wQkN5QUFRUlEyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05UUVMSUJCQkZVWU52UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNOUFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESVlCQ3lBQVFSWTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTh3RUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDM2dJQ0FBQ0lFRFFBZ0FVRUJhaUVCRE9rQkN5QUFRUmMyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04Z0VMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhOazRDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRFBFQkMwSUJJUkVMSUJCQkFXb2hBUUpBSUFBcEF5QWlFa0wvLy8vLy8vLy8vdzlXRFFBZ0FDQVNRZ1NHSUJHRU53TWdJQUVoQVF5RUFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFhMkpnSUFBTmdJUUlBQkJERFlDREVFQUlSQU03d0VMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUhOazRDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE80QkN5QUFLQUlFSVJjZ0FFRUFOZ0lFSUJBZ0VhZHFJaFloQVNBQUlCY2dFQ0FXSUJRYkloQVF0WUNBZ0FBaUZFVU5jeUFBUVFVMkFod2dBQ0FRTmdJVUlBQWdGRFlDREVFQUlSQU03UUVMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdxbklDQUFEWUNFQ0FBUVE4MkFneEJBQ0VRRE93QkN5QUFJQkFnQWhDMGdJQ0FBQ0lCRFFFZ0VDRUJDMEVPSVJBTTBRRUxBa0FnQVVFVlJ3MEFJQUJCQWpZQ0hDQUFJQkEyQWhRZ0FFR3dtSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFET29CQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcDQ2QWdBQTJBaEFnQUVFU05nSU1RUUFoRUF6cEFRc2dBVUVCYWlFUUFrQWdBQzhCTUNJQlFZQUJjVVVOQUFKQUlBQWdFQ0FDRUx1QWdJQUFJZ0VOQUNBUUlRRU1jQXNnQVVFVlJ3MjZBU0FBUVFVMkFod2dBQ0FRTmdJVUlBQkIrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzQ1FDQUJRYUFFY1VHZ0JFY05BQ0FBTFFBdFFRSnhEUUFnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRWmFUZ0lBQU5nSVFJQUJCQkRZQ0RFRUFJUkFNNlFFTElBQWdFQ0FDRUwyQWdJQUFHaUFRSVFFQ1FBSkFBa0FDUUFKQUlBQWdFQ0FDRUxPQWdJQUFEaFlDQVFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRREJBc2dBRUVCT2dBdUN5QUFJQUF2QVRCQndBQnlPd0V3SUJBaEFRdEJKaUVRRE5FQkN5QUFRU00yQWh3Z0FDQVFOZ0lVSUFCQnBaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenBBUXNnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRZFdMZ0lBQU5nSVFJQUJCRVRZQ0RFRUFJUkFNNkFFTElBQXRBQzFCQVhGRkRRRkJ3d0VoRUF6T0FRc0NRQ0FOSUFKR0RRQURRQUpBSUEwdEFBQkJJRVlOQUNBTklRRU14QUVMSUExQkFXb2lEU0FDUncwQUMwRWxJUkFNNXdFTFFTVWhFQXptQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0RSQ3ZnSUNBQUNJRVJRMnRBU0FBUVNZMkFod2dBQ0FFTmdJTUlBQWdEVUVCYWpZQ0ZFRUFJUkFNNVFFTElCQkJGVVlOcXdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWYyTmdJQUFOZ0lRSUFCQkhUWUNERUVBSVJBTTVBRUxJQUJCSnpZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBempBUXNnRUNFQlFRRWhGQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZm1vT0J3WUZCUU1CQWdBRkN5QUFJQUF2QVRCQkNISTdBVEFNQXd0QkFpRVVEQUVMUVFRaEZBc2dBRUVCT2dBc0lBQWdBQzhCTUNBVWNqc0JNQXNnRUNFQkMwRXJJUkFNeWdFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcmtvQ0FBRFlDRUNBQVFRczJBZ3hCQUNFUURPSUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkI0WStBZ0FBMkFoQWdBRUVLTmdJTVFRQWhFQXpoQVFzZ0FFRUFPZ0FzSUJBaEFReTlBUXNnRUNFQlFRRWhGQUpBQWtBQ1FBSkFBa0FnQUMwQUxFRjdhZzRFQXdFQ0FBVUxJQUFnQUM4Qk1FRUljanNCTUF3REMwRUNJUlFNQVF0QkJDRVVDeUFBUVFFNkFDd2dBQ0FBTHdFd0lCUnlPd0V3Q3lBUUlRRUxRU2toRUF6RkFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFmQ1VnSUFBTmdJUUlBQkJBellDREVFQUlSQU0zUUVMQWtBZ0RpMEFBRUVOUncwQUlBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGtFQmFpRUJESFVMSUFCQkxEWUNIQ0FBSUFFMkFnd2dBQ0FPUVFGcU5nSVVRUUFoRUF6ZEFRc2dBQzBBTFVFQmNVVU5BVUhFQVNFUURNTUJDd0pBSUE0Z0FrY05BRUV0SVJBTTNBRUxBa0FDUUFOQUFrQWdEaTBBQUVGMmFnNEVBZ0FBQXdBTElBNUJBV29pRGlBQ1J3MEFDMEV0SVJBTTNRRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RpRUJESFFMSUFCQkxEWUNIQ0FBSUE0MkFoUWdBQ0FCTmdJTVFRQWhFQXpjQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQU9FTEdBZ0lBQUlnRU5BQ0FPUVFGcUlRRU1jd3NnQUVFc05nSWNJQUFnQVRZQ0RDQUFJQTVCQVdvMkFoUkJBQ0VRRE5zQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQU9FTEdBZ0lBQUlnUU5vQUVnRGlFQkRNNEJDeUFRUVN4SERRRWdBVUVCYWlFUVFRRWhBUUpBQWtBQ1FBSkFBa0FnQUMwQUxFRjdhZzRFQXdFQ0JBQUxJQkFoQVF3RUMwRUNJUUVNQVF0QkJDRUJDeUFBUVFFNkFDd2dBQ0FBTHdFd0lBRnlPd0V3SUJBaEFRd0JDeUFBSUFBdkFUQkJDSEk3QVRBZ0VDRUJDMEU1SVJBTXZ3RUxJQUJCQURvQUxDQUJJUUVMUVRRaEVBeTlBUXNnQUNBQUx3RXdRU0J5T3dFd0lBRWhBUXdDQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFzWUNBZ0FBaUJBMEFJQUVoQVF6SEFRc2dBRUUzTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUUROUUJDeUFBUVFnNkFDd2dBU0VCQzBFd0lSQU11UUVMQWtBZ0FDMEFLRUVCUmcwQUlBRWhBUXdFQ3lBQUxRQXRRUWh4UlEyVEFTQUJJUUVNQXdzZ0FDMEFNRUVnY1EyVUFVSEZBU0VRRExjQkN3SkFJQThnQWtZTkFBSkFBMEFDUUNBUExRQUFRVkJxSWdGQi93RnhRUXBKRFFBZ0R5RUJRVFVoRUF5NkFRc2dBQ2tESUNJUlFwbXo1c3lacytiTUdWWU5BU0FBSUJGQ0NuNGlFVGNESUNBUklBR3RRdjhCZ3lJU1FuK0ZWZzBCSUFBZ0VTQVNmRGNESUNBUFFRRnFJZzhnQWtjTkFBdEJPU0VRRE5FQkN5QUFLQUlFSVFJZ0FFRUFOZ0lFSUFBZ0FpQVBRUUZxSWdRUXNZQ0FnQUFpQWcyVkFTQUVJUUVNd3dFTFFUa2hFQXpQQVFzQ1FDQUFMd0V3SWdGQkNIRkZEUUFnQUMwQUtFRUJSdzBBSUFBdEFDMUJDSEZGRFpBQkN5QUFJQUZCOS9zRGNVR0FCSEk3QVRBZ0R5RUJDMEUzSVJBTXRBRUxJQUFnQUM4Qk1FRVFjanNCTUF5ckFRc2dFRUVWUmcyTEFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhJNkFnQUEyQWhBZ0FFRWNOZ0lNUVFBaEVBekxBUXNnQUVIREFEWUNIQ0FBSUFFMkFnd2dBQ0FOUVFGcU5nSVVRUUFoRUF6S0FRc0NRQ0FCTFFBQVFUcEhEUUFnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLK0FnSUFBSWhBTkFDQUJRUUZxSVFFTVl3c2dBRUhEQURZQ0hDQUFJQkEyQWd3Z0FDQUJRUUZxTmdJVVFRQWhFQXpLQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJHUmdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTXlRRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2dtWUNBQURZQ0VDQUFRUjQyQWd4QkFDRVFETWdCQ3lBQVFRQTJBZ0FMSUFCQmdCSTdBU29nQUNBWFFRRnFJZ0VnQWhDb2dJQ0FBQ0lRRFFFZ0FTRUJDMEhIQUNFUURLd0JDeUFRUVJWSERZTUJJQUJCMFFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpFQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVhnc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBekRBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY0dvZ0lBQU5nSVFJQUJCQnpZQ0RDQUFRUUEyQWdCQkFDRVFETUlCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4ZEN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURNRUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVlDUmdJQUFOZ0lRSUFCQkNUWUNEQXpBQVFzZ0VFRVZSZzE5SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdVallDQUFEWUNFQ0FBUVNFMkFneEJBQ0VRREw4QkMwRUJJUlpCQUNFWFFRQWhGRUVCSVJBTElBQWdFRG9BS3lBQlFRRnFJUUVDUUFKQUlBQXRBQzFCRUhFTkFBSkFBa0FDUUNBQUxRQXFEZ01CQUFJRUN5QVdSUTBEREFJTElCUU5BUXdDQ3lBWFJRMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXJZQ0FnQUFpRUEwQUlBRWhBUXhjQ3lBQVFkZ0FOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREw0QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXRBUXNnQUVIWkFEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk5QVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFSzJBZ0lBQUlnUU5BQ0FCSVFFTXF3RUxJQUJCMmdBMkFod2dBQ0FCTmdJVUlBQWdCRFlDREVFQUlSQU12QUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtrQkN5QUFRZHdBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMc0JDd0pBSUFFdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQVVFQmFpRUJRYzhBSVJBTW9nRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES2NCQ3lBQVFkNEFOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRExvQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLVUVqVHcwQUlBRWhBUXhaQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCMDRtQWdBQTJBaEFnQUVFSU5nSU1RUUFoRUF5NUFRc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWkN6Z0lBQU5nSVFJQUJCQ0RZQ0RBeTNBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQklVY05BQ0FCSVFFTVZnc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFadUtnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU10Z0VMSUFCQkFEWUNBQ0FYUVFGcUlRRUNRQ0FBTFFBcEloQkJYV3BCQzA4TkFDQUJJUUVNVlFzQ1FDQVFRUVpMRFFCQkFTQVFkRUhLQUhGRkRRQWdBU0VCREZVTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI5NG1BZ0FBMkFoQWdBRUVJTmdJTURMVUJDeUFRUVJWR0RYRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU10QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREZRTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXN3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc2dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFMExJQUJCMHdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREZFTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNBRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdpb0NBQURZQ0VDQUFRUWMyQWd4QkFDRVFESzhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLNEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhKQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREswQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFES3dCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCM0lpQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5ckFRc2dFRUUvUncwQklBRkJBV29oQVF0QkJTRVFESkFCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMlNnSUFBTmdJUUlBQkJCellDREF5b0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXluQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVFnc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeW1BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUmdzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bEFRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIU0FEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlrQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVB3c2dBRUhUQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWpBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUXdzZ0FFSGxBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5aUFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFjT1BnSUFBTmdJUUlBQkJCellDREVFQUlSQU1vUUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtBQkMwRUFJUkFnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRWXljZ0lBQU5nSVFJQUJCQnpZQ0RBeWZBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRWXljZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNbmdFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIK2tZQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKMEJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJqcHVBZ0FBMkFoQWdBRUVHTmdJTVFRQWhFQXljQVFzZ0VFRVZSZzFYSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhNam9DQUFEWUNFQ0FBUVNBMkFneEJBQ0VRREpzQkN5QUFRUUEyQWdBZ0VFRUJhaUVCUVNRaEVBc2dBQ0FRT2dBcElBQW9BZ1FoRUNBQVFRQTJBZ1FnQUNBUUlBRVFxNENBZ0FBaUVBMVVJQUVoQVF3K0N5QUFRUUEyQWdBTFFRQWhFQ0FBUVFBMkFod2dBQ0FFTmdJVUlBQkI4WnVBZ0FBMkFoQWdBRUVHTmdJTURKY0JDeUFCUVJWR0RWQWdBRUVBTmdJY0lBQWdCVFlDRkNBQVFmQ01nSUFBTmdJUUlBQkJHellDREVFQUlSQU1sZ0VMSUFBb0FnUWhCU0FBUVFBMkFnUWdBQ0FGSUJBUXFZQ0FnQUFpQlEwQklCQkJBV29oQlF0QnJRRWhFQXg3Q3lBQVFjRUJOZ0ljSUFBZ0JUWUNEQ0FBSUJCQkFXbzJBaFJCQUNFUURKTUJDeUFBS0FJRUlRWWdBRUVBTmdJRUlBQWdCaUFRRUttQWdJQUFJZ1lOQVNBUVFRRnFJUVlMUWE0QklSQU1lQXNnQUVIQ0FUWUNIQ0FBSUFZMkFnd2dBQ0FRUVFGcU5nSVVRUUFoRUF5UUFRc2dBRUVBTmdJY0lBQWdCellDRkNBQVFaZUxnSUFBTmdJUUlBQkJEVFlDREVFQUlSQU1qd0VMSUFCQkFEWUNIQ0FBSUFnMkFoUWdBRUhqa0lDQUFEWUNFQ0FBUVFrMkFneEJBQ0VRREk0QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeU5BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dDVUVCYWlFSUFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0NCQ3RnSUNBQUNJUVJRMDlJQUJCeVFFMkFod2dBQ0FJTmdJVUlBQWdFRFlDREVFQUlSQU1qQUVMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFnUXJZQ0FnQUFpQkVVTmRpQUFRY29CTmdJY0lBQWdDRFlDRkNBQUlBUTJBZ3hCQUNFUURJc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FKRUsyQWdJQUFJZ1JGRFhRZ0FFSExBVFlDSENBQUlBazJBaFFnQUNBRU5nSU1RUUFoRUF5S0FRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDaEN0Z0lDQUFDSUVSUTF5SUFCQnpRRTJBaHdnQUNBS05nSVVJQUFnQkRZQ0RFRUFJUkFNaVFFTEFrQWdDeTBBQUVGUWFpSVFRZjhCY1VFS1R3MEFJQUFnRURvQUtpQUxRUUZxSVFwQnRnRWhFQXh3Q3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBTEVLMkFnSUFBSWdSRkRYQWdBRUhQQVRZQ0hDQUFJQXMyQWhRZ0FDQUVOZ0lNUVFBaEVBeUlBUXNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRWkN6Z0lBQU5nSVFJQUJCQ0RZQ0RDQUFRUUEyQWdCQkFDRVFESWNCQ3lBQlFSVkdEVDhnQUVFQU5nSWNJQUFnRERZQ0ZDQUFRY3lPZ0lBQU5nSVFJQUJCSURZQ0RFRUFJUkFNaGdFTElBQkJnUVE3QVNnZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0RFRUJhaUlNRUt1QWdJQUFJaEJGRFRnZ0FFSFRBVFlDSENBQUlBdzJBaFFnQUNBUU5nSU1RUUFoRUF5RkFRc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZGliZ0lBQU5nSVFJQUJCQ0RZQ0RBeURBUXNnQUNnQ0JDRVFJQUJDQURjREFDQUFJQkFnQzBFQmFpSUxFS3VBZ0lBQUloQU5BVUhHQVNFUURHa0xJQUJCQWpvQUtBeFZDeUFBUWRVQk5nSWNJQUFnQ3pZQ0ZDQUFJQkEyQWd4QkFDRVFESUFCQ3lBUVFSVkdEVGNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRYVNNZ0lBQU5nSVFJQUJCRURZQ0RFRUFJUkFNZndzZ0FDMEFORUVCUncwMElBQWdCQ0FDRUx5QWdJQUFJaEJGRFRRZ0VFRVZSdzAxSUFCQjNBRTJBaHdnQUNBRU5nSVVJQUJCMVphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4K0MwRUFJUkFnQUVFQU5nSWNJQUJCcjR1QWdBQTJBaEFnQUVFQ05nSU1JQUFnRkVFQmFqWUNGQXg5QzBFQUlSQU1Zd3RCQWlFUURHSUxRUTBoRUF4aEMwRVBJUkFNWUF0QkpTRVFERjhMUVJNaEVBeGVDMEVWSVJBTVhRdEJGaUVRREZ3TFFSY2hFQXhiQzBFWUlSQU1XZ3RCR1NFUURGa0xRUm9oRUF4WUMwRWJJUkFNVnd0QkhDRVFERllMUVIwaEVBeFZDMEVmSVJBTVZBdEJJU0VRREZNTFFTTWhFQXhTQzBIR0FDRVFERkVMUVM0aEVBeFFDMEV2SVJBTVR3dEJPeUVRREU0TFFUMGhFQXhOQzBISUFDRVFERXdMUWNrQUlSQU1Td3RCeXdBaEVBeEtDMEhNQUNFUURFa0xRYzRBSVJBTVNBdEIwUUFoRUF4SEMwSFZBQ0VRREVZTFFkZ0FJUkFNUlF0QjJRQWhFQXhFQzBIYkFDRVFERU1MUWVRQUlSQU1RZ3RCNVFBaEVBeEJDMEh4QUNFUURFQUxRZlFBSVJBTVB3dEJqUUVoRUF3K0MwR1hBU0VRREQwTFFha0JJUkFNUEF0QnJBRWhFQXc3QzBIQUFTRVFERG9MUWJrQklSQU1PUXRCcndFaEVBdzRDMEd4QVNFUUREY0xRYklCSVJBTU5ndEJ0QUVoRUF3MUMwRzFBU0VRRERRTFFib0JJUkFNTXd0QnZRRWhFQXd5QzBHL0FTRVFEREVMUWNFQklSQU1NQXNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZW1MZ0lBQU5nSVFJQUJCSHpZQ0RFRUFJUkFNU0FzZ0FFSGJBVFlDSENBQUlBUTJBaFFnQUVINmxvQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFY0xJQUJCK0FBMkFod2dBQ0FNTmdJVUlBQkJ5cGlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhHQ3lBQVFkRUFOZ0ljSUFBZ0JUWUNGQ0FBUWJDWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJRc2dBRUg1QURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeEVDeUFBUWZnQU5nSWNJQUFnQVRZQ0ZDQUFRY3FZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUXdzZ0FFSGtBRFlDSENBQUlBRTJBaFFnQUVIamw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFSUxJQUJCMXdBMkFod2dBQ0FCTmdJVUlBQkJ5WmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdVkyQWdBQTJBaEFnQUVFYU5nSU1RUUFoRUF4QUN5QUFRY0lBTmdJY0lBQWdBVFlDRkNBQVFlT1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Qd3NnQUVFQU5nSUVJQUFnRHlBUEVMR0FnSUFBSWdSRkRRRWdBRUU2TmdJY0lBQWdCRFlDRENBQUlBOUJBV28yQWhSQkFDRVFERDRMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3hnSUNBQUNJRVJRMEFJQUJCT3pZQ0hDQUFJQVEyQWd3Z0FDQUJRUUZxTmdJVVFRQWhFQXcrQ3lBQlFRRnFJUUVNTFFzZ0QwRUJhaUVCREMwTElBQkJBRFlDSENBQUlBODJBaFFnQUVIa2tvQ0FBRFlDRUNBQVFRUTJBZ3hCQUNFUUREc0xJQUJCTmpZQ0hDQUFJQVEyQWhRZ0FDQUNOZ0lNUVFBaEVBdzZDeUFBUVM0MkFod2dBQ0FPTmdJVUlBQWdCRFlDREVFQUlSQU1PUXNnQUVIUUFEWUNIQ0FBSUFFMkFoUWdBRUdSbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRERnTElBMUJBV29oQVF3c0N5QUFRUlUyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzJDeUFBUVJzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcxQ3lBQVFRODJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MEN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3pDeUFBUVJvMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd5Q3lBQVFRczJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eEN5QUFRUW8yQWh3Z0FDQUJOZ0lVSUFCQjVKYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3dDeUFBUVI0MkFod2dBQ0FCTmdJVUlBQkIrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd2Q3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCMm8yQWdBQTJBaEFnQUVFVU5nSU1RUUFoRUF3dUN5QUFRUVEyQWh3Z0FDQUJOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3RDeUFBUVFBMkFnQWdDMEVCYWlFTEMwRzRBU0VRREJJTElBQkJBRFlDQUNBUVFRRnFJUUZCOVFBaEVBd1JDeUFCSVFFQ1FDQUFMUUFwUVFWSERRQkI0d0FoRUF3UkMwSGlBQ0VRREJBTFFRQWhFQ0FBUVFBMkFod2dBRUhra1lDQUFEWUNFQ0FBUVFjMkFnd2dBQ0FVUVFGcU5nSVVEQ2dMSUFCQkFEWUNBQ0FYUVFGcUlRRkJ3QUFoRUF3T0MwRUJJUUVMSUFBZ0FUb0FMQ0FBUVFBMkFnQWdGMEVCYWlFQkMwRW9JUkFNQ3dzZ0FTRUJDMEU0SVJBTUNRc0NRQ0FCSWc4Z0FrWU5BQU5BQWtBZ0R5MEFBRUdBdm9DQUFHb3RBQUFpQVVFQlJnMEFJQUZCQWtjTkF5QVBRUUZxSVFFTUJBc2dEMEVCYWlJUElBSkhEUUFMUVQ0aEVBd2lDMEUrSVJBTUlRc2dBRUVBT2dBc0lBOGhBUXdCQzBFTElSQU1CZ3RCT2lFUURBVUxJQUZCQVdvaEFVRXRJUkFNQkFzZ0FDQUJPZ0FzSUFCQkFEWUNBQ0FXUVFGcUlRRkJEQ0VRREFNTElBQkJBRFlDQUNBWFFRRnFJUUZCQ2lFUURBSUxJQUJCQURZQ0FBc2dBRUVBT2dBc0lBMGhBVUVKSVJBTUFBc0xRUUFoRUNBQVFRQTJBaHdnQUNBTE5nSVVJQUJCelpDQWdBQTJBaEFnQUVFSk5nSU1EQmNMUVFBaEVDQUFRUUEyQWh3Z0FDQUtOZ0lVSUFCQjZZcUFnQUEyQWhBZ0FFRUpOZ0lNREJZTFFRQWhFQ0FBUVFBMkFod2dBQ0FKTmdJVUlBQkJ0NUNBZ0FBMkFoQWdBRUVKTmdJTURCVUxRUUFoRUNBQVFRQTJBaHdnQUNBSU5nSVVJQUJCbkpHQWdBQTJBaEFnQUVFSk5nSU1EQlFMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJNTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCSUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQkVMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJBTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsNVdBZ0FBMkFoQWdBRUVQTmdJTURBOExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQTRMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQndKS0FnQUEyQWhBZ0FFRUxOZ0lNREEwTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsWW1BZ0FBMkFoQWdBRUVMTmdJTURBd0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1EQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQis0K0FnQUEyQWhBZ0FFRUtOZ0lNREFvTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4Wm1BZ0FBMkFoQWdBRUVDTmdJTURBa0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeEpTQWdBQTJBaEFnQUVFQ05nSU1EQWdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhwV0FnQUEyQWhBZ0FFRUNOZ0lNREFjTElBQkJBallDSENBQUlBRTJBaFFnQUVHY21vQ0FBRFlDRUNBQVFSWTJBZ3hCQUNFUURBWUxRUUVoRUF3RkMwSFVBQ0VRSUFFaUJDQUNSZzBFSUFOQkNHb2dBQ0FFSUFKQjJNS0FnQUJCQ2hERmdJQ0FBQ0FES0FJTUlRUWdBeWdDQ0E0REFRUUNBQXNReW9DQWdBQUFDeUFBUVFBMkFod2dBRUcxbW9DQUFEWUNFQ0FBUVJjMkFnd2dBQ0FFUVFGcU5nSVVRUUFoRUF3Q0N5QUFRUUEyQWh3Z0FDQUVOZ0lVSUFCQnlwcUFnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBd0JDd0pBSUFFaUJDQUNSdzBBUVNJaEVBd0JDeUFBUVltQWdJQUFOZ0lJSUFBZ0JEWUNCRUVoSVJBTElBTkJFR29rZ0lDQWdBQWdFQXV2QVFFQ2Z5QUJLQUlBSVFZQ1FBSkFJQUlnQTBZTkFDQUVJQVpxSVFRZ0JpQURhaUFDYXlFSElBSWdCa0YvY3lBRmFpSUdhaUVGQTBBQ1FDQUNMUUFBSUFRdEFBQkdEUUJCQWlFRURBTUxBa0FnQmcwQVFRQWhCQ0FGSVFJTUF3c2dCa0YvYWlFR0lBUkJBV29oQkNBQ1FRRnFJZ0lnQTBjTkFBc2dCeUVHSUFNaEFnc2dBRUVCTmdJQUlBRWdCallDQUNBQUlBSTJBZ1FQQ3lBQlFRQTJBZ0FnQUNBRU5nSUFJQUFnQWpZQ0JBc0tBQ0FBRU1lQWdJQUFDL0kyQVF0L0k0Q0FnSUFBUVJCcklnRWtnSUNBZ0FBQ1FFRUFLQUtnMElDQUFBMEFRUUFReTRDQWdBQkJnTlNFZ0FCcklnSkIyUUJKRFFCQkFDRURBa0JCQUNnQzROT0FnQUFpQkEwQVFRQkNmemNDN05PQWdBQkJBRUtBZ0lTQWdJREFBRGNDNU5PQWdBQkJBQ0FCUVFocVFYQnhRZGlxMWFvRmN5SUVOZ0xnMDRDQUFFRUFRUUEyQXZUVGdJQUFRUUJCQURZQ3hOT0FnQUFMUVFBZ0FqWUN6Tk9BZ0FCQkFFR0ExSVNBQURZQ3lOT0FnQUJCQUVHQTFJU0FBRFlDbU5DQWdBQkJBQ0FFTmdLczBJQ0FBRUVBUVg4MkFxalFnSUFBQTBBZ0EwSEUwSUNBQUdvZ0EwRzQwSUNBQUdvaUJEWUNBQ0FFSUFOQnNOQ0FnQUJxSWdVMkFnQWdBMEc4MElDQUFHb2dCVFlDQUNBRFFjelFnSUFBYWlBRFFjRFFnSUFBYWlJRk5nSUFJQVVnQkRZQ0FDQURRZFRRZ0lBQWFpQURRY2pRZ0lBQWFpSUVOZ0lBSUFRZ0JUWUNBQ0FEUWREUWdJQUFhaUFFTmdJQUlBTkJJR29pQTBHQUFrY05BQXRCZ05TRWdBQkJlRUdBMUlTQUFHdEJEM0ZCQUVHQTFJU0FBRUVJYWtFUGNSc2lBMm9pQkVFRWFpQUNRVWhxSWdVZ0Eyc2lBMEVCY2pZQ0FFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQU0yQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUJCZ05TRWdBQWdCV3BCT0RZQ0JBc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FFSHNBVXNOQUFKQVFRQW9Bb2pRZ0lBQUlnWkJFQ0FBUVJOcVFYQnhJQUJCQzBrYklnSkJBM1lpQkhZaUEwRURjVVVOQUFKQUFrQWdBMEVCY1NBRWNrRUJjeUlGUVFOMElnUkJzTkNBZ0FCcUlnTWdCRUc0MElDQUFHb29BZ0FpQkNnQ0NDSUNSdzBBUVFBZ0JrRitJQVYzY1RZQ2lOQ0FnQUFNQVFzZ0F5QUNOZ0lJSUFJZ0F6WUNEQXNnQkVFSWFpRURJQVFnQlVFRGRDSUZRUU55TmdJRUlBUWdCV29pQkNBRUtBSUVRUUZ5TmdJRURBd0xJQUpCQUNnQ2tOQ0FnQUFpQjAwTkFRSkFJQU5GRFFBQ1FBSkFJQU1nQkhSQkFpQUVkQ0lEUVFBZ0EydHljU0lEUVFBZ0EydHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbW9pQkVFRGRDSURRYkRRZ0lBQWFpSUZJQU5CdU5DQWdBQnFLQUlBSWdNb0FnZ2lBRWNOQUVFQUlBWkJmaUFFZDNFaUJqWUNpTkNBZ0FBTUFRc2dCU0FBTmdJSUlBQWdCVFlDREFzZ0F5QUNRUU55TmdJRUlBTWdCRUVEZENJRWFpQUVJQUpySWdVMkFnQWdBeUFDYWlJQUlBVkJBWEkyQWdRQ1FDQUhSUTBBSUFkQmVIRkJzTkNBZ0FCcUlRSkJBQ2dDbk5DQWdBQWhCQUpBQWtBZ0JrRUJJQWRCQTNaMElnaHhEUUJCQUNBR0lBaHlOZ0tJMElDQUFDQUNJUWdNQVFzZ0FpZ0NDQ0VJQ3lBSUlBUTJBZ3dnQWlBRU5nSUlJQVFnQWpZQ0RDQUVJQWcyQWdnTElBTkJDR29oQTBFQUlBQTJBcHpRZ0lBQVFRQWdCVFlDa05DQWdBQU1EQXRCQUNnQ2pOQ0FnQUFpQ1VVTkFTQUpRUUFnQ1d0eFFYOXFJZ01nQTBFTWRrRVFjU0lEZGlJRVFRVjJRUWh4SWdVZ0EzSWdCQ0FGZGlJRFFRSjJRUVJ4SWdSeUlBTWdCSFlpQTBFQmRrRUNjU0lFY2lBRElBUjJJZ05CQVhaQkFYRWlCSElnQXlBRWRtcEJBblJCdU5LQWdBQnFLQUlBSWdBb0FnUkJlSEVnQW1zaEJDQUFJUVVDUUFOQUFrQWdCU2dDRUNJRERRQWdCVUVVYWlnQ0FDSURSUTBDQ3lBREtBSUVRWGh4SUFKcklnVWdCQ0FGSUFSSklnVWJJUVFnQXlBQUlBVWJJUUFnQXlFRkRBQUxDeUFBS0FJWUlRb0NRQ0FBS0FJTUlnZ2dBRVlOQUNBQUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBSUlBTTJBZ2dnQXlBSU5nSU1EQXNMQWtBZ0FFRVVhaUlGS0FJQUlnTU5BQ0FBS0FJUUlnTkZEUU1nQUVFUWFpRUZDd05BSUFVaEN5QURJZ2hCRkdvaUJTZ0NBQ0lERFFBZ0NFRVFhaUVGSUFnb0FoQWlBdzBBQ3lBTFFRQTJBZ0FNQ2d0QmZ5RUNJQUJCdjM5TERRQWdBRUVUYWlJRFFYQnhJUUpCQUNnQ2pOQ0FnQUFpQjBVTkFFRUFJUXNDUUNBQ1FZQUNTUTBBUVI4aEN5QUNRZi8vL3dkTERRQWdBMEVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJRklBVkJnSUFQYWtFUWRrRUNjU0lGZEVFUGRpQURJQVJ5SUFWeWF5SURRUUYwSUFJZ0EwRVZhblpCQVhGeVFSeHFJUXNMUVFBZ0Ftc2hCQUpBQWtBQ1FBSkFJQXRCQW5SQnVOS0FnQUJxS0FJQUlnVU5BRUVBSVFOQkFDRUlEQUVMUVFBaEF5QUNRUUJCR1NBTFFRRjJheUFMUVI5R0czUWhBRUVBSVFnRFFBSkFJQVVvQWdSQmVIRWdBbXNpQmlBRVR3MEFJQVloQkNBRklRZ2dCZzBBUVFBaEJDQUZJUWdnQlNFRERBTUxJQU1nQlVFVWFpZ0NBQ0lHSUFZZ0JTQUFRUjEyUVFSeGFrRVFhaWdDQUNJRlJoc2dBeUFHR3lFRElBQkJBWFFoQUNBRkRRQUxDd0pBSUFNZ0NISU5BRUVBSVFoQkFpQUxkQ0lEUVFBZ0EydHlJQWR4SWdORkRRTWdBMEVBSUFOcmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJVRUZka0VJY1NJQUlBTnlJQVVnQUhZaUEwRUNka0VFY1NJRmNpQURJQVYySWdOQkFYWkJBbkVpQlhJZ0F5QUZkaUlEUVFGMlFRRnhJZ1Z5SUFNZ0JYWnFRUUowUWJqU2dJQUFhaWdDQUNFREN5QURSUTBCQ3dOQUlBTW9BZ1JCZUhFZ0Ftc2lCaUFFU1NFQUFrQWdBeWdDRUNJRkRRQWdBMEVVYWlnQ0FDRUZDeUFHSUFRZ0FCc2hCQ0FESUFnZ0FCc2hDQ0FGSVFNZ0JRMEFDd3NnQ0VVTkFDQUVRUUFvQXBEUWdJQUFJQUpyVHcwQUlBZ29BaGdoQ3dKQUlBZ29BZ3dpQUNBSVJnMEFJQWdvQWdnaUEwRUFLQUtZMElDQUFFa2FJQUFnQXpZQ0NDQURJQUEyQWd3TUNRc0NRQ0FJUVJScUlnVW9BZ0FpQXcwQUlBZ29BaEFpQTBVTkF5QUlRUkJxSVFVTEEwQWdCU0VHSUFNaUFFRVVhaUlGS0FJQUlnTU5BQ0FBUVJCcUlRVWdBQ2dDRUNJRERRQUxJQVpCQURZQ0FBd0lDd0pBUVFBb0FwRFFnSUFBSWdNZ0Fra05BRUVBS0FLYzBJQ0FBQ0VFQWtBQ1FDQURJQUpySWdWQkVFa05BQ0FFSUFKcUlnQWdCVUVCY2pZQ0JFRUFJQVUyQXBEUWdJQUFRUUFnQURZQ25OQ0FnQUFnQkNBRGFpQUZOZ0lBSUFRZ0FrRURjallDQkF3QkN5QUVJQU5CQTNJMkFnUWdCQ0FEYWlJRElBTW9BZ1JCQVhJMkFnUkJBRUVBTmdLYzBJQ0FBRUVBUVFBMkFwRFFnSUFBQ3lBRVFRaHFJUU1NQ2dzQ1FFRUFLQUtVMElDQUFDSUFJQUpORFFCQkFDZ0NvTkNBZ0FBaUF5QUNhaUlFSUFBZ0Ftc2lCVUVCY2pZQ0JFRUFJQVUyQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUFnQXlBQ1FRTnlOZ0lFSUFOQkNHb2hBd3dLQ3dKQUFrQkJBQ2dDNE5PQWdBQkZEUUJCQUNnQzZOT0FnQUFoQkF3QkMwRUFRbjgzQXV6VGdJQUFRUUJDZ0lDRWdJQ0F3QUEzQXVUVGdJQUFRUUFnQVVFTWFrRndjVUhZcXRXcUJYTTJBdURUZ0lBQVFRQkJBRFlDOU5PQWdBQkJBRUVBTmdMRTA0Q0FBRUdBZ0FRaEJBdEJBQ0VEQWtBZ0JDQUNRY2NBYWlJSGFpSUdRUUFnQkdzaUMzRWlDQ0FDU3cwQVFRQkJNRFlDK05PQWdBQU1DZ3NDUUVFQUtBTEEwNENBQUNJRFJRMEFBa0JCQUNnQ3VOT0FnQUFpQkNBSWFpSUZJQVJORFFBZ0JTQURUUTBCQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdLQzBFQUxRREUwNENBQUVFRWNRMEVBa0FDUUFKQVFRQW9BcURRZ0lBQUlnUkZEUUJCeU5PQWdBQWhBd05BQWtBZ0F5Z0NBQ0lGSUFSTERRQWdCU0FES0FJRWFpQUVTdzBEQ3lBREtBSUlJZ01OQUFzTFFRQVF5NENBZ0FBaUFFRi9SZzBGSUFnaEJnSkFRUUFvQXVUVGdJQUFJZ05CZjJvaUJDQUFjVVVOQUNBSUlBQnJJQVFnQUdwQkFDQURhM0ZxSVFZTElBWWdBazBOQlNBR1FmNy8vLzhIU3cwRkFrQkJBQ2dDd05PQWdBQWlBMFVOQUVFQUtBSzQwNENBQUNJRUlBWnFJZ1VnQkUwTkJpQUZJQU5MRFFZTElBWVF5NENBZ0FBaUF5QUFSdzBCREFjTElBWWdBR3NnQzNFaUJrSCsvLy8vQjBzTkJDQUdFTXVBZ0lBQUlnQWdBeWdDQUNBREtBSUVha1lOQXlBQUlRTUxBa0FnQTBGL1JnMEFJQUpCeUFCcUlBWk5EUUFDUUNBSElBWnJRUUFvQXVqVGdJQUFJZ1JxUVFBZ0JHdHhJZ1JCL3YvLy93ZE5EUUFnQXlFQURBY0xBa0FnQkJETGdJQ0FBRUYvUmcwQUlBUWdCbW9oQmlBRElRQU1Cd3RCQUNBR2F4RExnSUNBQUJvTUJBc2dBeUVBSUFOQmYwY05CUXdEQzBFQUlRZ01Cd3RCQUNFQURBVUxJQUJCZjBjTkFndEJBRUVBS0FMRTA0Q0FBRUVFY2pZQ3hOT0FnQUFMSUFoQi92Ly8vd2RMRFFFZ0NCRExnSUNBQUNFQVFRQVF5NENBZ0FBaEF5QUFRWDlHRFFFZ0EwRi9SZzBCSUFBZ0EwOE5BU0FESUFCcklnWWdBa0U0YWswTkFRdEJBRUVBS0FLNDA0Q0FBQ0FHYWlJRE5nSzQwNENBQUFKQUlBTkJBQ2dDdk5PQWdBQk5EUUJCQUNBRE5nSzgwNENBQUFzQ1FBSkFBa0FDUUVFQUtBS2cwSUNBQUNJRVJRMEFRY2pUZ0lBQUlRTURRQ0FBSUFNb0FnQWlCU0FES0FJRUlnaHFSZzBDSUFNb0FnZ2lBdzBBREFNTEN3SkFBa0JCQUNnQ21OQ0FnQUFpQTBVTkFDQUFJQU5QRFFFTFFRQWdBRFlDbU5DQWdBQUxRUUFoQTBFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUYvTmdLbzBJQ0FBRUVBUVFBb0F1RFRnSUFBTmdLczBJQ0FBRUVBUVFBMkF0VFRnSUFBQTBBZ0EwSEUwSUNBQUdvZ0EwRzQwSUNBQUdvaUJEWUNBQ0FFSUFOQnNOQ0FnQUJxSWdVMkFnQWdBMEc4MElDQUFHb2dCVFlDQUNBRFFjelFnSUFBYWlBRFFjRFFnSUFBYWlJRk5nSUFJQVVnQkRZQ0FDQURRZFRRZ0lBQWFpQURRY2pRZ0lBQWFpSUVOZ0lBSUFRZ0JUWUNBQ0FEUWREUWdJQUFhaUFFTmdJQUlBTkJJR29pQTBHQUFrY05BQXNnQUVGNElBQnJRUTl4UVFBZ0FFRUlha0VQY1JzaUEyb2lCQ0FHUVVocUlnVWdBMnNpQTBFQmNqWUNCRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0FDQUZha0U0TmdJRURBSUxJQU10QUF4QkNIRU5BQ0FFSUFWSkRRQWdCQ0FBVHcwQUlBUkJlQ0FFYTBFUGNVRUFJQVJCQ0dwQkQzRWJJZ1ZxSWdCQkFDZ0NsTkNBZ0FBZ0Jtb2lDeUFGYXlJRlFRRnlOZ0lFSUFNZ0NDQUdhallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBVTJBcFRRZ0lBQVFRQWdBRFlDb05DQWdBQWdCQ0FMYWtFNE5nSUVEQUVMQWtBZ0FFRUFLQUtZMElDQUFDSUlUdzBBUVFBZ0FEWUNtTkNBZ0FBZ0FDRUlDeUFBSUFacUlRVkJ5Tk9BZ0FBaEF3SkFBa0FDUUFKQUFrQUNRQUpBQTBBZ0F5Z0NBQ0FGUmcwQklBTW9BZ2dpQXcwQURBSUxDeUFETFFBTVFRaHhSUTBCQzBISTA0Q0FBQ0VEQTBBQ1FDQURLQUlBSWdVZ0JFc05BQ0FGSUFNb0FnUnFJZ1VnQkVzTkF3c2dBeWdDQ0NFRERBQUxDeUFESUFBMkFnQWdBeUFES0FJRUlBWnFOZ0lFSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYmFpSUxJQUpCQTNJMkFnUWdCVUY0SUFWclFROXhRUUFnQlVFSWFrRVBjUnRxSWdZZ0N5QUNhaUlDYXlFREFrQWdCaUFFUncwQVFRQWdBallDb05DQWdBQkJBRUVBS0FLVTBJQ0FBQ0FEYWlJRE5nS1UwSUNBQUNBQ0lBTkJBWEkyQWdRTUF3c0NRQ0FHUVFBb0FwelFnSUFBUncwQVFRQWdBallDbk5DQWdBQkJBRUVBS0FLUTBJQ0FBQ0FEYWlJRE5nS1EwSUNBQUNBQ0lBTkJBWEkyQWdRZ0FpQURhaUFETmdJQURBTUxBa0FnQmlnQ0JDSUVRUU54UVFGSERRQWdCRUY0Y1NFSEFrQUNRQ0FFUWY4QlN3MEFJQVlvQWdnaUJTQUVRUU4ySWdoQkEzUkJzTkNBZ0FCcUlnQkdHZ0pBSUFZb0Fnd2lCQ0FGUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFJZDNFMkFvalFnSUFBREFJTElBUWdBRVlhSUFRZ0JUWUNDQ0FGSUFRMkFnd01BUXNnQmlnQ0dDRUpBa0FDUUNBR0tBSU1JZ0FnQmtZTkFDQUdLQUlJSWdRZ0NFa2FJQUFnQkRZQ0NDQUVJQUEyQWd3TUFRc0NRQ0FHUVJScUlnUW9BZ0FpQlEwQUlBWkJFR29pQkNnQ0FDSUZEUUJCQUNFQURBRUxBMEFnQkNFSUlBVWlBRUVVYWlJRUtBSUFJZ1VOQUNBQVFSQnFJUVFnQUNnQ0VDSUZEUUFMSUFoQkFEWUNBQXNnQ1VVTkFBSkFBa0FnQmlBR0tBSWNJZ1ZCQW5SQnVOS0FnQUJxSWdRb0FnQkhEUUFnQkNBQU5nSUFJQUFOQVVFQVFRQW9Bb3pRZ0lBQVFYNGdCWGR4TmdLTTBJQ0FBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBWkdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBazJBaGdDUUNBR0tBSVFJZ1JGRFFBZ0FDQUVOZ0lRSUFRZ0FEWUNHQXNnQmlnQ0ZDSUVSUTBBSUFCQkZHb2dCRFlDQUNBRUlBQTJBaGdMSUFjZ0Eyb2hBeUFHSUFkcUlnWW9BZ1FoQkFzZ0JpQUVRWDV4TmdJRUlBSWdBMm9nQXpZQ0FDQUNJQU5CQVhJMkFnUUNRQ0FEUWY4QlN3MEFJQU5CZUhGQnNOQ0FnQUJxSVFRQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBRFFRTjJkQ0lEY1EwQVFRQWdCU0FEY2pZQ2lOQ0FnQUFnQkNFRERBRUxJQVFvQWdnaEF3c2dBeUFDTmdJTUlBUWdBallDQ0NBQ0lBUTJBZ3dnQWlBRE5nSUlEQU1MUVI4aEJBSkFJQU5CLy8vL0Iwc05BQ0FEUVFoMklnUWdCRUdBL2o5cVFSQjJRUWh4SWdSMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQVFnQlhJZ0FISnJJZ1JCQVhRZ0F5QUVRUlZxZGtFQmNYSkJIR29oQkFzZ0FpQUVOZ0ljSUFKQ0FEY0NFQ0FFUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlBRUVCSUFSMElnaHhEUUFnQlNBQ05nSUFRUUFnQUNBSWNqWUNqTkNBZ0FBZ0FpQUZOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01Bd3NnQTBFQVFSa2dCRUVCZG1zZ0JFRWZSaHQwSVFRZ0JTZ0NBQ0VBQTBBZ0FDSUZLQUlFUVhoeElBTkdEUUlnQkVFZGRpRUFJQVJCQVhRaEJDQUZJQUJCQkhGcVFSQnFJZ2dvQWdBaUFBMEFDeUFJSUFJMkFnQWdBaUFGTmdJWUlBSWdBallDRENBQ0lBSTJBZ2dNQWdzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQ3lBR1FVaHFJZ2dnQTJzaUEwRUJjallDQkNBQUlBaHFRVGcyQWdRZ0JDQUZRVGNnQld0QkQzRkJBQ0FGUVVscVFROXhHMnBCUVdvaUNDQUlJQVJCRUdwSkd5SUlRU00yQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQXMyQXFEUWdJQUFJQWhCRUdwQkFDa0MwTk9BZ0FBM0FnQWdDRUVBS1FMSTA0Q0FBRGNDQ0VFQUlBaEJDR28yQXREVGdJQUFRUUFnQmpZQ3pOT0FnQUJCQUNBQU5nTEkwNENBQUVFQVFRQTJBdFRUZ0lBQUlBaEJKR29oQXdOQUlBTkJCellDQUNBRFFRUnFJZ01nQlVrTkFBc2dDQ0FFUmcwRElBZ2dDQ2dDQkVGK2NUWUNCQ0FJSUFnZ0JHc2lBRFlDQUNBRUlBQkJBWEkyQWdRQ1FDQUFRZjhCU3cwQUlBQkJlSEZCc05DQWdBQnFJUU1DUUFKQVFRQW9Bb2pRZ0lBQUlnVkJBU0FBUVFOMmRDSUFjUTBBUVFBZ0JTQUFjallDaU5DQWdBQWdBeUVGREFFTElBTW9BZ2doQlFzZ0JTQUVOZ0lNSUFNZ0JEWUNDQ0FFSUFNMkFnd2dCQ0FGTmdJSURBUUxRUjhoQXdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdNZ0EwR0EvajlxUVJCMlFRaHhJZ04wSWdVZ0JVR0E0QjlxUVJCMlFRUnhJZ1YwSWdnZ0NFR0FnQTlxUVJCMlFRSnhJZ2gwUVE5MklBTWdCWElnQ0hKcklnTkJBWFFnQUNBRFFSVnFka0VCY1hKQkhHb2hBd3NnQkNBRE5nSWNJQVJDQURjQ0VDQURRUUowUWJqU2dJQUFhaUVGQWtCQkFDZ0NqTkNBZ0FBaUNFRUJJQU4wSWdaeERRQWdCU0FFTmdJQVFRQWdDQ0FHY2pZQ2pOQ0FnQUFnQkNBRk5nSVlJQVFnQkRZQ0NDQUVJQVEyQWd3TUJBc2dBRUVBUVJrZ0EwRUJkbXNnQTBFZlJodDBJUU1nQlNnQ0FDRUlBMEFnQ0NJRktBSUVRWGh4SUFCR0RRTWdBMEVkZGlFSUlBTkJBWFFoQXlBRklBaEJCSEZxUVJCcUlnWW9BZ0FpQ0EwQUN5QUdJQVEyQWdBZ0JDQUZOZ0lZSUFRZ0JEWUNEQ0FFSUFRMkFnZ01Bd3NnQlNnQ0NDSURJQUkyQWd3Z0JTQUNOZ0lJSUFKQkFEWUNHQ0FDSUFVMkFnd2dBaUFETmdJSUN5QUxRUWhxSVFNTUJRc2dCU2dDQ0NJRElBUTJBZ3dnQlNBRU5nSUlJQVJCQURZQ0dDQUVJQVUyQWd3Z0JDQUROZ0lJQzBFQUtBS1UwSUNBQUNJRElBSk5EUUJCQUNnQ29OQ0FnQUFpQkNBQ2FpSUZJQU1nQW1zaUEwRUJjallDQkVFQUlBTTJBcFRRZ0lBQVFRQWdCVFlDb05DQWdBQWdCQ0FDUVFOeU5nSUVJQVJCQ0dvaEF3d0RDMEVBSVFOQkFFRXdOZ0w0MDRDQUFBd0NDd0pBSUF0RkRRQUNRQUpBSUFnZ0NDZ0NIQ0lGUVFKMFFialNnSUFBYWlJREtBSUFSdzBBSUFNZ0FEWUNBQ0FBRFFGQkFDQUhRWDRnQlhkeElnYzJBb3pRZ0lBQURBSUxJQXRCRUVFVUlBc29BaEFnQ0VZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQ3pZQ0dBSkFJQWdvQWhBaUEwVU5BQ0FBSUFNMkFoQWdBeUFBTmdJWUN5QUlRUlJxS0FJQUlnTkZEUUFnQUVFVWFpQUROZ0lBSUFNZ0FEWUNHQXNDUUFKQUlBUkJEMHNOQUNBSUlBUWdBbW9pQTBFRGNqWUNCQ0FJSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBSUlBSnFJZ0FnQkVFQmNqWUNCQ0FJSUFKQkEzSTJBZ1FnQUNBRWFpQUVOZ0lBQWtBZ0JFSC9BVXNOQUNBRVFYaHhRYkRRZ0lBQWFpRURBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdCRUVEZG5RaUJIRU5BRUVBSUFVZ0JISTJBb2pRZ0lBQUlBTWhCQXdCQ3lBREtBSUlJUVFMSUFRZ0FEWUNEQ0FESUFBMkFnZ2dBQ0FETmdJTUlBQWdCRFlDQ0F3QkMwRWZJUU1DUUNBRVFmLy8vd2RMRFFBZ0JFRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lDSUFKQmdJQVBha0VRZGtFQ2NTSUNkRUVQZGlBRElBVnlJQUp5YXlJRFFRRjBJQVFnQTBFVmFuWkJBWEZ5UVJ4cUlRTUxJQUFnQXpZQ0hDQUFRZ0EzQWhBZ0EwRUNkRUc0MG9DQUFHb2hCUUpBSUFkQkFTQURkQ0lDY1EwQUlBVWdBRFlDQUVFQUlBY2dBbkkyQW96UWdJQUFJQUFnQlRZQ0dDQUFJQUEyQWdnZ0FDQUFOZ0lNREFFTElBUkJBRUVaSUFOQkFYWnJJQU5CSDBZYmRDRURJQVVvQWdBaEFnSkFBMEFnQWlJRktBSUVRWGh4SUFSR0RRRWdBMEVkZGlFQ0lBTkJBWFFoQXlBRklBSkJCSEZxUVJCcUlnWW9BZ0FpQWcwQUN5QUdJQUEyQWdBZ0FDQUZOZ0lZSUFBZ0FEWUNEQ0FBSUFBMkFnZ01BUXNnQlNnQ0NDSURJQUEyQWd3Z0JTQUFOZ0lJSUFCQkFEWUNHQ0FBSUFVMkFnd2dBQ0FETmdJSUN5QUlRUWhxSVFNTUFRc0NRQ0FLUlEwQUFrQUNRQ0FBSUFBb0Fod2lCVUVDZEVHNDBvQ0FBR29pQXlnQ0FFY05BQ0FESUFnMkFnQWdDQTBCUVFBZ0NVRitJQVYzY1RZQ2pOQ0FnQUFNQWdzZ0NrRVFRUlFnQ2lnQ0VDQUFSaHRxSUFnMkFnQWdDRVVOQVFzZ0NDQUtOZ0lZQWtBZ0FDZ0NFQ0lEUlEwQUlBZ2dBellDRUNBRElBZzJBaGdMSUFCQkZHb29BZ0FpQTBVTkFDQUlRUlJxSUFNMkFnQWdBeUFJTmdJWUN3SkFBa0FnQkVFUFN3MEFJQUFnQkNBQ2FpSURRUU55TmdJRUlBQWdBMm9pQXlBREtBSUVRUUZ5TmdJRURBRUxJQUFnQW1vaUJTQUVRUUZ5TmdJRUlBQWdBa0VEY2pZQ0JDQUZJQVJxSUFRMkFnQUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQXdKQUFrQkJBU0FIUVFOMmRDSUlJQVp4RFFCQkFDQUlJQVp5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQU0yQWd3Z0FpQUROZ0lJSUFNZ0FqWUNEQ0FESUFnMkFnZ0xRUUFnQlRZQ25OQ0FnQUJCQUNBRU5nS1EwSUNBQUFzZ0FFRUlhaUVEQ3lBQlFSQnFKSUNBZ0lBQUlBTUxDZ0FnQUJESmdJQ0FBQXZpRFFFSGZ3SkFJQUJGRFFBZ0FFRjRhaUlCSUFCQmZHb29BZ0FpQWtGNGNTSUFhaUVEQWtBZ0FrRUJjUTBBSUFKQkEzRkZEUUVnQVNBQktBSUFJZ0pySWdGQkFDZ0NtTkNBZ0FBaUJFa05BU0FDSUFCcUlRQUNRQ0FCUVFBb0FwelFnSUFBUmcwQUFrQWdBa0gvQVVzTkFDQUJLQUlJSWdRZ0FrRURkaUlGUVFOMFFiRFFnSUFBYWlJR1Job0NRQ0FCS0FJTUlnSWdCRWNOQUVFQVFRQW9Bb2pRZ0lBQVFYNGdCWGR4TmdLSTBJQ0FBQXdEQ3lBQ0lBWkdHaUFDSUFRMkFnZ2dCQ0FDTmdJTURBSUxJQUVvQWhnaEJ3SkFBa0FnQVNnQ0RDSUdJQUZHRFFBZ0FTZ0NDQ0lDSUFSSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBVUVVYWlJQ0tBSUFJZ1FOQUNBQlFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFFQ1FBSkFJQUVnQVNnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1Bd3NnQjBFUVFSUWdCeWdDRUNBQlJodHFJQVkyQWdBZ0JrVU5BZ3NnQmlBSE5nSVlBa0FnQVNnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQUVvQWhRaUFrVU5BU0FHUVJScUlBSTJBZ0FnQWlBR05nSVlEQUVMSUFNb0FnUWlBa0VEY1VFRFJ3MEFJQU1nQWtGK2NUWUNCRUVBSUFBMkFwRFFnSUFBSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRUEN5QUJJQU5QRFFBZ0F5Z0NCQ0lDUVFGeFJRMEFBa0FDUUNBQ1FRSnhEUUFDUUNBRFFRQW9BcURRZ0lBQVJ3MEFRUUFnQVRZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBQWFpSUFOZ0tVMElDQUFDQUJJQUJCQVhJMkFnUWdBVUVBS0FLYzBJQ0FBRWNOQTBFQVFRQTJBcERRZ0lBQVFRQkJBRFlDbk5DQWdBQVBDd0pBSUFOQkFDZ0NuTkNBZ0FCSERRQkJBQ0FCTmdLYzBJQ0FBRUVBUVFBb0FwRFFnSUFBSUFCcUlnQTJBcERRZ0lBQUlBRWdBRUVCY2pZQ0JDQUJJQUJxSUFBMkFnQVBDeUFDUVhoeElBQnFJUUFDUUFKQUlBSkIvd0ZMRFFBZ0F5Z0NDQ0lFSUFKQkEzWWlCVUVEZEVHdzBJQ0FBR29pQmtZYUFrQWdBeWdDRENJQ0lBUkhEUUJCQUVFQUtBS0kwSUNBQUVGK0lBVjNjVFlDaU5DQWdBQU1BZ3NnQWlBR1Job2dBaUFFTmdJSUlBUWdBallDREF3QkN5QURLQUlZSVFjQ1FBSkFJQU1vQWd3aUJpQURSZzBBSUFNb0FnZ2lBa0VBS0FLWTBJQ0FBRWthSUFZZ0FqWUNDQ0FDSUFZMkFnd01BUXNDUUNBRFFSUnFJZ0lvQWdBaUJBMEFJQU5CRUdvaUFpZ0NBQ0lFRFFCQkFDRUdEQUVMQTBBZ0FpRUZJQVFpQmtFVWFpSUNLQUlBSWdRTkFDQUdRUkJxSVFJZ0JpZ0NFQ0lFRFFBTElBVkJBRFlDQUFzZ0IwVU5BQUpBQWtBZ0F5QURLQUljSWdSQkFuUkJ1TktBZ0FCcUlnSW9BZ0JIRFFBZ0FpQUdOZ0lBSUFZTkFVRUFRUUFvQW96UWdJQUFRWDRnQkhkeE5nS00wSUNBQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQU5HRzJvZ0JqWUNBQ0FHUlEwQkN5QUdJQWMyQWhnQ1FDQURLQUlRSWdKRkRRQWdCaUFDTmdJUUlBSWdCallDR0FzZ0F5Z0NGQ0lDUlEwQUlBWkJGR29nQWpZQ0FDQUNJQVkyQWhnTElBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUWdBVUVBS0FLYzBJQ0FBRWNOQVVFQUlBQTJBcERRZ0lBQUR3c2dBeUFDUVg1eE5nSUVJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FMQWtBZ0FFSC9BVXNOQUNBQVFYaHhRYkRRZ0lBQWFpRUNBa0FDUUVFQUtBS0kwSUNBQUNJRVFRRWdBRUVEZG5RaUFIRU5BRUVBSUFRZ0FISTJBb2pRZ0lBQUlBSWhBQXdCQ3lBQ0tBSUlJUUFMSUFBZ0FUWUNEQ0FDSUFFMkFnZ2dBU0FDTmdJTUlBRWdBRFlDQ0E4TFFSOGhBZ0pBSUFCQi8vLy9CMHNOQUNBQVFRaDJJZ0lnQWtHQS9qOXFRUkIyUVFoeElnSjBJZ1FnQkVHQTRCOXFRUkIyUVFSeElnUjBJZ1lnQmtHQWdBOXFRUkIyUVFKeElnWjBRUTkySUFJZ0JISWdCbkpySWdKQkFYUWdBQ0FDUVJWcWRrRUJjWEpCSEdvaEFnc2dBU0FDTmdJY0lBRkNBRGNDRUNBQ1FRSjBRYmpTZ0lBQWFpRUVBa0FDUUVFQUtBS00wSUNBQUNJR1FRRWdBblFpQTNFTkFDQUVJQUUyQWdCQkFDQUdJQU55TmdLTTBJQ0FBQ0FCSUFRMkFoZ2dBU0FCTmdJSUlBRWdBVFlDREF3QkN5QUFRUUJCR1NBQ1FRRjJheUFDUVI5R0czUWhBaUFFS0FJQUlRWUNRQU5BSUFZaUJDZ0NCRUY0Y1NBQVJnMEJJQUpCSFhZaEJpQUNRUUYwSVFJZ0JDQUdRUVJ4YWtFUWFpSURLQUlBSWdZTkFBc2dBeUFCTmdJQUlBRWdCRFlDR0NBQklBRTJBZ3dnQVNBQk5nSUlEQUVMSUFRb0FnZ2lBQ0FCTmdJTUlBUWdBVFlDQ0NBQlFRQTJBaGdnQVNBRU5nSU1JQUVnQURZQ0NBdEJBRUVBS0FLbzBJQ0FBRUYvYWlJQlFYOGdBUnMyQXFqUWdJQUFDd3NFQUFBQUMwNEFBa0FnQUEwQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJmMHdOQUFKQUlBQkJFSFpBQUNJQVFYOUhEUUJCQUVFd05nTDQwNENBQUVGL0R3c2dBRUVRZEE4TEVNcUFnSUFBQUF2eUFnSURmd0YrQWtBZ0FrVU5BQ0FBSUFFNkFBQWdBaUFBYWlJRFFYOXFJQUU2QUFBZ0FrRURTUTBBSUFBZ0FUb0FBaUFBSUFFNkFBRWdBMEY5YWlBQk9nQUFJQU5CZm1vZ0FUb0FBQ0FDUVFkSkRRQWdBQ0FCT2dBRElBTkJmR29nQVRvQUFDQUNRUWxKRFFBZ0FFRUFJQUJyUVFOeElnUnFJZ01nQVVIL0FYRkJnWUtFQ0d3aUFUWUNBQ0FESUFJZ0JHdEJmSEVpQkdvaUFrRjhhaUFCTmdJQUlBUkJDVWtOQUNBRElBRTJBZ2dnQXlBQk5nSUVJQUpCZUdvZ0FUWUNBQ0FDUVhScUlBRTJBZ0FnQkVFWlNRMEFJQU1nQVRZQ0dDQURJQUUyQWhRZ0F5QUJOZ0lRSUFNZ0FUWUNEQ0FDUVhCcUlBRTJBZ0FnQWtGc2FpQUJOZ0lBSUFKQmFHb2dBVFlDQUNBQ1FXUnFJQUUyQWdBZ0JDQURRUVJ4UVJoeUlnVnJJZ0pCSUVrTkFDQUJyVUtCZ0lDQUVINGhCaUFESUFWcUlRRURRQ0FCSUFZM0F4Z2dBU0FHTndNUUlBRWdCamNEQ0NBQklBWTNBd0FnQVVFZ2FpRUJJQUpCWUdvaUFrRWZTdzBBQ3dzZ0FBc0xqa2dCQUVHQUNBdUdTQUVBQUFBQ0FBQUFBd0FBQUFBQUFBQUFBQUFBQkFBQUFBVUFBQUFBQUFBQUFBQUFBQVlBQUFBSEFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnTUNBZ0lDQWdBQUFnSUFBZ0lBQWdJQ0FnSUNBZ0lDQWdBRUFBQUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FBQUFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBSUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQnNiM05sWldWd0xXRnNhWFpsQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUFCQVFFQkFRQUFBUUVBQVFFQUFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHVmpkR2x2Ym1WdWRDMXNaVzVuZEdodmJuSnZlSGt0WTI5dWJtVmpkR2x2YmdBQUFBQUFBQUFBQUFBQUFBQUFBSEpoYm5ObVpYSXRaVzVqYjJScGJtZHdaM0poWkdVTkNnMEtEUXBUVFEwS0RRcFVWRkF2UTBVdlZGTlFMd0FBQUFBQUFBQUFBQUFBQUFFQ0FBRURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRVUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBQUJBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdRQUFBUUVCQVFFQkFRRUJBUUVCUVFFQkFRRUJBUUVCQVFFQkFBRUFBWUhCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnQUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQWdBQUFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRTVQVlU1RFJVVkRTMDlWVkU1RlExUkZWRVZEVWtsQ1JVeFZVMGhGVkVWQlJGTkZRVkpEU0ZKSFJVTlVTVlpKVkZsTVJVNUVRVkpXUlU5VVNVWlpVRlJKVDA1VFEwaFRSVUZaVTFSQlZFTklSMFZQVWtSSlVrVkRWRTlTVkZKRFNGQkJVa0ZOUlZSRlVsVlNRMFZDVTBOU1NVSkZRVkpFVDFkT1FVTkZTVTVFVGt0RFMxVkNVME5TU1VKRlNGUlVVQzlCUkZSUUx3PT0nXG4iLCAiLy8gQHRzLWNoZWNrXG5cbid1c2Ugc3RyaWN0J1xuXG4vKiBnbG9iYWwgV2ViQXNzZW1ibHkgKi9cblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCBodHRwID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IHRpbWVycyA9IHJlcXVpcmUoJy4vdGltZXJzJylcbmNvbnN0IFJlcXVlc3QgPSByZXF1aXJlKCcuL2NvcmUvcmVxdWVzdCcpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuY29uc3Qge1xuICBrVXJsLFxuICBrUmVzZXQsXG4gIGtTZXJ2ZXJOYW1lLFxuICBrQ2xpZW50LFxuICBrQnVzeSxcbiAga1BhcnNlcixcbiAga0Nvbm5lY3QsXG4gIGtCbG9ja2luZyxcbiAga1Jlc3VtaW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrV3JpdGluZyxcbiAga1F1ZXVlLFxuICBrQ29ubmVjdGVkLFxuICBrQ29ubmVjdGluZyxcbiAga05lZWREcmFpbixcbiAga05vUmVmLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQsXG4gIGtIb3N0SGVhZGVyLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1BpcGVsaW5pbmcsXG4gIGtTb2NrZXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWUsXG4gIGtNYXhIZWFkZXJzU2l6ZSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICBrSGVhZGVyc1RpbWVvdXQsXG4gIGtCb2R5VGltZW91dCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtDb25uZWN0b3IsXG4gIGtNYXhSZWRpcmVjdGlvbnMsXG4gIGtNYXhSZXF1ZXN0cyxcbiAga0NvdW50ZXIsXG4gIGtDbG9zZSxcbiAga0Rlc3Ryb3ksXG4gIGtEaXNwYXRjaCxcbiAga0ludGVyY2VwdG9ycyxcbiAga0xvY2FsQWRkcmVzcyxcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga0hUVFBDb25uVmVyc2lvbixcbiAgLy8gSFRUUDJcbiAga0hvc3QsXG4gIGtIVFRQMlNlc3Npb24sXG4gIGtIVFRQMlNlc3Npb25TdGF0ZSxcbiAga0hUVFAyQnVpbGRSZXF1ZXN0LFxuICBrSFRUUDJDb3B5SGVhZGVycyxcbiAga0hUVFAxQnVpbGRSZXF1ZXN0XG59ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnaHR0cDInKX0gKi9cbmxldCBodHRwMlxudHJ5IHtcbiAgaHR0cDIgPSByZXF1aXJlKCdodHRwMicpXG59IGNhdGNoIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBodHRwMiA9IHsgY29uc3RhbnRzOiB7fSB9XG59XG5cbmNvbnN0IHtcbiAgY29uc3RhbnRzOiB7XG4gICAgSFRUUDJfSEVBREVSX0FVVEhPUklUWSxcbiAgICBIVFRQMl9IRUFERVJfTUVUSE9ELFxuICAgIEhUVFAyX0hFQURFUl9QQVRILFxuICAgIEhUVFAyX0hFQURFUl9TQ0hFTUUsXG4gICAgSFRUUDJfSEVBREVSX0NPTlRFTlRfTEVOR1RILFxuICAgIEhUVFAyX0hFQURFUl9FWFBFQ1QsXG4gICAgSFRUUDJfSEVBREVSX1NUQVRVU1xuICB9XG59ID0gaHR0cDJcblxuLy8gRXhwZXJpbWVudGFsXG5sZXQgaDJFeHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXVxuXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgna0Nsb3NlZFJlc29sdmUnKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5zZW5kSGVhZGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OnNlbmRIZWFkZXJzJylcbiAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmJlZm9yZUNvbm5lY3QnKVxuICBjaGFubmVscy5jb25uZWN0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKVxuICBjaGFubmVscy5jb25uZWN0ZWQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKVxufSBjYXRjaCB7XG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5jb25uZWN0RXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbn1cblxuLyoqXG4gKiBAdHlwZSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5kZWZhdWx0fVxuICovXG5jbGFzcyBDbGllbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvY2xpZW50JykuQ2xpZW50Lk9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIHtcbiAgICBpbnRlcmNlcHRvcnMsXG4gICAgbWF4SGVhZGVyU2l6ZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBzb2NrZXRUaW1lb3V0LFxuICAgIHJlcXVlc3RUaW1lb3V0LFxuICAgIGNvbm5lY3RUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIGlkbGVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZSxcbiAgICBrZWVwQWxpdmVUaW1lb3V0LFxuICAgIG1heEtlZXBBbGl2ZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlTWF4VGltZW91dCxcbiAgICBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICAgIHNvY2tldFBhdGgsXG4gICAgcGlwZWxpbmluZyxcbiAgICB0bHMsXG4gICAgc3RyaWN0Q29udGVudExlbmd0aCxcbiAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICBtYXhSZWRpcmVjdGlvbnMsXG4gICAgY29ubmVjdCxcbiAgICBtYXhSZXF1ZXN0c1BlckNsaWVudCxcbiAgICBsb2NhbEFkZHJlc3MsXG4gICAgbWF4UmVzcG9uc2VTaXplLFxuICAgIGF1dG9TZWxlY3RGYW1pbHksXG4gICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0LFxuICAgIC8vIGgyXG4gICAgYWxsb3dIMixcbiAgICBtYXhDb25jdXJyZW50U3RyZWFtc1xuICB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAoa2VlcEFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQga2VlcEFsaXZlLCB1c2UgcGlwZWxpbmluZz0wIGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgc29ja2V0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgcmVxdWVzdFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChpZGxlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGlkbGVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlVGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4S2VlcEFsaXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG1heEtlZXBBbGl2ZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVNYXhUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhIZWFkZXJTaXplICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShtYXhIZWFkZXJTaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1heEhlYWRlclNpemUnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRQYXRoICE9IG51bGwgJiYgdHlwZW9mIHNvY2tldFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgc29ja2V0UGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdFRpbWVvdXQpIHx8IGNvbm5lY3RUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0KSB8fCBrZWVwQWxpdmVUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZU1heFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVNYXhUaW1lb3V0KSB8fCBrZWVwQWxpdmVNYXhUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlTWF4VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCcpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnNUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlcXVlc3RzUGVyQ2xpZW50ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlcXVlc3RzUGVyQ2xpZW50KSB8fCBtYXhSZXF1ZXN0c1BlckNsaWVudCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlcXVlc3RzUGVyQ2xpZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChsb2NhbEFkZHJlc3MgIT0gbnVsbCAmJiAodHlwZW9mIGxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycgfHwgbmV0LmlzSVAobG9jYWxBZGRyZXNzKSA9PT0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbG9jYWxBZGRyZXNzIG11c3QgYmUgdmFsaWQgc3RyaW5nIElQIGFkZHJlc3MnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVzcG9uc2VTaXplKSB8fCBtYXhSZXNwb25zZVNpemUgPCAtMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVzcG9uc2VTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCAhPSBudWxsICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIoYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0KSB8fCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgPCAtMSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIC8vIGgyXG4gICAgaWYgKGFsbG93SDIgIT0gbnVsbCAmJiB0eXBlb2YgYWxsb3dIMiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2FsbG93SDIgbXVzdCBiZSBhIHZhbGlkIGJvb2xlYW4gdmFsdWUnKVxuICAgIH1cblxuICAgIGlmIChtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsICYmICh0eXBlb2YgbWF4Q29uY3VycmVudFN0cmVhbXMgIT09ICdudW1iZXInIHx8IG1heENvbmN1cnJlbnRTdHJlYW1zIDwgMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBhIHBvc3NpdGl2ZSBpbnRlZ2VyLCBncmVhdGVyIHRoYW4gMCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLkNsaWVudCAmJiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9ycy5DbGllbnQpXG4gICAgICA/IGludGVyY2VwdG9ycy5DbGllbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG4gICAgdGhpc1trVXJsXSA9IHV0aWwucGFyc2VPcmlnaW4odXJsKVxuICAgIHRoaXNba0Nvbm5lY3Rvcl0gPSBjb25uZWN0XG4gICAgdGhpc1trU29ja2V0XSA9IG51bGxcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHBpcGVsaW5pbmcgIT0gbnVsbCA/IHBpcGVsaW5pbmcgOiAxXG4gICAgdGhpc1trTWF4SGVhZGVyc1NpemVdID0gbWF4SGVhZGVyU2l6ZSB8fCBodHRwLm1heEhlYWRlclNpemVcbiAgICB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF0gPSBrZWVwQWxpdmVUaW1lb3V0ID09IG51bGwgPyA0ZTMgOiBrZWVwQWxpdmVUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlTWF4VGltZW91dF0gPSBrZWVwQWxpdmVNYXhUaW1lb3V0ID09IG51bGwgPyA2MDBlMyA6IGtlZXBBbGl2ZU1heFRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSA9IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgPT0gbnVsbCA/IDFlMyA6IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgdGhpc1trU2VydmVyTmFtZV0gPSBudWxsXG4gICAgdGhpc1trTG9jYWxBZGRyZXNzXSA9IGxvY2FsQWRkcmVzcyAhPSBudWxsID8gbG9jYWxBZGRyZXNzIDogbnVsbFxuICAgIHRoaXNba1Jlc3VtaW5nXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trTmVlZERyYWluXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trSG9zdEhlYWRlcl0gPSBgaG9zdDogJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9XFxyXFxuYFxuICAgIHRoaXNba0JvZHlUaW1lb3V0XSA9IGJvZHlUaW1lb3V0ICE9IG51bGwgPyBib2R5VGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trSGVhZGVyc1RpbWVvdXRdID0gaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCA/IGhlYWRlcnNUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tTdHJpY3RDb250ZW50TGVuZ3RoXSA9IHN0cmljdENvbnRlbnRMZW5ndGggPT0gbnVsbCA/IHRydWUgOiBzdHJpY3RDb250ZW50TGVuZ3RoXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba01heFJlcXVlc3RzXSA9IG1heFJlcXVlc3RzUGVyQ2xpZW50XG4gICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgdGhpc1trTWF4UmVzcG9uc2VTaXplXSA9IG1heFJlc3BvbnNlU2l6ZSA+IC0xID8gbWF4UmVzcG9uc2VTaXplIDogLTFcbiAgICB0aGlzW2tIVFRQQ29ublZlcnNpb25dID0gJ2gxJ1xuXG4gICAgLy8gSFRUUC8yXG4gICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25TdGF0ZV0gPSAhYWxsb3dIMlxuICAgICAgPyBudWxsXG4gICAgICA6IHtcbiAgICAgICAgLy8gc3RyZWFtczogbnVsbCwgLy8gRml4ZWQgcXVldWUgb2Ygc3RyZWFtcyAtIEZvciBmdXR1cmUgc3VwcG9ydCBvZiBgcHVzaGBcbiAgICAgICAgICBvcGVuU3RyZWFtczogMCwgLy8gS2VlcCB0cmFjayBvZiB0aGVtIHRvIGRlY2lkZSB3ZXRoZXIgb3Igbm90IHVucmVmIHRoZSBzZXNzaW9uXG4gICAgICAgICAgbWF4Q29uY3VycmVudFN0cmVhbXM6IG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgPyBtYXhDb25jdXJyZW50U3RyZWFtcyA6IDEwMCAvLyBNYXggcGVlckNvbmN1cnJlbnRTdHJlYW1zIGZvciBhIE5vZGUgaDIgc2VydmVyXG4gICAgICAgIH1cbiAgICB0aGlzW2tIb3N0XSA9IGAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31gXG5cbiAgICAvLyBrUXVldWUgaXMgYnVpbHQgdXAgb2YgMyBzZWN0aW9ucyBzZXBhcmF0ZWQgYnlcbiAgICAvLyB0aGUga1J1bm5pbmdJZHggYW5kIGtQZW5kaW5nSWR4IGluZGljZXMuXG4gICAgLy8gfCAgIGNvbXBsZXRlICAgfCAgIHJ1bm5pbmcgICB8ICAgcGVuZGluZyAgIHxcbiAgICAvLyAgICAgICAgICAgICAgICBeIGtSdW5uaW5nSWR4IF4ga1BlbmRpbmdJZHggXiBrUXVldWUubGVuZ3RoXG4gICAgLy8ga1J1bm5pbmdJZHggcG9pbnRzIHRvIHRoZSBmaXJzdCBydW5uaW5nIGVsZW1lbnQuXG4gICAgLy8ga1BlbmRpbmdJZHggcG9pbnRzIHRvIHRoZSBmaXJzdCBwZW5kaW5nIGVsZW1lbnQuXG4gICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgZmFzdCBxdWV1ZSB3aXRoIGFuIGFtb3J0aXplZFxuICAgIC8vIHRpbWUgb2YgTygxKS5cblxuICAgIHRoaXNba1F1ZXVlXSA9IFtdXG4gICAgdGhpc1trUnVubmluZ0lkeF0gPSAwXG4gICAgdGhpc1trUGVuZGluZ0lkeF0gPSAwXG4gIH1cblxuICBnZXQgcGlwZWxpbmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BpcGVsaW5pbmddXG4gIH1cblxuICBzZXQgcGlwZWxpbmluZyAodmFsdWUpIHtcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHZhbHVlXG4gICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tQZW5kaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tQZW5kaW5nSWR4XSAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuICEhdGhpc1trU29ja2V0XSAmJiAhdGhpc1trQ29ubmVjdGluZ10gJiYgIXRoaXNba1NvY2tldF0uZGVzdHJveWVkXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgY29uc3Qgc29ja2V0ID0gdGhpc1trU29ja2V0XVxuICAgIHJldHVybiAoXG4gICAgICAoc29ja2V0ICYmIChzb2NrZXRba1Jlc2V0XSB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrQmxvY2tpbmddKSkgfHxcbiAgICAgICh0aGlzW2tTaXplXSA+PSAodGhpc1trUGlwZWxpbmluZ10gfHwgMSkpIHx8XG4gICAgICB0aGlzW2tQZW5kaW5nXSA+IDBcbiAgICApXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmU6IG9ubHkgdXNlZCBmb3IgdGVzdCAqL1xuICBba0Nvbm5lY3RdIChjYikge1xuICAgIGNvbm5lY3QodGhpcylcbiAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCBjYilcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gb3B0cy5vcmlnaW4gfHwgdGhpc1trVXJsXS5vcmlnaW5cblxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzW2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInXG4gICAgICA/IFJlcXVlc3Rba0hUVFAyQnVpbGRSZXF1ZXN0XShvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gICAgICA6IFJlcXVlc3Rba0hUVFAxQnVpbGRSZXF1ZXN0XShvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICB0aGlzW2tRdWV1ZV0ucHVzaChyZXF1ZXN0KVxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10pIHtcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSBlbHNlIGlmICh1dGlsLmJvZHlMZW5ndGgocmVxdWVzdC5ib2R5KSA9PSBudWxsICYmIHV0aWwuaXNJdGVyYWJsZShyZXF1ZXN0LmJvZHkpKSB7XG4gICAgICAvLyBXYWl0IGEgdGljayBpbiBjYXNlIHN0cmVhbS9pdGVyYXRvciBpcyBlbmRlZCBpbiB0aGUgc2FtZSB0aWNrLlxuICAgICAgdGhpc1trUmVzdW1pbmddID0gMVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhyZXN1bWUsIHRoaXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VtZSh0aGlzLCB0cnVlKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10gJiYgdGhpc1trTmVlZERyYWluXSAhPT0gMiAmJiB0aGlzW2tCdXN5XSkge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IDJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXSA8IDJcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICAvLyBUT0RPOiBmb3IgSDIgd2UgbmVlZCB0byBncmFjZWZ1bGx5IGZsdXNoIHRoZSByZW1haW5pbmcgZW5xdWV1ZWRcbiAgICAvLyByZXF1ZXN0IGFuZCBjbG9zZSBlYWNoIHN0cmVhbS5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghdGhpc1trU2l6ZV0pIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzW2tRdWV1ZV0uc3BsaWNlKHRoaXNba1BlbmRpbmdJZHhdKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgICAgZXJyb3JSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tDbG9zZWRSZXNvbHZlXSkge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IFNob3VsZCB3ZSBlcnJvciBoZXJlIHdpdGggQ2xpZW50RGVzdHJveWVkRXJyb3I/XG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0oKVxuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trSFRUUDJTZXNzaW9uXSAhPSBudWxsKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzW2tIVFRQMlNlc3Npb25dLCBlcnIpXG4gICAgICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gICAgICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzW2tTb2NrZXRdKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0ub24oJ2Nsb3NlJywgY2FsbGJhY2spLCBlcnIpXG4gICAgICB9XG5cbiAgICAgIHJlc3VtZSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25IdHRwMlNlc3Npb25FcnJvciAoZXJyKSB7XG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyRnJhbWVFcnJvciAodHlwZSwgY29kZSwgaWQpIHtcbiAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcblxuICBpZiAoaWQgPT09IDApIHtcbiAgICB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gPSBlcnJcbiAgICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVuZCAoKSB7XG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJykpXG4gIHV0aWwuZGVzdHJveSh0aGlzW2tTb2NrZXRdLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJykpXG59XG5cbmZ1bmN0aW9uIG9uSFRUUDJHb0F3YXkgKGNvZGUpIHtcbiAgY29uc3QgY2xpZW50ID0gdGhpc1trQ2xpZW50XVxuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiR09BV0FZXCIgZnJhbWUgcmVjZWl2ZWQgd2l0aCBjb2RlICR7Y29kZX1gKVxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IG51bGxcblxuICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgIGFzc2VydCh0aGlzW2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsXG4gICAgY2xpZW50W2tVcmxdLFxuICAgIFtjbGllbnRdLFxuICAgIGVyclxuICApXG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9sbGh0dHAvY29uc3RhbnRzJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3InKVxuY29uc3QgRU1QVFlfQlVGID0gQnVmZmVyLmFsbG9jKDApXG5cbmFzeW5jIGZ1bmN0aW9uIGxhenlsbGh0dHAgKCkge1xuICBjb25zdCBsbGh0dHBXYXNtRGF0YSA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEID8gcmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwLXdhc20uanMnKSA6IHVuZGVmaW5lZFxuXG4gIGxldCBtb2RcbiAgdHJ5IHtcbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMnKSwgJ2Jhc2U2NCcpKVxuICB9IGNhdGNoIChlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBlcnJvciB3YXMgY2F1c2VkIGJ5IHRoZSBzaW1kIG9wdGlvbiBub3RcbiAgICAvLyBiZWluZyBlbmFibGVkLCBidXQgdGhlIG9jY3VycmluZyBvZiB0aGlzIG90aGVyIGVycm9yXG4gICAgLy8gKiBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vaXNzdWVzLzExNDk1XG4gICAgLy8gZ290IG1lIHRvIHJlbW92ZSB0aGF0IGNoZWNrIHRvIGF2b2lkIGJyZWFraW5nIE5vZGUgMTIuXG4gICAgbW9kID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShCdWZmZXIuZnJvbShsbGh0dHBXYXNtRGF0YSB8fCByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kLCB7XG4gICAgZW52OiB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuICAgICAgd2FzbV9vbl91cmw6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9zdGF0dXM6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25TdGF0dXMobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2JlZ2luOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUJlZ2luKCkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX2ZpZWxkOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyRmllbGQobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfdmFsdWU6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJWYWx1ZShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcnNfY29tcGxldGU6IChwLCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlcnNDb21wbGV0ZShzdGF0dXNDb2RlLCBCb29sZWFuKHVwZ3JhZGUpLCBCb29sZWFuKHNob3VsZEtlZXBBbGl2ZSkpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2JvZHk6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25Cb2R5KG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZTogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpIHx8IDBcbiAgICAgIH1cblxuICAgICAgLyogZXNsaW50LWVuYWJsZSBjYW1lbGNhc2UgKi9cbiAgICB9XG4gIH0pXG59XG5cbmxldCBsbGh0dHBJbnN0YW5jZSA9IG51bGxcbmxldCBsbGh0dHBQcm9taXNlID0gbGF6eWxsaHR0cCgpXG5sbGh0dHBQcm9taXNlLmNhdGNoKClcblxubGV0IGN1cnJlbnRQYXJzZXIgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyU2l6ZSA9IDBcbmxldCBjdXJyZW50QnVmZmVyUHRyID0gbnVsbFxuXG5jb25zdCBUSU1FT1VUX0hFQURFUlMgPSAxXG5jb25zdCBUSU1FT1VUX0JPRFkgPSAyXG5jb25zdCBUSU1FT1VUX0lETEUgPSAzXG5cbmNsYXNzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yIChjbGllbnQsIHNvY2tldCwgeyBleHBvcnRzIH0pIHtcbiAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGNsaWVudFtrTWF4SGVhZGVyc1NpemVdKSAmJiBjbGllbnRba01heEhlYWRlcnNTaXplXSA+IDApXG5cbiAgICB0aGlzLmxsaHR0cCA9IGV4cG9ydHNcbiAgICB0aGlzLnB0ciA9IHRoaXMubGxodHRwLmxsaHR0cF9hbGxvYyhjb25zdGFudHMuVFlQRS5SRVNQT05TRSlcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy51cGdyYWRlID0gZmFsc2VcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG4gICAgdGhpcy5oZWFkZXJzTWF4U2l6ZSA9IGNsaWVudFtrTWF4SGVhZGVyc1NpemVdXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSBmYWxzZVxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLnJlc3VtZSA9IHRoaXMucmVzdW1lLmJpbmQodGhpcylcblxuICAgIHRoaXMuYnl0ZXNSZWFkID0gMFxuXG4gICAgdGhpcy5rZWVwQWxpdmUgPSAnJ1xuICAgIHRoaXMuY29udGVudExlbmd0aCA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcbiAgICB0aGlzLm1heFJlc3BvbnNlU2l6ZSA9IGNsaWVudFtrTWF4UmVzcG9uc2VTaXplXVxuICB9XG5cbiAgc2V0VGltZW91dCAodmFsdWUsIHR5cGUpIHtcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gdHlwZVxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy50aW1lb3V0VmFsdWUpIHtcbiAgICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVycy5zZXRUaW1lb3V0KG9uUGFyc2VyVGltZW91dCwgdmFsdWUsIHRoaXMpXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQudW5yZWYpIHtcbiAgICAgICAgICB0aGlzLnRpbWVvdXQudW5yZWYoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IHZhbHVlXG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc3VtZSAoKSB7XG4gICAgaWYgKHRoaXMuc29ja2V0LmRlc3Ryb3llZCB8fCAhdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLnB0ciAhPSBudWxsKVxuICAgIGFzc2VydChjdXJyZW50UGFyc2VyID09IG51bGwpXG5cbiAgICB0aGlzLmxsaHR0cC5sbGh0dHBfcmVzdW1lKHRoaXMucHRyKVxuXG4gICAgYXNzZXJ0KHRoaXMudGltZW91dFR5cGUgPT09IFRJTUVPVVRfQk9EWSlcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5leGVjdXRlKHRoaXMuc29ja2V0LnJlYWQoKSB8fCBFTVBUWV9CVUYpIC8vIEZsdXNoIHBhcnNlci5cbiAgICB0aGlzLnJlYWRNb3JlKClcbiAgfVxuXG4gIHJlYWRNb3JlICgpIHtcbiAgICB3aGlsZSAoIXRoaXMucGF1c2VkICYmIHRoaXMucHRyKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuc29ja2V0LnJlYWQoKVxuICAgICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWN1dGUoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZSAoZGF0YSkge1xuICAgIGFzc2VydCh0aGlzLnB0ciAhPSBudWxsKVxuICAgIGFzc2VydChjdXJyZW50UGFyc2VyID09IG51bGwpXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcblxuICAgIGNvbnN0IHsgc29ja2V0LCBsbGh0dHAgfSA9IHRoaXNcblxuICAgIGlmIChkYXRhLmxlbmd0aCA+IGN1cnJlbnRCdWZmZXJTaXplKSB7XG4gICAgICBpZiAoY3VycmVudEJ1ZmZlclB0cikge1xuICAgICAgICBsbGh0dHAuZnJlZShjdXJyZW50QnVmZmVyUHRyKVxuICAgICAgfVxuICAgICAgY3VycmVudEJ1ZmZlclNpemUgPSBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyA0MDk2KSAqIDQwOTZcbiAgICAgIGN1cnJlbnRCdWZmZXJQdHIgPSBsbGh0dHAubWFsbG9jKGN1cnJlbnRCdWZmZXJTaXplKVxuICAgIH1cblxuICAgIG5ldyBVaW50OEFycmF5KGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBjdXJyZW50QnVmZmVyUHRyLCBjdXJyZW50QnVmZmVyU2l6ZSkuc2V0KGRhdGEpXG5cbiAgICAvLyBDYWxsIGBleGVjdXRlYCBvbiB0aGUgd2FzbSBwYXJzZXIuXG4gICAgLy8gV2UgcGFzcyB0aGUgYGxsaHR0cF9wYXJzZXJgIHBvaW50ZXIgYWRkcmVzcywgdGhlIHBvaW50ZXIgYWRkcmVzcyBvZiBidWZmZXIgdmlldyBkYXRhLFxuICAgIC8vIGFuZCBmaW5hbGx5IHRoZSBsZW5ndGggb2YgYnl0ZXMgdG8gcGFyc2UuXG4gICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBlcnJvciBjb2RlIG9yIGBjb25zdGFudHMuRVJST1IuT0tgLlxuICAgIHRyeSB7XG4gICAgICBsZXQgcmV0XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJlbnRCdWZmZXJSZWYgPSBkYXRhXG4gICAgICAgIGN1cnJlbnRQYXJzZXIgPSB0aGlzXG4gICAgICAgIHJldCA9IGxsaHR0cC5sbGh0dHBfZXhlY3V0ZSh0aGlzLnB0ciwgY3VycmVudEJ1ZmZlclB0ciwgZGF0YS5sZW5ndGgpXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhdGNoICovXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN1cnJlbnRQYXJzZXIgPSBudWxsXG4gICAgICAgIGN1cnJlbnRCdWZmZXJSZWYgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldCA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3Bvcyh0aGlzLnB0cikgLSBjdXJyZW50QnVmZmVyUHRyXG5cbiAgICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRURfVVBHUkFERSkge1xuICAgICAgICB0aGlzLm9uVXBncmFkZShkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCkge1xuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWVcbiAgICAgICAgc29ja2V0LnVuc2hpZnQoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfSBlbHNlIGlmIChyZXQgIT09IGNvbnN0YW50cy5FUlJPUi5PSykge1xuICAgICAgICBjb25zdCBwdHIgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9yZWFzb24odGhpcy5wdHIpXG4gICAgICAgIGxldCBtZXNzYWdlID0gJydcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgICAgICBpZiAocHRyKSB7XG4gICAgICAgICAgY29uc3QgbGVuID0gbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIHB0cikuaW5kZXhPZigwKVxuICAgICAgICAgIG1lc3NhZ2UgPVxuICAgICAgICAgICAgJ1Jlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHRoZSBIVFRQLzEuMSBwcm90b2NvbCAoJyArXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyLCBsZW4pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgJyknXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEhUVFBQYXJzZXJFcnJvcihtZXNzYWdlLCBjb25zdGFudHMuRVJST1JbcmV0XSwgZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIGFzc2VydCh0aGlzLnB0ciAhPSBudWxsKVxuICAgIGFzc2VydChjdXJyZW50UGFyc2VyID09IG51bGwpXG5cbiAgICB0aGlzLmxsaHR0cC5sbGh0dHBfZnJlZSh0aGlzLnB0cilcbiAgICB0aGlzLnB0ciA9IG51bGxcblxuICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB9XG5cbiAgb25TdGF0dXMgKGJ1Zikge1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGJ1Zi50b1N0cmluZygpXG4gIH1cblxuICBvbk1lc3NhZ2VCZWdpbiAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRmllbGQgKGJ1Zikge1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDApIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIG9uSGVhZGVyVmFsdWUgKGJ1Zikge1xuICAgIGxldCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAxKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgICBsZW4gKz0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGhpcy5oZWFkZXJzW2xlbiAtIDJdXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDEwICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJykge1xuICAgICAgdGhpcy5rZWVwQWxpdmUgKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEwICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgdGhpcy5jb25uZWN0aW9uICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSB7XG4gICAgICB0aGlzLmNvbnRlbnRMZW5ndGggKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrSGVhZGVyKGJ1Zi5sZW5ndGgpXG4gIH1cblxuICB0cmFja0hlYWRlciAobGVuKSB7XG4gICAgdGhpcy5oZWFkZXJzU2l6ZSArPSBsZW5cbiAgICBpZiAodGhpcy5oZWFkZXJzU2l6ZSA+PSB0aGlzLmhlYWRlcnNNYXhTaXplKSB7XG4gICAgICB1dGlsLmRlc3Ryb3kodGhpcy5zb2NrZXQsIG5ldyBIZWFkZXJzT3ZlcmZsb3dFcnJvcigpKVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoaGVhZCkge1xuICAgIGNvbnN0IHsgdXBncmFkZSwgY2xpZW50LCBzb2NrZXQsIGhlYWRlcnMsIHN0YXR1c0NvZGUgfSA9IHRoaXNcblxuICAgIGFzc2VydCh1cGdyYWRlKVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQoIXNvY2tldC5kZXN0cm95ZWQpXG4gICAgYXNzZXJ0KHNvY2tldCA9PT0gY2xpZW50W2tTb2NrZXRdKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG4gICAgYXNzZXJ0KHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSBudWxsXG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgc29ja2V0LnVuc2hpZnQoaGVhZClcblxuICAgIHNvY2tldFtrUGFyc2VyXS5kZXN0cm95KClcbiAgICBzb2NrZXRba1BhcnNlcl0gPSBudWxsXG5cbiAgICBzb2NrZXRba0NsaWVudF0gPSBudWxsXG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG4gICAgc29ja2V0XG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCBvblNvY2tldFJlYWRhYmxlKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvblNvY2tldEVuZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCd1cGdyYWRlJykpXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH1cblxuICBvbkhlYWRlcnNDb21wbGV0ZSAoc3RhdHVzQ29kZSwgdXBncmFkZSwgc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzVGV4dCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydCghdGhpcy51cGdyYWRlKVxuICAgIGFzc2VydCh0aGlzLnN0YXR1c0NvZGUgPCAyMDApXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMTAwKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCByZXNwb25zZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIC8qIHRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNlcnZlciBpcyBtaXNiZWhhdmluZyAqL1xuICAgIGlmICh1cGdyYWRlICYmICFyZXF1ZXN0LnVwZ3JhZGUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9IRUFERVJTKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gKFxuICAgICAgc2hvdWxkS2VlcEFsaXZlIHx8XG4gICAgICAvLyBPdmVycmlkZSBsbGh0dHAgdmFsdWUgd2hpY2ggZG9lcyBub3QgYWxsb3cga2VlcEFsaXZlIGZvciBIRUFELlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgJiYgIXNvY2tldFtrUmVzZXRdICYmIHRoaXMuY29ubmVjdGlvbi50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZScpXG4gICAgKVxuXG4gICAgaWYgKHRoaXMuc3RhdHVzQ29kZSA+PSAyMDApIHtcbiAgICAgIGNvbnN0IGJvZHlUaW1lb3V0ID0gcmVxdWVzdC5ib2R5VGltZW91dCAhPSBudWxsXG4gICAgICAgID8gcmVxdWVzdC5ib2R5VGltZW91dFxuICAgICAgICA6IGNsaWVudFtrQm9keVRpbWVvdXRdXG4gICAgICB0aGlzLnNldFRpbWVvdXQoYm9keVRpbWVvdXQsIFRJTUVPVVRfQk9EWSlcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAxKVxuICAgICAgdGhpcy51cGdyYWRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIDJcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAodGhpcy5zaG91bGRLZWVwQWxpdmUgJiYgY2xpZW50W2tQaXBlbGluaW5nXSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlVGltZW91dCA9IHRoaXMua2VlcEFsaXZlID8gdXRpbC5wYXJzZUtlZXBBbGl2ZVRpbWVvdXQodGhpcy5rZWVwQWxpdmUpIDogbnVsbFxuXG4gICAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBNYXRoLm1pbihcbiAgICAgICAgICBrZWVwQWxpdmVUaW1lb3V0IC0gY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSxcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZU1heFRpbWVvdXRdXG4gICAgICAgIClcbiAgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkge1xuICAgICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IHRpbWVvdXRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gY2xpZW50W2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RvcCBtb3JlIHJlcXVlc3RzIGZyb20gYmVpbmcgZGlzcGF0Y2hlZC5cbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHBhdXNlID0gcmVxdWVzdC5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgdGhpcy5yZXN1bWUsIHN0YXR1c1RleHQpID09PSBmYWxzZVxuXG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICByZXN1bWUoY2xpZW50KVxuICAgIH1cblxuICAgIHJldHVybiBwYXVzZSA/IGNvbnN0YW50cy5FUlJPUi5QQVVTRUQgOiAwXG4gIH1cblxuICBvbkJvZHkgKGJ1Zikge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIG1heFJlc3BvbnNlU2l6ZSB9ID0gdGhpc1xuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRoaXMudGltZW91dFR5cGUsIFRJTUVPVVRfQk9EWSlcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA+PSAyMDApXG5cbiAgICBpZiAobWF4UmVzcG9uc2VTaXplID4gLTEgJiYgdGhpcy5ieXRlc1JlYWQgKyBidWYubGVuZ3RoID4gbWF4UmVzcG9uc2VTaXplKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgKz0gYnVmLmxlbmd0aFxuXG4gICAgaWYgKHJlcXVlc3Qub25EYXRhKGJ1ZikgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH1cbiAgfVxuXG4gIG9uTWVzc2FnZUNvbXBsZXRlICgpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBoZWFkZXJzLCBjb250ZW50TGVuZ3RoLCBieXRlc1JlYWQsIHNob3VsZEtlZXBBbGl2ZSB9ID0gdGhpc1xuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQgJiYgKCFzdGF0dXNDb2RlIHx8IHNob3VsZEtlZXBBbGl2ZSkpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDEwMClcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuYnl0ZXNSZWFkID0gMFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9ICcnXG4gICAgdGhpcy5rZWVwQWxpdmUgPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgYmUgaGFuZGxlZCBieSBsbGh0dHA/ICovXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29udGVudExlbmd0aCAmJiBieXRlc1JlYWQgIT09IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Db21wbGV0ZShoZWFkZXJzKVxuXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGlmIChzb2NrZXRba1dyaXRpbmddKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2xpZW50W2tSdW5uaW5nXSwgMClcbiAgICAgIC8vIFJlc3BvbnNlIGNvbXBsZXRlZCBiZWZvcmUgcmVxdWVzdC5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoIXNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChzb2NrZXRba1Jlc2V0XSAmJiBjbGllbnRba1J1bm5pbmddID09PSAwKSB7XG4gICAgICAvLyBEZXN0cm95IHNvY2tldCBvbmNlIGFsbCByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGF0IHRoZSB0YWlsIG9mIHRoZSBwaXBlbGluZSBpcyB0aGUgb25lXG4gICAgICAvLyB0aGF0IHJlcXVlc3RlZCByZXNldCBhbmQgbm8gZnVydGhlciByZXF1ZXN0cyBzaG91bGRcbiAgICAgIC8vIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlbi5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSA9PT0gMSkge1xuICAgICAgLy8gV2UgbXVzdCB3YWl0IGEgZnVsbCBldmVudCBsb29wIGN5Y2xlIHRvIHJldXNlIHRoaXMgc29ja2V0IHRvIG1ha2Ugc3VyZVxuICAgICAgLy8gdGhhdCBub24tc3BlYyBjb21wbGlhbnQgc2VydmVycyBhcmUgbm90IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZXZlbiBpZiB0aGV5XG4gICAgICAvLyBzYWlkIHRoZXkgd29uJ3QuXG4gICAgICBzZXRJbW1lZGlhdGUocmVzdW1lLCBjbGllbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyVGltZW91dCAocGFyc2VyKSB7XG4gIGNvbnN0IHsgc29ja2V0LCB0aW1lb3V0VHlwZSwgY2xpZW50IH0gPSBwYXJzZXJcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgIGlmICghc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXQud3JpdGFibGVOZWVkRHJhaW4gfHwgY2xpZW50W2tSdW5uaW5nXSA+IDEpIHtcbiAgICAgIGFzc2VydCghcGFyc2VyLnBhdXNlZCwgJ2Nhbm5vdCBiZSBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgaGVhZGVycycpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSGVhZGVyc1RpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKSB7XG4gICAgaWYgKCFwYXJzZXIucGF1c2VkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgQm9keVRpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9JRExFKSB7XG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDAgJiYgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdKVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NvY2tldCBpZGxlIHRpbWVvdXQnKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldFJlYWRhYmxlICgpIHtcbiAgY29uc3QgeyBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuICBpZiAocGFyc2VyKSB7XG4gICAgcGFyc2VyLnJlYWRNb3JlKClcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnIpIHtcbiAgY29uc3QgeyBba0NsaWVudF06IGNsaWVudCwgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcblxuICBhc3NlcnQoZXJyLmNvZGUgIT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dICE9PSAnaDInKSB7XG4gICAgLy8gT24gTWFjIE9TLCB3ZSBnZXQgYW4gRUNPTk5SRVNFVCBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBib2R5IHRvIGJlIGZvcndhcmRlZFxuICAgIC8vIHRvIHRoZSB1c2VyLlxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmb3IgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICB0aGlzW2tFcnJvcl0gPSBlcnJcblxuICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbn1cblxuZnVuY3Rpb24gb25FcnJvciAoY2xpZW50LCBlcnIpIHtcbiAgaWYgKFxuICAgIGNsaWVudFtrUnVubmluZ10gPT09IDAgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJ1xuICApIHtcbiAgICAvLyBFcnJvciBpcyBub3QgY2F1c2VkIGJ5IHJ1bm5pbmcgcmVxdWVzdCBhbmQgbm90IGEgcmVjb3ZlcmFibGVcbiAgICAvLyBzb2NrZXQgZXJyb3IuXG5cbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nSWR4XSA9PT0gY2xpZW50W2tSdW5uaW5nSWR4XSlcblxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICAgIGFzc2VydChjbGllbnRba1NpemVdID09PSAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RW5kICgpIHtcbiAgY29uc3QgeyBba1BhcnNlcl06IHBhcnNlciwgW2tDbGllbnRdOiBjbGllbnQgfSA9IHRoaXNcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dICE9PSAnaDInKSB7XG4gICAgaWYgKHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmYXIgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSkpXG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0Q2xvc2UgKCkge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMScgJiYgcGFyc2VyKSB7XG4gICAgaWYgKCF0aGlzW2tFcnJvcl0gJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICB9XG5cbiAgICB0aGlzW2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHRoaXNba1BhcnNlcl0gPSBudWxsXG4gIH1cblxuICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKCdjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG5cbiAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG5cbiAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycpIHtcbiAgICAvLyBGYWlsIGhlYWQgb2YgcGlwZWxpbmUuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG5cbiAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdCAoY2xpZW50KSB7XG4gIGFzc2VydCghY2xpZW50W2tDb25uZWN0aW5nXSlcbiAgYXNzZXJ0KCFjbGllbnRba1NvY2tldF0pXG5cbiAgbGV0IHsgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0IH0gPSBjbGllbnRba1VybF1cblxuICAvLyBSZXNvbHZlIGlwdjZcbiAgaWYgKGhvc3RuYW1lWzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0bmFtZS5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIGNvbnN0IGlwID0gaG9zdG5hbWUuc3Vic3RyaW5nKDEsIGlkeClcblxuICAgIGFzc2VydChuZXQuaXNJUChpcCkpXG4gICAgaG9zdG5hbWUgPSBpcFxuICB9XG5cbiAgY2xpZW50W2tDb25uZWN0aW5nXSA9IHRydWVcblxuICBpZiAoY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QucHVibGlzaCh7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgIH0sXG4gICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNvY2tldCA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNsaWVudFtrQ29ubmVjdG9yXSh7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgIH0sIChlcnIsIHNvY2tldCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHNvY2tldClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQub24oJ2Vycm9yJywgKCkgPT4ge30pLCBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgYXNzZXJ0KHNvY2tldClcblxuICAgIGNvbnN0IGlzSDIgPSBzb2NrZXQuYWxwblByb3RvY29sID09PSAnaDInXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGlmICghaDJFeHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgICAgaDJFeHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ0gyIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICAgIGNvZGU6ICdVTkRJQ0ktSDInXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb24gPSBodHRwMi5jb25uZWN0KGNsaWVudFtrVXJsXSwge1xuICAgICAgICBjcmVhdGVDb25uZWN0aW9uOiAoKSA9PiBzb2NrZXQsXG4gICAgICAgIHBlZXJNYXhDb25jdXJyZW50U3RyZWFtczogY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV0ubWF4Q29uY3VycmVudFN0cmVhbXNcbiAgICAgIH0pXG5cbiAgICAgIGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9ICdoMidcbiAgICAgIHNlc3Npb25ba0NsaWVudF0gPSBjbGllbnRcbiAgICAgIHNlc3Npb25ba1NvY2tldF0gPSBzb2NrZXRcbiAgICAgIHNlc3Npb24ub24oJ2Vycm9yJywgb25IdHRwMlNlc3Npb25FcnJvcilcbiAgICAgIHNlc3Npb24ub24oJ2ZyYW1lRXJyb3InLCBvbkh0dHAyRnJhbWVFcnJvcilcbiAgICAgIHNlc3Npb24ub24oJ2VuZCcsIG9uSHR0cDJTZXNzaW9uRW5kKVxuICAgICAgc2Vzc2lvbi5vbignZ29hd2F5Jywgb25IVFRQMkdvQXdheSlcbiAgICAgIHNlc3Npb24ub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuXG4gICAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gICAgICBzb2NrZXRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbGxodHRwSW5zdGFuY2UpIHtcbiAgICAgICAgbGxodHRwSW5zdGFuY2UgPSBhd2FpdCBsbGh0dHBQcm9taXNlXG4gICAgICAgIGxsaHR0cFByb21pc2UgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuICAgICAgc29ja2V0W2tSZXNldF0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgc29ja2V0W2tQYXJzZXJdID0gbmV3IFBhcnNlcihjbGllbnQsIHNvY2tldCwgbGxodHRwSW5zdGFuY2UpXG4gICAgfVxuXG4gICAgc29ja2V0W2tDb3VudGVyXSA9IDBcbiAgICBzb2NrZXRba01heFJlcXVlc3RzXSA9IGNsaWVudFtrTWF4UmVxdWVzdHNdXG4gICAgc29ja2V0W2tDbGllbnRdID0gY2xpZW50XG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLm9uKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAub24oJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBzb2NrZXRcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0ZWQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RlZC5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBzb2NrZXRcbiAgICAgIH0pXG4gICAgfVxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RFcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdEVycm9yLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuICAgICAgd2hpbGUgKGNsaWVudFtrUGVuZGluZ10gPiAwICYmIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dLnNlcnZlcm5hbWUgPT09IGNsaWVudFtrU2VydmVyTmFtZV0pIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF0rK11cbiAgICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKGNsaWVudCwgZXJyKVxuICAgIH1cblxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG4gIH1cblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5mdW5jdGlvbiBlbWl0RHJhaW4gKGNsaWVudCkge1xuICBjbGllbnRba05lZWREcmFpbl0gPSAwXG4gIGNsaWVudC5lbWl0KCdkcmFpbicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIGlmIChjbGllbnRba1Jlc3VtaW5nXSA9PT0gMikge1xuICAgIHJldHVyblxuICB9XG5cbiAgY2xpZW50W2tSZXN1bWluZ10gPSAyXG5cbiAgX3Jlc3VtZShjbGllbnQsIHN5bmMpXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMFxuXG4gIGlmIChjbGllbnRba1J1bm5pbmdJZHhdID4gMjU2KSB7XG4gICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKDAsIGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSAtPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gICAgY2xpZW50W2tSdW5uaW5nSWR4XSA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDbG9zZWRSZXNvbHZlXSAmJiAhY2xpZW50W2tTaXplXSkge1xuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgICBpZiAoc29ja2V0ICYmICFzb2NrZXQuZGVzdHJveWVkICYmIHNvY2tldC5hbHBuUHJvdG9jb2wgIT09ICdoMicpIHtcbiAgICAgIGlmIChjbGllbnRba1NpemVdID09PSAwKSB7XG4gICAgICAgIGlmICghc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnVucmVmKSB7XG4gICAgICAgICAgc29ja2V0LnVucmVmKClcbiAgICAgICAgICBzb2NrZXRba05vUmVmXSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQucmVmKSB7XG4gICAgICAgIHNvY2tldC5yZWYoKVxuICAgICAgICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGlmIChjbGllbnRba1NpemVdID09PSAwKSB7XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSURMRSkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSwgVElNRU9VVF9JRExFKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHNvY2tldFtrUGFyc2VyXS5zdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgICAgICAgIGNvbnN0IGhlYWRlcnNUaW1lb3V0ID0gcmVxdWVzdC5oZWFkZXJzVGltZW91dCAhPSBudWxsXG4gICAgICAgICAgICA/IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXRcbiAgICAgICAgICAgIDogY2xpZW50W2tIZWFkZXJzVGltZW91dF1cbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChoZWFkZXJzVGltZW91dCwgVElNRU9VVF9IRUFERVJTKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQnVzeV0pIHtcbiAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDJcbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrTmVlZERyYWluXSA9PT0gMikge1xuICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMVxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXREcmFpbiwgY2xpZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdERyYWluKGNsaWVudClcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUGVuZGluZ10gPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID49IChjbGllbnRba1BpcGVsaW5pbmddIHx8IDEpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV1cblxuICAgIGlmIChjbGllbnRba1VybF0ucHJvdG9jb2wgPT09ICdodHRwczonICYmIGNsaWVudFtrU2VydmVyTmFtZV0gIT09IHJlcXVlc3Quc2VydmVybmFtZSkge1xuICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjbGllbnRba1NlcnZlck5hbWVdID0gcmVxdWVzdC5zZXJ2ZXJuYW1lXG5cbiAgICAgIGlmIChzb2NrZXQgJiYgc29ja2V0LnNlcnZlcm5hbWUgIT09IHJlcXVlc3Quc2VydmVybmFtZSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdzZXJ2ZXJuYW1lIGNoYW5nZWQnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQ29ubmVjdGluZ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc29ja2V0ICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0pIHtcbiAgICAgIGNvbm5lY3QoY2xpZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQgfHwgc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXRba1Jlc2V0XSB8fCBzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmICFyZXF1ZXN0LmlkZW1wb3RlbnQpIHtcbiAgICAgIC8vIE5vbi1pZGVtcG90ZW50IHJlcXVlc3QgY2Fubm90IGJlIHJldHJpZWQuXG4gICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykpIHtcbiAgICAgIC8vIERvbid0IGRpc3BhdGNoIGFuIHVwZ3JhZGUgdW50aWwgYWxsIHByZWNlZGluZyByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgIC8vIEEgbWlzYmVoYXZpbmcgc2VydmVyIG1pZ2h0IHVwZ3JhZGUgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIGFsbCBwaXBlbGluZWRcbiAgICAgIC8vIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiB1dGlsLmJvZHlMZW5ndGgocmVxdWVzdC5ib2R5KSAhPT0gMCAmJlxuICAgICAgKHV0aWwuaXNTdHJlYW0ocmVxdWVzdC5ib2R5KSB8fCB1dGlsLmlzQXN5bmNJdGVyYWJsZShyZXF1ZXN0LmJvZHkpKSkge1xuICAgICAgLy8gUmVxdWVzdCB3aXRoIHN0cmVhbSBvciBpdGVyYXRvciBib2R5IGNhbiBlcnJvciB3aGlsZSBvdGhlciByZXF1ZXN0c1xuICAgICAgLy8gYXJlIGluZmxpZ2h0IGFuZCBpbmRpcmVjdGx5IGVycm9yIHRob3NlIGFzIHdlbGwuXG4gICAgICAvLyBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiBieSB3YWl0aW5nIGZvciBpbmZsaWdodFxuICAgICAgLy8gdG8gY29tcGxldGUgYmVmb3JlIGRpc3BhdGNoaW5nLlxuXG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHJldHJpZWQuXG4gICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0LmFib3J0ZWQgJiYgd3JpdGUoY2xpZW50LCByZXF1ZXN0KSkge1xuICAgICAgY2xpZW50W2tQZW5kaW5nSWR4XSsrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1BlbmRpbmdJZHhdLCAxKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZSAoY2xpZW50LCByZXF1ZXN0KSB7XG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICB3cml0ZUgyKGNsaWVudCwgY2xpZW50W2tIVFRQMlNlc3Npb25dLCByZXF1ZXN0KVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGhlYWRlcnMsIGJsb2NraW5nLCByZXNldCB9ID0gcmVxdWVzdFxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGNvbnN0IGJvZHlMZW5ndGggPSB1dGlsLmJvZHlMZW5ndGgoYm9keSlcblxuICBsZXQgY29udGVudExlbmd0aCA9IGJvZHlMZW5ndGhcblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwICYmICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBudWxsICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gY29udGVudExlbmd0aCkge1xuICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ2Fib3J0ZWQnKSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL2lzc3Vlcy8yNThcbiAgICAvLyBDbG9zZSBhZnRlciBhIEhFQUQgcmVxdWVzdCB0byBpbnRlcm9wIHdpdGggbWlzYmVoYXZpbmcgc2VydmVyc1xuICAgIC8vIHRoYXQgbWF5IHNlbmQgYSBib2R5IGluIHRoZSByZXNwb25zZS5cblxuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKHVwZ3JhZGUgfHwgbWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAvLyBPbiBDT05ORUNUIG9yIHVwZ3JhZGUsIGJsb2NrIHBpcGVsaW5lIGZyb20gZGlzcGF0Y2hpbmcgZnVydGhlclxuICAgIC8vIHJlcXVlc3RzIG9uIHRoaXMgY29ubmVjdGlvbi5cblxuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKHJlc2V0ICE9IG51bGwpIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHJlc2V0XG4gIH1cblxuICBpZiAoY2xpZW50W2tNYXhSZXF1ZXN0c10gJiYgc29ja2V0W2tDb3VudGVyXSsrID49IGNsaWVudFtrTWF4UmVxdWVzdHNdKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAoYmxvY2tpbmcpIHtcbiAgICBzb2NrZXRba0Jsb2NraW5nXSA9IHRydWVcbiAgfVxuXG4gIGxldCBoZWFkZXIgPSBgJHttZXRob2R9ICR7cGF0aH0gSFRUUC8xLjFcXHJcXG5gXG5cbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJykge1xuICAgIGhlYWRlciArPSBgaG9zdDogJHtob3N0fVxcclxcbmBcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gY2xpZW50W2tIb3N0SGVhZGVyXVxuICB9XG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICBoZWFkZXIgKz0gYGNvbm5lY3Rpb246IHVwZ3JhZGVcXHJcXG51cGdyYWRlOiAke3VwZ3JhZGV9XFxyXFxuYFxuICB9IGVsc2UgaWYgKGNsaWVudFtrUGlwZWxpbmluZ10gJiYgIXNvY2tldFtrUmVzZXRdKSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBrZWVwLWFsaXZlXFxyXFxuJ1xuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjogY2xvc2VcXHJcXG4nXG4gIH1cblxuICBpZiAoaGVhZGVycykge1xuICAgIGhlYWRlciArPSBoZWFkZXJzXG4gIH1cblxuICBpZiAoY2hhbm5lbHMuc2VuZEhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zZW5kSGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdCwgaGVhZGVyczogaGVhZGVyLCBzb2NrZXQgfSlcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgaWYgKCFib2R5IHx8IGJvZHlMZW5ndGggPT09IDApIHtcbiAgICBpZiAoY29udGVudExlbmd0aCA9PT0gMCkge1xuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gbnVsbCwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5ieXRlTGVuZ3RoLCAnYnVmZmVyIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICAgIHNvY2tldC5jb3JrKClcbiAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgc29ja2V0LndyaXRlKGJvZHkpXG4gICAgc29ja2V0LnVuY29yaygpXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7IGJvZHk6IGJvZHkuc3RyZWFtKCksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHdyaXRlQmxvYih7IGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICB3cml0ZVN0cmVhbSh7IGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gIH0gZWxzZSBpZiAodXRpbC5pc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgd3JpdGVJdGVyYWJsZSh7IGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gd3JpdGVIMiAoY2xpZW50LCBzZXNzaW9uLCByZXF1ZXN0KSB7XG4gIGNvbnN0IHsgYm9keSwgbWV0aG9kLCBwYXRoLCBob3N0LCB1cGdyYWRlLCBleHBlY3RDb250aW51ZSwgc2lnbmFsLCBoZWFkZXJzOiByZXFIZWFkZXJzIH0gPSByZXF1ZXN0XG5cbiAgbGV0IGhlYWRlcnNcbiAgaWYgKHR5cGVvZiByZXFIZWFkZXJzID09PSAnc3RyaW5nJykgaGVhZGVycyA9IFJlcXVlc3Rba0hUVFAyQ29weUhlYWRlcnNdKHJlcUhlYWRlcnMudHJpbSgpKVxuICBlbHNlIGhlYWRlcnMgPSByZXFIZWFkZXJzXG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgRXJyb3IoJ1VwZ3JhZGUgbm90IHN1cHBvcnRlZCBmb3IgSDInKSlcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVE9ETyhIVFRQLzIpOiBTaG91bGQgd2UgY2FsbCBvbkNvbm5lY3QgaW1tZWRpYXRlbHkgb3Igb24gc3RyZWFtIHJlYWR5IGV2ZW50P1xuICAgIHJlcXVlc3Qub25Db25uZWN0KChlcnIpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQgfHwgcmVxdWVzdC5jb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVyciB8fCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOmh0dHAyJykuQ2xpZW50SHR0cDJTdHJlYW19ICovXG4gIGxldCBzdHJlYW1cbiAgY29uc3QgaDJTdGF0ZSA9IGNsaWVudFtrSFRUUDJTZXNzaW9uU3RhdGVdXG5cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQVVUSE9SSVRZXSA9IGhvc3QgfHwgY2xpZW50W2tIb3N0XVxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9NRVRIT0RdID0gbWV0aG9kXG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgc2Vzc2lvbi5yZWYoKVxuICAgIC8vIHdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc3RyZWFtcyBhcmUgcGVuZGluZywgZmlyc3QgcmVxdWVzdFxuICAgIC8vIHdpbGwgY3JlYXRlIGEgbmV3IHN0cmVhbS4gV2UgdHJpZ2dlciBhIHJlcXVlc3QgdG8gY3JlYXRlIHRoZSBzdHJlYW0gYW5kIHdhaXQgdW50aWxcbiAgICAvLyBgcmVhZHlgIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgIC8vIFdlIGRpc2FibGVkIGVuZFN0cmVhbSB0byBhbGxvdyB0aGUgdXNlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBmYWxzZSwgc2lnbmFsIH0pXG5cbiAgICBpZiAoc3RyZWFtLmlkICYmICFzdHJlYW0ucGVuZGluZykge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbmNlKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RyZWFtLm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgICAvLyBUT0RPKEhUVFAvMik6IHVucmVmIG9ubHkgaWYgY3VycmVudCBzdHJlYW1zIGNvdW50IGlzIDBcbiAgICAgIGlmIChoMlN0YXRlLm9wZW5TdHJlYW1zID09PSAwKSBzZXNzaW9uLnVucmVmKClcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTQwI3NlY3Rpb24tOC4zXG4gIC8vIDpwYXRoIGFuZCA6c2NoZW1lIGhlYWRlcnMgbXVzdCBiZSBvbWl0ZWQgd2hlbiBzZW5kaW5nIENPTk5FQ1RcblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9QQVRIXSA9IHBhdGhcbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfU0NIRU1FXSA9ICdodHRwcydcblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4xXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuNVxuXG4gIC8vIFNlbmRpbmcgYSBwYXlsb2FkIGJvZHkgb24gYSByZXF1ZXN0IHRoYXQgZG9lcyBub3RcbiAgLy8gZXhwZWN0IGl0IGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZVxuICAvLyBzZXJ2ZXJzIGFuZCBjb3JydXB0IGNvbm5lY3Rpb24gc3RhdGUuIERvIG5vdFxuICAvLyByZS11c2UgdGhlIGNvbm5lY3Rpb24gZm9yIGZ1cnRoZXIgcmVxdWVzdHMuXG5cbiAgY29uc3QgZXhwZWN0c1BheWxvYWQgPSAoXG4gICAgbWV0aG9kID09PSAnUFVUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BPU1QnIHx8XG4gICAgbWV0aG9kID09PSAnUEFUQ0gnXG4gIClcblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBsZXQgY29udGVudExlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoID0gcmVxdWVzdC5jb250ZW50TGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gMCB8fCAhZXhwZWN0c1BheWxvYWQpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBOT1Qgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmaWVsZCB3aGVuXG4gICAgLy8gdGhlIHJlcXVlc3QgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGEgcGF5bG9hZCBib2R5IGFuZCB0aGUgbWV0aG9kXG4gICAgLy8gc2VtYW50aWNzIGRvIG5vdCBhbnRpY2lwYXRlIHN1Y2ggYSBib2R5LlxuXG4gICAgY29udGVudExlbmd0aCA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDQ2XG4gIC8vIEEgdXNlciBhZ2VudCBtYXkgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIDAgdmFsdWUsIHRoaXMgc2hvdWxkIGJlIGFsbG93ZWQuXG4gIGlmIChzaG91bGRTZW5kQ29udGVudExlbmd0aChtZXRob2QpICYmIGNvbnRlbnRMZW5ndGggPiAwICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPSBudWxsICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gY29udGVudExlbmd0aCkge1xuICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBhc3NlcnQoYm9keSwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEhdID0gYCR7Y29udGVudExlbmd0aH1gXG4gIH1cblxuICBzZXNzaW9uLnJlZigpXG5cbiAgY29uc3Qgc2hvdWxkRW5kU3RyZWFtID0gbWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJ1xuICBpZiAoZXhwZWN0Q29udGludWUpIHtcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9FWFBFQ1RdID0gJzEwMC1jb250aW51ZSdcbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSwgc2lnbmFsIH0pXG5cbiAgICBzdHJlYW0ub25jZSgnY29udGludWUnLCB3cml0ZUJvZHlIMilcbiAgfSBlbHNlIHtcbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywge1xuICAgICAgZW5kU3RyZWFtOiBzaG91bGRFbmRTdHJlYW0sXG4gICAgICBzaWduYWxcbiAgICB9KVxuICAgIHdyaXRlQm9keUgyKClcbiAgfVxuXG4gIC8vIEluY3JlbWVudCBjb3VudGVyIGFzIHdlIGhhdmUgbmV3IHNldmVyYWwgc3RyZWFtcyBvcGVuXG4gICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuXG4gIHN0cmVhbS5vbmNlKCdyZXNwb25zZScsIGhlYWRlcnMgPT4ge1xuICAgIGNvbnN0IHsgW0hUVFAyX0hFQURFUl9TVEFUVVNdOiBzdGF0dXNDb2RlLCAuLi5yZWFsSGVhZGVycyB9ID0gaGVhZGVyc1xuXG4gICAgaWYgKHJlcXVlc3Qub25IZWFkZXJzKE51bWJlcihzdGF0dXNDb2RlKSwgcmVhbEhlYWRlcnMsIHN0cmVhbS5yZXN1bWUuYmluZChzdHJlYW0pLCAnJykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZW5kJywgKCkgPT4ge1xuICAgIHJlcXVlc3Qub25Db21wbGV0ZShbXSlcbiAgfSlcblxuICBzdHJlYW0ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoY2h1bmspID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGgyU3RhdGUub3BlblN0cmVhbXMgLT0gMVxuICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgIGlmIChoMlN0YXRlLm9wZW5TdHJlYW1zID09PSAwKSB7XG4gICAgICBzZXNzaW9uLnVucmVmKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChjbGllbnRba0hUVFAyU2Vzc2lvbl0gJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXS5kZXN0cm95ZWQgJiYgIXRoaXMuY2xvc2VkICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgaDJTdGF0ZS5zdHJlYW1zIC09IDFcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2ZyYW1lRXJyb3InLCAodHlwZSwgY29kZSkgPT4ge1xuICAgIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuXG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICAvLyBzdHJlYW0ub24oJ2Fib3J0ZWQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IGFib3J0ZWRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRpbWVvdXRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3B1c2gnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvciBwdXNoXG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCd0cmFpbGVycycsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCB0cmFpbGVyc1xuICAvLyB9KVxuXG4gIHJldHVybiB0cnVlXG5cbiAgZnVuY3Rpb24gd3JpdGVCb2R5SDIgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5ieXRlTGVuZ3RoLCAnYnVmZmVyIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHN0cmVhbS5jb3JrKClcbiAgICAgIHN0cmVhbS53cml0ZShib2R5KVxuICAgICAgc3RyZWFtLnVuY29yaygpXG4gICAgICBzdHJlYW0uZW5kKClcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChib2R5KVxuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3cml0ZUl0ZXJhYmxlKHtcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgICAgYm9keTogYm9keS5zdHJlYW0oKSxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgICBoZWFkZXI6ICcnXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUJsb2Ioe1xuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIHdyaXRlU3RyZWFtKHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF0sXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIGhlYWRlcjogJydcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBoZWFkZXI6ICcnLFxuICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbSAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnc3RyZWFtIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIC8vIEZvciBIVFRQLzIsIGlzIGVub3VnaCB0byBwaXBlIHRoZSBzdHJlYW1cbiAgICBjb25zdCBwaXBlID0gcGlwZWxpbmUoXG4gICAgICBib2R5LFxuICAgICAgaDJzdHJlYW0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICAgIHV0aWwuZGVzdHJveShoMnN0cmVhbSwgZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG5cbiAgICBwaXBlLm9uKCdkYXRhJywgb25QaXBlRGF0YSlcbiAgICBwaXBlLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgIHBpcGUucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgICAgdXRpbC5kZXN0cm95KHBpcGUpXG4gICAgfSlcblxuICAgIGZ1bmN0aW9uIG9uUGlwZURhdGEgKGNodW5rKSB7XG4gICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG5cbiAgY29uc3Qgb25EYXRhID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspICYmIHRoaXMucGF1c2UpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3kodGhpcywgZXJyKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkRyYWluID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJvZHkucmVzdW1lKSB7XG4gICAgICBib2R5LnJlc3VtZSgpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IG9uRmluaXNoZWQoZXJyKSlcbiAgfVxuICBjb25zdCBvbkZpbmlzaGVkID0gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZmluaXNoZWQgPSB0cnVlXG5cbiAgICBhc3NlcnQoc29ja2V0LmRlc3Ryb3llZCB8fCAoc29ja2V0W2tXcml0aW5nXSAmJiBjbGllbnRba1J1bm5pbmddIDw9IDEpKVxuXG4gICAgc29ja2V0XG4gICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgICAub2ZmKCdlcnJvcicsIG9uRmluaXNoZWQpXG5cbiAgICBib2R5XG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbkRhdGEpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRmluaXNoZWQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbkFib3J0KVxuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHdyaXRlci5lbmQoKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgZXJyID0gZXJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZGVzdHJveShlcnIpXG5cbiAgICBpZiAoZXJyICYmIChlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgfHwgZXJyLm1lc3NhZ2UgIT09ICdyZXNldCcpKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSlcbiAgICB9XG4gIH1cblxuICBib2R5XG4gICAgLm9uKCdkYXRhJywgb25EYXRhKVxuICAgIC5vbignZW5kJywgb25GaW5pc2hlZClcbiAgICAub24oJ2Vycm9yJywgb25GaW5pc2hlZClcbiAgICAub24oJ2Nsb3NlJywgb25BYm9ydClcblxuICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICBib2R5LnJlc3VtZSgpXG4gIH1cblxuICBzb2NrZXRcbiAgICAub24oJ2RyYWluJywgb25EcmFpbilcbiAgICAub24oJ2Vycm9yJywgb25GaW5pc2hlZClcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVCbG9iICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LnNpemUsICdibG9iIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICBjb25zdCBpc0gyID0gY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBjb250ZW50TGVuZ3RoICE9PSBib2R5LnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGJvZHkuYXJyYXlCdWZmZXIoKSlcblxuICAgIGlmIChpc0gyKSB7XG4gICAgICBoMnN0cmVhbS5jb3JrKClcbiAgICAgIGgyc3RyZWFtLndyaXRlKGJ1ZmZlcilcbiAgICAgIGgyc3RyZWFtLnVuY29yaygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNvY2tldC5jb3JrKClcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIpXG4gICAgICBzb2NrZXQudW5jb3JrKClcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYnVmZmVyKVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB1dGlsLmRlc3Ryb3koaXNIMiA/IGgyc3RyZWFtIDogc29ja2V0LCBlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVJdGVyYWJsZSAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBsZXQgY2FsbGJhY2sgPSBudWxsXG4gIGZ1bmN0aW9uIG9uRHJhaW4gKCkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICBjYigpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd2FpdEZvckRyYWluID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFzc2VydChjYWxsYmFjayA9PT0gbnVsbClcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgcmVqZWN0KHNvY2tldFtrRXJyb3JdKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayA9IHJlc29sdmVcbiAgICB9XG4gIH0pXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIGgyc3RyZWFtXG4gICAgICAub24oJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcyA9IGgyc3RyZWFtLndyaXRlKGNodW5rKVxuICAgICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaDJzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgICBoMnN0cmVhbS5lbmQoKVxuICAgICAgaDJzdHJlYW1cbiAgICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBzb2NrZXRcbiAgICAub24oJ2Nsb3NlJywgb25EcmFpbilcbiAgICAub24oJ2RyYWluJywgb25EcmFpbilcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgQXN5bmNXcml0ZXIoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuICB0cnkge1xuICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgIH1cblxuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmVuZCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdyaXRlci5kZXN0cm95KGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5jbGFzcyBBc3luY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yICh7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pIHtcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDBcbiAgICB0aGlzLmV4cGVjdHNQYXlsb2FkID0gZXhwZWN0c1BheWxvYWRcbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IHRydWVcbiAgfVxuXG4gIHdyaXRlIChjaHVuaykge1xuICAgIGNvbnN0IHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9ID0gdGhpc1xuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjaHVuaylcbiAgICBpZiAoIWxlbikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBXZSBzaG91bGQgZGVmZXIgd3JpdGluZyBjaHVua3MuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICsgbGVuID4gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgIH1cblxuICAgIHNvY2tldC5jb3JrKClcblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9dHJhbnNmZXItZW5jb2Rpbmc6IGNodW5rZWRcXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKGBcXHJcXG4ke2xlbi50b1N0cmluZygxNil9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gKz0gbGVuXG5cbiAgICBjb25zdCByZXQgPSBzb2NrZXQud3JpdGUoY2h1bmspXG5cbiAgICBzb2NrZXQudW5jb3JrKClcblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcblxuICAgIGlmICghcmV0KSB7XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGVuZCAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyLCByZXF1ZXN0IH0gPSB0aGlzXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgICAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIHNlbmQgYSBDb250ZW50LUxlbmd0aCBpbiBhIHJlcXVlc3QgbWVzc2FnZSB3aGVuXG4gICAgICAgIC8vIG5vIFRyYW5zZmVyLUVuY29kaW5nIGlzIHNlbnQgYW5kIHRoZSByZXF1ZXN0IG1ldGhvZCBkZWZpbmVzIGEgbWVhbmluZ1xuICAgICAgICAvLyBmb3IgYW4gZW5jbG9zZWQgcGF5bG9hZCBib2R5LlxuXG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoJ1xcclxcbjBcXHJcXG5cXHJcXG4nLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjbGllbnQgfSA9IHRoaXNcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuXG4gICAgaWYgKGVycikge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPD0gMSwgJ3BpcGVsaW5lIHNob3VsZCBvbmx5IGNvbnRhaW4gdGhpcyByZXF1ZXN0JylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXJyb3JSZXF1ZXN0IChjbGllbnQsIHJlcXVlc3QsIGVycikge1xuICB0cnkge1xuICAgIHJlcXVlc3Qub25FcnJvcihlcnIpXG4gICAgYXNzZXJ0KHJlcXVlc3QuYWJvcnRlZClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2xpZW50LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ2xpZW50XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLCAiY29uc3QgeyBrRnJlZSwga0Nvbm5lY3RlZCwga1BlbmRpbmcsIGtRdWV1ZWQsIGtSdW5uaW5nLCBrU2l6ZSB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3Qga1Bvb2wgPSBTeW1ib2woJ3Bvb2wnKVxuXG5jbGFzcyBQb29sU3RhdHMge1xuICBjb25zdHJ1Y3RvciAocG9vbCkge1xuICAgIHRoaXNba1Bvb2xdID0gcG9vbFxuICB9XG5cbiAgZ2V0IGNvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tDb25uZWN0ZWRdXG4gIH1cblxuICBnZXQgZnJlZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tGcmVlXVxuICB9XG5cbiAgZ2V0IHBlbmRpbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUGVuZGluZ11cbiAgfVxuXG4gIGdldCBxdWV1ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUXVldWVkXVxuICB9XG5cbiAgZ2V0IHJ1bm5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUnVubmluZ11cbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1NpemVdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sU3RhdHNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCBGaXhlZFF1ZXVlID0gcmVxdWlyZSgnLi9ub2RlL2ZpeGVkLXF1ZXVlJylcbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUsIGtSdW5uaW5nLCBrUGVuZGluZywga1F1ZXVlZCwga0J1c3ksIGtGcmVlLCBrVXJsLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IFBvb2xTdGF0cyA9IHJlcXVpcmUoJy4vcG9vbC1zdGF0cycpXG5cbmNvbnN0IGtDbGllbnRzID0gU3ltYm9sKCdjbGllbnRzJylcbmNvbnN0IGtOZWVkRHJhaW4gPSBTeW1ib2woJ25lZWREcmFpbicpXG5jb25zdCBrUXVldWUgPSBTeW1ib2woJ3F1ZXVlJylcbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdjbG9zZWQgcmVzb2x2ZScpXG5jb25zdCBrT25EcmFpbiA9IFN5bWJvbCgnb25EcmFpbicpXG5jb25zdCBrT25Db25uZWN0ID0gU3ltYm9sKCdvbkNvbm5lY3QnKVxuY29uc3Qga09uRGlzY29ubmVjdCA9IFN5bWJvbCgnb25EaXNjb25uZWN0JylcbmNvbnN0IGtPbkNvbm5lY3Rpb25FcnJvciA9IFN5bWJvbCgnb25Db25uZWN0aW9uRXJyb3InKVxuY29uc3Qga0dldERpc3BhdGNoZXIgPSBTeW1ib2woJ2dldCBkaXNwYXRjaGVyJylcbmNvbnN0IGtBZGRDbGllbnQgPSBTeW1ib2woJ2FkZCBjbGllbnQnKVxuY29uc3Qga1JlbW92ZUNsaWVudCA9IFN5bWJvbCgncmVtb3ZlIGNsaWVudCcpXG5jb25zdCBrU3RhdHMgPSBTeW1ib2woJ3N0YXRzJylcblxuY2xhc3MgUG9vbEJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBuZXcgRml4ZWRRdWV1ZSgpXG4gICAgdGhpc1trQ2xpZW50c10gPSBbXVxuICAgIHRoaXNba1F1ZXVlZF0gPSAwXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSBmdW5jdGlvbiBvbkRyYWluIChvcmlnaW4sIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHF1ZXVlID0gcG9vbFtrUXVldWVdXG5cbiAgICAgIGxldCBuZWVkRHJhaW4gPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIW5lZWREcmFpbikge1xuICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKVxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHBvb2xba1F1ZXVlZF0tLVxuICAgICAgICBuZWVkRHJhaW4gPSAhdGhpcy5kaXNwYXRjaChpdGVtLm9wdHMsIGl0ZW0uaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpc1trTmVlZERyYWluXSA9IG5lZWREcmFpblxuXG4gICAgICBpZiAoIXRoaXNba05lZWREcmFpbl0gJiYgcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBwb29sW2tOZWVkRHJhaW5dID0gZmFsc2VcbiAgICAgICAgcG9vbC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgICAgfVxuXG4gICAgICBpZiAocG9vbFtrQ2xvc2VkUmVzb2x2ZV0gJiYgcXVldWUuaXNFbXB0eSgpKSB7XG4gICAgICAgIFByb21pc2VcbiAgICAgICAgICAuYWxsKHBvb2xba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgICAgICAgLnRoZW4ocG9vbFtrQ2xvc2VkUmVzb2x2ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdHNdID0gbmV3IFBvb2xTdGF0cyh0aGlzKVxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrRnJlZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSAmJiAhY2xpZW50W2tOZWVkRHJhaW5dKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1BlbmRpbmddOiBwZW5kaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBwZW5kaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgeyBba1J1bm5pbmddOiBydW5uaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBydW5uaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1NpemVdOiBzaXplIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBzaXplXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBzdGF0cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1N0YXRzXVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGlmICh0aGlzW2tRdWV1ZV0uaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gcmVzb2x2ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXNba1F1ZXVlXS5zaGlmdCgpXG4gICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGl0ZW0uaGFuZGxlci5vbkVycm9yKGVycilcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5kZXN0cm95KGVycikpKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trUXVldWVdLnB1c2goeyBvcHRzLCBoYW5kbGVyIH0pXG4gICAgICB0aGlzW2tRdWV1ZWRdKytcbiAgICB9IGVsc2UgaWYgKCFkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpKSB7XG4gICAgICBkaXNwYXRjaGVyW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trTmVlZERyYWluXSA9ICF0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBba0FkZENsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudFxuICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgIHRoaXNba0NsaWVudHNdLnB1c2goY2xpZW50KVxuXG4gICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgICAgIHRoaXNba09uRHJhaW5dKGNsaWVudFtrVXJsXSwgW3RoaXMsIGNsaWVudF0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFtrUmVtb3ZlQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50LmNsb3NlKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXNba0NsaWVudHNdLmluZGV4T2YoY2xpZW50KVxuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpc1trTmVlZERyYWluXSA9IHRoaXNba0NsaWVudHNdLnNvbWUoZGlzcGF0Y2hlciA9PiAoXG4gICAgICAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSAmJlxuICAgICAgZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrUmVtb3ZlQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG5cbiAgICB0aGlzLm9uKCdjb25uZWN0aW9uRXJyb3InLCAob3JpZ2luLCB0YXJnZXRzLCBlcnJvcikgPT4ge1xuICAgICAgLy8gSWYgYSBjb25uZWN0aW9uIGVycm9yIG9jY3Vycywgd2UgcmVtb3ZlIHRoZSBjbGllbnQgZnJvbSB0aGUgcG9vbCxcbiAgICAgIC8vIGFuZCBlbWl0IGEgY29ubmVjdGlvbkVycm9yIGV2ZW50LiBUaGV5IHdpbGwgbm90IGJlIHJlLXVzZWQuXG4gICAgICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMzg5NVxuICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAvLyBEbyBub3QgdXNlIGtSZW1vdmVDbGllbnQgaGVyZSwgYXMgaXQgd2lsbCBjbG9zZSB0aGUgY2xpZW50LFxuICAgICAgICAvLyBidXQgdGhlIGNsaWVudCBjYW5ub3QgYmUgY2xvc2VkIGluIHRoaXMgc3RhdGUuXG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXNba0NsaWVudHNdLmluZGV4T2YodGFyZ2V0KVxuICAgICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgW2tHZXREaXNwYXRjaGVyXSAoKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tDbGllbnRzXS5maW5kKGRpc3BhdGNoZXIgPT4gIWRpc3BhdGNoZXJba05lZWREcmFpbl0pXG5cbiAgICBpZiAoZGlzcGF0Y2hlcikge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG5cbiAgICBpZiAoIXRoaXNba0Nvbm5lY3Rpb25zXSB8fCB0aGlzW2tDbGllbnRzXS5sZW5ndGggPCB0aGlzW2tDb25uZWN0aW9uc10pIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSh0aGlzW2tVcmxdLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgIHRoaXNba0FkZENsaWVudF0oZGlzcGF0Y2hlcilcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuLyogaXN0YW5idWwgaWdub3JlIGZpbGU6IG9ubHkgZm9yIE5vZGUgMTIgKi9cblxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY2xhc3MgQ29tcGF0V2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlW2tDb25uZWN0ZWRdID09PSAwICYmIHRoaXMudmFsdWVba1NpemVdID09PSAwXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgQ29tcGF0RmluYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKGZpbmFsaXplcikge1xuICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxpemVyXG4gIH1cblxuICByZWdpc3RlciAoZGlzcGF0Y2hlciwga2V5KSB7XG4gICAgaWYgKGRpc3BhdGNoZXIub24pIHtcbiAgICAgIGRpc3BhdGNoZXIub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgIGlmIChkaXNwYXRjaGVyW2tDb25uZWN0ZWRdID09PSAwICYmIGRpc3BhdGNoZXJba1NpemVdID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5maW5hbGl6ZXIoa2V5KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gRklYTUU6IHJlbW92ZSB3b3JrYXJvdW5kIHdoZW4gdGhlIE5vZGUgYnVnIGlzIGZpeGVkXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfVjhfQ09WRVJBR0UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgV2Vha1JlZjogQ29tcGF0V2Vha1JlZixcbiAgICAgIEZpbmFsaXphdGlvblJlZ2lzdHJ5OiBDb21wYXRGaW5hbGl6ZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBXZWFrUmVmOiBnbG9iYWwuV2Vha1JlZiB8fCBDb21wYXRXZWFrUmVmLFxuICAgIEZpbmFsaXphdGlvblJlZ2lzdHJ5OiBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgfHwgQ29tcGF0RmluYWxpemVyXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtDbGllbnRzLCBrUnVubmluZywga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3InKVxuY29uc3QgeyBXZWFrUmVmLCBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuXG5jb25zdCBrT25Db25uZWN0ID0gU3ltYm9sKCdvbkNvbm5lY3QnKVxuY29uc3Qga09uRGlzY29ubmVjdCA9IFN5bWJvbCgnb25EaXNjb25uZWN0JylcbmNvbnN0IGtPbkNvbm5lY3Rpb25FcnJvciA9IFN5bWJvbCgnb25Db25uZWN0aW9uRXJyb3InKVxuY29uc3Qga01heFJlZGlyZWN0aW9ucyA9IFN5bWJvbCgnbWF4UmVkaXJlY3Rpb25zJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcbmNvbnN0IGtGaW5hbGl6ZXIgPSBTeW1ib2woJ2ZpbmFsaXplcicpXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG9wdHMgJiYgb3B0cy5jb25uZWN0aW9ucyA9PT0gMVxuICAgID8gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG4gICAgOiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIEFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAoeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIG1heFJlZGlyZWN0aW9ucyA9IDAsIGNvbm5lY3QsIC4uLm9wdGlvbnMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IHsgLi4uY29ubmVjdCB9XG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzICYmIG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0IH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuICAgIHRoaXNba0NsaWVudHNdID0gbmV3IE1hcCgpXG4gICAgdGhpc1trRmluYWxpemVyXSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovIGtleSA9PiB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpc1trQ2xpZW50c10uZGVsZXRlKGtleSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgYWdlbnQgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICByZXQgKz0gY2xpZW50W2tSdW5uaW5nXVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGxldCBrZXlcbiAgICBpZiAob3B0cy5vcmlnaW4gJiYgKHR5cGVvZiBvcHRzLm9yaWdpbiA9PT0gJ3N0cmluZycgfHwgb3B0cy5vcmlnaW4gaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgICBrZXkgPSBTdHJpbmcob3B0cy5vcmlnaW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5vcmlnaW4gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgVVJMLicpXG4gICAgfVxuXG4gICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcblxuICAgIGxldCBkaXNwYXRjaGVyID0gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3B0cy5vcmlnaW4sIHRoaXNba09wdGlvbnNdKVxuICAgICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAgIC5vbignY29ubmVjdCcsIHRoaXNba09uQ29ubmVjdF0pXG4gICAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgICB0aGlzW2tDbGllbnRzXS5zZXQoa2V5LCBuZXcgV2Vha1JlZihkaXNwYXRjaGVyKSlcbiAgICAgIHRoaXNba0ZpbmFsaXplcl0ucmVnaXN0ZXIoZGlzcGF0Y2hlciwga2V5KVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgY29uc3QgY2xvc2VQcm9taXNlcyA9IFtdXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIGNsb3NlUHJvbWlzZXMucHVzaChjbGllbnQuY2xvc2UoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChjbG9zZVByb21pc2VzKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgY29uc3QgZGVzdHJveVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgZGVzdHJveVByb21pc2VzLnB1c2goY2xpZW50LmRlc3Ryb3koZXJyKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudFxuIiwgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7XG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrICh7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9KSB7XG4gIGFzc2VydChib2R5KVxuXG4gIGxldCBjaHVua3MgPSBbXVxuICBsZXQgbGltaXQgPSAwXG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgbGltaXQgKz0gY2h1bmsubGVuZ3RoXG4gICAgaWYgKGxpbWl0ID4gMTI4ICogMTAyNCkge1xuICAgICAgY2h1bmtzID0gbnVsbFxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA0IHx8ICFjb250ZW50VHlwZSB8fCAhY2h1bmtzKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UodG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChjaHVua3MpKSlcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aCgndGV4dC8nKSkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSlcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFByb2Nlc3MgaW4gYSBmYWxsYmFjayBpZiBlcnJvclxuICB9XG5cbiAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9XG4iLCAiY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IGtMaXN0ZW5lciA9IFN5bWJvbCgna0xpc3RlbmVyJylcbmNvbnN0IGtTaWduYWwgPSBTeW1ib2woJ2tTaWduYWwnKVxuXG5mdW5jdGlvbiBhYm9ydCAoc2VsZikge1xuICBpZiAoc2VsZi5hYm9ydCkge1xuICAgIHNlbGYuYWJvcnQoKVxuICB9IGVsc2Uge1xuICAgIHNlbGYub25FcnJvcihuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFNpZ25hbCAoc2VsZiwgc2lnbmFsKSB7XG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcblxuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgYWJvcnQoc2VsZilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBzaWduYWxcbiAgc2VsZltrTGlzdGVuZXJdID0gKCkgPT4ge1xuICAgIGFib3J0KHNlbGYpXG4gIH1cblxuICBhZGRBYm9ydExpc3RlbmVyKHNlbGZba1NpZ25hbF0sIHNlbGZba0xpc3RlbmVyXSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2lnbmFsIChzZWxmKSB7XG4gIGlmICghc2VsZltrU2lnbmFsXSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBzZWxmW2tTaWduYWxdKSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfSBlbHNlIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZFNpZ25hbCxcbiAgcmVtb3ZlU2lnbmFsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGZpbmlzaGVkLCBQYXNzVGhyb3VnaCB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBTdHJlYW1IYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZmFjdG9yeScpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9TVFJFQU0nKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuZmFjdG9yeSA9IGZhY3RvcnlcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLnRyYWlsZXJzID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgfHwgZmFsc2VcblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICBib2R5Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IHsgZmFjdG9yeSwgb3BhcXVlLCBjb250ZXh0LCBjYWxsYmFjaywgcmVzcG9uc2VIZWFkZXJzIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBsZXQgcmVzXG5cbiAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlZEhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgICByZXMgPSBuZXcgUGFzc1Rocm91Z2goKVxuXG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICB7IGNhbGxiYWNrLCBib2R5OiByZXMsIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZhY3RvcnkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlcyA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGZhY3RvcnksIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgICFyZXMgfHxcbiAgICAgICAgdHlwZW9mIHJlcy53cml0ZSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgcmVzLmVuZCAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgcmVzLm9uICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKCdleHBlY3RlZCBXcml0YWJsZScpXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IEF2b2lkIGZpbmlzaGVkLiBJdCByZWdpc3RlcnMgYW4gdW5uZWNlc3NhcnkgYW1vdW50IG9mIGxpc3RlbmVycy5cbiAgICAgIGZpbmlzaGVkKHJlcywgeyByZWFkYWJsZTogZmFsc2UgfSwgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCByZXMsIG9wYXF1ZSwgdHJhaWxlcnMsIGFib3J0IH0gPSB0aGlzXG5cbiAgICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAgIGlmIChlcnIgfHwgIXJlcy5yZWFkYWJsZSkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIgfHwgbnVsbCwgeyBvcGFxdWUsIHRyYWlsZXJzIH0pXG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGFib3J0KClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXMub24oJ2RyYWluJywgcmVzdW1lKVxuXG4gICAgdGhpcy5yZXMgPSByZXNcblxuICAgIGNvbnN0IG5lZWREcmFpbiA9IHJlcy53cml0YWJsZU5lZWREcmFpbiAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHJlcy53cml0YWJsZU5lZWREcmFpblxuICAgICAgOiByZXMuX3dyaXRhYmxlU3RhdGUgJiYgcmVzLl93cml0YWJsZVN0YXRlLm5lZWREcmFpblxuXG4gICAgcmV0dXJuIG5lZWREcmFpbiAhPT0gdHJ1ZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZXR1cm4gcmVzID8gcmVzLndyaXRlKGNodW5rKSA6IHRydWVcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudHJhaWxlcnMgPSB1dGlsLnBhcnNlSGVhZGVycyh0cmFpbGVycylcblxuICAgIHJlcy5lbmQoKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBvcGFxdWUsIGJvZHkgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmVhbSAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc3RyZWFtLmNhbGwodGhpcywgb3B0cywgZmFjdG9yeSwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFN0cmVhbUhhbmRsZXIob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJlYW1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBSZWFkYWJsZSxcbiAgRHVwbGV4LFxuICBQYXNzVGhyb3VnaFxufSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCBrUmVzdW1lID0gU3ltYm9sKCdyZXN1bWUnKVxuXG5jbGFzcyBQaXBlbGluZVJlcXVlc3QgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG5cbiAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIGNvbnN0IHsgW2tSZXN1bWVdOiByZXN1bWUgfSA9IHRoaXNcblxuICAgIGlmIChyZXN1bWUpIHtcbiAgICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gICAgICByZXN1bWUoKVxuICAgIH1cbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fcmVhZCgpXG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmVSZXNwb25zZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHJlc3VtZSkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcbiAgICB0aGlzW2tSZXN1bWVdID0gcmVzdW1lXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgdGhpc1trUmVzdW1lXSgpXG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhhbmRsZXInKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9QSVBFTElORScpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG5cbiAgICB0aGlzLnJlcSA9IG5ldyBQaXBlbGluZVJlcXVlc3QoKS5vbignZXJyb3InLCB1dGlsLm5vcClcblxuICAgIHRoaXMucmV0ID0gbmV3IER1cGxleCh7XG4gICAgICByZWFkYWJsZU9iamVjdE1vZGU6IG9wdHMub2JqZWN0TW9kZSxcbiAgICAgIGF1dG9EZXN0cm95OiB0cnVlLFxuICAgICAgcmVhZDogKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoYm9keSAmJiBib2R5LnJlc3VtZSkge1xuICAgICAgICAgIGJvZHkucmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHdyaXRlOiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChyZXEucHVzaChjaHVuaywgZW5jb2RpbmcpIHx8IHJlcS5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxW2tSZXN1bWVdID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IChlcnIsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSwgcmVxLCByZXMsIHJldCwgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIWVyciAmJiAhcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJvcnQgJiYgZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG5cbiAgICAgICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgIH0pLm9uKCdwcmVmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAvLyBOb2RlIDwgMTUgZG9lcyBub3QgY2FsbCBfZmluYWwgaW4gc2FtZSB0aWNrLlxuICAgICAgcmVxLnB1c2gobnVsbClcbiAgICB9KVxuXG4gICAgdGhpcy5yZXMgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcmV0LCByZXMgfSA9IHRoaXNcblxuICAgIGFzc2VydCghcmVzLCAncGlwZWxpbmUgY2Fubm90IGJlIHJldHJpZWQnKVxuXG4gICAgaWYgKHJldC5kZXN0cm95ZWQpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSkge1xuICAgIGNvbnN0IHsgb3BhcXVlLCBoYW5kbGVyLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSBuZXcgUGlwZWxpbmVSZXNwb25zZShyZXN1bWUpXG5cbiAgICBsZXQgYm9keVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgYm9keSA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGhhbmRsZXIsIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBib2R5OiB0aGlzLnJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5Lm9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFJlYWRhYmxlJylcbiAgICB9XG5cbiAgICBib2R5XG4gICAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQsIGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5wdXNoKGNodW5rKSAmJiBib2R5LnBhdXNlKSB7XG4gICAgICAgICAgYm9keS5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICByZXQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUgKG9wdHMsIGhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaXBlbGluZUhhbmRsZXIgPSBuZXcgUGlwZWxpbmVIYW5kbGVyKG9wdHMsIGhhbmRsZXIpXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIGJvZHk6IHBpcGVsaW5lSGFuZGxlci5yZXEgfSwgcGlwZWxpbmVIYW5kbGVyKVxuICAgIHJldHVybiBwaXBlbGluZUhhbmRsZXIucmV0XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBuZXcgUGFzc1Rocm91Z2goKS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBDb25uZWN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgb3BhcXVlLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX0NPTk5FQ1QnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIGNvbm5lY3QnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcblxuICAgIGxldCBoZWFkZXJzID0gcmF3SGVhZGVyc1xuICAgIC8vIEluZGljYXRlcyBpcyBhbiBIVFRQMlNlc3Npb25cbiAgICBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIH1cblxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBzdGF0dXNDb2RlLFxuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbm5lY3QgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbm5lY3QuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29ubmVjdEhhbmRsZXIgPSBuZXcgQ29ubmVjdEhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIG1ldGhvZDogJ0NPTk5FQ1QnIH0sIGNvbm5lY3RIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25uZWN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSByZXF1aXJlKCcuL2FwaS1yZXF1ZXN0Jylcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IHJlcXVpcmUoJy4vYXBpLXN0cmVhbScpXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IHJlcXVpcmUoJy4vYXBpLXBpcGVsaW5lJylcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSByZXF1aXJlKCcuL2FwaS11cGdyYWRlJylcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSByZXF1aXJlKCcuL2FwaS1jb25uZWN0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQWdlbnQ6IFN5bWJvbCgnYWdlbnQnKSxcbiAga09wdGlvbnM6IFN5bWJvbCgnb3B0aW9ucycpLFxuICBrRmFjdG9yeTogU3ltYm9sKCdmYWN0b3J5JyksXG4gIGtEaXNwYXRjaGVzOiBTeW1ib2woJ2Rpc3BhdGNoZXMnKSxcbiAga0Rpc3BhdGNoS2V5OiBTeW1ib2woJ2Rpc3BhdGNoIGtleScpLFxuICBrRGVmYXVsdEhlYWRlcnM6IFN5bWJvbCgnZGVmYXVsdCBoZWFkZXJzJyksXG4gIGtEZWZhdWx0VHJhaWxlcnM6IFN5bWJvbCgnZGVmYXVsdCB0cmFpbGVycycpLFxuICBrQ29udGVudExlbmd0aDogU3ltYm9sKCdjb250ZW50IGxlbmd0aCcpLFxuICBrTW9ja0FnZW50OiBTeW1ib2woJ21vY2sgYWdlbnQnKSxcbiAga01vY2tBZ2VudFNldDogU3ltYm9sKCdtb2NrIGFnZW50IHNldCcpLFxuICBrTW9ja0FnZW50R2V0OiBTeW1ib2woJ21vY2sgYWdlbnQgZ2V0JyksXG4gIGtNb2NrRGlzcGF0Y2g6IFN5bWJvbCgnbW9jayBkaXNwYXRjaCcpLFxuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga09yaWdpbmFsQ2xvc2U6IFN5bWJvbCgnb3JpZ2luYWwgYWdlbnQgY2xvc2UnKSxcbiAga09yaWdpbjogU3ltYm9sKCdvcmlnaW4nKSxcbiAga0lzTW9ja0FjdGl2ZTogU3ltYm9sKCdpcyBtb2NrIGFjdGl2ZScpLFxuICBrTmV0Q29ubmVjdDogU3ltYm9sKCduZXQgY29ubmVjdCcpLFxuICBrR2V0TmV0Q29ubmVjdDogU3ltYm9sKCdnZXQgbmV0IGNvbm5lY3QnKSxcbiAga0Nvbm5lY3RlZDogU3ltYm9sKCdjb25uZWN0ZWQnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1vY2tOb3RNYXRjaGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vbW9jay1lcnJvcnMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtPcmlnaW4sXG4gIGtHZXROZXRDb25uZWN0XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBidWlsZFVSTCwgbm9wIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3Qge1xuICB0eXBlczoge1xuICAgIGlzUHJvbWlzZVxuICB9XG59ID0gcmVxdWlyZSgndXRpbCcpXG5cbmZ1bmN0aW9uIG1hdGNoVmFsdWUgKG1hdGNoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtYXRjaCA9PT0gdmFsdWVcbiAgfVxuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gbWF0Y2gudGVzdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hdGNoKHZhbHVlKSA9PT0gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBsb3dlckNhc2VFbnRyaWVzIChoZWFkZXJzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykubWFwKChbaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2hlYWRlck5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSwgaGVhZGVyVmFsdWVdXG4gICAgfSlcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9pbmRleCcpLkhlYWRlcnN8c3RyaW5nW118UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJCeU5hbWUgKGhlYWRlcnMsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKGhlYWRlcnNbaV0udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0ga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJzLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycylba2V5LnRvTG9jYWxlTG93ZXJDYXNlKCldXG4gIH1cbn1cblxuLyoqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlcnMgKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVyc0Zyb21BcnJheSAoaGVhZGVycykgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICBjb25zdCBjbG9uZSA9IGhlYWRlcnMuc2xpY2UoKVxuICBjb25zdCBlbnRyaWVzID0gW11cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNsb25lLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgIGVudHJpZXMucHVzaChbY2xvbmVbaW5kZXhdLCBjbG9uZVtpbmRleCArIDFdXSlcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpXG59XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVycyAobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKSB7XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICAgICAgaGVhZGVycyA9IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShoZWFkZXJzKVxuICAgIH1cbiAgICByZXR1cm4gbW9ja0Rpc3BhdGNoLmhlYWRlcnMoaGVhZGVycyA/IGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycykgOiB7fSlcbiAgfVxuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHR5cGVvZiBoZWFkZXJzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IFttYXRjaEhlYWRlck5hbWUsIG1hdGNoSGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1vY2tEaXNwYXRjaC5oZWFkZXJzKSkge1xuICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0SGVhZGVyQnlOYW1lKGhlYWRlcnMsIG1hdGNoSGVhZGVyTmFtZSlcblxuICAgIGlmICghbWF0Y2hWYWx1ZShtYXRjaEhlYWRlclZhbHVlLCBoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBzYWZlVXJsIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnPycpXG5cbiAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcXAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGhTZWdtZW50cy5wb3AoKSlcbiAgcXAuc29ydCgpXG4gIHJldHVybiBbLi4ucGF0aFNlZ21lbnRzLCBxcC50b1N0cmluZygpXS5qb2luKCc/Jylcbn1cblxuZnVuY3Rpb24gbWF0Y2hLZXkgKG1vY2tEaXNwYXRjaCwgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMgfSkge1xuICBjb25zdCBwYXRoTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5wYXRoLCBwYXRoKVxuICBjb25zdCBtZXRob2RNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLm1ldGhvZCwgbWV0aG9kKVxuICBjb25zdCBib2R5TWF0Y2ggPSB0eXBlb2YgbW9ja0Rpc3BhdGNoLmJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2guYm9keSwgYm9keSkgOiB0cnVlXG4gIGNvbnN0IGhlYWRlcnNNYXRjaCA9IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpXG4gIHJldHVybiBwYXRoTWF0Y2ggJiYgbWV0aG9kTWF0Y2ggJiYgYm9keU1hdGNoICYmIGhlYWRlcnNNYXRjaFxufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZURhdGEgKGRhdGEpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBiYXNlUGF0aCA9IGtleS5xdWVyeSA/IGJ1aWxkVVJMKGtleS5wYXRoLCBrZXkucXVlcnkpIDoga2V5LnBhdGhcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdHlwZW9mIGJhc2VQYXRoID09PSAnc3RyaW5nJyA/IHNhZmVVcmwoYmFzZVBhdGgpIDogYmFzZVBhdGhcblxuICAvLyBNYXRjaCBwYXRoXG4gIGxldCBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgY29uc3VtZWQgfSkgPT4gIWNvbnN1bWVkKS5maWx0ZXIoKHsgcGF0aCB9KSA9PiBtYXRjaFZhbHVlKHNhZmVVcmwocGF0aCksIHJlc29sdmVkUGF0aCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggbWV0aG9kXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgbWV0aG9kIH0pID0+IG1hdGNoVmFsdWUobWV0aG9kLCBrZXkubWV0aG9kKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgbWV0aG9kICcke2tleS5tZXRob2R9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBib2R5XG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgYm9keSB9KSA9PiB0eXBlb2YgYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKGJvZHksIGtleS5ib2R5KSA6IHRydWUpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGJvZHkgJyR7a2V5LmJvZHl9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBoZWFkZXJzXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKG1vY2tEaXNwYXRjaCkgPT4gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwga2V5LmhlYWRlcnMpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBoZWFkZXJzICcke3R5cGVvZiBrZXkuaGVhZGVycyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShrZXkuaGVhZGVycykgOiBrZXkuaGVhZGVyc30nYClcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkTW9ja0Rpc3BhdGNoZXNbMF1cbn1cblxuZnVuY3Rpb24gYWRkTW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5LCBkYXRhKSB7XG4gIGNvbnN0IGJhc2VEYXRhID0geyB0aW1lc0ludm9rZWQ6IDAsIHRpbWVzOiAxLCBwZXJzaXN0OiBmYWxzZSwgY29uc3VtZWQ6IGZhbHNlIH1cbiAgY29uc3QgcmVwbHlEYXRhID0gdHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicgPyB7IGNhbGxiYWNrOiBkYXRhIH0gOiB7IC4uLmRhdGEgfVxuICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSB7IC4uLmJhc2VEYXRhLCAuLi5rZXksIHBlbmRpbmc6IHRydWUsIGRhdGE6IHsgZXJyb3I6IG51bGwsIC4uLnJlcGx5RGF0YSB9IH1cbiAgbW9ja0Rpc3BhdGNoZXMucHVzaChuZXdNb2NrRGlzcGF0Y2gpXG4gIHJldHVybiBuZXdNb2NrRGlzcGF0Y2hcbn1cblxuZnVuY3Rpb24gZGVsZXRlTW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGluZGV4ID0gbW9ja0Rpc3BhdGNoZXMuZmluZEluZGV4KGRpc3BhdGNoID0+IHtcbiAgICBpZiAoIWRpc3BhdGNoLmNvbnN1bWVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoS2V5KGRpc3BhdGNoLCBrZXkpXG4gIH0pXG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBtb2NrRGlzcGF0Y2hlcy5zcGxpY2UoaW5kZXgsIDEpXG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRLZXkgKG9wdHMpIHtcbiAgY29uc3QgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMsIHF1ZXJ5IH0gPSBvcHRzXG4gIHJldHVybiB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVLZXlWYWx1ZXMgKGRhdGEpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoa2V5VmFsdWVQYWlycywgW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgLi4ua2V5VmFsdWVQYWlycyxcbiAgICBCdWZmZXIuZnJvbShgJHtrZXl9YCksXG4gICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoeCA9PiBCdWZmZXIuZnJvbShgJHt4fWApKSA6IEJ1ZmZlci5mcm9tKGAke3ZhbHVlfWApXG4gIF0sIFtdKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9TdGF0dXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNDb2RlXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXR1c1RleHQgKHN0YXR1c0NvZGUpIHtcbiAgcmV0dXJuIFNUQVRVU19DT0RFU1tzdGF0dXNDb2RlXSB8fCAndW5rbm93bidcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UgKGJvZHkpIHtcbiAgY29uc3QgYnVmZmVycyA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgZGF0YSBvZiBib2R5KSB7XG4gICAgYnVmZmVycy5wdXNoKGRhdGEpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmZmVycykudG9TdHJpbmcoJ3V0ZjgnKVxufVxuXG4vKipcbiAqIE1vY2sgZGlzcGF0Y2ggZnVuY3Rpb24gdXNlZCB0byBzaW11bGF0ZSB1bmRpY2kgZGlzcGF0Y2hlc1xuICovXG5mdW5jdGlvbiBtb2NrRGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgLy8gR2V0IG1vY2sgZGlzcGF0Y2ggZnJvbSBidWlsdCBrZXlcbiAgY29uc3Qga2V5ID0gYnVpbGRLZXkob3B0cylcbiAgY29uc3QgbW9ja0Rpc3BhdGNoID0gZ2V0TW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCBrZXkpXG5cbiAgbW9ja0Rpc3BhdGNoLnRpbWVzSW52b2tlZCsrXG5cbiAgLy8gSGVyZSdzIHdoZXJlIHdlIHJlc29sdmUgYSBjYWxsYmFjayBpZiBhIGNhbGxiYWNrIGlzIHByZXNlbnQgZm9yIHRoZSBkaXNwYXRjaCBkYXRhLlxuICBpZiAobW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2spIHtcbiAgICBtb2NrRGlzcGF0Y2guZGF0YSA9IHsgLi4ubW9ja0Rpc3BhdGNoLmRhdGEsIC4uLm1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKG9wdHMpIH1cbiAgfVxuXG4gIC8vIFBhcnNlIG1vY2tEaXNwYXRjaCBkYXRhXG4gIGNvbnN0IHsgZGF0YTogeyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycywgZXJyb3IgfSwgZGVsYXksIHBlcnNpc3QgfSA9IG1vY2tEaXNwYXRjaFxuICBjb25zdCB7IHRpbWVzSW52b2tlZCwgdGltZXMgfSA9IG1vY2tEaXNwYXRjaFxuXG4gIC8vIElmIGl0J3MgdXNlZCB1cCBhbmQgbm90IHBlcnNpc3RlbnQsIG1hcmsgYXMgY29uc3VtZWRcbiAgbW9ja0Rpc3BhdGNoLmNvbnN1bWVkID0gIXBlcnNpc3QgJiYgdGltZXNJbnZva2VkID49IHRpbWVzXG4gIG1vY2tEaXNwYXRjaC5wZW5kaW5nID0gdGltZXNJbnZva2VkIDwgdGltZXNcblxuICAvLyBJZiBzcGVjaWZpZWQsIHRyaWdnZXIgZGlzcGF0Y2ggZXJyb3JcbiAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCBrZXkpXG4gICAgaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBIYW5kbGUgdGhlIHJlcXVlc3Qgd2l0aCBhIGRlbGF5IGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZVJlcGx5KHRoaXNba0Rpc3BhdGNoZXNdKVxuICAgIH0sIGRlbGF5KVxuICB9IGVsc2Uge1xuICAgIGhhbmRsZVJlcGx5KHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmVwbHkgKG1vY2tEaXNwYXRjaGVzLCBfZGF0YSA9IGRhdGEpIHtcbiAgICAvLyBmZXRjaCdzIEhlYWRlcnNMaXN0IGlzIGEgMUQgc3RyaW5nIGFycmF5XG4gICAgY29uc3Qgb3B0c0hlYWRlcnMgPSBBcnJheS5pc0FycmF5KG9wdHMuaGVhZGVycylcbiAgICAgID8gYnVpbGRIZWFkZXJzRnJvbUFycmF5KG9wdHMuaGVhZGVycylcbiAgICAgIDogb3B0cy5oZWFkZXJzXG4gICAgY29uc3QgYm9keSA9IHR5cGVvZiBfZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBfZGF0YSh7IC4uLm9wdHMsIGhlYWRlcnM6IG9wdHNIZWFkZXJzIH0pXG4gICAgICA6IF9kYXRhXG5cbiAgICAvLyB1dGlsLnR5cGVzLmlzUHJvbWlzZSBpcyBsaWtlbHkgbmVlZGVkIGZvciBqZXN0LlxuICAgIGlmIChpc1Byb21pc2UoYm9keSkpIHtcbiAgICAgIC8vIElmIGhhbmRsZVJlcGx5IGlzIGFzeW5jaHJvbm91cywgdGhyb3dpbmcgYW4gZXJyb3JcbiAgICAgIC8vIGluIHRoZSBjYWxsYmFjayB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSwgcmF0aGVyIHRoYW5cbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdGhyb3cgdGhlIGVycm9yLCB3aGljaCBicmVha3Mgc29tZSB0ZXN0cy5cbiAgICAgIC8vIFJhdGhlciwgd2Ugd2FpdCBmb3IgdGhlIGNhbGxiYWNrIHRvIHJlc29sdmUgaWYgaXQgaXMgYVxuICAgICAgLy8gcHJvbWlzZSwgYW5kIHRoZW4gcmUtcnVuIGhhbmRsZVJlcGx5IHdpdGggdGhlIG5ldyBib2R5LlxuICAgICAgYm9keS50aGVuKChuZXdEYXRhKSA9PiBoYW5kbGVSZXBseShtb2NrRGlzcGF0Y2hlcywgbmV3RGF0YSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoYm9keSlcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBnZW5lcmF0ZUtleVZhbHVlcyhoZWFkZXJzKVxuICAgIGNvbnN0IHJlc3BvbnNlVHJhaWxlcnMgPSBnZW5lcmF0ZUtleVZhbHVlcyh0cmFpbGVycylcblxuICAgIGhhbmRsZXIuYWJvcnQgPSBub3BcbiAgICBoYW5kbGVyLm9uSGVhZGVycyhzdGF0dXNDb2RlLCByZXNwb25zZUhlYWRlcnMsIHJlc3VtZSwgZ2V0U3RhdHVzVGV4dChzdGF0dXNDb2RlKSlcbiAgICBoYW5kbGVyLm9uRGF0YShCdWZmZXIuZnJvbShyZXNwb25zZURhdGEpKVxuICAgIGhhbmRsZXIub25Db21wbGV0ZShyZXNwb25zZVRyYWlsZXJzKVxuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaChtb2NrRGlzcGF0Y2hlcywga2V5KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHt9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrRGlzcGF0Y2ggKCkge1xuICBjb25zdCBhZ2VudCA9IHRoaXNba01vY2tBZ2VudF1cbiAgY29uc3Qgb3JpZ2luID0gdGhpc1trT3JpZ2luXVxuICBjb25zdCBvcmlnaW5hbERpc3BhdGNoID0gdGhpc1trT3JpZ2luYWxEaXNwYXRjaF1cblxuICByZXR1cm4gZnVuY3Rpb24gZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoYWdlbnQuaXNNb2NrQWN0aXZlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2NrRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTW9ja05vdE1hdGNoZWRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG5ldENvbm5lY3QgPSBhZ2VudFtrR2V0TmV0Q29ubmVjdF0oKVxuICAgICAgICAgIGlmIChuZXRDb25uZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgZGlzYWJsZWQpYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoZWNrTmV0Q29ubmVjdChuZXRDb25uZWN0LCBvcmlnaW4pKSB7XG4gICAgICAgICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgb3JpZ2luKWApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTmV0Q29ubmVjdCAobmV0Q29ubmVjdCwgb3JpZ2luKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwob3JpZ2luKVxuICBpZiAobmV0Q29ubmVjdCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXRDb25uZWN0KSAmJiBuZXRDb25uZWN0LnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoVmFsdWUobWF0Y2hlciwgdXJsLmhvc3QpKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja09wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKG9wdHMpIHtcbiAgICBjb25zdCB7IGFnZW50LCAuLi5tb2NrT3B0aW9ucyB9ID0gb3B0c1xuICAgIHJldHVybiBtb2NrT3B0aW9uc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSZXNwb25zZURhdGEsXG4gIGdldE1vY2tEaXNwYXRjaCxcbiAgYWRkTW9ja0Rpc3BhdGNoLFxuICBkZWxldGVNb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkS2V5LFxuICBnZW5lcmF0ZUtleVZhbHVlcyxcbiAgbWF0Y2hWYWx1ZSxcbiAgZ2V0UmVzcG9uc2UsXG4gIGdldFN0YXR1c1RleHQsXG4gIG1vY2tEaXNwYXRjaCxcbiAgYnVpbGRNb2NrRGlzcGF0Y2gsXG4gIGNoZWNrTmV0Q29ubmVjdCxcbiAgYnVpbGRNb2NrT3B0aW9ucyxcbiAgZ2V0SGVhZGVyQnlOYW1lXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4uL2NsaWVudCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tDbGllbnQgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgQ2xpZW50IHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tDbGllbnQgZXh0ZW5kcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQ2xpZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuLi9wb29sJylcbmNvbnN0IHsgYnVpbGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrQ2xvc2UsXG4gIGtPcmlnaW5hbENsb3NlLFxuICBrT3JpZ2luLFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga0Nvbm5lY3RlZFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgTW9ja0ludGVyY2VwdG9yIH0gPSByZXF1aXJlKCcuL21vY2staW50ZXJjZXB0b3InKVxuY29uc3QgU3ltYm9scyA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbi8qKlxuICogTW9ja1Bvb2wgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgUG9vbCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrUG9vbCBleHRlbmRzIFBvb2wge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgQ29uc29sZSB9ID0gcmVxdWlyZSgnY29uc29sZScpXG5cbi8qKlxuICogR2V0cyB0aGUgb3V0cHV0IG9mIGBjb25zb2xlLnRhYmxlKFx1MjAyNilgIGFzIGEgc3RyaW5nLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBkaXNhYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0gKGNodW5rLCBfZW5jLCBjYikge1xuICAgICAgICBjYihudWxsLCBjaHVuaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgQ29uc29sZSh7XG4gICAgICBzdGRvdXQ6IHRoaXMudHJhbnNmb3JtLFxuICAgICAgaW5zcGVjdE9wdGlvbnM6IHtcbiAgICAgICAgY29sb3JzOiAhZGlzYWJsZUNvbG9ycyAmJiAhcHJvY2Vzcy5lbnYuQ0lcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9ybWF0IChwZW5kaW5nSW50ZXJjZXB0b3JzKSB7XG4gICAgY29uc3Qgd2l0aFByZXR0eUhlYWRlcnMgPSBwZW5kaW5nSW50ZXJjZXB0b3JzLm1hcChcbiAgICAgICh7IG1ldGhvZCwgcGF0aCwgZGF0YTogeyBzdGF0dXNDb2RlIH0sIHBlcnNpc3QsIHRpbWVzLCB0aW1lc0ludm9rZWQsIG9yaWdpbiB9KSA9PiAoe1xuICAgICAgICBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgIFBhdGg6IHBhdGgsXG4gICAgICAgICdTdGF0dXMgY29kZSc6IHN0YXR1c0NvZGUsXG4gICAgICAgIFBlcnNpc3RlbnQ6IHBlcnNpc3QgPyAnXHUyNzA1JyA6ICdcdTI3NEMnLFxuICAgICAgICBJbnZvY2F0aW9uczogdGltZXNJbnZva2VkLFxuICAgICAgICBSZW1haW5pbmc6IHBlcnNpc3QgPyBJbmZpbml0eSA6IHRpbWVzIC0gdGltZXNJbnZva2VkXG4gICAgICB9KSlcblxuICAgIHRoaXMubG9nZ2VyLnRhYmxlKHdpdGhQcmV0dHlIZWFkZXJzKVxuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5yZWFkKCkudG9TdHJpbmcoKVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NsaWVudHMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4uL2FnZW50JylcbmNvbnN0IHtcbiAga0FnZW50LFxuICBrTW9ja0FnZW50U2V0LFxuICBrTW9ja0FnZW50R2V0LFxuICBrRGlzcGF0Y2hlcyxcbiAga0lzTW9ja0FjdGl2ZSxcbiAga05ldENvbm5lY3QsXG4gIGtHZXROZXRDb25uZWN0LFxuICBrT3B0aW9ucyxcbiAga0ZhY3Rvcnlcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbW9jay1wb29sJylcbmNvbnN0IHsgbWF0Y2hWYWx1ZSwgYnVpbGRNb2NrT3B0aW9ucyB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFVuZGljaUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlcicpXG5jb25zdCBQbHVyYWxpemVyID0gcmVxdWlyZSgnLi9wbHVyYWxpemVyJylcbmNvbnN0IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSByZXF1aXJlKCcuL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlcicpXG5cbmNsYXNzIEZha2VXZWFrUmVmIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBkZXJlZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgfVxufVxuXG5jbGFzcyBNb2NrQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSB0cnVlXG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcblxuICAgIC8vIEluc3RhbnRpYXRlIEFnZW50IGFuZCBlbmNhcHN1bGF0ZVxuICAgIGlmICgob3B0cyAmJiBvcHRzLmFnZW50ICYmIHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG4gICAgY29uc3QgYWdlbnQgPSBvcHRzICYmIG9wdHMuYWdlbnQgPyBvcHRzLmFnZW50IDogbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gYWdlbnRcblxuICAgIHRoaXNba0NsaWVudHNdID0gYWdlbnRba0NsaWVudHNdXG4gICAgdGhpc1trT3B0aW9uc10gPSBidWlsZE1vY2tPcHRpb25zKG9wdHMpXG4gIH1cblxuICBnZXQgKG9yaWdpbikge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trTW9ja0FnZW50R2V0XShvcmlnaW4pXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gQ2FsbCBNb2NrQWdlbnQuZ2V0IHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzZXR1cCBiZWZvcmUgZGlzcGF0Y2hpbmcgYXMgbm9ybWFsXG4gICAgdGhpcy5nZXQob3B0cy5vcmlnaW4pXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgY2xvc2UgKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgdGhpc1trQ2xpZW50c10uY2xlYXIoKVxuICB9XG5cbiAgZGVhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IGZhbHNlXG4gIH1cblxuICBhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcbiAgfVxuXG4gIGVuYWJsZU5ldENvbm5lY3QgKG1hdGNoZXIpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtYXRjaGVyID09PSAnZnVuY3Rpb24nIHx8IG1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXNba05ldENvbm5lY3RdKSkge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XS5wdXNoKG1hdGNoZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IFttYXRjaGVyXVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdVbnN1cHBvcnRlZCBtYXRjaGVyLiBNdXN0IGJlIG9uZSBvZiBTdHJpbmd8RnVuY3Rpb258UmVnRXhwLicpXG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZU5ldENvbm5lY3QgKCkge1xuICAgIHRoaXNba05ldENvbm5lY3RdID0gZmFsc2VcbiAgfVxuXG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gYnlwYXNzIGlzc3VlcyBjYXVzZWQgYnkgdXNpbmcgZ2xvYmFsIHN5bWJvbHMgLSBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNDQ3XG4gIGdldCBpc01vY2tBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzW2tJc01vY2tBY3RpdmVdXG4gIH1cblxuICBba01vY2tBZ2VudFNldF0gKG9yaWdpbiwgZGlzcGF0Y2hlcikge1xuICAgIHRoaXNba0NsaWVudHNdLnNldChvcmlnaW4sIG5ldyBGYWtlV2Vha1JlZihkaXNwYXRjaGVyKSlcbiAgfVxuXG4gIFtrRmFjdG9yeV0gKG9yaWdpbikge1xuICAgIGNvbnN0IG1vY2tPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGFnZW50OiB0aGlzIH0sIHRoaXNba09wdGlvbnNdKVxuICAgIHJldHVybiB0aGlzW2tPcHRpb25zXSAmJiB0aGlzW2tPcHRpb25zXS5jb25uZWN0aW9ucyA9PT0gMVxuICAgICAgPyBuZXcgTW9ja0NsaWVudChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICAgICAgOiBuZXcgTW9ja1Bvb2wob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgfVxuXG4gIFtrTW9ja0FnZW50R2V0XSAob3JpZ2luKSB7XG4gICAgLy8gRmlyc3QgY2hlY2sgaWYgd2UgY2FuIGltbWVkaWF0ZWx5IGZpbmQgaXRcbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQob3JpZ2luKVxuICAgIGlmIChyZWYpIHtcbiAgICAgIHJldHVybiByZWYuZGVyZWYoKVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBvcmlnaW4gaXMgbm90IGEgc3RyaW5nIGNyZWF0ZSBhIGR1bW15IHBhcmVudCBwb29sIGFuZCByZXR1cm4gdG8gdXNlclxuICAgIGlmICh0eXBlb2Ygb3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKCdodHRwOi8vbG9jYWxob3N0Ojk5OTknKVxuICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIC8vIElmIHdlIG1hdGNoLCBjcmVhdGUgYSBwb29sIGFuZCBhc3NpZ24gdGhlIHNhbWUgZGlzcGF0Y2hlc1xuICAgIGZvciAoY29uc3QgW2tleU1hdGNoZXIsIG5vbkV4cGxpY2l0UmVmXSBvZiBBcnJheS5mcm9tKHRoaXNba0NsaWVudHNdKSkge1xuICAgICAgY29uc3Qgbm9uRXhwbGljaXREaXNwYXRjaGVyID0gbm9uRXhwbGljaXRSZWYuZGVyZWYoKVxuICAgICAgaWYgKG5vbkV4cGxpY2l0RGlzcGF0Y2hlciAmJiB0eXBlb2Yga2V5TWF0Y2hlciAhPT0gJ3N0cmluZycgJiYgbWF0Y2hWYWx1ZShrZXlNYXRjaGVyLCBvcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgICBkaXNwYXRjaGVyW2tEaXNwYXRjaGVzXSA9IG5vbkV4cGxpY2l0RGlzcGF0Y2hlcltrRGlzcGF0Y2hlc11cbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBba0dldE5ldENvbm5lY3RdICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmV0Q29ubmVjdF1cbiAgfVxuXG4gIHBlbmRpbmdJbnRlcmNlcHRvcnMgKCkge1xuICAgIGNvbnN0IG1vY2tBZ2VudENsaWVudHMgPSB0aGlzW2tDbGllbnRzXVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obW9ja0FnZW50Q2xpZW50cy5lbnRyaWVzKCkpXG4gICAgICAuZmxhdE1hcCgoW29yaWdpbiwgc2NvcGVdKSA9PiBzY29wZS5kZXJlZigpW2tEaXNwYXRjaGVzXS5tYXAoZGlzcGF0Y2ggPT4gKHsgLi4uZGlzcGF0Y2gsIG9yaWdpbiB9KSkpXG4gICAgICAuZmlsdGVyKCh7IHBlbmRpbmcgfSkgPT4gcGVuZGluZylcbiAgfVxuXG4gIGFzc2VydE5vUGVuZGluZ0ludGVyY2VwdG9ycyAoeyBwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyID0gbmV3IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIoKSB9ID0ge30pIHtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nSW50ZXJjZXB0b3JzKClcblxuICAgIGlmIChwZW5kaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGx1cmFsaXplciA9IG5ldyBQbHVyYWxpemVyKCdpbnRlcmNlcHRvcicsICdpbnRlcmNlcHRvcnMnKS5wbHVyYWxpemUocGVuZGluZy5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgVW5kaWNpRXJyb3IoYFxuJHtwbHVyYWxpemVyLmNvdW50fSAke3BsdXJhbGl6ZXIubm91bn0gJHtwbHVyYWxpemVyLmlzfSBwZW5kaW5nOlxuXG4ke3BlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIuZm9ybWF0KHBlbmRpbmcpfVxuYC50cmltKCkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQWdlbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLCAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgeyBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBSZXF1ZXN0UmV0cnlFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBpc0Rpc3R1cmJlZCwgcGFyc2VIZWFkZXJzLCBwYXJzZVJhbmdlSGVhZGVyIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyIChyZXRyeUFmdGVyKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGRpZmYgPSBuZXcgRGF0ZShyZXRyeUFmdGVyKS5nZXRUaW1lKCkgLSBjdXJyZW50XG5cbiAgcmV0dXJuIGRpZmZcbn1cblxuY2xhc3MgUmV0cnlIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXJzKSB7XG4gICAgY29uc3QgeyByZXRyeU9wdGlvbnMsIC4uLmRpc3BhdGNoT3B0cyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIFJldHJ5IHNjb3BlZFxuICAgICAgcmV0cnk6IHJldHJ5Rm4sXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIG1pblRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgLy8gUmVzcG9uc2Ugc2NvcGVkXG4gICAgICBtZXRob2RzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICBzdGF0dXNDb2Rlc1xuICAgIH0gPSByZXRyeU9wdGlvbnMgPz8ge31cblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBoYW5kbGVycy5kaXNwYXRjaFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzLmhhbmRsZXJcbiAgICB0aGlzLm9wdHMgPSBkaXNwYXRjaE9wdHNcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXRyeU9wdHMgPSB7XG4gICAgICByZXRyeTogcmV0cnlGbiA/PyBSZXRyeUhhbmRsZXJba1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeV0sXG4gICAgICByZXRyeUFmdGVyOiByZXRyeUFmdGVyID8/IHRydWUsXG4gICAgICBtYXhUaW1lb3V0OiBtYXhUaW1lb3V0ID8/IDMwICogMTAwMCwgLy8gMzBzLFxuICAgICAgdGltZW91dDogbWluVGltZW91dCA/PyA1MDAsIC8vIC41c1xuICAgICAgdGltZW91dEZhY3RvcjogdGltZW91dEZhY3RvciA/PyAyLFxuICAgICAgbWF4UmV0cmllczogbWF4UmV0cmllcyA/PyA1LFxuICAgICAgLy8gV2hhdCBlcnJvcnMgd2Ugc2hvdWxkIHJldHJ5XG4gICAgICBtZXRob2RzOiBtZXRob2RzID8/IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQVVQnLCAnREVMRVRFJywgJ1RSQUNFJ10sXG4gICAgICAvLyBJbmRpY2F0ZXMgd2hpY2ggZXJyb3JzIHRvIHJldHJ5XG4gICAgICBzdGF0dXNDb2Rlczogc3RhdHVzQ29kZXMgPz8gWzUwMCwgNTAyLCA1MDMsIDUwNCwgNDI5XSxcbiAgICAgIC8vIExpc3Qgb2YgZXJyb3JzIHRvIHJldHJ5XG4gICAgICBlcnJvckNvZGVzOiBlcnJvckNvZGVzID8/IFtcbiAgICAgICAgJ0VDT05OUkVTRVQnLFxuICAgICAgICAnRUNPTk5SRUZVU0VEJyxcbiAgICAgICAgJ0VOT1RGT1VORCcsXG4gICAgICAgICdFTkVURE9XTicsXG4gICAgICAgICdFTkVUVU5SRUFDSCcsXG4gICAgICAgICdFSE9TVERPV04nLFxuICAgICAgICAnRUhPU1RVTlJFQUNIJyxcbiAgICAgICAgJ0VQSVBFJ1xuICAgICAgXVxuICAgIH1cblxuICAgIHRoaXMucmV0cnlDb3VudCA9IDBcbiAgICB0aGlzLnN0YXJ0ID0gMFxuICAgIHRoaXMuZW5kID0gbnVsbFxuICAgIHRoaXMuZXRhZyA9IG51bGxcbiAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgIC8vIEhhbmRsZSBwb3NzaWJsZSBvbkNvbm5lY3QgZHVwbGljYXRpb25cbiAgICB0aGlzLmhhbmRsZXIub25Db25uZWN0KHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG4gICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICB0aGlzLmFib3J0KHJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25SZXF1ZXN0U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQoKVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vblVwZ3JhZGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudChjaHVuaylcbiAgfVxuXG4gIHN0YXRpYyBba1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeV0gKGVyciwgeyBzdGF0ZSwgb3B0cyB9LCBjYikge1xuICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgY29kZSwgaGVhZGVycyB9ID0gZXJyXG4gICAgY29uc3QgeyBtZXRob2QsIHJldHJ5T3B0aW9ucyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICB0aW1lb3V0LFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICBzdGF0dXNDb2RlcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICBtZXRob2RzXG4gICAgfSA9IHJldHJ5T3B0aW9uc1xuICAgIGxldCB7IGNvdW50ZXIsIGN1cnJlbnRUaW1lb3V0IH0gPSBzdGF0ZVxuXG4gICAgY3VycmVudFRpbWVvdXQgPVxuICAgICAgY3VycmVudFRpbWVvdXQgIT0gbnVsbCAmJiBjdXJyZW50VGltZW91dCA+IDAgPyBjdXJyZW50VGltZW91dCA6IHRpbWVvdXRcblxuICAgIC8vIEFueSBjb2RlIHRoYXQgaXMgbm90IGEgVW5kaWNpJ3Mgb3JpZ2luYXRlZCBhbmQgYWxsb3dlZCB0byByZXRyeVxuICAgIGlmIChcbiAgICAgIGNvZGUgJiZcbiAgICAgIGNvZGUgIT09ICdVTkRfRVJSX1JFUV9SRVRSWScgJiZcbiAgICAgIGNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCcgJiZcbiAgICAgICFlcnJvckNvZGVzLmluY2x1ZGVzKGNvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBtZXRob2QgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBtZXRob2QgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0aG9kcykgJiYgIW1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2Ygc3RhdHVzIGNvZGUgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBzdGF0dXMgY29kZSBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoXG4gICAgICBzdGF0dXNDb2RlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdHVzQ29kZXMpICYmXG4gICAgICAhc3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgcmV0cmllc1xuICAgIGlmIChjb3VudGVyID4gbWF4UmV0cmllcykge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICE9IG51bGwgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXVxuICAgIGlmIChyZXRyeUFmdGVySGVhZGVyKSB7XG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gTnVtYmVyKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gaXNOYU4ocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgPyBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgIDogcmV0cnlBZnRlckhlYWRlciAqIDFlMyAvLyBSZXRyeS1BZnRlciBpcyBpbiBzZWNvbmRzXG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlUaW1lb3V0ID1cbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPiAwXG4gICAgICAgID8gTWF0aC5taW4ocmV0cnlBZnRlckhlYWRlciwgbWF4VGltZW91dClcbiAgICAgICAgOiBNYXRoLm1pbihjdXJyZW50VGltZW91dCAqIHRpbWVvdXRGYWN0b3IgKiogY291bnRlciwgbWF4VGltZW91dClcblxuICAgIHN0YXRlLmN1cnJlbnRUaW1lb3V0ID0gcmV0cnlUaW1lb3V0XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGNiKG51bGwpLCByZXRyeVRpbWVvdXQpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignUmVxdWVzdCBmYWlsZWQnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBDaGVja3BvaW50IGZvciByZXN1bWUgZnJvbSB3aGVyZSB3ZSBsZWZ0IGl0XG4gICAgaWYgKHRoaXMucmVzdW1lICE9IG51bGwpIHtcbiAgICAgIHRoaXMucmVzdW1lID0gbnVsbFxuXG4gICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjA2KSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRSYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuICAgICAgLy8gSWYgbm8gY29udGVudCByYW5nZVxuICAgICAgaWYgKCFjb250ZW50UmFuZ2UpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0NvbnRlbnQtUmFuZ2UgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggYSB3ZWFrIGV0YWcgY2hlY2tcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcgIT09IGhlYWRlcnMuZXRhZykge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignRVRhZyBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSB9ID0gY29udGVudFJhbmdlXG5cbiAgICAgIGFzc2VydCh0aGlzLnN0YXJ0ID09PSBzdGFydCwgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnKVxuICAgICAgYXNzZXJ0KHRoaXMuZW5kID09IG51bGwgfHwgdGhpcy5lbmQgPT09IGVuZCwgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnKVxuXG4gICAgICB0aGlzLnJlc3VtZSA9IHJlc3VtZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNikge1xuICAgICAgICAvLyBGaXJzdCB0aW1lIHdlIHJlY2VpdmUgMjA2XG4gICAgICAgIGNvbnN0IHJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG5cbiAgICAgICAgaWYgKHJhbmdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICAgICAgcmVzdW1lLFxuICAgICAgICAgICAgc3RhdHVzTWVzc2FnZVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IHJhbmdlXG5cbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHN0YXJ0ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXJ0KSAmJiB0aGlzLnN0YXJ0ICE9PSBzdGFydCxcbiAgICAgICAgICAnY29udGVudC1yYW5nZSBtaXNtYXRjaCdcbiAgICAgICAgKVxuICAgICAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHN0YXJ0KSlcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGVuZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShlbmQpICYmIHRoaXMuZW5kICE9PSBlbmQsXG4gICAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnRcbiAgICAgICAgdGhpcy5lbmQgPSBlbmRcbiAgICAgIH1cblxuICAgICAgLy8gV2UgbWFrZSBvdXIgYmVzdCB0byBjaGVja3BvaW50IHRoZSBib2R5IGZvciBmdXJ0aGVyIHJhbmdlIGhlYWRlcnNcbiAgICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG4gICAgICAgIHRoaXMuZW5kID0gY29udGVudExlbmd0aCAhPSBudWxsID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpIDogbnVsbFxuICAgICAgfVxuXG4gICAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHRoaXMuc3RhcnQpKVxuICAgICAgYXNzZXJ0KFxuICAgICAgICB0aGlzLmVuZCA9PSBudWxsIHx8IE51bWJlci5pc0Zpbml0ZSh0aGlzLmVuZCksXG4gICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgKVxuXG4gICAgICB0aGlzLnJlc3VtZSA9IHJlc3VtZVxuICAgICAgdGhpcy5ldGFnID0gaGVhZGVycy5ldGFnICE9IG51bGwgPyBoZWFkZXJzLmV0YWcgOiBudWxsXG5cbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICByZXN1bWUsXG4gICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICB9KVxuXG4gICAgdGhpcy5hYm9ydChlcnIpXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICB0aGlzLnN0YXJ0ICs9IGNodW5rLmxlbmd0aFxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlIChyYXdUcmFpbGVycykge1xuICAgIHRoaXMucmV0cnlDb3VudCA9IDBcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUocmF3VHJhaWxlcnMpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5T3B0cy5yZXRyeShcbiAgICAgIGVycixcbiAgICAgIHtcbiAgICAgICAgc3RhdGU6IHsgY291bnRlcjogdGhpcy5yZXRyeUNvdW50KyssIGN1cnJlbnRUaW1lb3V0OiB0aGlzLnJldHJ5QWZ0ZXIgfSxcbiAgICAgICAgb3B0czogeyByZXRyeU9wdGlvbnM6IHRoaXMucmV0cnlPcHRzLCAuLi50aGlzLm9wdHMgfVxuICAgICAgfSxcbiAgICAgIG9uUmV0cnkuYmluZCh0aGlzKVxuICAgIClcblxuICAgIGZ1bmN0aW9uIG9uUmV0cnkgKGVycikge1xuICAgICAgaWYgKGVyciAhPSBudWxsIHx8IHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgIT09IDApIHtcbiAgICAgICAgdGhpcy5vcHRzID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMuaGVhZGVycyxcbiAgICAgICAgICAgIHJhbmdlOiBgYnl0ZXM9JHt0aGlzLnN0YXJ0fS0ke3RoaXMuZW5kID8/ICcnfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCh0aGlzLm9wdHMsIHRoaXMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJldHJ5SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBXZSBpbmNsdWRlIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBEaXNwYXRjaGVyIEFQSS4gSW4gY2FzZSBvZiBicmVha2luZyBjaGFuZ2VzLFxuLy8gdGhpcyB2ZXJzaW9uIG51bWJlciBtdXN0IGJlIGluY3JlYXNlZCB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxEaXNwYXRjaGVyID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbERpc3BhdGNoZXIuMScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5cbmlmIChnZXRHbG9iYWxEaXNwYXRjaGVyKCkgPT09IHVuZGVmaW5lZCkge1xuICBzZXRHbG9iYWxEaXNwYXRjaGVyKG5ldyBBZ2VudCgpKVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxEaXNwYXRjaGVyIChhZ2VudCkge1xuICBpZiAoIWFnZW50IHx8IHR5cGVvZiBhZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxEaXNwYXRjaGVyLCB7XG4gICAgdmFsdWU6IGFnZW50LFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRGlzcGF0Y2hlciAoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzW2dsb2JhbERpc3BhdGNoZXJdXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRHbG9iYWxEaXNwYXRjaGVyLFxuICBnZXRHbG9iYWxEaXNwYXRjaGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBrR3VhcmQgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIG1ha2VJdGVyYXRvcixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3Qga0hlYWRlcnNNYXAgPSBTeW1ib2woJ2hlYWRlcnMgbWFwJylcbmNvbnN0IGtIZWFkZXJzU29ydGVkTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCBzb3J0ZWQnKVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSAoY29kZSkge1xuICByZXR1cm4gY29kZSA9PT0gMHgwMGEgfHwgY29kZSA9PT0gMHgwMGQgfHwgY29kZSA9PT0gMHgwMDkgfHwgY29kZSA9PT0gMHgwMjBcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci12YWx1ZS1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gIFRvIG5vcm1hbGl6ZSBhIGJ5dGUgc2VxdWVuY2UgcG90ZW50aWFsVmFsdWUsIHJlbW92ZVxuICAvLyAgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBieXRlcyBmcm9tXG4gIC8vICBwb3RlbnRpYWxWYWx1ZS5cbiAgbGV0IGkgPSAwOyBsZXQgaiA9IHBvdGVudGlhbFZhbHVlLmxlbmd0aFxuXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChqIC0gMSkpKSAtLWpcbiAgd2hpbGUgKGogPiBpICYmIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZShwb3RlbnRpYWxWYWx1ZS5jaGFyQ29kZUF0KGkpKSkgKytpXG5cbiAgcmV0dXJuIGkgPT09IDAgJiYgaiA9PT0gcG90ZW50aWFsVmFsdWUubGVuZ3RoID8gcG90ZW50aWFsVmFsdWUgOiBwb3RlbnRpYWxWYWx1ZS5zdWJzdHJpbmcoaSwgailcbn1cblxuZnVuY3Rpb24gZmlsbCAoaGVhZGVycywgb2JqZWN0KSB7XG4gIC8vIFRvIGZpbGwgYSBIZWFkZXJzIG9iamVjdCBoZWFkZXJzIHdpdGggYSBnaXZlbiBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgc2VxdWVuY2UsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIG9iamVjdDpcbiAgLy8gTm90ZTogd2ViaWRsIGNvbnZlcnNpb24gdG8gYXJyYXkgaGFzIGFscmVhZHkgYmVlbiBkb25lLlxuICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IG9iamVjdFtpXVxuICAgICAgLy8gMS4gSWYgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICAgICAgbWVzc2FnZTogYGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQgJHtoZWFkZXIubGVuZ3RofS5gXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFwcGVuZCAoaGVhZGVyXHUyMDE5cyBmaXJzdCBpdGVtLCBoZWFkZXJcdTIwMTlzIHNlY29uZCBpdGVtKSB0byBoZWFkZXJzLlxuICAgICAgYXBwZW5kSGVhZGVyKGhlYWRlcnMsIGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICAvLyBOb3RlOiBudWxsIHNob3VsZCB0aHJvd1xuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBvYmplY3QgaXMgYSByZWNvcmQsIHRoZW4gZm9yIGVhY2gga2V5IFx1MjE5MiB2YWx1ZSBpbiBvYmplY3QsXG4gICAgLy8gICAgYXBwZW5kIChrZXksIHZhbHVlKSB0byBoZWFkZXJzXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBrZXlzW2ldLCBvYmplY3Rba2V5c1tpXV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXJzLWFwcGVuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRIZWFkZXIgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIC8vIDEuIE5vcm1hbGl6ZSB2YWx1ZS5cbiAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gIC8vICAgIGhlYWRlciB2YWx1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMuYXBwZW5kJyxcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgIH0pXG4gIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIDQuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gIGlmIChoZWFkZXJzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgfSBlbHNlIGlmIChoZWFkZXJzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiOlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG5cbiAgLy8gNy4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKG5hbWUsIHZhbHVlKVxuXG4gIC8vIDguIElmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSBoZWFkZXJzXG59XG5cbmNsYXNzIEhlYWRlcnNMaXN0IHtcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBzdHJpbmddW118bnVsbH0gKi9cbiAgY29va2llcyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoaW5pdCkge1xuICAgIGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0W2tIZWFkZXJzTWFwXSlcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gaW5pdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHRoaXMuY29va2llcyA9IGluaXQuY29va2llcyA9PT0gbnVsbCA/IG51bGwgOiBbLi4uaW5pdC5jb29raWVzXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdClcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbGlzdC1jb250YWluc1xuICBjb250YWlucyAobmFtZSkge1xuICAgIC8vIEEgaGVhZGVyIGxpc3QgbGlzdCBjb250YWlucyBhIGhlYWRlciBuYW1lIG5hbWUgaWYgbGlzdFxuICAgIC8vIGNvbnRhaW5zIGEgaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyBtYXRjaCBmb3IgbmFtZS5cbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uaGFzKG5hbWUpXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpc1trSGVhZGVyc01hcF0uY2xlYXIoKVxuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IG5hbWUgdG8gdGhlIGZpcnN0IHN1Y2hcbiAgICAvLyAgICBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChsb3dlcmNhc2VOYW1lKVxuXG4gICAgLy8gMi4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSBsb3dlcmNhc2VOYW1lID09PSAnY29va2llJyA/ICc7ICcgOiAnLCAnXG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwge1xuICAgICAgICBuYW1lOiBleGlzdHMubmFtZSxcbiAgICAgICAgdmFsdWU6IGAke2V4aXN0cy52YWx1ZX0ke2RlbGltaXRlcn0ke3ZhbHVlfWBcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gICAgfVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID8/PSBbXVxuICAgICAgdGhpcy5jb29raWVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBbdmFsdWVdXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCB0aGUgdmFsdWUgb2ZcbiAgICAvLyAgICB0aGUgZmlyc3Qgc3VjaCBoZWFkZXIgdG8gdmFsdWUgYW5kIHJlbW92ZSB0aGVcbiAgICAvLyAgICBvdGhlcnMuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBhcHBlbmQgaGVhZGVyIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gbnVsbFxuICAgIH1cblxuICAgIHRoaXNba0hlYWRlcnNNYXBdLmRlbGV0ZShuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc01hcF0uZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSlcblxuICAgIC8vIDEuIElmIGxpc3QgZG9lcyBub3QgY29udGFpbiBuYW1lLCB0aGVuIHJldHVybiBudWxsLlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIGxpc3Qgd2hvc2UgbmFtZVxuICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLFxuICAgIC8vICAgIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgMHgyQyAweDIwLCBpbiBvcmRlci5cbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZS52YWx1ZVxuICB9XG5cbiAgKiBbU3ltYm9sLml0ZXJhdG9yXSAoKSB7XG4gICAgLy8gdXNlIHRoZSBsb3dlcmNhc2VkIG5hbWVcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB7IHZhbHVlIH1dIG9mIHRoaXNba0hlYWRlcnNNYXBdKSB7XG4gICAgICB5aWVsZCBbbmFtZSwgdmFsdWVdXG4gICAgfVxuICB9XG5cbiAgZ2V0IGVudHJpZXMgKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKHRoaXNba0hlYWRlcnNNYXBdLnNpemUpIHtcbiAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXNba0hlYWRlcnNNYXBdLnZhbHVlcygpKSB7XG4gICAgICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlcnMtY2xhc3NcbmNsYXNzIEhlYWRlcnMge1xuICBjb25zdHJ1Y3RvciAoaW5pdCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChpbml0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpc1trSGVhZGVyc0xpc3RdID0gbmV3IEhlYWRlcnNMaXN0KClcblxuICAgIC8vIFRoZSBuZXcgSGVhZGVycyhpbml0KSBjb25zdHJ1Y3RvciBzdGVwcyBhcmU6XG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgZ3VhcmQgdG8gXCJub25lXCIuXG4gICAgdGhpc1trR3VhcmRdID0gJ25vbmUnXG5cbiAgICAvLyAyLiBJZiBpbml0IGlzIGdpdmVuLCB0aGVuIGZpbGwgdGhpcyB3aXRoIGluaXQuXG4gICAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KGluaXQpXG4gICAgICBmaWxsKHRoaXMsIGluaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLmFwcGVuZCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgcmV0dXJuIGFwcGVuZEhlYWRlcih0aGlzLCBuYW1lLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1kZWxldGVcbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmRlbGV0ZScgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5kZWxldGUnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgbmFtZVxuICAgIC8vICAgIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlciBuYW1lLCBhbmRcbiAgICAvLyAgICBuYW1lIGlzIG5vdCBhIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpc1xuICAgIC8vICAgIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBuYW1lLCB0aGVuXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIGlmICghdGhpc1trSGVhZGVyc0xpc3RdLmNvbnRhaW5zKG5hbWUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyA3LiBEZWxldGUgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIC8vIDguIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoaXMuXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdLmRlbGV0ZShuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmdldCcsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGhlYWRlclxuICAgIC8vICAgIGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5nZXQobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1oYXNcbiAgaGFzIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5oYXMnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBuYW1lO1xuICAgIC8vICAgIG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdLmNvbnRhaW5zKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0hlYWRlcnMuc2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUpXG5cbiAgICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gICAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAgIC8vIDIuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUgb3IgdmFsdWUgaXMgbm90IGFcbiAgICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLnNldCcsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciB2YWx1ZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIgYW5kXG4gICAgLy8gICAgbmFtZS92YWx1ZSBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9IGVsc2UgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyA3LiBTZXQgKG5hbWUsIHZhbHVlKSBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdLnNldChuYW1lLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRzZXRjb29raWVcbiAgZ2V0U2V0Q29va2llICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgU2V0LUNvb2tpZWAsIHRoZW4gcmV0dXJuIFx1MDBBQiBcdTAwQkIuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3Qgd2hvc2UgbmFtZSBpc1xuICAgIC8vICAgIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBgU2V0LUNvb2tpZWAsIGluIG9yZGVyLlxuXG4gICAgY29uc3QgbGlzdCA9IHRoaXNba0hlYWRlcnNMaXN0XS5jb29raWVzXG5cbiAgICBpZiAobGlzdCkge1xuICAgICAgcmV0dXJuIFsuLi5saXN0XVxuICAgIH1cblxuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICBnZXQgW2tIZWFkZXJzU29ydGVkTWFwXSAoKSB7XG4gICAgaWYgKHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF0pIHtcbiAgICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYW4gZW1wdHkgbGlzdCBvZiBoZWFkZXJzIHdpdGggdGhlIGtleSBiZWluZyB0aGUgbmFtZVxuICAgIC8vICAgIGFuZCB2YWx1ZSB0aGUgdmFsdWUuXG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICAvLyAyLiBMZXQgbmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0IGhlYWRlciBuYW1lcyB0byBhIHNvcnRlZC1sb3dlcmNhc2VcbiAgICAvLyAgICBzZXQgd2l0aCBhbGwgdGhlIG5hbWVzIG9mIHRoZSBoZWFkZXJzIGluIGxpc3QuXG4gICAgY29uc3QgbmFtZXMgPSBbLi4udGhpc1trSGVhZGVyc0xpc3RdXS5zb3J0KChhLCBiKSA9PiBhWzBdIDwgYlswXSA/IC0xIDogMSlcbiAgICBjb25zdCBjb29raWVzID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIC8vIDMuIEZvciBlYWNoIG5hbWUgb2YgbmFtZXM6XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IG5hbWVzW2ldXG4gICAgICAvLyAxLiBJZiBuYW1lIGlzIGBzZXQtY29va2llYCwgdGhlbjpcbiAgICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgLy8gMS4gTGV0IHZhbHVlcyBiZSBhIGxpc3Qgb2YgYWxsIHZhbHVlcyBvZiBoZWFkZXJzIGluIGxpc3Qgd2hvc2UgbmFtZVxuICAgICAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSwgaW4gb3JkZXIuXG5cbiAgICAgICAgLy8gMi4gRm9yIGVhY2ggdmFsdWUgb2YgdmFsdWVzOlxuICAgICAgICAvLyAxLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb2tpZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIGNvb2tpZXNbal1dKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2U6XG5cbiAgICAgICAgLy8gMS4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBuYW1lIGZyb20gbGlzdC5cblxuICAgICAgICAvLyAyLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgICBhc3NlcnQodmFsdWUgIT09IG51bGwpXG5cbiAgICAgICAgLy8gMy4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVycy5cbiAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSA9IGhlYWRlcnNcblxuICAgIC8vIDQuIFJldHVybiBoZWFkZXJzLlxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5J1xuICAgIClcbiAgfVxuXG4gIHZhbHVlcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICd2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAndmFsdWUnXG4gICAgKVxuICB9XG5cbiAgZW50cmllcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICdrZXkrdmFsdWUnKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEhlYWRlcnMpID0+IHZvaWR9IGNhbGxiYWNrRm5cbiAgICogQHBhcmFtIHt1bmtub3dufSB0aGlzQXJnXG4gICAqL1xuICBmb3JFYWNoIChjYWxsYmFja0ZuLCB0aGlzQXJnID0gZ2xvYmFsVGhpcykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnSGVhZGVycyc6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdGdW5jdGlvbicuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzKSB7XG4gICAgICBjYWxsYmFja0ZuLmFwcGx5KHRoaXNBcmcsIFt2YWx1ZSwga2V5LCB0aGlzXSlcbiAgICB9XG4gIH1cblxuICBbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldFNldENvb2tpZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdmFsdWVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlbnRyaWVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBmb3JFYWNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLml0ZXJhdG9yXTogeyBlbnVtZXJhYmxlOiBmYWxzZSB9LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnSGVhZGVycycsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIFt1dGlsLmluc3BlY3QuY3VzdG9tXToge1xuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH1cbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKFZbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXShWKVxuICAgIH1cblxuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10oVilcbiAgfVxuXG4gIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZpbGwsXG4gIEhlYWRlcnMsXG4gIEhlYWRlcnNMaXN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc1x1MjAxOXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlzXHUyMDE5cyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZVx1MjAxOXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZVx1MjAxOXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZVx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsICIvKiBnbG9iYWxzIEFib3J0Q29udHJvbGxlciAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBleHRyYWN0Qm9keSwgbWl4aW5Cb2R5LCBjbG9uZUJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7IEhlYWRlcnMsIGZpbGw6IGZpbGxIZWFkZXJzLCBIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgRmluYWxpemF0aW9uUmVnaXN0cnkgfSA9IHJlcXVpcmUoJy4uL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgc2FtZU9yaWdpbixcbiAgbm9ybWFsaXplTWV0aG9kLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBub3JtYWxpemVNZXRob2RSZWNvcmRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVxdWVzdER1cGxleFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gdXRpbFxuY29uc3QgeyBrSGVhZGVycywga1NpZ25hbCwga1N0YXRlLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBnZXRNYXhMaXN0ZW5lcnMsIHNldE1heExpc3RlbmVycywgZ2V0RXZlbnRMaXN0ZW5lcnMsIGRlZmF1bHRNYXhMaXN0ZW5lcnMgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmxldCBUcmFuc2Zvcm1TdHJlYW0gPSBnbG9iYWxUaGlzLlRyYW5zZm9ybVN0cmVhbVxuXG5jb25zdCBrQWJvcnRDb250cm9sbGVyID0gU3ltYm9sKCdhYm9ydENvbnRyb2xsZXInKVxuXG5jb25zdCByZXF1ZXN0RmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KCh7IHNpZ25hbCwgYWJvcnQgfSkgPT4ge1xuICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWNsYXNzXG5jbGFzcyBSZXF1ZXN0IHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0XG4gIGNvbnN0cnVjdG9yIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gICAgaWYgKGlucHV0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVxdWVzdCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGlucHV0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8oaW5wdXQpXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbml0KGluaXQpXG5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjZW52aXJvbm1lbnQtc2V0dGluZ3Mtb2JqZWN0XG4gICAgdGhpc1trUmVhbG1dID0ge1xuICAgICAgc2V0dGluZ3NPYmplY3Q6IHtcbiAgICAgICAgYmFzZVVybDogZ2V0R2xvYmFsT3JpZ2luKCksXG4gICAgICAgIGdldCBvcmlnaW4gKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmw/Lm9yaWdpblxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3lDb250YWluZXI6IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEuIExldCByZXF1ZXN0IGJlIG51bGwuXG4gICAgbGV0IHJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tNb2RlIGJlIG51bGwuXG4gICAgbGV0IGZhbGxiYWNrTW9kZSA9IG51bGxcblxuICAgIC8vIDMuIExldCBiYXNlVVJMIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QuYmFzZVVybFxuXG4gICAgLy8gNC4gTGV0IHNpZ25hbCBiZSBudWxsLlxuICAgIGxldCBzaWduYWwgPSBudWxsXG5cbiAgICAvLyA1LiBJZiBpbnB1dCBpcyBhIHN0cmluZywgdGhlbjpcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gMS4gTGV0IHBhcnNlZFVSTCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgaW5wdXQgd2l0aCBiYXNlVVJMLlxuICAgICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBsZXQgcGFyc2VkVVJMXG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKGlucHV0LCBiYXNlVXJsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBVUkwgZnJvbSAnICsgaW5wdXQsIHsgY2F1c2U6IGVyciB9KVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBwYXJzZWRVUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAocGFyc2VkVVJMLnVzZXJuYW1lIHx8IHBhcnNlZFVSTC5wYXNzd29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBmcm9tIGEgVVJMIHRoYXQgaW5jbHVkZXMgY3JlZGVudGlhbHM6ICcgK1xuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdob3NlIFVSTCBpcyBwYXJzZWRVUkwuXG4gICAgICByZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyB1cmxMaXN0OiBbcGFyc2VkVVJMXSB9KVxuXG4gICAgICAvLyA1LiBTZXQgZmFsbGJhY2tNb2RlIHRvIFwiY29yc1wiLlxuICAgICAgZmFsbGJhY2tNb2RlID0gJ2NvcnMnXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDYuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNy4gQXNzZXJ0OiBpbnB1dCBpcyBhIFJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYXNzZXJ0KGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdClcblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3QgdG8gaW5wdXRcdTIwMTlzIHJlcXVlc3QuXG4gICAgICByZXF1ZXN0ID0gaW5wdXRba1N0YXRlXVxuXG4gICAgICAvLyA5LiBTZXQgc2lnbmFsIHRvIGlucHV0XHUyMDE5cyBzaWduYWwuXG4gICAgICBzaWduYWwgPSBpbnB1dFtrU2lnbmFsXVxuICAgIH1cblxuICAgIC8vIDcuIExldCBvcmlnaW4gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBvcmlnaW4uXG4gICAgY29uc3Qgb3JpZ2luID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0Lm9yaWdpblxuXG4gICAgLy8gOC4gTGV0IHdpbmRvdyBiZSBcImNsaWVudFwiLlxuICAgIGxldCB3aW5kb3cgPSAnY2xpZW50J1xuXG4gICAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCBhbmQgaXRzIG9yaWdpblxuICAgIC8vIGlzIHNhbWUgb3JpZ2luIHdpdGggb3JpZ2luLCB0aGVuIHNldCB3aW5kb3cgdG8gcmVxdWVzdFx1MjAxOXMgd2luZG93LlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3Qud2luZG93Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vudmlyb25tZW50U2V0dGluZ3NPYmplY3QnICYmXG4gICAgICBzYW1lT3JpZ2luKHJlcXVlc3Qud2luZG93LCBvcmlnaW4pXG4gICAgKSB7XG4gICAgICB3aW5kb3cgPSByZXF1ZXN0LndpbmRvd1xuICAgIH1cblxuICAgIC8vIDEwLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGluaXQud2luZG93ICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCd3aW5kb3cnIG9wdGlvbiAnJHt3aW5kb3d9JyBtdXN0IGJlIG51bGxgKVxuICAgIH1cblxuICAgIC8vIDExLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cywgdGhlbiBzZXQgd2luZG93IHRvIFwibm8td2luZG93XCIuXG4gICAgaWYgKCd3aW5kb3cnIGluIGluaXQpIHtcbiAgICAgIHdpbmRvdyA9ICduby13aW5kb3cnXG4gICAgfVxuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHtcbiAgICAgIC8vIFVSTCByZXF1ZXN0XHUyMDE5cyBVUkwuXG4gICAgICAvLyB1bmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogdGhpcyBpcyBzZXQgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gcmVxdWVzdCdzIHVybExpc3QgaW4gbWFrZVJlcXVlc3RcbiAgICAgIC8vIG1ldGhvZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QuXG4gICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgLy8gaGVhZGVyIGxpc3QgQSBjb3B5IG9mIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IGhlYWRlcnNMaXN0IGlzIGNsb25lZCBpbiBtYWtlUmVxdWVzdFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlcXVlc3QuaGVhZGVyc0xpc3QsXG4gICAgICAvLyB1bnNhZmUtcmVxdWVzdCBmbGFnIFNldC5cbiAgICAgIHVuc2FmZVJlcXVlc3Q6IHJlcXVlc3QudW5zYWZlUmVxdWVzdCxcbiAgICAgIC8vIGNsaWVudCBUaGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgICBjbGllbnQ6IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdCxcbiAgICAgIC8vIHdpbmRvdyB3aW5kb3cuXG4gICAgICB3aW5kb3csXG4gICAgICAvLyBwcmlvcml0eSByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eS5cbiAgICAgIHByaW9yaXR5OiByZXF1ZXN0LnByaW9yaXR5LFxuICAgICAgLy8gb3JpZ2luIHJlcXVlc3RcdTIwMTlzIG9yaWdpbi4gVGhlIHByb3BhZ2F0aW9uIG9mIHRoZSBvcmlnaW4gaXMgb25seSBzaWduaWZpY2FudCBmb3IgbmF2aWdhdGlvbiByZXF1ZXN0c1xuICAgICAgLy8gYmVpbmcgaGFuZGxlZCBieSBhIHNlcnZpY2Ugd29ya2VyLiBJbiB0aGlzIHNjZW5hcmlvIGEgcmVxdWVzdCBjYW4gaGF2ZSBhbiBvcmlnaW4gdGhhdCBpcyBkaWZmZXJlbnRcbiAgICAgIC8vIGZyb20gdGhlIGN1cnJlbnQgY2xpZW50LlxuICAgICAgb3JpZ2luOiByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIC8vIHJlZmVycmVyIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgICAgcmVmZXJyZXI6IHJlcXVlc3QucmVmZXJyZXIsXG4gICAgICAvLyByZWZlcnJlciBwb2xpY3kgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHJlcXVlc3QucmVmZXJyZXJQb2xpY3ksXG4gICAgICAvLyBtb2RlIHJlcXVlc3RcdTIwMTlzIG1vZGUuXG4gICAgICBtb2RlOiByZXF1ZXN0Lm1vZGUsXG4gICAgICAvLyBjcmVkZW50aWFscyBtb2RlIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUuXG4gICAgICBjcmVkZW50aWFsczogcmVxdWVzdC5jcmVkZW50aWFscyxcbiAgICAgIC8vIGNhY2hlIG1vZGUgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZS5cbiAgICAgIGNhY2hlOiByZXF1ZXN0LmNhY2hlLFxuICAgICAgLy8gcmVkaXJlY3QgbW9kZSByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlLlxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3QucmVkaXJlY3QsXG4gICAgICAvLyBpbnRlZ3JpdHkgbWV0YWRhdGEgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhLlxuICAgICAgaW50ZWdyaXR5OiByZXF1ZXN0LmludGVncml0eSxcbiAgICAgIC8vIGtlZXBhbGl2ZSByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgICBrZWVwYWxpdmU6IHJlcXVlc3Qua2VlcGFsaXZlLFxuICAgICAgLy8gcmVsb2FkLW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVsb2FkTmF2aWdhdGlvbjogcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uLFxuICAgICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICBoaXN0b3J5TmF2aWdhdGlvbjogcmVxdWVzdC5oaXN0b3J5TmF2aWdhdGlvbixcbiAgICAgIC8vIFVSTCBsaXN0IEEgY2xvbmUgb2YgcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gICAgICB1cmxMaXN0OiBbLi4ucmVxdWVzdC51cmxMaXN0XVxuICAgIH0pXG5cbiAgICBjb25zdCBpbml0SGFzS2V5ID0gT2JqZWN0LmtleXMoaW5pdCkubGVuZ3RoICE9PSAwXG5cbiAgICAvLyAxMy4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHNldCBpdCB0byBcInNhbWUtb3JpZ2luXCIuXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICAgIHJlcXVlc3QubW9kZSA9ICdzYW1lLW9yaWdpbidcbiAgICAgIH1cblxuICAgICAgLy8gMi4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbiA9IGZhbHNlXG5cbiAgICAgIC8vIDMuIFVuc2V0IHJlcXVlc3RcdTIwMTlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5oaXN0b3J5TmF2aWdhdGlvbiA9IGZhbHNlXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gdG8gXCJjbGllbnRcIi5cbiAgICAgIHJlcXVlc3Qub3JpZ2luID0gJ2NsaWVudCdcblxuICAgICAgLy8gNS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwiY2xpZW50XCJcbiAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuXG4gICAgICAvLyA2LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gJydcblxuICAgICAgLy8gNy4gU2V0IHJlcXVlc3RcdTIwMTlzIFVSTCB0byByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0W3JlcXVlc3QudXJsTGlzdC5sZW5ndGggLSAxXVxuXG4gICAgICAvLyA4LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QgdG8gXHUwMEFCIHJlcXVlc3RcdTIwMTlzIFVSTCBcdTAwQkIuXG4gICAgICByZXF1ZXN0LnVybExpc3QgPSBbcmVxdWVzdC51cmxdXG4gICAgfVxuXG4gICAgLy8gMTQuIElmIGluaXRbXCJyZWZlcnJlclwiXSBleGlzdHMsIHRoZW46XG4gICAgaWYgKGluaXQucmVmZXJyZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlZmVycmVyIGJlIGluaXRbXCJyZWZlcnJlclwiXS5cbiAgICAgIGNvbnN0IHJlZmVycmVyID0gaW5pdC5yZWZlcnJlclxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlciBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcIm5vLXJlZmVycmVyXCIuXG4gICAgICBpZiAocmVmZXJyZXIgPT09ICcnKSB7XG4gICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnbm8tcmVmZXJyZXInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAxLiBMZXQgcGFyc2VkUmVmZXJyZXIgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHJlZmVycmVyIHdpdGhcbiAgICAgICAgLy8gYmFzZVVSTC5cbiAgICAgICAgLy8gMi4gSWYgcGFyc2VkUmVmZXJyZXIgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgbGV0IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFyc2VkUmVmZXJyZXIgPSBuZXcgVVJMKHJlZmVycmVyLCBiYXNlVXJsKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWZlcnJlciBcIiR7cmVmZXJyZXJ9XCIgaXMgbm90IGEgdmFsaWQgVVJMLmAsIHsgY2F1c2U6IGVyciB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAgICAgICAvLyAtIHBhcnNlZFJlZmVycmVyXHUyMDE5cyBzY2hlbWUgaXMgXCJhYm91dFwiIGFuZCBwYXRoIGlzIHRoZSBzdHJpbmcgXCJjbGllbnRcIlxuICAgICAgICAvLyAtIHBhcnNlZFJlZmVycmVyXHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggb3JpZ2luXG4gICAgICAgIC8vIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwiY2xpZW50XCIuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAocGFyc2VkUmVmZXJyZXIucHJvdG9jb2wgPT09ICdhYm91dDonICYmIHBhcnNlZFJlZmVycmVyLmhvc3RuYW1lID09PSAnY2xpZW50JykgfHxcbiAgICAgICAgICAob3JpZ2luICYmICFzYW1lT3JpZ2luKHBhcnNlZFJlZmVycmVyLCB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QuYmFzZVVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIHBhcnNlZFJlZmVycmVyLlxuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSBwYXJzZWRSZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTUuIElmIGluaXRbXCJyZWZlcnJlclBvbGljeVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZmVycmVyUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBpbml0LnJlZmVycmVyUG9saWN5XG4gICAgfVxuXG4gICAgLy8gMTYuIExldCBtb2RlIGJlIGluaXRbXCJtb2RlXCJdIGlmIGl0IGV4aXN0cywgYW5kIGZhbGxiYWNrTW9kZSBvdGhlcndpc2UuXG4gICAgbGV0IG1vZGVcbiAgICBpZiAoaW5pdC5tb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1vZGUgPSBpbml0Lm1vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZSA9IGZhbGxiYWNrTW9kZVxuICAgIH1cblxuICAgIC8vIDE3LiBJZiBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgcmVxdWVzdCBtb2RlIG5hdmlnYXRlLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMTguIElmIG1vZGUgaXMgbm9uLW51bGwsIHNldCByZXF1ZXN0XHUyMDE5cyBtb2RlIHRvIG1vZGUuXG4gICAgaWYgKG1vZGUgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5tb2RlID0gbW9kZVxuICAgIH1cblxuICAgIC8vIDE5LiBJZiBpbml0W1wiY3JlZGVudGlhbHNcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlXG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jcmVkZW50aWFscyA9IGluaXQuY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgaW5pdFtcImNhY2hlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5jYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNhY2hlID0gaW5pdC5jYWNoZVxuICAgIH1cblxuICAgIC8vIDIxLiBJZiByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiBhbmQgcmVxdWVzdFx1MjAxOXMgbW9kZSBpc1xuICAgIC8vIG5vdCBcInNhbWUtb3JpZ2luXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHJlcXVlc3QuY2FjaGUgPT09ICdvbmx5LWlmLWNhY2hlZCcgJiYgcmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIidvbmx5LWlmLWNhY2hlZCcgY2FuIGJlIHNldCBvbmx5IHdpdGggJ3NhbWUtb3JpZ2luJyBtb2RlXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAyMi4gSWYgaW5pdFtcInJlZGlyZWN0XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWRpcmVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZGlyZWN0ID0gaW5pdC5yZWRpcmVjdFxuICAgIH1cblxuICAgIC8vIDIzLiBJZiBpbml0W1wiaW50ZWdyaXR5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIHRvIGl0LlxuICAgIGlmIChpbml0LmludGVncml0eSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LmludGVncml0eSA9IFN0cmluZyhpbml0LmludGVncml0eSlcbiAgICB9XG5cbiAgICAvLyAyNC4gSWYgaW5pdFtcImtlZXBhbGl2ZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSB0byBpdC5cbiAgICBpZiAoaW5pdC5rZWVwYWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5rZWVwYWxpdmUgPSBCb29sZWFuKGluaXQua2VlcGFsaXZlKVxuICAgIH1cblxuICAgIC8vIDI1LiBJZiBpbml0W1wibWV0aG9kXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IG1ldGhvZCBiZSBpbml0W1wibWV0aG9kXCJdLlxuICAgICAgbGV0IG1ldGhvZCA9IGluaXQubWV0aG9kXG5cbiAgICAgIC8vIDIuIElmIG1ldGhvZCBpcyBub3QgYSBtZXRob2Qgb3IgbWV0aG9kIGlzIGEgZm9yYmlkZGVuIG1ldGhvZCwgdGhlblxuICAgICAgLy8gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHttZXRob2R9JyBpcyBub3QgYSB2YWxpZCBIVFRQIG1ldGhvZC5gKVxuICAgICAgfVxuXG4gICAgICBpZiAoZm9yYmlkZGVuTWV0aG9kc1NldC5oYXMobWV0aG9kLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIEhUVFAgbWV0aG9kIGlzIHVuc3VwcG9ydGVkLmApXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIE5vcm1hbGl6ZSBtZXRob2QuXG4gICAgICBtZXRob2QgPSBub3JtYWxpemVNZXRob2RSZWNvcmRbbWV0aG9kXSA/PyBub3JtYWxpemVNZXRob2QobWV0aG9kKVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIG1ldGhvZC5cbiAgICAgIHJlcXVlc3QubWV0aG9kID0gbWV0aG9kXG4gICAgfVxuXG4gICAgLy8gMjYuIElmIGluaXRbXCJzaWduYWxcIl0gZXhpc3RzLCB0aGVuIHNldCBzaWduYWwgdG8gaXQuXG4gICAgaWYgKGluaXQuc2lnbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNpZ25hbCA9IGluaXQuc2lnbmFsXG4gICAgfVxuXG4gICAgLy8gMjcuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0IHRvIHJlcXVlc3QuXG4gICAgdGhpc1trU3RhdGVdID0gcmVxdWVzdFxuXG4gICAgLy8gMjguIFNldCB0aGlzXHUyMDE5cyBzaWduYWwgdG8gYSBuZXcgQWJvcnRTaWduYWwgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbS5cbiAgICAvLyBUT0RPOiBjb3VsZCB0aGlzIGJlIHNpbXBsaWZpZWQgd2l0aCBBYm9ydFNpZ25hbC5hbnlcbiAgICAvLyAoaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tYWJvcnRzaWduYWwtYW55KVxuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgdGhpc1trU2lnbmFsXSA9IGFjLnNpZ25hbFxuICAgIHRoaXNba1NpZ25hbF1ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMjkuIElmIHNpZ25hbCBpcyBub3QgbnVsbCwgdGhlbiBtYWtlIHRoaXNcdTIwMTlzIHNpZ25hbCBmb2xsb3cgc2lnbmFsLlxuICAgIGlmIChzaWduYWwgIT0gbnVsbCkge1xuICAgICAgaWYgKFxuICAgICAgICAhc2lnbmFsIHx8XG4gICAgICAgIHR5cGVvZiBzaWduYWwuYWJvcnRlZCAhPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJGYWlsZWQgdG8gY29uc3RydWN0ICdSZXF1ZXN0JzogbWVtYmVyIHNpZ25hbCBpcyBub3Qgb2YgdHlwZSBBYm9ydFNpZ25hbC5cIlxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBhYy5hYm9ydChzaWduYWwucmVhc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gS2VlcCBhIHN0cm9uZyByZWYgdG8gYWMgd2hpbGUgcmVxdWVzdCBvYmplY3RcbiAgICAgICAgLy8gaXMgYWxpdmUuIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgQWJvcnRDb250cm9sbGVyXG4gICAgICAgIC8vIGZyb20gYmVpbmcgcHJlbWF0dXJlbHkgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE5MjYuXG4gICAgICAgIHRoaXNba0Fib3J0Q29udHJvbGxlcl0gPSBhY1xuXG4gICAgICAgIGNvbnN0IGFjUmVmID0gbmV3IFdlYWtSZWYoYWMpXG4gICAgICAgIGNvbnN0IGFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFjID0gYWNSZWYuZGVyZWYoKVxuICAgICAgICAgIGlmIChhYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhYy5hYm9ydCh0aGlzLnJlYXNvbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlyZC1wYXJ0eSBBYm9ydENvbnRyb2xsZXJzIG1heSBub3Qgd29yayB3aXRoIHRoZXNlLlxuICAgICAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvMTkxMCNpc3N1ZWNvbW1lbnQtMTQ2NDQ5NTYxOS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJZiB0aGUgbWF4IGFtb3VudCBvZiBsaXN0ZW5lcnMgaXMgZXF1YWwgdG8gdGhlIGRlZmF1bHQsIGluY3JlYXNlIGl0XG4gICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBub2RlID49IHYxOS45LjBcbiAgICAgICAgICBpZiAodHlwZW9mIGdldE1heExpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJyAmJiBnZXRNYXhMaXN0ZW5lcnMoc2lnbmFsKSA9PT0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDEwMCwgc2lnbmFsKVxuICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0RXZlbnRMaXN0ZW5lcnMoc2lnbmFsLCAnYWJvcnQnKS5sZW5ndGggPj0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDEwMCwgc2lnbmFsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsIGFib3J0KVxuICAgICAgICByZXF1ZXN0RmluYWxpemVyLnJlZ2lzdGVyKGFjLCB7IHNpZ25hbCwgYWJvcnQgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMC4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmQgaXNcbiAgICAvLyBcInJlcXVlc3RcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3JlcXVlc3QnXG4gICAgdGhpc1trSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMzEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCIsIHRoZW46XG4gICAgaWYgKG1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2QsXG4gICAgICAvLyB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKCFjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQuaGFzKHJlcXVlc3QubWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnJHtyZXF1ZXN0Lm1ldGhvZH0gaXMgdW5zdXBwb3J0ZWQgaW4gbm8tY29ycyBtb2RlLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgdG8gXCJyZXF1ZXN0LW5vLWNvcnNcIi5cbiAgICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdC1uby1jb3JzJ1xuICAgIH1cblxuICAgIC8vIDMyLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLyoqIEB0eXBlIHtIZWFkZXJzTGlzdH0gKi9cbiAgICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XVxuICAgICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYSBjb3B5IG9mIHRoaXNcdTIwMTlzIGhlYWRlcnMgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlclxuICAgICAgLy8gbGlzdC5cbiAgICAgIC8vIDIuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBzZXQgaGVhZGVycyB0byBpbml0W1wiaGVhZGVyc1wiXS5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgIT09IHVuZGVmaW5lZCA/IGluaXQuaGVhZGVycyA6IG5ldyBIZWFkZXJzTGlzdChoZWFkZXJzTGlzdClcblxuICAgICAgLy8gMy4gRW1wdHkgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICBoZWFkZXJzTGlzdC5jbGVhcigpXG5cbiAgICAgIC8vIDQuIElmIGhlYWRlcnMgaXMgYSBIZWFkZXJzIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gaXRzIGhlYWRlclxuICAgICAgLy8gbGlzdCwgYXBwZW5kIGhlYWRlclx1MjAxOXMgbmFtZS9oZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBoZWFkZXJzKSB7XG4gICAgICAgICAgaGVhZGVyc0xpc3QuYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IENvcHkgdGhlIGBzZXQtY29va2llYCBtZXRhLWRhdGEuXG4gICAgICAgIGhlYWRlcnNMaXN0LmNvb2tpZXMgPSBoZWFkZXJzLmNvb2tpZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIE90aGVyd2lzZSwgZmlsbCB0aGlzXHUyMDE5cyBoZWFkZXJzIHdpdGggaGVhZGVycy5cbiAgICAgICAgZmlsbEhlYWRlcnModGhpc1trSGVhZGVyc10sIGhlYWRlcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzMuIExldCBpbnB1dEJvZHkgYmUgaW5wdXRcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgaWYgaW5wdXQgaXMgYSBSZXF1ZXN0XG4gICAgLy8gb2JqZWN0OyBvdGhlcndpc2UgbnVsbC5cbiAgICBjb25zdCBpbnB1dEJvZHkgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dFtrU3RhdGVdLmJvZHkgOiBudWxsXG5cbiAgICAvLyAzNC4gSWYgZWl0aGVyIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwgb3IgaW5wdXRCb2R5IGlzXG4gICAgLy8gbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYEdFVGAgb3IgYEhFQURgLCB0aGVuIHRocm93IGFcbiAgICAvLyBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgKGluaXQuYm9keSAhPSBudWxsIHx8IGlucHV0Qm9keSAhPSBudWxsKSAmJlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnR0VUJyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5LicpXG4gICAgfVxuXG4gICAgLy8gMzUuIExldCBpbml0Qm9keSBiZSBudWxsLlxuICAgIGxldCBpbml0Qm9keSA9IG51bGxcblxuICAgIC8vIDM2LiBJZiBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gTGV0IENvbnRlbnQtVHlwZSBiZSBudWxsLlxuICAgICAgLy8gMi4gU2V0IGluaXRCb2R5IGFuZCBDb250ZW50LVR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nXG4gICAgICAvLyBpbml0W1wiYm9keVwiXSwgd2l0aCBrZWVwYWxpdmUgc2V0IHRvIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShcbiAgICAgICAgaW5pdC5ib2R5LFxuICAgICAgICByZXF1ZXN0LmtlZXBhbGl2ZVxuICAgICAgKVxuICAgICAgaW5pdEJvZHkgPSBleHRyYWN0ZWRCb2R5XG5cbiAgICAgIC8vIDMsIElmIENvbnRlbnQtVHlwZSBpcyBub24tbnVsbCBhbmQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lc1xuICAgICAgLy8gbm90IGNvbnRhaW4gYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIGBDb250ZW50LVR5cGVgL0NvbnRlbnQtVHlwZSB0b1xuICAgICAgLy8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiAhdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XS5jb250YWlucygnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgdGhpc1trSGVhZGVyc10uYXBwZW5kKCdjb250ZW50LXR5cGUnLCBjb250ZW50VHlwZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzNy4gTGV0IGlucHV0T3JJbml0Qm9keSBiZSBpbml0Qm9keSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlXG4gICAgLy8gaW5wdXRCb2R5LlxuICAgIGNvbnN0IGlucHV0T3JJbml0Qm9keSA9IGluaXRCb2R5ID8/IGlucHV0Qm9keVxuXG4gICAgLy8gMzguIElmIGlucHV0T3JJbml0Qm9keSBpcyBub24tbnVsbCBhbmQgaW5wdXRPckluaXRCb2R5XHUyMDE5cyBzb3VyY2UgaXNcbiAgICAvLyBudWxsLCB0aGVuOlxuICAgIGlmIChpbnB1dE9ySW5pdEJvZHkgIT0gbnVsbCAmJiBpbnB1dE9ySW5pdEJvZHkuc291cmNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIElmIGluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbml0W1wiZHVwbGV4XCJdIGRvZXMgbm90IGV4aXN0LFxuICAgICAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChpbml0Qm9keSAhPSBudWxsICYmIGluaXQuZHVwbGV4ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdEluaXQ6IGR1cGxleCBvcHRpb24gaXMgcmVxdWlyZWQgd2hlbiBzZW5kaW5nIGEgYm9keS4nKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIG5laXRoZXIgXCJzYW1lLW9yaWdpblwiIG5vciBcImNvcnNcIixcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nICYmIHJlcXVlc3QubW9kZSAhPT0gJ2NvcnMnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0lmIHJlcXVlc3QgaXMgbWFkZSBmcm9tIFJlYWRhYmxlU3RyZWFtLCBtb2RlIHNob3VsZCBiZSBcInNhbWUtb3JpZ2luXCIgb3IgXCJjb3JzXCInXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHVzZS1DT1JTLXByZWZsaWdodCBmbGFnLlxuICAgICAgcmVxdWVzdC51c2VDT1JTUHJlZmxpZ2h0RmxhZyA9IHRydWVcbiAgICB9XG5cbiAgICAvLyAzOS4gTGV0IGZpbmFsQm9keSBiZSBpbnB1dE9ySW5pdEJvZHkuXG4gICAgbGV0IGZpbmFsQm9keSA9IGlucHV0T3JJbml0Qm9keVxuXG4gICAgLy8gNDAuIElmIGluaXRCb2R5IGlzIG51bGwgYW5kIGlucHV0Qm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5pdEJvZHkgPT0gbnVsbCAmJiBpbnB1dEJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5wdXQgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChpbnB1dEJvZHkuc3RyZWFtKSB8fCBpbnB1dEJvZHkuc3RyZWFtLmxvY2tlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdDYW5ub3QgY29uc3RydWN0IGEgUmVxdWVzdCB3aXRoIGEgUmVxdWVzdCBvYmplY3QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuJ1xuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCBmaW5hbEJvZHkgdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIHByb3h5IGZvciBpbnB1dEJvZHkuXG4gICAgICBpZiAoIVRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICBUcmFuc2Zvcm1TdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuVHJhbnNmb3JtU3RyZWFtXG4gICAgICB9XG5cbiAgICAgIC8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWNyZWF0ZS1hLXByb3h5XG4gICAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKVxuICAgICAgaW5wdXRCb2R5LnN0cmVhbS5waXBlVGhyb3VnaChpZGVudGl0eVRyYW5zZm9ybSlcbiAgICAgIGZpbmFsQm9keSA9IHtcbiAgICAgICAgc291cmNlOiBpbnB1dEJvZHkuc291cmNlLFxuICAgICAgICBsZW5ndGg6IGlucHV0Qm9keS5sZW5ndGgsXG4gICAgICAgIHN0cmVhbTogaWRlbnRpdHlUcmFuc2Zvcm0ucmVhZGFibGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0MS4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gZmluYWxCb2R5LlxuICAgIHRoaXNba1N0YXRlXS5ib2R5ID0gZmluYWxCb2R5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIEhUVFAgbWV0aG9kLCB3aGljaCBpcyBcIkdFVFwiIGJ5IGRlZmF1bHQuXG4gIGdldCBtZXRob2QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbWV0aG9kIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1ldGhvZFxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgVVJMIG9mIHJlcXVlc3QgYXMgYSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tTdGF0ZV0udXJsKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIEhlYWRlcnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIE5vdGUgdGhhdCBoZWFkZXJzIGFkZGVkIGluIHRoZSBuZXR3b3JrIGxheWVyIGJ5IHRoZSB1c2VyIGFnZW50IHdpbGwgbm90XG4gIC8vIGJlIGFjY291bnRlZCBmb3IgaW4gdGhpcyBvYmplY3QsIGUuZy4sIHRoZSBcIkhvc3RcIiBoZWFkZXIuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGtpbmQgb2YgcmVzb3VyY2UgcmVxdWVzdGVkIGJ5IHJlcXVlc3QsIGUuZy4sIFwiZG9jdW1lbnRcIlxuICAvLyBvciBcInNjcmlwdFwiLlxuICBnZXQgZGVzdGluYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgZGVzdGluYXRpb24gZ2V0dGVyIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24uXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5kZXN0aW5hdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgb2YgcmVxdWVzdC4gSXRzIHZhbHVlIGNhbiBiZSBhIHNhbWUtb3JpZ2luIFVSTCBpZlxuICAvLyBleHBsaWNpdGx5IHNldCBpbiBpbml0LCB0aGUgZW1wdHkgc3RyaW5nIHRvIGluZGljYXRlIG5vIHJlZmVycmVyLCBhbmRcbiAgLy8gXCJhYm91dDpjbGllbnRcIiB3aGVuIGRlZmF1bHRpbmcgdG8gdGhlIGdsb2JhbFx1MjAxOXMgZGVmYXVsdC4gVGhpcyBpcyB1c2VkXG4gIC8vIGR1cmluZyBmZXRjaGluZyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBgUmVmZXJlcmAgaGVhZGVyIG9mIHRoZVxuICAvLyByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gIGdldCByZWZlcnJlciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgdGhlbiByZXR1cm4gdGhlXG4gICAgLy8gZW1wdHkgc3RyaW5nLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICduby1yZWZlcnJlcicpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwiY2xpZW50XCIsIHRoZW4gcmV0dXJuXG4gICAgLy8gXCJhYm91dDpjbGllbnRcIi5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgICAgcmV0dXJuICdhYm91dDpjbGllbnQnXG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXIudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHVzZWQgZHVyaW5nIGZldGNoaW5nIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlci5cbiAgZ2V0IHJlZmVycmVyUG9saWN5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZmVycmVyUG9saWN5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nXG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3Qgd2lsbCB1c2UgQ09SUywgb3Igd2lsbCBiZSByZXN0cmljdGVkIHRvIHNhbWUtb3JpZ2luXG4gIC8vIFVSTHMuXG4gIGdldCBtb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1vZGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1vZGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNyZWRlbnRpYWxzIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGVcbiAgLy8gcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgZ2V0IGNyZWRlbnRpYWxzICgpIHtcbiAgICAvLyBUaGUgY3JlZGVudGlhbHMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjYWNoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgcmVxdWVzdCB3aWxsXG4gIC8vIGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXJcdTIwMTlzIGNhY2hlIHdoZW4gZmV0Y2hpbmcuXG4gIGdldCBjYWNoZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBjYWNoZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY2FjaGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZGlyZWN0IG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHJlZGlyZWN0cyBmb3IgdGhlXG4gIC8vIHJlcXVlc3Qgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBmZXRjaGluZy4gQSByZXF1ZXN0XG4gIC8vIHdpbGwgZm9sbG93IHJlZGlyZWN0cyBieSBkZWZhdWx0LlxuICBnZXQgcmVkaXJlY3QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZGlyZWN0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIHN1YnJlc291cmNlIGludGVncml0eSBtZXRhZGF0YSwgd2hpY2ggaXMgYVxuICAvLyBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIGJlaW5nIGZldGNoZWQuIEl0cyB2YWx1ZVxuICAvLyBjb25zaXN0cyBvZiBtdWx0aXBsZSBoYXNoZXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFtTUkldXG4gIGdldCBpbnRlZ3JpdHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaW50ZWdyaXR5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGludGVncml0eVxuICAgIC8vIG1ldGFkYXRhLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaW50ZWdyaXR5XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgY2FuIG91dGxpdmUgdGhlXG4gIC8vIGdsb2JhbCBpbiB3aGljaCBpdCB3YXMgY3JlYXRlZC5cbiAgZ2V0IGtlZXBhbGl2ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBrZWVwYWxpdmUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ua2VlcGFsaXZlXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgcmVsb2FkXG4gIC8vIG5hdmlnYXRpb24uXG4gIGdldCBpc1JlbG9hZE5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNSZWxvYWROYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVsb2FkTmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIGhpc3RvcnlcbiAgLy8gbmF2aWdhdGlvbiAoYS5rLmEuIGJhY2stZm93YXJkIG5hdmlnYXRpb24pLlxuICBnZXQgaXNIaXN0b3J5TmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc0hpc3RvcnlOYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXNcbiAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyBpcyBzZXQ7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmhpc3RvcnlOYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBzaWduYWwgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGFuIEFib3J0U2lnbmFsXG4gIC8vIG9iamVjdCBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCwgYW5kIGl0c1xuICAvLyBhYm9ydCBldmVudCBoYW5kbGVyLlxuICBnZXQgc2lnbmFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHNpZ25hbCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBzaWduYWwuXG4gICAgcmV0dXJuIHRoaXNba1NpZ25hbF1cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuICEhdGhpc1trU3RhdGVdLmJvZHkgJiYgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pXG4gIH1cblxuICBnZXQgZHVwbGV4ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuICdoYWxmJ1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlcXVlc3QuXG4gIGNsb25lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCB0aGlzLmJvZHk/LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXF1ZXN0LlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gTGV0IGNsb25lZFJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlcXVlc3Qgb2JqZWN0LFxuICAgIC8vIGdpdmVuIGNsb25lZFJlcXVlc3QsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGtDb25zdHJ1Y3QpXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVxdWVzdFxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gY2xvbmVkUmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba0hlYWRlcnNdW2tSZWFsbV1cblxuICAgIC8vIDQuIE1ha2UgY2xvbmVkUmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsIGZvbGxvdyB0aGlzXHUyMDE5cyBzaWduYWwuXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgYWMuYWJvcnQodGhpcy5zaWduYWwucmVhc29uKVxuICAgIH0gZWxzZSB7XG4gICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoXG4gICAgICAgIHRoaXMuc2lnbmFsLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgYWMuYWJvcnQodGhpcy5zaWduYWwucmVhc29uKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1NpZ25hbF0gPSBhYy5zaWduYWxcblxuICAgIC8vIDQuIFJldHVybiBjbG9uZWRSZXF1ZXN0T2JqZWN0LlxuICAgIHJldHVybiBjbG9uZWRSZXF1ZXN0T2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlcXVlc3QpXG5cbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0IChpbml0KSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0c1xuICBjb25zdCByZXF1ZXN0ID0ge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgbG9jYWxVUkxzT25seTogZmFsc2UsXG4gICAgdW5zYWZlUmVxdWVzdDogZmFsc2UsXG4gICAgYm9keTogbnVsbCxcbiAgICBjbGllbnQ6IG51bGwsXG4gICAgcmVzZXJ2ZWRDbGllbnQ6IG51bGwsXG4gICAgcmVwbGFjZXNDbGllbnRJZDogJycsXG4gICAgd2luZG93OiAnY2xpZW50JyxcbiAgICBrZWVwYWxpdmU6IGZhbHNlLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnYWxsJyxcbiAgICBpbml0aWF0b3I6ICcnLFxuICAgIGRlc3RpbmF0aW9uOiAnJyxcbiAgICBwcmlvcml0eTogbnVsbCxcbiAgICBvcmlnaW46ICdjbGllbnQnLFxuICAgIHBvbGljeUNvbnRhaW5lcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXI6ICdjbGllbnQnLFxuICAgIHJlZmVycmVyUG9saWN5OiAnJyxcbiAgICBtb2RlOiAnbm8tY29ycycsXG4gICAgdXNlQ09SU1ByZWZsaWdodEZsYWc6IGZhbHNlLFxuICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuICAgIHVzZUNyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICBjYWNoZTogJ2RlZmF1bHQnLFxuICAgIHJlZGlyZWN0OiAnZm9sbG93JyxcbiAgICBpbnRlZ3JpdHk6ICcnLFxuICAgIGNyeXB0b0dyYXBoaWNzTm9uY2VNZXRhZGF0YTogJycsXG4gICAgcGFyc2VyTWV0YWRhdGE6ICcnLFxuICAgIHJlbG9hZE5hdmlnYXRpb246IGZhbHNlLFxuICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICB1c2VyQWN0aXZhdGlvbjogZmFsc2UsXG4gICAgdGFpbnRlZE9yaWdpbjogZmFsc2UsXG4gICAgcmVkaXJlY3RDb3VudDogMCxcbiAgICByZXNwb25zZVRhaW50aW5nOiAnYmFzaWMnLFxuICAgIHByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uOiBmYWxzZSxcbiAgICBkb25lOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd0ZhaWxlZDogZmFsc2UsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdC5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdC5oZWFkZXJzTGlzdClcbiAgICAgIDogbmV3IEhlYWRlcnNMaXN0KClcbiAgfVxuICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFswXVxuICByZXR1cm4gcmVxdWVzdFxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlcXVlc3QgKHJlcXVlc3QpIHtcbiAgLy8gVG8gY2xvbmUgYSByZXF1ZXN0IHJlcXVlc3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBMZXQgbmV3UmVxdWVzdCBiZSBhIGNvcHkgb2YgcmVxdWVzdCwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgLi4ucmVxdWVzdCwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHNldCBuZXdSZXF1ZXN0XHUyMDE5cyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXF1ZXN0XHUyMDE5cyBib2R5LlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXF1ZXN0LmJvZHkgPSBjbG9uZUJvZHkocmVxdWVzdC5ib2R5KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIG5ld1JlcXVlc3QuXG4gIHJldHVybiBuZXdSZXF1ZXN0XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG4gIG1ldGhvZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNpZ25hbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZHVwbGV4OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZXN0aW5hdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzSGlzdG9yeU5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzUmVsb2FkTmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2VlcGFsaXZlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbnRlZ3JpdHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNhY2hlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYXR0cmlidXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlclBvbGljeToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1vZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXF1ZXN0JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlcXVlc3RcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RpbmZvXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdChWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxufVxuXG53ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEFib3J0U2lnbmFsXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdtZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9LFxuICB7XG4gICAga2V5OiAnYm9keScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdFxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXJQb2xpY3knLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY3lcbiAgICBhbGxvd2VkVmFsdWVzOiByZWZlcnJlclBvbGljeVxuICB9LFxuICB7XG4gICAga2V5OiAnbW9kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1tb2RlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdE1vZGVcbiAgfSxcbiAge1xuICAgIGtleTogJ2NyZWRlbnRpYWxzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNyZWRlbnRpYWxzXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENyZWRlbnRpYWxzXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYWNoZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjYWNoZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDYWNoZVxuICB9LFxuICB7XG4gICAga2V5OiAncmVkaXJlY3QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0cmVkaXJlY3RcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0UmVkaXJlY3RcbiAgfSxcbiAge1xuICAgIGtleTogJ2ludGVncml0eScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2tlZXBhbGl2ZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzaWduYWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgKHNpZ25hbCkgPT4gd2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwoXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH1cbiAgICAgIClcbiAgICApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd3aW5kb3cnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkdXBsZXgnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3REdXBsZXhcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7IFJlcXVlc3QsIG1ha2VSZXF1ZXN0IH1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdFx1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNlXHUyMDE5cyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFsXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdFx1MjAxOXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZVx1MjAxOXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN0XHUyMDE5cyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHdpbmRvdyB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gY2xpZW50XHUyMDE5cyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lclx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNlXHUyMDE5cyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgYHRleHQvaHRtbDtjaGFyc2V0PXV0Zi04YCkgXHUwMEJCLFxuICAgICAgLy8gYW5kIGJvZHkgaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UgYXMgYSBib2R5LlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Fib3V0IHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkJykpXG4gICAgfVxuICAgIGNhc2UgJ2Jsb2I6Jzoge1xuICAgICAgaWYgKCFyZXNvbHZlT2JqZWN0VVJMKSB7XG4gICAgICAgIHJlc29sdmVPYmplY3RVUkwgPSByZXF1aXJlKCdidWZmZXInKS5yZXNvbHZlT2JqZWN0VVJMXG4gICAgICB9XG5cbiAgICAgIC8vIDEuIExldCBibG9iVVJMRW50cnkgYmUgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGJsb2IgVVJMIGVudHJ5LlxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvYmxvYi83YjBlYmFjY2M2MmI1NjZhMTk2NTM5NmU1YmU3YmIyYmMwNmY4NDFmL0ZpbGVBUEkvdXJsL3Jlc291cmNlcy9mZXRjaC10ZXN0cy5qcyNMNTItTDU2XG4gICAgICAvLyBCdWZmZXIucmVzb2x2ZU9iamVjdFVSTCBkb2VzIG5vdCBpZ25vcmUgVVJMIHF1ZXJpZXMuXG4gICAgICBpZiAoYmxvYlVSTEVudHJ5LnNlYXJjaC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdOZXR3b3JrRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlLicpKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnlPYmplY3QgPSByZXNvbHZlT2JqZWN0VVJMKGJsb2JVUkxFbnRyeS50b1N0cmluZygpKVxuXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgLCBibG9iVVJMRW50cnkgaXMgbnVsbCwgb3IgYmxvYlVSTEVudHJ5XHUyMDE5c1xuICAgICAgLy8gICAgb2JqZWN0IGlzIG5vdCBhIEJsb2Igb2JqZWN0LCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnIHx8ICFpc0Jsb2JMaWtlKGJsb2JVUkxFbnRyeU9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdpbnZhbGlkIG1ldGhvZCcpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBMZXQgYm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgYmxvYlVSTEVudHJ5XHUyMDE5cyBvYmplY3QuXG4gICAgICBjb25zdCBib2R5V2l0aFR5cGUgPSBzYWZlbHlFeHRyYWN0Qm9keShibG9iVVJMRW50cnlPYmplY3QpXG5cbiAgICAgIC8vIDQuIExldCBib2R5IGJlIGJvZHlXaXRoVHlwZVx1MjAxOXMgYm9keS5cbiAgICAgIGNvbnN0IGJvZHkgPSBib2R5V2l0aFR5cGVbMF1cblxuICAgICAgLy8gNS4gTGV0IGxlbmd0aCBiZSBib2R5XHUyMDE5cyBsZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Ym9keS5sZW5ndGh9YClcblxuICAgICAgLy8gNi4gTGV0IHR5cGUgYmUgYm9keVdpdGhUeXBlXHUyMDE5cyB0eXBlIGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2UgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gICAgICBjb25zdCB0eXBlID0gYm9keVdpdGhUeXBlWzFdID8/ICcnXG5cbiAgICAgIC8vIDcuIFJldHVybiBhIG5ldyByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpc1xuICAgICAgLy8gICAgXHUwMEFCIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIFx1MDBCQiwgYW5kIGJvZHkgaXMgYm9keS5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtbGVuZ3RoJywgeyBuYW1lOiAnQ29udGVudC1MZW5ndGgnLCB2YWx1ZTogbGVuZ3RoIH1dLFxuICAgICAgICAgIFsnY29udGVudC10eXBlJywgeyBuYW1lOiAnQ29udGVudC1UeXBlJywgdmFsdWU6IHR5cGUgfV1cbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgcmVzcG9uc2UuYm9keSA9IGJvZHlcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICB9XG4gICAgY2FzZSAnZGF0YTonOiB7XG4gICAgICAvLyAxLiBMZXQgZGF0YVVSTFN0cnVjdCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlXG4gICAgICAvLyAgICBkYXRhOiBVUkwgcHJvY2Vzc29yIG9uIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgICBjb25zdCBkYXRhVVJMU3RydWN0ID0gZGF0YVVSTFByb2Nlc3NvcihjdXJyZW50VVJMKVxuXG4gICAgICAvLyAyLiBJZiBkYXRhVVJMU3RydWN0IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGFcbiAgICAgIC8vICAgIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAoZGF0YVVSTFN0cnVjdCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignZmFpbGVkIHRvIGZldGNoIHRoZSBkYXRhIFVSTCcpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBMZXQgbWltZVR5cGUgYmUgZGF0YVVSTFN0cnVjdFx1MjAxOXMgTUlNRSB0eXBlLCBzZXJpYWxpemVkLlxuICAgICAgY29uc3QgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUoZGF0YVVSTFN0cnVjdC5taW1lVHlwZSlcblxuICAgICAgLy8gNC4gUmV0dXJuIGEgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCxcbiAgICAgIC8vICAgIGhlYWRlciBsaXN0IGlzIFx1MDBBQiAoYENvbnRlbnQtVHlwZWAsIG1pbWVUeXBlKSBcdTAwQkIsXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN0XHUyMDE5cyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IHRvIFx1MDBBQiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3RbMF0gXHUwMEJCLlxuICAgIHJlc3BvbnNlLnVybExpc3QgPSBbZmV0Y2hQYXJhbXMucmVxdWVzdC51cmxMaXN0WzBdXVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmdcbiAgICAvLyBpbmZvIGZvciBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gICAgcmVzcG9uc2UudGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgICAgc3RhcnRUaW1lOiBmZXRjaFBhcmFtcy50aW1pbmdJbmZvLnN0YXJ0VGltZVxuICAgIH0pXG4gIH1cblxuICAvLyAyLiBMZXQgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IGJlIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSA9ICgpID0+IHtcbiAgICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgICAvLyBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2VcbiAgICAvLyBlbmQtb2YtYm9keSBnaXZlbiByZXNwb25zZSB3aXRoIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgIT0gbnVsbCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KHJlc3BvbnNlKSlcbiAgICB9XG4gIH1cblxuICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBpcyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2tcbiAgLy8gdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlLCB3aXRoIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpKVxuICB9XG5cbiAgLy8gNC4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgfSBlbHNlIHtcbiAgLy8gNS4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IHRyYW5zZm9ybVN0cmVhbSBiZSBhIG5ldyBhIFRyYW5zZm9ybVN0cmVhbS5cblxuICAgIC8vIDIuIExldCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gd2hpY2gsIGdpdmVuIGNodW5rLFxuICAgIC8vIGVucXVldWVzIGNodW5rIGluIHRyYW5zZm9ybVN0cmVhbS5cbiAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKVxuICAgIH1cblxuICAgIC8vIDMuIFNldCB1cCB0cmFuc2Zvcm1TdHJlYW0gd2l0aCB0cmFuc2Zvcm1BbGdvcml0aG0gc2V0IHRvIGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtXG4gICAgLy8gYW5kIGZsdXNoQWxnb3JpdGhtIHNldCB0byBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkuXG4gICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHRyYW5zZm9ybTogaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0sXG4gICAgICBmbHVzaDogcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5XG4gICAgfSwge1xuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDQuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGUgcmVzdWx0IG9mIHBpcGluZyByZXNwb25zZVx1MjAxOXMgYm9keSB0aHJvdWdoIHRyYW5zZm9ybVN0cmVhbS5cbiAgICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW06IHJlc3BvbnNlLmJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKHRyYW5zZm9ybVN0cmVhbSkgfVxuICB9XG5cbiAgLy8gNi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkgIT0gbnVsbCkge1xuICAgIC8vIDEuIExldCBwcm9jZXNzQm9keSBnaXZlbiBudWxsT3JCeXRlcyBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgbnVsbE9yQnl0ZXMuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHkgPSAobnVsbE9yQnl0ZXMpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBudWxsT3JCeXRlcylcblxuICAgIC8vIDIuIExldCBwcm9jZXNzQm9keUVycm9yIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzXG4gICAgLy8gcmVzcG9uc2UgY29uc3VtZSBib2R5IGdpdmVuIHJlc3BvbnNlIGFuZCBmYWlsdXJlLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZmFpbHVyZSkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkocmVzcG9uc2UsIGZhaWx1cmUpXG5cbiAgICAvLyAzLiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHlcbiAgICAvLyBnaXZlbiBudWxsLCB3aXRoIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHByb2Nlc3NCb2R5KG51bGwpKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IsXG4gICAgICAvLyBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgICByZXR1cm4gZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IGFjdHVhbFJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA1LiBJZiByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcImFsbFwiLCB0aGVuOlxuICBpZiAocmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9PT0gJ2FsbCcpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICAvLyAxLiBJZiBtYWtlQ09SU1ByZWZsaWdodCBpcyB0cnVlIGFuZCBvbmUgb2YgdGhlc2UgY29uZGl0aW9ucyBpcyB0cnVlOlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXMgXCJmb2xsb3dcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgICAvLyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycpIHtcbiAgICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgcmVzcG9uc2UgYW5kIGFjdHVhbFJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgIC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICBhY3R1YWxSZXNwb25zZSA9IHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goZmV0Y2hQYXJhbXMpXG5cbiAgICAvLyA0LiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgYSBDT1JTIGNoZWNrXG4gICAgLy8gZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgICBjb3JzQ2hlY2socmVxdWVzdCwgcmVzcG9uc2UpID09PSAnZmFpbHVyZSdcbiAgICApIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdjb3JzIGZhaWx1cmUnKVxuICAgIH1cblxuICAgIC8vIDUuIElmIHRoZSBUQU8gY2hlY2sgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyB0aW1pbmcgYWxsb3cgZmFpbGVkIGZsYWcuXG4gICAgaWYgKFRBT0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICByZXF1ZXN0LnRpbWluZ0FsbG93RmFpbGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIElmIGVpdGhlciByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBvciByZXNwb25zZVx1MjAxOXMgdHlwZVxuICAvLyBpcyBcIm9wYXF1ZVwiLCBhbmQgdGhlIGNyb3NzLW9yaWdpbiByZXNvdXJjZSBwb2xpY3kgY2hlY2sgd2l0aFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4sIHJlcXVlc3RcdTIwMTlzIGNsaWVudCwgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24sXG4gIC8vIGFuZCBhY3R1YWxSZXNwb25zZSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLnR5cGUgPT09ICdvcGFxdWUnKSAmJlxuICAgIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayhcbiAgICAgIHJlcXVlc3Qub3JpZ2luLFxuICAgICAgcmVxdWVzdC5jbGllbnQsXG4gICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uLFxuICAgICAgYWN0dWFsUmVzcG9uc2VcbiAgICApID09PSAnYmxvY2tlZCdcbiAgKSB7XG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ2Jsb2NrZWQnKVxuICB9XG5cbiAgLy8gOC4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbjpcbiAgaWYgKHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgLy8gMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vdCBudWxsLFxuICAgIC8vIGFuZCB0aGUgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB1c2VyIGFnZW50cyBtYXksIGFuZCBhcmUgZXZlblxuICAgIC8vIGVuY291cmFnZWQgdG8sIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjg4XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gICAgfVxuXG4gICAgLy8gMi4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGU6XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ3VuZXhwZWN0ZWQgcmVkaXJlY3QnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ21hbnVhbCcpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byBhbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWxcbiAgICAgIC8vIHJlc3BvbnNlIGlzIGFjdHVhbFJlc3BvbnNlLlxuICAgICAgLy8gTk9URShzcGVjKTogT24gdGhlIHdlYiB0aGlzIHdvdWxkIHJldHVybiBhbiBgb3BhcXVlcmVkaXJlY3RgIHJlc3BvbnNlLFxuICAgICAgLy8gYnV0IHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlIHNlcnZlciBzaWRlLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMTkzLlxuICAgICAgcmVzcG9uc2UgPSBhY3R1YWxSZXNwb25zZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1yZWRpcmVjdCBmZXRjaCBnaXZlblxuICAgICAgLy8gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBodHRwUmVkaXJlY3RGZXRjaChmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyA5LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTAuIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXJlZGlyZWN0LWZldGNoXG5mdW5jdGlvbiBodHRwUmVkaXJlY3RGZXRjaCAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBhY3R1YWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWQgcmVzcG9uc2UsXG4gIC8vIGFuZCByZXNwb25zZVx1MjAxOXMgaW50ZXJuYWwgcmVzcG9uc2Ugb3RoZXJ3aXNlLlxuICBjb25zdCBhY3R1YWxSZXNwb25zZSA9IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcbiAgICA/IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcbiAgICA6IHJlc3BvbnNlXG5cbiAgLy8gMy4gTGV0IGxvY2F0aW9uVVJMIGJlIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBsb2NhdGlvbiBVUkwgZ2l2ZW4gcmVxdWVzdFx1MjAxOXMgY3VycmVudFxuICAvLyBVUkxcdTIwMTlzIGZyYWdtZW50LlxuICBsZXQgbG9jYXRpb25VUkxcblxuICB0cnkge1xuICAgIGxvY2F0aW9uVVJMID0gcmVzcG9uc2VMb2NhdGlvblVSTChcbiAgICAgIGFjdHVhbFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkuaGFzaFxuICAgIClcblxuICAgIC8vIDQuIElmIGxvY2F0aW9uVVJMIGlzIG51bGwsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICAgIGlmIChsb2NhdGlvblVSTCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDUuIElmIGxvY2F0aW9uVVJMIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgfVxuXG4gIC8vIDYuIElmIGxvY2F0aW9uVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgLy8gZXJyb3IuXG4gIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUobG9jYXRpb25VUkwpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpKVxuICB9XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgY291bnQgaXMgMjAsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMjApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3JlZGlyZWN0IGNvdW50IGV4Y2VlZGVkJykpXG4gIH1cblxuICAvLyA4LiBJbmNyZWFzZSByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBieSAxLlxuICByZXF1ZXN0LnJlZGlyZWN0Q291bnQgKz0gMVxuXG4gIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJjb3JzXCIsIGxvY2F0aW9uVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCBhbmRcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5cyBvcmlnaW4sIHRoZW4gcmV0dXJuXG4gIC8vICBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0Lm1vZGUgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZCkgJiZcbiAgICAhc2FtZU9yaWdpbihyZXF1ZXN0LCBsb2NhdGlvblVSTClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdjcm9zcyBvcmlnaW4gbm90IGFsbG93ZWQgZm9yIHJlcXVlc3QgbW9kZSBcImNvcnNcIicpKVxuICB9XG5cbiAgLy8gMTAuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIGFuZCBsb2NhdGlvblVSTCBpbmNsdWRlc1xuICAvLyBjcmVkZW50aWFscywgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihcbiAgICAgICdVUkwgY2Fubm90IGNvbnRhaW4gY3JlZGVudGlhbHMgZm9yIHJlcXVlc3QgbW9kZSBcImNvcnNcIidcbiAgICApKVxuICB9XG5cbiAgLy8gMTEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICBhY3R1YWxSZXNwb25zZS5zdGF0dXMgIT09IDMwMyAmJlxuICAgIHJlcXVlc3QuYm9keSAhPSBudWxsICYmXG4gICAgcmVxdWVzdC5ib2R5LnNvdXJjZSA9PSBudWxsXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigpKVxuICB9XG5cbiAgLy8gMTIuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgLy8gLSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDMwMSBvciAzMDIgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgUE9TVGBcbiAgLy8gLSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDMwMyBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5vdCBgR0VUYCBvciBgSEVBRGBcbiAgaWYgKFxuICAgIChbMzAxLCAzMDJdLmluY2x1ZGVzKGFjdHVhbFJlc3BvbnNlLnN0YXR1cykgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJykgfHxcbiAgICAoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzID09PSAzMDMgJiZcbiAgICAgICFHRVRfT1JfSEVBRC5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkpXG4gICkge1xuICAgIC8vIHRoZW46XG4gICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBgR0VUYCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keSB0byBudWxsLlxuICAgIHJlcXVlc3QubWV0aG9kID0gJ0dFVCdcbiAgICByZXF1ZXN0LmJvZHkgPSBudWxsXG5cbiAgICAvLyAyLiBGb3IgZWFjaCBoZWFkZXJOYW1lIG9mIHJlcXVlc3QtYm9keS1oZWFkZXIgbmFtZSwgZGVsZXRlIGhlYWRlck5hbWUgZnJvbVxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiByZXF1ZXN0Qm9keUhlYWRlcikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoaGVhZGVyTmFtZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTFx1MjAxOXNcbiAgLy8gICAgIG9yaWdpbiwgdGhlbiBmb3IgZWFjaCBoZWFkZXJOYW1lIG9mIENPUlMgbm9uLXdpbGRjYXJkIHJlcXVlc3QtaGVhZGVyIG5hbWUsXG4gIC8vICAgICBkZWxldGUgaGVhZGVyTmFtZSBmcm9tIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXNhbWVPcmlnaW4ocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCksIGxvY2F0aW9uVVJMKSkge1xuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLW5vbi13aWxkY2FyZC1yZXF1ZXN0LWhlYWRlci1uYW1lXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2F1dGhvcml6YXRpb24nKVxuXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2F1dGhlbnRpY2F0aW9uLWVudHJpZXNcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgncHJveHktYXV0aG9yaXphdGlvbicsIHRydWUpXG5cbiAgICAvLyBcIkNvb2tpZVwiIGFuZCBcIkhvc3RcIiBhcmUgZm9yYmlkZGVuIHJlcXVlc3QtaGVhZGVycywgd2hpY2ggdW5kaWNpIGRvZXNuJ3QgaW1wbGVtZW50LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdjb29raWUnKVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIHRoZSBmaXJzdCByZXR1cm5cbiAgLy8gdmFsdWUgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICBhc3NlcnQocmVxdWVzdC5ib2R5LnNvdXJjZSAhPSBudWxsKVxuICAgIHJlcXVlc3QuYm9keSA9IHNhZmVseUV4dHJhY3RCb2R5KHJlcXVlc3QuYm9keS5zb3VyY2UpWzBdXG4gIH1cblxuICAvLyAxNS4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDE2LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgcmVkaXJlY3QgZW5kIHRpbWUgYW5kIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSB0byB0aGVcbiAgLy8gY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5LlxuICB0aW1pbmdJbmZvLnJlZGlyZWN0RW5kVGltZSA9IHRpbWluZ0luZm8ucG9zdFJlZGlyZWN0U3RhcnRUaW1lID1cbiAgICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShmZXRjaFBhcmFtcy5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcblxuICAvLyAxNy4gSWYgdGltaW5nSW5mb1x1MjAxOXMgcmVkaXJlY3Qgc3RhcnQgdGltZSBpcyAwLCB0aGVuIHNldCB0aW1pbmdJbmZvXHUyMDE5c1xuICAvLyAgcmVkaXJlY3Qgc3RhcnQgdGltZSB0byB0aW1pbmdJbmZvXHUyMDE5cyBzdGFydCB0aW1lLlxuICBpZiAodGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9PT0gMCkge1xuICAgIHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPSB0aW1pbmdJbmZvLnN0YXJ0VGltZVxuICB9XG5cbiAgLy8gMTguIEFwcGVuZCBsb2NhdGlvblVSTCB0byByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgcmVxdWVzdC51cmxMaXN0LnB1c2gobG9jYXRpb25VUkwpXG5cbiAgLy8gMTkuIEludm9rZSBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IG9uIHJlZGlyZWN0IG9uIHJlcXVlc3QgYW5kXG4gIC8vIGFjdHVhbFJlc3BvbnNlLlxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0KHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKVxuXG4gIC8vIDIwLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHRydWUuXG4gIHJldHVybiBtYWluRmV0Y2goZmV0Y2hQYXJhbXMsIHRydWUpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstb3ItY2FjaGUtZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoIChcbiAgZmV0Y2hQYXJhbXMsXG4gIGlzQXV0aGVudGljYXRpb25GZXRjaCA9IGZhbHNlLFxuICBpc05ld0Nvbm5lY3Rpb25GZXRjaCA9IGZhbHNlXG4pIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGh0dHBGZXRjaFBhcmFtcyBiZSBudWxsLlxuICBsZXQgaHR0cEZldGNoUGFyYW1zID0gbnVsbFxuXG4gIC8vIDMuIExldCBodHRwUmVxdWVzdCBiZSBudWxsLlxuICBsZXQgaHR0cFJlcXVlc3QgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyA1LiBMZXQgc3RvcmVkUmVzcG9uc2UgYmUgbnVsbC5cbiAgLy8gVE9ETzogY2FjaGVcblxuICAvLyA2LiBMZXQgaHR0cENhY2hlIGJlIG51bGwuXG4gIGNvbnN0IGh0dHBDYWNoZSA9IG51bGxcblxuICAvLyA3LiBMZXQgdGhlIHJldmFsaWRhdGluZ0ZsYWcgYmUgdW5zZXQuXG4gIGNvbnN0IHJldmFsaWRhdGluZ0ZsYWcgPSBmYWxzZVxuXG4gIC8vIDguIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiBhbmQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpc1xuICAvLyAgICBcImVycm9yXCIsIHRoZW4gc2V0IGh0dHBGZXRjaFBhcmFtcyB0byBmZXRjaFBhcmFtcyBhbmQgaHR0cFJlcXVlc3QgdG9cbiAgLy8gICAgcmVxdWVzdC5cbiAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnbm8td2luZG93JyAmJiByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgaHR0cEZldGNoUGFyYW1zID0gZmV0Y2hQYXJhbXNcbiAgICBodHRwUmVxdWVzdCA9IHJlcXVlc3RcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBTZXQgaHR0cFJlcXVlc3QgdG8gYSBjbG9uZSBvZiByZXF1ZXN0LlxuICAgIGh0dHBSZXF1ZXN0ID0gbWFrZVJlcXVlc3QocmVxdWVzdClcblxuICAgIC8vIDIuIFNldCBodHRwRmV0Y2hQYXJhbXMgdG8gYSBjb3B5IG9mIGZldGNoUGFyYW1zLlxuICAgIGh0dHBGZXRjaFBhcmFtcyA9IHsgLi4uZmV0Y2hQYXJhbXMgfVxuXG4gICAgLy8gMy4gU2V0IGh0dHBGZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdCB0byBodHRwUmVxdWVzdC5cbiAgICBodHRwRmV0Y2hQYXJhbXMucmVxdWVzdCA9IGh0dHBSZXF1ZXN0XG4gIH1cblxuICAvLyAgICAzLiBMZXQgaW5jbHVkZUNyZWRlbnRpYWxzIGJlIHRydWUgaWYgb25lIG9mXG4gIGNvbnN0IGluY2x1ZGVDcmVkZW50aWFscyA9XG4gICAgcmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnIHx8XG4gICAgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdzYW1lLW9yaWdpbicgJiZcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJylcblxuICAvLyAgICA0LiBMZXQgY29udGVudExlbmd0aCBiZSBodHRwUmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgbGVuZ3RoLCBpZiBodHRwUmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgYm9keSBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBodHRwUmVxdWVzdC5ib2R5ID8gaHR0cFJlcXVlc3QuYm9keS5sZW5ndGggOiBudWxsXG5cbiAgLy8gICAgNS4gTGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBiZSBudWxsLlxuICBsZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gbnVsbFxuXG4gIC8vICAgIDYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgIG9yXG4gIC8vICAgIGBQVVRgLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gYDBgLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuYm9keSA9PSBudWxsICYmXG4gICAgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKGh0dHBSZXF1ZXN0Lm1ldGhvZClcbiAgKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gJzAnXG4gIH1cblxuICAvLyAgICA3LiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG9cbiAgLy8gICAgY29udGVudExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShgJHtjb250ZW50TGVuZ3RofWApXG4gIH1cblxuICAvLyAgICA4LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDb250ZW50LUxlbmd0aGAvY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSAhPSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSlcbiAgfVxuXG4gIC8vICAgIDkuIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LUxlbmd0aGAsXG4gIC8vICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSkgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDEwLiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIGlzIHRydWUsXG4gIC8vICAgIHRoZW46XG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgaHR0cFJlcXVlc3Qua2VlcGFsaXZlKSB7XG4gICAgLy8gTk9URToga2VlcGFsaXZlIGlzIGEgbm9vcCBvdXRzaWRlIG9mIGJyb3dzZXIgY29udGV4dC5cbiAgfVxuXG4gIC8vICAgIDExLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgYSBVUkwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBSZWZlcmVyYC9odHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZCxcbiAgLy8gICAgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdyZWZlcmVyJywgaXNvbW9ycGhpY0VuY29kZShodHRwUmVxdWVzdC5yZWZlcnJlci5ocmVmKSlcbiAgfVxuXG4gIC8vICAgIDEyLiBBcHBlbmQgYSByZXF1ZXN0IGBPcmlnaW5gIGhlYWRlciBmb3IgaHR0cFJlcXVlc3QuXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTMuIEFwcGVuZCB0aGUgRmV0Y2ggbWV0YWRhdGEgaGVhZGVycyBmb3IgaHR0cFJlcXVlc3QuIFtGRVRDSC1NRVRBREFUQV1cbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YShodHRwUmVxdWVzdClcblxuICAvLyAgICAxNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFVzZXItQWdlbnRgLCB0aGVuXG4gIC8vICAgIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYFVzZXItQWdlbnRgL2RlZmF1bHQgYFVzZXItQWdlbnRgIHZhbHVlIHRvXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygndXNlci1hZ2VudCcpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCd1c2VyLWFnZW50JywgdHlwZW9mIGVzYnVpbGREZXRlY3Rpb24gPT09ICd1bmRlZmluZWQnID8gJ3VuZGljaScgOiAnbm9kZScpXG4gIH1cblxuICAvLyAgICAxNS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJkZWZhdWx0XCIgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdCBjb250YWlucyBgSWYtTW9kaWZpZWQtU2luY2VgLCBgSWYtTm9uZS1NYXRjaGAsXG4gIC8vICAgIGBJZi1Vbm1vZGlmaWVkLVNpbmNlYCwgYElmLU1hdGNoYCwgb3IgYElmLVJhbmdlYCwgdGhlbiBzZXRcbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdkZWZhdWx0JyAmJlxuICAgIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbW9kaWZpZWQtc2luY2UnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW5vbmUtbWF0Y2gnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXVubW9kaWZpZWQtc2luY2UnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1yYW5nZScpKVxuICApIHtcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vICAgIDE2LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm5vLWNhY2hlXCIsIGh0dHBSZXF1ZXN0XHUyMDE5cyBwcmV2ZW50XG4gIC8vICAgIG5vLWNhY2hlIGNhY2hlLWNvbnRyb2wgaGVhZGVyIG1vZGlmaWNhdGlvbiBmbGFnIGlzIHVuc2V0LCBhbmRcbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYENhY2hlLUNvbnRyb2xgLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ2FjaGUtQ29udHJvbGAvYG1heC1hZ2U9MGAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1jYWNoZScgJiZcbiAgICAhaHR0cFJlcXVlc3QucHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb24gJiZcbiAgICAhaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnKVxuICApIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbWF4LWFnZT0wJylcbiAgfVxuXG4gIC8vICAgIDE3LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgb3IgXCJyZWxvYWRcIiwgdGhlbjpcbiAgaWYgKGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IGh0dHBSZXF1ZXN0LmNhY2hlID09PSAncmVsb2FkJykge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBQcmFnbWFgLCB0aGVuIGFwcGVuZFxuICAgIC8vIGBQcmFnbWFgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ByYWdtYScpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3ByYWdtYScsICduby1jYWNoZScpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYENhY2hlLUNvbnRyb2xgLFxuICAgIC8vIHRoZW4gYXBwZW5kIGBDYWNoZS1Db250cm9sYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJykpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICduby1jYWNoZScpXG4gICAgfVxuICB9XG5cbiAgLy8gICAgMTguIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgUmFuZ2VgLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQWNjZXB0LUVuY29kaW5nYC9gaWRlbnRpdHlgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnaWRlbnRpdHknKVxuICB9XG5cbiAgLy8gICAgMTkuIE1vZGlmeSBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgcGVyIEhUVFAuIERvIG5vdCBhcHBlbmQgYSBnaXZlblxuICAvLyAgICBoZWFkZXIgaWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIHRoYXQgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAvLyAgICBUT0RPOiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjg1I2lzc3VlY29tbWVudC04OTY1NjAxMjlcbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWVuY29kaW5nJykpIHtcbiAgICBpZiAodXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwoaHR0cFJlcXVlc3QpKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnYnIsIGd6aXAsIGRlZmxhdGUnKVxuICAgIH0gZWxzZSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdnemlwLCBkZWZsYXRlJylcbiAgICB9XG4gIH1cblxuICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnKVxuXG4gIC8vICAgIDIwLiBJZiBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKGluY2x1ZGVDcmVkZW50aWFscykge1xuICAgIC8vIDEuIElmIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkIHRvIGJsb2NrIGNvb2tpZXMgZm9yIGh0dHBSZXF1ZXN0XG4gICAgLy8gKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbjpcbiAgICAvLyBUT0RPOiBjcmVkZW50aWFsc1xuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBdXRob3JpemF0aW9uYCwgdGhlbjpcbiAgICAvLyBUT0RPOiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLy8gICAgMjEuIElmIHRoZXJlXHUyMDE5cyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LCB1c2UgaXQgYXMgYXBwcm9wcmlhdGUuXG4gIC8vICAgIFRPRE86IHByb3h5LWF1dGhlbnRpY2F0aW9uXG5cbiAgLy8gICAgMjIuIFNldCBodHRwQ2FjaGUgdG8gdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgSFRUUCBjYWNoZVxuICAvLyAgICBwYXJ0aXRpb24sIGdpdmVuIGh0dHBSZXF1ZXN0LlxuICAvLyAgICBUT0RPOiBjYWNoZVxuXG4gIC8vICAgIDIzLiBJZiBodHRwQ2FjaGUgaXMgbnVsbCwgdGhlbiBzZXQgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG9cbiAgLy8gICAgXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vICAgIDI0LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBuZWl0aGVyIFwibm8tc3RvcmVcIiBub3IgXCJyZWxvYWRcIixcbiAgLy8gICAgdGhlbjpcbiAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICduby1zdG9yZScgJiYgaHR0cFJlcXVlc3QubW9kZSAhPT0gJ3JlbG9hZCcpIHtcbiAgICAvLyBUT0RPOiBjYWNoZVxuICB9XG5cbiAgLy8gOS4gSWYgYWJvcnRlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiLCB0aGVuIHJldHVybiBhXG4gICAgLy8gbmV0d29yayBlcnJvci5cbiAgICBpZiAoaHR0cFJlcXVlc3QubW9kZSA9PT0gJ29ubHktaWYtY2FjaGVkJykge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ29ubHkgaWYgY2FjaGVkJylcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgZm9yd2FyZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmsgZmV0Y2hcbiAgICAvLyBnaXZlbiBodHRwRmV0Y2hQYXJhbXMsIGluY2x1ZGVDcmVkZW50aWFscywgYW5kIGlzTmV3Q29ubmVjdGlvbkZldGNoLlxuICAgIGNvbnN0IGZvcndhcmRSZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrRmV0Y2goXG4gICAgICBodHRwRmV0Y2hQYXJhbXMsXG4gICAgICBpbmNsdWRlQ3JlZGVudGlhbHMsXG4gICAgICBpc05ld0Nvbm5lY3Rpb25GZXRjaFxuICAgIClcblxuICAgIC8vIDMuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgdW5zYWZlIGFuZCBmb3J3YXJkUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpc1xuICAgIC8vIGluIHRoZSByYW5nZSAyMDAgdG8gMzk5LCBpbmNsdXNpdmUsIGludmFsaWRhdGUgYXBwcm9wcmlhdGUgc3RvcmVkXG4gICAgLy8gcmVzcG9uc2VzIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZSBcIkludmFsaWRhdGlvblwiIGNoYXB0ZXIgb2YgSFRUUFxuICAgIC8vIENhY2hpbmcsIGFuZCBzZXQgc3RvcmVkUmVzcG9uc2UgdG8gbnVsbC4gW0hUVFAtQ0FDSElOR11cbiAgICBpZiAoXG4gICAgICAhc2FmZU1ldGhvZHNTZXQuaGFzKGh0dHBSZXF1ZXN0Lm1ldGhvZCkgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzIDw9IDM5OVxuICAgICkge1xuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG5cbiAgICAvLyA0LiBJZiB0aGUgcmV2YWxpZGF0aW5nRmxhZyBpcyBzZXQgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDMwNCxcbiAgICAvLyB0aGVuOlxuICAgIGlmIChyZXZhbGlkYXRpbmdGbGFnICYmIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPT09IDMwNCkge1xuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG5cbiAgICAvLyA1LiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICAgIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2UgdG8gZm9yd2FyZFJlc3BvbnNlLlxuICAgICAgcmVzcG9uc2UgPSBmb3J3YXJkUmVzcG9uc2VcblxuICAgICAgLy8gMi4gU3RvcmUgaHR0cFJlcXVlc3QgYW5kIGZvcndhcmRSZXNwb25zZSBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGVcbiAgICAgIC8vIFwiU3RvcmluZyBSZXNwb25zZXMgaW4gQ2FjaGVzXCIgY2hhcHRlciBvZiBIVFRQIENhY2hpbmcuIFtIVFRQLUNBQ0hJTkddXG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cbiAgfVxuXG4gIC8vIDExLiBTZXQgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IHRvIGEgY2xvbmUgb2YgaHR0cFJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXNwb25zZS51cmxMaXN0ID0gWy4uLmh0dHBSZXF1ZXN0LnVybExpc3RdXG5cbiAgLy8gMTIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZVx1MjAxOXNcbiAgLy8gcmFuZ2UtcmVxdWVzdGVkIGZsYWcuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIHJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTMuIFNldCByZXNwb25zZVx1MjAxOXMgcmVxdWVzdC1pbmNsdWRlcy1jcmVkZW50aWFscyB0byBpbmNsdWRlQ3JlZGVudGlhbHMuXG4gIHJlc3BvbnNlLnJlcXVlc3RJbmNsdWRlc0NyZWRlbnRpYWxzID0gaW5jbHVkZUNyZWRlbnRpYWxzXG5cbiAgLy8gMTQuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDAxLCBodHRwUmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgbm90XG4gIC8vIFwiY29yc1wiLCBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgYW5kIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudFxuICAvLyBzZXR0aW5ncyBvYmplY3QsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxNS4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDcsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNykge1xuICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnbm8td2luZG93Jykge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIH1cblxuICAgIC8vIDIuID8/P1xuXG4gICAgLy8gMy4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKVxuICAgIH1cblxuICAgIC8vIDQuIFByb21wdCB0aGUgZW5kIHVzZXIgYXMgYXBwcm9wcmlhdGUgaW4gcmVxdWVzdFx1MjAxOXMgd2luZG93IGFuZCBzdG9yZVxuICAgIC8vIHRoZSByZXN1bHQgYXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeS4gW0hUVFAtQVVUSF1cbiAgICAvLyBUT0RPOiBJbnZva2Ugc29tZSBraW5kIG9mIGNhbGxiYWNrP1xuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW5cbiAgICAvLyBmZXRjaFBhcmFtcy5cbiAgICAvLyBUT0RPXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3Byb3h5IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkJylcbiAgfVxuXG4gIC8vIDE2LiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICBpZiAoXG4gICAgLy8gcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MjFcbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDQyMSAmJlxuICAgIC8vIGlzTmV3Q29ubmVjdGlvbkZldGNoIGlzIGZhbHNlXG4gICAgIWlzTmV3Q29ubmVjdGlvbkZldGNoICYmXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBudWxsLCBvciByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbm9uLW51bGxcbiAgICAocmVxdWVzdC5ib2R5ID09IG51bGwgfHwgcmVxdWVzdC5ib2R5LnNvdXJjZSAhPSBudWxsKVxuICApIHtcbiAgICAvLyB0aGVuOlxuXG4gICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlXG4gICAgLy8gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMsIGlzQXV0aGVudGljYXRpb25GZXRjaCwgYW5kIHRydWUuXG5cbiAgICAvLyBUT0RPIChzcGVjKTogVGhlIHNwZWMgZG9lc24ndCBzcGVjaWZ5IHRoaXMgYnV0IHdlIG5lZWQgdG8gY2FuY2VsXG4gICAgLy8gdGhlIGFjdGl2ZSByZXNwb25zZSBiZWZvcmUgd2UgY2FuIHN0YXJ0IGEgbmV3IG9uZS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjkzXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgcmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya09yQ2FjaGVGZXRjaChcbiAgICAgIGZldGNoUGFyYW1zLFxuICAgICAgaXNBdXRoZW50aWNhdGlvbkZldGNoLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgfVxuXG4gIC8vIDE3LiBJZiBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gYXV0aGVudGljYXRpb24gZW50cnlcbiAgaWYgKGlzQXV0aGVudGljYXRpb25GZXRjaCkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE4LiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya0ZldGNoIChcbiAgZmV0Y2hQYXJhbXMsXG4gIGluY2x1ZGVDcmVkZW50aWFscyA9IGZhbHNlLFxuICBmb3JjZU5ld0Nvbm5lY3Rpb24gPSBmYWxzZVxuKSB7XG4gIGFzc2VydCghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uIHx8IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95ZWQpXG5cbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uID0ge1xuICAgIGFib3J0OiBudWxsLFxuICAgIGRlc3Ryb3llZDogZmFsc2UsXG4gICAgZGVzdHJveSAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmFib3J0Py4oZXJyID8/IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA0LiBMZXQgaHR0cENhY2hlIGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGUgcGFydGl0aW9uLFxuICAvLyBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPOiBjYWNoZVxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNS4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICByZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gNi4gTGV0IG5ldHdvcmtQYXJ0aXRpb25LZXkgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgbmV0d29ya1xuICAvLyBwYXJ0aXRpb24ga2V5IGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA3LiBMZXQgbmV3Q29ubmVjdGlvbiBiZSBcInllc1wiIGlmIGZvcmNlTmV3Q29ubmVjdGlvbiBpcyB0cnVlOyBvdGhlcndpc2VcbiAgLy8gXCJub1wiLlxuICBjb25zdCBuZXdDb25uZWN0aW9uID0gZm9yY2VOZXdDb25uZWN0aW9uID8gJ3llcycgOiAnbm8nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvLyA4LiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgbW9kZTpcbiAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLFxuICAgIC8vIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgIC8vIFRPRE9cbiAgfSBlbHNlIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIGNvbm5lY3Rpb24sIGdpdmVuXG4gICAgLy8gbmV0d29ya1BhcnRpdGlvbktleSwgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbixcbiAgICAvLyBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBmb3JjZU5ld0Nvbm5lY3Rpb24uXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gOS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIGNvbm5lY3Rpb24gaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlbiBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXNcbiAgLy8gICAgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSwgYW5kIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyAgICBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cblxuICAvLyAgICAzLiBJZiBjb25uZWN0aW9uIGlzIG5vdCBhbiBIVFRQLzIgY29ubmVjdGlvbiwgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gICAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIGFwcGVuZCAoYFRyYW5zZmVyLUVuY29kaW5nYCxcbiAgLy8gICAgYGNodW5rZWRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICA0LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gICAgY2FwYWJpbGl0eS5cblxuICAvLyAgICA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBtYWtpbmcgYW4gSFRUUCByZXF1ZXN0IG92ZXIgY29ubmVjdGlvblxuICAvLyAgICB1c2luZyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuXG4gIC8vICAgICAgICAtIEZvbGxvdyB0aGUgcmVsZXZhbnQgcmVxdWlyZW1lbnRzIGZyb20gSFRUUC4gW0hUVFBdIFtIVFRQLVNFTUFOVElDU11cbiAgLy8gICAgICAgIFtIVFRQLUNPTkRdIFtIVFRQLUNBQ0hJTkddIFtIVFRQLUFVVEhdXG5cbiAgLy8gICAgICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLFxuICAvLyAgICAgICAgdGhlbiB0aGUgdXNlciBhZ2VudCBtYXkgaGF2ZSBhIGJ1ZmZlciBvZiB1cCB0byA2NCBraWJpYnl0ZXMgYW5kIHN0b3JlXG4gIC8vICAgICAgICBhIHBhcnQgb2YgcmVxdWVzdFx1MjAxOXMgYm9keSBpbiB0aGF0IGJ1ZmZlci4gSWYgdGhlIHVzZXIgYWdlbnQgcmVhZHMgZnJvbVxuICAvLyAgICAgICAgcmVxdWVzdFx1MjAxOXMgYm9keSBiZXlvbmQgdGhhdCBidWZmZXJcdTIwMTlzIHNpemUgYW5kIHRoZSB1c2VyIGFnZW50IG5lZWRzIHRvXG4gIC8vICAgICAgICByZXNlbmQgcmVxdWVzdCwgdGhlbiBpbnN0ZWFkIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgICAgIC0gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgICAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSxcbiAgLy8gICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB1c2VyIGFnZW50XHUyMDE5cyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZVxuICAvLyAgICAgICAgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXIgYnl0ZXMgZm9yIEhUVFAvMiBvciByZXNwb25zZSBzdGF0dXNcbiAgLy8gICAgICAgIGxpbmUgZm9yIEhUVFAvMS54KS5cblxuICAvLyAgICAgICAgLSBXYWl0IHVudGlsIGFsbCB0aGUgaGVhZGVycyBhcmUgdHJhbnNtaXR0ZWQuXG5cbiAgLy8gICAgICAgIC0gQW55IHJlc3BvbnNlcyB3aG9zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDEwMCB0byAxOTksIGluY2x1c2l2ZSxcbiAgLy8gICAgICAgIGFuZCBpcyBub3QgMTAxLCBhcmUgdG8gYmUgaWdub3JlZCwgZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2Ygc2V0dGluZ1xuICAvLyAgICAgICAgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIGFib3ZlLlxuXG4gIC8vICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFRyYW5zZmVyLUVuY29kaW5nYC9gY2h1bmtlZGAgYW5kXG4gIC8vICAgIHJlc3BvbnNlIGlzIHRyYW5zZmVycmVkIHZpYSBIVFRQLzEuMCBvciBvbGRlciwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vICAgIGVycm9yLlxuXG4gIC8vICAgIC0gSWYgdGhlIEhUVFAgcmVxdWVzdCByZXN1bHRzIGluIGEgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZSBkaWFsb2csIHRoZW46XG5cbiAgLy8gICAgICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QsIG1ha2UgdGhlXG4gIC8vICAgICAgICBkaWFsb2cgYXZhaWxhYmxlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cblxuICAvLyAgICAgICAgMi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vIFRvIHRyYW5zbWl0IHJlcXVlc3RcdTIwMTlzIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuICBsZXQgcmVxdWVzdEJvZHkgPSBudWxsXG4gIC8vIDEuIElmIGJvZHkgaXMgbnVsbCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpc1xuICAvLyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdFxuICAvLyBlbmQtb2YtYm9keSBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KCkpXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJvZHkgaXMgbm9uLW51bGw6XG5cbiAgICAvLyAgICAxLiBMZXQgcHJvY2Vzc0JvZHlDaHVuayBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUNodW5rID0gYXN5bmMgZnVuY3Rpb24gKiAoYnl0ZXMpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOiB0cmFuc21pdCBieXRlcy5cbiAgICAgIHlpZWxkIGJ5dGVzXG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW5cbiAgICAgIC8vIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBnaXZlbiBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGg/LihieXRlcy5ieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBwcm9jZXNzRW5kT2ZCb2R5IGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsXG4gICAgICAvLyB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBnaXZlbiBlIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBlIGlzIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbiwgdGhlbiBhYm9ydCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSW5jcmVtZW50YWxseSByZWFkIHJlcXVlc3RcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHlDaHVuaywgcHJvY2Vzc0VuZE9mQm9keSxcbiAgICAvLyBwcm9jZXNzQm9keUVycm9yLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgcmVxdWVzdEJvZHkgPSAoYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGJ5dGVzIG9mIHJlcXVlc3QuYm9keS5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHByb2Nlc3NCb2R5Q2h1bmsoYnl0ZXMpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0VuZE9mQm9keSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzb2NrZXQgaXMgb25seSBwcm92aWRlZCBmb3Igd2Vic29ja2V0c1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0gPSBhd2FpdCBkaXNwYXRjaCh7IGJvZHk6IHJlcXVlc3RCb2R5IH0pXG5cbiAgICBpZiAoc29ja2V0KSB7XG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGJvZHlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCA9ICgpID0+IGl0ZXJhdG9yLm5leHQoKVxuXG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QgfSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDEwLiBJZiBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyAxLiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICAgIC8vIDIuIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoZXJyKVxuICB9XG5cbiAgLy8gMTEuIExldCBwdWxsQWxnb3JpdGhtIGJlIGFuIGFjdGlvbiB0aGF0IHJlc3VtZXMgdGhlIG9uZ29pbmcgZmV0Y2hcbiAgLy8gaWYgaXQgaXMgc3VzcGVuZGVkLlxuICBjb25zdCBwdWxsQWxnb3JpdGhtID0gKCkgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lKClcbiAgfVxuXG4gIC8vIDEyLiBMZXQgY2FuY2VsQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFib3J0cyBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gY29udHJvbGxlciB3aXRoIHJlYXNvbiwgZ2l2ZW4gcmVhc29uLlxuICBjb25zdCBjYW5jZWxBbGdvcml0aG0gPSAocmVhc29uKSA9PiB7XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydChyZWFzb24pXG4gIH1cblxuICAvLyAxMy4gTGV0IGhpZ2hXYXRlck1hcmsgYmUgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4gbnVtYmVyLCBjaG9zZW4gYnlcbiAgLy8gdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNC4gTGV0IHNpemVBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWNjZXB0cyBhIGNodW5rIG9iamVjdFxuICAvLyBhbmQgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiwgbm9uLWluZmluaXRlIG51bWJlciwgY2hvc2VuIGJ5IHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIExldCBzdHJlYW0gYmUgYSBuZXcgUmVhZGFibGVTdHJlYW0uXG4gIC8vIDE2LiBTZXQgdXAgc3RyZWFtIHdpdGggcHVsbEFsZ29yaXRobSBzZXQgdG8gcHVsbEFsZ29yaXRobSxcbiAgLy8gY2FuY2VsQWxnb3JpdGhtIHNldCB0byBjYW5jZWxBbGdvcml0aG0sIGhpZ2hXYXRlck1hcmsgc2V0IHRvXG4gIC8vIGhpZ2hXYXRlck1hcmssIGFuZCBzaXplQWxnb3JpdGhtIHNldCB0byBzaXplQWxnb3JpdGhtLlxuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBhd2FpdCBwdWxsQWxnb3JpdGhtKGNvbnRyb2xsZXIpXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgY2FuY2VsQWxnb3JpdGhtKHJlYXNvbilcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGhpZ2hXYXRlck1hcms6IDAsXG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICAvLyAxNy4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBhIG5ldyBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0uXG4gIHJlc3BvbnNlLmJvZHkgPSB7IHN0cmVhbSB9XG5cbiAgLy8gICAgMi4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpc1xuICAvLyAgICBub3QgXCJuby1zdG9yZVwiLCB0aGVuIHVwZGF0ZSByZXNwb25zZSBpbiBodHRwQ2FjaGUgZm9yIHJlcXVlc3QuXG4gIC8vICAgIFRPRE9cblxuICAvLyAgICAzLiBJZiBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWRcbiAgLy8gICAgdG8gYmxvY2sgY29va2llcyBmb3IgcmVxdWVzdCAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuIHJ1biB0aGVcbiAgLy8gICAgXCJzZXQtY29va2llLXN0cmluZ1wiIHBhcnNpbmcgYWxnb3JpdGhtIChzZWUgc2VjdGlvbiA1LjIgb2YgW0NPT0tJRVNdKSBvblxuICAvLyAgICB0aGUgdmFsdWUgb2YgZWFjaCBoZWFkZXIgd2hvc2UgbmFtZSBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgLy8gICAgYFNldC1Db29raWVgIGluIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCwgaWYgYW55LCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gIC8vICAgIFRPRE9cblxuICAvLyAxOC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE5LiBSdW4gdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWw6XG5cbiAgLy8gICAgMS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZDpcbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vbigndGVybWluYXRlZCcsIG9uQWJvcnRlZClcbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXN1bWUgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gMS4gV2hpbGUgdHJ1ZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyAxLTMuIFNlZSBvbkRhdGEuLi5cblxuICAgICAgLy8gNC4gU2V0IGJ5dGVzIHRvIHRoZSByZXN1bHQgb2YgaGFuZGxpbmcgY29udGVudCBjb2RpbmdzIGdpdmVuXG4gICAgICAvLyBjb2RpbmdzIGFuZCBieXRlcy5cbiAgICAgIGxldCBieXRlc1xuICAgICAgbGV0IGlzRmFpbHVyZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5uZXh0KClcblxuICAgICAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBieXRlcyA9IGRvbmUgPyB1bmRlZmluZWQgOiB2YWx1ZVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkICYmICF0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSkge1xuICAgICAgICAgIC8vIHpsaWIgZG9lc24ndCBsaWtlIGVtcHR5IHN0cmVhbXMuXG4gICAgICAgICAgYnl0ZXMgPSB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBieXRlcyA9IGVyclxuXG4gICAgICAgICAgLy8gZXJyIG1heSBiZSBwcm9wYWdhdGVkIGZyb20gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHJlYWRhYmxlc3RyZWFtLmNhbmNlbCxcbiAgICAgICAgICAvLyB3aGljaCBtaWdodCBub3QgYmUgYW4gZXJyb3IuIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDA5XG4gICAgICAgICAgaXNGYWlsdXJlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChieXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlIGJ5dGVzIHRyYW5zbWlzc2lvbiBmb3IgcmVzcG9uc2VcdTIwMTlzIG1lc3NhZ2VcbiAgICAgICAgLy8gYm9keSBpcyBkb25lIG5vcm1hbGx5IGFuZCBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gY2xvc2VcbiAgICAgICAgLy8gc3RyZWFtLCBmaW5hbGl6ZSByZXNwb25zZSBmb3IgZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLCBhbmRcbiAgICAgICAgLy8gYWJvcnQgdGhlc2UgaW4tcGFyYWxsZWwgc3RlcHMuXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtQ2xvc2UoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyKVxuXG4gICAgICAgIGZpbmFsaXplUmVzcG9uc2UoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJbmNyZWFzZSB0aW1pbmdJbmZvXHUyMDE5cyBkZWNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgdGltaW5nSW5mby5kZWNvZGVkQm9keVNpemUgKz0gYnl0ZXM/LmJ5dGVMZW5ndGggPz8gMFxuXG4gICAgICAvLyA2LiBJZiBieXRlcyBpcyBmYWlsdXJlLCB0aGVuIHRlcm1pbmF0ZSBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChpc0ZhaWx1cmUpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoYnl0ZXMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA3LiBFbnF1ZXVlIGEgVWludDhBcnJheSB3cmFwcGluZyBhbiBBcnJheUJ1ZmZlciBjb250YWluaW5nIGJ5dGVzXG4gICAgICAvLyBpbnRvIHN0cmVhbS5cbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ5dGVzKSlcblxuICAgICAgLy8gOC4gSWYgc3RyZWFtIGlzIGVycm9yZWQsIHRoZW4gdGVybWluYXRlIHRoZSBvbmdvaW5nIGZldGNoLlxuICAgICAgaWYgKGlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDkuIElmIHN0cmVhbSBkb2Vzblx1MjAxOXQgbmVlZCBtb3JlIGRhdGEgYXNrIHRoZSB1c2VyIGFnZW50IHRvIHN1c3BlbmRcbiAgICAgIC8vIHRoZSBvbmdvaW5nIGZldGNoLlxuICAgICAgaWYgKCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZGVzaXJlZFNpemUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gICAgMi4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgZnVuY3Rpb24gb25BYm9ydGVkIChyZWFzb24pIHtcbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZy5cbiAgICAgIHJlc3BvbnNlLmFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIElmIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciBzdHJlYW0gd2l0aCB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgICAgLy8gICAgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kIGFuXG4gICAgICAvLyAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlYWxtLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHN0cmVhbSBpcyByZWFkYWJsZSwgZXJyb3Igc3RyZWFtIHdpdGggYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihuZXcgVHlwZUVycm9yKCd0ZXJtaW5hdGVkJywge1xuICAgICAgICAgIGNhdXNlOiBpc0Vycm9yTGlrZShyZWFzb24pID8gcmVhc29uIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyA1LiBPdGhlcndpc2UsIHRoZSB1c2VyIGFnZW50IHNob3VsZCBjbG9zZSBjb25uZWN0aW9uIHVubGVzcyBpdCB3b3VsZCBiZSBiYWQgZm9yIHBlcmZvcm1hbmNlIHRvIGRvIHNvLlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgfVxuXG4gIC8vIDIwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoICh7IGJvZHkgfSkge1xuICAgIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uJykuQWdlbnR9ICovXG4gICAgY29uc3QgYWdlbnQgPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXJcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBhZ2VudC5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICBib2R5OiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXIuaXNNb2NrQWN0aXZlID8gcmVxdWVzdC5ib2R5ICYmIChyZXF1ZXN0LmJvZHkuc291cmNlIHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pIDogYm9keSxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzTGlzdC5lbnRyaWVzLFxuICAgICAgICBtYXhSZWRpcmVjdGlvbnM6IDAsXG4gICAgICAgIHVwZ3JhZGU6IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcgPyAnd2Vic29ja2V0JyA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYm9keTogbnVsbCxcbiAgICAgICAgYWJvcnQ6IG51bGwsXG5cbiAgICAgICAgb25Db25uZWN0IChhYm9ydCkge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgY29ubmVjdGlvbiBoZXJlP1xuICAgICAgICAgIGNvbnN0IHsgY29ubmVjdGlvbiB9ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlclxuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBhYm9ydClcbiAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBjb25uZWN0aW9uLmFib3J0ID0gYWJvcnRcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgb25IZWFkZXJzIChzdGF0dXMsIGhlYWRlcnNMaXN0LCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgY29kaW5ncyA9IFtdXG4gICAgICAgICAgbGV0IGxvY2F0aW9uID0gJydcblxuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG5cbiAgICAgICAgICAvLyBGb3IgSDIsIHRoZSBoZWFkZXJzIGFyZSBhIHBsYWluIEpTIG9iamVjdFxuICAgICAgICAgIC8vIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBhbmQgaXRlcmF0ZSBhY2NvcmRpbmdseVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNMaXN0KSkge1xuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXJzTGlzdFtuICsgMF0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W24gKyAxXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1lbmNvZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTMuMS4yLjFcbiAgICAgICAgICAgICAgICAvLyBcIkFsbCBjb250ZW50LWNvZGluZyB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuLi5cIlxuICAgICAgICAgICAgICAgIGNvZGluZ3MgPSB2YWwudG9Mb3dlckNhc2UoKS5zcGxpdCgnLCcpLm1hcCgoeCkgPT4geC50cmltKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnNMaXN0KVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtrZXldXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gdmFsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keSA9IG5ldyBSZWFkYWJsZSh7IHJlYWQ6IHJlc3VtZSB9KVxuXG4gICAgICAgICAgY29uc3QgZGVjb2RlcnMgPSBbXVxuXG4gICAgICAgICAgY29uc3Qgd2lsbEZvbGxvdyA9IHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnICYmXG4gICAgICAgICAgICBsb2NhdGlvbiAmJlxuICAgICAgICAgICAgcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cylcblxuICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LUVuY29kaW5nXG4gICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdDT05ORUNUJyAmJiAhbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoc3RhdHVzKSAmJiAhd2lsbEZvbGxvdykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2Rpbmcgb2YgY29kaW5ncykge1xuICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMi5odG1sI3NlY3Rpb24tNy4yXG4gICAgICAgICAgICAgIGlmIChjb2RpbmcgPT09ICd4LWd6aXAnIHx8IGNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUd1bnppcCh7XG4gICAgICAgICAgICAgICAgICAvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcbiAgICAgICAgICAgICAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgLy8gYnkgY29tbW9uIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlSW5mbGF0ZSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2JyJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgYm9keTogZGVjb2RlcnMubGVuZ3RoXG4gICAgICAgICAgICAgID8gcGlwZWxpbmUodGhpcy5ib2R5LCAuLi5kZWNvZGVycywgKCkgPT4geyB9KVxuICAgICAgICAgICAgICA6IHRoaXMuYm9keS5vbignZXJyb3InLCAoKSA9PiB7fSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcblxuICAgICAgICBvbkRhdGEgKGNodW5rKSB7XG4gICAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZHVtcCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gSWYgb25lIG9yIG1vcmUgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIGZyb20gcmVzcG9uc2VcdTIwMTlzXG4gICAgICAgICAgLy8gbWVzc2FnZSBib2R5LCB0aGVuOlxuXG4gICAgICAgICAgLy8gIDEuIExldCBieXRlcyBiZSB0aGUgdHJhbnNtaXR0ZWQgYnl0ZXMuXG4gICAgICAgICAgY29uc3QgYnl0ZXMgPSBjaHVua1xuXG4gICAgICAgICAgLy8gIDIuIExldCBjb2RpbmdzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgICAgICAvLyAgZ2l2ZW4gYENvbnRlbnQtRW5jb2RpbmdgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAgICAgLy8gIFNlZSBwdWxsQWxnb3JpdGhtLlxuXG4gICAgICAgICAgLy8gIDMuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGVuY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICAgICAgdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUgKz0gYnl0ZXMuYnl0ZUxlbmd0aFxuXG4gICAgICAgICAgLy8gIDQuIFNlZSBwdWxsQWxnb3JpdGhtLi4uXG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5ib2R5LnB1c2goYnl0ZXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25Db21wbGV0ZSAoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub2ZmKCd0ZXJtaW5hdGVkJywgdGhpcy5hYm9ydClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5ib2R5LnB1c2gobnVsbClcbiAgICAgICAgfSxcblxuICAgICAgICBvbkVycm9yIChlcnJvcikge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5Py5kZXN0cm95KGVycm9yKVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyb3IpXG5cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VcGdyYWRlIChzdGF0dXMsIGhlYWRlcnNMaXN0LCBzb2NrZXQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAxMDEpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG5cbiAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnNMaXN0Lmxlbmd0aDsgbiArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXJzTGlzdFtuICsgMF0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG5cbiAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBTVEFUVVNfQ09ERVNbc3RhdHVzXSxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0OiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0sXG4gICAgICAgICAgICBzb2NrZXRcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZldGNoLFxuICBGZXRjaCxcbiAgZmV0Y2hpbmcsXG4gIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrU3RhdGU6IFN5bWJvbCgnRmlsZVJlYWRlciBzdGF0ZScpLFxuICBrUmVzdWx0OiBTeW1ib2woJ0ZpbGVSZWFkZXIgcmVzdWx0JyksXG4gIGtFcnJvcjogU3ltYm9sKCdGaWxlUmVhZGVyIGVycm9yJyksXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgbGFzdCBwcm9ncmVzcyBldmVudCBmaXJlZCB0aW1lc3RhbXAnKSxcbiAga0V2ZW50czogU3ltYm9sKCdGaWxlUmVhZGVyIGV2ZW50cycpLFxuICBrQWJvcnRlZDogU3ltYm9sKCdGaWxlUmVhZGVyIGFib3J0ZWQnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVuY29kaW5nLWdldFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBsYWJlbFxuICovXG5mdW5jdGlvbiBnZXRFbmNvZGluZyAobGFiZWwpIHtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gIC8vICAgIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgY29ycmVzcG9uZGluZyBlbmNvZGluZzsgb3RoZXJ3aXNlIHJldHVybiBmYWlsdXJlLlxuICBzd2l0Y2ggKGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAndW5pY29kZS0xLTEtdXRmLTgnOlxuICAgIGNhc2UgJ3VuaWNvZGUxMXV0ZjgnOlxuICAgIGNhc2UgJ3VuaWNvZGUyMHV0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd4LXVuaWNvZGUyMHV0ZjgnOlxuICAgICAgcmV0dXJuICdVVEYtOCdcbiAgICBjYXNlICc4NjYnOlxuICAgIGNhc2UgJ2NwODY2JzpcbiAgICBjYXNlICdjc2libTg2Nic6XG4gICAgY2FzZSAnaWJtODY2JzpcbiAgICAgIHJldHVybiAnSUJNODY2J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4yJzpcbiAgICBjYXNlICdpc28tODg1OS0yJzpcbiAgICBjYXNlICdpc28taXItMTAxJzpcbiAgICBjYXNlICdpc284ODU5LTInOlxuICAgIGNhc2UgJ2lzbzg4NTkyJzpcbiAgICBjYXNlICdpc29fODg1OS0yJzpcbiAgICBjYXNlICdpc29fODg1OS0yOjE5ODcnOlxuICAgIGNhc2UgJ2wyJzpcbiAgICBjYXNlICdsYXRpbjInOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0yJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4zJzpcbiAgICBjYXNlICdpc28tODg1OS0zJzpcbiAgICBjYXNlICdpc28taXItMTA5JzpcbiAgICBjYXNlICdpc284ODU5LTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkzJzpcbiAgICBjYXNlICdpc29fODg1OS0zJzpcbiAgICBjYXNlICdpc29fODg1OS0zOjE5ODgnOlxuICAgIGNhc2UgJ2wzJzpcbiAgICBjYXNlICdsYXRpbjMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0zJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW40JzpcbiAgICBjYXNlICdpc28tODg1OS00JzpcbiAgICBjYXNlICdpc28taXItMTEwJzpcbiAgICBjYXNlICdpc284ODU5LTQnOlxuICAgIGNhc2UgJ2lzbzg4NTk0JzpcbiAgICBjYXNlICdpc29fODg1OS00JzpcbiAgICBjYXNlICdpc29fODg1OS00OjE5ODgnOlxuICAgIGNhc2UgJ2w0JzpcbiAgICBjYXNlICdsYXRpbjQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS00J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5jeXJpbGxpYyc6XG4gICAgY2FzZSAnY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTUnOlxuICAgIGNhc2UgJ2lzby1pci0xNDQnOlxuICAgIGNhc2UgJ2lzbzg4NTktNSc6XG4gICAgY2FzZSAnaXNvODg1OTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTU6MTk4OCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTUnXG4gICAgY2FzZSAnYXJhYmljJzpcbiAgICBjYXNlICdhc21vLTcwOCc6XG4gICAgY2FzZSAnY3Npc284ODU5NmUnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZpJzpcbiAgICBjYXNlICdjc2lzb2xhdGluYXJhYmljJzpcbiAgICBjYXNlICdlY21hLTExNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNic6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1lJzpcbiAgICBjYXNlICdpc28tODg1OS02LWknOlxuICAgIGNhc2UgJ2lzby1pci0xMjcnOlxuICAgIGNhc2UgJ2lzbzg4NTktNic6XG4gICAgY2FzZSAnaXNvODg1OTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTY6MTk4Nyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTYnXG4gICAgY2FzZSAnY3Npc29sYXRpbmdyZWVrJzpcbiAgICBjYXNlICdlY21hLTExOCc6XG4gICAgY2FzZSAnZWxvdF85MjgnOlxuICAgIGNhc2UgJ2dyZWVrJzpcbiAgICBjYXNlICdncmVlazgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTcnOlxuICAgIGNhc2UgJ2lzby1pci0xMjYnOlxuICAgIGNhc2UgJ2lzbzg4NTktNyc6XG4gICAgY2FzZSAnaXNvODg1OTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTc6MTk4Nyc6XG4gICAgY2FzZSAnc3VuX2V1X2dyZWVrJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNydcbiAgICBjYXNlICdjc2lzbzg4NTk4ZSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6XG4gICAgY2FzZSAnaGVicmV3JzpcbiAgICBjYXNlICdpc28tODg1OS04JzpcbiAgICBjYXNlICdpc28tODg1OS04LWUnOlxuICAgIGNhc2UgJ2lzby1pci0xMzgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOCc6XG4gICAgY2FzZSAnaXNvODg1OTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTg6MTk4OCc6XG4gICAgY2FzZSAndmlzdWFsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOCdcbiAgICBjYXNlICdjc2lzbzg4NTk4aSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1pJzpcbiAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOC1JJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW42JzpcbiAgICBjYXNlICdpc28tODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvLWlyLTE1Nyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvODg1OTEwJzpcbiAgICBjYXNlICdsNic6XG4gICAgY2FzZSAnbGF0aW42JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTAnXG4gICAgY2FzZSAnaXNvLTg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEzJ1xuICAgIGNhc2UgJ2lzby04ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5MTQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNCdcbiAgICBjYXNlICdjc2lzb2xhdGluOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMTUnOlxuICAgIGNhc2UgJ2w5JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTUnXG4gICAgY2FzZSAnaXNvLTg4NTktMTYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNidcbiAgICBjYXNlICdjc2tvaThyJzpcbiAgICBjYXNlICdrb2knOlxuICAgIGNhc2UgJ2tvaTgnOlxuICAgIGNhc2UgJ2tvaTgtcic6XG4gICAgY2FzZSAna29pOF9yJzpcbiAgICAgIHJldHVybiAnS09JOC1SJ1xuICAgIGNhc2UgJ2tvaTgtcnUnOlxuICAgIGNhc2UgJ2tvaTgtdSc6XG4gICAgICByZXR1cm4gJ0tPSTgtVSdcbiAgICBjYXNlICdjc21hY2ludG9zaCc6XG4gICAgY2FzZSAnbWFjJzpcbiAgICBjYXNlICdtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ3gtbWFjLXJvbWFuJzpcbiAgICAgIHJldHVybiAnbWFjaW50b3NoJ1xuICAgIGNhc2UgJ2lzby04ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5MTEnOlxuICAgIGNhc2UgJ3Rpcy02MjAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtODc0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy04NzQnXG4gICAgY2FzZSAnY3AxMjUwJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTAnOlxuICAgIGNhc2UgJ3gtY3AxMjUwJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUwJ1xuICAgIGNhc2UgJ2NwMTI1MSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUxJzpcbiAgICBjYXNlICd4LWNwMTI1MSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MSdcbiAgICBjYXNlICdhbnNpX3gzLjQtMTk2OCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgY2FzZSAnY3A4MTknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW4xJzpcbiAgICBjYXNlICdpYm04MTknOlxuICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgIGNhc2UgJ2lzby1pci0xMDAnOlxuICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgY2FzZSAnaXNvODg1OTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgY2FzZSAnbDEnOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAndXMtYXNjaWknOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTInXG4gICAgY2FzZSAnY3AxMjUzJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTMnOlxuICAgIGNhc2UgJ3gtY3AxMjUzJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUzJ1xuICAgIGNhc2UgJ2NwMTI1NCc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTknOlxuICAgIGNhc2UgJ2lzby1pci0xNDgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOSc6XG4gICAgY2FzZSAnaXNvODg1OTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTk6MTk4OSc6XG4gICAgY2FzZSAnbDUnOlxuICAgIGNhc2UgJ2xhdGluNSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU0JzpcbiAgICBjYXNlICd4LWNwMTI1NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NCdcbiAgICBjYXNlICdjcDEyNTUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NSc6XG4gICAgY2FzZSAneC1jcDEyNTUnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTUnXG4gICAgY2FzZSAnY3AxMjU2JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTYnOlxuICAgIGNhc2UgJ3gtY3AxMjU2JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU2J1xuICAgIGNhc2UgJ2NwMTI1Nyc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU3JzpcbiAgICBjYXNlICd4LWNwMTI1Nyc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NydcbiAgICBjYXNlICdjcDEyNTgnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1OCc6XG4gICAgY2FzZSAneC1jcDEyNTgnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTgnXG4gICAgY2FzZSAneC1tYWMtY3lyaWxsaWMnOlxuICAgIGNhc2UgJ3gtbWFjLXVrcmFpbmlhbic6XG4gICAgICByZXR1cm4gJ3gtbWFjLWN5cmlsbGljJ1xuICAgIGNhc2UgJ2NoaW5lc2UnOlxuICAgIGNhc2UgJ2NzZ2IyMzEyJzpcbiAgICBjYXNlICdjc2lzbzU4Z2IyMzEyODAnOlxuICAgIGNhc2UgJ2diMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMi04MCc6XG4gICAgY2FzZSAnZ2JrJzpcbiAgICBjYXNlICdpc28taXItNTgnOlxuICAgIGNhc2UgJ3gtZ2JrJzpcbiAgICAgIHJldHVybiAnR0JLJ1xuICAgIGNhc2UgJ2diMTgwMzAnOlxuICAgICAgcmV0dXJuICdnYjE4MDMwJ1xuICAgIGNhc2UgJ2JpZzUnOlxuICAgIGNhc2UgJ2JpZzUtaGtzY3MnOlxuICAgIGNhc2UgJ2NuLWJpZzUnOlxuICAgIGNhc2UgJ2NzYmlnNSc6XG4gICAgY2FzZSAneC14LWJpZzUnOlxuICAgICAgcmV0dXJuICdCaWc1J1xuICAgIGNhc2UgJ2NzZXVjcGtkZm10amFwYW5lc2UnOlxuICAgIGNhc2UgJ2V1Yy1qcCc6XG4gICAgY2FzZSAneC1ldWMtanAnOlxuICAgICAgcmV0dXJuICdFVUMtSlAnXG4gICAgY2FzZSAnY3Npc28yMDIyanAnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWpwJzpcbiAgICAgIHJldHVybiAnSVNPLTIwMjItSlAnXG4gICAgY2FzZSAnY3NzaGlmdGppcyc6XG4gICAgY2FzZSAnbXM5MzInOlxuICAgIGNhc2UgJ21zX2thbmppJzpcbiAgICBjYXNlICdzaGlmdC1qaXMnOlxuICAgIGNhc2UgJ3NoaWZ0X2ppcyc6XG4gICAgY2FzZSAnc2ppcyc6XG4gICAgY2FzZSAnd2luZG93cy0zMWonOlxuICAgIGNhc2UgJ3gtc2ppcyc6XG4gICAgICByZXR1cm4gJ1NoaWZ0X0pJUydcbiAgICBjYXNlICdjc2V1Y2tyJzpcbiAgICBjYXNlICdjc2tzYzU2MDExOTg3JzpcbiAgICBjYXNlICdldWMta3InOlxuICAgIGNhc2UgJ2lzby1pci0xNDknOlxuICAgIGNhc2UgJ2tvcmVhbic6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODcnOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg5JzpcbiAgICBjYXNlICdrc2M1NjAxJzpcbiAgICBjYXNlICdrc2NfNTYwMSc6XG4gICAgY2FzZSAnd2luZG93cy05NDknOlxuICAgICAgcmV0dXJuICdFVUMtS1InXG4gICAgY2FzZSAnY3Npc28yMDIya3InOlxuICAgIGNhc2UgJ2h6LWdiLTIzMTInOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbi1leHQnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWtyJzpcbiAgICBjYXNlICdyZXBsYWNlbWVudCc6XG4gICAgICByZXR1cm4gJ3JlcGxhY2VtZW50J1xuICAgIGNhc2UgJ3VuaWNvZGVmZmZlJzpcbiAgICBjYXNlICd1dGYtMTZiZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICAgIGNhc2UgJ2NzdW5pY29kZSc6XG4gICAgY2FzZSAnaXNvLTEwNjQ2LXVjcy0yJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndW5pY29kZSc6XG4gICAgY2FzZSAndW5pY29kZWZlZmYnOlxuICAgIGNhc2UgJ3V0Zi0xNic6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgICBjYXNlICd4LXVzZXItZGVmaW5lZCc6XG4gICAgICByZXR1cm4gJ3gtdXNlci1kZWZpbmVkJ1xuICAgIGRlZmF1bHQ6IHJldHVybiAnZmFpbHVyZSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RW5jb2Rpbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0Fib3J0ZWQsXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgUHJvZ3Jlc3NFdmVudCB9ID0gcmVxdWlyZSgnLi9wcm9ncmVzc2V2ZW50JylcbmNvbnN0IHsgZ2V0RW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcnKVxuY29uc3QgeyBET01FeGNlcHRpb24gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2NvbnN0YW50cycpXG5jb25zdCB7IHNlcmlhbGl6ZUFNaW1lVHlwZSwgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgU3RyaW5nRGVjb2RlciB9ID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKVxuY29uc3QgeyBidG9hIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRPcGVyYXRpb25cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSBmclxuICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiByZWFkT3BlcmF0aW9uIChmciwgYmxvYiwgdHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3JcbiAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICBpZiAoZnJba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBzdGF0ZScsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gIH1cblxuICAvLyAyLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwibG9hZGluZ1wiLlxuICBmcltrU3RhdGVdID0gJ2xvYWRpbmcnXG5cbiAgLy8gMy4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gbnVsbC5cbiAgZnJba1Jlc3VsdF0gPSBudWxsXG5cbiAgLy8gNC4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBudWxsLlxuICBmcltrRXJyb3JdID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdHJlYW0gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldCBzdHJlYW0gb24gYmxvYi5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbX0gKi9cbiAgY29uc3Qgc3RyZWFtID0gYmxvYi5zdHJlYW0oKVxuXG4gIC8vIDYuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZyb20gc3RyZWFtLlxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAvLyA3LiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyA4LiBMZXQgY2h1bmtQcm9taXNlIGJlIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhIGNodW5rIGZyb21cbiAgLy8gICAgc3RyZWFtIHdpdGggcmVhZGVyLlxuICBsZXQgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuXG4gIC8vIDkuIExldCBpc0ZpcnN0Q2h1bmsgYmUgdHJ1ZS5cbiAgbGV0IGlzRmlyc3RDaHVuayA9IHRydWVcblxuICAvLyAxMC4gSW4gcGFyYWxsZWwsIHdoaWxlIHRydWU6XG4gIC8vIE5vdGU6IFwiSW4gcGFyYWxsZWxcIiBqdXN0IG1lYW5zIG5vbi1ibG9ja2luZ1xuICAvLyBOb3RlIDI6IHJlYWRPcGVyYXRpb24gaXRzZWxmIGNhbm5vdCBiZSBhc3luYyBhcyBkb3VibGVcbiAgLy8gcmVhZGluZyB0aGUgYm9keSB3b3VsZCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZSwgaW5zdGVhZFxuICAvLyBvZiB0aHJvd2luZyBhbiBlcnJvci5cbiAgOyhhc3luYyAoKSA9PiB7XG4gICAgd2hpbGUgKCFmcltrQWJvcnRlZF0pIHtcbiAgICAgIC8vIDEuIFdhaXQgZm9yIGNodW5rUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBjaHVua1Byb21pc2VcblxuICAgICAgICAvLyAyLiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkLCBhbmQgaXNGaXJzdENodW5rIGlzXG4gICAgICAgIC8vICAgIHRydWUsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkXG4gICAgICAgIC8vICAgIGxvYWRzdGFydCBhdCBmci5cbiAgICAgICAgaWYgKGlzRmlyc3RDaHVuayAmJiAhZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2Fkc3RhcnQnLCBmcilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gU2V0IGlzRmlyc3RDaHVuayB0byBmYWxzZS5cbiAgICAgICAgaXNGaXJzdENodW5rID0gZmFsc2VcblxuICAgICAgICAvLyA0LiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW4gb2JqZWN0IHdob3NlXG4gICAgICAgIC8vICAgIGRvbmUgcHJvcGVydHkgaXMgZmFsc2UgYW5kIHdob3NlIHZhbHVlIHByb3BlcnR5IGlzXG4gICAgICAgIC8vICAgIGEgVWludDhBcnJheSBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcbiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVzLmlzVWludDhBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyAxLiBMZXQgYnMgYmUgdGhlIGJ5dGUgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlXG4gICAgICAgICAgLy8gICAgVWludDhBcnJheSBvYmplY3QuXG5cbiAgICAgICAgICAvLyAyLiBBcHBlbmQgYnMgdG8gYnl0ZXMuXG4gICAgICAgICAgYnl0ZXMucHVzaCh2YWx1ZSlcblxuICAgICAgICAgIC8vIDMuIElmIHJvdWdobHkgNTBtcyBoYXZlIHBhc3NlZCBzaW5jZSB0aGVzZSBzdGVwc1xuICAgICAgICAgIC8vICAgIHdlcmUgbGFzdCBpbnZva2VkLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhXG4gICAgICAgICAgLy8gICAgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGF0IGZyLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgRGF0ZS5ub3coKSAtIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA+PSA1MFxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIWZyW2tBYm9ydGVkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ3Byb2dyZXNzJywgZnIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuIFNldCBjaHVua1Byb21pc2UgdG8gdGhlIHJlc3VsdCBvZiByZWFkaW5nIGFcbiAgICAgICAgICAvLyAgICBjaHVuayBmcm9tIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgICAgICAgICBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG4gICAgICAgIH0gZWxzZSBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuXG4gICAgICAgICAgLy8gICAgb2JqZWN0IHdob3NlIGRvbmUgcHJvcGVydHkgaXMgdHJ1ZSwgcXVldWUgYSB0YXNrXG4gICAgICAgICAgLy8gICAgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAgIC8vIDIuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwYWNrYWdlIGRhdGEgZ2l2ZW5cbiAgICAgICAgICAgIC8vICAgIGJ5dGVzLCB0eXBlLCBibG9iXHUyMDE5cyB0eXBlLCBhbmQgZW5jb2RpbmdOYW1lLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFja2FnZURhdGEoYnl0ZXMsIHR5cGUsIGJsb2IudHlwZSwgZW5jb2RpbmdOYW1lKVxuXG4gICAgICAgICAgICAgIC8vIDQuIEVsc2U6XG5cbiAgICAgICAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gcmVzdWx0LlxuICAgICAgICAgICAgICBmcltrUmVzdWx0XSA9IHJlc3VsdFxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgbG9hZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZCcsIGZyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gMy4gSWYgcGFja2FnZSBkYXRhIHRocmV3IGFuIGV4Y2VwdGlvbiBlcnJvcjpcblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDUuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCBhblxuICAgICAgICAvLyAgICBlcnJvciBlcnJvciwgcXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nXG4gICAgICAgIC8vICAgIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgLy8gMi4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgIC8vIDMuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuXG4gICAgICAgICAgLy8gNC4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgZnIuXG4gICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9KSgpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZmlyZS1hLXByb2dyZXNzLWV2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSByZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmlyZUFQcm9ncmVzc0V2ZW50IChlLCByZWFkZXIpIHtcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgZG9lcyBub3QgYnViYmxlLiBlLmJ1YmJsZXMgbXVzdCBiZSBmYWxzZVxuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBpcyBOT1QgY2FuY2VsYWJsZS4gZS5jYW5jZWxhYmxlIG11c3QgYmUgZmFsc2VcbiAgY29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudChlLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgfSlcblxuICByZWFkZXIuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNibG9iLXBhY2thZ2UtZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBtaW1lVHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcGFja2FnZURhdGEgKGJ5dGVzLCB0eXBlLCBtaW1lVHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIEEgQmxvYiBoYXMgYW4gYXNzb2NpYXRlZCBwYWNrYWdlIGRhdGEgYWxnb3JpdGhtLCBnaXZlblxuICAvLyAgICBieXRlcywgYSB0eXBlLCBhIG9wdGlvbmFsIG1pbWVUeXBlLCBhbmQgYSBvcHRpb25hbFxuICAvLyAgICBlbmNvZGluZ05hbWUsIHdoaWNoIHN3aXRjaGVzIG9uIHR5cGUgYW5kIHJ1bnMgdGhlXG4gIC8vICAgIGFzc29jaWF0ZWQgc3RlcHM6XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnRGF0YVVSTCc6IHtcbiAgICAgIC8vIDEuIFJldHVybiBieXRlcyBhcyBhIERhdGFVUkwgW1JGQzIzOTddIHN1YmplY3QgdG9cbiAgICAgIC8vICAgIHRoZSBjb25zaWRlcmF0aW9ucyBiZWxvdzpcbiAgICAgIC8vICAqIFVzZSBtaW1lVHlwZSBhcyBwYXJ0IG9mIHRoZSBEYXRhIFVSTCBpZiBpdCBpc1xuICAgICAgLy8gICAgYXZhaWxhYmxlIGluIGtlZXBpbmcgd2l0aCB0aGUgRGF0YSBVUkxcbiAgICAgIC8vICAgIHNwZWNpZmljYXRpb24gW1JGQzIzOTddLlxuICAgICAgLy8gICogSWYgbWltZVR5cGUgaXMgbm90IGF2YWlsYWJsZSByZXR1cm4gYSBEYXRhIFVSTFxuICAgICAgLy8gICAgd2l0aG91dCBhIG1lZGlhLXR5cGUuIFtSRkMyMzk3XS5cblxuICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3I3NlY3Rpb24tM1xuICAgICAgLy8gZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICAgICAgLy8gbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gICAgICAvLyBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gICAgICAvLyBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICAgICAgbGV0IGRhdGFVUkwgPSAnZGF0YTonXG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpXG5cbiAgICAgIGlmIChwYXJzZWQgIT09ICdmYWlsdXJlJykge1xuICAgICAgICBkYXRhVVJMICs9IHNlcmlhbGl6ZUFNaW1lVHlwZShwYXJzZWQpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gJztiYXNlNjQsJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIud3JpdGUoY2h1bmspKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci5lbmQoKSlcblxuICAgICAgcmV0dXJuIGRhdGFVUkxcbiAgICB9XG4gICAgY2FzZSAnVGV4dCc6IHtcbiAgICAgIC8vIDEuIExldCBlbmNvZGluZyBiZSBmYWlsdXJlXG4gICAgICBsZXQgZW5jb2RpbmcgPSAnZmFpbHVyZSdcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuY29kaW5nTmFtZSBpcyBwcmVzZW50LCBzZXQgZW5jb2RpbmcgdG8gdGhlXG4gICAgICAvLyAgICByZXN1bHQgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIGVuY29kaW5nTmFtZS5cbiAgICAgIGlmIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIGFuZCBtaW1lVHlwZSBpcyBwcmVzZW50OlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScgJiYgbWltZVR5cGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzZSBhIE1JTUUgdHlwZVxuICAgICAgICAvLyAgICBnaXZlbiBtaW1lVHlwZS5cbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgICAgICAgLy8gMi4gSWYgdHlwZSBpcyBub3QgZmFpbHVyZSwgc2V0IGVuY29kaW5nIHRvIHRoZSByZXN1bHRcbiAgICAgICAgLy8gICAgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIHR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbXCJjaGFyc2V0XCJdLlxuICAgICAgICBpZiAodHlwZSAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyh0eXBlLnBhcmFtZXRlcnMuZ2V0KCdjaGFyc2V0JykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgdGhlbiBzZXQgZW5jb2RpbmcgdG8gVVRGLTguXG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJykge1xuICAgICAgICBlbmNvZGluZyA9ICdVVEYtOCdcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRGVjb2RlIGJ5dGVzIHVzaW5nIGZhbGxiYWNrIGVuY29kaW5nIGVuY29kaW5nLCBhbmRcbiAgICAgIC8vICAgIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgcmV0dXJuIGRlY29kZShieXRlcywgZW5jb2RpbmcpXG4gICAgfVxuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzoge1xuICAgICAgLy8gUmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIGNvbnN0IHNlcXVlbmNlID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoYnl0ZXMpXG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZS5idWZmZXJcbiAgICB9XG4gICAgY2FzZSAnQmluYXJ5U3RyaW5nJzoge1xuICAgICAgLy8gUmV0dXJuIGJ5dGVzIGFzIGEgYmluYXJ5IHN0cmluZywgaW4gd2hpY2ggZXZlcnkgYnl0ZVxuICAgICAgLy8gIGlzIHJlcHJlc2VudGVkIGJ5IGEgY29kZSB1bml0IG9mIGVxdWFsIHZhbHVlIFswLi4yNTVdLlxuICAgICAgbGV0IGJpbmFyeVN0cmluZyA9ICcnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgIH1cblxuICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIuZW5kKClcblxuICAgICAgcmV0dXJuIGJpbmFyeVN0cmluZ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2RlY29kZVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGlvUXVldWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGUgKGlvUXVldWUsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGJ5dGVzID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoaW9RdWV1ZSlcblxuICAvLyAxLiBMZXQgQk9NRW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBCT00gc25pZmZpbmcgaW9RdWV1ZS5cbiAgY29uc3QgQk9NRW5jb2RpbmcgPSBCT01TbmlmZmluZyhieXRlcylcblxuICBsZXQgc2xpY2UgPSAwXG5cbiAgLy8gMi4gSWYgQk9NRW5jb2RpbmcgaXMgbm9uLW51bGw6XG4gIGlmIChCT01FbmNvZGluZyAhPT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCBlbmNvZGluZyB0byBCT01FbmNvZGluZy5cbiAgICBlbmNvZGluZyA9IEJPTUVuY29kaW5nXG5cbiAgICAvLyAyLiBSZWFkIHRocmVlIGJ5dGVzIGZyb20gaW9RdWV1ZSwgaWYgQk9NRW5jb2RpbmcgaXNcbiAgICAvLyAgICBVVEYtODsgb3RoZXJ3aXNlIHJlYWQgdHdvIGJ5dGVzLlxuICAgIC8vICAgIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICAgIHNsaWNlID0gQk9NRW5jb2RpbmcgPT09ICdVVEYtOCcgPyAzIDogMlxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgZW5jb2RpbmdcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuXG4gIGNvbnN0IHNsaWNlZCA9IGJ5dGVzLnNsaWNlKHNsaWNlKVxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nKS5kZWNvZGUoc2xpY2VkKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JvbS1zbmlmZlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBpb1F1ZXVlXG4gKi9cbmZ1bmN0aW9uIEJPTVNuaWZmaW5nIChpb1F1ZXVlKSB7XG4gIC8vIDEuIExldCBCT00gYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIDMgYnl0ZXMgZnJvbSBpb1F1ZXVlLFxuICAvLyAgICBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuICBjb25zdCBbYSwgYiwgY10gPSBpb1F1ZXVlXG5cbiAgLy8gMi4gRm9yIGVhY2ggb2YgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJlbG93LCBzdGFydGluZyB3aXRoXG4gIC8vICAgIHRoZSBmaXJzdCBvbmUgYW5kIGdvaW5nIGRvd24sIGlmIEJPTSBzdGFydHMgd2l0aCB0aGVcbiAgLy8gICAgYnl0ZXMgZ2l2ZW4gaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGVuY29kaW5nIGdpdmVuIGluIHRoZSBjZWxsIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIHRoYXRcbiAgLy8gICAgcm93LiBPdGhlcndpc2UsIHJldHVybiBudWxsLlxuICBpZiAoYSA9PT0gMHhFRiAmJiBiID09PSAweEJCICYmIGMgPT09IDB4QkYpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkUgJiYgYiA9PT0gMHhGRikge1xuICAgIHJldHVybiAnVVRGLTE2QkUnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRiAmJiBiID09PSAweEZFKSB7XG4gICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtVaW50OEFycmF5W119IHNlcXVlbmNlc1xuICovXG5mdW5jdGlvbiBjb21iaW5lQnl0ZVNlcXVlbmNlcyAoc2VxdWVuY2VzKSB7XG4gIGNvbnN0IHNpemUgPSBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEgKyBiLmJ5dGVMZW5ndGhcbiAgfSwgMClcblxuICBsZXQgb2Zmc2V0ID0gMFxuXG4gIHJldHVybiBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgYS5zZXQoYiwgb2Zmc2V0KVxuICAgIG9mZnNldCArPSBiLmJ5dGVMZW5ndGhcbiAgICByZXR1cm4gYVxuICB9LCBuZXcgVWludDhBcnJheShzaXplKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGVcdTIwMTlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDb25zdHJ1Y3Q6IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpLmtDb25zdHJ1Y3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGlzVmFsaWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtZXF1YWxzXG4gKiBAcGFyYW0ge1VSTH0gQVxuICogQHBhcmFtIHtVUkx9IEJcbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gZXhjbHVkZUZyYWdtZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsRXF1YWxzIChBLCBCLCBleGNsdWRlRnJhZ21lbnQgPSBmYWxzZSkge1xuICBjb25zdCBzZXJpYWxpemVkQSA9IFVSTFNlcmlhbGl6ZXIoQSwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIGNvbnN0IHNlcmlhbGl6ZWRCID0gVVJMU2VyaWFsaXplcihCLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgcmV0dXJuIHNlcmlhbGl6ZWRBID09PSBzZXJpYWxpemVkQlxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2Nocm9taXVtL2Jsb2IvNjk0ZDIwZDEzNGNiNTUzZDhkODllNTUwMGI5MTQ4MDEyYjFiYTI5OS9jb250ZW50L2Jyb3dzZXIvY2FjaGVfc3RvcmFnZS9jYWNoZV9zdG9yYWdlX2NhY2hlLmNjI0wyNjAtTDI2MlxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICovXG5mdW5jdGlvbiBmaWVsZFZhbHVlcyAoaGVhZGVyKSB7XG4gIGFzc2VydChoZWFkZXIgIT09IG51bGwpXG5cbiAgY29uc3QgdmFsdWVzID0gW11cblxuICBmb3IgKGxldCB2YWx1ZSBvZiBoZWFkZXIuc3BsaXQoJywnKSkge1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgY29udGludWVcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZSh2YWx1ZSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdmFsdWVzLnB1c2godmFsdWUpXG4gIH1cblxuICByZXR1cm4gdmFsdWVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1cmxFcXVhbHMsXG4gIGZpZWxkVmFsdWVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IENhY2hlIH0gPSByZXF1aXJlKCcuL2NhY2hlJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBDYWNoZVN0b3JhZ2Uge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LW5hbWUtdG8tY2FjaGUtbWFwXG4gICAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoJy4vY2FjaGUnKS5yZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2NhY2hlcyA9IG5ldyBNYXAoKVxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSBrQ29uc3RydWN0KSB7XG4gICAgICB3ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yKClcbiAgICB9XG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UubWF0Y2gnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBpZiAob3B0aW9ucy5jYWNoZU5hbWUgIT0gbnVsbCkge1xuICAgICAgLy8gMS4xLjEuMVxuICAgICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMob3B0aW9ucy5jYWNoZU5hbWUpKSB7XG4gICAgICAgIC8vIDEuMS4xLjEuMVxuICAgICAgICBjb25zdCBjYWNoZUxpc3QgPSB0aGlzLiNjYWNoZXMuZ2V0KG9wdGlvbnMuY2FjaGVOYW1lKVxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gMi5cbiAgICAgIC8vIDIuMlxuICAgICAgZm9yIChjb25zdCBjYWNoZUxpc3Qgb2YgdGhpcy4jY2FjaGVzLnZhbHVlcygpKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICAvLyAyLjIuMS4yXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcblxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtaGFzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXMgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLmhhcycgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjEuMVxuICAgIC8vIDIuMlxuICAgIHJldHVybiB0aGlzLiNjYWNoZXMuaGFzKGNhY2hlTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGVzdG9yYWdlLW9wZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZT59XG4gICAqL1xuICBhc3luYyBvcGVuIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5vcGVuJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIC8vIDIuMVxuICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKGNhY2hlTmFtZSkpIHtcbiAgICAgIC8vIGF3YWl0IGNhY2hlcy5vcGVuKCd2MScpICE9PSBhd2FpdCBjYWNoZXMub3BlbigndjEnKVxuXG4gICAgICAvLyAyLjEuMVxuICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLiNjYWNoZXMuZ2V0KGNhY2hlTmFtZSlcblxuICAgICAgLy8gMi4xLjEuMVxuICAgICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgICB9XG5cbiAgICAvLyAyLjJcbiAgICBjb25zdCBjYWNoZSA9IFtdXG5cbiAgICAvLyAyLjNcbiAgICB0aGlzLiNjYWNoZXMuc2V0KGNhY2hlTmFtZSwgY2FjaGUpXG5cbiAgICAvLyAyLjRcbiAgICByZXR1cm4gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBkZWxldGUgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLmRlbGV0ZScgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1rZXlzXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIC8vIDIuMVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLiNjYWNoZXMua2V5cygpXG5cbiAgICAvLyAyLjJcbiAgICByZXR1cm4gWy4uLmtleXNdXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVTdG9yYWdlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGVTdG9yYWdlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVTdG9yYWdlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1hdHRyaWJ1dGUtdmFsdWUtc2l6ZVxuY29uc3QgbWF4QXR0cmlidXRlVmFsdWVTaXplID0gMTAyNFxuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tbmFtZS12YWx1ZS1wYWlyLXNpemVcbmNvbnN0IG1heE5hbWVWYWx1ZVBhaXJTaXplID0gNDA5NlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWF4QXR0cmlidXRlVmFsdWVTaXplLFxuICBtYXhOYW1lVmFsdWVQYWlyU2l6ZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgdmFsaWRhdGVDb29raWVOYW1lLFxuICB2YWxpZGF0ZUNvb2tpZVBhdGgsXG4gIHZhbGlkYXRlQ29va2llVmFsdWUsXG4gIHRvSU1GRGF0ZSxcbiAgc3RyaW5naWZ5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbWF4TmFtZVZhbHVlUGFpclNpemUsIG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBpc0NUTEV4Y2x1ZGluZ0h0YWIgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhcnNlcyB0aGUgZmllbGQtdmFsdWUgYXR0cmlidXRlcyBvZiBhIHNldC1jb29raWUgaGVhZGVyIHN0cmluZy5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICogQHJldHVybnMgaWYgdGhlIGhlYWRlciBpcyBpbnZhbGlkLCBudWxsIHdpbGwgYmUgcmV0dXJuZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VTZXRDb29raWUgKGhlYWRlcikge1xuICAvLyAxLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDAwLTA4IC8gJXgwQS0xRiAvICV4N0ZcbiAgLy8gICAgY2hhcmFjdGVyIChDVEwgY2hhcmFjdGVycyBleGNsdWRpbmcgSFRBQik6IEFib3J0IHRoZXNlIHN0ZXBzIGFuZFxuICAvLyAgICBpZ25vcmUgdGhlIHNldC1jb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAoaXNDVExFeGNsdWRpbmdIdGFiKGhlYWRlcikpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgbGV0IG5hbWVWYWx1ZVBhaXIgPSAnJ1xuICBsZXQgdW5wYXJzZWRBdHRyaWJ1dGVzID0gJydcbiAgbGV0IG5hbWUgPSAnJ1xuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDIuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXI6XG4gIGlmIChoZWFkZXIuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIFRoZSBuYW1lLXZhbHVlLXBhaXIgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLFxuICAgIC8vICAgIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgY29uc2lzdCBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZXQtY29va2llLXN0cmluZ1xuICAgIC8vICAgIChpbmNsdWRpbmcgdGhlICV4M0IgKFwiO1wiKSBpbiBxdWVzdGlvbikuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIG5hbWVWYWx1ZVBhaXIgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCgnOycsIGhlYWRlciwgcG9zaXRpb24pXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gaGVhZGVyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBuYW1lLXZhbHVlLXBhaXIgc3RyaW5nIGNvbnNpc3RzIG9mIGFsbCB0aGUgY2hhcmFjdGVyc1xuICAgIC8vICAgIGNvbnRhaW5lZCBpbiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcsIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBpcyB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIG5hbWVWYWx1ZVBhaXIgPSBoZWFkZXJcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBuYW1lLXZhbHVlLXBhaXIgc3RyaW5nIGxhY2tzIGEgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgdGhlblxuICAvLyAgICB0aGUgbmFtZSBzdHJpbmcgaXMgZW1wdHksIGFuZCB0aGUgdmFsdWUgc3RyaW5nIGlzIHRoZSB2YWx1ZSBvZlxuICAvLyAgICBuYW1lLXZhbHVlLXBhaXIuXG4gIGlmICghbmFtZVZhbHVlUGFpci5pbmNsdWRlcygnPScpKSB7XG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyXG4gIH0gZWxzZSB7XG4gICAgLy8gICAgT3RoZXJ3aXNlLCB0aGUgbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNEIChcIj1cIikgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseVxuICAgIC8vICAgIGVtcHR5KSB2YWx1ZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGZpcnN0XG4gICAgLy8gICAgJXgzRCAoXCI9XCIpIGNoYXJhY3Rlci5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuICAgIG5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIG5hbWVWYWx1ZVBhaXIsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9XG5cbiAgLy8gNC4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIG5hbWVcbiAgLy8gICAgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nLlxuICBuYW1lID0gbmFtZS50cmltKClcbiAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAvLyA1LiBJZiB0aGUgc3VtIG9mIHRoZSBsZW5ndGhzIG9mIHRoZSBuYW1lIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZ1xuICAvLyAgICBpcyBtb3JlIHRoYW4gNDA5NiBvY3RldHMsIGFib3J0IHRoZXNlIHN0ZXBzIGFuZCBpZ25vcmUgdGhlIHNldC1cbiAgLy8gICAgY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKG5hbWUubGVuZ3RoICsgdmFsdWUubGVuZ3RoID4gbWF4TmFtZVZhbHVlUGFpclNpemUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gNi4gVGhlIGNvb2tpZS1uYW1lIGlzIHRoZSBuYW1lIHN0cmluZywgYW5kIHRoZSBjb29raWUtdmFsdWUgaXMgdGhlXG4gIC8vICAgIHZhbHVlIHN0cmluZy5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLCB2YWx1ZSwgLi4ucGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzKVxuICB9XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSByZW1haW5pbmcgYXR0cmlidXRlcyBvZiBhIHNldC1jb29raWUgaGVhZGVyXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7W09iamVjdC48c3RyaW5nLCB1bmtub3duPl09e319IGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXMgKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdCA9IHt9KSB7XG4gIC8vIDEuIElmIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHN0cmluZyBpcyBlbXB0eSwgc2tpcCB0aGUgcmVzdCBvZlxuICAvLyAgICB0aGVzZSBzdGVwcy5cbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY29va2llQXR0cmlidXRlTGlzdFxuICB9XG5cbiAgLy8gMi4gRGlzY2FyZCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzICh3aGljaFxuICAvLyAgICB3aWxsIGJlIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcikuXG4gIGFzc2VydCh1bnBhcnNlZEF0dHJpYnV0ZXNbMF0gPT09ICc7JylcbiAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKDEpXG5cbiAgbGV0IGNvb2tpZUF2ID0gJydcblxuICAvLyAzLiBJZiB0aGUgcmVtYWluaW5nIHVucGFyc2VkLWF0dHJpYnV0ZXMgY29udGFpbnMgYSAleDNCIChcIjtcIilcbiAgLy8gICAgY2hhcmFjdGVyOlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBDb25zdW1lIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpIGNoYXJhY3Rlci5cbiAgICBjb29raWVBdiA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJzsnLFxuICAgICAgdW5wYXJzZWRBdHRyaWJ1dGVzLFxuICAgICAgeyBwb3NpdGlvbjogMCB9XG4gICAgKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZShjb29raWVBdi5sZW5ndGgpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgcmVtYWluZGVyIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzLlxuICAgIGNvb2tpZUF2ID0gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gJydcbiAgfVxuXG4gIC8vIExldCB0aGUgY29va2llLWF2IHN0cmluZyBiZSB0aGUgY2hhcmFjdGVycyBjb25zdW1lZCBpbiB0aGlzIHN0ZXAuXG5cbiAgbGV0IGF0dHJpYnV0ZU5hbWUgPSAnJ1xuICBsZXQgYXR0cmlidXRlVmFsdWUgPSAnJ1xuXG4gIC8vIDQuIElmIHRoZSBjb29raWUtYXYgc3RyaW5nIGNvbnRhaW5zIGEgJXgzRCAoXCI9XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGNvb2tpZUF2LmluY2x1ZGVzKCc9JykpIHtcbiAgICAvLyAxLiBUaGUgKHBvc3NpYmx5IGVtcHR5KSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlXG4gICAgLy8gICAgY2hhcmFjdGVycyB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5IGVtcHR5KSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nXG4gICAgLy8gICAgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3Rlci5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgYXR0cmlidXRlTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgY29va2llQXYsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgICBhdHRyaWJ1dGVWYWx1ZSA9IGNvb2tpZUF2LnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBlbnRpcmUgY29va2llLWF2XG4gICAgLy8gICAgc3RyaW5nLCBhbmQgdGhlIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmcgaXMgZW1wdHkuXG4gICAgYXR0cmlidXRlTmFtZSA9IGNvb2tpZUF2XG4gIH1cblxuICAvLyA1LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgYXR0cmlidXRlLVxuICAvLyAgICBuYW1lIHN0cmluZyBhbmQgdGhlIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmcuXG4gIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lLnRyaW0oKVxuICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlLnRyaW0oKVxuXG4gIC8vIDYuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbG9uZ2VyIHRoYW4gMTAyNCBvY3RldHMsIGlnbm9yZSB0aGVcbiAgLy8gICAgY29va2llLWF2IHN0cmluZyBhbmQgcmV0dXJuIHRvIFN0ZXAgMSBvZiB0aGlzIGFsZ29yaXRobS5cbiAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA+IG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSkge1xuICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gIH1cblxuICAvLyA3LiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGUtbmFtZSBhbmQgYXR0cmlidXRlLXZhbHVlIGFjY29yZGluZyB0byB0aGVcbiAgLy8gICAgcmVxdWlyZW1lbnRzIGluIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMuICAoTm90aWNlIHRoYXRcbiAgLy8gICAgYXR0cmlidXRlcyB3aXRoIHVucmVjb2duaXplZCBhdHRyaWJ1dGUtbmFtZXMgYXJlIGlnbm9yZWQuKVxuICBjb25zdCBhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID0gYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4xXG4gIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gIC8vIFwiRXhwaXJlc1wiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuICBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2V4cGlyZXMnKSB7XG4gICAgLy8gMS4gTGV0IHRoZSBleHBpcnktdGltZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGF0dHJpYnV0ZS12YWx1ZVxuICAgIC8vICAgIGFzIGNvb2tpZS1kYXRlIChzZWUgU2VjdGlvbiA1LjEuMSkuXG4gICAgY29uc3QgZXhwaXJ5VGltZSA9IG5ldyBEYXRlKGF0dHJpYnV0ZVZhbHVlKVxuXG4gICAgLy8gMi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBmYWlsZWQgdG8gcGFyc2UgYXMgYSBjb29raWUgZGF0ZSwgaWdub3JlXG4gICAgLy8gICAgdGhlIGNvb2tpZS1hdi5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZXhwaXJlcyA9IGV4cGlyeVRpbWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnbWF4LWFnZScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjJcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIk1heC1cbiAgICAvLyBBZ2VcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgYSBESUdJVCBvciBhXG4gICAgLy8gICAgXCItXCIgY2hhcmFjdGVyLCBpZ25vcmUgdGhlIGNvb2tpZS1hdi5cbiAgICBjb25zdCBjaGFyQ29kZSA9IGF0dHJpYnV0ZVZhbHVlLmNoYXJDb2RlQXQoMClcblxuICAgIGlmICgoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSAmJiBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy0nKSB7XG4gICAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoZSByZW1haW5kZXIgb2YgYXR0cmlidXRlLXZhbHVlIGNvbnRhaW5zIGEgbm9uLURJR0lUXG4gICAgLy8gICAgY2hhcmFjdGVyLCBpZ25vcmUgdGhlIGNvb2tpZS1hdi5cbiAgICBpZiAoIS9eXFxkKyQvLnRlc3QoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICAgIH1cblxuICAgIC8vIDMuIExldCBkZWx0YS1zZWNvbmRzIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUgY29udmVydGVkIHRvIGFuIGludGVnZXIuXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKVxuXG4gICAgLy8gNC4gTGV0IGNvb2tpZS1hZ2UtbGltaXQgYmUgdGhlIG1heGltdW0gYWdlIG9mIHRoZSBjb29raWUgKHdoaWNoXG4gICAgLy8gICAgU0hPVUxEIGJlIDQwMCBkYXlzIG9yIGxlc3MsIHNlZSBTZWN0aW9uIDQuMS4yLjIpLlxuXG4gICAgLy8gNS4gU2V0IGRlbHRhLXNlY29uZHMgdG8gdGhlIHNtYWxsZXIgb2YgaXRzIHByZXNlbnQgdmFsdWUgYW5kIGNvb2tpZS1cbiAgICAvLyAgICBhZ2UtbGltaXQuXG4gICAgLy8gZGVsdGFTZWNvbmRzID0gTWF0aC5taW4oZGVsdGFTZWNvbmRzICogMTAwMCwgbWF4RXhwaXJlc01zKVxuXG4gICAgLy8gNi4gSWYgZGVsdGEtc2Vjb25kcyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybyAoMCksIGxldCBleHBpcnktXG4gICAgLy8gICAgdGltZSBiZSB0aGUgZWFybGllc3QgcmVwcmVzZW50YWJsZSBkYXRlIGFuZCB0aW1lLiAgT3RoZXJ3aXNlLCBsZXRcbiAgICAvLyAgICB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBwbHVzIGRlbHRhLXNlY29uZHNcbiAgICAvLyAgICBzZWNvbmRzLlxuICAgIC8vIGNvbnN0IGV4cGlyeVRpbWUgPSBkZWx0YVNlY29uZHMgPD0gMCA/IERhdGUubm93KCkgOiBEYXRlLm5vdygpICsgZGVsdGFTZWNvbmRzXG5cbiAgICAvLyA3LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIE1heC1BZ2UgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBleHBpcnktdGltZS5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0Lm1heEFnZSA9IGRlbHRhU2Vjb25kc1xuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdkb21haW4nKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4zXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJEb21haW5cIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gTGV0IGNvb2tpZS1kb21haW4gYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICBsZXQgY29va2llRG9tYWluID0gYXR0cmlidXRlVmFsdWVcblxuICAgIC8vIDIuIElmIGNvb2tpZS1kb21haW4gc3RhcnRzIHdpdGggJXgyRSAoXCIuXCIpLCBsZXQgY29va2llLWRvbWFpbiBiZVxuICAgIC8vICAgIGNvb2tpZS1kb21haW4gd2l0aG91dCBpdHMgbGVhZGluZyAleDJFIChcIi5cIikuXG4gICAgaWYgKGNvb2tpZURvbWFpblswXSA9PT0gJy4nKSB7XG4gICAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4uc2xpY2UoMSlcbiAgICB9XG5cbiAgICAvLyAzLiBDb252ZXJ0IHRoZSBjb29raWUtZG9tYWluIHRvIGxvd2VyIGNhc2UuXG4gICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDQuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgRG9tYWluIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLWRvbWFpbi5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmRvbWFpbiA9IGNvb2tpZURvbWFpblxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdwYXRoJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNFxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiUGF0aFwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGVtcHR5IG9yIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlXG4gICAgLy8gICAgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCAleDJGIChcIi9cIik6XG4gICAgbGV0IGNvb2tpZVBhdGggPSAnJ1xuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPT09IDAgfHwgYXR0cmlidXRlVmFsdWVbMF0gIT09ICcvJykge1xuICAgICAgLy8gMS4gTGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBkZWZhdWx0LXBhdGguXG4gICAgICBjb29raWVQYXRoID0gJy8nXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZTpcblxuICAgICAgLy8gMS4gTGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgICBjb29raWVQYXRoID0gYXR0cmlidXRlVmFsdWVcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFBhdGggYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtcGF0aC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnBhdGggPSBjb29raWVQYXRoXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NlY3VyZScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjVcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlNlY3VyZVwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0XG4gICAgLy8gd2l0aCBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBTZWN1cmUgYW5kIGFuIGVtcHR5IGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2VjdXJlID0gdHJ1ZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdodHRwb25seScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjZcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAgIC8vIFwiSHR0cE9ubHlcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtXG4gICAgLy8gYXR0cmlidXRlLWxpc3Qgd2l0aCBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBIdHRwT25seSBhbmQgYW4gZW1wdHlcbiAgICAvLyBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0Lmh0dHBPbmx5ID0gdHJ1ZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzYW1lc2l0ZScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjdcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAgIC8vIFwiU2FtZVNpdGVcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93czpcblxuICAgIC8vIDEuIExldCBlbmZvcmNlbWVudCBiZSBcIkRlZmF1bHRcIi5cbiAgICBsZXQgZW5mb3JjZW1lbnQgPSAnRGVmYXVsdCdcblxuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID0gYXR0cmlidXRlVmFsdWUudG9Mb3dlckNhc2UoKVxuICAgIC8vIDIuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJOb25lXCIsIHNldCBlbmZvcmNlbWVudCB0byBcIk5vbmVcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTm9uZSdcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiU3RyaWN0XCIsIHNldCBlbmZvcmNlbWVudCB0byBcIlN0cmljdFwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnc3RyaWN0JykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ1N0cmljdCdcbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiTGF4XCIsIHNldCBlbmZvcmNlbWVudCB0byBcIkxheFwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbGF4JykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ0xheCdcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFwiU2FtZVNpdGVcIiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mXG4gICAgLy8gICAgZW5mb3JjZW1lbnQuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zYW1lU2l0ZSA9IGVuZm9yY2VtZW50XG4gIH0gZWxzZSB7XG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZCA/Pz0gW11cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQucHVzaChgJHthdHRyaWJ1dGVOYW1lfT0ke2F0dHJpYnV0ZVZhbHVlfWApXG4gIH1cblxuICAvLyA4LiBSZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VTZXRDb29raWUsXG4gIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29va2llXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge0RhdGV8bnVtYmVyfHVuZGVmaW5lZH0gZXhwaXJlc1xuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBtYXhBZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gZG9tYWluXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNlY3VyZVxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gaHR0cE9ubHlcbiAqIEBwcm9wZXJ0eSB7J1N0cmljdCd8J0xheCd8J05vbmUnfSBzYW1lU2l0ZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gdW5wYXJzZWRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dldENvb2tpZXMnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llID0gaGVhZGVycy5nZXQoJ2Nvb2tpZScpXG4gIGNvbnN0IG91dCA9IHt9XG5cbiAgaWYgKCFjb29raWUpIHtcbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGNvb2tpZS5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgW25hbWUsIC4uLnZhbHVlXSA9IHBpZWNlLnNwbGl0KCc9JylcblxuICAgIG91dFtuYW1lLnRyaW0oKV0gPSB2YWx1ZS5qb2luKCc9JylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3sgcGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nIH18dW5kZWZpbmVkfSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVsZXRlQ29va2llIChoZWFkZXJzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdkZWxldGVDb29raWUnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhuYW1lKVxuICBhdHRyaWJ1dGVzID0gd2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyhhdHRyaWJ1dGVzKVxuXG4gIC8vIE1hdGNoZXMgYmVoYXZpb3Igb2ZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm9fc3RkL2Jsb2IvNjM4MjdiMTYzMzBiODI0ODlhMDQ2MTQwMjdjMzNiNzkwNGUwOGJlNS9odHRwL2Nvb2tpZS50cyNMMjc4XG4gIHNldENvb2tpZShoZWFkZXJzLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZTogJycsXG4gICAgZXhwaXJlczogbmV3IERhdGUoMCksXG4gICAgLi4uYXR0cmlidXRlc1xuICB9KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge0Nvb2tpZVtdfVxuICovXG5mdW5jdGlvbiBnZXRTZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRTZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZXMgPSBoZWFkZXJzLmdldFNldENvb2tpZSgpXG5cbiAgaWYgKCFjb29raWVzKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKHBhaXIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHBhcmFtIHtDb29raWV9IGNvb2tpZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHNldENvb2tpZSAoaGVhZGVycywgY29va2llKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdzZXRDb29raWUnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29va2llID0gd2ViaWRsLmNvbnZlcnRlcnMuQ29va2llKGNvb2tpZSlcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoY29va2llKVxuXG4gIGlmIChzdHIpIHtcbiAgICBoZWFkZXJzLmFwcGVuZCgnU2V0LUNvb2tpZScsIHN0cmluZ2lmeShjb29raWUpKVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5Db29raWUgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICduYW1lJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAndmFsdWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcigodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10odmFsdWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9KSxcbiAgICBrZXk6ICdleHBpcmVzJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSksXG4gICAga2V5OiAnbWF4QWdlJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdzZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnaHR0cE9ubHknLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAga2V5OiAnc2FtZVNpdGUnLFxuICAgIGFsbG93ZWRWYWx1ZXM6IFsnU3RyaWN0JywgJ0xheCcsICdOb25lJ11cbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAndW5wYXJzZWQnLFxuICAgIGRlZmF1bHRWYWx1ZTogW11cbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvb2tpZXMsXG4gIGRlbGV0ZUNvb2tpZSxcbiAgZ2V0U2V0Q29va2llcyxcbiAgc2V0Q29va2llXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrV2ViU29ja2V0VVJMOiBTeW1ib2woJ3VybCcpLFxuICBrUmVhZHlTdGF0ZTogU3ltYm9sKCdyZWFkeSBzdGF0ZScpLFxuICBrQ29udHJvbGxlcjogU3ltYm9sKCdjb250cm9sbGVyJyksXG4gIGtSZXNwb25zZTogU3ltYm9sKCdyZXNwb25zZScpLFxuICBrQmluYXJ5VHlwZTogU3ltYm9sKCdiaW5hcnkgdHlwZScpLFxuICBrU2VudENsb3NlOiBTeW1ib2woJ3NlbnQgY2xvc2UnKSxcbiAga1JlY2VpdmVkQ2xvc2U6IFN5bWJvbCgncmVjZWl2ZWQgY2xvc2UnKSxcbiAga0J5dGVQYXJzZXI6IFN5bWJvbCgnYnl0ZSBwYXJzZXInKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgTWVzc2FnZVBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NvbW1zLmh0bWwjbWVzc2FnZWV2ZW50XG4gKi9cbmNsYXNzIE1lc3NhZ2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnTWVzc2FnZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlRXZlbnRJbml0KGV2ZW50SW5pdERpY3QpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IGRhdGEgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZGF0YVxuICB9XG5cbiAgZ2V0IG9yaWdpbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5vcmlnaW5cbiAgfVxuXG4gIGdldCBsYXN0RXZlbnRJZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5sYXN0RXZlbnRJZFxuICB9XG5cbiAgZ2V0IHNvdXJjZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5zb3VyY2VcbiAgfVxuXG4gIGdldCBwb3J0cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgaWYgKCFPYmplY3QuaXNGcm96ZW4odGhpcy4jZXZlbnRJbml0LnBvcnRzKSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzLiNldmVudEluaXQucG9ydHMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5wb3J0c1xuICB9XG5cbiAgaW5pdE1lc3NhZ2VFdmVudCAoXG4gICAgdHlwZSxcbiAgICBidWJibGVzID0gZmFsc2UsXG4gICAgY2FuY2VsYWJsZSA9IGZhbHNlLFxuICAgIGRhdGEgPSBudWxsLFxuICAgIG9yaWdpbiA9ICcnLFxuICAgIGxhc3RFdmVudElkID0gJycsXG4gICAgc291cmNlID0gbnVsbCxcbiAgICBwb3J0cyA9IFtdXG4gICkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQuaW5pdE1lc3NhZ2VFdmVudCcgfSlcblxuICAgIHJldHVybiBuZXcgTWVzc2FnZUV2ZW50KHR5cGUsIHtcbiAgICAgIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRhdGEsIG9yaWdpbiwgbGFzdEV2ZW50SWQsIHNvdXJjZSwgcG9ydHNcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyN0aGUtY2xvc2VldmVudC1pbnRlcmZhY2VcbiAqL1xuY2xhc3MgQ2xvc2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2xvc2VFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgd2FzQ2xlYW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lndhc0NsZWFuXG4gIH1cblxuICBnZXQgY29kZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuY29kZVxuICB9XG5cbiAgZ2V0IHJlYXNvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucmVhc29uXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1lcnJvcmV2ZW50LWludGVyZmFjZVxuY2xhc3MgRXJyb3JFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Vycm9yRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5FcnJvckV2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IG1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm1lc3NhZ2VcbiAgfVxuXG4gIGdldCBmaWxlbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZmlsZW5hbWVcbiAgfVxuXG4gIGdldCBsaW5lbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmxpbmVub1xuICB9XG5cbiAgZ2V0IGNvbG5vICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2xub1xuICB9XG5cbiAgZ2V0IGVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5lcnJvclxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ01lc3NhZ2VFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIGRhdGE6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9yaWdpbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGFzdEV2ZW50SWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNvdXJjZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcG9ydHM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGluaXRNZXNzYWdlRXZlbnQ6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENsb3NlRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDbG9zZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgcmVhc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjb2RlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB3YXNDbGVhbjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXJyb3JFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Vycm9yRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtZXNzYWdlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBmaWxlbmFtZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGluZW5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjb2xubzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihNZXNzYWdlUG9ydClcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydFxuKVxuXG5jb25zdCBldmVudEluaXQgPSBbXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ2RhdGEnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55LFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAnb3JpZ2luJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsYXN0RXZlbnRJZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnc291cmNlJyxcbiAgICAvLyBOb2RlIGRvZXNuJ3QgaW1wbGVtZW50IFdpbmRvd1Byb3h5IG9yIFNlcnZpY2VXb3JrZXIsIHNvIHRoZSBvbmx5XG4gICAgLy8gdmFsaWQgdmFsdWUgZm9yIHNvdXJjZSBpcyBhIE1lc3NhZ2VQb3J0LlxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0KSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGtleTogJ3BvcnRzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxNZXNzYWdlUG9ydD4nXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ3dhc0NsZWFuJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlYXNvbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5FcnJvckV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnbWVzc2FnZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnZmlsZW5hbWUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xpbmVubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnY29sbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2Vycm9yJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTWVzc2FnZUV2ZW50LFxuICBDbG9zZUV2ZW50LFxuICBFcnJvckV2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW50XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdFx1MjAxOXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHVpZCwgc3RhdGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2Vcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBmaXJlRXZlbnQsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuY2hhbm5lbHMub3BlbiA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0Om9wZW4nKVxuY2hhbm5lbHMuY2xvc2UgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpjbG9zZScpXG5jaGFubmVscy5zb2NrZXRFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnNvY2tldF9lcnJvcicpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG59IGNhdGNoIHtcblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC13ZWJzb2NrZXQtZXN0YWJsaXNoXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcHJvdG9jb2xzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0geyhyZXNwb25zZTogYW55KSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIHdzLCBvbkVzdGFibGlzaCwgb3B0aW9ucykge1xuICAvLyAxLiBMZXQgcmVxdWVzdFVSTCBiZSBhIGNvcHkgb2YgdXJsLCB3aXRoIGl0cyBzY2hlbWUgc2V0IHRvIFwiaHR0cFwiLCBpZiB1cmxcdTIwMTlzXG4gIC8vICAgIHNjaGVtZSBpcyBcIndzXCIsIGFuZCB0byBcImh0dHBzXCIgb3RoZXJ3aXNlLlxuICBjb25zdCByZXF1ZXN0VVJMID0gdXJsXG5cbiAgcmVxdWVzdFVSTC5wcm90b2NvbCA9IHVybC5wcm90b2NvbCA9PT0gJ3dzOicgPyAnaHR0cDonIDogJ2h0dHBzOidcblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBhIG5ldyByZXF1ZXN0LCB3aG9zZSBVUkwgaXMgcmVxdWVzdFVSTCwgY2xpZW50IGlzIGNsaWVudCxcbiAgLy8gICAgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJub25lXCIsIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgbW9kZSBpc1xuICAvLyAgICBcIndlYnNvY2tldFwiLCBjcmVkZW50aWFscyBtb2RlIGlzIFwiaW5jbHVkZVwiLCBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiAsXG4gIC8vICAgIGFuZCByZWRpcmVjdCBtb2RlIGlzIFwiZXJyb3JcIi5cbiAgY29uc3QgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHtcbiAgICB1cmxMaXN0OiBbcmVxdWVzdFVSTF0sXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVtrSGVhZGVyc0xpc3RdXG5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0ID0gaGVhZGVyc0xpc3RcbiAgfVxuXG4gIC8vIDMuIEFwcGVuZCAoYFVwZ3JhZGVgLCBgd2Vic29ja2V0YCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDQuIEFwcGVuZCAoYENvbm5lY3Rpb25gLCBgVXBncmFkZWApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyBOb3RlOiBib3RoIG9mIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHVuZGljaSBjdXJyZW50bHkuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2Jsb2IvNjhjMjY5YzQxNDRjNDQ2ZjNmMTIyMDk1MTMzOGRhZWY0YTZiNWVjNC9saWIvY2xpZW50LmpzI0wxMzk3XG5cbiAgLy8gNS4gTGV0IGtleVZhbHVlIGJlIGEgbm9uY2UgY29uc2lzdGluZyBvZiBhIHJhbmRvbWx5IHNlbGVjdGVkXG4gIC8vICAgIDE2LWJ5dGUgdmFsdWUgdGhhdCBoYXMgYmVlbiBmb3JnaXZpbmctYmFzZTY0LWVuY29kZWQgYW5kXG4gIC8vICAgIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgY29uc3Qga2V5VmFsdWUgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKVxuXG4gIC8vIDYuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtS2V5YCwga2V5VmFsdWUpIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1rZXknLCBrZXlWYWx1ZSlcblxuICAvLyA3LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LVZlcnNpb25gLCBgMTNgKSB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtdmVyc2lvbicsICcxMycpXG5cbiAgLy8gOC4gRm9yIGVhY2ggcHJvdG9jb2wgaW4gcHJvdG9jb2xzLCBjb21iaW5lXG4gIC8vICAgIChgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAsIHByb3RvY29sKSBpbiByZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgZm9yIChjb25zdCBwcm90b2NvbCBvZiBwcm90b2NvbHMpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHByb3RvY29sKVxuICB9XG5cbiAgLy8gOS4gTGV0IHBlcm1lc3NhZ2VEZWZsYXRlIGJlIGEgdXNlci1hZ2VudCBkZWZpbmVkXG4gIC8vICAgIFwicGVybWVzc2FnZS1kZWZsYXRlXCIgZXh0ZW5zaW9uIGhlYWRlciB2YWx1ZS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvY2U3ODIzNGY1ZTY1M2E1ZDM5MTY4MTNmZjk5MGYwNTM1MTAyMjdiYy9uZXR3ZXJrL3Byb3RvY29sL3dlYnNvY2tldC9XZWJTb2NrZXRDaGFubmVsLmNwcCNMMjY3M1xuICAvLyBUT0RPOiBlbmFibGUgb25jZSBwZXJtZXNzYWdlLWRlZmxhdGUgaXMgc3VwcG9ydGVkXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJycgLy8gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgMTUnXG5cbiAgLy8gMTAuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc2AsIHBlcm1lc3NhZ2VEZWZsYXRlKSB0b1xuICAvLyAgICAgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnLCBwZXJtZXNzYWdlRGVmbGF0ZSlcblxuICAvLyAxMS4gRmV0Y2ggcmVxdWVzdCB3aXRoIHVzZVBhcmFsbGVsUXVldWUgc2V0IHRvIHRydWUsIGFuZFxuICAvLyAgICAgcHJvY2Vzc1Jlc3BvbnNlIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN0ZXBzOlxuICBjb25zdCBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgdXNlUGFyYWxsZWxRdWV1ZTogdHJ1ZSxcbiAgICBkaXNwYXRjaGVyOiBvcHRpb25zLmRpc3BhdGNoZXIgPz8gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpLFxuICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciBvciBpdHMgc3RhdHVzIGlzIG5vdCAxMDEsXG4gICAgICAvLyAgICBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgbmV0d29yayBlcnJvciBvciBub24tMTAxIHN0YXR1cyBjb2RlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBwcm90b2NvbHMgaXMgbm90IHRoZSBlbXB0eSBsaXN0IGFuZCBleHRyYWN0aW5nIGhlYWRlclxuICAgICAgLy8gICAgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGFuZCByZXNwb25zZVx1MjAxOXNcbiAgICAgIC8vICAgIGhlYWRlciBsaXN0IHJlc3VsdHMgaW4gbnVsbCwgZmFpbHVyZSwgb3IgdGhlIGVtcHR5IGJ5dGVcbiAgICAgIC8vICAgIHNlcXVlbmNlLCB0aGVuIGZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgaWYgKHByb3RvY29scy5sZW5ndGggIT09IDAgJiYgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3QgcmVzcG9uZCB3aXRoIHNlbnQgcHJvdG9jb2xzLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBGb2xsb3cgdGhlIHJlcXVpcmVtZW50cyBzdGF0ZWQgc3RlcCAyIHRvIHN0ZXAgNiwgaW5jbHVzaXZlLFxuICAgICAgLy8gICAgb2YgdGhlIGxhc3Qgc2V0IG9mIHN0ZXBzIGluIHNlY3Rpb24gNC4xIG9mIFRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgIFByb3RvY29sIHRvIHZhbGlkYXRlIHJlc3BvbnNlLiBUaGlzIGVpdGhlciByZXN1bHRzIGluIGZhaWxcbiAgICAgIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBvciB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXNcbiAgICAgIC8vICAgIGVzdGFibGlzaGVkLlxuXG4gICAgICAvLyAyLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYW4gfFVwZ3JhZGV8IGhlYWRlciBmaWVsZCBvciB0aGUgfFVwZ3JhZGV8XG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgY29udGFpbnMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBBU0NJSSBjYXNlLVxuICAgICAgLy8gICAgaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSB2YWx1ZSBcIndlYnNvY2tldFwiLCB0aGUgY2xpZW50IE1VU1RcbiAgICAgIC8vICAgIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdVcGdyYWRlJyk/LnRvTG93ZXJDYXNlKCkgIT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IFVwZ3JhZGUgaGVhZGVyIHRvIFwid2Vic29ja2V0XCIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhIHxDb25uZWN0aW9ufCBoZWFkZXIgZmllbGQgb3IgdGhlXG4gICAgICAvLyAgICB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIGRvZXNuJ3QgY29udGFpbiBhIHRva2VuIHRoYXQgaXMgYW5cbiAgICAgIC8vICAgIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSB2YWx1ZSBcIlVwZ3JhZGVcIiwgdGhlIGNsaWVudFxuICAgICAgLy8gICAgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnQ29ubmVjdGlvbicpPy50b0xvd2VyQ2FzZSgpICE9PSAndXBncmFkZScpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCBzZXQgQ29ubmVjdGlvbiBoZWFkZXIgdG8gXCJ1cGdyYWRlXCIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgaGVhZGVyIGZpZWxkIG9yXG4gICAgICAvLyAgICB0aGUgfFNlYy1XZWJTb2NrZXQtQWNjZXB0fCBjb250YWlucyBhIHZhbHVlIG90aGVyIHRoYW4gdGhlXG4gICAgICAvLyAgICBiYXNlNjQtZW5jb2RlZCBTSEEtMSBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgfFNlYy1XZWJTb2NrZXQtXG4gICAgICAvLyAgICBLZXl8IChhcyBhIHN0cmluZywgbm90IGJhc2U2NC1kZWNvZGVkKSB3aXRoIHRoZSBzdHJpbmcgXCIyNThFQUZBNS1cbiAgICAgIC8vICAgIEU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMVwiIGJ1dCBpZ25vcmluZyBhbnkgbGVhZGluZyBhbmRcbiAgICAgIC8vICAgIHRyYWlsaW5nIHdoaXRlc3BhY2UsIHRoZSBjbGllbnQgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1dTQWNjZXB0ID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LUFjY2VwdCcpXG4gICAgICBjb25zdCBkaWdlc3QgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShrZXlWYWx1ZSArIHVpZCkuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgaWYgKHNlY1dTQWNjZXB0ICE9PSBkaWdlc3QpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdJbmNvcnJlY3QgaGFzaCByZWNlaXZlZCBpbiBTZWMtV2ViU29ja2V0LUFjY2VwdCBoZWFkZXIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIHxTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnN8IGhlYWRlclxuICAgICAgLy8gICAgZmllbGQgYW5kIHRoaXMgaGVhZGVyIGZpZWxkIGluZGljYXRlcyB0aGUgdXNlIG9mIGFuIGV4dGVuc2lvblxuICAgICAgLy8gICAgdGhhdCB3YXMgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXNcbiAgICAgIC8vICAgIGluZGljYXRlZCBhbiBleHRlbnNpb24gbm90IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50KSwgdGhlIGNsaWVudFxuICAgICAgLy8gICAgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLiAgKFRoZSBwYXJzaW5nIG9mIHRoaXNcbiAgICAgIC8vICAgIGhlYWRlciBmaWVsZCB0byBkZXRlcm1pbmUgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgcmVxdWVzdGVkIGlzXG4gICAgICAvLyAgICBkaXNjdXNzZWQgaW4gU2VjdGlvbiA5LjEuKVxuICAgICAgY29uc3Qgc2VjRXh0ZW5zaW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnKVxuXG4gICAgICBpZiAoc2VjRXh0ZW5zaW9uICE9PSBudWxsICYmIHNlY0V4dGVuc2lvbiAhPT0gcGVybWVzc2FnZURlZmxhdGUpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBkaWZmZXJlbnQgcGVybWVzc2FnZS1kZWZsYXRlIHRoYW4gdGhlIG9uZSBzZXQuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIHxTZWMtV2ViU29ja2V0LVByb3RvY29sfCBoZWFkZXIgZmllbGRcbiAgICAgIC8vICAgIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhIHN1YnByb3RvY29sIHRoYXQgd2FzXG4gICAgICAvLyAgICBub3QgcHJlc2VudCBpbiB0aGUgY2xpZW50J3MgaGFuZHNoYWtlICh0aGUgc2VydmVyIGhhcyBpbmRpY2F0ZWQgYVxuICAgICAgLy8gICAgc3VicHJvdG9jb2wgbm90IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50KSwgdGhlIGNsaWVudCBNVVNUIF9GYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgY29uc3Qgc2VjUHJvdG9jb2wgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKVxuXG4gICAgICBpZiAoc2VjUHJvdG9jb2wgIT09IG51bGwgJiYgc2VjUHJvdG9jb2wgIT09IHJlcXVlc3QuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJykpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgICAgIGlmIChjaGFubmVscy5vcGVuLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgIGNoYW5uZWxzLm9wZW4ucHVibGlzaCh7XG4gICAgICAgICAgYWRkcmVzczogcmVzcG9uc2Uuc29ja2V0LmFkZHJlc3MoKSxcbiAgICAgICAgICBwcm90b2NvbDogc2VjUHJvdG9jb2wsXG4gICAgICAgICAgZXh0ZW5zaW9uczogc2VjRXh0ZW5zaW9uXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIG9uRXN0YWJsaXNoKHJlc3BvbnNlKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gY29udHJvbGxlclxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyfSBjaHVua1xuICovXG5mdW5jdGlvbiBvblNvY2tldERhdGEgKGNodW5rKSB7XG4gIGlmICghdGhpcy53c1trQnl0ZVBhcnNlcl0ud3JpdGUoY2h1bmspKSB7XG4gICAgdGhpcy5wYXVzZSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS40XG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0Q2xvc2UgKCkge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSAmJiB3c1trUmVjZWl2ZWRDbG9zZV1cblxuICBsZXQgY29kZSA9IDEwMDVcbiAgbGV0IHJlYXNvbiA9ICcnXG5cbiAgY29uc3QgcmVzdWx0ID0gd3Nba0J5dGVQYXJzZXJdLmNsb3NpbmdJbmZvXG5cbiAgaWYgKHJlc3VsdCkge1xuICAgIGNvZGUgPSByZXN1bHQuY29kZSA/PyAxMDA1XG4gICAgcmVhc29uID0gcmVzdWx0LnJlYXNvblxuICB9IGVsc2UgaWYgKCF3c1trU2VudENsb3NlXSkge1xuICAgIC8vIElmIF9UaGUgV2ViU29ja2V0XG4gICAgLy8gQ29ubmVjdGlvbiBpcyBDbG9zZWRfIGFuZCBubyBDbG9zZSBjb250cm9sIGZyYW1lIHdhcyByZWNlaXZlZCBieSB0aGVcbiAgICAvLyBlbmRwb2ludCAoc3VjaCBhcyBjb3VsZCBvY2N1ciBpZiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgY29ubmVjdGlvblxuICAgIC8vIGlzIGxvc3QpLCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzIGNvbnNpZGVyZWQgdG8gYmVcbiAgICAvLyAxMDA2LlxuICAgIGNvZGUgPSAxMDA2XG4gIH1cblxuICAvLyAxLiBDaGFuZ2UgdGhlIHJlYWR5IHN0YXRlIHRvIENMT1NFRCAoMykuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TRURcblxuICAvLyAyLiBJZiB0aGUgdXNlciBhZ2VudCB3YXMgcmVxdWlyZWQgdG8gZmFpbCB0aGUgV2ViU29ja2V0XG4gIC8vICAgIGNvbm5lY3Rpb24sIG9yIGlmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB3YXMgY2xvc2VkXG4gIC8vICAgIGFmdGVyIGJlaW5nIGZsYWdnZWQgYXMgZnVsbCwgZmlyZSBhbiBldmVudCBuYW1lZCBlcnJvclxuICAvLyAgICBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgY2xvc2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsXG4gIC8vICAgIHVzaW5nIENsb3NlRXZlbnQsIHdpdGggdGhlIHdhc0NsZWFuIGF0dHJpYnV0ZVxuICAvLyAgICBpbml0aWFsaXplZCB0byB0cnVlIGlmIHRoZSBjb25uZWN0aW9uIGNsb3NlZCBjbGVhbmx5XG4gIC8vICAgIGFuZCBmYWxzZSBvdGhlcndpc2UsIHRoZSBjb2RlIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0b1xuICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2UgY29kZSwgYW5kIHRoZSByZWFzb25cbiAgLy8gICAgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgVVRGLThcbiAgLy8gICAgZGVjb2RlIHdpdGhvdXQgQk9NIHRvIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZVxuICAvLyAgICByZWFzb24uXG4gIGZpcmVFdmVudCgnY2xvc2UnLCB3cywgQ2xvc2VFdmVudCwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb25cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhVbnNpZ25lZDE2Qml0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG59IGNhdGNoIHtcblxufVxuXG5jbGFzcyBXZWJzb2NrZXRGcmFtZVNlbmQge1xuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ8dW5kZWZpbmVkfSBkYXRhXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoZGF0YSkge1xuICAgIHRoaXMuZnJhbWVEYXRhID0gZGF0YVxuICAgIHRoaXMubWFza0tleSA9IGNyeXB0by5yYW5kb21CeXRlcyg0KVxuICB9XG5cbiAgY3JlYXRlRnJhbWUgKG9wY29kZSkge1xuICAgIGNvbnN0IGJvZHlMZW5ndGggPSB0aGlzLmZyYW1lRGF0YT8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICBsZXQgcGF5bG9hZExlbmd0aCA9IGJvZHlMZW5ndGggLy8gMC0xMjVcbiAgICBsZXQgb2Zmc2V0ID0gNlxuXG4gICAgaWYgKGJvZHlMZW5ndGggPiBtYXhVbnNpZ25lZDE2Qml0KSB7XG4gICAgICBvZmZzZXQgKz0gOCAvLyBwYXlsb2FkIGxlbmd0aCBpcyBuZXh0IDggYnl0ZXNcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjdcbiAgICB9IGVsc2UgaWYgKGJvZHlMZW5ndGggPiAxMjUpIHtcbiAgICAgIG9mZnNldCArPSAyIC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgMiBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyNlxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShib2R5TGVuZ3RoICsgb2Zmc2V0KVxuXG4gICAgLy8gQ2xlYXIgZmlyc3QgMiBieXRlcywgZXZlcnl0aGluZyBlbHNlIGlzIG92ZXJ3cml0dGVuXG4gICAgYnVmZmVyWzBdID0gYnVmZmVyWzFdID0gMFxuICAgIGJ1ZmZlclswXSB8PSAweDgwIC8vIEZJTlxuICAgIGJ1ZmZlclswXSA9IChidWZmZXJbMF0gJiAweEYwKSArIG9wY29kZSAvLyBvcGNvZGVcblxuICAgIC8qISB3cy4gTUlUIExpY2Vuc2UuIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPiAqL1xuICAgIGJ1ZmZlcltvZmZzZXQgLSA0XSA9IHRoaXMubWFza0tleVswXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAzXSA9IHRoaXMubWFza0tleVsxXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAyXSA9IHRoaXMubWFza0tleVsyXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAxXSA9IHRoaXMubWFza0tleVszXVxuXG4gICAgYnVmZmVyWzFdID0gcGF5bG9hZExlbmd0aFxuXG4gICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoYm9keUxlbmd0aCwgMilcbiAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgLy8gQ2xlYXIgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGhcbiAgICAgIGJ1ZmZlclsyXSA9IGJ1ZmZlclszXSA9IDBcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnRCRShib2R5TGVuZ3RoLCA0LCA2KVxuICAgIH1cblxuICAgIGJ1ZmZlclsxXSB8PSAweDgwIC8vIE1BU0tcblxuICAgIC8vIG1hc2sgYm9keVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgaSsrKSB7XG4gICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSB0aGlzLmZyYW1lRGF0YVtpXSBeIHRoaXMubWFza0tleVtpICUgNF1cbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYnNvY2tldEZyYW1lU2VuZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9jb25zdGFudHMnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9nbG9iYWwnKVxuY29uc3QgeyBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLCBzdGF0ZXMsIG9wY29kZXMsIGVtcHR5QnVmZmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtXZWJTb2NrZXRVUkwsXG4gIGtSZWFkeVN0YXRlLFxuICBrQ29udHJvbGxlcixcbiAga0JpbmFyeVR5cGUsXG4gIGtSZXNwb25zZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXJcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc0VzdGFibGlzaGVkLCBpc0Nsb3NpbmcsIGlzVmFsaWRTdWJwcm90b2NvbCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGZpcmVFdmVudCB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uJylcbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcbmNvbnN0IHsgQnl0ZVBhcnNlciB9ID0gcmVxdWlyZSgnLi9yZWNlaXZlcicpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzQmxvYkxpa2UgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcblxubGV0IGV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1kZWZpbml0aW9uXG5jbGFzcyBXZWJTb2NrZXQgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBjbG9zZTogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjYnVmZmVyZWRBbW91bnQgPSAwXG4gICNwcm90b2NvbCA9ICcnXG4gICNleHRlbnNpb25zID0gJydcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcHJvdG9jb2xzXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCBwcm90b2NvbHMgPSBbXSkge1xuICAgIHN1cGVyKClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdXZWJTb2NrZXQgY29uc3RydWN0b3InIH0pXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnV2ViU29ja2V0cyBhcmUgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLVdTJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+IG9yIFdlYlNvY2tldEluaXQnXShwcm90b2NvbHMpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHByb3RvY29scyA9IG9wdGlvbnMucHJvdG9jb2xzXG5cbiAgICAvLyAxLiBMZXQgYmFzZVVSTCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVUkwgPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgLy8gMS4gTGV0IHVybFJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBVUkwgcGFyc2VyIHRvIHVybCB3aXRoIGJhc2VVUkwuXG4gICAgbGV0IHVybFJlY29yZFxuXG4gICAgdHJ5IHtcbiAgICAgIHVybFJlY29yZCA9IG5ldyBVUkwodXJsLCBiYXNlVVJMKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIDMuIElmIHVybFJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oZSwgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBJZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBcIiwgdGhlbiBzZXQgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgdG8gXCJ3c1wiLlxuICAgIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICAgIHVybFJlY29yZC5wcm90b2NvbCA9ICd3czonXG4gICAgfSBlbHNlIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cHNcIiwgc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NzXCIuXG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3NzOidcbiAgICB9XG5cbiAgICAvLyA2LiBJZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBub3QgXCJ3c1wiIG9yIFwid3NzXCIsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3czonICYmIHVybFJlY29yZC5wcm90b2NvbCAhPT0gJ3dzczonKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICBgRXhwZWN0ZWQgYSB3czogb3Igd3NzOiBwcm90b2NvbCwgZ290ICR7dXJsUmVjb3JkLnByb3RvY29sfWAsXG4gICAgICAgICdTeW50YXhFcnJvcidcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyA3LiBJZiB1cmxSZWNvcmRcdTIwMTlzIGZyYWdtZW50IGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiXG4gICAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh1cmxSZWNvcmQuaGFzaCB8fCB1cmxSZWNvcmQuaHJlZi5lbmRzV2l0aCgnIycpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdHb3QgZnJhZ21lbnQnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDguIElmIHByb3RvY29scyBpcyBhIHN0cmluZywgc2V0IHByb3RvY29scyB0byBhIHNlcXVlbmNlIGNvbnNpc3RpbmdcbiAgICAvLyAgICBvZiBqdXN0IHRoYXQgc3RyaW5nLlxuICAgIGlmICh0eXBlb2YgcHJvdG9jb2xzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvdG9jb2xzID0gW3Byb3RvY29sc11cbiAgICB9XG5cbiAgICAvLyA5LiBJZiBhbnkgb2YgdGhlIHZhbHVlcyBpbiBwcm90b2NvbHMgb2NjdXIgbW9yZSB0aGFuIG9uY2Ugb3Igb3RoZXJ3aXNlXG4gICAgLy8gICAgZmFpbCB0byBtYXRjaCB0aGUgcmVxdWlyZW1lbnRzIGZvciBlbGVtZW50cyB0aGF0IGNvbXByaXNlIHRoZSB2YWx1ZVxuICAgIC8vICAgIG9mIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBmaWVsZHMgYXMgZGVmaW5lZCBieSBUaGUgV2ViU29ja2V0XG4gICAgLy8gICAgcHJvdG9jb2wsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSBuZXcgU2V0KHByb3RvY29scy5tYXAocCA9PiBwLnRvTG93ZXJDYXNlKCkpKS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgdmFsdWUnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIGlmIChwcm90b2NvbHMubGVuZ3RoID4gMCAmJiAhcHJvdG9jb2xzLmV2ZXJ5KHAgPT4gaXNWYWxpZFN1YnByb3RvY29sKHApKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyAxMC4gU2V0IHRoaXMncyB1cmwgdG8gdXJsUmVjb3JkLlxuICAgIHRoaXNba1dlYlNvY2tldFVSTF0gPSBuZXcgVVJMKHVybFJlY29yZC5ocmVmKVxuXG4gICAgLy8gMTEuIExldCBjbGllbnQgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC5cblxuICAgIC8vIDEyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOlxuXG4gICAgLy8gICAgMS4gRXN0YWJsaXNoIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gZ2l2ZW4gdXJsUmVjb3JkLCBwcm90b2NvbHMsXG4gICAgLy8gICAgICAgYW5kIGNsaWVudC5cbiAgICB0aGlzW2tDb250cm9sbGVyXSA9IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24oXG4gICAgICB1cmxSZWNvcmQsXG4gICAgICBwcm90b2NvbHMsXG4gICAgICB0aGlzLFxuICAgICAgKHJlc3BvbnNlKSA9PiB0aGlzLiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZChyZXNwb25zZSksXG4gICAgICBvcHRpb25zXG4gICAgKVxuXG4gICAgLy8gRWFjaCBXZWJTb2NrZXQgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIHJlYWR5IHN0YXRlLCB3aGljaCBpcyBhXG4gICAgLy8gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24uIEluaXRpYWxseSBpdCBtdXN0XG4gICAgLy8gYmUgQ09OTkVDVElORyAoMCkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ09OTkVDVElOR1xuXG4gICAgLy8gVGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gVGhlIHByb3RvY29sIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBiaW5hcnkgdHlwZSwgd2hpY2ggaXMgYVxuICAgIC8vIEJpbmFyeVR5cGUuIEluaXRpYWxseSBpdCBtdXN0IGJlIFwiYmxvYlwiLlxuICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSB1bmRlZmluZWQsIHJlYXNvbiA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZGUgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShjb2RlLCB7IGNsYW1wOiB0cnVlIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWFzb24gPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcocmVhc29uKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNvZGUgaXMgcHJlc2VudCwgYnV0IGlzIG5laXRoZXIgYW4gaW50ZWdlciBlcXVhbCB0byAxMDAwIG5vciBhblxuICAgIC8vICAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDMwMDAgdG8gNDk5OSwgaW5jbHVzaXZlLCB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZEFjY2Vzc0Vycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb2RlICE9PSAxMDAwICYmIChjb2RlIDwgMzAwMCB8fCBjb2RlID4gNDk5OSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignaW52YWxpZCBjb2RlJywgJ0ludmFsaWRBY2Nlc3NFcnJvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlYXNvbkJ5dGVMZW5ndGggPSAwXG5cbiAgICAvLyAyLiBJZiByZWFzb24gaXMgcHJlc2VudCwgdGhlbiBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVhc29uQnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZyByZWFzb24uXG4gICAgICAvLyAyLiBJZiByZWFzb25CeXRlcyBpcyBsb25nZXIgdGhhbiAxMjMgYnl0ZXMsIHRoZW4gdGhyb3cgYVxuICAgICAgLy8gICAgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAgIHJlYXNvbkJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pXG5cbiAgICAgIGlmIChyZWFzb25CeXRlTGVuZ3RoID4gMTIzKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgICAgYFJlYXNvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMjMgYnl0ZXM7IHJlY2VpdmVkICR7cmVhc29uQnl0ZUxlbmd0aH1gLFxuICAgICAgICAgICdTeW50YXhFcnJvcidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIFJ1biB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ0xPU0lORyB8fCB0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NFRCkge1xuICAgICAgLy8gSWYgdGhpcydzIHJlYWR5IHN0YXRlIGlzIENMT1NJTkcgKDIpIG9yIENMT1NFRCAoMylcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh0aGlzKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgZXN0YWJsaXNoZWRcbiAgICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgICAvLyB0byBDTE9TSU5HICgyKS5cbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH0gZWxzZSBpZiAoIWlzQ2xvc2luZyh0aGlzKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBiZWVuIHN0YXJ0ZWRcbiAgICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAgIC8vIHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgLy8gLSBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgICAvLyAtIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgICAgLy8gICBXZWJTb2NrZXQgQ2xvc2UgbWVzc2FnZSBtdXN0IGJlIHRoZSBpbnRlZ2VyIGdpdmVuIGJ5IGNvZGUuXG4gICAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gICBwcm92aWRlZCBpbiB0aGUgQ2xvc2UgbWVzc2FnZSBhZnRlciB0aGUgc3RhdHVzIGNvZGUuXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAgIC8vIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAgIC8vIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG5cbiAgICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIH0gZWxzZSBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgICAvLyBwcm92aWRlZCBpbiB0aGUgQ2xvc2UgbWVzc2FnZSBhZnRlciB0aGUgc3RhdHVzIGNvZGUuXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyICsgcmVhc29uQnl0ZUxlbmd0aClcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgICAgLy8gdGhlIGJvZHkgTUFZIGNvbnRhaW4gVVRGLTgtZW5jb2RlZCBkYXRhIHdpdGggdmFsdWUgL3JlYXNvbi9cbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlKHJlYXNvbiwgMiwgJ3V0Zi04JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IGVtcHR5QnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tSZXNwb25zZV0uc29ja2V0XG5cbiAgICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSwgKGVycikgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHRoaXNba1NlbnRDbG9zZV0gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vIFNldCB0aGlzJ3MgcmVhZHkgc3RhdGUgdG8gQ0xPU0lORyAoMikuXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DTE9TSU5HXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1zZW5kXG4gICAqIEBwYXJhbSB7Tm9kZUpTLlR5cGVkQXJyYXl8QXJyYXlCdWZmZXJ8QmxvYnxzdHJpbmd9IGRhdGFcbiAgICovXG4gIHNlbmQgKGRhdGEpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0LnNlbmQnIH0pXG5cbiAgICBkYXRhID0gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEoZGF0YSlcblxuICAgIC8vIDEuIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDT05ORUNUSU5HLCB0aGVuIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkU3RhdGVFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdTZW50IGJlZm9yZSBjb25uZWN0ZWQuJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICB9XG5cbiAgICAvLyAyLiBSdW4gdGhlIGFwcHJvcHJpYXRlIHNldCBvZiBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi02LjFcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi01LjJcblxuICAgIGlmICghaXNFc3RhYmxpc2hlZCh0aGlzKSB8fCBpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgLy8gSWYgZGF0YSBpcyBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudFxuICAgICAgLy8gbXVzdCBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIHRoZSBkYXRhIGFyZ3VtZW50XG4gICAgICAvLyB1c2luZyBhIHRleHQgZnJhbWUgb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLlxuICAgICAgLy8gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsXG4gICAgICAvLyB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYVxuICAgICAgLy8gc3RyaW5nIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2VcbiAgICAgIC8vIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG9cbiAgICAgIC8vIGV4cHJlc3MgdGhlIGFyZ3VtZW50IGFzIFVURi04LlxuXG4gICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQodmFsdWUpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlRFWFQpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZFxuICAgICAgLy8gdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgLy8gVGhlIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBkZXNjcmliZWRcbiAgICAgIC8vIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QuIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW5cbiAgICAgIC8vIEFycmF5QnVmZmVyIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3RcbiAgICAgIC8vIGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAgIC8vIEFycmF5QnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQodmFsdWUpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG9cbiAgICAgIC8vIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlXG4gICAgICAvLyBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBzZWN0aW9uIG9mIHRoZSBidWZmZXJcbiAgICAgIC8vIGRlc2NyaWJlZCBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0IHRoYXQgZGF0YSByZWZlcmVuY2VzLiBBbnlcbiAgICAgIC8vIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCB0aGlzIGtpbmQgb2YgYXJndW1lbnQgdGhhdCBkb2VzXG4gICAgICAvLyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZVxuICAgICAgLy8gYnkgdGhlIGxlbmd0aCBvZiBkYXRhXHUyMDE5cyBidWZmZXIgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IGFiID0gQnVmZmVyLmZyb20oZGF0YSwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChhYilcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBhYi5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGFiLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG9cbiAgICAgIC8vIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlIGRhdGFcbiAgICAgIC8vIHRvIGJlIHNlbnQgaXMgdGhlIHJhdyBkYXRhIHJlcHJlc2VudGVkIGJ5IHRoZSBCbG9iIG9iamVjdC4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYSBCbG9iIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3dcbiAgICAgIC8vIGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIHNpemVcbiAgICAgIC8vIG9mIHRoZSBCbG9iIG9iamVjdFx1MjAxOXMgcmF3IGRhdGEsIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICBkYXRhLmFycmF5QnVmZmVyKCkudGhlbigoYWIpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShhYilcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gdmFsdWVcbiAgICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHJlYWR5U3RhdGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHJlYWR5IHN0YXRlLlxuICAgIHJldHVybiB0aGlzW2tSZWFkeVN0YXRlXVxuICB9XG5cbiAgZ2V0IGJ1ZmZlcmVkQW1vdW50ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jYnVmZmVyZWRBbW91bnRcbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHVybCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tXZWJTb2NrZXRVUkxdKVxuICB9XG5cbiAgZ2V0IGV4dGVuc2lvbnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNleHRlbnNpb25zXG4gIH1cblxuICBnZXQgcHJvdG9jb2wgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNwcm90b2NvbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jZXZlbnRzLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25jbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5jbG9zZVxuICB9XG5cbiAgc2V0IG9uY2xvc2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5jbG9zZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuI2V2ZW50cy5jbG9zZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5tZXNzYWdlXG4gIH1cblxuICBzZXQgb25tZXNzYWdlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMubWVzc2FnZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jZXZlbnRzLm1lc3NhZ2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBiaW5hcnlUeXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpc1trQmluYXJ5VHlwZV1cbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlICh0eXBlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHR5cGUgIT09ICdibG9iJyAmJiB0eXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICAgKi9cbiAgI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkIChyZXNwb25zZSkge1xuICAgIC8vIHByb2Nlc3NSZXNwb25zZSBpcyBjYWxsZWQgd2hlbiB0aGUgXCJyZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIGluaXRpYWxpemVkLlwiXG4gICAgLy8gb25jZSB0aGlzIGhhcHBlbnMsIHRoZSBjb25uZWN0aW9uIGlzIG9wZW5cbiAgICB0aGlzW2tSZXNwb25zZV0gPSByZXNwb25zZVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEJ5dGVQYXJzZXIodGhpcylcbiAgICBwYXJzZXIub24oJ2RyYWluJywgZnVuY3Rpb24gb25QYXJzZXJEcmFpbiAoKSB7XG4gICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LnJlc3VtZSgpXG4gICAgfSlcblxuICAgIHJlc3BvbnNlLnNvY2tldC53cyA9IHRoaXNcbiAgICB0aGlzW2tCeXRlUGFyc2VyXSA9IHBhcnNlclxuXG4gICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBPUEVOICgxKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5PUEVOXG5cbiAgICAvLyAyLiBDaGFuZ2UgdGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlXHUyMDE5cyB2YWx1ZSB0byB0aGUgZXh0ZW5zaW9ucyBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycpXG5cbiAgICBpZiAoZXh0ZW5zaW9ucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnNcbiAgICB9XG5cbiAgICAvLyAzLiBDaGFuZ2UgdGhlIHByb3RvY29sIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIHN1YnByb3RvY29sIGluIHVzZSwgaWZcbiAgICAvLyAgICBpdCBpcyBub3QgdGhlIG51bGwgdmFsdWUuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tMS45XG4gICAgY29uc3QgcHJvdG9jb2wgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnKVxuXG4gICAgaWYgKHByb3RvY29sICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiNwcm90b2NvbCA9IHByb3RvY29sXG4gICAgfVxuXG4gICAgLy8gNC4gRmlyZSBhbiBldmVudCBuYW1lZCBvcGVuIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAgIGZpcmVFdmVudCgnb3BlbicsIHRoaXMpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jb25uZWN0aW5nXG5XZWJTb2NrZXQuQ09OTkVDVElORyA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ09OTkVDVElORyA9IHN0YXRlcy5DT05ORUNUSU5HXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LW9wZW5cbldlYlNvY2tldC5PUEVOID0gV2ViU29ja2V0LnByb3RvdHlwZS5PUEVOID0gc3RhdGVzLk9QRU5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2luZ1xuV2ViU29ja2V0LkNMT1NJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNMT1NJTkcgPSBzdGF0ZXMuQ0xPU0lOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZWRcbldlYlNvY2tldC5DTE9TRUQgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNMT1NFRCA9IHN0YXRlcy5DTE9TRURcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV2ViU29ja2V0LnByb3RvdHlwZSwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYnVmZmVyZWRBbW91bnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ub3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25lcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25jbG9zZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYmluYXJ5VHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2VuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXh0ZW5zaW9uczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHJvdG9jb2w6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdXZWJTb2NrZXQnLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV2ViU29ja2V0LCB7XG4gIENPTk5FQ1RJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIE9QRU46IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NFRDogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPERPTVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmIFN5bWJvbC5pdGVyYXRvciBpbiBWKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10oVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcbn1cblxuLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBwcm9wc2FsIG1hZGUgaW4gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy93ZWJzb2NrZXRzL2lzc3Vlcy80Mlxud2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3Byb3RvY29scycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLFxuICAgIGNvbnZlcnRlcjogKFYpID0+IFYsXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQpXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdChWKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJvdG9jb2xzOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXShWKSB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYlNvY2tldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2xpYi9jbGllbnQnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXInKVxuY29uc3QgZXJyb3JzID0gcmVxdWlyZSgnLi9saWIvY29yZS9lcnJvcnMnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vbGliL3Bvb2wnKVxuY29uc3QgQmFsYW5jZWRQb29sID0gcmVxdWlyZSgnLi9saWIvYmFsYW5jZWQtcG9vbCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2FnZW50JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2xpYi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gZXJyb3JzXG5jb25zdCBhcGkgPSByZXF1aXJlKCcuL2xpYi9hcGknKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Nvbm5lY3QnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja0FnZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWFnZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLXBvb2wnKVxuY29uc3QgbW9ja0Vycm9ycyA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1lcnJvcnMnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vbGliL3Byb3h5LWFnZW50JylcbmNvbnN0IFJldHJ5SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvUmV0cnlIYW5kbGVyJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciwgc2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi9saWIvZ2xvYmFsJylcbmNvbnN0IERlY29yYXRvckhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL0RlY29yYXRvckhhbmRsZXInKVxuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXInKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3InKVxuXG5sZXQgaGFzQ3J5cHRvXG50cnkge1xuICByZXF1aXJlKCdjcnlwdG8nKVxuICBoYXNDcnlwdG8gPSB0cnVlXG59IGNhdGNoIHtcbiAgaGFzQ3J5cHRvID0gZmFsc2Vcbn1cblxuT2JqZWN0LmFzc2lnbihEaXNwYXRjaGVyLnByb3RvdHlwZSwgYXBpKVxuXG5tb2R1bGUuZXhwb3J0cy5EaXNwYXRjaGVyID0gRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuQ2xpZW50ID0gQ2xpZW50XG5tb2R1bGUuZXhwb3J0cy5Qb29sID0gUG9vbFxubW9kdWxlLmV4cG9ydHMuQmFsYW5jZWRQb29sID0gQmFsYW5jZWRQb29sXG5tb2R1bGUuZXhwb3J0cy5BZ2VudCA9IEFnZW50XG5tb2R1bGUuZXhwb3J0cy5Qcm94eUFnZW50ID0gUHJveHlBZ2VudFxubW9kdWxlLmV4cG9ydHMuUmV0cnlIYW5kbGVyID0gUmV0cnlIYW5kbGVyXG5cbm1vZHVsZS5leHBvcnRzLkRlY29yYXRvckhhbmRsZXIgPSBEZWNvcmF0b3JIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5SZWRpcmVjdEhhbmRsZXIgPSBSZWRpcmVjdEhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQ29ubmVjdG9yID0gYnVpbGRDb25uZWN0b3Jcbm1vZHVsZS5leHBvcnRzLmVycm9ycyA9IGVycm9yc1xuXG5mdW5jdGlvbiBtYWtlRGlzcGF0Y2hlciAoZm4pIHtcbiAgcmV0dXJuICh1cmwsIG9wdHMsIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZXIgPSBvcHRzXG4gICAgICBvcHRzID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghdXJsIHx8ICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdXJsICE9PSAnb2JqZWN0JyAmJiAhKHVybCBpbnN0YW5jZW9mIFVSTCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAhPSBudWxsICYmIHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICYmIG9wdHMucGF0aCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMucGF0aCcpXG4gICAgICB9XG5cbiAgICAgIGxldCBwYXRoID0gb3B0cy5wYXRoXG4gICAgICBpZiAoIW9wdHMucGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICAgIH1cblxuICAgICAgdXJsID0gbmV3IFVSTCh1dGlsLnBhcnNlT3JpZ2luKHVybCkub3JpZ2luICsgcGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIG9wdHMgPSB0eXBlb2YgdXJsID09PSAnb2JqZWN0JyA/IHVybCA6IHt9XG4gICAgICB9XG5cbiAgICAgIHVybCA9IHV0aWwucGFyc2VVUkwodXJsKVxuICAgIH1cblxuICAgIGNvbnN0IHsgYWdlbnQsIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgfSA9IG9wdHNcblxuICAgIGlmIChhZ2VudCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBvcHRzLmFnZW50LiBEaWQgeW91IG1lYW4gb3B0cy5jbGllbnQ/JylcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uY2FsbChkaXNwYXRjaGVyLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgcGF0aDogdXJsLnNlYXJjaCA/IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCA6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgKG9wdHMuYm9keSA/ICdQVVQnIDogJ0dFVCcpXG4gICAgfSwgaGFuZGxlcilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxEaXNwYXRjaGVyID0gc2V0R2xvYmFsRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsRGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXJcblxuaWYgKHV0aWwubm9kZU1ham9yID4gMTYgfHwgKHV0aWwubm9kZU1ham9yID09PSAxNiAmJiB1dGlsLm5vZGVNaW5vciA+PSA4KSkge1xuICBsZXQgZmV0Y2hJbXBsID0gbnVsbFxuICBtb2R1bGUuZXhwb3J0cy5mZXRjaCA9IGFzeW5jIGZ1bmN0aW9uIGZldGNoIChyZXNvdXJjZSkge1xuICAgIGlmICghZmV0Y2hJbXBsKSB7XG4gICAgICBmZXRjaEltcGwgPSByZXF1aXJlKCcuL2xpYi9mZXRjaCcpLmZldGNoXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaEltcGwoLi4uYXJndW1lbnRzKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdGhpcylcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG4gIG1vZHVsZS5leHBvcnRzLkhlYWRlcnMgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9oZWFkZXJzJykuSGVhZGVyc1xuICBtb2R1bGUuZXhwb3J0cy5SZXNwb25zZSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL3Jlc3BvbnNlJykuUmVzcG9uc2VcbiAgbW9kdWxlLmV4cG9ydHMuUmVxdWVzdCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL3JlcXVlc3QnKS5SZXF1ZXN0XG4gIG1vZHVsZS5leHBvcnRzLkZvcm1EYXRhID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZm9ybWRhdGEnKS5Gb3JtRGF0YVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZmlsZScpLkZpbGVcbiAgbW9kdWxlLmV4cG9ydHMuRmlsZVJlYWRlciA9IHJlcXVpcmUoJy4vbGliL2ZpbGVhcGkvZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJcblxuICBjb25zdCB7IHNldEdsb2JhbE9yaWdpbiwgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9nbG9iYWwnKVxuXG4gIG1vZHVsZS5leHBvcnRzLnNldEdsb2JhbE9yaWdpbiA9IHNldEdsb2JhbE9yaWdpblxuICBtb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW5cblxuICBjb25zdCB7IENhY2hlU3RvcmFnZSB9ID0gcmVxdWlyZSgnLi9saWIvY2FjaGUvY2FjaGVzdG9yYWdlJylcbiAgY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9zeW1ib2xzJylcblxuICAvLyBDYWNoZSAmIENhY2hlU3RvcmFnZSBhcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggZmV0Y2guIEV2ZW4gaWYgaXQgbWF5IHJ1blxuICAvLyBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIE5vZGUsIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgdXNlIHdpdGhvdXQgZmV0Y2guXG4gIG1vZHVsZS5leHBvcnRzLmNhY2hlcyA9IG5ldyBDYWNoZVN0b3JhZ2Uoa0NvbnN0cnVjdClcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE2KSB7XG4gIGNvbnN0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWVzLCBnZXRTZXRDb29raWVzLCBzZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vbGliL2Nvb2tpZXMnKVxuXG4gIG1vZHVsZS5leHBvcnRzLmRlbGV0ZUNvb2tpZSA9IGRlbGV0ZUNvb2tpZVxuICBtb2R1bGUuZXhwb3J0cy5nZXRDb29raWVzID0gZ2V0Q29va2llc1xuICBtb2R1bGUuZXhwb3J0cy5nZXRTZXRDb29raWVzID0gZ2V0U2V0Q29va2llc1xuICBtb2R1bGUuZXhwb3J0cy5zZXRDb29raWUgPSBzZXRDb29raWVcblxuICBjb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZGF0YVVSTCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMucGFyc2VNSU1FVHlwZSA9IHBhcnNlTUlNRVR5cGVcbiAgbW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplQU1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlXG59XG5cbmlmICh1dGlsLm5vZGVNYWpvciA+PSAxOCAmJiBoYXNDcnlwdG8pIHtcbiAgY29uc3QgeyBXZWJTb2NrZXQgfSA9IHJlcXVpcmUoJy4vbGliL3dlYnNvY2tldC93ZWJzb2NrZXQnKVxuXG4gIG1vZHVsZS5leHBvcnRzLldlYlNvY2tldCA9IFdlYlNvY2tldFxufVxuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gbWFrZURpc3BhdGNoZXIoYXBpLnJlcXVlc3QpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSBtYWtlRGlzcGF0Y2hlcihhcGkuc3RyZWFtKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBtYWtlRGlzcGF0Y2hlcihhcGkucGlwZWxpbmUpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gbWFrZURpc3BhdGNoZXIoYXBpLmNvbm5lY3QpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gbWFrZURpc3BhdGNoZXIoYXBpLnVwZ3JhZGUpXG5cbm1vZHVsZS5leHBvcnRzLk1vY2tDbGllbnQgPSBNb2NrQ2xpZW50XG5tb2R1bGUuZXhwb3J0cy5Nb2NrUG9vbCA9IE1vY2tQb29sXG5tb2R1bGUuZXhwb3J0cy5Nb2NrQWdlbnQgPSBNb2NrQWdlbnRcbm1vZHVsZS5leHBvcnRzLm1vY2tFcnJvcnMgPSBtb2NrRXJyb3JzXG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IE51bGxPYmplY3QgPSBmdW5jdGlvbiBOdWxsT2JqZWN0ICgpIHsgfVxuTnVsbE9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoICooIFwiO1wiIHBhcmFtZXRlciApIGluIFJGQyA3MjMxIHNlYyAzLjEuMS4xXG4gKlxuICogcGFyYW1ldGVyICAgICA9IHRva2VuIFwiPVwiICggdG9rZW4gLyBxdW90ZWQtc3RyaW5nIClcbiAqIHRva2VuICAgICAgICAgPSAxKnRjaGFyXG4gKiB0Y2hhciAgICAgICAgID0gXCIhXCIgLyBcIiNcIiAvIFwiJFwiIC8gXCIlXCIgLyBcIiZcIiAvIFwiJ1wiIC8gXCIqXCJcbiAqICAgICAgICAgICAgICAgLyBcIitcIiAvIFwiLVwiIC8gXCIuXCIgLyBcIl5cIiAvIFwiX1wiIC8gXCJgXCIgLyBcInxcIiAvIFwiflwiXG4gKiAgICAgICAgICAgICAgIC8gRElHSVQgLyBBTFBIQVxuICogICAgICAgICAgICAgICA7IGFueSBWQ0hBUiwgZXhjZXB0IGRlbGltaXRlcnNcbiAqIHF1b3RlZC1zdHJpbmcgPSBEUVVPVEUgKiggcWR0ZXh0IC8gcXVvdGVkLXBhaXIgKSBEUVVPVEVcbiAqIHFkdGV4dCAgICAgICAgPSBIVEFCIC8gU1AgLyAleDIxIC8gJXgyMy01QiAvICV4NUQtN0UgLyBvYnMtdGV4dFxuICogb2JzLXRleHQgICAgICA9ICV4ODAtRkZcbiAqIHF1b3RlZC1wYWlyICAgPSBcIlxcXCIgKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAqL1xuY29uc3QgcGFyYW1SRSA9IC87ICooWyEjJCUmJyorLl5cXHdgfH4tXSspPShcIig/OltcXHZcXHUwMDIwXFx1MDAyMVxcdTAwMjMtXFx1MDA1YlxcdTAwNWQtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl18XFxcXFtcXHZcXHUwMDIwLVxcdTAwZmZdKSpcInxbISMkJSYnKisuXlxcd2B8fi1dKykgKi9ndVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCBxdW90ZWQtcGFpciBpbiBSRkMgNzIzMCBzZWMgMy4yLjZcbiAqXG4gKiBxdW90ZWQtcGFpciA9IFwiXFxcIiAoIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICogb2JzLXRleHQgICAgPSAleDgwLUZGXG4gKi9cbmNvbnN0IHF1b3RlZFBhaXJSRSA9IC9cXFxcKFtcXHZcXHUwMDIwLVxcdTAwZmZdKS9ndVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCB0eXBlIGluIFJGQyA3MjMxIHNlYyAzLjEuMS4xXG4gKlxuICogbWVkaWEtdHlwZSA9IHR5cGUgXCIvXCIgc3VidHlwZVxuICogdHlwZSAgICAgICA9IHRva2VuXG4gKiBzdWJ0eXBlICAgID0gdG9rZW5cbiAqL1xuY29uc3QgbWVkaWFUeXBlUkUgPSAvXlshIyQlJicqKy5eXFx3fH4tXStcXC9bISMkJSYnKisuXlxcd3x+LV0rJC91XG5cbi8vIGRlZmF1bHQgQ29udGVudFR5cGUgdG8gcHJldmVudCByZXBlYXRlZCBvYmplY3QgY3JlYXRpb25cbmNvbnN0IGRlZmF1bHRDb250ZW50VHlwZSA9IHsgdHlwZTogJycsIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KCkgfVxuT2JqZWN0LmZyZWV6ZShkZWZhdWx0Q29udGVudFR5cGUucGFyYW1ldGVycylcbk9iamVjdC5mcmVlemUoZGVmYXVsdENvbnRlbnRUeXBlKVxuXG4vKipcbiAqIFBhcnNlIG1lZGlhIHR5cGUgdG8gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gaGVhZGVyXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UgKGhlYWRlcikge1xuICBpZiAodHlwZW9mIGhlYWRlciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBoZWFkZXIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBzdHJpbmcnKVxuICB9XG5cbiAgbGV0IGluZGV4ID0gaGVhZGVyLmluZGV4T2YoJzsnKVxuICBjb25zdCB0eXBlID0gaW5kZXggIT09IC0xXG4gICAgPyBoZWFkZXIuc2xpY2UoMCwgaW5kZXgpLnRyaW0oKVxuICAgIDogaGVhZGVyLnRyaW0oKVxuXG4gIGlmIChtZWRpYVR5cGVSRS50ZXN0KHR5cGUpID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgbWVkaWEgdHlwZScpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogdHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KClcbiAgfVxuXG4gIC8vIHBhcnNlIHBhcmFtZXRlcnNcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxldCBrZXlcbiAgbGV0IG1hdGNoXG4gIGxldCB2YWx1ZVxuXG4gIHBhcmFtUkUubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAoKG1hdGNoID0gcGFyYW1SRS5leGVjKGhlYWRlcikpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgZm9ybWF0JylcbiAgICB9XG5cbiAgICBpbmRleCArPSBtYXRjaFswXS5sZW5ndGhcbiAgICBrZXkgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG4gICAgdmFsdWUgPSBtYXRjaFsyXVxuXG4gICAgaWYgKHZhbHVlWzBdID09PSAnXCInKSB7XG4gICAgICAvLyByZW1vdmUgcXVvdGVzIGFuZCBlc2NhcGVzXG4gICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgIC5zbGljZSgxLCB2YWx1ZS5sZW5ndGggLSAxKVxuXG4gICAgICBxdW90ZWRQYWlyUkUudGVzdCh2YWx1ZSkgJiYgKHZhbHVlID0gdmFsdWUucmVwbGFjZShxdW90ZWRQYWlyUkUsICckMScpKVxuICAgIH1cblxuICAgIHJlc3VsdC5wYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZVxuICB9XG5cbiAgaWYgKGluZGV4ICE9PSBoZWFkZXIubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgZm9ybWF0JylcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gc2FmZVBhcnNlIChoZWFkZXIpIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICB9XG5cbiAgbGV0IGluZGV4ID0gaGVhZGVyLmluZGV4T2YoJzsnKVxuICBjb25zdCB0eXBlID0gaW5kZXggIT09IC0xXG4gICAgPyBoZWFkZXIuc2xpY2UoMCwgaW5kZXgpLnRyaW0oKVxuICAgIDogaGVhZGVyLnRyaW0oKVxuXG4gIGlmIChtZWRpYVR5cGVSRS50ZXN0KHR5cGUpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiB0eXBlLnRvTG93ZXJDYXNlKCksXG4gICAgcGFyYW1ldGVyczogbmV3IE51bGxPYmplY3QoKVxuICB9XG5cbiAgLy8gcGFyc2UgcGFyYW1ldGVyc1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgbGV0IGtleVxuICBsZXQgbWF0Y2hcbiAgbGV0IHZhbHVlXG5cbiAgcGFyYW1SRS5sYXN0SW5kZXggPSBpbmRleFxuXG4gIHdoaWxlICgobWF0Y2ggPSBwYXJhbVJFLmV4ZWMoaGVhZGVyKSkpIHtcbiAgICBpZiAobWF0Y2guaW5kZXggIT09IGluZGV4KSB7XG4gICAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gICAgfVxuXG4gICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAga2V5ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuICAgIHZhbHVlID0gbWF0Y2hbMl1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc2xpY2UoMSwgdmFsdWUubGVuZ3RoIC0gMSlcblxuICAgICAgcXVvdGVkUGFpclJFLnRlc3QodmFsdWUpICYmICh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocXVvdGVkUGFpclJFLCAnJDEnKSlcbiAgICB9XG5cbiAgICByZXN1bHQucGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHsgcGFyc2UsIHNhZmVQYXJzZSB9XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5tb2R1bGUuZXhwb3J0cy5zYWZlUGFyc2UgPSBzYWZlUGFyc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHRDb250ZW50VHlwZSA9IGRlZmF1bHRDb250ZW50VHlwZVxuIiwgImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCBwa2cgZnJvbSBcIi4uL3BhY2thZ2UuanNvblwiIGFzc2VydCB7IHR5cGU6IFwianNvblwiIH07XG5cbmltcG9ydCB7IHJlYWRTZXJ2ZXJJbmZvIH0gZnJvbSBcIi4vcmVhZFNlcnZlckluZm9cIjtcbmltcG9ydCB7IFByb21wdFNvdXJjZSwgcnVuQ29kZXhFeGVjLCBTYWZldHlTdHJhdGVneSB9IGZyb20gXCIuL3J1bkNvZGV4RXhlY1wiO1xuaW1wb3J0IHsgZHJvcFN1ZG8gfSBmcm9tIFwiLi9kcm9wU3Vkb1wiO1xuaW1wb3J0IHsgZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2VzcyB9IGZyb20gXCIuL2NoZWNrQWN0b3JQZXJtaXNzaW9uc1wiO1xuaW1wb3J0IHBhcnNlQXJnc1N0cmluZ1RvQXJndiBmcm9tIFwic3RyaW5nLWFyZ3ZcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG4gIHByb2dyYW1cbiAgICAubmFtZShcImNvZGV4LWFjdGlvblwiKVxuICAgIC52ZXJzaW9uKHBrZy52ZXJzaW9uKVxuICAgIC5kZXNjcmlwdGlvbihcIk11bHRpdG9vbCB0byBzdXBwb3J0IG9wZW5haS9jb2RleC1hY3Rpb24uXCIpO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlYWQtc2VydmVyLWluZm9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJSZWFkIHNlcnZlciBpbmZvIGZyb20gdGhlIHJlc3BvbnNlcyBBUEkgcHJveHlcIilcbiAgICAuYXJndW1lbnQoXCI8c2VydmVySW5mb0ZpbGU+XCIsIFwiUGF0aCB0byB0aGUgc2VydmVyIGluZm8gZmlsZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNlcnZlckluZm9GaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIGF3YWl0IHJlYWRTZXJ2ZXJJbmZvKHNlcnZlckluZm9GaWxlKTtcbiAgICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkcm9wLXN1ZG9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEcm9wcyBzdWRvIHByaXZpbGVnZXMgZm9yIHRoZSBjb25maWd1cmVkIHVzZXIuXCIpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS11c2VyIDx1c2VyPlwiLCBcIlVzZXIgdG8gbW9kaWZ5XCIpLmRlZmF1bHQoXCJydW5uZXJcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXCItLWdyb3VwIDxncm91cD5cIiwgXCJHcm91cCBncmFudGluZyBzdWRvIHByaXZpbGVnZXNcIikuZGVmYXVsdChcbiAgICAgICAgXCJzdWRvXCJcbiAgICAgIClcbiAgICApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS1yb290LXBoYXNlXCIsIFwiaW50ZXJuYWxcIikuZGVmYXVsdChmYWxzZSkuaGlkZUhlbHAoKSlcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHsgdXNlcjogc3RyaW5nOyBncm91cDogc3RyaW5nOyByb290UGhhc2U6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICBhd2FpdCBkcm9wU3Vkbyh7XG4gICAgICAgICAgdXNlcjogb3B0aW9ucy51c2VyLFxuICAgICAgICAgIGdyb3VwOiBvcHRpb25zLmdyb3VwLFxuICAgICAgICAgIHJvb3RQaGFzZTogb3B0aW9ucy5yb290UGhhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicnVuLWNvZGV4LWV4ZWNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnZva2VzIGBjb2RleCBleGVjYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHNcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLXByb21wdCA8cHJvbXB0PlwiLCBcIlByb21wdCB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tcHJvbXB0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIkZpbGUgY29udGFpbmluZyB0aGUgcHJvbXB0IHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsXG4gICAgICBcIlBhdGggdG8gdGhlIENvZGV4IENMSSBob21lIGRpcmVjdG9yeSAod2hlcmUgY29uZmlnIGZpbGVzIGFyZSBzdG9yZWQpLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tY2QgPERJUkVDVE9SWT5cIiwgXCJXb3JraW5nIGRpcmVjdG9yeSBmb3IgQ29kZXhcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tcHJveHktcG9ydCA8cG9ydD5cIixcbiAgICAgIFwiUG9ydCBvZiB0aGUgUmVzcG9uc2VzIEFQSSBQcm94eVwiLFxuICAgICAgcGFyc2VJbnRTdHJpY3RcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWV4dHJhLWFyZ3MgPGFyZ3M+XCIsXG4gICAgICBcIkFkZGl0aW9uYWwgYXJncyB0byBwYXNzIHRocm91Z2ggdG8gYGNvZGV4IGV4ZWNgIGFzIEpTT04gYXJyYXkgb3Igc2hlbGwgc3RyaW5nLlwiLFxuICAgICAgcGFyc2VFeHRyYUFyZ3NcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1maWxlIDxGSUxFPlwiLFxuICAgICAgXCJQYXRoIHdoZXJlIHRoZSBmaW5hbCBtZXNzYWdlIGZyb20gYGNvZGV4IGV4ZWNgIHdpbGwgYmUgd3JpdHRlbi5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wX3N1ZG8nLCAncmVhZF9vbmx5JywgJ3VucHJpdmlsZWdlZF91c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWNvZGV4LXVzZXIgPHVzZXI+XCIsXG4gICAgICBcIlVzZXIgdG8gcnVuIGNvZGV4IGV4ZWMgYXMgd2hlbiB1c2luZyB0aGUgJ3VucHJpdmlsZWdlZF91c2VyJyBzYWZldHkgc3RyYXRlZ3kuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIHByb21wdDogc3RyaW5nO1xuICAgICAgICBwcm9tcHRGaWxlOiBzdHJpbmc7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBjZDogc3RyaW5nO1xuICAgICAgICBwcm94eVBvcnQ6IG51bWJlcjtcbiAgICAgICAgZXh0cmFBcmdzOiBBcnJheTxzdHJpbmc+O1xuICAgICAgICBvdXRwdXRGaWxlOiBzdHJpbmc7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICAgIGNvZGV4VXNlcjogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCB7XG4gICAgICAgICAgcHJvbXB0LFxuICAgICAgICAgIHByb21wdEZpbGUsXG4gICAgICAgICAgY29kZXhIb21lLFxuICAgICAgICAgIGNkLFxuICAgICAgICAgIHByb3h5UG9ydCxcbiAgICAgICAgICBleHRyYUFyZ3MsXG4gICAgICAgICAgb3V0cHV0RmlsZSxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneSxcbiAgICAgICAgICBjb2RleFVzZXIsXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9tcHQgPSBlbXB0eUFzTnVsbChwcm9tcHQpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUHJvbXB0RmlsZSA9IGVtcHR5QXNOdWxsKHByb21wdEZpbGUpO1xuICAgICAgICBsZXQgcHJvbXB0U291cmNlOiBQcm9tcHRTb3VyY2U7XG4gICAgICAgIGlmIChub3JtYWxpemVkUHJvbXB0ICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9tcHRTb3VyY2UgPSB7IHR5cGU6IFwidGV4dFwiLCBjb250ZW50OiBub3JtYWxpemVkUHJvbXB0IH07XG4gICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFByb21wdEZpbGUgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21wdFNvdXJjZSA9IHsgdHlwZTogXCJmaWxlXCIsIHBhdGg6IG5vcm1hbGl6ZWRQcm9tcHRGaWxlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFaXRoZXIgYHByb21wdGAgb3IgYHByb21wdF9maWxlYCBtdXN0IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgdG8gY29lcmNlcyB0byBudWxsIGRvZXMgbm90IHdvcmsgd2l0aFxuICAgICAgICAvLyBDb21tYW5kZXIuanMncyByZXF1aXJlZE9wdGlvbiwgc28gd2UgaGF2ZSB0byBwb3N0LXByb2Nlc3MgaGVyZS5cbiAgICAgICAgYXdhaXQgcnVuQ29kZXhFeGVjKHtcbiAgICAgICAgICBwcm9tcHQ6IHByb21wdFNvdXJjZSxcbiAgICAgICAgICBjb2RleEhvbWU6IGVtcHR5QXNOdWxsKGNvZGV4SG9tZSksXG4gICAgICAgICAgY2QsXG4gICAgICAgICAgcHJveHlQb3J0LFxuICAgICAgICAgIGV4dHJhQXJncyxcbiAgICAgICAgICBleHBsaWNpdE91dHB1dEZpbGU6IGVtcHR5QXNOdWxsKG91dHB1dEZpbGUpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5OiB0b1NhZmV0eVN0cmF0ZWd5KHNhZmV0eVN0cmF0ZWd5KSxcbiAgICAgICAgICBjb2RleFVzZXI6IGVtcHR5QXNOdWxsKGNvZGV4VXNlciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiY2hlY2std3JpdGUtYWNjZXNzXCIpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJDaGVja3MgdGhhdCB0aGUgdHJpZ2dlcmluZyBhY3RvciBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5XCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1hbGxvdy1ib3RzIDxib29sZWFuPlwiLFxuICAgICAgXCJBbGxvdyBHaXRIdWIgQXBwIGFuZCBib3QgYWN0b3JzIHRvIGJ5cGFzcyB0aGUgd3JpdGUtYWNjZXNzIGNoZWNrIChkZWZhdWx0OiB0cnVlKS5cIixcbiAgICAgIHBhcnNlQm9vbGVhbixcbiAgICAgIHRydWVcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyAoeyBhbGxvd0JvdHMgfTogeyBhbGxvd0JvdHM6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2Vzcyh7XG4gICAgICAgIGFsbG93Qm90QWN0b3JzOiBhbGxvd0JvdHMsXG4gICAgICB9KTtcbiAgICAgIHN3aXRjaCAocmVzdWx0LnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiYXBwcm92ZWRcIjoge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBBY3RvciAnJHtyZXN1bHQuYWN0b3J9JyBpcyBwZXJtaXR0ZWQgdG8gY29udGludWUuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYEFjdG9yICcke3Jlc3VsdC5hY3Rvcn0nIGlzIG5vdCBwZXJtaXR0ZWQgdG8gcnVuIHRoaXMgYWN0aW9uOiAke3Jlc3VsdC5yZWFzb259YDtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gIHByb2dyYW0ucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRTdHJpY3QodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVnZXI6ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRyYUFyZ3ModmFsdWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU2FmZXR5U3RyYXRlZ3kodmFsdWU6IHN0cmluZyk6IFNhZmV0eVN0cmF0ZWd5IHtcbiAgc3dpdGNoICh2YWx1ZSkge1xuICAgIGNhc2UgXCJkcm9wX3N1ZG9cIjpcbiAgICBjYXNlIFwicmVhZF9vbmx5XCI6XG4gICAgY2FzZSBcInVucHJpdmlsZWdlZF91c2VyXCI6XG4gICAgY2FzZSBcInVuc2FmZVwiOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNhZmV0eSBzdHJhdGVneTogJHt2YWx1ZX0uIE11c3QgYmUgb25lIG9mICdkcm9wX3N1ZG8nLCAncmVhZF9vbmx5JywgJ3VucHJpdmlsZWdlZF91c2VyJywgb3IgJ3Vuc2FmZScuYFxuICAgICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbXB0eUFzTnVsbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID09IDAgPyBudWxsIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFtcInRydWVcIiwgXCIxXCIsIFwieWVzXCIsIFwieVwiXS5pbmNsdWRlcyhub3JtYWxpemVkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChbXCJmYWxzZVwiLCBcIjBcIiwgXCJub1wiLCBcIm5cIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICR7dmFsdWV9YCk7XG59XG5cbm1haW4oKTtcbiIsICJpbXBvcnQgY29tbWFuZGVyIGZyb20gJy4vaW5kZXguanMnO1xuXG4vLyB3cmFwcGVyIHRvIHByb3ZpZGUgbmFtZWQgZXhwb3J0cyBmb3IgRVNNLlxuZXhwb3J0IGNvbnN0IHtcbiAgcHJvZ3JhbSxcbiAgY3JlYXRlQ29tbWFuZCxcbiAgY3JlYXRlQXJndW1lbnQsXG4gIGNyZWF0ZU9wdGlvbixcbiAgQ29tbWFuZGVyRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciwgLy8gZGVwcmVjYXRlZCBvbGQgbmFtZVxuICBDb21tYW5kLFxuICBBcmd1bWVudCxcbiAgT3B0aW9uLFxuICBIZWxwLFxufSA9IGNvbW1hbmRlcjtcbiIsICJ7XG4gIFwibmFtZVwiOiBcIkBvcGVuYWkvY29kZXgtYWN0aW9uXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuMC4wXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJHaXRIdWIgQWN0aW9uIHRvIHJ1biBjb2RleCBleGVjIHZpYSB0aGUgQ29kZXggQ0xJIHdpdGggYWNjb21wYW55aW5nIGhlbHBlciBzdGVwc1wiLFxuICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImJ1aWxkXCI6IFwiZXNidWlsZCBzcmMvbWFpbi50cyAtLXNvdXJjZW1hcD1pbmxpbmUgLS1mb3JtYXQ9Y2pzIC0tYnVuZGxlIC0tcGxhdGZvcm09bm9kZSAtLXRhcmdldD1ub2RlMjAgLS1vdXRkaXI9ZGlzdFwiLFxuICAgIFwiY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYWN0aW9ucy9jb3JlXCI6IFwiXjEuMTEuMVwiLFxuICAgIFwiQG9jdG9raXQvZ3JhcGhxbFwiOiBcIl44LjIuMlwiLFxuICAgIFwiQG9jdG9raXQvcmVzdFwiOiBcIl4yMS4xLjFcIixcbiAgICBcImNvbW1hbmRlclwiOiBcIjE0LjAuMVwiLFxuICAgIFwic3RyaW5nLWFyZ3ZcIjogXCIwLjMuMlwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjEyLjdcIixcbiAgICBcImVzYnVpbGRcIjogXCJeMC4yMy4wXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuNC41XCJcbiAgfSxcbiAgXCJwYWNrYWdlTWFuYWdlclwiOiBcInBucG1AMTAuMTcuMVwiXG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5cbi8qKlxuICogSW4gdGhlb3J5LCB0aGlzIGlzIG5vdCBjYWxsZWQgdW50aWwgYHNlcnZlckluZm9GaWxlYCBpcyBub24tZW1wdHksIGJ1dCB3ZVxuICogd2lsbCBwb2xsIGluIHRoZSByYXJlIGNhc2UgdGhhdCBpdCB3YXMgYSBwYXJ0aWFsIHdyaXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDEwMDsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUoc2VydmVySW5mb0ZpbGUsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pO1xuICAgICAgY29uc3QgeyBwb3J0IH0gPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgIGlmICh0eXBlb2YgcG9ydCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29yZS5zZXRPdXRwdXQoXCJwb3J0XCIsIHBvcnQudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlYWRpbmcgc2VydmVyIGluZm86ICR7ZXJyb3J9YCk7XG4gICAgICBhd2FpdCBzbGVlcCgxMDApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IEVycm9yKGBGYWlsZWQgdG8gcmVhZCBzZXJ2ZXIgaW5mbyBmcm9tICR7c2VydmVySW5mb0ZpbGV9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkdGVtcCwgcmVhZEZpbGUsIHJtIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgc2V0T3V0cHV0IH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgUHJvbXB0U291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRleHRcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJmaWxlXCI7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2FmZXR5U3RyYXRlZ3kgPVxuICB8IFwiZHJvcF9zdWRvXCJcbiAgfCBcInJlYWRfb25seVwiXG4gIHwgXCJ1bnByaXZpbGVnZWRfdXNlclwiXG4gIHwgXCJ1bnNhZmVcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvZGV4RXhlYyh7XG4gIHByb21wdCxcbiAgY29kZXhIb21lLFxuICBjZCxcbiAgcHJveHlQb3J0LFxuICBleHRyYUFyZ3MsXG4gIGV4cGxpY2l0T3V0cHV0RmlsZSxcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIGNvZGV4VXNlcixcbn06IHtcbiAgcHJvbXB0OiBQcm9tcHRTb3VyY2U7XG4gIGNvZGV4SG9tZTogc3RyaW5nIHwgbnVsbDtcbiAgY2Q6IHN0cmluZztcbiAgcHJveHlQb3J0OiBudW1iZXI7XG4gIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgZXhwbGljaXRPdXRwdXRGaWxlOiBzdHJpbmcgfCBudWxsO1xuICBzYWZldHlTdHJhdGVneTogU2FmZXR5U3RyYXRlZ3k7XG4gIGNvZGV4VXNlcjogc3RyaW5nIHwgbnVsbDtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGlucHV0OiBzdHJpbmc7XG4gIHN3aXRjaCAocHJvbXB0LnR5cGUpIHtcbiAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgaW5wdXQgPSBwcm9tcHQuY29udGVudDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICBpbnB1dCA9IGF3YWl0IHJlYWRGaWxlKHByb21wdC5wYXRoLCBcInV0ZjhcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGxldCBvdXRwdXRGaWxlOiBPdXRwdXRGaWxlO1xuICBpZiAoZXhwbGljaXRPdXRwdXRGaWxlICE9IG51bGwpIHtcbiAgICBvdXRwdXRGaWxlID0geyB0eXBlOiBcImV4cGxpY2l0XCIsIGZpbGU6IGV4cGxpY2l0T3V0cHV0RmlsZSB9O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dEZpbGUgPSBhd2FpdCBjcmVhdGVUZW1wT3V0cHV0RmlsZSgpO1xuICB9XG5cbiAgY29uc3QgY29tbWFuZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWRfdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXhVc2VyIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgdGhlICd1bnByaXZpbGVnZWRfdXNlcicgc2FmZXR5IHN0cmF0ZWd5LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbW1hbmQucHVzaChcInN1ZG9cIiwgXCItdVwiLCBjb2RleFVzZXIsIFwiLS1cIik7XG4gIH1cblxuICBjb25zdCBwcm92aWRlckJhc2VVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke3Byb3h5UG9ydH0vdjFgO1xuICBjb25zdCBwcm92aWRlcklkID0gXCJvcGVuYWktcHJveHlcIjtcbiAgY29uc3QgcHJvdmlkZXJDb25maWcgPSBgbW9kZWxfcHJvdmlkZXJzLiR7cHJvdmlkZXJJZH09eyBuYW1lID0gXCJPcGVuQUkgUHJveHlcIiwgYmFzZV91cmwgPSBcIiR7cHJvdmlkZXJCYXNlVXJsfVwiLCB3aXJlX2FwaSA9IFwicmVzcG9uc2VzXCIgfWA7XG5cbiAgY29tbWFuZC5wdXNoKFxuICAgIFwiY29kZXhcIixcbiAgICBcImV4ZWNcIixcbiAgICBcIi0tc2tpcC1naXQtcmVwby1jaGVja1wiLFxuICAgIFwiLS1jZFwiLFxuICAgIGNkLFxuICAgIFwiLS1jb25maWdcIixcbiAgICBwcm92aWRlckNvbmZpZyxcbiAgICBcIi0tY29uZmlnXCIsXG4gICAgYG1vZGVsX3Byb3ZpZGVyPVwiJHtwcm92aWRlcklkfVwiYCxcbiAgICBcIi0tb3V0cHV0LWxhc3QtbWVzc2FnZVwiLFxuICAgIG91dHB1dEZpbGUuZmlsZVxuICApO1xuICBjb21tYW5kLnB1c2goLi4uZXh0cmFBcmdzKTtcblxuICAvLyBOb3RlIHRoYXQgaWYgcHJvZmlsZXMgZXhwYW5kIHRvIHN1cHBvcnQgdGhlaXIgb3duIHNhbmRib3ggcG9saWNpZXMsIGFcbiAgLy8gY3VzdG9tIHByb2ZpbGUgY291bGQgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nLlxuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwicmVhZF9vbmx5XCIpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLWNvbmZpZ1wiLCAnc2FuZGJveF9tb2RlPVwicmVhZC1vbmx5XCInKTtcbiAgfVxuXG4gIGNvbnN0IGVudiA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgbGV0IGV4dHJhRW52ID0gXCJcIjtcbiAgaWYgKGNvZGV4SG9tZSAhPSBudWxsKSB7XG4gICAgZW52LkNPREVYX0hPTUUgPSBjb2RleEhvbWU7XG4gICAgZXh0cmFFbnYgPSBgQ09ERVhfSE9NRT0ke2NvZGV4SG9tZX0gYDtcbiAgfVxuXG4gIC8vIFNwbGl0IHRoZSBgcHJvZ3JhbWAgZnJvbSB0aGUgYGFyZ3NgIGZvciBgc3Bhd24oKWAuXG4gIGNvbnN0IHByb2dyYW0gPSBjb21tYW5kLnNoaWZ0KCkhO1xuICBjb25zb2xlLmxvZyhcbiAgICBgUnVubmluZzogJHtleHRyYUVudn0ke3Byb2dyYW19ICR7Y29tbWFuZFxuICAgICAgLm1hcCgoYSkgPT4gSlNPTi5zdHJpbmdpZnkoYSkpXG4gICAgICAuam9pbihcIiBcIil9YFxuICApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvZ3JhbSwgY29tbWFuZCwge1xuICAgICAgZW52LFxuICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICB9KTtcbiAgICBjaGlsZC5zdGRpbi53cml0ZShpbnB1dCk7XG4gICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIHJlamVjdCk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke3Byb2dyYW19IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaW5hbGl6ZUV4ZWN1dGlvbihvdXRwdXRGaWxlKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluYWxpemVFeGVjdXRpb24ob3V0cHV0RmlsZTogT3V0cHV0RmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gYXdhaXQgcmVhZEZpbGUob3V0cHV0RmlsZS5maWxlLCBcInV0ZjhcIik7XG4gICAgc2V0T3V0cHV0KFwiZmluYWxfbWVzc2FnZVwiLCBsYXN0TWVzc2FnZSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY2xlYW51cFRlbXBPdXRwdXQob3V0cHV0RmlsZSk7XG4gIH1cbn1cblxudHlwZSBPdXRwdXRGaWxlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImV4cGxpY2l0XCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwidGVtcFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBPdXRwdXRGaWxlKCk6IFByb21pc2U8T3V0cHV0RmlsZT4ge1xuICBjb25zdCBkaXIgPSBhd2FpdCBta2R0ZW1wKFwiY29kZXgtZXhlYy1cIik7XG4gIHJldHVybiB7IHR5cGU6IFwidGVtcFwiLCBmaWxlOiBwYXRoLmpvaW4oZGlyLCBcIm91dHB1dC5tZFwiKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwVGVtcE91dHB1dChvdXRwdXRGaWxlOiBPdXRwdXRGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN3aXRjaCAob3V0cHV0RmlsZS50eXBlKSB7XG4gICAgY2FzZSBcImV4cGxpY2l0XCI6XG4gICAgICAvLyBEbyBub3QgZGVsZXRlIHVzZXItc3BlY2lmaWVkIG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidGVtcFwiOiB7XG4gICAgICBjb25zdCB7IGZpbGUgfSA9IG91dHB1dEZpbGU7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSk7XG4gICAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICBpZ25vcmVGYWlsdXJlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEV4ZWNSZXN1bHQge1xuICBjb2RlOiBudW1iZXI7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wU3Vkb09wdGlvbnMge1xuICB1c2VyOiBzdHJpbmc7XG4gIGdyb3VwOiBzdHJpbmc7XG4gIHJvb3RQaGFzZTogYm9vbGVhbjtcbn1cblxuY29uc3QgTElOVVhfUExBVEZPUk0gPSBcImxpbnV4XCI7XG5jb25zdCBNQUNPU19QTEFURk9STSA9IFwiZGFyd2luXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcm9wU3VkbyhvcHRpb25zOiBEcm9wU3Vkb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtO1xuICBpZiAoIVtMSU5VWF9QTEFURk9STSwgTUFDT1NfUExBVEZPUk1dLmluY2x1ZGVzKHBsYXRmb3JtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcF9zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwbGF0Zm9ybX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHsgcm9vdFBoYXNlIH0gPSBvcHRpb25zO1xuICBpZiAocm9vdFBoYXNlKSB7XG4gICAgYXdhaXQgZHJvcFN1ZG9XaXRoUHJpdmlsZWdlcyhvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBlbnN1cmVQYXNzd29yZGxlc3NTdWRvKCk7XG4gIC8vIGBzdWRvIC1LYCBpbnZhbGlkYXRlcyBjYWNoZWQgY3JlZGVudGlhbHMgYnV0IGV4aXRzIG5vbi16ZXJvIHdoZW4gbm8gdGlja2V0XG4gIC8vIGV4aXN0cyB5ZXQuIElnbm9yZSB0aGF0IGZhaWx1cmUgc28gZnJlc2ggcnVubmVycyBkb24ndCBibG93IHVwLlxuICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLUtcIl0sIHsgaWdub3JlRmFpbHVyZTogdHJ1ZSB9KTtcblxuICBjb25zdCBleGVjQXJncyA9IFsuLi5wcm9jZXNzLmV4ZWNBcmd2XTtcbiAgY29uc3Qgc2NyaXB0UGF0aCA9IHByb2Nlc3MuYXJndlsxXTtcbiAgLy8gUmUtZW50ZXIgdGhpcyBjb21tYW5kIHVuZGVyIHN1ZG8gc28gdGhlIHByaXZpbGVnZS1kcm9wcGluZyB3b3JrIGhhcHBlbnMgaW4gYVxuICAvLyBzaW5nbGUgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGUgaG9zdCBwbGF0Zm9ybS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcbiAgICBcIi1uXCIsXG4gICAgXCJub2RlXCIsXG4gICAgLi4uZXhlY0FyZ3MsXG4gICAgc2NyaXB0UGF0aCxcbiAgICBcImRyb3Atc3Vkb1wiLFxuICAgIFwiLS1yb290LXBoYXNlXCIsXG4gICAgXCItLXVzZXJcIixcbiAgICBvcHRpb25zLnVzZXIsXG4gICAgXCItLWdyb3VwXCIsXG4gICAgb3B0aW9ucy5ncm91cCxcbiAgXSk7XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgc3VkbyB0aWNrZXQgYWdhaW47IGlnbm9yZSBmYWlsdXJlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gIC8vIGFib3ZlIChzb21lIGVudmlyb25tZW50cyByZXR1cm4gYW4gZXJyb3Igd2hlbiBubyB0aW1lc3RhbXAgZXhpc3RzKS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgPT09IFwiZnVuY3Rpb25cIiAmJiBwcm9jZXNzLmdldHVpZCgpICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcC1zdWRvIHJvb3QgcGhhc2UgbXVzdCBydW4gYXMgcm9vdC5cIik7XG4gIH1cblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXG4gIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIGNhc2UgTElOVVhfUExBVEZPUk06IHtcbiAgICAgIGlmIChhd2FpdCBpc1VzZXJJbkdyb3VwKG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJkZWx1c2VyXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkZWx1c2VyXCIsIFtvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXBdKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBVc2VkICdkZWx1c2VyICR7b3B0aW9ucy51c2VyfSAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJncGFzc3dkXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJncGFzc3dkXCIsIFtcIi1kXCIsIG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cF0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFVzZWQgJ2dwYXNzd2QgLWQgJHtvcHRpb25zLnVzZXJ9ICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmVpdGhlciBkZWx1c2VyIG5vciBncGFzc3dkIGF2YWlsYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtvcHRpb25zLnVzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtvcHRpb25zLmdyb3VwfSBncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBNQUNPU19QTEFURk9STToge1xuICAgICAgaWYgKGF3YWl0IGlzVXNlckluR3JvdXAob3B0aW9ucy51c2VyLCBvcHRpb25zLmdyb3VwKSkge1xuICAgICAgICBhd2FpdCBleGVjQ29tbWFuZChcImRzZWRpdGdyb3VwXCIsIFtcbiAgICAgICAgICBcIi1vXCIsXG4gICAgICAgICAgXCJlZGl0XCIsXG4gICAgICAgICAgXCItZFwiLFxuICAgICAgICAgIG9wdGlvbnMudXNlcixcbiAgICAgICAgICBcIi10XCIsXG4gICAgICAgICAgXCJ1c2VyXCIsXG4gICAgICAgICAgb3B0aW9ucy5ncm91cCxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBVc2VkICdkc2VkaXRncm91cCAtbyBlZGl0IC1kICR7b3B0aW9ucy51c2VyfSAtdCB1c2VyICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICApO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAke29wdGlvbnMudXNlcn0gaXMgbm90IGEgbWVtYmVyIG9mIHRoZSAke29wdGlvbnMuZ3JvdXB9IGdyb3VwLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcF9zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwcm9jZXNzLnBsYXRmb3JtfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCByZW1vdmVVc2VyRnJvbVN1ZG9lcnNEKG9wdGlvbnMudXNlcik7XG4gIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzLmQgcmVxdWlyaW5nIGNoYW5nZXMuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzdWRvZXJzTWVzc2FnZSA9IGF3YWl0IHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShcbiAgICBcIi9ldGMvc3Vkb2Vyc1wiLFxuICAgIG9wdGlvbnMudXNlclxuICApO1xuICBpZiAoc3Vkb2Vyc01lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhzdWRvZXJzTWVzc2FnZSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzIHJlcXVpcmluZyBjaGFuZ2VzLmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgY29uc29sZS5sb2coYCR7b3B0aW9ucy51c2VyfSBhbHJlYWR5IGxhY2tzIHN1ZG8gcHJpdmlsZWdlcy5gKTtcbiAgfVxuXG4gIGNvbnN0IGdyb3Vwc0FmdGVyID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItR25cIiwgb3B0aW9ucy51c2VyXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gIH0pO1xuICBjb25zb2xlLmxvZyhcbiAgICBgR3JvdXBzIGZvciAke29wdGlvbnMudXNlcn0gYWZ0ZXIgY2xlYW51cDogJHtncm91cHNBZnRlci5zdGRvdXQudHJpbSgpfWBcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLW5cIiwgXCJ0cnVlXCJdLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZDogcGFzc3dvcmRsZXNzIHN1ZG8gbm90IGF2YWlsYWJsZS5cIik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNVc2VySW5Hcm91cCh1c2VyOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItbkdcIiwgdXNlcl0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gIH0pO1xuICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ3JvdXBzID0gcmVzdWx0LnN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwKTtcbiAgcmV0dXJuIGdyb3Vwcy5pbmNsdWRlcyhncm91cCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRFeGlzdHMoYmluYXJ5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJzaFwiLCBbXCItY1wiLCBgY29tbWFuZCAtdiAke2JpbmFyeX1gXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgaWdub3JlRmFpbHVyZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiByZXN1bHQuY29kZSA9PT0gMDtcbn1cblxuLyoqXG4gKiBTdHJpcHMgbm9uLWNvbW1lbnQgZW50cmllcyBncmFudGluZyBzdWRvIHRvIGB1c2VyYCBhY3Jvc3MgYC9ldGMvc3Vkb2Vycy5kYFxuICogZmlsZXMuXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAgIC0gZW51bWVyYXRlIHJlZ3VsYXIgZmlsZXMgdW5kZXIgYC9ldGMvc3Vkb2Vycy5kYFxuICogICAtIHJlbW92ZSBsaW5lcyB3aG9zZSBmaXJzdCB0b2tlbiBtYXRjaGVzIHRoZSB0YXJnZXQgdXNlciB3aGlsZSBrZWVwaW5nXG4gKiAgICAgY29tbWVudHMvYmxhbmsgbGluZXMgaW50YWN0XG4gKiAgIC0gcmV3cml0ZSBmaWxlcyBpbi1wbGFjZSB3aXRoIG9yaWdpbmFsIG5ld2xpbmUgc3R5bGUgYW5kIHBlcm1pc3Npb25zXG4gKiAgIC0gcmVwb3J0IHdoaWNoIGZpbGVzIHdlcmUgY2hhbmdlZCBzbyBjYWxsZXJzIGNhbiBzdXJmYWNlIHVzZWZ1bCBsb2dzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZVVzZXJGcm9tU3Vkb2Vyc0QodXNlcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gIGNvbnN0IHN1ZG9lcnNEaXIgPSBcIi9ldGMvc3Vkb2Vycy5kXCI7XG4gIGxldCBlbnRyaWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoc3Vkb2Vyc0RpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGVudHJpZXMgPSBkaXJFbnRyaWVzXG4gICAgICAuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0ZpbGUoKSlcbiAgICAgIC5tYXAoKGRpcmVudCkgPT4gcGF0aC5qb2luKHN1ZG9lcnNEaXIsIGRpcmVudC5uYW1lKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnlQYXRoIG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKGVudHJ5UGF0aCwgdXNlcik7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2VzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHVzZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGxldCBzdGF0cztcbiAgbGV0IG9yaWdpbmFsOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBvcmlnaW5hbCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3bGluZSA9IG9yaWdpbmFsLmluY2x1ZGVzKFwiXFxyXFxuXCIpID8gXCJcXHJcXG5cIiA6IFwiXFxuXCI7XG4gIGNvbnN0IGVuZHNXaXRoTmV3bGluZSA9XG4gICAgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXG5cIikgfHwgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXHJcXG5cIik7XG4gIGNvbnN0IHJhd0xpbmVzID0gb3JpZ2luYWwuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKHJhd0xpbmVzLmxlbmd0aCA+IDAgJiYgcmF3TGluZXNbcmF3TGluZXMubGVuZ3RoIC0gMV0gPT09IFwiXCIpIHtcbiAgICByYXdMaW5lcy5wb3AoKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkTGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3TGluZXMpIHtcbiAgICBjb25zdCB0cmltbWVkTGVhZGluZyA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBmaWx0ZXJlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHRva2VucyA9IHRyaW1tZWRMZWFkaW5nLnNwbGl0KC9cXHMrLyk7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gdXNlcikge1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZWJ1aWx0ID0gZmlsdGVyZWRMaW5lcy5qb2luKG5ld2xpbmUpICsgKGVuZHNXaXRoTmV3bGluZSA/IG5ld2xpbmUgOiBcIlwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIHJlYnVpbHQsIFwidXRmOFwiKTtcbiAgICBhd2FpdCBmcy5jaG1vZChmaWxlUGF0aCwgc3RhdHMubW9kZSAmIDBvNzc3KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYFJlbW92ZWQgJHt1c2VyfSBlbnRyeSBmcm9tICR7ZmlsZVBhdGh9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY0NvbW1hbmQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogQXJyYXk8c3RyaW5nPixcbiAgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRpb25zLmNhcHR1cmUgPz8gZmFsc2U7XG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBjYXB0dXJlID8gW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0gOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZG91dCkge1xuICAgIGNoaWxkLnN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZG91dCArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZGVycikge1xuICAgIGNoaWxkLnN0ZGVyci5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZGVyciArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxFeGVjUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBjb25zdCBleGl0Q29kZSA9IGNvZGUgPz8gMDtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhb3B0aW9ucy5pZ25vcmVGYWlsdXJlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9IChleGl0IGNvZGUgJHtleGl0Q29kZX0pYFxuICAgICAgICApO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5jb2RlID0gZXhpdENvZGU7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZG91dCA9IHN0ZG91dDtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgY29kZTogZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIEV4ZWNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9yZXN0XCI7XG5cbmV4cG9ydCB0eXBlIFdyaXRlQWNjZXNzQ2hlY2sgPVxuICB8IHtcbiAgICAgIHN0YXR1czogXCJhcHByb3ZlZFwiO1xuICAgICAgYWN0b3I6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCI7XG4gICAgICBhY3Rvcjogc3RyaW5nO1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgfTtcblxudHlwZSBFbnN1cmVXcml0ZUFjY2Vzc09wdGlvbnMgPSB7XG4gIG9jdG9raXQ/OiBPY3Rva2l0O1xuICB0b2tlbj86IHN0cmluZztcbiAgYWN0b3I/OiBzdHJpbmc7XG4gIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBib3QgYWN0b3JzIHN1Y2ggYXMgZGVwZW5kYWJvdCBhcmUgYWxsb3dlZCB3aXRob3V0XG4gICAqIGNoZWNraW5nIGNvbGxhYm9yYXRvciBwZXJtaXNzaW9ucy4gU2V0IHRvIGZhbHNlIHRvIHJlcXVpcmUgYm90cyB0byBwYXNzIHRoZVxuICAgKiBzYW1lIGNoZWNrcyBhcyBodW1hbiB1c2Vycy5cbiAgICovXG4gIGFsbG93Qm90QWN0b3JzPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgdGhlIEdpdEh1YiBhY3RvciB3aGljaCB0cmlnZ2VyZWQgdGhlIGN1cnJlbnQgd29ya2Zsb3cgaGFzIHdyaXRlXG4gKiBhY2Nlc3MgdG8gdGhlIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVBY3Rvckhhc1dyaXRlQWNjZXNzKFxuICBvcHRpb25zOiBFbnN1cmVXcml0ZUFjY2Vzc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8V3JpdGVBY2Nlc3NDaGVjaz4ge1xuICBjb25zdCBhY3RvciA9IG9wdGlvbnMuYWN0b3IgPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICBjb25zdCByZXBvc2l0b3J5ID0gb3B0aW9ucy5yZXBvc2l0b3J5ID8/IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZO1xuICBjb25zdCBhbGxvd0JvdEFjdG9ycyA9IG9wdGlvbnMuYWxsb3dCb3RBY3RvcnMgPz8gdHJ1ZTtcblxuICBpZiAoIWFjdG9yIHx8IGFjdG9yLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcjogYWN0b3IgPz8gXCI8dW5rbm93bj5cIixcbiAgICAgIHJlYXNvbjogXCJHSVRIVUJfQUNUT1IgaXMgbm90IHNldDsgY2Fubm90IGRldGVybWluZSB0cmlnZ2VyaW5nIHVzZXIuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghcmVwb3NpdG9yeSB8fCByZXBvc2l0b3J5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogXCJHSVRIVUJfUkVQT1NJVE9SWSBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCByZXBvc2l0b3J5LlwiLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBbb3duZXIsIHJlcG9dID0gcmVwb3NpdG9yeS5zcGxpdChcIi9cIik7XG4gIGlmICghb3duZXIgfHwgIXJlcG8pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYEdJVEhVQl9SRVBPU0lUT1JZIG11c3QgYmUgaW4gdGhlIGZvcm1hdCAnb3duZXIvcmVwbycsIHJlY2VpdmVkOiAnJHtyZXBvc2l0b3J5fScuYCxcbiAgICB9O1xuICB9XG5cbiAgLy8gR2l0SHViLWJ1aWx0IHdvcmtmbG93cyAoZS5nLiBkZXBlbmRhYm90LCBnaXRodWItYWN0aW9uc1tib3RdKSBkbyBub3QgaGF2ZSBhXG4gIC8vIG1lYW5pbmdmdWwgd3JpdGUgcGVybWlzc2lvbiBjb25jZXB0LiBUaGV5IGltcGxpY2l0bHkgcnVuIHdpdGggdGhlIHRva2VuJ3MgcGVybWlzc2lvbnMuXG4gIGlmIChhbGxvd0JvdEFjdG9ycyAmJiBhY3Rvci5lbmRzV2l0aChcIltib3RdXCIpKSB7XG4gICAgY29yZS5pbmZvKGBBY3RvciAnJHthY3Rvcn0nIGlzIGEgYm90IGFjY291bnQ7IHNraXBwaW5nIGV4cGxpY2l0IHBlcm1pc3Npb24gY2hlY2suYCk7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW4gPz8gZ2V0VG9rZW5Gcm9tRW52KCk7XG4gIGlmICghdG9rZW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogXCJBIEdpdEh1YiB0b2tlbiBpcyByZXF1aXJlZCB0byBjaGVjayBwZXJtaXNzaW9ucyAoc2V0IEdJVEhVQl9UT0tFTiBvciBHSF9UT0tFTikuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9jdG9raXQgPSBvcHRpb25zLm9jdG9raXQgPz8gbmV3IE9jdG9raXQoeyBhdXRoOiB0b2tlbiB9KTtcblxuICBjb3JlLmluZm8oYENoZWNraW5nIHdyaXRlIGFjY2VzcyBmb3IgYWN0b3IgJyR7YWN0b3J9JyBvbiAke293bmVyfS8ke3JlcG99YCk7XG5cbiAgbGV0IHBlcm1pc3Npb246IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9jdG9raXQucmVwb3MuZ2V0Q29sbGFib3JhdG9yUGVybWlzc2lvbkxldmVsKHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICAgIHVzZXJuYW1lOiBhY3RvcixcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uID0gcmVzcG9uc2UuZGF0YS5wZXJtaXNzaW9uID8/IFwibm9uZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgICAgYWN0b3IsXG4gICAgICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgaXMgbm90IGEgY29sbGFib3JhdG9yIG9uICR7b3duZXJ9LyR7cmVwb307IHdyaXRlIGFjY2VzcyBpcyByZXF1aXJlZC5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgIDogXCJGYWlsZWQgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIGZvciBhY3RvciBkdWUgdG8gdW5rbm93biBlcnJvci5cIjtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgRmFpbGVkIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyBmb3IgJyR7YWN0b3J9JzogJHttZXNzYWdlfWAsXG4gICAgfTtcbiAgfVxuXG4gIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBoYXMgcGVybWlzc2lvbiBsZXZlbCAnJHtwZXJtaXNzaW9ufScuYCk7XG5cbiAgaWYgKHBlcm1pc3Npb24gPT09IFwiYWRtaW5cIiB8fCBwZXJtaXNzaW9uID09PSBcIndyaXRlXCIgfHwgcGVybWlzc2lvbiA9PT0gXCJtYWludGFpblwiKSB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgIGFjdG9yLFxuICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgbXVzdCBoYXZlIHdyaXRlIGFjY2VzcyB0byAke293bmVyfS8ke3JlcG99LiBEZXRlY3RlZCBwZXJtaXNzaW9uOiAnJHtwZXJtaXNzaW9ufScuYCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tRW52KCk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOID8/IHByb2Nlc3MuZW52LkdIX1RPS0VOO1xuICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHJpbSgpLmxlbmd0aCA+IDAgPyB0b2tlbiA6IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJzdGF0dXNcIiBpbiBlcnJvciAmJiAoZXJyb3IgYXMgeyBzdGF0dXM/OiBudW1iZXIgfSkuc3RhdHVzID09PSA0MDQsXG4gICk7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKChjYWxsYmFjaywgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKChtZXRob2QsIHJlZ2lzdGVyZWQpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKHN0YXRlLCBraW5kLCBuYW1lLCBob29rKSB7XG4gIGNvbnN0IG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbigocmVzdWx0XykgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9saWIvcmVnaXN0ZXIuanNcIjtcbmltcG9ydCB7IGFkZEhvb2sgfSBmcm9tIFwiLi9saWIvYWRkLmpzXCI7XG5pbXBvcnQgeyByZW1vdmVIb29rIH0gZnJvbSBcIi4vbGliL3JlbW92ZS5qc1wiO1xuXG4vLyBiaW5kIHdpdGggYXJyYXkgb2YgYXJndW1lbnRzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjE3OTI5MTNcbmNvbnN0IGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xuY29uc3QgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgY29uc3QgcmVtb3ZlSG9va1JlZiA9IGJpbmRhYmxlKHJlbW92ZUhvb2ssIG51bGwpLmFwcGx5KFxuICAgIG51bGwsXG4gICAgbmFtZSA/IFtzdGF0ZSwgbmFtZV0gOiBbc3RhdGVdXG4gICk7XG4gIGhvb2suYXBpID0geyByZW1vdmU6IHJlbW92ZUhvb2tSZWYgfTtcbiAgaG9vay5yZW1vdmUgPSByZW1vdmVIb29rUmVmO1xuICBbXCJiZWZvcmVcIiwgXCJlcnJvclwiLCBcImFmdGVyXCIsIFwid3JhcFwiXS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFNpbmd1bGFyKCkge1xuICBjb25zdCBzaW5ndWxhckhvb2tOYW1lID0gU3ltYm9sKFwiU2luZ3VsYXJcIik7XG4gIGNvbnN0IHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICBjb25zdCBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IFNpbmd1bGFyLCBDb2xsZWN0aW9uIH07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSkgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXnt9fV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC8oPzpeXFxXKyl8KD86KD88IVxcVylcXFcrJCkvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09IFwiKlwiKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBcIlwiKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vZGlmaWVyID09PSBcIipcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IFtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlMikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoaykpO1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiO1wiKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIgJiYgKG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCIpKSB7XG4gICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmVzdWx0LnB1c2goXCJcIik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwYXJzZVVybCh0ZW1wbGF0ZSkge1xuICByZXR1cm4ge1xuICAgIGV4cGFuZDogZXhwYW5kLmJpbmQobnVsbCwgdGVtcGxhdGUpXG4gIH07XG59XG5mdW5jdGlvbiBleHBhbmQodGVtcGxhdGUsIGNvbnRleHQpIHtcbiAgdmFyIG9wZXJhdG9ycyA9IFtcIitcIiwgXCIjXCIsIFwiLlwiLCBcIi9cIiwgXCI7XCIsIFwiP1wiLCBcIiZcIl07XG4gIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShcbiAgICAvXFx7KFteXFx7XFx9XSspXFx9fChbXlxce1xcfV0rKS9nLFxuICAgIGZ1bmN0aW9uKF8sIGV4cHJlc3Npb24sIGxpdGVyYWwpIHtcbiAgICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICAgIGxldCBvcGVyYXRvciA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2YoZXhwcmVzc2lvbi5jaGFyQXQoMCkpICE9PSAtMSkge1xuICAgICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5jaGFyQXQoMCk7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICAgIGV4cHJlc3Npb24uc3BsaXQoLywvZykuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCB0bXBbMV0sIHRtcFsyXSB8fCB0bXBbM10pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gXCIrXCIpIHtcbiAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gXCIsXCI7XG4gICAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIj9cIikge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gXCImXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gXCIjXCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggIT09IDAgPyBvcGVyYXRvciA6IFwiXCIpICsgdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5jb2RlUmVzZXJ2ZWQobGl0ZXJhbCk7XG4gICAgICB9XG4gICAgfVxuICApO1xuICBpZiAodGVtcGxhdGUgPT09IFwiL1wiKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhcnNlLmpzXG5mdW5jdGlvbiBwYXJzZShvcHRpb25zKSB7XG4gIGxldCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICBsZXQgdXJsID0gKG9wdGlvbnMudXJsIHx8IFwiL1wiKS5yZXBsYWNlKC86KFthLXpdXFx3KykvZywgXCJ7JDF9XCIpO1xuICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gIGxldCBib2R5O1xuICBsZXQgcGFyYW1ldGVycyA9IG9taXQob3B0aW9ucywgW1xuICAgIFwibWV0aG9kXCIsXG4gICAgXCJiYXNlVXJsXCIsXG4gICAgXCJ1cmxcIixcbiAgICBcImhlYWRlcnNcIixcbiAgICBcInJlcXVlc3RcIixcbiAgICBcIm1lZGlhVHlwZVwiXG4gIF0pO1xuICBjb25zdCB1cmxWYXJpYWJsZU5hbWVzID0gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKTtcbiAgdXJsID0gcGFyc2VVcmwodXJsKS5leHBhbmQocGFyYW1ldGVycyk7XG4gIGlmICghL15odHRwLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSBvcHRpb25zLmJhc2VVcmwgKyB1cmw7XG4gIH1cbiAgY29uc3Qgb21pdHRlZFBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIoKG9wdGlvbikgPT4gdXJsVmFyaWFibGVOYW1lcy5pbmNsdWRlcyhvcHRpb24pKS5jb25jYXQoXCJiYXNlVXJsXCIpO1xuICBjb25zdCByZW1haW5pbmdQYXJhbWV0ZXJzID0gb21pdChwYXJhbWV0ZXJzLCBvbWl0dGVkUGFyYW1ldGVycyk7XG4gIGNvbnN0IGlzQmluYXJ5UmVxdWVzdCA9IC9hcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS9pLnRlc3QoaGVhZGVycy5hY2NlcHQpO1xuICBpZiAoIWlzQmluYXJ5UmVxdWVzdCkge1xuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQpIHtcbiAgICAgIGhlYWRlcnMuYWNjZXB0ID0gaGVhZGVycy5hY2NlcHQuc3BsaXQoLywvKS5tYXAoXG4gICAgICAgIChmb3JtYXQpID0+IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgIC9hcHBsaWNhdGlvblxcL3ZuZChcXC5cXHcrKShcXC52Myk/KFxcLlxcdyspPyhcXCtqc29uKT8kLyxcbiAgICAgICAgICBgYXBwbGljYXRpb24vdm5kJDEkMi4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gXG4gICAgICAgIClcbiAgICAgICkuam9pbihcIixcIik7XG4gICAgfVxuICAgIGlmICh1cmwuZW5kc1dpdGgoXCIvZ3JhcGhxbFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyID0gaGVhZGVycy5hY2NlcHQubWF0Y2goLyg/PCFbXFx3LV0pW1xcdy1dKyg/PS1wcmV2aWV3KS9nKSB8fCBbXTtcbiAgICAgICAgaGVhZGVycy5hY2NlcHQgPSBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIuY29uY2F0KG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKS5tYXAoKHByZXZpZXcpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQgPyBgLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWAgOiBcIitqc29uXCI7XG4gICAgICAgICAgcmV0dXJuIGBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLiR7cHJldmlld30tcHJldmlldyR7Zm9ybWF0fWA7XG4gICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoW1wiR0VUXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgdXJsID0gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcmVtYWluaW5nUGFyYW1ldGVycyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFwiZGF0YVwiIGluIHJlbWFpbmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1haW5pbmdQYXJhbWV0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSAmJiB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIjtcbiAgfVxuICBpZiAoW1wiUEFUQ0hcIiwgXCJQVVRcIl0uaW5jbHVkZXMobWV0aG9kKSAmJiB0eXBlb2YgYm9keSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGJvZHkgPSBcIlwiO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSxcbiAgICB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIiA/IHsgYm9keSB9IDogbnVsbCxcbiAgICBvcHRpb25zLnJlcXVlc3QgPyB7IHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdCB9IDogbnVsbFxuICApO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnQtd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gZW5kcG9pbnRXaXRoRGVmYXVsdHMoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwYXJzZShtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgREVGQVVMVFMyID0gbWVyZ2Uob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgZW5kcG9pbnQyID0gZW5kcG9pbnRXaXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbmRwb2ludDIsIHtcbiAgICBERUZBVUxUUzogREVGQVVMVFMyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgcGFyc2VcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGVuZHBvaW50ID0gd2l0aERlZmF1bHRzKG51bGwsIERFRkFVTFRTKTtcbmV4cG9ydCB7XG4gIGVuZHBvaW50XG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuaW1wb3J0IHsgZW5kcG9pbnQgfSBmcm9tIFwiQG9jdG9raXQvZW5kcG9pbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI5LjIuNFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBkZWZhdWx0c19kZWZhdWx0ID0ge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gXCJmYXN0LWNvbnRlbnQtdHlwZS1wYXJzZVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZmV0Y2gtd3JhcHBlci5qc1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3QtZXJyb3JcIjtcbmFzeW5jIGZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICBjb25zdCBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LmZldGNoIHx8IGdsb2JhbFRoaXMuZmV0Y2g7XG4gIGlmICghZmV0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImZldGNoIGlzIG5vdCBzZXQuIFBsZWFzZSBwYXNzIGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gYXMgbmV3IE9jdG9raXQoeyByZXF1ZXN0OiB7IGZldGNoIH19KS4gTGVhcm4gbW9yZSBhdCBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9vY3Rva2l0LmpzLyNmZXRjaC1taXNzaW5nXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IGxvZyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LmxvZyB8fCBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5wYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgIT09IGZhbHNlO1xuICBjb25zdCBib2R5ID0gaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpID8gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSkgOiByZXF1ZXN0T3B0aW9ucy5ib2R5O1xuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtcbiAgICAgIG5hbWUsXG4gICAgICBTdHJpbmcodmFsdWUpXG4gICAgXSlcbiAgKTtcbiAgbGV0IGZldGNoUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgICBib2R5LFxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBzaWduYWw6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnNpZ25hbCxcbiAgICAgIC8vIGR1cGxleCBtdXN0IGJlIHNldCBpZiByZXF1ZXN0LmJvZHkgaXMgUmVhZGFibGVTdHJlYW0gb3IgQXN5bmMgSXRlcmFibGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxldCBtZXNzYWdlID0gXCJVbmtub3duIEVycm9yXCI7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICBlcnJvci5zdGF0dXMgPSA1MDA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2UubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gICAgcmVxdWVzdEVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgdGhyb3cgcmVxdWVzdEVycm9yO1xuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICBjb25zdCB1cmwgPSBmZXRjaFJlc3BvbnNlLnVybDtcbiAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZldGNoUmVzcG9uc2UuaGVhZGVycykge1xuICAgIHJlc3BvbnNlSGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cbiAgY29uc3Qgb2N0b2tpdFJlc3BvbnNlID0ge1xuICAgIHVybCxcbiAgICBzdGF0dXMsXG4gICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgIGRhdGE6IFwiXCJcbiAgfTtcbiAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiByZXNwb25zZUhlYWRlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gcmVzcG9uc2VIZWFkZXJzLmxpbmsgJiYgcmVzcG9uc2VIZWFkZXJzLmxpbmsubWF0Y2goLzwoW148Pl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgbG9nLndhcm4oXG4gICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7cmVzcG9uc2VIZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xuICB9XG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihmZXRjaFJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMzA0KSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShvY3Rva2l0UmVzcG9uc2UuZGF0YSksIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSkgOiBmZXRjaFJlc3BvbnNlLmJvZHk7XG4gIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKCFjb250ZW50VHlwZSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIH1cbiAgY29uc3QgbWltZXR5cGUgPSBzYWZlUGFyc2UoY29udGVudFR5cGUpO1xuICBpZiAoaXNKU09OUmVzcG9uc2UobWltZXR5cGUpKSB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWltZXR5cGUudHlwZS5zdGFydHNXaXRoKFwidGV4dC9cIikgfHwgbWltZXR5cGUucGFyYW1ldGVycy5jaGFyc2V0Py50b0xvd2VyQ2FzZSgpID09PSBcInV0Zi04XCIpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpLmNhdGNoKCgpID0+IG5ldyBBcnJheUJ1ZmZlcigwKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSlNPTlJlc3BvbnNlKG1pbWV0eXBlKSB7XG4gIHJldHVybiBtaW1ldHlwZS50eXBlID09PSBcImFwcGxpY2F0aW9uL2pzb25cIiB8fCBtaW1ldHlwZS50eXBlID09PSBcImFwcGxpY2F0aW9uL3NjaW0ranNvblwiO1xufVxuZnVuY3Rpb24gdG9FcnJvck1lc3NhZ2UoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIFwiVW5rbm93biBlcnJvclwiO1xuICB9XG4gIGlmIChcIm1lc3NhZ2VcIiBpbiBkYXRhKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEgPyBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWAgOiBcIlwiO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSA/IGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKCh2KSA9PiBKU09OLnN0cmluZ2lmeSh2KSkuam9pbihcIiwgXCIpfSR7c3VmZml4fWAgOiBgJHtkYXRhLm1lc3NhZ2V9JHtzdWZmaXh9YDtcbiAgfVxuICByZXR1cm4gYFVua25vd24gZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGRFbmRwb2ludCwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgZW5kcG9pbnQyID0gb2xkRW5kcG9pbnQuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSBmdW5jdGlvbihyb3V0ZSwgcGFyYW1ldGVycykge1xuICAgIGNvbnN0IGVuZHBvaW50T3B0aW9ucyA9IGVuZHBvaW50Mi5tZXJnZShyb3V0ZSwgcGFyYW1ldGVycyk7XG4gICAgaWYgKCFlbmRwb2ludE9wdGlvbnMucmVxdWVzdCB8fCAhZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vaykge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihlbmRwb2ludDIucGFyc2UoZW5kcG9pbnRPcHRpb25zKSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3QyID0gKHJvdXRlMiwgcGFyYW1ldGVyczIpID0+IHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoXG4gICAgICAgIGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludDIubWVyZ2Uocm91dGUyLCBwYXJhbWV0ZXJzMikpXG4gICAgICApO1xuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0Miwge1xuICAgICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2socmVxdWVzdDIsIGVuZHBvaW50T3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIHJlcXVlc3QgPSB3aXRoRGVmYXVsdHMoZW5kcG9pbnQsIGRlZmF1bHRzX2RlZmF1bHQpO1xuZXhwb3J0IHtcbiAgcmVxdWVzdFxufTtcbiIsICJjbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG5hbWU7XG4gIC8qKlxuICAgKiBodHRwIHN0YXR1cyBjb2RlXG4gICAqL1xuICBzdGF0dXM7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IG9wdGlvbnMgdGhhdCBsZWFkIHRvIHRoZSBlcnJvci5cbiAgICovXG4gIHJlcXVlc3Q7XG4gIC8qKlxuICAgKiBSZXNwb25zZSBvYmplY3QgaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWRcbiAgICovXG4gIHJlc3BvbnNlO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBvcHRpb25zKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICB0aGlzLnN0YXR1cyA9IE51bWJlci5wYXJzZUludChzdGF0dXNDb2RlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHRoaXMuc3RhdHVzKSkge1xuICAgICAgdGhpcy5zdGF0dXMgPSAwO1xuICAgIH1cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgIHJlcXVlc3RDb3B5LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QuaGVhZGVycywge1xuICAgICAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uLnJlcGxhY2UoXG4gICAgICAgICAgLyg/PCEgKSAuKiQvLFxuICAgICAgICAgIFwiIFtSRURBQ1RFRF1cIlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKS5yZXBsYWNlKC9cXGJhY2Nlc3NfdG9rZW49XFx3Ky9nLCBcImFjY2Vzc190b2tlbj1bUkVEQUNURURdXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RDb3B5O1xuICB9XG59XG5leHBvcnQge1xuICBSZXF1ZXN0RXJyb3Jcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjAuMC4wLWRldmVsb3BtZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QyIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbiAgbmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgZXJyb3JzO1xuICBkYXRhO1xufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbnZhciBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcbiAgXCJtZXRob2RcIixcbiAgXCJiYXNlVXJsXCIsXG4gIFwidXJsXCIsXG4gIFwiaGVhZGVyc1wiLFxuICBcInJlcXVlc3RcIixcbiAgXCJxdWVyeVwiLFxuICBcIm1lZGlhVHlwZVwiLFxuICBcIm9wZXJhdGlvbk5hbWVcIlxuXTtcbnZhciBGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUyA9IFtcInF1ZXJ5XCIsIFwibWV0aG9kXCIsIFwidXJsXCJdO1xudmFyIEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0MiwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwicXVlcnlcIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYClcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkgY29udGludWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oeyBxdWVyeSB9LCBvcHRpb25zKSA6IHF1ZXJ5O1xuICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5rZXlzKFxuICAgIHBhcnNlZE9wdGlvbnNcbiAgKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuICAgIHJlc3VsdC52YXJpYWJsZXNba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdDIuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcbiAgaWYgKEdIRVNfVjNfU1VGRklYX1JFR0VYLnRlc3QoYmFzZVVybCkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy51cmwgPSBiYXNlVXJsLnJlcGxhY2UoR0hFU19WM19TVUZGSVhfUkVHRVgsIFwiL2FwaS9ncmFwaHFsXCIpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0MihyZXF1ZXN0T3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBHcmFwaHFsUmVzcG9uc2VFcnJvcihcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlLmRhdGFcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QyLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDIuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogbmV3UmVxdWVzdC5lbmRwb2ludFxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZ3JhcGhxbDIgPSB3aXRoRGVmYXVsdHMocmVxdWVzdCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LWdyYXBocWwuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfSxcbiAgbWV0aG9kOiBcIlBPU1RcIixcbiAgdXJsOiBcIi9ncmFwaHFsXCJcbn0pO1xuZnVuY3Rpb24gd2l0aEN1c3RvbVJlcXVlc3QoY3VzdG9tUmVxdWVzdCkge1xuICByZXR1cm4gd2l0aERlZmF1bHRzKGN1c3RvbVJlcXVlc3QsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIHVybDogXCIvZ3JhcGhxbFwiXG4gIH0pO1xufVxuZXhwb3J0IHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWwyIGFzIGdyYXBocWwsXG4gIHdpdGhDdXN0b21SZXF1ZXN0XG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pcy1qd3QuanNcbnZhciBiNjR1cmwgPSBcIig/OlthLXpBLVowLTlfLV0rKVwiO1xudmFyIHNlcCA9IFwiXFxcXC5cIjtcbnZhciBqd3RSRSA9IG5ldyBSZWdFeHAoYF4ke2I2NHVybH0ke3NlcH0ke2I2NHVybH0ke3NlcH0ke2I2NHVybH0kYCk7XG52YXIgaXNKV1QgPSBqd3RSRS50ZXN0LmJpbmQoand0UkUpO1xuXG4vLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IGlzSldUKHRva2VuKTtcbiAgY29uc3QgaXNJbnN0YWxsYXRpb24gPSB0b2tlbi5zdGFydHNXaXRoKFwidjEuXCIpIHx8IHRva2VuLnN0YXJ0c1dpdGgoXCJnaHNfXCIpO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IHRva2VuLnN0YXJ0c1dpdGgoXCJnaHVfXCIpO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuZXhwb3J0IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59O1xuIiwgImNvbnN0IFZFUlNJT04gPSBcIjYuMS42XCI7XG5leHBvcnQge1xuICBWRVJTSU9OXG59O1xuIiwgImltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuaW1wb3J0IEhvb2sgZnJvbSBcImJlZm9yZS1hZnRlci1ob29rXCI7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IHdpdGhDdXN0b21SZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L2dyYXBocWxcIjtcbmltcG9ydCB7IGNyZWF0ZVRva2VuQXV0aCB9IGZyb20gXCJAb2N0b2tpdC9hdXRoLXRva2VuXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuY29uc3Qgbm9vcCA9ICgpID0+IHtcbn07XG5jb25zdCBjb25zb2xlV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3QgY29uc29sZUVycm9yID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKGxvZ2dlciA9IHt9KSB7XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuZGVidWcgPSBub29wO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmluZm8gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5pbmZvID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci53YXJuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIud2FybiA9IGNvbnNvbGVXYXJuO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmVycm9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuZXJyb3IgPSBjb25zb2xlRXJyb3I7XG4gIH1cbiAgcmV0dXJuIGxvZ2dlcjtcbn1cbmNvbnN0IHVzZXJBZ2VudFRyYWlsID0gYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbmNsYXNzIE9jdG9raXQge1xuICBzdGF0aWMgVkVSU0lPTiA9IFZFUlNJT047XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHBsdWdpbnMgPSBbXTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyBwbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IEhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gd2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gY3JlYXRlTG9nZ2VyKG9wdGlvbnMubG9nKTtcbiAgICB0aGlzLmhvb2sgPSBob29rO1xuICAgIGlmICghb3B0aW9ucy5hdXRoU3RyYXRlZ3kpIHtcbiAgICAgIGlmICghb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRoaXMuYXV0aCA9IGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgdHlwZTogXCJ1bmF1dGhlbnRpY2F0ZWRcIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBjcmVhdGVUb2tlbkF1dGgob3B0aW9ucy5hdXRoKTtcbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGF1dGhTdHJhdGVneSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAgICAgLy8gd2UgcGFzcyB0aGUgY3VycmVudCBvY3Rva2l0IGluc3RhbmNlIGFzIHdlbGwgYXMgaXRzIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyByZXF1aXJlbWVudCBmb3IgdGhpcyB3YXMgdGhlIFwiZXZlbnQtb2N0b2tpdFwiIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5XG4gICAgICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICAgICAgb2N0b2tpdE9wdGlvbnM6IG90aGVyT3B0aW9uc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9ucy5hdXRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzQ29uc3RydWN0b3IucGx1Z2lucy5sZW5ndGg7ICsraSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnNbaV0odGhpcywgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxuICAvLyBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0b3JcbiAgcmVxdWVzdDtcbiAgZ3JhcGhxbDtcbiAgbG9nO1xuICBob29rO1xuICAvLyBUT0RPOiB0eXBlIGBvY3Rva2l0LmF1dGhgIGJhc2VkIG9uIHBhc3NlZCBvcHRpb25zLmF1dGhTdHJhdGVneVxuICBhdXRoO1xufVxuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI1LjMuMVwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuZnVuY3Rpb24gcmVxdWVzdExvZyhvY3Rva2l0KSB7XG4gIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCAocmVxdWVzdCwgb3B0aW9ucykgPT4ge1xuICAgIG9jdG9raXQubG9nLmRlYnVnKFwicmVxdWVzdFwiLCBvcHRpb25zKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQucGFyc2Uob3B0aW9ucyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVlc3RPcHRpb25zLnVybC5yZXBsYWNlKG9wdGlvbnMuYmFzZVVybCwgXCJcIik7XG4gICAgcmV0dXJuIHJlcXVlc3Qob3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWdpdGh1Yi1yZXF1ZXN0LWlkXCJdO1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGVycm9yLnJlc3BvbnNlPy5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXSB8fCBcIlVOS05PV05cIjtcbiAgICAgIG9jdG9raXQubG9nLmVycm9yKFxuICAgICAgICBgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke2Vycm9yLnN0YXR1c30gd2l0aCBpZCAke3JlcXVlc3RJZH0gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxucmVxdWVzdExvZy5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydCB7XG4gIHJlcXVlc3RMb2dcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKSByZXR1cm4gcmVzcG9uc2U7XG4gIGNvbnN0IGluY29tcGxldGVSZXN1bHRzID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGNvbnN0IHJlcG9zaXRvcnlTZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBjb25zdCB0b3RhbENvdW50ID0gcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2l0ZXJhdG9yLmpzXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgLzwoW148Pl0rKT47XFxzKnJlbD1cIm5leHRcIi9cbiAgICAgICAgICApIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC91c2FnZVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zaWdodHMvYXBpL3JvdXRlLXN0YXRzL3thY3Rvcl90eXBlfS97YWN0b3JfaWR9XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9zdWJqZWN0LXN0YXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS91c2VyLXN0YXRzL3t1c2VyX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvbWV0cmljc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzL2JyYW5jaGVzL3ticmFuY2h9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL2NvZGVcIixcbiAgXCJHRVQgL3NlYXJjaC9jb21taXRzXCIsXG4gIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvbGFiZWxzXCIsXG4gIFwiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdG9waWNzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdXNlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L21lbWJlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3JlcG9zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvaXNzdWVzXCIsXG4gIFwiR0VUIC91c2VyL2tleXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gIFwiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvdGVhbXNcIixcbiAgXCJHRVQgL3VzZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxMy41LjBcIjtcbiIsICJpbXBvcnQgdHlwZSB7IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmNvbnN0IEVuZHBvaW50czogRW5kcG9pbnRzRGVmYXVsdHNBbmREZWNvcmF0aW9ucyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgYWRkUmVwb0FjY2Vzc1RvU2VsZkhvc3RlZFJ1bm5lckdyb3VwSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiLFxuICAgIF0sXG4gICAgY2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiLFxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW46IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJ0aWZhY3Q6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIixcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiLFxuICAgIF0sXG4gICAgZm9yY2VDYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZm9yY2UtY2FuY2VsXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIixcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzR2l0aHViT3duZWRJbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2dpdGh1Yi1vd25lZFwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0xpbWl0c0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy9saW1pdHNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNNYWNoaW5lU3BlY3NGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbWFjaGluZS1zaXplc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc1BhcnRuZXJJbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL3BhcnRuZXJcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQbGF0Zm9ybXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvcGxhdGZvcm1zXCIsXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIGdldFJlcG9QZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhY3Rpb25zXCIsIFwiZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeVwiXSB9LFxuICAgIF0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9WYXJpYWJsZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIixcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dVc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vdGltaW5nXCIsXG4gICAgXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gICAgXSxcbiAgICBsaXN0RW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgbGlzdEdpdGh1Ykhvc3RlZFJ1bm5lcnNJbkdyb3VwRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vaG9zdGVkLXJ1bm5lcnNcIixcbiAgICBdLFxuICAgIGxpc3RIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW5BdHRlbXB0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RPcmdWYXJpYWJsZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblNlY3JldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblZhcmlhYmxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIixcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiLFxuICAgIF0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXZpZXdDdXN0b21HYXRlc0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVcIixcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiLFxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHNldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIHVwZGF0ZU9yZ1ZhcmlhYmxlOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgdXBkYXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICB9LFxuICBhY3Rpdml0eToge1xuICAgIGNoZWNrUmVwb0lzU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZVJlcG9TdWJzY3JpcHRpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGRlbGV0ZVRocmVhZFN1YnNjcmlwdGlvbjogW1xuICAgICAgXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIixcbiAgICBdLFxuICAgIGdldEZlZWRzOiBbXCJHRVQgL2ZlZWRzXCJdLFxuICAgIGdldFJlcG9TdWJzY3JpcHRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGdldFRocmVhZDogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgZ2V0VGhyZWFkU3Vic2NyaXB0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFdmVudHM6IFtcIkdFVCAvZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JSZXBvTmV0d29yazogW1wiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCJdLFxuICAgIGxpc3RQdWJsaWNPcmdFdmVudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRQdWJsaWNFdmVudHNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb0V2ZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlcG9Ob3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBzdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1bnN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNoZWNrVG9rZW46IFtcIlBPU1QgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICBjcmVhdGVGcm9tTWFuaWZlc3Q6IFtcIlBPU1QgL2FwcC1tYW5pZmVzdHMve2NvZGV9L2NvbnZlcnNpb25zXCJdLFxuICAgIGNyZWF0ZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXG4gICAgICBcIlBPU1QgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L2FjY2Vzc190b2tlbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dGhvcml6YXRpb246IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L2dyYW50XCJdLFxuICAgIGRlbGV0ZUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVUb2tlbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC9hcHBcIl0sXG4gICAgZ2V0QnlTbHVnOiBbXCJHRVQgL2FwcHMve2FwcF9zbHVnfVwiXSxcbiAgICBnZXRJbnN0YWxsYXRpb246IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZ2V0T3JnSW5zdGFsbGF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFJlcG9JbnN0YWxsYXRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50OiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFVzZXJJbnN0YWxsYXRpb246IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiR0VUIC9hcHAvaG9vay9jb25maWdcIl0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW5TdHViYmVkOiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnM6IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdFBsYW5zOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIl0sXG4gICAgbGlzdFBsYW5zU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIl0sXG4gICAgbGlzdFJlcG9zQWNjZXNzaWJsZVRvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIixcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXNldFRva2VuOiBbXCJQQVRDSCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIHJldm9rZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXCJERUxFVEUgL2luc3RhbGxhdGlvbi90b2tlblwiXSxcbiAgICBzY29wZVRva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW4vc2NvcGVkXCJdLFxuICAgIHN1c3BlbmRJbnN0YWxsYXRpb246IFtcIlBVVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVuc3VzcGVuZEluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiLFxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgfSxcbiAgYmlsbGluZzoge1xuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nVXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiLFxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiLFxuICAgIF0sXG4gIH0sXG4gIGNoZWNrczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVuc1wiXSxcbiAgICBjcmVhdGVTdWl0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICAgIGdldFN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9XCJdLFxuICAgIGxpc3RBbm5vdGF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgICBdLFxuICAgIGxpc3RTdWl0ZXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIl0sXG4gICAgcmVyZXF1ZXN0UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICByZXJlcXVlc3RTdWl0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIixcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH1cIl0sXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGNvbW1pdEF1dG9maXg6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeC9jb21taXRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXhcIixcbiAgICBdLFxuICAgIGNyZWF0ZVZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVDb2RlcWxEYXRhYmFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL2RhdGFiYXNlcy97bGFuZ3VhZ2V9XCIsXG4gICAgXSxcbiAgICBnZXRBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgYWxlcnRfaWQ6IFwiYWxlcnRfbnVtYmVyXCIgfSB9LFxuICAgIF0sXG4gICAgZ2V0QW5hbHlzaXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIixcbiAgICBdLFxuICAgIGdldEF1dG9maXg6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBnZXRDb2RlcWxEYXRhYmFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL2RhdGFiYXNlcy97bGFuZ3VhZ2V9XCIsXG4gICAgXSxcbiAgICBnZXREZWZhdWx0U2V0dXA6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJdLFxuICAgIGdldFNhcmlmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvc2FyaWZzL3tzYXJpZl9pZH1cIl0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlcy97Y29kZXFsX3ZhcmlhbnRfYW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRWYXJpYW50QW5hbHlzaXNSZXBvVGFzazogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfS9yZXBvcy97cmVwb19vd25lcn0ve3JlcG9fbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJjb2RlU2Nhbm5pbmdcIiwgXCJsaXN0QWxlcnRJbnN0YW5jZXNcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RDb2RlcWxEYXRhYmFzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGVmYXVsdFNldHVwOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2RlZmF1bHQtc2V0dXBcIixcbiAgICBdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXSxcbiAgfSxcbiAgY29kZVNlY3VyaXR5OiB7XG4gICAgYXR0YWNoQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2F0dGFjaFwiLFxuICAgIF0sXG4gICAgYXR0YWNoRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2F0dGFjaFwiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29uZmlndXJhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiREVMRVRFIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRldGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMvZGV0YWNoXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbkZvclJlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNlY3VyaXR5LWNvbmZpZ3VyYXRpb25cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIl0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXREZWZhdWx0Q29uZmlndXJhdGlvbnNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMvZGVmYXVsdHNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0UmVwb3NpdG9yaWVzRm9yRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBnZXRTaW5nbGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0Q29uZmlndXJhdGlvbkFzRGVmYXVsdDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vZGVmYXVsdHNcIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHRGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVFbnRlcnByaXNlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl0sXG4gIH0sXG4gIGNvZGVzcGFjZXM6IHtcbiAgICBhZGRSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiLFxuICAgIF0sXG4gICAgY29kZXNwYWNlTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlRnJvbU9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGV4cG9ydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L2V4cG9ydHNcIixcbiAgICBdLFxuICAgIGdldENvZGVzcGFjZXNGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRQdWJsaWNLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfSxcbiAgICBdLFxuICAgIGxpc3RJblJlcG9zaXRvcnlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcHJlRmxpZ2h0V2l0aFJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbmV3XCIsXG4gICAgXSxcbiAgICBwdWJsaXNoRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vcHVibGlzaFwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXBvTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIixcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiLFxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgfSxcbiAgY29waWxvdDoge1xuICAgIGFkZENvcGlsb3RTZWF0c0ZvclRlYW1zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3RlYW1zXCIsXG4gICAgXSxcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JVc2VyczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiLFxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVXNlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiLFxuICAgIF0sXG4gICAgY29waWxvdE1ldHJpY3NGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L21ldHJpY3NcIl0sXG4gICAgY29waWxvdE1ldHJpY3NGb3JUZWFtOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIl0sXG4gICAgZ2V0Q29waWxvdE9yZ2FuaXphdGlvbkRldGFpbHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmdcIl0sXG4gICAgZ2V0Q29waWxvdFNlYXREZXRhaWxzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvcGlsb3RcIixcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC91c2FnZVwiXSxcbiAgICB1c2FnZU1ldHJpY3NGb3JUZWFtOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCJdLFxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3NuYXBzaG90c1wiLFxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGV4cG9ydFNib206IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zYm9tXCJdLFxuICB9LFxuICBlbW9qaXM6IHsgZ2V0OiBbXCJHRVQgL2Vtb2ppc1wiXSB9LFxuICBnaXN0czoge1xuICAgIGNoZWNrSXNTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvZ2lzdHNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGZvcms6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRSZXZpc2lvbjogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0ve3NoYX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9naXN0c1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL2dpc3RzL3B1YmxpY1wiXSxcbiAgICBsaXN0U3RhcnJlZDogW1wiR0VUIC9naXN0cy9zdGFycmVkXCJdLFxuICAgIHN0YXI6IFtcIlBVVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdW5zdGFyOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICB9LFxuICBnaXRpZ25vcmU6IHtcbiAgICBnZXRBbGxUZW1wbGF0ZXM6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlc1wiXSxcbiAgICBnZXRUZW1wbGF0ZTogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzL3tuYW1lfVwiXSxcbiAgfSxcbiAgaG9zdGVkQ29tcHV0ZToge1xuICAgIGNyZWF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXROZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya1NldHRpbmdzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLXNldHRpbmdzL3tuZXR3b3JrX3NldHRpbmdzX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdE5ldHdvcmtDb25maWd1cmF0aW9uc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJyZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiLFxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGFkZFN1Yklzc3VlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlcy97YXNzaWduZWV9XCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWRUb0lzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlcy97YXNzaWduZWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbGlzdFN1Yklzc3VlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBsb2NrOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHJlbW92ZUFsbExhYmVsczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVN1Yklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZVwiLFxuICAgIF0sXG4gICAgcmVwcmlvcml0aXplU3ViSXNzdWU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzL3ByaW9yaXR5XCIsXG4gICAgXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgfSxcbiAgbGljZW5zZXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbGljZW5zZXMve2xpY2Vuc2V9XCJdLFxuICAgIGdldEFsbENvbW1vbmx5VXNlZDogW1wiR0VUIC9saWNlbnNlc1wiXSxcbiAgICBnZXRGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xpY2Vuc2VcIl0sXG4gIH0sXG4gIG1hcmtkb3duOiB7XG4gICAgcmVuZGVyOiBbXCJQT1NUIC9tYXJrZG93blwiXSxcbiAgICByZW5kZXJSYXc6IFtcbiAgICAgIFwiUE9TVCAvbWFya2Rvd24vcmF3XCIsXG4gICAgICB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIgfSB9LFxuICAgIF0sXG4gIH0sXG4gIG1ldGE6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbWV0YVwiXSxcbiAgICBnZXRBbGxWZXJzaW9uczogW1wiR0VUIC92ZXJzaW9uc1wiXSxcbiAgICBnZXRPY3RvY2F0OiBbXCJHRVQgL29jdG9jYXRcIl0sXG4gICAgZ2V0WmVuOiBbXCJHRVQgL3plblwiXSxcbiAgICByb290OiBbXCJHRVQgL1wiXSxcbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGRlbGV0ZUFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBnZXRBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICB1bmxvY2tSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gICAgdW5sb2NrUmVwb0Zvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCIsXG4gICAgXSxcbiAgfSxcbiAgb2lkYzoge1xuICAgIGdldE9pZGNDdXN0b21TdWJUZW1wbGF0ZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gIH0sXG4gIG9yZ3M6IHtcbiAgICBhZGRTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5hZGRTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNhZGQtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhc3NpZ25UZWFtVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIixcbiAgICBdLFxuICAgIGJsb2NrVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNhbmNlbEludml0YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgY2hlY2tCbG9ja2VkVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQdWJsaWNNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY29udmVydE1lbWJlclRvT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUludml0YXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIl0sXG4gICAgY3JlYXRlSXNzdWVUeXBlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL29yZ3Mve29yZ31cIl0sXG4gICAgZGVsZXRlSXNzdWVUeXBlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3tzZWN1cml0eV9wcm9kdWN0fS97ZW5hYmxlbWVudH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvb3JncyNlbmFibGUtb3ItZGlzYWJsZS1hLXNlY3VyaXR5LWZlYXR1cmUtZm9yLWFuLW9yZ2FuaXphdGlvblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9vcmdzL3tvcmd9XCJdLFxuICAgIGdldEFsbEN1c3RvbVByb3BlcnRpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYVwiXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldEhpc3Rvcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiXSxcbiAgICBnZXRPcmdSdWxlc2V0VmVyc2lvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdElzc3VlVHlwZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdE91dHNpZGVDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RQYXRHcmFudFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5saXN0U2VjdXJpdHlNYW5hZ2VyVGVhbXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL3NlY3VyaXR5LW1hbmFnZXJzI2xpc3Qtc2VjdXJpdHktbWFuYWdlci10ZWFtc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5yZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNyZW1vdmUtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZXZpZXdQYXRHcmFudFJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0UHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlSXNzdWVUeXBlOiBbXCJQVVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVQYXRBY2Nlc3M6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfVwiXSxcbiAgICB1cGRhdGVQYXRBY2Nlc3NlczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJlbmFtZWQ6IFtcbiAgICAgICAgICBcInBhY2thZ2VzXCIsXG4gICAgICAgICAgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCIsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdFBhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gIH0sXG4gIHByaXZhdGVSZWdpc3RyaWVzOiB7XG4gICAgY3JlYXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiXSxcbiAgICBkZWxldGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRPcmdQcml2YXRlUmVnaXN0cnk6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMvcHVibGljLWtleVwiXSxcbiAgICBsaXN0T3JnUHJpdmF0ZVJlZ2lzdHJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgdXBkYXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgcHJvamVjdHM6IHtcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5hZGRDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2FkZC1wcm9qZWN0LWNvbGxhYm9yYXRvclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuY3JlYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2NyZWF0ZS1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuY3JlYXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNjcmVhdGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtdXNlci1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY3JlYXRlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvck9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hbi1vcmdhbml6YXRpb24tcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvclJlcG8oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYS1yZXBvc2l0b3J5LXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGU6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmRlbGV0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2RlbGV0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGVDYXJkOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmRlbGV0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNkZWxldGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGVDb2x1bW46IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDb2x1bW4oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI2RlbGV0ZS1hLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0OiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNnZXQtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0Q2FyZDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXRDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZ2V0LWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0Q29sdW1uOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNnZXQtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldFBlcm1pc3Npb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXRQZXJtaXNzaW9uRm9yVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbGxhYm9yYXRvcnMjZ2V0LXByb2plY3QtcGVybWlzc2lvbi1mb3ItYS11c2VyXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENhcmRzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENhcmRzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjbGlzdC1wcm9qZWN0LWNhcmRzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENvbGxhYm9yYXRvcnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2xpc3QtcHJvamVjdC1jb2xsYWJvcmF0b3JzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENvbHVtbnM6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENvbHVtbnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI2xpc3QtcHJvamVjdC1jb2x1bW5zXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LW9yZ2FuaXphdGlvbi1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1yZXBvc2l0b3J5LXByb2plY3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdEZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtdXNlci1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1vdmVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI21vdmUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ29sdW1uOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLm1vdmVDb2x1bW4oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI21vdmUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnJlbW92ZUNvbGxhYm9yYXRvcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbGxhYm9yYXRvcnMjcmVtb3ZlLXVzZXItYXMtYS1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjdXBkYXRlLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHVwZGF0ZUNhcmQ6IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy51cGRhdGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1xuICAgICAgXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyN1cGRhdGUtYW4tZXhpc3RpbmctcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVwbGllc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmV2aWV3OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgY3JlYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNtaXNzUmV2aWV3OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2Rpc21pc3NhbHNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiXSxcbiAgICBsaXN0RmlsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiXSxcbiAgICBsaXN0UmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgcmVxdWVzdFJldmlld2VyczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vdXBkYXRlLWJyYW5jaFwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICB9LFxuICByYXRlTGltaXQ6IHsgZ2V0OiBbXCJHRVQgL3JhdGVfbGltaXRcIl0gfSxcbiAgcmVhY3Rpb25zOiB7XG4gICAgY3JlYXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JUZWFtRGlzY3Vzc2lvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3RGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvcklzc3VlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclJlbGVhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHJlcG9zOiB7XG4gICAgYWNjZXB0SW52aXRhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGFkZEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIGFkZFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgY2FuY2VsUGFnZXNEZXBsb3ltZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnRpbmc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcml2YXRlLXZ1bG5lcmFiaWxpdHktcmVwb3J0aW5nXCIsXG4gICAgXSxcbiAgICBjaGVja1Z1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlQXR0ZXN0YXRpb246IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXR1c2VzL3tzaGF9XCJdLFxuICAgIGNyZWF0ZURlcGxveUtleTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURpc3BhdGNoRXZlbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Rpc3BhdGNoZXNcIl0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcmVwb3NcIl0sXG4gICAgY3JlYXRlRm9yazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgY3JlYXRlSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRmlsZUNvbnRlbnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBjcmVhdGVPcmdSdWxlc2V0OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVSZXBvUnVsZXNldDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbkVudmlyb25tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZURlcGxveW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnUnVsZXNldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnRpbmc6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcml2YXRlLXZ1bG5lcmFiaWxpdHktcmVwb3J0aW5nXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdIH0sXG4gICAgXSxcbiAgICBkb3dubG9hZFRhcmJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhcmJhbGwve3JlZn1cIl0sXG4gICAgZG93bmxvYWRaaXBiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCJdLFxuICAgIGVuYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiLFxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgIF0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0Q3VzdG9tRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIixcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICBnZXREZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZ2V0UHVuY2hDYXJkU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcHVuY2hfY2FyZFwiXSxcbiAgICBnZXRSZWFkbWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lXCJdLFxuICAgIGdldFJlYWRtZUluRGlyZWN0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZS97ZGlyfVwiXSxcbiAgICBnZXRSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQXNzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUJ5VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3RhZ3Mve3RhZ31cIl0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzL3tydWxlX3N1aXRlX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0SGlzdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeS97dmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsXG4gICAgXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgXSxcbiAgICBnZXRUb3BQYXRoczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcGF0aHNcIl0sXG4gICAgZ2V0VG9wUmVmZXJyZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9yZWZlcnJlcnNcIl0sXG4gICAgZ2V0VXNlcnNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3RBY3Rpdml0aWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgbGlzdEF1dG9saW5rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgbGlzdEJyYW5jaGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCJdLFxuICAgIGxpc3RCcmFuY2hlc0ZvckhlYWRDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCIsXG4gICAgXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvckNvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIl0sXG4gICAgbGlzdENvbnRyaWJ1dG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIl0sXG4gICAgbGlzdEN1c3RvbURlcGxveW1lbnRSdWxlSW50ZWdyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveUtleXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBsaXN0RGVwbG95bWVudEJyYW5jaFBvbGljaWVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlQXNzZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIl0sXG4gICAgbGlzdFRlYW1zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBzZXRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICBzZXRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9LFxuICAgIF0sXG4gICAgc2V0VXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIHVwZGF0ZUluZm9ybWF0aW9uQWJvdXRQYWdlc1NpdGU6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgdXBkYXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXBvUnVsZXNldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwidXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uXCJdIH0sXG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiLFxuICAgIF0sXG4gICAgdXBsb2FkUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHN7P25hbWUsbGFiZWx9XCIsXG4gICAgICB7IGJhc2VVcmw6IFwiaHR0cHM6Ly91cGxvYWRzLmdpdGh1Yi5jb21cIiB9LFxuICAgIF0sXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcbiAgICAgIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5zZWFyY2guaXNzdWVzQW5kUHVsbFJlcXVlc3RzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvc2VhcmNoL3NlYXJjaCNzZWFyY2gtaXNzdWVzLWFuZC1wdWxsLXJlcXVlc3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl0sXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgY3JlYXRlUHVzaFByb3RlY3Rpb25CeXBhc3M6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3B1c2gtcHJvdGVjdGlvbi1ieXBhc3Nlc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRTY2FuSGlzdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvc2Nhbi1oaXN0b3J5XCJdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgfSxcbiAgc2VjdXJpdHlBZHZpc29yaWVzOiB7XG4gICAgY3JlYXRlRm9yazogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9mb3Jrc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy9yZXBvcnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5Q3ZlUmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9jdmVcIixcbiAgICBdLFxuICAgIGdldEdsb2JhbEFkdmlzb3J5OiBbXCJHRVQgL2Fkdmlzb3JpZXMve2doc2FfaWR9XCJdLFxuICAgIGdldFJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIHRlYW1zOiB7XG4gICAgYWRkT3JVcGRhdGVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zSW5PcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNhZGQtb3ItdXBkYXRlLXRlYW0tcHJvamVjdC1wZXJtaXNzaW9uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5OiBbXG4gICAgICBcIlBVVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNhZGQtb3ItdXBkYXRlLXRlYW0tcHJvamVjdC1wZXJtaXNzaW9ucy1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVJlcG9QZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5jaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdEluT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjY2hlY2stdGVhbS1wZXJtaXNzaW9ucy1mb3ItYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3k6IFtcbiAgICAgIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5jaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdC1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0QnlOYW1lOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0RGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBsaXN0Q2hpbGRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCJdLFxuICAgIGxpc3REaXNjdXNzaW9uQ29tbWVudHNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmxpc3RQcm9qZWN0c0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzTGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNsaXN0LXRlYW0tcHJvamVjdHMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdEluT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjcmVtb3ZlLWEtcHJvamVjdC1mcm9tLWEtdGVhbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RMZWdhY3k6IFtcbiAgICAgIFwiREVMRVRFIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5yZW1vdmVQcm9qZWN0TGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjcmVtb3ZlLWEtcHJvamVjdC1mcm9tLWEtdGVhbS1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVSZXBvSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCIsXG4gICAgXSxcbiAgICB1cGRhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZUluT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgfSxcbiAgdXNlcnM6IHtcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2tleXNcIl0sXG4gICAgY3JlYXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgZGVsZXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlJZDogW1wiR0VUIC91c2VyL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZW1haWxzXCJdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiXSxcbiAgICBsaXN0UHVibGljS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgIF0sXG4gICAgdW5ibG9jazogW1wiREVMRVRFIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVuZm9sbG93OiBbXCJERUxFVEUgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXJcIl0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFbmRwb2ludHM7XG4iLCAiaW1wb3J0IHR5cGUgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRPcHRpb25zLCBSZXF1ZXN0UGFyYW1ldGVycywgUm91dGUgfSBmcm9tIFwiQG9jdG9raXQvdHlwZXNcIjtcbmltcG9ydCBFTkRQT0lOVFMgZnJvbSBcIi4vZ2VuZXJhdGVkL2VuZHBvaW50cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL21ldGhvZC10eXBlcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludERlY29yYXRpb25zIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuLy8gVGhlIGZvbGxvd2luZyBjb2RlIHdhcyByZWZhY3RvcmVkIGluOiBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzLmpzL3B1bGwvNjIyXG4vLyB0byBvcHRpbWlzZSB0aGUgcnVudGltZSBwZXJmb3JtYW5jZSBvZiBPY3Rva2l0IGluaXRpYWxpemF0aW9uLlxuLy9cbi8vIFRoaXMgb3B0aW1pemF0aW9uIGludm9sdmVzIHR3byBrZXkgY2hhbmdlczpcbi8vIDEuIFByZS1Db21wdXRhdGlvbjogVGhlIGVuZHBvaW50IG1ldGhvZHMgYXJlIHByZS1jb21wdXRlZCBvbmNlIGF0IG1vZHVsZSBsb2FkXG4vLyAgICB0aW1lIGluc3RlYWQgb2YgZWFjaCBpbnZvY2F0aW9uIG9mIGBlbmRwb2ludHNUb01ldGhvZHMoKWAuXG4vLyAyLiBMYXp5IGluaXRpYWxpemF0aW9uIGFuZCBjYWNoaW5nOiBXZSB1c2UgYSBQcm94eSBmb3IgZWFjaCBzY29wZSB0byBvbmx5XG4vLyAgICBpbml0aWFsaXplIG1ldGhvZHMgdGhhdCBhcmUgYWN0dWFsbHkgY2FsbGVkLiBUaGlzIHJlZHVjZXMgcnVudGltZSBvdmVyaGVhZFxuLy8gICAgYXMgdGhlIGluaXRpYWxpemF0aW9uIGludm9sdmVzIGRlZXAgbWVyZ2luZyBvZiBvYmplY3RzLiBUaGUgaW5pdGlhbGl6ZWRcbi8vICAgIG1ldGhvZHMgYXJlIHRoZW4gY2FjaGVkIGZvciBmdXR1cmUgdXNlLlxuXG5jb25zdCBlbmRwb2ludE1ldGhvZHNNYXAgPSBuZXcgTWFwKCk7XG5mb3IgKGNvbnN0IFtzY29wZSwgZW5kcG9pbnRzXSBvZiBPYmplY3QuZW50cmllcyhFTkRQT0lOVFMpKSB7XG4gIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgY29uc3QgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KC8gLyk7XG4gICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRzLFxuICAgICk7XG5cbiAgICBpZiAoIWVuZHBvaW50TWV0aG9kc01hcC5oYXMoc2NvcGUpKSB7XG4gICAgICBlbmRwb2ludE1ldGhvZHNNYXAuc2V0KHNjb3BlLCBuZXcgTWFwKCkpO1xuICAgIH1cblxuICAgIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLnNldChtZXRob2ROYW1lLCB7XG4gICAgICBzY29wZSxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgZGVjb3JhdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cblxudHlwZSBQcm94eVRhcmdldCA9IHtcbiAgb2N0b2tpdDogT2N0b2tpdDtcbiAgc2NvcGU6IHN0cmluZztcbiAgY2FjaGU6IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiBhbnlbXSkgPT4gYW55Pjtcbn07XG5cbmNvbnN0IGhhbmRsZXIgPSB7XG4gIGhhcyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuaGFzKG1ldGhvZE5hbWUpO1xuICB9LFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmdldCh0YXJnZXQsIG1ldGhvZE5hbWUpLCAvLyBlbnN1cmVzIG1ldGhvZCBpcyBpbiB0aGUgY2FjaGVcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eShcbiAgICB0YXJnZXQ6IFByb3h5VGFyZ2V0LFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IsXG4gICkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQuY2FjaGUsIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBkZWxldGVQcm9wZXJ0eSh0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGFyZ2V0LmNhY2hlW21ldGhvZE5hbWVdO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBvd25LZXlzKHsgc2NvcGUgfTogUHJveHlUYXJnZXQpIHtcbiAgICByZXR1cm4gWy4uLmVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmtleXMoKV07XG4gIH0sXG4gIHNldCh0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKHRhcmdldC5jYWNoZVttZXRob2ROYW1lXSA9IHZhbHVlKTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH06IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2QgPSBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5nZXQobWV0aG9kTmFtZSk7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgeyBlbmRwb2ludERlZmF1bHRzLCBkZWNvcmF0aW9ucyB9ID0gbWV0aG9kO1xuXG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhlbmRwb2ludERlZmF1bHRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBSZXN0RW5kcG9pbnRNZXRob2RzIHtcbiAgY29uc3QgbmV3TWV0aG9kcyA9IHt9IGFzIHsgW2tleTogc3RyaW5nXTogb2JqZWN0IH07XG5cbiAgZm9yIChjb25zdCBzY29wZSBvZiBlbmRwb2ludE1ldGhvZHNNYXAua2V5cygpKSB7XG4gICAgbmV3TWV0aG9kc1tzY29wZV0gPSBuZXcgUHJveHkoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGU6IHt9IH0sIGhhbmRsZXIpO1xuICB9XG5cbiAgcmV0dXJuIG5ld01ldGhvZHMgYXMgUmVzdEVuZHBvaW50TWV0aG9kcztcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGUoXG4gIG9jdG9raXQ6IE9jdG9raXQsXG4gIHNjb3BlOiBzdHJpbmcsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgZGVmYXVsdHM6IEVuZHBvaW50T3B0aW9ucyxcbiAgZGVjb3JhdGlvbnM6IEVuZHBvaW50RGVjb3JhdGlvbnMsXG4pIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKFxuICAgIC4uLmFyZ3M6IFtSb3V0ZSwgUmVxdWVzdFBhcmFtZXRlcnM/XSB8IFtFbmRwb2ludE9wdGlvbnNdXG4gICkge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIGxldCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcblxuICAgIC8vIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gb3RoZXIgZGVjb3JhdGlvbnMgdGhhbiBgLm1hcFRvRGF0YWBcbiAgICBpZiAoZGVjb3JhdGlvbnMubWFwVG9EYXRhKSB7XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgICBkYXRhOiBvcHRpb25zW2RlY29yYXRpb25zLm1hcFRvRGF0YV0sXG4gICAgICAgIFtkZWNvcmF0aW9ucy5tYXBUb0RhdGFdOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkKSB7XG4gICAgICBjb25zdCBbbmV3U2NvcGUsIG5ld01ldGhvZE5hbWVdID0gZGVjb3JhdGlvbnMucmVuYW1lZDtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oXG4gICAgICAgIGBvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKSBoYXMgYmVlbiByZW5hbWVkIHRvIG9jdG9raXQuJHtuZXdTY29wZX0uJHtuZXdNZXRob2ROYW1lfSgpYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWNvcmF0aW9ucy5kZXByZWNhdGVkKSB7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycykge1xuICAgICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgICBjb25zdCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcblxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgYWxpYXNdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICBkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycyxcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICAgIG9jdG9raXQubG9nLndhcm4oXG4gICAgICAgICAgICBgXCIke25hbWV9XCIgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgZm9yIFwib2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KClcIi4gVXNlIFwiJHthbGlhc31cIiBpbnN0ZWFkYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zW2FsaWFzXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kVHlwZXMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQvcGFyYW1ldGVycy1hbmQtcmVzcG9uc2UtdHlwZXMuanNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBlbmRwb2ludHNUb01ldGhvZHMgfSBmcm9tIFwiLi9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1wiO1xuXG4vLyBFeHBvcnQgdGhlIHR5cGUgZm9yIGRvd25zdHJlYW0gdXNlcnMgaW4gb3JkZXIgdG8gZml4IGEgVHlwZVNjcmlwdCBlcnJvclxuLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgJ09jdG9raXQnIGNhbm5vdCBiZSBuYW1lZCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvICcuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy9kaXN0LXR5cGVzL3R5cGVzLmpzJy4gVGhpcyBpcyBsaWtlbHkgbm90IHBvcnRhYmxlLiBBIHR5cGUgYW5ub3RhdGlvbiBpcyBuZWNlc3NhcnkuXG5leHBvcnQgdHlwZSB7IEFwaSB9O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIHJlc3Q6IGFwaSxcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBBcGlbXCJyZXN0XCJdICYgQXBpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmFwaSxcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuIiwgImNvbnN0IFZFUlNJT04gPSBcIjIxLjEuMVwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBPY3Rva2l0IGFzIENvcmUgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZyB9IGZyb20gXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIjtcbmltcG9ydCB7XG4gIHBhZ2luYXRlUmVzdFxufSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3RcIjtcbmltcG9ydCB7IGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IE9jdG9raXQgPSBDb3JlLnBsdWdpbihyZXF1ZXN0TG9nLCBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLCBwYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKFxuICB7XG4gICAgdXNlckFnZW50OiBgb2N0b2tpdC1yZXN0LmpzLyR7VkVSU0lPTn1gXG4gIH1cbik7XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwgImV4cG9ydCB7IHBhcnNlQXJnc1N0cmluZ1RvQXJndiB9O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VBcmdzU3RyaW5nVG9Bcmd2KHZhbHVlLCBlbnYsIGZpbGUpIHtcbiAgICAvLyAoW15cXHMnXCJdKFteXFxzJ1wiXSooWydcIl0pKFteXFwzXSo/KVxcMykrW15cXHMnXCJdKikgTWF0Y2hlcyBuZXN0ZWQgcXVvdGVzIHVudGlsIHRoZSBmaXJzdCBzcGFjZSBvdXRzaWRlIG9mIHF1b3Rlc1xuICAgIC8vIFteXFxzJ1wiXSsgb3IgTWF0Y2ggaWYgbm90IGEgc3BhY2UgJyBvciBcIlxuICAgIC8vIChbJ1wiXSkoW15cXDVdKj8pXFw1IG9yIE1hdGNoIFwicXVvdGVkIHRleHRcIiB3aXRob3V0IHF1b3Rlc1xuICAgIC8vIGBcXDNgIGFuZCBgXFw1YCBhcmUgYSBiYWNrcmVmZXJlbmNlIHRvIHRoZSBxdW90ZSBzdHlsZSAoJyBvciBcIikgY2FwdHVyZWRcbiAgICB2YXIgbXlSZWdleHAgPSAvKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopfFteXFxzJ1wiXSt8KFsnXCJdKShbXlxcNV0qPylcXDUvZ2k7XG4gICAgdmFyIG15U3RyaW5nID0gdmFsdWU7XG4gICAgdmFyIG15QXJyYXkgPSBbXTtcbiAgICBpZiAoZW52KSB7XG4gICAgICAgIG15QXJyYXkucHVzaChlbnYpO1xuICAgIH1cbiAgICBpZiAoZmlsZSkge1xuICAgICAgICBteUFycmF5LnB1c2goZmlsZSk7XG4gICAgfVxuICAgIHZhciBtYXRjaDtcbiAgICBkbyB7XG4gICAgICAgIC8vIEVhY2ggY2FsbCB0byBleGVjIHJldHVybnMgdGhlIG5leHQgcmVnZXggbWF0Y2ggYXMgYW4gYXJyYXlcbiAgICAgICAgbWF0Y2ggPSBteVJlZ2V4cC5leGVjKG15U3RyaW5nKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJbmRleCAxIGluIHRoZSBhcnJheSBpcyB0aGUgY2FwdHVyZWQgZ3JvdXAgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAvLyBJbmRleCAwIGlzIHRoZSBtYXRjaGVkIHRleHQsIHdoaWNoIHdlIHVzZSBpZiBubyBjYXB0dXJlZCBncm91cCBleGlzdHNcbiAgICAgICAgICAgIG15QXJyYXkucHVzaChmaXJzdFN0cmluZyhtYXRjaFsxXSwgbWF0Y2hbNl0sIG1hdGNoWzBdKSk7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChtYXRjaCAhPT0gbnVsbCk7XG4gICAgcmV0dXJuIG15QXJyYXk7XG59XG4vLyBBY2NlcHRzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzLCBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgb25lIHRoYXQgaXMgYSBzdHJpbmdcbi8vIChldmVuIGFuIGVtcHR5IHN0cmluZylcbmZ1bmN0aW9uIGZpcnN0U3RyaW5nKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw0RUFBQUEsVUFBQTtBQUdBLFFBQU1DLGtCQUFOLGNBQTZCLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU9qQyxZQUFZLFVBQVUsTUFBTSxTQUFT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O0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUVBLGFBQVMsSUFBSSxHQUFHLElBQUkscUJBQXFCLFFBQVEsRUFBRSxHQUFHO0FBQ3BELFlBQU0sTUFBTSxxQkFBcUIsQ0FBQztBQUNsQyxZQUFNLGdCQUFnQixJQUFJLFlBQVk7QUFDdEMsaUNBQTJCLEdBQUcsSUFBSSwyQkFBMkIsYUFBYSxJQUN4RTtBQUFBLElBQ0o7QUFHQSxXQUFPLGVBQWUsNEJBQTRCLElBQUk7QUFFdEQsSUFBQUEsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxJQUNGO0FBQUE7QUFBQTs7O0FDckhBO0FBQUEsMEVBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sU0FBUyxRQUFRLFFBQVE7QUFDL0IsUUFBTSxFQUFFLFlBQVksVUFBVSxJQUFJO0FBQ2xDLFFBQU0sRUFBRSxnQkFBZ0IsSUFBSSxRQUFRLE1BQU07QUFDMUMsUUFBTSxTQUFTLFFBQVEsUUFBUTtBQUMvQixRQUFNLE1BQU0sUUFBUSxLQUFLO0FBQ3pCLFFBQU0sRUFBRSxzQkFBQUMsc0JBQXFCLElBQUk7QUFDakMsUUFBTSxFQUFFLE1BQUFDLE1BQUssSUFBSSxRQUFRLFFBQVE7QUFDakMsUUFBTSxXQUFXLFFBQVEsTUFBTTtBQUMvQixRQUFNLEVBQUUsVUFBVSxJQUFJLFFBQVEsYUFBYTtBQUMzQyxRQUFNLEVBQUUsMkJBQTJCLElBQUk7QUFFdkMsUUFBTSxDQUFDLFdBQVcsU0FBUyxJQUFJLFFBQVEsU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLElBQUksT0FBSyxPQUFPLENBQUMsQ0FBQztBQUVsRixhQUFTLE1BQU87QUFBQSxJQUFDO0FBRWpCLGFBQVMsU0FBVSxLQUFLO0FBQ3RCLGFBQU8sT0FBTyxPQUFPLFFBQVEsWUFBWSxPQUFPLElBQUksU0FBUyxjQUFjLE9BQU8sSUFBSSxPQUFPO0FBQUEsSUFDL0Y7QUFHQSxhQUFTLFdBQVksUUFBUTtBQUMzQixhQUFRQSxTQUFRLGtCQUFrQkEsU0FDaEMsVUFDQSxPQUFPLFdBQVcsYUFDakIsT0FBTyxPQUFPLFdBQVcsY0FDeEIsT0FBTyxPQUFPLGdCQUFnQixlQUNoQyxnQkFBZ0IsS0FBSyxPQUFPLE9BQU8sV0FBVyxDQUFDO0FBQUEsSUFFbkQ7QUFFQSxhQUFTLFNBQVUsS0FBSyxhQUFhO0FBQ25DLFVBQUksSUFBSSxTQUFTLEdBQUcsS0FBSyxJQUFJLFNBQVMsR0FBRyxHQUFHO0FBQzFDLGNBQU0sSUFBSSxNQUFNLHFFQUFxRTtBQUFBLE1BQ3ZGO0FBRUEsWUFBTSxjQUFjLFVBQVUsV0FBVztBQUV6QyxVQUFJLGFBQWE7QUFDZixlQUFPLE1BQU07QUFBQSxNQUNmO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxhQUFTLFNBQVUsS0FBSztBQUN0QixVQUFJLE9BQU8sUUFBUSxVQUFVO0FBQzNCLGNBQU0sSUFBSSxJQUFJLEdBQUc7QUFFakIsWUFBSSxDQUFDLFdBQVcsS0FBSyxJQUFJLFVBQVUsSUFBSSxRQUFRLEdBQUc7QUFDaEQsZ0JBQU0sSUFBSUQsc0JBQXFCLG9FQUFvRTtBQUFBLFFBQ3JHO0FBRUEsZUFBTztBQUFBLE1BQ1Q7QUFFQSxVQUFJLENBQUMsT0FBTyxPQUFPLFFBQVEsVUFBVTtBQUNuQyxjQUFNLElBQUlBLHNCQUFxQiwwREFBMEQ7QUFBQSxNQUMzRjtBQUVBLFVBQUksQ0FBQyxXQUFXLEtBQUssSUFBSSxVQUFVLElBQUksUUFBUSxHQUFHO0FBQ2hELGNBQU0sSUFBSUEsc0JBQXFCLG9FQUFvRTtBQUFBLE1BQ3JHO0FBRUEsVUFBSSxFQUFFLGVBQWUsTUFBTTtBQUN6QixZQUFJLElBQUksUUFBUSxRQUFRLElBQUksU0FBUyxNQUFNLENBQUMsT0FBTyxTQUFTLFNBQVMsSUFBSSxJQUFJLENBQUMsR0FBRztBQUMvRSxnQkFBTSxJQUFJQSxzQkFBcUIscUZBQXFGO0FBQUEsUUFDdEg7QUFFQSxZQUFJLElBQUksUUFBUSxRQUFRLE9BQU8sSUFBSSxTQUFTLFVBQVU7QUFDcEQsZ0JBQU0sSUFBSUEsc0JBQXFCLGdFQUFnRTtBQUFBLFFBQ2pHO0FBRUEsWUFBSSxJQUFJLFlBQVksUUFBUSxPQUFPLElBQUksYUFBYSxVQUFVO0FBQzVELGdCQUFNLElBQUlBLHNCQUFxQix3RUFBd0U7QUFBQSxRQUN6RztBQUVBLFlBQUksSUFBSSxZQUFZLFFBQVEsT0FBTyxJQUFJLGFBQWEsVUFBVTtBQUM1RCxnQkFBTSxJQUFJQSxzQkFBcUIsd0VBQXdFO0FBQUEsUUFDekc7QUFFQSxZQUFJLElBQUksVUFBVSxRQUFRLE9BQU8sSUFBSSxXQUFXLFVBQVU7QUFDeEQsZ0JBQU0sSUFBSUEsc0JBQXFCLG9FQUFvRTtBQUFBLFFBQ3JHO0FBRUEsY0FBTSxPQUFPLElBQUksUUFBUSxPQUNyQixJQUFJLE9BQ0gsSUFBSSxhQUFhLFdBQVcsTUFBTTtBQUN2QyxZQUFJLFNBQVMsSUFBSSxVQUFVLE9BQ3ZCLElBQUksU0FDSixHQUFHLElBQUksUUFBUSxLQUFLLElBQUksUUFBUSxJQUFJLElBQUk7QUFDNUMsWUFBSUUsUUFBTyxJQUFJLFFBQVEsT0FDbkIsSUFBSSxPQUNKLEdBQUcsSUFBSSxZQUFZLEVBQUUsR0FBRyxJQUFJLFVBQVUsRUFBRTtBQUU1QyxZQUFJLE9BQU8sU0FBUyxHQUFHLEdBQUc7QUFDeEIsbUJBQVMsT0FBTyxVQUFVLEdBQUcsT0FBTyxTQUFTLENBQUM7QUFBQSxRQUNoRDtBQUVBLFlBQUlBLFNBQVEsQ0FBQ0EsTUFBSyxXQUFXLEdBQUcsR0FBRztBQUNqQyxVQUFBQSxRQUFPLElBQUlBLEtBQUk7QUFBQSxRQUNqQjtBQUtBLGNBQU0sSUFBSSxJQUFJLFNBQVNBLEtBQUk7QUFBQSxNQUM3QjtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxZQUFhLEtBQUs7QUFDekIsWUFBTSxTQUFTLEdBQUc7QUFFbEIsVUFBSSxJQUFJLGFBQWEsT0FBTyxJQUFJLFVBQVUsSUFBSSxNQUFNO0FBQ2xELGNBQU0sSUFBSUYsc0JBQXFCLGFBQWE7QUFBQSxNQUM5QztBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxZQUFhLE1BQU07QUFDMUIsVUFBSSxLQUFLLENBQUMsTUFBTSxLQUFLO0FBQ25CLGNBQU1HLE9BQU0sS0FBSyxRQUFRLEdBQUc7QUFFNUIsZUFBT0EsU0FBUSxFQUFFO0FBQ2pCLGVBQU8sS0FBSyxVQUFVLEdBQUdBLElBQUc7QUFBQSxNQUM5QjtBQUVBLFlBQU0sTUFBTSxLQUFLLFFBQVEsR0FBRztBQUM1QixVQUFJLFFBQVEsR0FBSSxRQUFPO0FBRXZCLGFBQU8sS0FBSyxVQUFVLEdBQUcsR0FBRztBQUFBLElBQzlCO0FBSUEsYUFBUyxjQUFlLE1BQU07QUFDNUIsVUFBSSxDQUFDLE1BQU07QUFDVCxlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU8sWUFBWSxPQUFPLE1BQU0sUUFBUTtBQUV4QyxZQUFNLGFBQWEsWUFBWSxJQUFJO0FBQ25DLFVBQUksSUFBSSxLQUFLLFVBQVUsR0FBRztBQUN4QixlQUFPO0FBQUEsTUFDVDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxVQUFXLEtBQUs7QUFDdkIsYUFBTyxLQUFLLE1BQU0sS0FBSyxVQUFVLEdBQUcsQ0FBQztBQUFBLElBQ3ZDO0FBRUEsYUFBUyxnQkFBaUIsS0FBSztBQUM3QixhQUFPLENBQUMsRUFBRSxPQUFPLFFBQVEsT0FBTyxJQUFJLE9BQU8sYUFBYSxNQUFNO0FBQUEsSUFDaEU7QUFFQSxhQUFTLFdBQVksS0FBSztBQUN4QixhQUFPLENBQUMsRUFBRSxPQUFPLFNBQVMsT0FBTyxJQUFJLE9BQU8sUUFBUSxNQUFNLGNBQWMsT0FBTyxJQUFJLE9BQU8sYUFBYSxNQUFNO0FBQUEsSUFDL0c7QUFFQSxhQUFTLFdBQVksTUFBTTtBQUN6QixVQUFJLFFBQVEsTUFBTTtBQUNoQixlQUFPO0FBQUEsTUFDVCxXQUFXLFNBQVMsSUFBSSxHQUFHO0FBQ3pCLGNBQU0sUUFBUSxLQUFLO0FBQ25CLGVBQU8sU0FBUyxNQUFNLGVBQWUsU0FBUyxNQUFNLFVBQVUsUUFBUSxPQUFPLFNBQVMsTUFBTSxNQUFNLElBQzlGLE1BQU0sU0FDTjtBQUFBLE1BQ04sV0FBVyxXQUFXLElBQUksR0FBRztBQUMzQixlQUFPLEtBQUssUUFBUSxPQUFPLEtBQUssT0FBTztBQUFBLE1BQ3pDLFdBQVcsU0FBUyxJQUFJLEdBQUc7QUFDekIsZUFBTyxLQUFLO0FBQUEsTUFDZDtBQUVBLGFBQU87QUFBQSxJQUNUO0FBRUEsYUFBUyxZQUFhQyxTQUFRO0FBQzVCLGFBQU8sQ0FBQ0EsV0FBVSxDQUFDLEVBQUVBLFFBQU8sYUFBYUEsUUFBTyxVQUFVO0FBQUEsSUFDNUQ7QUFFQSxhQUFTLGtCQUFtQkEsU0FBUTtBQUNsQyxZQUFNLFFBQVFBLFdBQVVBLFFBQU87QUFDL0IsYUFBTyxZQUFZQSxPQUFNLEtBQUssU0FBUyxDQUFDLE1BQU07QUFBQSxJQUNoRDtBQUVBLGFBQVMsUUFBU0EsU0FBUSxLQUFLO0FBQzdCLFVBQUlBLFdBQVUsUUFBUSxDQUFDLFNBQVNBLE9BQU0sS0FBSyxZQUFZQSxPQUFNLEdBQUc7QUFDOUQ7QUFBQSxNQUNGO0FBRUEsVUFBSSxPQUFPQSxRQUFPLFlBQVksWUFBWTtBQUN4QyxZQUFJLE9BQU8sZUFBZUEsT0FBTSxFQUFFLGdCQUFnQixpQkFBaUI7QUFFakUsVUFBQUEsUUFBTyxTQUFTO0FBQUEsUUFDbEI7QUFFQSxRQUFBQSxRQUFPLFFBQVEsR0FBRztBQUFBLE1BQ3BCLFdBQVcsS0FBSztBQUNkLGdCQUFRLFNBQVMsQ0FBQ0EsU0FBUUMsU0FBUTtBQUNoQyxVQUFBRCxRQUFPLEtBQUssU0FBU0MsSUFBRztBQUFBLFFBQzFCLEdBQUdELFNBQVEsR0FBRztBQUFBLE1BQ2hCO0FBRUEsVUFBSUEsUUFBTyxjQUFjLE1BQU07QUFDN0IsUUFBQUEsUUFBTyxVQUFVLElBQUk7QUFBQSxNQUN2QjtBQUFBLElBQ0Y7QUFFQSxRQUFNLHlCQUF5QjtBQUMvQixhQUFTLHNCQUF1QixLQUFLO0FBQ25DLFlBQU0sSUFBSSxJQUFJLFNBQVMsRUFBRSxNQUFNLHNCQUFzQjtBQUNyRCxhQUFPLElBQUksU0FBUyxFQUFFLENBQUMsR0FBRyxFQUFFLElBQUksTUFBTztBQUFBLElBQ3pDO0FBT0EsYUFBUyxtQkFBb0IsT0FBTztBQUNsQyxhQUFPLDJCQUEyQixLQUFLLEtBQUssTUFBTSxZQUFZO0FBQUEsSUFDaEU7QUFFQSxhQUFTLGFBQWMsU0FBUyxNQUFNLENBQUMsR0FBRztBQUV4QyxVQUFJLENBQUMsTUFBTSxRQUFRLE9BQU8sRUFBRyxRQUFPO0FBRXBDLGVBQVMsSUFBSSxHQUFHLElBQUksUUFBUSxRQUFRLEtBQUssR0FBRztBQUMxQyxjQUFNLE1BQU0sUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLFlBQVk7QUFDOUMsWUFBSSxNQUFNLElBQUksR0FBRztBQUVqQixZQUFJLENBQUMsS0FBSztBQUNSLGNBQUksTUFBTSxRQUFRLFFBQVEsSUFBSSxDQUFDLENBQUMsR0FBRztBQUNqQyxnQkFBSSxHQUFHLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxJQUFJLE9BQUssRUFBRSxTQUFTLE1BQU0sQ0FBQztBQUFBLFVBQ3ZELE9BQU87QUFDTCxnQkFBSSxHQUFHLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxTQUFTLE1BQU07QUFBQSxVQUMzQztBQUFBLFFBQ0YsT0FBTztBQUNMLGNBQUksQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHO0FBQ3ZCLGtCQUFNLENBQUMsR0FBRztBQUNWLGdCQUFJLEdBQUcsSUFBSTtBQUFBLFVBQ2I7QUFDQSxjQUFJLEtBQUssUUFBUSxJQUFJLENBQUMsRUFBRSxTQUFTLE1BQU0sQ0FBQztBQUFBLFFBQzFDO0FBQUEsTUFDRjtBQUdBLFVBQUksb0JBQW9CLE9BQU8seUJBQXlCLEtBQUs7QUFDM0QsWUFBSSxxQkFBcUIsSUFBSSxPQUFPLEtBQUssSUFBSSxxQkFBcUIsQ0FBQyxFQUFFLFNBQVMsUUFBUTtBQUFBLE1BQ3hGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxhQUFTLGdCQUFpQixTQUFTO0FBQ2pDLFlBQU0sTUFBTSxDQUFDO0FBQ2IsVUFBSSxtQkFBbUI7QUFDdkIsVUFBSSx3QkFBd0I7QUFFNUIsZUFBUyxJQUFJLEdBQUcsSUFBSSxRQUFRLFFBQVEsS0FBSyxHQUFHO0FBQzFDLGNBQU0sTUFBTSxRQUFRLElBQUksQ0FBQyxFQUFFLFNBQVM7QUFDcEMsY0FBTSxNQUFNLFFBQVEsSUFBSSxDQUFDLEVBQUUsU0FBUyxNQUFNO0FBRTFDLFlBQUksSUFBSSxXQUFXLE9BQU8sUUFBUSxvQkFBb0IsSUFBSSxZQUFZLE1BQU0sbUJBQW1CO0FBQzdGLGNBQUksS0FBSyxLQUFLLEdBQUc7QUFDakIsNkJBQW1CO0FBQUEsUUFDckIsV0FBVyxJQUFJLFdBQVcsT0FBTyxRQUFRLHlCQUF5QixJQUFJLFlBQVksTUFBTSx3QkFBd0I7QUFDOUcsa0NBQXdCLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSTtBQUFBLFFBQy9DLE9BQU87QUFDTCxjQUFJLEtBQUssS0FBSyxHQUFHO0FBQUEsUUFDbkI7QUFBQSxNQUNGO0FBR0EsVUFBSSxvQkFBb0IsMEJBQTBCLElBQUk7QUFDcEQsWUFBSSxxQkFBcUIsSUFBSSxPQUFPLEtBQUssSUFBSSxxQkFBcUIsQ0FBQyxFQUFFLFNBQVMsUUFBUTtBQUFBLE1BQ3hGO0FBRUEsYUFBTztBQUFBLElBQ1Q7QUFFQSxhQUFTLFNBQVUsUUFBUTtBQUV6QixhQUFPLGtCQUFrQixjQUFjLE9BQU8sU0FBUyxNQUFNO0FBQUEsSUFDL0Q7QUFFQSxhQUFTLGdCQUFpQkUsVUFBUyxRQUFRLFNBQVM7QUFDbEQsVUFBSSxDQUFDQSxZQUFXLE9BQU9BLGFBQVksVUFBVTtBQUMzQyxjQUFNLElBQUlOLHNCQUFxQiwyQkFBMkI7QUFBQSxNQUM1RDtBQUVBLFVBQUksT0FBT00sU0FBUSxjQUFjLFlBQVk7QUFDM0MsY0FBTSxJQUFJTixzQkFBcUIsMEJBQTBCO0FBQUEsTUFDM0Q7QUFFQSxVQUFJLE9BQU9NLFNBQVEsWUFBWSxZQUFZO0FBQ3pDLGNBQU0sSUFBSU4sc0JBQXFCLHdCQUF3QjtBQUFBLE1BQ3pEO0FBRUEsVUFBSSxPQUFPTSxTQUFRLGVBQWUsY0FBY0EsU0FBUSxlQUFlLFFBQVc7QUFDaEYsY0FBTSxJQUFJTixzQkFBcUIsMkJBQTJCO0FBQUEsTUFDNUQ7QUFFQSxVQUFJLFdBQVcsV0FBVyxXQUFXO0FBQ25DLFlBQUksT0FBT00sU0FBUSxjQUFjLFlBQVk7QUFDM0MsZ0JBQU0sSUFBSU4sc0JBQXFCLDBCQUEwQjtBQUFBLFFBQzNEO0FBQUEsTUFDRixPQUFPO0FBQ0wsWUFBSSxPQUFPTSxTQUFRLGNBQWMsWUFBWTtBQUMzQyxnQkFBTSxJQUFJTixzQkFBcUIsMEJBQTBCO0FBQUEsUUFDM0Q7QUFFQSxZQUFJLE9BQU9NLFNBQVEsV0FBVyxZQUFZO0FBQ3hDLGdCQUFNLElBQUlOLHNCQUFxQix1QkFBdUI7QUFBQSxRQUN4RDtBQUVBLFlBQUksT0FBT00sU0FBUSxlQUFlLFlBQVk7QUFDNUMsZ0JBQU0sSUFBSU4sc0JBQXFCLDJCQUEyQjtBQUFBLFFBQzVEO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFJQSxhQUFTLFlBQWEsTUFBTTtBQUMxQixhQUFPLENBQUMsRUFBRSxTQUNSLE9BQU8sY0FDSCxPQUFPLFlBQVksSUFBSSxLQUFLLEtBQUssU0FBUyxJQUMxQyxLQUFLLFNBQVMsS0FDZCxLQUFLLG1CQUNKLEtBQUssa0JBQWtCLEtBQUssZUFBZSxlQUM1QyxrQkFBa0IsSUFBSTtBQUFBLElBRTlCO0FBRUEsYUFBUyxVQUFXLE1BQU07QUFDeEIsYUFBTyxDQUFDLEVBQUUsU0FDUixPQUFPLFlBQ0gsT0FBTyxVQUFVLElBQUksSUFDckIsbUJBQW1CO0FBQUEsUUFBSyxTQUFTLFFBQVEsSUFBSTtBQUFBLE1BQy9DO0FBQUEsSUFDTjtBQUVBLGFBQVMsV0FBWSxNQUFNO0FBQ3pCLGFBQU8sQ0FBQyxFQUFFLFNBQ1IsT0FBTyxhQUNILE9BQU8sV0FBVyxJQUFJLElBQ3RCLG9CQUFvQjtBQUFBLFFBQUssU0FBUyxRQUFRLElBQUk7QUFBQSxNQUNoRDtBQUFBLElBQ047QUFFQSxhQUFTLGNBQWUsUUFBUTtBQUM5QixhQUFPO0FBQUEsUUFDTCxjQUFjLE9BQU87QUFBQSxRQUNyQixXQUFXLE9BQU87QUFBQSxRQUNsQixlQUFlLE9BQU87QUFBQSxRQUN0QixZQUFZLE9BQU87QUFBQSxRQUNuQixjQUFjLE9BQU87QUFBQSxRQUNyQixTQUFTLE9BQU87QUFBQSxRQUNoQixjQUFjLE9BQU87QUFBQSxRQUNyQixXQUFXLE9BQU87QUFBQSxNQUNwQjtBQUFBLElBQ0Y7QUFFQSxvQkFBaUIsd0JBQXlCLFVBQVU7QUFDbEQsdUJBQWlCLFNBQVMsVUFBVTtBQUNsQyxjQUFNLE9BQU8sU0FBUyxLQUFLLElBQUksUUFBUSxPQUFPLEtBQUssS0FBSztBQUFBLE1BQzFEO0FBQUEsSUFDRjtBQUVBLFFBQUk7QUFDSixhQUFTLG1CQUFvQixVQUFVO0FBQ3JDLFVBQUksQ0FBQyxnQkFBZ0I7QUFDbkIseUJBQWlCLFFBQVEsWUFBWSxFQUFFO0FBQUEsTUFDekM7QUFFQSxVQUFJLGVBQWUsTUFBTTtBQUN2QixlQUFPLGVBQWUsS0FBSyx3QkFBd0IsUUFBUSxDQUFDO0FBQUEsTUFDOUQ7QUFFQSxVQUFJTztBQUNKLGFBQU8sSUFBSTtBQUFBLFFBQ1Q7QUFBQSxVQUNFLE1BQU0sUUFBUztBQUNiLFlBQUFBLFlBQVcsU0FBUyxPQUFPLGFBQWEsRUFBRTtBQUFBLFVBQzVDO0FBQUEsVUFDQSxNQUFNLEtBQU0sWUFBWTtBQUN0QixrQkFBTSxFQUFFLE1BQU0sTUFBTSxJQUFJLE1BQU1BLFVBQVMsS0FBSztBQUM1QyxnQkFBSSxNQUFNO0FBQ1IsNkJBQWUsTUFBTTtBQUNuQiwyQkFBVyxNQUFNO0FBQUEsY0FDbkIsQ0FBQztBQUFBLFlBQ0gsT0FBTztBQUNMLG9CQUFNLE1BQU0sT0FBTyxTQUFTLEtBQUssSUFBSSxRQUFRLE9BQU8sS0FBSyxLQUFLO0FBQzlELHlCQUFXLFFBQVEsSUFBSSxXQUFXLEdBQUcsQ0FBQztBQUFBLFlBQ3hDO0FBQ0EsbUJBQU8sV0FBVyxjQUFjO0FBQUEsVUFDbEM7QUFBQSxVQUNBLE1BQU0sT0FBUSxRQUFRO0FBQ3BCLGtCQUFNQSxVQUFTLE9BQU87QUFBQSxVQUN4QjtBQUFBLFFBQ0Y7QUFBQSxRQUNBO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFJQSxhQUFTLGVBQWdCLFFBQVE7QUFDL0IsYUFDRSxVQUNBLE9BQU8sV0FBVyxZQUNsQixPQUFPLE9BQU8sV0FBVyxjQUN6QixPQUFPLE9BQU8sV0FBVyxjQUN6QixPQUFPLE9BQU8sUUFBUSxjQUN0QixPQUFPLE9BQU8sV0FBVyxjQUN6QixPQUFPLE9BQU8sUUFBUSxjQUN0QixPQUFPLE9BQU8sUUFBUSxjQUN0QixPQUFPLE9BQU8sV0FBVyxNQUFNO0FBQUEsSUFFbkM7QUFFQSxhQUFTLGVBQWdCLFFBQVE7QUFDL0IsVUFBSSxDQUFDLFFBQVE7QUFBRTtBQUFBLE1BQU87QUFDdEIsVUFBSSxPQUFPLE9BQU8sbUJBQW1CLFlBQVk7QUFDL0MsZUFBTyxlQUFlO0FBQUEsTUFDeEIsT0FBTztBQUNMLFlBQUksT0FBTyxTQUFTO0FBRWxCLGdCQUFNLE1BQU0sSUFBSSxNQUFNLDJCQUEyQjtBQUNqRCxjQUFJLE9BQU87QUFDWCxnQkFBTTtBQUFBLFFBQ1I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLGFBQVMsaUJBQWtCLFFBQVEsVUFBVTtBQUMzQyxVQUFJLHNCQUFzQixRQUFRO0FBQ2hDLGVBQU8saUJBQWlCLFNBQVMsVUFBVSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBQ3pELGVBQU8sTUFBTSxPQUFPLG9CQUFvQixTQUFTLFFBQVE7QUFBQSxNQUMzRDtBQUNBLGFBQU8sWUFBWSxTQUFTLFFBQVE7QUFDcEMsYUFBTyxNQUFNLE9BQU8sZUFBZSxTQUFTLFFBQVE7QUFBQSxJQUN0RDtBQUVBLFFBQU0sa0JBQWtCLENBQUMsQ0FBQyxPQUFPLFVBQVU7QUFLM0MsYUFBUyxZQUFhLEtBQUs7QUFDekIsVUFBSSxpQkFBaUI7QUFDbkIsZUFBTyxHQUFHLEdBQUcsR0FBRyxhQUFhO0FBQUEsTUFDL0IsV0FBVyxTQUFTLGFBQWE7QUFDL0IsZUFBTyxTQUFTLFlBQVksR0FBRztBQUFBLE1BQ2pDO0FBRUEsYUFBTyxHQUFHLEdBQUc7QUFBQSxJQUNmO0FBSUEsYUFBUyxpQkFBa0IsT0FBTztBQUNoQyxVQUFJLFNBQVMsUUFBUSxVQUFVLEdBQUksUUFBTyxFQUFFLE9BQU8sR0FBRyxLQUFLLE1BQU0sTUFBTSxLQUFLO0FBRTVFLFlBQU0sSUFBSSxRQUFRLE1BQU0sTUFBTSw2QkFBNkIsSUFBSTtBQUMvRCxhQUFPLElBQ0g7QUFBQSxRQUNFLE9BQU8sU0FBUyxFQUFFLENBQUMsQ0FBQztBQUFBLFFBQ3BCLEtBQUssRUFBRSxDQUFDLElBQUksU0FBUyxFQUFFLENBQUMsQ0FBQyxJQUFJO0FBQUEsUUFDN0IsTUFBTSxFQUFFLENBQUMsSUFBSSxTQUFTLEVBQUUsQ0FBQyxDQUFDLElBQUk7QUFBQSxNQUNoQyxJQUNBO0FBQUEsSUFDTjtBQUVBLFFBQU0sc0JBQXNCLHVCQUFPLE9BQU8sSUFBSTtBQUM5Qyx3QkFBb0IsYUFBYTtBQUVqQyxJQUFBUixRQUFPLFVBQVU7QUFBQSxNQUNmO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLHlCQUF5QixZQUFZLE1BQU8sY0FBYyxNQUFNLGFBQWE7QUFBQSxNQUM3RSxpQkFBaUIsQ0FBQyxPQUFPLFFBQVEsV0FBVyxPQUFPO0FBQUEsSUFDckQ7QUFBQTtBQUFBOzs7QUN6Z0JBO0FBQUEsdUVBQUFTLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQUksVUFBVSxLQUFLLElBQUk7QUFDdkIsUUFBSTtBQUVKLFFBQU0sYUFBYSxDQUFDO0FBRXBCLGFBQVMsWUFBYTtBQUNwQixnQkFBVSxLQUFLLElBQUk7QUFFbkIsVUFBSSxNQUFNLFdBQVc7QUFDckIsVUFBSSxNQUFNO0FBQ1YsYUFBTyxNQUFNLEtBQUs7QUFDaEIsY0FBTSxRQUFRLFdBQVcsR0FBRztBQUU1QixZQUFJLE1BQU0sVUFBVSxHQUFHO0FBQ3JCLGdCQUFNLFFBQVEsVUFBVSxNQUFNO0FBQUEsUUFDaEMsV0FBVyxNQUFNLFFBQVEsS0FBSyxXQUFXLE1BQU0sT0FBTztBQUNwRCxnQkFBTSxRQUFRO0FBQ2QsZ0JBQU0sU0FBUyxNQUFNLE1BQU07QUFBQSxRQUM3QjtBQUVBLFlBQUksTUFBTSxVQUFVLElBQUk7QUFDdEIsZ0JBQU0sUUFBUTtBQUNkLGNBQUksUUFBUSxNQUFNLEdBQUc7QUFDbkIsdUJBQVcsR0FBRyxJQUFJLFdBQVcsSUFBSTtBQUFBLFVBQ25DLE9BQU87QUFDTCx1QkFBVyxJQUFJO0FBQUEsVUFDakI7QUFDQSxpQkFBTztBQUFBLFFBQ1QsT0FBTztBQUNMLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFFQSxVQUFJLFdBQVcsU0FBUyxHQUFHO0FBQ3pCLHVCQUFlO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBRUEsYUFBUyxpQkFBa0I7QUFDekIsVUFBSSxrQkFBa0IsZUFBZSxTQUFTO0FBQzVDLHVCQUFlLFFBQVE7QUFBQSxNQUN6QixPQUFPO0FBQ0wscUJBQWEsY0FBYztBQUMzQix5QkFBaUIsV0FBVyxXQUFXLEdBQUc7QUFDMUMsWUFBSSxlQUFlLE9BQU87QUFDeEIseUJBQWUsTUFBTTtBQUFBLFFBQ3ZCO0FBQUEsTUFDRjtBQUFBLElBQ0Y7QUFFQSxRQUFNLFVBQU4sTUFBYztBQUFBLE1BQ1osWUFBYSxVQUFVLE9BQU8sUUFBUTtBQUNwQyxhQUFLLFdBQVc7QUFDaEIsYUFBSyxRQUFRO0FBQ2IsYUFBSyxTQUFTO0FBTWQsYUFBSyxRQUFRO0FBRWIsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLE1BRUEsVUFBVztBQUNULFlBQUksS0FBSyxVQUFVLElBQUk7QUFDckIscUJBQVcsS0FBSyxJQUFJO0FBQ3BCLGNBQUksQ0FBQyxrQkFBa0IsV0FBVyxXQUFXLEdBQUc7QUFDOUMsMkJBQWU7QUFBQSxVQUNqQjtBQUFBLFFBQ0Y7QUFFQSxhQUFLLFFBQVE7QUFBQSxNQUNmO0FBQUEsTUFFQSxRQUFTO0FBQ1AsYUFBSyxRQUFRO0FBQUEsTUFDZjtBQUFBLElBQ0Y7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQSxNQUNmLFdBQVksVUFBVSxPQUFPLFFBQVE7QUFDbkMsZUFBTyxRQUFRLE1BQ1gsV0FBVyxVQUFVLE9BQU8sTUFBTSxJQUNsQyxJQUFJLFFBQVEsVUFBVSxPQUFPLE1BQU07QUFBQSxNQUN6QztBQUFBLE1BQ0EsYUFBYyxTQUFTO0FBQ3JCLFlBQUksbUJBQW1CLFNBQVM7QUFDOUIsa0JBQVEsTUFBTTtBQUFBLFFBQ2hCLE9BQU87QUFDTCx1QkFBYSxPQUFPO0FBQUEsUUFDdEI7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ2hHQTtBQUFBLG9HQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUE0QkEsUUFBTSxlQUFlLFFBQVEsYUFBYSxFQUFFO0FBQzVDLFFBQU0sV0FBVyxRQUFRLFdBQVcsRUFBRTtBQUV0QyxhQUFTLEtBQU0sUUFBUTtBQUNyQixVQUFJLE9BQU8sV0FBVyxVQUFVO0FBQzlCLGlCQUFTLE9BQU8sS0FBSyxNQUFNO0FBQUEsTUFDN0I7QUFFQSxVQUFJLENBQUMsT0FBTyxTQUFTLE1BQU0sR0FBRztBQUM1QixjQUFNLElBQUksVUFBVSw0Q0FBNEM7QUFBQSxNQUNsRTtBQUVBLFlBQU0sZUFBZSxPQUFPO0FBRTVCLFVBQUksaUJBQWlCLEdBQUc7QUFDdEIsY0FBTSxJQUFJLE1BQU0sOENBQThDO0FBQUEsTUFDaEU7QUFFQSxVQUFJLGVBQWUsS0FBSztBQUN0QixjQUFNLElBQUksTUFBTSxrREFBa0Q7QUFBQSxNQUNwRTtBQUVBLFdBQUssYUFBYTtBQUNsQixXQUFLLFVBQVU7QUFFZixXQUFLLE9BQU8sSUFBSSxNQUFNLEdBQUcsRUFDdEIsS0FBSyxZQUFZO0FBQ3BCLFdBQUssbUJBQW1CO0FBQ3hCLFdBQUssVUFBVTtBQUNmLFdBQUssVUFBVTtBQUVmLFdBQUssY0FBYyxPQUFPLE1BQU0sWUFBWTtBQUk1QyxlQUFTLElBQUksR0FBRyxJQUFJLGVBQWUsR0FBRyxFQUFFLEdBQUc7QUFDekMsYUFBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLElBQUksZUFBZSxJQUFJO0FBQUEsTUFDNUM7QUFBQSxJQUNGO0FBQ0EsYUFBUyxNQUFNLFlBQVk7QUFFM0IsU0FBSyxVQUFVLFFBQVEsV0FBWTtBQUNqQyxXQUFLLG1CQUFtQjtBQUN4QixXQUFLLFVBQVU7QUFDZixXQUFLLFVBQVU7QUFBQSxJQUNqQjtBQUVBLFNBQUssVUFBVSxPQUFPLFNBQVUsT0FBTyxLQUFLO0FBQzFDLFVBQUksQ0FBQyxPQUFPLFNBQVMsS0FBSyxHQUFHO0FBQzNCLGdCQUFRLE9BQU8sS0FBSyxPQUFPLFFBQVE7QUFBQSxNQUNyQztBQUNBLFlBQU0sUUFBUSxNQUFNO0FBQ3BCLFdBQUssVUFBVSxPQUFPO0FBQ3RCLFVBQUk7QUFDSixhQUFPLE1BQU0sU0FBUyxLQUFLLFVBQVUsS0FBSyxZQUFZO0FBQUUsWUFBSSxLQUFLLFdBQVcsS0FBSztBQUFBLE1BQUU7QUFDbkYsYUFBTztBQUFBLElBQ1Q7QUFFQSxTQUFLLFVBQVUsYUFBYSxTQUFVLE1BQU07QUFDMUMsWUFBTSxNQUFNLEtBQUs7QUFDakIsWUFBTSxTQUFTLEtBQUs7QUFDcEIsWUFBTSxlQUFlLE9BQU87QUFDNUIsWUFBTSxpQkFBaUIsT0FBTyxlQUFlLENBQUM7QUFNOUMsVUFBSSxNQUFNLENBQUMsS0FBSztBQUNoQixVQUFJO0FBRUosVUFBSSxNQUFNLEdBQUc7QUFhWCxlQUFPLE1BQU0sS0FBSyxPQUFPLE1BQU0sY0FBYztBQUMzQyxlQUFLLEtBQUssa0JBQWtCLE1BQU0sTUFBTSxlQUFlLENBQUM7QUFFeEQsY0FDRSxPQUFPLGtCQUNQLEtBQUssYUFBYSxNQUFNLEtBQUssZUFBZSxDQUFDLEdBQzdDO0FBQ0EsaUJBQUssbUJBQW1CO0FBQ3hCLGNBQUUsS0FBSztBQUNQLGlCQUFLLEtBQUssUUFBUSxJQUFJO0FBRXRCLG1CQUFRLEtBQUssVUFBVSxNQUFNO0FBQUEsVUFDL0I7QUFDQSxpQkFBTyxLQUFLLEtBQUssRUFBRTtBQUFBLFFBQ3JCO0FBSUEsWUFBSSxNQUFNLEdBQUc7QUFTWCxpQkFBTyxNQUFNLEtBQUssQ0FBQyxLQUFLLGFBQWEsTUFBTSxLQUFLLE1BQU0sR0FBRyxHQUFHO0FBQUUsY0FBRTtBQUFBLFVBQUk7QUFBQSxRQUN0RTtBQUVBLFlBQUksT0FBTyxHQUFHO0FBRVosZUFBSyxLQUFLLFFBQVEsT0FBTyxLQUFLLGFBQWEsR0FBRyxLQUFLLGdCQUFnQjtBQUNuRSxlQUFLLG1CQUFtQjtBQUFBLFFBQzFCLE9BQU87QUFJTCxnQkFBTSxnQkFBZ0IsS0FBSyxtQkFBbUI7QUFDOUMsY0FBSSxnQkFBZ0IsR0FBRztBQUVyQixpQkFBSyxLQUFLLFFBQVEsT0FBTyxLQUFLLGFBQWEsR0FBRyxhQUFhO0FBQUEsVUFDN0Q7QUFFQSxlQUFLLFlBQVk7QUFBQSxZQUFLLEtBQUs7QUFBQSxZQUFhO0FBQUEsWUFBRztBQUFBLFlBQ3pDLEtBQUssbUJBQW1CO0FBQUEsVUFBYTtBQUN2QyxlQUFLLG9CQUFvQjtBQUV6QixlQUFLLEtBQUssS0FBSyxhQUFhLEtBQUssZ0JBQWdCO0FBQ2pELGVBQUssb0JBQW9CO0FBRXpCLGVBQUssVUFBVTtBQUNmLGlCQUFPO0FBQUEsUUFDVDtBQUFBLE1BQ0Y7QUFFQSxjQUFRLE9BQU8sS0FBSyxLQUFLO0FBSXpCLFVBQUksS0FBSyxRQUFRLFFBQVEsR0FBRyxNQUFNLElBQUk7QUFDcEMsY0FBTSxLQUFLLFFBQVEsUUFBUSxHQUFHO0FBQzlCLFVBQUUsS0FBSztBQUNQLFlBQUksTUFBTSxHQUFHO0FBQUUsZUFBSyxLQUFLLFFBQVEsTUFBTSxNQUFNLEtBQUssU0FBUyxHQUFHO0FBQUEsUUFBRSxPQUFPO0FBQUUsZUFBSyxLQUFLLFFBQVEsSUFBSTtBQUFBLFFBQUU7QUFFakcsZUFBUSxLQUFLLFVBQVUsTUFBTTtBQUFBLE1BQy9CLE9BQU87QUFDTCxjQUFNLE1BQU07QUFBQSxNQUNkO0FBUUEsYUFDRSxNQUFNLFFBRUosS0FBSyxHQUFHLE1BQU0sT0FBTyxDQUFDLEtBRW5CLE9BQU87QUFBQSxRQUNOLEtBQUssU0FBUyxLQUFLLE1BQU0sTUFBTSxHQUFHO0FBQUEsUUFDbEMsT0FBTyxTQUFTLEdBQUcsTUFBTSxHQUFHO0FBQUEsTUFDOUIsTUFBTSxJQUdWO0FBQ0EsVUFBRTtBQUFBLE1BQ0o7QUFDQSxVQUFJLE1BQU0sS0FBSztBQUNiLGFBQUssS0FBSyxLQUFLLGFBQWEsR0FBRyxLQUFLLE9BQU8sTUFBTSxJQUFJO0FBQ3JELGFBQUssbUJBQW1CLE1BQU07QUFBQSxNQUNoQztBQUdBLFVBQUksTUFBTSxHQUFHO0FBQUUsYUFBSyxLQUFLLFFBQVEsT0FBTyxNQUFNLEtBQUssU0FBUyxNQUFNLE1BQU0sTUFBTSxHQUFHO0FBQUEsTUFBRTtBQUVuRixXQUFLLFVBQVU7QUFDZixhQUFPO0FBQUEsSUFDVDtBQUVBLFNBQUssVUFBVSxvQkFBb0IsU0FBVSxNQUFNLEtBQUs7QUFDdEQsYUFBUSxNQUFNLElBQ1YsS0FBSyxZQUFZLEtBQUssbUJBQW1CLEdBQUcsSUFDNUMsS0FBSyxHQUFHO0FBQUEsSUFDZDtBQUVBLFNBQUssVUFBVSxlQUFlLFNBQVUsTUFBTSxLQUFLLEtBQUs7QUFDdEQsZUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUM1QixZQUFJLEtBQUssa0JBQWtCLE1BQU0sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRLENBQUMsR0FBRztBQUFFLGlCQUFPO0FBQUEsUUFBTTtBQUFBLE1BQ2hGO0FBQ0EsYUFBTztBQUFBLElBQ1Q7QUFFQSxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNuT2pCO0FBQUEsdUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sV0FBVyxRQUFRLFdBQVcsRUFBRTtBQUN0QyxRQUFNLGlCQUFpQixRQUFRLGFBQWEsRUFBRTtBQUU5QyxhQUFTLFdBQVksTUFBTTtBQUN6QixxQkFBZSxLQUFLLE1BQU0sSUFBSTtBQUFBLElBQ2hDO0FBQ0EsYUFBUyxZQUFZLGNBQWM7QUFFbkMsZUFBVyxVQUFVLFFBQVEsU0FBVSxHQUFHO0FBQUEsSUFBQztBQUUzQyxJQUFBQSxRQUFPLFVBQVU7QUFBQTtBQUFBOzs7QUNaakI7QUFBQSxnR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBRUEsSUFBQUEsUUFBTyxVQUFVLFNBQVMsU0FBVSxRQUFRLE1BQU0sY0FBYztBQUM5RCxVQUNFLENBQUMsVUFDRCxPQUFPLElBQUksTUFBTSxVQUNqQixPQUFPLElBQUksTUFBTSxNQUNqQjtBQUFFLGVBQU87QUFBQSxNQUFhO0FBRXhCLFVBQ0UsT0FBTyxPQUFPLElBQUksTUFBTSxZQUN4QixNQUFNLE9BQU8sSUFBSSxDQUFDLEdBQ2xCO0FBQUUsY0FBTSxJQUFJLFVBQVUsV0FBVyxPQUFPLHdCQUF3QjtBQUFBLE1BQUU7QUFFcEUsYUFBTyxPQUFPLElBQUk7QUFBQSxJQUNwQjtBQUFBO0FBQUE7OztBQ2ZBO0FBQUEseUdBQUFDLFVBQUFDLFNBQUE7QUFBQTtBQUVBLFFBQU0sZUFBZSxRQUFRLGFBQWEsRUFBRTtBQUM1QyxRQUFNLFdBQVcsUUFBUSxXQUFXLEVBQUU7QUFDdEMsUUFBTSxXQUFXO0FBRWpCLFFBQU0sZUFBZTtBQUVyQixRQUFNLFVBQVUsT0FBTyxLQUFLLFVBQVU7QUFDdEMsUUFBTSxVQUFVO0FBQ2hCLFFBQU0sU0FBUztBQUVmLGFBQVMsYUFBYyxLQUFLO0FBQzFCLG1CQUFhLEtBQUssSUFBSTtBQUV0QixZQUFNLE9BQU8sQ0FBQztBQUNkLFlBQU0sT0FBTztBQUNiLFdBQUssUUFBUTtBQUNiLFdBQUssUUFBUTtBQUNiLFdBQUssU0FBUztBQUNkLFdBQUssaUJBQWlCLFNBQVMsS0FBSyxrQkFBa0IsR0FBSTtBQUMxRCxXQUFLLGdCQUFnQixTQUFTLEtBQUssaUJBQWlCLEtBQUssSUFBSTtBQUM3RCxXQUFLLFNBQVM7QUFDZCxXQUFLLFNBQVMsQ0FBQztBQUNmLFdBQUssV0FBVztBQUNoQixXQUFLLEtBQUssSUFBSSxhQUFhLE9BQU87QUFDbEMsV0FBSyxHQUFHLEdBQUcsUUFBUSxTQUFVLFNBQVMsTUFBTSxPQUFPLEtBQUs7QUFDdEQsWUFBSSxRQUFRLENBQUMsS0FBSyxPQUFPO0FBQ3ZCLGNBQUksS0FBSyxRQUFRLE1BQU0sU0FBUyxLQUFLLGVBQWU7QUFDbEQsa0JBQU0sS0FBSyxnQkFBZ0IsS0FBSyxRQUFRO0FBQ3hDLGlCQUFLLFFBQVEsS0FBSztBQUNsQixpQkFBSyxRQUFRO0FBQUEsVUFDZixPQUFPO0FBQUUsaUJBQUssU0FBVSxNQUFNO0FBQUEsVUFBTztBQUVyQyxlQUFLLFVBQVUsS0FBSyxTQUFTLFVBQVUsT0FBTyxHQUFHO0FBQUEsUUFDbkQ7QUFDQSxZQUFJLFNBQVM7QUFBRSxlQUFLLFFBQVE7QUFBQSxRQUFFO0FBQUEsTUFDaEMsQ0FBQztBQUFBLElBQ0g7QUFDQSxhQUFTLGNBQWMsWUFBWTtBQUVuQyxpQkFBYSxVQUFVLE9BQU8sU0FBVSxNQUFNO0FBQzVDLFlBQU0sSUFBSSxLQUFLLEdBQUcsS0FBSyxJQUFJO0FBQzNCLFVBQUksS0FBSyxVQUFVO0FBQUUsZUFBTztBQUFBLE1BQUU7QUFBQSxJQUNoQztBQUVBLGlCQUFhLFVBQVUsUUFBUSxXQUFZO0FBQ3pDLFdBQUssV0FBVztBQUNoQixXQUFLLFNBQVM7QUFDZCxXQUFLLFNBQVMsQ0FBQztBQUNmLFdBQUssR0FBRyxNQUFNO0FBQUEsSUFDaEI7QUFFQSxpQkFBYSxVQUFVLFVBQVUsV0FBWTtBQUMzQyxVQUFJLEtBQUssUUFBUTtBQUFFLGFBQUssYUFBYTtBQUFBLE1BQUU7QUFDdkMsV0FBSyxHQUFHLFVBQVUsS0FBSyxHQUFHO0FBQzFCLFlBQU0sU0FBUyxLQUFLO0FBQ3BCLFdBQUssU0FBUyxDQUFDO0FBQ2YsV0FBSyxTQUFTO0FBQ2QsV0FBSyxXQUFXO0FBQ2hCLFdBQUssUUFBUSxLQUFLLFNBQVM7QUFDM0IsV0FBSyxRQUFRO0FBQ2IsV0FBSyxLQUFLLFVBQVUsTUFBTTtBQUFBLElBQzVCO0FBRUEsaUJBQWEsVUFBVSxlQUFlLFdBQVk7QUFDaEQsVUFBSSxLQUFLLFdBQVcsS0FBSyxnQkFBZ0I7QUFBRTtBQUFBLE1BQU87QUFFbEQsWUFBTSxRQUFRLEtBQUssT0FBTyxNQUFNLE9BQU87QUFDdkMsWUFBTSxNQUFNLE1BQU07QUFDbEIsVUFBSSxHQUFHO0FBRVAsZUFBUyxJQUFJLEdBQUcsSUFBSSxLQUFLLEVBQUUsR0FBRztBQUM1QixZQUFJLE1BQU0sQ0FBQyxFQUFFLFdBQVcsR0FBRztBQUFFO0FBQUEsUUFBUztBQUN0QyxZQUFJLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxPQUFRLE1BQU0sQ0FBQyxFQUFFLENBQUMsTUFBTSxLQUFLO0FBSS9DLGNBQUksR0FBRztBQUNMLGlCQUFLLE9BQU8sQ0FBQyxFQUFFLEtBQUssT0FBTyxDQUFDLEVBQUUsU0FBUyxDQUFDLEtBQUssTUFBTSxDQUFDO0FBQ3BEO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFFQSxjQUFNLFdBQVcsTUFBTSxDQUFDLEVBQUUsUUFBUSxHQUFHO0FBQ3JDLFlBQ0UsYUFBYSxNQUNiLGFBQWEsR0FDYjtBQUNBO0FBQUEsUUFDRjtBQUNBLFlBQUksT0FBTyxLQUFLLE1BQU0sQ0FBQyxDQUFDO0FBQ3hCLFlBQUksRUFBRSxDQUFDLEVBQUUsWUFBWTtBQUNyQixhQUFLLE9BQU8sQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNwQyxhQUFLLE9BQU8sQ0FBQyxFQUFFLEtBQU0sRUFBRSxDQUFDLEtBQUssRUFBRztBQUNoQyxZQUFJLEVBQUUsS0FBSyxXQUFXLEtBQUssZ0JBQWdCO0FBQUU7QUFBQSxRQUFNO0FBQUEsTUFDckQ7QUFBQSxJQUNGO0FBRUEsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDbkdqQjtBQUFBLGtHQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLGlCQUFpQixRQUFRLGFBQWEsRUFBRTtBQUM5QyxRQUFNLFdBQVcsUUFBUSxXQUFXLEVBQUU7QUFFdEMsUUFBTSxlQUFlO0FBRXJCLFFBQU0sYUFBYTtBQUNuQixRQUFNLGVBQWU7QUFFckIsUUFBTSxPQUFPO0FBQ2IsUUFBTSxZQUFZLE9BQU8sS0FBSyxHQUFHO0FBQ2pDLFFBQU0sU0FBUyxPQUFPLEtBQUssTUFBTTtBQUNqQyxRQUFNLFdBQVcsV0FBWTtBQUFBLElBQUM7QUFFOUIsYUFBUyxNQUFPLEtBQUs7QUFDbkIsVUFBSSxFQUFFLGdCQUFnQixRQUFRO0FBQUUsZUFBTyxJQUFJLE1BQU0sR0FBRztBQUFBLE1BQUU7QUFDdEQscUJBQWUsS0FBSyxNQUFNLEdBQUc7QUFFN0IsVUFBSSxDQUFDLE9BQVEsQ0FBQyxJQUFJLGVBQWUsT0FBTyxJQUFJLGFBQWEsVUFBVztBQUFFLGNBQU0sSUFBSSxVQUFVLG1CQUFtQjtBQUFBLE1BQUU7QUFFL0csVUFBSSxPQUFPLElBQUksYUFBYSxVQUFVO0FBQUUsYUFBSyxZQUFZLElBQUksUUFBUTtBQUFBLE1BQUUsT0FBTztBQUFFLGFBQUssV0FBVztBQUFBLE1BQVU7QUFFMUcsV0FBSyxlQUFlLElBQUk7QUFFeEIsV0FBSyxVQUFVO0FBQ2YsV0FBSyxTQUFTO0FBQ2QsV0FBSyxZQUFZO0FBQ2pCLFdBQUssY0FBYztBQUNuQixXQUFLLGNBQWM7QUFDbkIsV0FBSyxlQUFlO0FBQ3BCLFdBQUssY0FBYztBQUNuQixXQUFLLFlBQVk7QUFDakIsV0FBSyxRQUFRO0FBQ2IsV0FBSyxNQUFNO0FBQ1gsV0FBSyxjQUFjO0FBQ25CLFdBQUssWUFBWSxFQUFFLGVBQWUsSUFBSSxRQUFRO0FBQzlDLFdBQUssU0FBUztBQUVkLFlBQU0sT0FBTztBQUNiLFdBQUssV0FBVyxJQUFJLGFBQWEsR0FBRztBQUNwQyxXQUFLLFNBQVMsR0FBRyxVQUFVLFNBQVUsUUFBUTtBQUMzQyxhQUFLLFlBQVk7QUFDakIsYUFBSyxNQUFNLEtBQUssVUFBVSxNQUFNO0FBQUEsTUFDbEMsQ0FBQztBQUFBLElBQ0g7QUFDQSxhQUFTLE9BQU8sY0FBYztBQUU5QixVQUFNLFVBQVUsT0FBTyxTQUFVLElBQUk7QUFDbkMsVUFBSSxPQUFPLFlBQVksQ0FBQyxLQUFLLGFBQWE7QUFDeEMsWUFBSSxDQUFDLEtBQUssV0FBVztBQUNuQixnQkFBTSxPQUFPO0FBQ2Isa0JBQVEsU0FBUyxXQUFZO0FBQzNCLGlCQUFLLEtBQUssU0FBUyxJQUFJLE1BQU0sa0NBQWtDLENBQUM7QUFDaEUsZ0JBQUksS0FBSyxTQUFTLENBQUMsS0FBSyxhQUFhO0FBQ25DLG9CQUFNLE9BQVEsS0FBSyxjQUFjLGFBQWE7QUFDOUMsbUJBQUssTUFBTSxLQUFLLFNBQVMsSUFBSSxNQUFNLE9BQU8sMkRBQTJELENBQUM7QUFDdEcsbUJBQUssTUFBTSxLQUFLLElBQUk7QUFDcEIsc0JBQVEsU0FBUyxXQUFZO0FBQzNCLHFCQUFLLGNBQWM7QUFDbkIscUJBQUssS0FBSyxRQUFRO0FBQ2xCLHFCQUFLLGNBQWM7QUFBQSxjQUNyQixDQUFDO0FBQ0Q7QUFBQSxZQUNGO0FBQ0EsaUJBQUssY0FBYztBQUNuQixpQkFBSyxLQUFLLFFBQVE7QUFDbEIsaUJBQUssY0FBYztBQUFBLFVBQ3JCLENBQUM7QUFBQSxRQUNIO0FBQUEsTUFDRixPQUFPO0FBQUUsdUJBQWUsVUFBVSxLQUFLLE1BQU0sTUFBTSxTQUFTO0FBQUEsTUFBRTtBQUFBLElBQ2hFO0FBRUEsVUFBTSxVQUFVLFNBQVMsU0FBVSxNQUFNLFVBQVUsSUFBSTtBQUVyRCxVQUFJLENBQUMsS0FBSyxZQUFZLENBQUMsS0FBSyxVQUFVO0FBQUUsZUFBTyxHQUFHO0FBQUEsTUFBRTtBQUVwRCxVQUFJLEtBQUssZ0JBQWdCLEtBQUssYUFBYTtBQUN6QyxZQUFJLENBQUMsS0FBSyxPQUFPO0FBQ2YsZUFBSyxRQUFRLElBQUksV0FBVyxLQUFLLFNBQVM7QUFDMUMsY0FBSSxLQUFLLGNBQWMsVUFBVSxNQUFNLEdBQUc7QUFBRSxpQkFBSyxLQUFLLFlBQVksS0FBSyxLQUFLO0FBQUEsVUFBRSxPQUFPO0FBQUUsaUJBQUssUUFBUTtBQUFBLFVBQUU7QUFBQSxRQUN4RztBQUNBLGNBQU0sSUFBSSxLQUFLLFNBQVMsS0FBSyxJQUFJO0FBQ2pDLFlBQUksQ0FBQyxLQUFLLGFBQWEsTUFBTSxVQUFhLElBQUksS0FBSyxRQUFRO0FBQUUsaUJBQU8sS0FBSyxNQUFNLENBQUM7QUFBQSxRQUFFLE9BQU87QUFBRSxpQkFBTyxHQUFHO0FBQUEsUUFBRTtBQUFBLE1BQ3pHO0FBR0EsVUFBSSxLQUFLLGFBQWE7QUFDcEIsYUFBSyxTQUFTLEtBQUssTUFBTTtBQUN6QixhQUFLLGNBQWM7QUFBQSxNQUNyQjtBQUVBLFdBQUssU0FBUyxLQUFLLElBQUk7QUFFdkIsVUFBSSxLQUFLLFFBQVE7QUFBRSxhQUFLLE1BQU07QUFBQSxNQUFHLE9BQU87QUFBRSxXQUFHO0FBQUEsTUFBRTtBQUFBLElBQ2pEO0FBRUEsVUFBTSxVQUFVLFFBQVEsV0FBWTtBQUNsQyxXQUFLLFFBQVE7QUFDYixXQUFLLFdBQVc7QUFDaEIsV0FBSyxXQUFXO0FBQUEsSUFDbEI7QUFFQSxVQUFNLFVBQVUsY0FBYyxTQUFVLFVBQVU7QUFDaEQsWUFBTSxPQUFPO0FBQ2IsV0FBSyxXQUFXLElBQUksYUFBYSxXQUFXLFFBQVE7QUFDcEQsV0FBSyxTQUFTLEdBQUcsUUFBUSxTQUFVLFNBQVMsTUFBTSxPQUFPLEtBQUs7QUFDNUQsYUFBSyxRQUFRLFNBQVMsTUFBTSxPQUFPLEdBQUc7QUFBQSxNQUN4QyxDQUFDO0FBQUEsSUFDSDtBQUVBLFVBQU0sVUFBVSxVQUFVLFdBQVk7QUFDcEMsVUFBSSxLQUFLLFNBQVMsQ0FBQyxLQUFLLGFBQWE7QUFDbkMsYUFBSyxjQUFjO0FBQ25CLGFBQUssTUFBTSxHQUFHLFNBQVMsUUFBUTtBQUkvQixhQUFLLE1BQU0sT0FBTztBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxVQUFVLFNBQVUsU0FBUyxNQUFNLE9BQU8sS0FBSztBQUM3RCxVQUFJO0FBQUssWUFBTSxPQUFPO0FBQU0sVUFBSSxJQUFJO0FBQUcsVUFBSTtBQUFHLFVBQUksa0JBQWtCO0FBRXBFLFVBQUksQ0FBQyxLQUFLLFNBQVMsS0FBSyxnQkFBZ0IsTUFBTTtBQUM1QyxlQUFPLEtBQUssVUFBVSxLQUFNLFFBQVEsSUFBSyxLQUFLO0FBQzVDLGNBQUksS0FBSyxRQUFRLENBQUMsTUFBTSxNQUFNO0FBQzVCLGNBQUU7QUFDRixjQUFFLEtBQUs7QUFBQSxVQUNULE9BQU87QUFDTCxnQkFBSSxLQUFLLFNBQVM7QUFBRSxvQkFBTTtBQUFBLFlBQVU7QUFDcEMsaUJBQUssVUFBVTtBQUNmO0FBQUEsVUFDRjtBQUFBLFFBQ0Y7QUFDQSxZQUFJLEtBQUssWUFBWSxHQUFHO0FBQ3RCLGNBQUssUUFBUSxJQUFLLE9BQU8sS0FBSyxjQUFjLFNBQVMsTUFBTSxHQUFHO0FBQUUsaUJBQUssS0FBSyxXQUFXLEtBQUssTUFBTSxRQUFRLEdBQUcsR0FBRyxDQUFDO0FBQUEsVUFBRTtBQUNqSCxlQUFLLE1BQU07QUFDWCxlQUFLLFlBQVk7QUFFakIsY0FBSSxLQUFLLFdBQVcsR0FBRztBQUNyQixpQkFBSyxjQUFjO0FBQ25CLGlCQUFLLEtBQUssUUFBUTtBQUNsQixpQkFBSyxjQUFjO0FBQUEsVUFDckI7QUFBQSxRQUNGO0FBQ0EsWUFBSSxLQUFLLFNBQVM7QUFBRTtBQUFBLFFBQU87QUFBQSxNQUM3QjtBQUNBLFVBQUksS0FBSyxjQUFjO0FBQUUsYUFBSyxlQUFlO0FBQUEsTUFBTTtBQUNuRCxVQUFJLENBQUMsS0FBSyxPQUFPO0FBQ2YsYUFBSyxRQUFRLElBQUksV0FBVyxLQUFLLFNBQVM7QUFDMUMsYUFBSyxNQUFNLFFBQVEsU0FBVSxHQUFHO0FBQzlCLGVBQUssU0FBUztBQUFBLFFBQ2hCO0FBQ0EsWUFBSSxLQUFLLGVBQWUsS0FBSyxjQUFjLFVBQVUsTUFBTSxHQUFHO0FBQzVELGVBQUssS0FBSyxZQUFZLEtBQUssS0FBSztBQUFBLFFBQ2xDLFdBQVcsS0FBSyxnQkFBZ0IsUUFBUSxLQUFLLGNBQWMsTUFBTSxNQUFNLEdBQUc7QUFDeEUsZUFBSyxLQUFLLFFBQVEsS0FBSyxLQUFLO0FBQUEsUUFDOUIsT0FBTztBQUNMLGVBQUssUUFBUTtBQUFBLFFBQ2Y7QUFDQSxZQUFJLENBQUMsS0FBSyxhQUFhO0FBQUUsZUFBSyxZQUFZO0FBQUEsUUFBSztBQUFBLE1BQ2pEO0FBQ0EsVUFBSSxRQUFRLFFBQVEsT0FBTyxDQUFDLEtBQUssYUFBYTtBQUM1QyxZQUFJLEtBQUssZUFBZSxDQUFDLEtBQUssV0FBVztBQUN2QyxjQUFJLEtBQUs7QUFBRSw4QkFBa0IsS0FBSyxNQUFNLEtBQUssR0FBRztBQUFBLFVBQUU7QUFDbEQsNEJBQWtCLEtBQUssTUFBTSxLQUFLLEtBQUssTUFBTSxPQUFPLEdBQUcsQ0FBQztBQUN4RCxjQUFJLENBQUMsaUJBQWlCO0FBQUUsaUJBQUssU0FBUztBQUFBLFVBQUs7QUFBQSxRQUM3QyxXQUFXLENBQUMsS0FBSyxlQUFlLEtBQUssV0FBVztBQUM5QyxjQUFJLEtBQUs7QUFBRSxpQkFBSyxTQUFTLEtBQUssR0FBRztBQUFBLFVBQUU7QUFDbkMsY0FBSSxLQUFLLFNBQVMsS0FBSyxLQUFLLE1BQU0sT0FBTyxHQUFHLENBQUM7QUFDN0MsY0FBSSxDQUFDLEtBQUssYUFBYSxNQUFNLFVBQWEsSUFBSSxLQUFLO0FBQUUsaUJBQUssUUFBUSxPQUFPLE1BQU0sUUFBUSxHQUFHLEdBQUc7QUFBQSxVQUFFO0FBQUEsUUFDakc7QUFBQSxNQUNGO0FBQ0EsVUFBSSxTQUFTO0FBQ1gsYUFBSyxTQUFTLE1BQU07QUFDcEIsWUFBSSxLQUFLLGFBQWE7QUFBRSxlQUFLLGNBQWM7QUFBQSxRQUFNLE9BQU87QUFDdEQsY0FBSSxVQUFVLEtBQUs7QUFDakIsY0FBRSxLQUFLO0FBQ1AsaUJBQUssTUFBTSxHQUFHLE9BQU8sV0FBWTtBQUMvQixrQkFBSSxFQUFFLEtBQUssV0FBVyxHQUFHO0FBQ3ZCLG9CQUFJLEtBQUssV0FBVztBQUNsQix1QkFBSyxjQUFjO0FBQ25CLHVCQUFLLEtBQUssUUFBUTtBQUNsQix1QkFBSyxjQUFjO0FBQUEsZ0JBQ3JCLE9BQU87QUFDTCx1QkFBSyxTQUFTO0FBQUEsZ0JBQ2hCO0FBQUEsY0FDRjtBQUFBLFlBQ0YsQ0FBQztBQUFBLFVBQ0g7QUFBQSxRQUNGO0FBQ0EsYUFBSyxNQUFNLEtBQUssSUFBSTtBQUNwQixhQUFLLFFBQVE7QUFDYixhQUFLLGNBQWM7QUFDbkIsYUFBSyxlQUFlO0FBQ3BCLGFBQUssVUFBVTtBQUFBLE1BQ2pCO0FBQUEsSUFDRjtBQUVBLFVBQU0sVUFBVSxXQUFXLFdBQVk7QUFDckMsVUFBSSxDQUFDLEtBQUssUUFBUTtBQUFFO0FBQUEsTUFBTztBQUUzQixXQUFLLFNBQVM7QUFDZCxVQUFJLEtBQUssS0FBSztBQUNaLGNBQU0sS0FBSyxLQUFLO0FBQ2hCLGFBQUssTUFBTTtBQUNYLFdBQUc7QUFBQSxNQUNMO0FBQUEsSUFDRjtBQUVBLElBQUFBLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ3BOakI7QUFBQSxrR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBR0EsUUFBTSxjQUFjLElBQUksWUFBWSxPQUFPO0FBQzNDLFFBQU0sZUFBZSxvQkFBSSxJQUFJO0FBQUEsTUFDM0IsQ0FBQyxTQUFTLFdBQVc7QUFBQSxNQUNyQixDQUFDLFFBQVEsV0FBVztBQUFBLElBQ3RCLENBQUM7QUFFRCxhQUFTLFdBQVksU0FBUztBQUM1QixVQUFJO0FBQ0osYUFBTyxNQUFNO0FBQ1gsZ0JBQVEsU0FBUztBQUFBLFVBQ2YsS0FBSztBQUFBLFVBQ0wsS0FBSztBQUNILG1CQUFPLFNBQVM7QUFBQSxVQUNsQixLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQUEsVUFDTCxLQUFLO0FBQ0gsbUJBQU8sU0FBUztBQUFBLFVBQ2xCLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFBQSxVQUNMLEtBQUs7QUFDSCxtQkFBTyxTQUFTO0FBQUEsVUFDbEIsS0FBSztBQUNILG1CQUFPLFNBQVM7QUFBQSxVQUNsQjtBQUNFLGdCQUFJLE9BQU8sUUFBVztBQUNwQixtQkFBSztBQUNMLHdCQUFVLFFBQVEsWUFBWTtBQUM5QjtBQUFBLFlBQ0Y7QUFDQSxtQkFBTyxTQUFTLE1BQU0sS0FBSyxPQUFPO0FBQUEsUUFDdEM7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUVBLFFBQU0sV0FBVztBQUFBLE1BQ2YsTUFBTSxDQUFDLE1BQU0sbUJBQW1CO0FBQzlCLFlBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixpQkFBTyxPQUFPLEtBQUssTUFBTSxjQUFjO0FBQUEsUUFDekM7QUFDQSxlQUFPLEtBQUssVUFBVSxHQUFHLEtBQUssTUFBTTtBQUFBLE1BQ3RDO0FBQUEsTUFFQSxRQUFRLENBQUMsTUFBTSxtQkFBbUI7QUFDaEMsWUFBSSxLQUFLLFdBQVcsR0FBRztBQUNyQixpQkFBTztBQUFBLFFBQ1Q7QUFDQSxZQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLGVBQU8sS0FBSyxZQUFZLEdBQUcsS0FBSyxNQUFNO0FBQUEsTUFDeEM7QUFBQSxNQUVBLFNBQVMsQ0FBQyxNQUFNLG1CQUFtQjtBQUNqQyxZQUFJLEtBQUssV0FBVyxHQUFHO0FBQ3JCLGlCQUFPO0FBQUEsUUFDVDtBQUNBLFlBQUksT0FBTyxTQUFTLFVBQVU7QUFDNUIsaUJBQU8sT0FBTyxLQUFLLE1BQU0sY0FBYztBQUFBLFFBQ3pDO0FBQ0EsZUFBTyxLQUFLLFVBQVUsR0FBRyxLQUFLLE1BQU07QUFBQSxNQUN0QztBQUFBLE1BRUEsUUFBUSxDQUFDLE1BQU0sbUJBQW1CO0FBQ2hDLFlBQUksS0FBSyxXQUFXLEdBQUc7QUFDckIsaUJBQU87QUFBQSxRQUNUO0FBQ0EsWUFBSSxPQUFPLFNBQVMsVUFBVTtBQUM1QixpQkFBTyxPQUFPLEtBQUssTUFBTSxjQUFjO0FBQUEsUUFDekM7QUFDQSxlQUFPLEtBQUssWUFBWSxHQUFHLEtBQUssTUFBTTtBQUFBLE1BQ3hDO0FBQUEsTUFFQSxPQUFPLENBQUMsTUFBTSxtQkFBbUI7QUFDL0IsWUFBSSxLQUFLLFdBQVcsR0FBRztBQUNyQixpQkFBTztBQUFBLFFBQ1Q7QUFDQSxZQUFJLE9BQU8sU0FBUyxVQUFVO0FBQzVCLGlCQUFPLE9BQU8sS0FBSyxNQUFNLGNBQWM7QUFBQSxRQUN6QztBQUVBLFlBQUksYUFBYSxJQUFJRCxTQUFLLFNBQVMsQ0FBQyxHQUFHO0FBQ3JDLGNBQUk7QUFDRixtQkFBTyxhQUFhLElBQUlBLFFBQUksRUFBRSxPQUFPLElBQUk7QUFBQSxVQUMzQyxRQUFRO0FBQUEsVUFBQztBQUFBLFFBQ1g7QUFDQSxlQUFPLE9BQU8sU0FBUyxXQUNuQixPQUNBLEtBQUssU0FBUztBQUFBLE1BQ3BCO0FBQUEsSUFDRjtBQUVBLGFBQVMsV0FBWSxNQUFNLGdCQUFnQixjQUFjO0FBQ3ZELFVBQUksTUFBTTtBQUNSLGVBQU8sV0FBVyxZQUFZLEVBQUUsTUFBTSxjQUFjO0FBQUEsTUFDdEQ7QUFDQSxhQUFPO0FBQUEsSUFDVDtBQUVBLElBQUFDLFFBQU8sVUFBVTtBQUFBO0FBQUE7OztBQ2pIakI7QUFBQSxtR0FBQUMsVUFBQUMsU0FBQTtBQUFBO0FBR0EsUUFBTSxhQUFhO0FBRW5CLFFBQU0sYUFBYTtBQUVuQixRQUFNLGdCQUFnQjtBQUFBLE1BQ3BCLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFD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LE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFH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QUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsYUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEs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QUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFD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O01BQ0o7SUFDRjtJQUNBLGNBQWM7TUFDWjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsNEJBQTRCO01BQzFCO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxjQUFjO01BQ1o7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLGVBQWU7TUFDYjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsUUFBUTtNQUNOO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxZQUFZO01BQ1Y7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLGNBQWM7TUFDWjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsS0FBSztNQUNIO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxTQUFTO01BQ1A7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLFdBQVc7TUFDVDtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0Esc0JBQXNCO01BQ3BCO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxXQUFXO01BQ1Q7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLG1CQUFtQjtNQUNqQjtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsYUFBYTtNQUNYO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxZQUFZO01BQ1Y7TUFDQSxDQUFDO01BQ0Q7UUFDRSxZQUNFO01BQ0o7SUFDRjtJQUNBLGFBQWE7TUFDWDtNQUNBLENBQUM7TUFDRDtRQUNFLFlBQ0U7TUFDSjtJQUNGO0lBQ0EsYUFBYTtNQUNYO01BQ0EsQ0FBQztNQUNEO1FBQ0UsWUFDRTtNQUNKO0lBQ0Y7SUFDQSxVQUFVO01BQ1I7TUFDQSxDQUFDO01BQ0Q7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LFdBQU8sQ0FBQztBQUFBLEVBQ1Y7QUFFQSxNQUFJLE1BQU0sV0FBVyxHQUFHLEdBQUc7QUFDekIsV0FBTyxLQUFLLE1BQU0sS0FBSztBQUFBLEVBQ3pCLE9BQU87QUFDTCxXQUFPLHNCQUFzQixLQUFLO0FBQUEsRUFDcEM7QUFDRjtBQUVBLFNBQVMsaUJBQWlCLE9BQStCO0FBQ3ZELFVBQVEsT0FBTztBQUFBLElBQ2IsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUFBLElBQ0wsS0FBSztBQUNILGFBQU87QUFBQSxJQUNUO0FBQ0UsWUFBTSxJQUFJO0FBQUEsUUFDUiw0QkFBNEIsS0FBSztBQUFBLE1BQ25DO0FBQUEsRUFDSjtBQUNGO0FBRUEsU0FBUyxZQUFZLE9BQThCO0FBQ2pELFNBQU8sTUFBTSxLQUFLLEVBQUUsVUFBVSxJQUFJLE9BQU87QUFDM0M7QUFFQSxTQUFTLGFBQWEsT0FBd0I7QUFDNUMsUUFBTSxhQUFhLE1BQU0sS0FBSyxFQUFFLFlBQVk7QUFDNUMsTUFBSSxDQUFDLFFBQVEsS0FBSyxPQUFPLEdBQUcsRUFBRSxTQUFTLFVBQVUsR0FBRztBQUNsRCxXQUFPO0FBQUEsRUFDVDtBQUNBLE1BQUksQ0FBQyxTQUFTLEtBQUssTUFBTSxHQUFHLEVBQUUsU0FBUyxVQUFVLEdBQUc7QUFDbEQsV0FBTztBQUFBLEVBQ1Q7QUFDQSxRQUFNLElBQUksTUFBTSwwQkFBMEIsS0FBSyxFQUFFO0FBQ25EO0FBRUEsS0FBSzsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJDb21tYW5kZXJFcnJvciIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkFyZ3VtZW50IiwgImV4cG9ydHMiLCAiSGVscCIsICJjbWQiLCAiZXhwb3J0cyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJPcHRpb24iLCAic3RyIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJwYXRoIiwgImZzIiwgInByb2Nlc3MiLCAiQXJndW1lbnQiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSGVscCIsICJPcHRpb24iLCAiQ29tbWFuZCIsICJob29rIiwgIm9wdGlvbiIsICJleHBvcnRzIiwgIkFyZ3VtZW50IiwgIkNvbW1hbmQiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSGVscCIsICJPcHRpb24iLCAiZXhwb3J0cyIsICJDb21tYW5kIiwgImV4cG9ydHMiLCAiZnMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAib3B0aW9ucyIsICJzb2NrZXQiLCAicmVxdWlyZV90dW5uZWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJwYXRoIiwgImlkeCIsICJzdHJlYW0iLCAiZXJyIiwgImhhbmRsZXIiLCAiaXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAic3RydWN0dXJlZENsb25lIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwZXJmb3JtYW5jZSIsICJyZXF1ZXN0IiwgIml0ZXJhdG9yIiwgImtpbmQiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXRvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJsb2IiLCAiZW50cnkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgIkJsb2IiLCAiY2h1bmsiLCAiaXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicGF0aCIsICJoYW5kbGVyIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXJyIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic2Vzc2lvbiIsICJvbkNvbm5lY3RUaW1lb3V0IiwgImV4cG9ydHMiLCAiRVJST1IiLCAiZXhwb3J0cyIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJGSU5JU0giLCAiSEVBREVSX1NUQVRFIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImNvbm5lY3QiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgInNvY2tldCIsICJwYXRoIiwgImhlYWRlcnMiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAib3JpZ2luIiwgImRpc3BhdGNoZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicG9vbCIsICJkaXNwYXRjaGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIldlYWtSZWYiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJCbG9iIiwgIm5vb3AiLCAiY29uc3VtZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicmVxdWVzdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjYWxsYmFjayIsICJyZXMiLCAib3BhcXVlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAiYm9keSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtb2NrRGlzcGF0Y2giLCAicGF0aCIsICJnZXRSZXNwb25zZURhdGEiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRSZXNwb25zZURhdGEiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic3RhdHVzQ29kZSIsICJkYXRhIiwgInJlc3BvbnNlT3B0aW9ucyIsICJuZXdNb2NrRGlzcGF0Y2giLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlVSTCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJvcHRzIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXJyIiwgInJlcXVpcmVfZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInJlcXVpcmVfcmVxdWVzdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImFjIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJyZXF1ZXN0IiwgImdsb2JhbFRoaXMiLCAiaXRlcmF0b3IiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAidHlwZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWVzdCIsICJjYWNoZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYm9keSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJwYXRoIiwgIkh0dHBDb2RlcyIsICJleHBvcnRzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJ1c2VyQWdlbnQiLCAiaW5mbyIsICJoYW5kbGVyIiwgImxvd2VyY2FzZUtleXMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJleHBvcnRzIiwgImZzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJfYSIsICJwYXRoIiwgImV4cG9ydHMiLCAicGF0aCIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJwYXRoIiwgIkV4aXRDb2RlIiwgImV4cG9ydHMiLCAic2V0T3V0cHV0IiwgImluZm8iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiTnVsbE9iamVjdCIsICJwYXJzZSIsICJzYWZlUGFyc2UiLCAiY29tbWFuZGVyIiwgInByb2dyYW0iLCAicGF0aCIsICJwYXRoIiwgImZzIiwgImNvcmUiLCAibmFtZSIsICJtZXRob2QiLCAiaG9vayIsICJob29rIiwgIlZFUlNJT04iLCAiaXNQbGFpbk9iamVjdCIsICJ3aXRoRGVmYXVsdHMiLCAiVkVSU0lPTiIsICJ3aXRoRGVmYXVsdHMiLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiaG9vayIsICJhdXRoIiwgIlZFUlNJT04iLCAicmVxdWVzdCIsICJwYXRoIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiZW5kcG9pbnQiLCAib3B0aW9ucyIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiT2N0b2tpdCIsICJWRVJTSU9OIiwgIk9jdG9raXQiLCAicHJvZ3JhbSJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1jb250ZW50LXR5cGUtcGFyc2VAMi4wLjEvbm9kZV9tb2R1bGVzL2Zhc3QtY29udGVudC10eXBlLXBhcnNlL2luZGV4LmpzIiwgIi4uL3NyYy9tYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb21tYW5kZXJAMTQuMC4xL25vZGVfbW9kdWxlcy9jb21tYW5kZXIvZXNtLm1qcyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL3JlYWRTZXJ2ZXJJbmZvLnRzIiwgIi4uL3NyYy9ydW5Db2RleEV4ZWMudHMiLCAiLi4vc3JjL2Ryb3BTdWRvLnRzIiwgIi4uL3NyYy9jaGVja0FjdG9yUGVybWlzc2lvbnMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXZlcnNhbC11c2VyLWFnZW50QDcuMC4zL25vZGVfbW9kdWxlcy91bml2ZXJzYWwtdXNlci1hZ2VudC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9yZWdpc3Rlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2xpYi9hZGQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVtb3ZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2VuZHBvaW50QDEwLjEuNC9ub2RlX21vZHVsZXMvQG9jdG9raXQvZW5kcG9pbnQvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3JlcXVlc3RAOS4yLjQvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3JlcXVlc3QtZXJyb3JANi4xLjgvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3JlcXVlc3QtZXJyb3IvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2dyYXBocWxAOC4yLjIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2dyYXBocWwvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2F1dGgtdG9rZW5ANS4xLjIvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2F1dGgtdG9rZW4vZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvY29yZS9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlcXVlc3QtbG9nQDUuMy4xX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVxdWVzdC1sb2dANS4zLjFfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcGFnaW5hdGUtcmVzdEAxMS42LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3QvZGlzdC1idW5kbGUvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy92ZXJzaW9uLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvZ2VuZXJhdGVkL2VuZHBvaW50cy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2VuZHBvaW50cy10by1tZXRob2RzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3Jlc3RAMjEuMS4xL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3Jlc3RAMjEuMS4xL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXN0L2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmctYXJndkAwLjMuMi9ub2RlX21vZHVsZXMvc3RyaW5nLWFyZ3YvaW5kZXguanMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbIi8qKlxuICogQ29tbWFuZGVyRXJyb3IgY2xhc3NcbiAqL1xuY2xhc3MgQ29tbWFuZGVyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIC8qKlxuICAgKiBDb25zdHJ1Y3RzIHRoZSBDb21tYW5kZXJFcnJvciBjbGFzc1xuICAgKiBAcGFyYW0ge251bWJlcn0gZXhpdENvZGUgc3VnZ2VzdGVkIGV4aXQgY29kZSB3aGljaCBjb3VsZCBiZSB1c2VkIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvclxuICAgKi9cbiAgY29uc3RydWN0b3IoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKTtcbiAgICAvLyBwcm9wZXJseSBjYXB0dXJlIHN0YWNrIHRyYWNlIGluIE5vZGUuanNcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB0aGlzLm5hbWUgPSB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XG4gICAgdGhpcy5jb2RlID0gY29kZTtcbiAgICB0aGlzLmV4aXRDb2RlID0gZXhpdENvZGU7XG4gICAgdGhpcy5uZXN0ZWRFcnJvciA9IHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIEludmFsaWRBcmd1bWVudEVycm9yIGNsYXNzXG4gKi9cbmNsYXNzIEludmFsaWRBcmd1bWVudEVycm9yIGV4dGVuZHMgQ29tbWFuZGVyRXJyb3Ige1xuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgSW52YWxpZEFyZ3VtZW50RXJyb3IgY2xhc3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFttZXNzYWdlXSBleHBsYW5hdGlvbiBvZiB3aHkgYXJndW1lbnQgaXMgaW52YWxpZFxuICAgKi9cbiAgY29uc3RydWN0b3IobWVzc2FnZSkge1xuICAgIHN1cGVyKDEsICdjb21tYW5kZXIuaW52YWxpZEFyZ3VtZW50JywgbWVzc2FnZSk7XG4gICAgLy8gcHJvcGVybHkgY2FwdHVyZSBzdGFjayB0cmFjZSBpbiBOb2RlLmpzXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICB9XG59XG5cbmV4cG9ydHMuQ29tbWFuZGVyRXJyb3IgPSBDb21tYW5kZXJFcnJvcjtcbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbiIsICJjb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5cbmNsYXNzIEFyZ3VtZW50IHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgY29tbWFuZCBhcmd1bWVudCB3aXRoIHRoZSBnaXZlbiBuYW1lIGFuZCBkZXNjcmlwdGlvbi5cbiAgICogVGhlIGRlZmF1bHQgaXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgcmVxdWlyZWQsIGFuZCB5b3UgY2FuIGV4cGxpY2l0bHlcbiAgICogaW5kaWNhdGUgdGhpcyB3aXRoIDw+IGFyb3VuZCB0aGUgbmFtZS4gUHV0IFtdIGFyb3VuZCB0aGUgbmFtZSBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKG5hbWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICcnO1xuICAgIHRoaXMudmFyaWFkaWMgPSBmYWxzZTtcbiAgICB0aGlzLnBhcnNlQXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdW5kZWZpbmVkO1xuXG4gICAgc3dpdGNoIChuYW1lWzBdKSB7XG4gICAgICBjYXNlICc8JzogLy8gZS5nLiA8cmVxdWlyZWQ+XG4gICAgICAgIHRoaXMucmVxdWlyZWQgPSB0cnVlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnWyc6IC8vIGUuZy4gW29wdGlvbmFsXVxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lLnNsaWNlKDEsIC0xKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XG4gICAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9uYW1lLmVuZHNXaXRoKCcuLi4nKSkge1xuICAgICAgdGhpcy52YXJpYWRpYyA9IHRydWU7XG4gICAgICB0aGlzLl9uYW1lID0gdGhpcy5fbmFtZS5zbGljZSgwLCAtMyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhcmd1bWVudCBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG5hbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX25hbWU7XG4gIH1cblxuICAvKipcbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2NvbGxlY3RWYWx1ZSh2YWx1ZSwgcHJldmlvdXMpIHtcbiAgICBpZiAocHJldmlvdXMgPT09IHRoaXMuZGVmYXVsdFZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHByZXZpb3VzKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuXG4gICAgcHJldmlvdXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIHByZXZpb3VzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIG9wdGlvbmFsbHkgc3VwcGx5IHRoZSBkZXNjcmlwdGlvbiB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7QXJndW1lbnR9XG4gICAqL1xuXG4gIGRlZmF1bHQodmFsdWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB2YWx1ZTtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXN0b20gaGFuZGxlciBmb3IgcHJvY2Vzc2luZyBDTEkgY29tbWFuZCBhcmd1bWVudHMgaW50byBhcmd1bWVudCB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAgICogQHJldHVybiB7QXJndW1lbnR9XG4gICAqL1xuXG4gIGFyZ1BhcnNlcihmbikge1xuICAgIHRoaXMucGFyc2VBcmcgPSBmbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmx5IGFsbG93IGFyZ3VtZW50IHZhbHVlIHRvIGJlIG9uZSBvZiBjaG9pY2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXNcbiAgICogQHJldHVybiB7QXJndW1lbnR9XG4gICAqL1xuXG4gIGNob2ljZXModmFsdWVzKSB7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdmFsdWVzLnNsaWNlKCk7XG4gICAgdGhpcy5wYXJzZUFyZyA9IChhcmcsIHByZXZpb3VzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXJnQ2hvaWNlcy5pbmNsdWRlcyhhcmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICBgQWxsb3dlZCBjaG9pY2VzIGFyZSAke3RoaXMuYXJnQ2hvaWNlcy5qb2luKCcsICcpfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFyaWFkaWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RWYWx1ZShhcmcsIHByZXZpb3VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFyZ3VtZW50IHJlcXVpcmVkLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJndW1lbnR9XG4gICAqL1xuICBhcmdSZXF1aXJlZCgpIHtcbiAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBNYWtlIGFyZ3VtZW50IG9wdGlvbmFsLlxuICAgKlxuICAgKiBAcmV0dXJucyB7QXJndW1lbnR9XG4gICAqL1xuICBhcmdPcHRpb25hbCgpIHtcbiAgICB0aGlzLnJlcXVpcmVkID0gZmFsc2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuLyoqXG4gKiBUYWtlcyBhbiBhcmd1bWVudCBhbmQgcmV0dXJucyBpdHMgaHVtYW4gcmVhZGFibGUgZXF1aXZhbGVudCBmb3IgaGVscCB1c2FnZS5cbiAqXG4gKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmdcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKSB7XG4gIGNvbnN0IG5hbWVPdXRwdXQgPSBhcmcubmFtZSgpICsgKGFyZy52YXJpYWRpYyA9PT0gdHJ1ZSA/ICcuLi4nIDogJycpO1xuXG4gIHJldHVybiBhcmcucmVxdWlyZWQgPyAnPCcgKyBuYW1lT3V0cHV0ICsgJz4nIDogJ1snICsgbmFtZU91dHB1dCArICddJztcbn1cblxuZXhwb3J0cy5Bcmd1bWVudCA9IEFyZ3VtZW50O1xuZXhwb3J0cy5odW1hblJlYWRhYmxlQXJnTmFtZSA9IGh1bWFuUmVhZGFibGVBcmdOYW1lO1xuIiwgImNvbnN0IHsgaHVtYW5SZWFkYWJsZUFyZ05hbWUgfSA9IHJlcXVpcmUoJy4vYXJndW1lbnQuanMnKTtcblxuLyoqXG4gKiBUeXBlU2NyaXB0IGltcG9ydCB0eXBlcyBmb3IgSlNEb2MsIHVzZWQgYnkgVmlzdWFsIFN0dWRpbyBDb2RlIEludGVsbGlTZW5zZSBhbmQgYG5wbSBydW4gdHlwZXNjcmlwdC1jaGVja0pTYFxuICogaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svanNkb2Mtc3VwcG9ydGVkLXR5cGVzLmh0bWwjaW1wb3J0LXR5cGVzXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vYXJndW1lbnQuanNcIikuQXJndW1lbnQgfSBBcmd1bWVudFxuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL2NvbW1hbmQuanNcIikuQ29tbWFuZCB9IENvbW1hbmRcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9vcHRpb24uanNcIikuT3B0aW9uIH0gT3B0aW9uXG4gKi9cblxuLy8gQWx0aG91Z2ggdGhpcyBpcyBhIGNsYXNzLCBtZXRob2RzIGFyZSBzdGF0aWMgaW4gc3R5bGUgdG8gYWxsb3cgb3ZlcnJpZGUgdXNpbmcgc3ViY2xhc3Mgb3IganVzdCBmdW5jdGlvbnMuXG5jbGFzcyBIZWxwIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWxwV2lkdGggPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5taW5XaWR0aFRvV3JhcCA9IDQwO1xuICAgIHRoaXMuc29ydFN1YmNvbW1hbmRzID0gZmFsc2U7XG4gICAgdGhpcy5zb3J0T3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuc2hvd0dsb2JhbE9wdGlvbnMgPSBmYWxzZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBwcmVwYXJlQ29udGV4dCBpcyBjYWxsZWQgYnkgQ29tbWFuZGVyIGFmdGVyIGFwcGx5aW5nIG92ZXJyaWRlcyBmcm9tIGBDb21tYW5kLmNvbmZpZ3VyZUhlbHAoKWBcbiAgICogYW5kIGp1c3QgYmVmb3JlIGNhbGxpbmcgYGZvcm1hdEhlbHAoKWAuXG4gICAqXG4gICAqIENvbW1hbmRlciBqdXN0IHVzZXMgdGhlIGhlbHBXaWR0aCBhbmQgdGhlIHJlc3QgaXMgcHJvdmlkZWQgZm9yIG9wdGlvbmFsIHVzZSBieSBtb3JlIGNvbXBsZXggc3ViY2xhc3Nlcy5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yPzogYm9vbGVhbiwgaGVscFdpZHRoPzogbnVtYmVyLCBvdXRwdXRIYXNDb2xvcnM/OiBib29sZWFuIH19IGNvbnRleHRPcHRpb25zXG4gICAqL1xuICBwcmVwYXJlQ29udGV4dChjb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMuaGVscFdpZHRoID0gdGhpcy5oZWxwV2lkdGggPz8gY29udGV4dE9wdGlvbnMuaGVscFdpZHRoID8/IDgwO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgdmlzaWJsZSBzdWJjb21tYW5kcy4gSW5jbHVkZXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGltcGxpY2l0IGhlbHAgY29tbWFuZCwgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7Q29tbWFuZFtdfVxuICAgKi9cblxuICB2aXNpYmxlQ29tbWFuZHMoY21kKSB7XG4gICAgY29uc3QgdmlzaWJsZUNvbW1hbmRzID0gY21kLmNvbW1hbmRzLmZpbHRlcigoY21kKSA9PiAhY21kLl9oaWRkZW4pO1xuICAgIGNvbnN0IGhlbHBDb21tYW5kID0gY21kLl9nZXRIZWxwQ29tbWFuZCgpO1xuICAgIGlmIChoZWxwQ29tbWFuZCAmJiAhaGVscENvbW1hbmQuX2hpZGRlbikge1xuICAgICAgdmlzaWJsZUNvbW1hbmRzLnB1c2goaGVscENvbW1hbmQpO1xuICAgIH1cbiAgICBpZiAodGhpcy5zb3J0U3ViY29tbWFuZHMpIHtcbiAgICAgIHZpc2libGVDb21tYW5kcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2Ugb3ZlcmxvYWRlZCByZXR1cm4gdHlwZVxuICAgICAgICByZXR1cm4gYS5uYW1lKCkubG9jYWxlQ29tcGFyZShiLm5hbWUoKSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHZpc2libGVDb21tYW5kcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21wYXJlIG9wdGlvbnMgZm9yIHNvcnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBhXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBiXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBjb21wYXJlT3B0aW9ucyhhLCBiKSB7XG4gICAgY29uc3QgZ2V0U29ydEtleSA9IChvcHRpb24pID0+IHtcbiAgICAgIC8vIFdZU0lXWUcgZm9yIG9yZGVyIGRpc3BsYXllZCBpbiBoZWxwLiBTaG9ydCB1c2VkIGZvciBjb21wYXJpc29uIGlmIHByZXNlbnQuIE5vIHNwZWNpYWwgaGFuZGxpbmcgZm9yIG5lZ2F0ZWQuXG4gICAgICByZXR1cm4gb3B0aW9uLnNob3J0XG4gICAgICAgID8gb3B0aW9uLnNob3J0LnJlcGxhY2UoL14tLywgJycpXG4gICAgICAgIDogb3B0aW9uLmxvbmcucmVwbGFjZSgvXi0tLywgJycpO1xuICAgIH07XG4gICAgcmV0dXJuIGdldFNvcnRLZXkoYSkubG9jYWxlQ29tcGFyZShnZXRTb3J0S2V5KGIpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgb3B0aW9ucy4gSW5jbHVkZXMgYSBwbGFjZWhvbGRlciBmb3IgdGhlIGltcGxpY2l0IGhlbHAgb3B0aW9uLCBpZiB0aGVyZSBpcyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtPcHRpb25bXX1cbiAgICovXG5cbiAgdmlzaWJsZU9wdGlvbnMoY21kKSB7XG4gICAgY29uc3QgdmlzaWJsZU9wdGlvbnMgPSBjbWQub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4gIW9wdGlvbi5oaWRkZW4pO1xuICAgIC8vIEJ1aWx0LWluIGhlbHAgb3B0aW9uLlxuICAgIGNvbnN0IGhlbHBPcHRpb24gPSBjbWQuX2dldEhlbHBPcHRpb24oKTtcbiAgICBpZiAoaGVscE9wdGlvbiAmJiAhaGVscE9wdGlvbi5oaWRkZW4pIHtcbiAgICAgIC8vIEF1dG9tYXRpY2FsbHkgaGlkZSBjb25mbGljdGluZyBmbGFncy4gQml0IGR1YmlvdXMgYnV0IGEgaGlzdG9yaWNhbCBiZWhhdmlvdXIgdGhhdCBpcyBjb252ZW5pZW50IGZvciBzaW5nbGUtY29tbWFuZCBwcm9ncmFtcy5cbiAgICAgIGNvbnN0IHJlbW92ZVNob3J0ID0gaGVscE9wdGlvbi5zaG9ydCAmJiBjbWQuX2ZpbmRPcHRpb24oaGVscE9wdGlvbi5zaG9ydCk7XG4gICAgICBjb25zdCByZW1vdmVMb25nID0gaGVscE9wdGlvbi5sb25nICYmIGNtZC5fZmluZE9wdGlvbihoZWxwT3B0aW9uLmxvbmcpO1xuICAgICAgaWYgKCFyZW1vdmVTaG9ydCAmJiAhcmVtb3ZlTG9uZykge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKGhlbHBPcHRpb24pOyAvLyBubyBjaGFuZ2VzIG5lZWRlZFxuICAgICAgfSBlbHNlIGlmIChoZWxwT3B0aW9uLmxvbmcgJiYgIXJlbW92ZUxvbmcpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChcbiAgICAgICAgICBjbWQuY3JlYXRlT3B0aW9uKGhlbHBPcHRpb24ubG9uZywgaGVscE9wdGlvbi5kZXNjcmlwdGlvbiksXG4gICAgICAgICk7XG4gICAgICB9IGVsc2UgaWYgKGhlbHBPcHRpb24uc2hvcnQgJiYgIXJlbW92ZVNob3J0KSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goXG4gICAgICAgICAgY21kLmNyZWF0ZU9wdGlvbihoZWxwT3B0aW9uLnNob3J0LCBoZWxwT3B0aW9uLmRlc2NyaXB0aW9uKSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydE9wdGlvbnMpIHtcbiAgICAgIHZpc2libGVPcHRpb25zLnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlT3B0aW9ucztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgZ2xvYmFsIG9wdGlvbnMuIChOb3QgaW5jbHVkaW5nIGhlbHAuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7T3B0aW9uW119XG4gICAqL1xuXG4gIHZpc2libGVHbG9iYWxPcHRpb25zKGNtZCkge1xuICAgIGlmICghdGhpcy5zaG93R2xvYmFsT3B0aW9ucykgcmV0dXJuIFtdO1xuXG4gICAgY29uc3QgZ2xvYmFsT3B0aW9ucyA9IFtdO1xuICAgIGZvciAoXG4gICAgICBsZXQgYW5jZXN0b3JDbWQgPSBjbWQucGFyZW50O1xuICAgICAgYW5jZXN0b3JDbWQ7XG4gICAgICBhbmNlc3RvckNtZCA9IGFuY2VzdG9yQ21kLnBhcmVudFxuICAgICkge1xuICAgICAgY29uc3QgdmlzaWJsZU9wdGlvbnMgPSBhbmNlc3RvckNtZC5vcHRpb25zLmZpbHRlcihcbiAgICAgICAgKG9wdGlvbikgPT4gIW9wdGlvbi5oaWRkZW4sXG4gICAgICApO1xuICAgICAgZ2xvYmFsT3B0aW9ucy5wdXNoKC4uLnZpc2libGVPcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydE9wdGlvbnMpIHtcbiAgICAgIGdsb2JhbE9wdGlvbnMuc29ydCh0aGlzLmNvbXBhcmVPcHRpb25zKTtcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbE9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSBhcmd1bWVudHMgaWYgYW55IGhhdmUgYSBkZXNjcmlwdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge0FyZ3VtZW50W119XG4gICAqL1xuXG4gIHZpc2libGVBcmd1bWVudHMoY21kKSB7XG4gICAgLy8gU2lkZSBlZmZlY3QhIEFwcGx5IHRoZSBsZWdhY3kgZGVzY3JpcHRpb25zIGJlZm9yZSB0aGUgYXJndW1lbnRzIGFyZSBkaXNwbGF5ZWQuXG4gICAgaWYgKGNtZC5fYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgICBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChhcmd1bWVudCkgPT4ge1xuICAgICAgICBhcmd1bWVudC5kZXNjcmlwdGlvbiA9XG4gICAgICAgICAgYXJndW1lbnQuZGVzY3JpcHRpb24gfHwgY21kLl9hcmdzRGVzY3JpcHRpb25bYXJndW1lbnQubmFtZSgpXSB8fCAnJztcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGFyZSBhbnkgYXJndW1lbnRzIHdpdGggYSBkZXNjcmlwdGlvbiB0aGVuIHJldHVybiBhbGwgdGhlIGFyZ3VtZW50cy5cbiAgICBpZiAoY21kLnJlZ2lzdGVyZWRBcmd1bWVudHMuZmluZCgoYXJndW1lbnQpID0+IGFyZ3VtZW50LmRlc2NyaXB0aW9uKSkge1xuICAgICAgcmV0dXJuIGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzO1xuICAgIH1cbiAgICByZXR1cm4gW107XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBjb21tYW5kIHRlcm0gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgc3ViY29tbWFuZFRlcm0oY21kKSB7XG4gICAgLy8gTGVnYWN5LiBJZ25vcmVzIGN1c3RvbSB1c2FnZSBzdHJpbmcsIGFuZCBuZXN0ZWQgY29tbWFuZHMuXG4gICAgY29uc3QgYXJncyA9IGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzXG4gICAgICAubWFwKChhcmcpID0+IGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZykpXG4gICAgICAuam9pbignICcpO1xuICAgIHJldHVybiAoXG4gICAgICBjbWQuX25hbWUgK1xuICAgICAgKGNtZC5fYWxpYXNlc1swXSA/ICd8JyArIGNtZC5fYWxpYXNlc1swXSA6ICcnKSArXG4gICAgICAoY21kLm9wdGlvbnMubGVuZ3RoID8gJyBbb3B0aW9uc10nIDogJycpICsgLy8gc2ltcGxpc3RpYyBjaGVjayBmb3Igbm9uLWhlbHAgb3B0aW9uXG4gICAgICAoYXJncyA/ICcgJyArIGFyZ3MgOiAnJylcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgb3B0aW9uIHRlcm0gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIG9wdGlvblRlcm0ob3B0aW9uKSB7XG4gICAgcmV0dXJuIG9wdGlvbi5mbGFncztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFyZ3VtZW50IHRlcm0gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBhcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGFyZ3VtZW50VGVybShhcmd1bWVudCkge1xuICAgIHJldHVybiBhcmd1bWVudC5uYW1lKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IGNvbW1hbmQgdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RTdWJjb21tYW5kVGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZUNvbW1hbmRzKGNtZCkucmVkdWNlKChtYXgsIGNvbW1hbmQpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kVGVybShoZWxwZXIuc3ViY29tbWFuZFRlcm0oY29tbWFuZCkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3Qgb3B0aW9uIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0T3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZU9wdGlvbnMoY21kKS5yZWR1Y2UoKG1heCwgb3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBnbG9iYWwgb3B0aW9uIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0R2xvYmFsT3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKS5yZWR1Y2UoKG1heCwgb3B0aW9uKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBhcmd1bWVudCB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdEFyZ3VtZW50VGVybUxlbmd0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBoZWxwZXIudmlzaWJsZUFyZ3VtZW50cyhjbWQpLnJlZHVjZSgobWF4LCBhcmd1bWVudCkgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKFxuICAgICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50VGVybShoZWxwZXIuYXJndW1lbnRUZXJtKGFyZ3VtZW50KSksXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH0sIDApO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbWFuZCB1c2FnZSB0byBiZSBkaXNwbGF5ZWQgYXQgdGhlIHRvcCBvZiB0aGUgYnVpbHQtaW4gaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgY29tbWFuZFVzYWdlKGNtZCkge1xuICAgIC8vIFVzYWdlXG4gICAgbGV0IGNtZE5hbWUgPSBjbWQuX25hbWU7XG4gICAgaWYgKGNtZC5fYWxpYXNlc1swXSkge1xuICAgICAgY21kTmFtZSA9IGNtZE5hbWUgKyAnfCcgKyBjbWQuX2FsaWFzZXNbMF07XG4gICAgfVxuICAgIGxldCBhbmNlc3RvckNtZE5hbWVzID0gJyc7XG4gICAgZm9yIChcbiAgICAgIGxldCBhbmNlc3RvckNtZCA9IGNtZC5wYXJlbnQ7XG4gICAgICBhbmNlc3RvckNtZDtcbiAgICAgIGFuY2VzdG9yQ21kID0gYW5jZXN0b3JDbWQucGFyZW50XG4gICAgKSB7XG4gICAgICBhbmNlc3RvckNtZE5hbWVzID0gYW5jZXN0b3JDbWQubmFtZSgpICsgJyAnICsgYW5jZXN0b3JDbWROYW1lcztcbiAgICB9XG4gICAgcmV0dXJuIGFuY2VzdG9yQ21kTmFtZXMgKyBjbWROYW1lICsgJyAnICsgY21kLnVzYWdlKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGNvbW1hbmREZXNjcmlwdGlvbihjbWQpIHtcbiAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICByZXR1cm4gY21kLmRlc2NyaXB0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBzdWJjb21tYW5kIHN1bW1hcnkgdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBzdWJjb21tYW5kcy5cbiAgICogKEZhbGxiYWNrIHRvIGRlc2NyaXB0aW9uIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4pXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIHN1YmNvbW1hbmREZXNjcmlwdGlvbihjbWQpIHtcbiAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICByZXR1cm4gY21kLnN1bW1hcnkoKSB8fCBjbWQuZGVzY3JpcHRpb24oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbiBkZXNjcmlwdGlvbiB0byBzaG93IGluIHRoZSBsaXN0IG9mIG9wdGlvbnMuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBvcHRpb25EZXNjcmlwdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCBleHRyYUluZm8gPSBbXTtcblxuICAgIGlmIChvcHRpb24uYXJnQ2hvaWNlcykge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIC8vIHVzZSBzdHJpbmdpZnkgdG8gbWF0Y2ggdGhlIGRpc3BsYXkgb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgYGNob2ljZXM6ICR7b3B0aW9uLmFyZ0Nob2ljZXMubWFwKChjaG9pY2UpID0+IEpTT04uc3RyaW5naWZ5KGNob2ljZSkpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChvcHRpb24uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIGRlZmF1bHQgZm9yIGJvb2xlYW4gYW5kIG5lZ2F0ZWQgbW9yZSBmb3IgcHJvZ3JhbW1lciB0aGFuIGVuZCB1c2VyLFxuICAgICAgLy8gYnV0IHNob3cgdHJ1ZS9mYWxzZSBmb3IgYm9vbGVhbiBvcHRpb24gYXMgbWF5IGJlIGZvciBoYW5kLXJvbGxlZCBlbnYgb3IgY29uZmlnIHByb2Nlc3NpbmcuXG4gICAgICBjb25zdCBzaG93RGVmYXVsdCA9XG4gICAgICAgIG9wdGlvbi5yZXF1aXJlZCB8fFxuICAgICAgICBvcHRpb24ub3B0aW9uYWwgfHxcbiAgICAgICAgKG9wdGlvbi5pc0Jvb2xlYW4oKSAmJiB0eXBlb2Ygb3B0aW9uLmRlZmF1bHRWYWx1ZSA9PT0gJ2Jvb2xlYW4nKTtcbiAgICAgIGlmIChzaG93RGVmYXVsdCkge1xuICAgICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgICBgZGVmYXVsdDogJHtvcHRpb24uZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gfHwgSlNPTi5zdHJpbmdpZnkob3B0aW9uLmRlZmF1bHRWYWx1ZSl9YCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gcHJlc2V0IGZvciBib29sZWFuIGFuZCBuZWdhdGVkIGFyZSBtb3JlIGZvciBwcm9ncmFtbWVyIHRoYW4gZW5kIHVzZXJcbiAgICBpZiAob3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkICYmIG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgZXh0cmFJbmZvLnB1c2goYHByZXNldDogJHtKU09OLnN0cmluZ2lmeShvcHRpb24ucHJlc2V0QXJnKX1gKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbi5lbnZWYXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0cmFJbmZvLnB1c2goYGVudjogJHtvcHRpb24uZW52VmFyfWApO1xuICAgIH1cbiAgICBpZiAoZXh0cmFJbmZvLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGV4dHJhRGVzY3JpcHRpb24gPSBgKCR7ZXh0cmFJbmZvLmpvaW4oJywgJyl9KWA7XG4gICAgICBpZiAob3B0aW9uLmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBgJHtvcHRpb24uZGVzY3JpcHRpb259ICR7ZXh0cmFEZXNjcmlwdGlvbn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhRGVzY3JpcHRpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG9wdGlvbi5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGFyZ3VtZW50IGRlc2NyaXB0aW9uIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGFyZ3VtZW50RGVzY3JpcHRpb24oYXJndW1lbnQpIHtcbiAgICBjb25zdCBleHRyYUluZm8gPSBbXTtcbiAgICBpZiAoYXJndW1lbnQuYXJnQ2hvaWNlcykge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIC8vIHVzZSBzdHJpbmdpZnkgdG8gbWF0Y2ggdGhlIGRpc3BsYXkgb2YgdGhlIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgYGNob2ljZXM6ICR7YXJndW1lbnQuYXJnQ2hvaWNlcy5tYXAoKGNob2ljZSkgPT4gSlNPTi5zdHJpbmdpZnkoY2hvaWNlKSkuam9pbignLCAnKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBleHRyYUluZm8ucHVzaChcbiAgICAgICAgYGRlZmF1bHQ6ICR7YXJndW1lbnQuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gfHwgSlNPTi5zdHJpbmdpZnkoYXJndW1lbnQuZGVmYXVsdFZhbHVlKX1gLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKGV4dHJhSW5mby5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHRyYURlc2NyaXB0aW9uID0gYCgke2V4dHJhSW5mby5qb2luKCcsICcpfSlgO1xuICAgICAgaWYgKGFyZ3VtZW50LmRlc2NyaXB0aW9uKSB7XG4gICAgICAgIHJldHVybiBgJHthcmd1bWVudC5kZXNjcmlwdGlvbn0gJHtleHRyYURlc2NyaXB0aW9ufWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gZXh0cmFEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIGFyZ3VtZW50LmRlc2NyaXB0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCBhIGxpc3Qgb2YgaXRlbXMsIGdpdmVuIGEgaGVhZGluZyBhbmQgYW4gYXJyYXkgb2YgZm9ybWF0dGVkIGl0ZW1zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVhZGluZ1xuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBpdGVtc1xuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyBzdHJpbmdbXVxuICAgKi9cbiAgZm9ybWF0SXRlbUxpc3QoaGVhZGluZywgaXRlbXMsIGhlbHBlcikge1xuICAgIGlmIChpdGVtcy5sZW5ndGggPT09IDApIHJldHVybiBbXTtcblxuICAgIHJldHVybiBbaGVscGVyLnN0eWxlVGl0bGUoaGVhZGluZyksIC4uLml0ZW1zLCAnJ107XG4gIH1cblxuICAvKipcbiAgICogR3JvdXAgaXRlbXMgYnkgdGhlaXIgaGVscCBncm91cCBoZWFkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmRbXSB8IE9wdGlvbltdfSB1bnNvcnRlZEl0ZW1zXG4gICAqIEBwYXJhbSB7Q29tbWFuZFtdIHwgT3B0aW9uW119IHZpc2libGVJdGVtc1xuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBnZXRHcm91cFxuICAgKiBAcmV0dXJucyB7TWFwPHN0cmluZywgQ29tbWFuZFtdIHwgT3B0aW9uW10+fVxuICAgKi9cbiAgZ3JvdXBJdGVtcyh1bnNvcnRlZEl0ZW1zLCB2aXNpYmxlSXRlbXMsIGdldEdyb3VwKSB7XG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xuICAgIC8vIEFkZCBncm91cHMgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiB1bnNvcnRlZEl0ZW1zLlxuICAgIHVuc29ydGVkSXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgY29uc3QgZ3JvdXAgPSBnZXRHcm91cChpdGVtKTtcbiAgICAgIGlmICghcmVzdWx0Lmhhcyhncm91cCkpIHJlc3VsdC5zZXQoZ3JvdXAsIFtdKTtcbiAgICB9KTtcbiAgICAvLyBBZGQgaXRlbXMgaW4gb3JkZXIgb2YgYXBwZWFyYW5jZSBpbiB2aXNpYmxlSXRlbXMuXG4gICAgdmlzaWJsZUl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0R3JvdXAoaXRlbSk7XG4gICAgICBpZiAoIXJlc3VsdC5oYXMoZ3JvdXApKSB7XG4gICAgICAgIHJlc3VsdC5zZXQoZ3JvdXAsIFtdKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5nZXQoZ3JvdXApLnB1c2goaXRlbSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB0aGUgYnVpbHQtaW4gaGVscCB0ZXh0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBmb3JtYXRIZWxwKGNtZCwgaGVscGVyKSB7XG4gICAgY29uc3QgdGVybVdpZHRoID0gaGVscGVyLnBhZFdpZHRoKGNtZCwgaGVscGVyKTtcbiAgICBjb25zdCBoZWxwV2lkdGggPSBoZWxwZXIuaGVscFdpZHRoID8/IDgwOyAvLyBpbiBjYXNlIHByZXBhcmVDb250ZXh0KCkgd2FzIG5vdCBjYWxsZWRcblxuICAgIGZ1bmN0aW9uIGNhbGxGb3JtYXRJdGVtKHRlcm0sIGRlc2NyaXB0aW9uKSB7XG4gICAgICByZXR1cm4gaGVscGVyLmZvcm1hdEl0ZW0odGVybSwgdGVybVdpZHRoLCBkZXNjcmlwdGlvbiwgaGVscGVyKTtcbiAgICB9XG5cbiAgICAvLyBVc2FnZVxuICAgIGxldCBvdXRwdXQgPSBbXG4gICAgICBgJHtoZWxwZXIuc3R5bGVUaXRsZSgnVXNhZ2U6Jyl9ICR7aGVscGVyLnN0eWxlVXNhZ2UoaGVscGVyLmNvbW1hbmRVc2FnZShjbWQpKX1gLFxuICAgICAgJycsXG4gICAgXTtcblxuICAgIC8vIERlc2NyaXB0aW9uXG4gICAgY29uc3QgY29tbWFuZERlc2NyaXB0aW9uID0gaGVscGVyLmNvbW1hbmREZXNjcmlwdGlvbihjbWQpO1xuICAgIGlmIChjb21tYW5kRGVzY3JpcHRpb24ubGVuZ3RoID4gMCkge1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChbXG4gICAgICAgIGhlbHBlci5ib3hXcmFwKFxuICAgICAgICAgIGhlbHBlci5zdHlsZUNvbW1hbmREZXNjcmlwdGlvbihjb21tYW5kRGVzY3JpcHRpb24pLFxuICAgICAgICAgIGhlbHBXaWR0aCxcbiAgICAgICAgKSxcbiAgICAgICAgJycsXG4gICAgICBdKTtcbiAgICB9XG5cbiAgICAvLyBBcmd1bWVudHNcbiAgICBjb25zdCBhcmd1bWVudExpc3QgPSBoZWxwZXIudmlzaWJsZUFyZ3VtZW50cyhjbWQpLm1hcCgoYXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgaGVscGVyLnN0eWxlQXJndW1lbnRUZXJtKGhlbHBlci5hcmd1bWVudFRlcm0oYXJndW1lbnQpKSxcbiAgICAgICAgaGVscGVyLnN0eWxlQXJndW1lbnREZXNjcmlwdGlvbihoZWxwZXIuYXJndW1lbnREZXNjcmlwdGlvbihhcmd1bWVudCkpLFxuICAgICAgKTtcbiAgICB9KTtcbiAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgdGhpcy5mb3JtYXRJdGVtTGlzdCgnQXJndW1lbnRzOicsIGFyZ3VtZW50TGlzdCwgaGVscGVyKSxcbiAgICApO1xuXG4gICAgLy8gT3B0aW9uc1xuICAgIGNvbnN0IG9wdGlvbkdyb3VwcyA9IHRoaXMuZ3JvdXBJdGVtcyhcbiAgICAgIGNtZC5vcHRpb25zLFxuICAgICAgaGVscGVyLnZpc2libGVPcHRpb25zKGNtZCksXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uaGVscEdyb3VwSGVhZGluZyA/PyAnT3B0aW9uczonLFxuICAgICk7XG4gICAgb3B0aW9uR3JvdXBzLmZvckVhY2goKG9wdGlvbnMsIGdyb3VwKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25MaXN0ID0gb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uVGVybShoZWxwZXIub3B0aW9uVGVybShvcHRpb24pKSxcbiAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25EZXNjcmlwdGlvbihoZWxwZXIub3B0aW9uRGVzY3JpcHRpb24ob3B0aW9uKSksXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQodGhpcy5mb3JtYXRJdGVtTGlzdChncm91cCwgb3B0aW9uTGlzdCwgaGVscGVyKSk7XG4gICAgfSk7XG5cbiAgICBpZiAoaGVscGVyLnNob3dHbG9iYWxPcHRpb25zKSB7XG4gICAgICBjb25zdCBnbG9iYWxPcHRpb25MaXN0ID0gaGVscGVyXG4gICAgICAgIC52aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4ge1xuICAgICAgICAgIHJldHVybiBjYWxsRm9ybWF0SXRlbShcbiAgICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSksXG4gICAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25EZXNjcmlwdGlvbihoZWxwZXIub3B0aW9uRGVzY3JpcHRpb24ob3B0aW9uKSksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSk7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KFxuICAgICAgICB0aGlzLmZvcm1hdEl0ZW1MaXN0KCdHbG9iYWwgT3B0aW9uczonLCBnbG9iYWxPcHRpb25MaXN0LCBoZWxwZXIpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb21tYW5kc1xuICAgIGNvbnN0IGNvbW1hbmRHcm91cHMgPSB0aGlzLmdyb3VwSXRlbXMoXG4gICAgICBjbWQuY29tbWFuZHMsXG4gICAgICBoZWxwZXIudmlzaWJsZUNvbW1hbmRzKGNtZCksXG4gICAgICAoc3ViKSA9PiBzdWIuaGVscEdyb3VwKCkgfHwgJ0NvbW1hbmRzOicsXG4gICAgKTtcbiAgICBjb21tYW5kR3JvdXBzLmZvckVhY2goKGNvbW1hbmRzLCBncm91cCkgPT4ge1xuICAgICAgY29uc3QgY29tbWFuZExpc3QgPSBjb21tYW5kcy5tYXAoKHN1YikgPT4ge1xuICAgICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZFRlcm0oaGVscGVyLnN1YmNvbW1hbmRUZXJtKHN1YikpLFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmREZXNjcmlwdGlvbihoZWxwZXIuc3ViY29tbWFuZERlc2NyaXB0aW9uKHN1YikpLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KHRoaXMuZm9ybWF0SXRlbUxpc3QoZ3JvdXAsIGNvbW1hbmRMaXN0LCBoZWxwZXIpKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvdXRwdXQuam9pbignXFxuJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGRpc3BsYXkgd2lkdGggb2Ygc3RyaW5nLCBpZ25vcmluZyBBTlNJIGVzY2FwZSBzZXF1ZW5jZXMuIFVzZWQgaW4gcGFkZGluZyBhbmQgd3JhcHBpbmcgY2FsY3VsYXRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuICBkaXNwbGF5V2lkdGgoc3RyKSB7XG4gICAgcmV0dXJuIHN0cmlwQ29sb3Ioc3RyKS5sZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogU3R5bGUgdGhlIHRpdGxlIGZvciBkaXNwbGF5aW5nIGluIHRoZSBoZWxwLiBDYWxsZWQgd2l0aCAnVXNhZ2U6JywgJ09wdGlvbnM6JywgZXRjLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBzdHlsZVRpdGxlKHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICBzdHlsZVVzYWdlKHN0cikge1xuICAgIC8vIFVzYWdlIGhhcyBsb3RzIG9mIHBhcnRzIHRoZSB1c2VyIG1pZ2h0IGxpa2UgdG8gY29sb3Igc2VwYXJhdGVseSEgQXNzdW1lIGRlZmF1bHQgdXNhZ2Ugc3RyaW5nIHdoaWNoIGlzIGZvcm1lZCBsaWtlOlxuICAgIC8vICAgIGNvbW1hbmQgc3ViY29tbWFuZCBbb3B0aW9uc10gW2NvbW1hbmRdIDxmb28+IFtiYXJdXG4gICAgcmV0dXJuIHN0clxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbb3B0aW9uc10nKSByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkID09PSAnW2NvbW1hbmRdJykgcmV0dXJuIHRoaXMuc3R5bGVTdWJjb21tYW5kVGV4dCh3b3JkKTtcbiAgICAgICAgaWYgKHdvcmRbMF0gPT09ICdbJyB8fCB3b3JkWzBdID09PSAnPCcpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVBcmd1bWVudFRleHQod29yZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlQ29tbWFuZFRleHQod29yZCk7IC8vIFJlc3RyaWN0IHRvIGluaXRpYWwgd29yZHM/XG4gICAgICB9KVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuICBzdHlsZUNvbW1hbmREZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlT3B0aW9uRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmREZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlQXJndW1lbnREZXNjcmlwdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVPcHRpb25UZXJtKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlT3B0aW9uVGV4dChzdHIpO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZFRlcm0oc3RyKSB7XG4gICAgLy8gVGhpcyBpcyB2ZXJ5IGxpa2UgdXNhZ2Ugd2l0aCBsb3RzIG9mIHBhcnRzISBBc3N1bWUgZGVmYXVsdCBzdHJpbmcgd2hpY2ggaXMgZm9ybWVkIGxpa2U6XG4gICAgLy8gICAgc3ViY29tbWFuZCBbb3B0aW9uc10gPGZvbz4gW2Jhcl1cbiAgICByZXR1cm4gc3RyXG4gICAgICAuc3BsaXQoJyAnKVxuICAgICAgLm1hcCgod29yZCkgPT4ge1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tvcHRpb25zXScpIHJldHVybiB0aGlzLnN0eWxlT3B0aW9uVGV4dCh3b3JkKTtcbiAgICAgICAgaWYgKHdvcmRbMF0gPT09ICdbJyB8fCB3b3JkWzBdID09PSAnPCcpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuc3R5bGVBcmd1bWVudFRleHQod29yZCk7XG4gICAgICAgIHJldHVybiB0aGlzLnN0eWxlU3ViY29tbWFuZFRleHQod29yZCk7IC8vIFJlc3RyaWN0IHRvIGluaXRpYWwgd29yZHM/XG4gICAgICB9KVxuICAgICAgLmpvaW4oJyAnKTtcbiAgfVxuICBzdHlsZUFyZ3VtZW50VGVybShzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZUFyZ3VtZW50VGV4dChzdHIpO1xuICB9XG4gIHN0eWxlT3B0aW9uVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlQXJndW1lbnRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlQ29tbWFuZFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGUgdGhlIHBhZCB3aWR0aCBmcm9tIHRoZSBtYXhpbXVtIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBwYWRXaWR0aChjbWQsIGhlbHBlcikge1xuICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgIGhlbHBlci5sb25nZXN0T3B0aW9uVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdEdsb2JhbE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RTdWJjb21tYW5kVGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgICBoZWxwZXIubG9uZ2VzdEFyZ3VtZW50VGVybUxlbmd0aChjbWQsIGhlbHBlciksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlY3QgbWFudWFsbHkgd3JhcHBlZCBhbmQgaW5kZW50ZWQgc3RyaW5ncyBieSBjaGVja2luZyBmb3IgbGluZSBicmVhayBmb2xsb3dlZCBieSB3aGl0ZXNwYWNlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgcHJlZm9ybWF0dGVkKHN0cikge1xuICAgIHJldHVybiAvXFxuW15cXFNcXHJcXG5dLy50ZXN0KHN0cik7XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBcIml0ZW1cIiwgd2hpY2ggY29uc2lzdHMgb2YgYSB0ZXJtIGFuZCBkZXNjcmlwdGlvbi4gUGFkIHRoZSB0ZXJtIGFuZCB3cmFwIHRoZSBkZXNjcmlwdGlvbiwgaW5kZW50aW5nIHRoZSBmb2xsb3dpbmcgbGluZXMuXG4gICAqXG4gICAqIFNvIFwiVFRUXCIsIDUsIFwiREREIEREREQgREQgREREXCIgbWlnaHQgYmUgZm9ybWF0dGVkIGZvciB0aGlzLmhlbHBXaWR0aD0xNyBsaWtlIHNvOlxuICAgKiAgIFRUVCAgREREIERERERcbiAgICogICAgICAgIEREIERERFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdGVybVxuICAgKiBAcGFyYW0ge251bWJlcn0gdGVybVdpZHRoXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBkZXNjcmlwdGlvblxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgZm9ybWF0SXRlbSh0ZXJtLCB0ZXJtV2lkdGgsIGRlc2NyaXB0aW9uLCBoZWxwZXIpIHtcbiAgICBjb25zdCBpdGVtSW5kZW50ID0gMjtcbiAgICBjb25zdCBpdGVtSW5kZW50U3RyID0gJyAnLnJlcGVhdChpdGVtSW5kZW50KTtcbiAgICBpZiAoIWRlc2NyaXB0aW9uKSByZXR1cm4gaXRlbUluZGVudFN0ciArIHRlcm07XG5cbiAgICAvLyBQYWQgdGhlIHRlcm0gb3V0IHRvIGEgY29uc2lzdGVudCB3aWR0aCwgc28gZGVzY3JpcHRpb25zIGFyZSBhbGlnbmVkLlxuICAgIGNvbnN0IHBhZGRlZFRlcm0gPSB0ZXJtLnBhZEVuZChcbiAgICAgIHRlcm1XaWR0aCArIHRlcm0ubGVuZ3RoIC0gaGVscGVyLmRpc3BsYXlXaWR0aCh0ZXJtKSxcbiAgICApO1xuXG4gICAgLy8gRm9ybWF0IHRoZSBkZXNjcmlwdGlvbi5cbiAgICBjb25zdCBzcGFjZXJXaWR0aCA9IDI7IC8vIGJldHdlZW4gdGVybSBhbmQgZGVzY3JpcHRpb25cbiAgICBjb25zdCBoZWxwV2lkdGggPSB0aGlzLmhlbHBXaWR0aCA/PyA4MDsgLy8gaW4gY2FzZSBwcmVwYXJlQ29udGV4dCgpIHdhcyBub3QgY2FsbGVkXG4gICAgY29uc3QgcmVtYWluaW5nV2lkdGggPSBoZWxwV2lkdGggLSB0ZXJtV2lkdGggLSBzcGFjZXJXaWR0aCAtIGl0ZW1JbmRlbnQ7XG4gICAgbGV0IGZvcm1hdHRlZERlc2NyaXB0aW9uO1xuICAgIGlmIChcbiAgICAgIHJlbWFpbmluZ1dpZHRoIDwgdGhpcy5taW5XaWR0aFRvV3JhcCB8fFxuICAgICAgaGVscGVyLnByZWZvcm1hdHRlZChkZXNjcmlwdGlvbilcbiAgICApIHtcbiAgICAgIGZvcm1hdHRlZERlc2NyaXB0aW9uID0gZGVzY3JpcHRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHdyYXBwZWREZXNjcmlwdGlvbiA9IGhlbHBlci5ib3hXcmFwKGRlc2NyaXB0aW9uLCByZW1haW5pbmdXaWR0aCk7XG4gICAgICBmb3JtYXR0ZWREZXNjcmlwdGlvbiA9IHdyYXBwZWREZXNjcmlwdGlvbi5yZXBsYWNlKFxuICAgICAgICAvXFxuL2csXG4gICAgICAgICdcXG4nICsgJyAnLnJlcGVhdCh0ZXJtV2lkdGggKyBzcGFjZXJXaWR0aCksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBhbmQgb3ZlcmFsbCBpbmRlbnQuXG4gICAgcmV0dXJuIChcbiAgICAgIGl0ZW1JbmRlbnRTdHIgK1xuICAgICAgcGFkZGVkVGVybSArXG4gICAgICAnICcucmVwZWF0KHNwYWNlcldpZHRoKSArXG4gICAgICBmb3JtYXR0ZWREZXNjcmlwdGlvbi5yZXBsYWNlKC9cXG4vZywgYFxcbiR7aXRlbUluZGVudFN0cn1gKVxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogV3JhcCBhIHN0cmluZyBhdCB3aGl0ZXNwYWNlLCBwcmVzZXJ2aW5nIGV4aXN0aW5nIGxpbmUgYnJlYWtzLlxuICAgKiBXcmFwcGluZyBpcyBza2lwcGVkIGlmIHRoZSB3aWR0aCBpcyBsZXNzIHRoYW4gYG1pbldpZHRoVG9XcmFwYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcGFyYW0ge251bWJlcn0gd2lkdGhcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGJveFdyYXAoc3RyLCB3aWR0aCkge1xuICAgIGlmICh3aWR0aCA8IHRoaXMubWluV2lkdGhUb1dyYXApIHJldHVybiBzdHI7XG5cbiAgICBjb25zdCByYXdMaW5lcyA9IHN0ci5zcGxpdCgvXFxyXFxufFxcbi8pO1xuICAgIC8vIHNwbGl0IHVwIHRleHQgYnkgd2hpdGVzcGFjZVxuICAgIGNvbnN0IGNodW5rUGF0dGVybiA9IC9bXFxzXSpbXlxcc10rL2c7XG4gICAgY29uc3Qgd3JhcHBlZExpbmVzID0gW107XG4gICAgcmF3TGluZXMuZm9yRWFjaCgobGluZSkgPT4ge1xuICAgICAgY29uc3QgY2h1bmtzID0gbGluZS5tYXRjaChjaHVua1BhdHRlcm4pO1xuICAgICAgaWYgKGNodW5rcyA9PT0gbnVsbCkge1xuICAgICAgICB3cmFwcGVkTGluZXMucHVzaCgnJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgbGV0IHN1bUNodW5rcyA9IFtjaHVua3Muc2hpZnQoKV07XG4gICAgICBsZXQgc3VtV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChzdW1DaHVua3NbMF0pO1xuICAgICAgY2h1bmtzLmZvckVhY2goKGNodW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IHZpc2libGVXaWR0aCA9IHRoaXMuZGlzcGxheVdpZHRoKGNodW5rKTtcbiAgICAgICAgLy8gQWNjdW11bGF0ZSBjaHVua3Mgd2hpbGUgdGhleSBmaXQgaW50byB3aWR0aC5cbiAgICAgICAgaWYgKHN1bVdpZHRoICsgdmlzaWJsZVdpZHRoIDw9IHdpZHRoKSB7XG4gICAgICAgICAgc3VtQ2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICAgIHN1bVdpZHRoICs9IHZpc2libGVXaWR0aDtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgd3JhcHBlZExpbmVzLnB1c2goc3VtQ2h1bmtzLmpvaW4oJycpKTtcblxuICAgICAgICBjb25zdCBuZXh0Q2h1bmsgPSBjaHVuay50cmltU3RhcnQoKTsgLy8gdHJpbSBzcGFjZSBhdCBsaW5lIGJyZWFrXG4gICAgICAgIHN1bUNodW5rcyA9IFtuZXh0Q2h1bmtdO1xuICAgICAgICBzdW1XaWR0aCA9IHRoaXMuZGlzcGxheVdpZHRoKG5leHRDaHVuayk7XG4gICAgICB9KTtcbiAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1bUNodW5rcy5qb2luKCcnKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gd3JhcHBlZExpbmVzLmpvaW4oJ1xcbicpO1xuICB9XG59XG5cbi8qKlxuICogU3RyaXAgc3R5bGUgQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZyb20gdGhlIHN0cmluZy4gSW4gcGFydGljdWxhciwgU0dSIChTZWxlY3QgR3JhcGhpYyBSZW5kaXRpb24pIGNvZGVzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKiBAcGFja2FnZVxuICovXG5cbmZ1bmN0aW9uIHN0cmlwQ29sb3Ioc3RyKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gIGNvbnN0IHNnclBhdHRlcm4gPSAvXFx4MWJcXFtcXGQqKDtcXGQqKSptL2c7XG4gIHJldHVybiBzdHIucmVwbGFjZShzZ3JQYXR0ZXJuLCAnJyk7XG59XG5cbmV4cG9ydHMuSGVscCA9IEhlbHA7XG5leHBvcnRzLnN0cmlwQ29sb3IgPSBzdHJpcENvbG9yO1xuIiwgImNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcblxuY2xhc3MgT3B0aW9uIHtcbiAgLyoqXG4gICAqIEluaXRpYWxpemUgYSBuZXcgYE9wdGlvbmAgd2l0aCB0aGUgZ2l2ZW4gYGZsYWdzYCBhbmQgYGRlc2NyaXB0aW9uYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqL1xuXG4gIGNvbnN0cnVjdG9yKGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZmxhZ3MgPSBmbGFncztcbiAgICB0aGlzLmRlc2NyaXB0aW9uID0gZGVzY3JpcHRpb24gfHwgJyc7XG5cbiAgICB0aGlzLnJlcXVpcmVkID0gZmxhZ3MuaW5jbHVkZXMoJzwnKTsgLy8gQSB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkIHdoZW4gdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQuXG4gICAgdGhpcy5vcHRpb25hbCA9IGZsYWdzLmluY2x1ZGVzKCdbJyk7IC8vIEEgdmFsdWUgaXMgb3B0aW9uYWwgd2hlbiB0aGUgb3B0aW9uIGlzIHNwZWNpZmllZC5cbiAgICAvLyB2YXJpYWRpYyB0ZXN0IGlnbm9yZXMgPHZhbHVlLC4uLj4gZXQgYWwgd2hpY2ggbWlnaHQgYmUgdXNlZCB0byBkZXNjcmliZSBjdXN0b20gc3BsaXR0aW5nIG9mIHNpbmdsZSBhcmd1bWVudFxuICAgIHRoaXMudmFyaWFkaWMgPSAvXFx3XFwuXFwuXFwuWz5cXF1dJC8udGVzdChmbGFncyk7IC8vIFRoZSBvcHRpb24gY2FuIHRha2UgbXVsdGlwbGUgdmFsdWVzLlxuICAgIHRoaXMubWFuZGF0b3J5ID0gZmFsc2U7IC8vIFRoZSBvcHRpb24gbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZywgd2hpY2ggdXN1YWxseSBtZWFucyBpdCBtdXN0IGJlIHNwZWNpZmllZCBvbiBjb21tYW5kIGxpbmUuXG4gICAgY29uc3Qgb3B0aW9uRmxhZ3MgPSBzcGxpdE9wdGlvbkZsYWdzKGZsYWdzKTtcbiAgICB0aGlzLnNob3J0ID0gb3B0aW9uRmxhZ3Muc2hvcnRGbGFnOyAvLyBNYXkgYmUgYSBzaG9ydCBmbGFnLCB1bmRlZmluZWQsIG9yIGV2ZW4gYSBsb25nIGZsYWcgKGlmIG9wdGlvbiBoYXMgdHdvIGxvbmcgZmxhZ3MpLlxuICAgIHRoaXMubG9uZyA9IG9wdGlvbkZsYWdzLmxvbmdGbGFnO1xuICAgIHRoaXMubmVnYXRlID0gZmFsc2U7XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgdGhpcy5uZWdhdGUgPSB0aGlzLmxvbmcuc3RhcnRzV2l0aCgnLS1uby0nKTtcbiAgICB9XG4gICAgdGhpcy5kZWZhdWx0VmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnByZXNldEFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmVudlZhciA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLnBhcnNlQXJnID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuaGlkZGVuID0gZmFsc2U7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuY29uZmxpY3RzV2l0aCA9IFtdO1xuICAgIHRoaXMuaW1wbGllZCA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhlbHBHcm91cEhlYWRpbmcgPSB1bmRlZmluZWQ7IC8vIHNvZnQgaW5pdGlhbGlzZWQgd2hlbiBvcHRpb24gYWRkZWQgdG8gY29tbWFuZFxuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVmYXVsdCB2YWx1ZSwgYW5kIG9wdGlvbmFsbHkgc3VwcGx5IHRoZSBkZXNjcmlwdGlvbiB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBkZWZhdWx0KHZhbHVlLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFByZXNldCB0byB1c2Ugd2hlbiBvcHRpb24gdXNlZCB3aXRob3V0IG9wdGlvbi1hcmd1bWVudCwgZXNwZWNpYWxseSBvcHRpb25hbCBidXQgYWxzbyBib29sZWFuIGFuZCBuZWdhdGVkLlxuICAgKiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgKHBhcnNlQXJnKSBpcyBjYWxsZWQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIG5ldyBPcHRpb24oJy0tY29sb3InKS5kZWZhdWx0KCdHUkVZU0NBTEUnKS5wcmVzZXQoJ1JHQicpO1xuICAgKiBuZXcgT3B0aW9uKCctLWRvbmF0ZSBbYW1vdW50XScpLnByZXNldCgnMjAnKS5hcmdQYXJzZXIocGFyc2VGbG9hdCk7XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gYXJnXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgcHJlc2V0KGFyZykge1xuICAgIHRoaXMucHJlc2V0QXJnID0gYXJnO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBvcHRpb24gbmFtZShzKSB0aGF0IGNvbmZsaWN0IHdpdGggdGhpcyBvcHRpb24uXG4gICAqIEFuIGVycm9yIHdpbGwgYmUgZGlzcGxheWVkIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIGZvdW5kIGR1cmluZyBwYXJzaW5nLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBuZXcgT3B0aW9uKCctLXJnYicpLmNvbmZsaWN0cygnY215aycpO1xuICAgKiBuZXcgT3B0aW9uKCctLWpzJykuY29uZmxpY3RzKFsndHMnLCAnanN4J10pO1xuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBzdHJpbmdbXSl9IG5hbWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgY29uZmxpY3RzKG5hbWVzKSB7XG4gICAgdGhpcy5jb25mbGljdHNXaXRoID0gdGhpcy5jb25mbGljdHNXaXRoLmNvbmNhdChuYW1lcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU3BlY2lmeSBpbXBsaWVkIG9wdGlvbiB2YWx1ZXMgZm9yIHdoZW4gdGhpcyBvcHRpb24gaXMgc2V0IGFuZCB0aGUgaW1wbGllZCBvcHRpb25zIGFyZSBub3QuXG4gICAqXG4gICAqIFRoZSBjdXN0b20gcHJvY2Vzc2luZyAocGFyc2VBcmcpIGlzIG5vdCBjYWxsZWQgb24gdGhlIGltcGxpZWQgdmFsdWVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLWxvZycsICd3cml0ZSBsb2dnaW5nIGluZm9ybWF0aW9uIHRvIGZpbGUnKSlcbiAgICogICAuYWRkT3B0aW9uKG5ldyBPcHRpb24oJy0tdHJhY2UnLCAnbG9nIGV4dHJhIGRldGFpbHMnKS5pbXBsaWVzKHsgbG9nOiAndHJhY2UudHh0JyB9KSk7XG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBpbXBsaWVkT3B0aW9uVmFsdWVzXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG4gIGltcGxpZXMoaW1wbGllZE9wdGlvblZhbHVlcykge1xuICAgIGxldCBuZXdJbXBsaWVkID0gaW1wbGllZE9wdGlvblZhbHVlcztcbiAgICBpZiAodHlwZW9mIGltcGxpZWRPcHRpb25WYWx1ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBzdHJpbmcgaXMgbm90IGRvY3VtZW50ZWQsIGJ1dCBlYXN5IG1pc3Rha2UgYW5kIHdlIGNhbiBkbyB3aGF0IHVzZXIgcHJvYmFibHkgaW50ZW5kZWQuXG4gICAgICBuZXdJbXBsaWVkID0geyBbaW1wbGllZE9wdGlvblZhbHVlc106IHRydWUgfTtcbiAgICB9XG4gICAgdGhpcy5pbXBsaWVkID0gT2JqZWN0LmFzc2lnbih0aGlzLmltcGxpZWQgfHwge30sIG5ld0ltcGxpZWQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBjaGVjayBmb3Igb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBBbiBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgaWYgd2hlbiBwcm9jZXNzZWQgdGhlIGN1cnJlbnQgb3B0aW9uIHZhbHVlIGlzXG4gICAqIHVuZGVmaW5lZCwgb3IgdGhlIHNvdXJjZSBvZiB0aGUgY3VycmVudCB2YWx1ZSBpcyAnZGVmYXVsdCcgb3IgJ2NvbmZpZycgb3IgJ2VudicuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgZW52KG5hbWUpIHtcbiAgICB0aGlzLmVudlZhciA9IG5hbWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBjdXN0b20gaGFuZGxlciBmb3IgcHJvY2Vzc2luZyBDTEkgb3B0aW9uIGFyZ3VtZW50cyBpbnRvIG9wdGlvbiB2YWx1ZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IFtmbl1cbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBhcmdQYXJzZXIoZm4pIHtcbiAgICB0aGlzLnBhcnNlQXJnID0gZm47XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogV2hldGhlciB0aGUgb3B0aW9uIGlzIG1hbmRhdG9yeSBhbmQgbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbbWFuZGF0b3J5PXRydWVdXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgbWFrZU9wdGlvbk1hbmRhdG9yeShtYW5kYXRvcnkgPSB0cnVlKSB7XG4gICAgdGhpcy5tYW5kYXRvcnkgPSAhIW1hbmRhdG9yeTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBIaWRlIG9wdGlvbiBpbiBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtoaWRlPXRydWVdXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgaGlkZUhlbHAoaGlkZSA9IHRydWUpIHtcbiAgICB0aGlzLmhpZGRlbiA9ICEhaGlkZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfY29sbGVjdFZhbHVlKHZhbHVlLCBwcmV2aW91cykge1xuICAgIGlmIChwcmV2aW91cyA9PT0gdGhpcy5kZWZhdWx0VmFsdWUgfHwgIUFycmF5LmlzQXJyYXkocHJldmlvdXMpKSB7XG4gICAgICByZXR1cm4gW3ZhbHVlXTtcbiAgICB9XG5cbiAgICBwcmV2aW91cy5wdXNoKHZhbHVlKTtcbiAgICByZXR1cm4gcHJldmlvdXM7XG4gIH1cblxuICAvKipcbiAgICogT25seSBhbGxvdyBvcHRpb24gdmFsdWUgdG8gYmUgb25lIG9mIGNob2ljZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IHZhbHVlc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGNob2ljZXModmFsdWVzKSB7XG4gICAgdGhpcy5hcmdDaG9pY2VzID0gdmFsdWVzLnNsaWNlKCk7XG4gICAgdGhpcy5wYXJzZUFyZyA9IChhcmcsIHByZXZpb3VzKSA9PiB7XG4gICAgICBpZiAoIXRoaXMuYXJnQ2hvaWNlcy5pbmNsdWRlcyhhcmcpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICAgICBgQWxsb3dlZCBjaG9pY2VzIGFyZSAke3RoaXMuYXJnQ2hvaWNlcy5qb2luKCcsICcpfS5gLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMudmFyaWFkaWMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbGxlY3RWYWx1ZShhcmcsIHByZXZpb3VzKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcmc7XG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gb3B0aW9uIG5hbWUuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgbmFtZSgpIHtcbiAgICBpZiAodGhpcy5sb25nKSB7XG4gICAgICByZXR1cm4gdGhpcy5sb25nLnJlcGxhY2UoL14tLS8sICcnKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc2hvcnQucmVwbGFjZSgvXi0vLCAnJyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG9wdGlvbiBuYW1lLCBpbiBhIGNhbWVsY2FzZSBmb3JtYXQgdGhhdCBjYW4gYmUgdXNlZFxuICAgKiBhcyBhbiBvYmplY3QgYXR0cmlidXRlIGtleS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBhdHRyaWJ1dGVOYW1lKCkge1xuICAgIGlmICh0aGlzLm5lZ2F0ZSkge1xuICAgICAgcmV0dXJuIGNhbWVsY2FzZSh0aGlzLm5hbWUoKS5yZXBsYWNlKC9ebm8tLywgJycpKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhbWVsY2FzZSh0aGlzLm5hbWUoKSk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBoZWxwIGdyb3VwIGhlYWRpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkaW5nXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG4gIGhlbHBHcm91cChoZWFkaW5nKSB7XG4gICAgdGhpcy5oZWxwR3JvdXBIZWFkaW5nID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBpZiBgYXJnYCBtYXRjaGVzIHRoZSBzaG9ydCBvciBsb25nIGZsYWcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgaXMoYXJnKSB7XG4gICAgcmV0dXJuIHRoaXMuc2hvcnQgPT09IGFyZyB8fCB0aGlzLmxvbmcgPT09IGFyZztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciBhIGJvb2xlYW4gb3B0aW9uLlxuICAgKlxuICAgKiBPcHRpb25zIGFyZSBvbmUgb2YgYm9vbGVhbiwgbmVnYXRlZCwgcmVxdWlyZWQgYXJndW1lbnQsIG9yIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcmV0dXJuIHtib29sZWFufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBpc0Jvb2xlYW4oKSB7XG4gICAgcmV0dXJuICF0aGlzLnJlcXVpcmVkICYmICF0aGlzLm9wdGlvbmFsICYmICF0aGlzLm5lZ2F0ZTtcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgY2xhc3MgaXMgdG8gbWFrZSBpdCBlYXNpZXIgdG8gd29yayB3aXRoIGR1YWwgb3B0aW9ucywgd2l0aG91dCBjaGFuZ2luZyB0aGUgZXhpc3RpbmdcbiAqIGltcGxlbWVudGF0aW9uLiBXZSBzdXBwb3J0IHNlcGFyYXRlIGR1YWwgb3B0aW9ucyBmb3Igc2VwYXJhdGUgcG9zaXRpdmUgYW5kIG5lZ2F0aXZlIG9wdGlvbnMsXG4gKiBsaWtlIGAtLWJ1aWxkYCBhbmQgYC0tbm8tYnVpbGRgLCB3aGljaCBzaGFyZSBhIHNpbmdsZSBvcHRpb24gdmFsdWUuIFRoaXMgd29ya3MgbmljZWx5IGZvciBzb21lXG4gKiB1c2UgY2FzZXMsIGJ1dCBpcyB0cmlja3kgZm9yIG90aGVycyB3aGVyZSB3ZSB3YW50IHNlcGFyYXRlIGJlaGF2aW91cnMgZGVzcGl0ZVxuICogdGhlIHNpbmdsZSBzaGFyZWQgb3B0aW9uIHZhbHVlLlxuICovXG5jbGFzcyBEdWFsT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge09wdGlvbltdfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgdGhpcy5wb3NpdGl2ZU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMgPSBuZXcgTWFwKCk7XG4gICAgdGhpcy5kdWFsT3B0aW9ucyA9IG5ldyBTZXQoKTtcbiAgICBvcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5uZWdhdGUpIHtcbiAgICAgICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMuc2V0KG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCksIG9wdGlvbik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBvc2l0aXZlT3B0aW9ucy5zZXQob3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSwgb3B0aW9uKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICB0aGlzLm5lZ2F0aXZlT3B0aW9ucy5mb3JFYWNoKCh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICBpZiAodGhpcy5wb3NpdGl2ZU9wdGlvbnMuaGFzKGtleSkpIHtcbiAgICAgICAgdGhpcy5kdWFsT3B0aW9ucy5hZGQoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaWQgdGhlIHZhbHVlIGNvbWUgZnJvbSB0aGUgb3B0aW9uLCBhbmQgbm90IGZyb20gcG9zc2libGUgbWF0Y2hpbmcgZHVhbCBvcHRpb24/XG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHZhbHVlRnJvbU9wdGlvbih2YWx1ZSwgb3B0aW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICBpZiAoIXRoaXMuZHVhbE9wdGlvbnMuaGFzKG9wdGlvbktleSkpIHJldHVybiB0cnVlO1xuXG4gICAgLy8gVXNlIHRoZSB2YWx1ZSB0byBkZWR1Y2UgaWYgKHByb2JhYmx5KSBjYW1lIGZyb20gdGhlIG9wdGlvbi5cbiAgICBjb25zdCBwcmVzZXQgPSB0aGlzLm5lZ2F0aXZlT3B0aW9ucy5nZXQob3B0aW9uS2V5KS5wcmVzZXRBcmc7XG4gICAgY29uc3QgbmVnYXRpdmVWYWx1ZSA9IHByZXNldCAhPT0gdW5kZWZpbmVkID8gcHJlc2V0IDogZmFsc2U7XG4gICAgcmV0dXJuIG9wdGlvbi5uZWdhdGUgPT09IChuZWdhdGl2ZVZhbHVlID09PSB2YWx1ZSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb252ZXJ0IHN0cmluZyBmcm9tIGtlYmFiLWNhc2UgdG8gY2FtZWxDYXNlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEByZXR1cm4ge3N0cmluZ31cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gY2FtZWxjYXNlKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KCctJykucmVkdWNlKChzdHIsIHdvcmQpID0+IHtcbiAgICByZXR1cm4gc3RyICsgd29yZFswXS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKTtcbiAgfSk7XG59XG5cbi8qKlxuICogU3BsaXQgdGhlIHNob3J0IGFuZCBsb25nIGZsYWcgb3V0IG9mIHNvbWV0aGluZyBsaWtlICctbSwtLW1peGVkIDx2YWx1ZT4nXG4gKlxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBzcGxpdE9wdGlvbkZsYWdzKGZsYWdzKSB7XG4gIGxldCBzaG9ydEZsYWc7XG4gIGxldCBsb25nRmxhZztcbiAgLy8gc2hvcnQgZmxhZywgc2luZ2xlIGRhc2ggYW5kIHNpbmdsZSBjaGFyYWN0ZXJcbiAgY29uc3Qgc2hvcnRGbGFnRXhwID0gL14tW14tXSQvO1xuICAvLyBsb25nIGZsYWcsIGRvdWJsZSBkYXNoIGFuZCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyXG4gIGNvbnN0IGxvbmdGbGFnRXhwID0gL14tLVteLV0vO1xuXG4gIGNvbnN0IGZsYWdQYXJ0cyA9IGZsYWdzLnNwbGl0KC9bIHwsXSsvKS5jb25jYXQoJ2d1YXJkJyk7XG4gIC8vIE5vcm1hbCBpcyBzaG9ydCBhbmQvb3IgbG9uZy5cbiAgaWYgKHNob3J0RmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpIHNob3J0RmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICBpZiAobG9uZ0ZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSBsb25nRmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICAvLyBMb25nIHRoZW4gc2hvcnQuIFJhcmVseSB1c2VkIGJ1dCBmaW5lLlxuICBpZiAoIXNob3J0RmxhZyAmJiBzaG9ydEZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKVxuICAgIHNob3J0RmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICAvLyBBbGxvdyB0d28gbG9uZyBmbGFncywgbGlrZSAnLS13cywgLS13b3Jrc3BhY2UnXG4gIC8vIFRoaXMgaXMgdGhlIHN1cHBvcnRlZCB3YXkgdG8gaGF2ZSBhIHNob3J0aXNoIG9wdGlvbiBmbGFnLlxuICBpZiAoIXNob3J0RmxhZyAmJiBsb25nRmxhZ0V4cC50ZXN0KGZsYWdQYXJ0c1swXSkpIHtcbiAgICBzaG9ydEZsYWcgPSBsb25nRmxhZztcbiAgICBsb25nRmxhZyA9IGZsYWdQYXJ0cy5zaGlmdCgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgZm9yIHVucHJvY2Vzc2VkIGZsYWcuIEZhaWwgbm9pc2lseSByYXRoZXIgdGhhbiBzaWxlbnRseSBpZ25vcmUuXG4gIGlmIChmbGFnUGFydHNbMF0uc3RhcnRzV2l0aCgnLScpKSB7XG4gICAgY29uc3QgdW5zdXBwb3J0ZWRGbGFnID0gZmxhZ1BhcnRzWzBdO1xuICAgIGNvbnN0IGJhc2VFcnJvciA9IGBvcHRpb24gY3JlYXRpb24gZmFpbGVkIGR1ZSB0byAnJHt1bnN1cHBvcnRlZEZsYWd9JyBpbiBvcHRpb24gZmxhZ3MgJyR7ZmxhZ3N9J2A7XG4gICAgaWYgKC9eLVteLV1bXi1dLy50ZXN0KHVuc3VwcG9ydGVkRmxhZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGAke2Jhc2VFcnJvcn1cbi0gYSBzaG9ydCBmbGFnIGlzIGEgc2luZ2xlIGRhc2ggYW5kIGEgc2luZ2xlIGNoYXJhY3RlclxuICAtIGVpdGhlciB1c2UgYSBzaW5nbGUgZGFzaCBhbmQgYSBzaW5nbGUgY2hhcmFjdGVyIChmb3IgYSBzaG9ydCBmbGFnKVxuICAtIG9yIHVzZSBhIGRvdWJsZSBkYXNoIGZvciBhIGxvbmcgb3B0aW9uIChhbmQgY2FuIGhhdmUgdHdvLCBsaWtlICctLXdzLCAtLXdvcmtzcGFjZScpYCxcbiAgICAgICk7XG4gICAgaWYgKHNob3J0RmxhZ0V4cC50ZXN0KHVuc3VwcG9ydGVkRmxhZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFzZUVycm9yfVxuLSB0b28gbWFueSBzaG9ydCBmbGFnc2ApO1xuICAgIGlmIChsb25nRmxhZ0V4cC50ZXN0KHVuc3VwcG9ydGVkRmxhZykpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFzZUVycm9yfVxuLSB0b28gbWFueSBsb25nIGZsYWdzYCk7XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YmFzZUVycm9yfVxuLSB1bnJlY29nbmlzZWQgZmxhZyBmb3JtYXRgKTtcbiAgfVxuICBpZiAoc2hvcnRGbGFnID09PSB1bmRlZmluZWQgJiYgbG9uZ0ZsYWcgPT09IHVuZGVmaW5lZClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgb3B0aW9uIGNyZWF0aW9uIGZhaWxlZCBkdWUgdG8gbm8gZmxhZ3MgZm91bmQgaW4gJyR7ZmxhZ3N9Jy5gLFxuICAgICk7XG5cbiAgcmV0dXJuIHsgc2hvcnRGbGFnLCBsb25nRmxhZyB9O1xufVxuXG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcbmV4cG9ydHMuRHVhbE9wdGlvbnMgPSBEdWFsT3B0aW9ucztcbiIsICJjb25zdCBtYXhEaXN0YW5jZSA9IDM7XG5cbmZ1bmN0aW9uIGVkaXREaXN0YW5jZShhLCBiKSB7XG4gIC8vIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL0RhbWVyYXVcdTIwMTNMZXZlbnNodGVpbl9kaXN0YW5jZVxuICAvLyBDYWxjdWxhdGluZyBvcHRpbWFsIHN0cmluZyBhbGlnbm1lbnQgZGlzdGFuY2UsIG5vIHN1YnN0cmluZyBpcyBlZGl0ZWQgbW9yZSB0aGFuIG9uY2UuXG4gIC8vIChTaW1wbGUgaW1wbGVtZW50YXRpb24uKVxuXG4gIC8vIFF1aWNrIGVhcmx5IGV4aXQsIHJldHVybiB3b3JzdCBjYXNlLlxuICBpZiAoTWF0aC5hYnMoYS5sZW5ndGggLSBiLmxlbmd0aCkgPiBtYXhEaXN0YW5jZSlcbiAgICByZXR1cm4gTWF0aC5tYXgoYS5sZW5ndGgsIGIubGVuZ3RoKTtcblxuICAvLyBkaXN0YW5jZSBiZXR3ZWVuIHByZWZpeCBzdWJzdHJpbmdzIG9mIGEgYW5kIGJcbiAgY29uc3QgZCA9IFtdO1xuXG4gIC8vIHB1cmUgZGVsZXRpb25zIHR1cm4gYSBpbnRvIGVtcHR5IHN0cmluZ1xuICBmb3IgKGxldCBpID0gMDsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgZFtpXSA9IFtpXTtcbiAgfVxuICAvLyBwdXJlIGluc2VydGlvbnMgdHVybiBlbXB0eSBzdHJpbmcgaW50byBiXG4gIGZvciAobGV0IGogPSAwOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICBkWzBdW2pdID0gajtcbiAgfVxuXG4gIC8vIGZpbGwgbWF0cml4XG4gIGZvciAobGV0IGogPSAxOyBqIDw9IGIubGVuZ3RoOyBqKyspIHtcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgY29zdCA9IDE7XG4gICAgICBpZiAoYVtpIC0gMV0gPT09IGJbaiAtIDFdKSB7XG4gICAgICAgIGNvc3QgPSAwO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29zdCA9IDE7XG4gICAgICB9XG4gICAgICBkW2ldW2pdID0gTWF0aC5taW4oXG4gICAgICAgIGRbaSAtIDFdW2pdICsgMSwgLy8gZGVsZXRpb25cbiAgICAgICAgZFtpXVtqIC0gMV0gKyAxLCAvLyBpbnNlcnRpb25cbiAgICAgICAgZFtpIC0gMV1baiAtIDFdICsgY29zdCwgLy8gc3Vic3RpdHV0aW9uXG4gICAgICApO1xuICAgICAgLy8gdHJhbnNwb3NpdGlvblxuICAgICAgaWYgKGkgPiAxICYmIGogPiAxICYmIGFbaSAtIDFdID09PSBiW2ogLSAyXSAmJiBhW2kgLSAyXSA9PT0gYltqIC0gMV0pIHtcbiAgICAgICAgZFtpXVtqXSA9IE1hdGgubWluKGRbaV1bal0sIGRbaSAtIDJdW2ogLSAyXSArIDEpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBkW2EubGVuZ3RoXVtiLmxlbmd0aF07XG59XG5cbi8qKlxuICogRmluZCBjbG9zZSBtYXRjaGVzLCByZXN0cmljdGVkIHRvIHNhbWUgbnVtYmVyIG9mIGVkaXRzLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB3b3JkXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBjYW5kaWRhdGVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIHN1Z2dlc3RTaW1pbGFyKHdvcmQsIGNhbmRpZGF0ZXMpIHtcbiAgaWYgKCFjYW5kaWRhdGVzIHx8IGNhbmRpZGF0ZXMubGVuZ3RoID09PSAwKSByZXR1cm4gJyc7XG4gIC8vIHJlbW92ZSBwb3NzaWJsZSBkdXBsaWNhdGVzXG4gIGNhbmRpZGF0ZXMgPSBBcnJheS5mcm9tKG5ldyBTZXQoY2FuZGlkYXRlcykpO1xuXG4gIGNvbnN0IHNlYXJjaGluZ09wdGlvbnMgPSB3b3JkLnN0YXJ0c1dpdGgoJy0tJyk7XG4gIGlmIChzZWFyY2hpbmdPcHRpb25zKSB7XG4gICAgd29yZCA9IHdvcmQuc2xpY2UoMik7XG4gICAgY2FuZGlkYXRlcyA9IGNhbmRpZGF0ZXMubWFwKChjYW5kaWRhdGUpID0+IGNhbmRpZGF0ZS5zbGljZSgyKSk7XG4gIH1cblxuICBsZXQgc2ltaWxhciA9IFtdO1xuICBsZXQgYmVzdERpc3RhbmNlID0gbWF4RGlzdGFuY2U7XG4gIGNvbnN0IG1pblNpbWlsYXJpdHkgPSAwLjQ7XG4gIGNhbmRpZGF0ZXMuZm9yRWFjaCgoY2FuZGlkYXRlKSA9PiB7XG4gICAgaWYgKGNhbmRpZGF0ZS5sZW5ndGggPD0gMSkgcmV0dXJuOyAvLyBubyBvbmUgY2hhcmFjdGVyIGd1ZXNzZXNcblxuICAgIGNvbnN0IGRpc3RhbmNlID0gZWRpdERpc3RhbmNlKHdvcmQsIGNhbmRpZGF0ZSk7XG4gICAgY29uc3QgbGVuZ3RoID0gTWF0aC5tYXgod29yZC5sZW5ndGgsIGNhbmRpZGF0ZS5sZW5ndGgpO1xuICAgIGNvbnN0IHNpbWlsYXJpdHkgPSAobGVuZ3RoIC0gZGlzdGFuY2UpIC8gbGVuZ3RoO1xuICAgIGlmIChzaW1pbGFyaXR5ID4gbWluU2ltaWxhcml0eSkge1xuICAgICAgaWYgKGRpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgIC8vIGJldHRlciBlZGl0IGRpc3RhbmNlLCB0aHJvdyBhd2F5IHByZXZpb3VzIHdvcnNlIG1hdGNoZXNcbiAgICAgICAgYmVzdERpc3RhbmNlID0gZGlzdGFuY2U7XG4gICAgICAgIHNpbWlsYXIgPSBbY2FuZGlkYXRlXTtcbiAgICAgIH0gZWxzZSBpZiAoZGlzdGFuY2UgPT09IGJlc3REaXN0YW5jZSkge1xuICAgICAgICBzaW1pbGFyLnB1c2goY2FuZGlkYXRlKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHNpbWlsYXIuc29ydCgoYSwgYikgPT4gYS5sb2NhbGVDb21wYXJlKGIpKTtcbiAgaWYgKHNlYXJjaGluZ09wdGlvbnMpIHtcbiAgICBzaW1pbGFyID0gc2ltaWxhci5tYXAoKGNhbmRpZGF0ZSkgPT4gYC0tJHtjYW5kaWRhdGV9YCk7XG4gIH1cblxuICBpZiAoc2ltaWxhci5sZW5ndGggPiAxKSB7XG4gICAgcmV0dXJuIGBcXG4oRGlkIHlvdSBtZWFuIG9uZSBvZiAke3NpbWlsYXIuam9pbignLCAnKX0/KWA7XG4gIH1cbiAgaWYgKHNpbWlsYXIubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIGBcXG4oRGlkIHlvdSBtZWFuICR7c2ltaWxhclswXX0/KWA7XG4gIH1cbiAgcmV0dXJuICcnO1xufVxuXG5leHBvcnRzLnN1Z2dlc3RTaW1pbGFyID0gc3VnZ2VzdFNpbWlsYXI7XG4iLCAiY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXI7XG5jb25zdCBjaGlsZFByb2Nlc3MgPSByZXF1aXJlKCdub2RlOmNoaWxkX3Byb2Nlc3MnKTtcbmNvbnN0IHBhdGggPSByZXF1aXJlKCdub2RlOnBhdGgnKTtcbmNvbnN0IGZzID0gcmVxdWlyZSgnbm9kZTpmcycpO1xuY29uc3QgcHJvY2VzcyA9IHJlcXVpcmUoJ25vZGU6cHJvY2VzcycpO1xuXG5jb25zdCB7IEFyZ3VtZW50LCBodW1hblJlYWRhYmxlQXJnTmFtZSB9ID0gcmVxdWlyZSgnLi9hcmd1bWVudC5qcycpO1xuY29uc3QgeyBDb21tYW5kZXJFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuY29uc3QgeyBIZWxwLCBzdHJpcENvbG9yIH0gPSByZXF1aXJlKCcuL2hlbHAuanMnKTtcbmNvbnN0IHsgT3B0aW9uLCBEdWFsT3B0aW9ucyB9ID0gcmVxdWlyZSgnLi9vcHRpb24uanMnKTtcbmNvbnN0IHsgc3VnZ2VzdFNpbWlsYXIgfSA9IHJlcXVpcmUoJy4vc3VnZ2VzdFNpbWlsYXInKTtcblxuY2xhc3MgQ29tbWFuZCBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGBDb21tYW5kYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihuYW1lKSB7XG4gICAgc3VwZXIoKTtcbiAgICAvKiogQHR5cGUge0NvbW1hbmRbXX0gKi9cbiAgICB0aGlzLmNvbW1hbmRzID0gW107XG4gICAgLyoqIEB0eXBlIHtPcHRpb25bXX0gKi9cbiAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICB0aGlzLnBhcmVudCA9IG51bGw7XG4gICAgdGhpcy5fYWxsb3dVbmtub3duT3B0aW9uID0gZmFsc2U7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSBmYWxzZTtcbiAgICAvKiogQHR5cGUge0FyZ3VtZW50W119ICovXG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzID0gW107XG4gICAgdGhpcy5fYXJncyA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50czsgLy8gZGVwcmVjYXRlZCBvbGQgbmFtZVxuICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgdGhpcy5hcmdzID0gW107IC8vIGNsaSBhcmdzIHdpdGggb3B0aW9ucyByZW1vdmVkXG4gICAgdGhpcy5yYXdBcmdzID0gW107XG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gW107IC8vIGxpa2UgLmFyZ3MgYnV0IGFmdGVyIGN1c3RvbSBwcm9jZXNzaW5nIGFuZCBjb2xsZWN0aW5nIHZhcmlhZGljXG4gICAgdGhpcy5fc2NyaXB0UGF0aCA9IG51bGw7XG4gICAgdGhpcy5fbmFtZSA9IG5hbWUgfHwgJyc7XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVzID0ge307XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzID0ge307IC8vIGRlZmF1bHQsIGVudiwgY2xpIGV0Y1xuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9IGZhbHNlO1xuICAgIHRoaXMuX2FjdGlvbkhhbmRsZXIgPSBudWxsO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVIYW5kbGVyID0gZmFsc2U7XG4gICAgdGhpcy5fZXhlY3V0YWJsZUZpbGUgPSBudWxsOyAvLyBjdXN0b20gbmFtZSBmb3IgZXhlY3V0YWJsZVxuICAgIHRoaXMuX2V4ZWN1dGFibGVEaXIgPSBudWxsOyAvLyBjdXN0b20gc2VhcmNoIGRpcmVjdG9yeSBmb3Igc3ViY29tbWFuZHNcbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUgPSBudWxsO1xuICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IG51bGw7XG4gICAgdGhpcy5fYWxpYXNlcyA9IFtdO1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9IHRydWU7XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSAnJztcbiAgICB0aGlzLl9zdW1tYXJ5ID0gJyc7XG4gICAgdGhpcy5fYXJnc0Rlc2NyaXB0aW9uID0gdW5kZWZpbmVkOyAvLyBsZWdhY3lcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyA9IGZhbHNlO1xuICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzID0ge307IC8vIGEgaGFzaCBvZiBhcnJheXNcbiAgICAvKiogQHR5cGUgeyhib29sZWFuIHwgc3RyaW5nKX0gKi9cbiAgICB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPSBmYWxzZTtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSB0cnVlO1xuICAgIHRoaXMuX3NhdmVkU3RhdGUgPSBudWxsOyAvLyB1c2VkIGluIHNhdmUvcmVzdG9yZVN0YXRlQmVmb3JlUGFyc2VcblxuICAgIC8vIHNlZSBjb25maWd1cmVPdXRwdXQoKSBmb3IgZG9jc1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSB7XG4gICAgICB3cml0ZU91dDogKHN0cikgPT4gcHJvY2Vzcy5zdGRvdXQud3JpdGUoc3RyKSxcbiAgICAgIHdyaXRlRXJyOiAoc3RyKSA9PiBwcm9jZXNzLnN0ZGVyci53cml0ZShzdHIpLFxuICAgICAgb3V0cHV0RXJyb3I6IChzdHIsIHdyaXRlKSA9PiB3cml0ZShzdHIpLFxuICAgICAgZ2V0T3V0SGVscFdpZHRoOiAoKSA9PlxuICAgICAgICBwcm9jZXNzLnN0ZG91dC5pc1RUWSA/IHByb2Nlc3Muc3Rkb3V0LmNvbHVtbnMgOiB1bmRlZmluZWQsXG4gICAgICBnZXRFcnJIZWxwV2lkdGg6ICgpID0+XG4gICAgICAgIHByb2Nlc3Muc3RkZXJyLmlzVFRZID8gcHJvY2Vzcy5zdGRlcnIuY29sdW1ucyA6IHVuZGVmaW5lZCxcbiAgICAgIGdldE91dEhhc0NvbG9yczogKCkgPT5cbiAgICAgICAgdXNlQ29sb3IoKSA/PyAocHJvY2Vzcy5zdGRvdXQuaXNUVFkgJiYgcHJvY2Vzcy5zdGRvdXQuaGFzQ29sb3JzPy4oKSksXG4gICAgICBnZXRFcnJIYXNDb2xvcnM6ICgpID0+XG4gICAgICAgIHVzZUNvbG9yKCkgPz8gKHByb2Nlc3Muc3RkZXJyLmlzVFRZICYmIHByb2Nlc3Muc3RkZXJyLmhhc0NvbG9ycz8uKCkpLFxuICAgICAgc3RyaXBDb2xvcjogKHN0cikgPT4gc3RyaXBDb2xvcihzdHIpLFxuICAgIH07XG5cbiAgICB0aGlzLl9oaWRkZW4gPSBmYWxzZTtcbiAgICAvKiogQHR5cGUgeyhPcHRpb24gfCBudWxsIHwgdW5kZWZpbmVkKX0gKi9cbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gdW5kZWZpbmVkOyAvLyBMYXp5IGNyZWF0ZWQgb24gZGVtYW5kLiBNYXkgYmUgbnVsbCBpZiBoZWxwIG9wdGlvbiBpcyBkaXNhYmxlZC5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdW5kZWZpbmVkOyAvLyB1bmRlY2lkZWQgd2hldGhlciB0cnVlIG9yIGZhbHNlIHlldCwgbm90IGluaGVyaXRlZFxuICAgIC8qKiBAdHlwZSB7Q29tbWFuZH0gKi9cbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IHVuZGVmaW5lZDsgLy8gbGF6eSBpbml0aWFsaXNlZCwgaW5oZXJpdGVkXG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSB7fTtcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9oZWxwR3JvdXBIZWFkaW5nID0gdW5kZWZpbmVkOyAvLyBzb2Z0IGluaXRpYWxpc2VkIHdoZW4gYWRkZWQgdG8gcGFyZW50XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA9IHVuZGVmaW5lZDtcbiAgICAvKiogQHR5cGUge3N0cmluZyB8IHVuZGVmaW5lZH0gKi9cbiAgICB0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogQ29weSBzZXR0aW5ncyB0aGF0IGFyZSB1c2VmdWwgdG8gaGF2ZSBpbiBjb21tb24gYWNyb3NzIHJvb3QgY29tbWFuZCBhbmQgc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIChVc2VkIGludGVybmFsbHkgd2hlbiBhZGRpbmcgYSBjb21tYW5kIHVzaW5nIGAuY29tbWFuZCgpYCBzbyBzdWJjb21tYW5kcyBpbmhlcml0IHBhcmVudCBzZXR0aW5ncy4pXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gc291cmNlQ29tbWFuZFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGNvcHlJbmhlcml0ZWRTZXR0aW5ncyhzb3VyY2VDb21tYW5kKSB7XG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHNvdXJjZUNvbW1hbmQuX291dHB1dENvbmZpZ3VyYXRpb247XG4gICAgdGhpcy5faGVscE9wdGlvbiA9IHNvdXJjZUNvbW1hbmQuX2hlbHBPcHRpb247XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBzb3VyY2VDb21tYW5kLl9oZWxwQ29tbWFuZDtcbiAgICB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbiA9IHNvdXJjZUNvbW1hbmQuX2hlbHBDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IHNvdXJjZUNvbW1hbmQuX2V4aXRDYWxsYmFjaztcbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSBzb3VyY2VDb21tYW5kLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXM7XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID1cbiAgICAgIHNvdXJjZUNvbW1hbmQuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZTtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9IHNvdXJjZUNvbW1hbmQuX2FsbG93RXhjZXNzQXJndW1lbnRzO1xuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gc291cmNlQ29tbWFuZC5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnM7XG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gc291cmNlQ29tbWFuZC5fc2hvd0hlbHBBZnRlckVycm9yO1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9IHNvdXJjZUNvbW1hbmQuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvcjtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEByZXR1cm5zIHtDb21tYW5kW119XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgIGZvciAobGV0IGNvbW1hbmQgPSB0aGlzOyBjb21tYW5kOyBjb21tYW5kID0gY29tbWFuZC5wYXJlbnQpIHtcbiAgICAgIHJlc3VsdC5wdXNoKGNvbW1hbmQpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIGNvbW1hbmQuXG4gICAqXG4gICAqIFRoZXJlIGFyZSB0d28gc3R5bGVzIG9mIGNvbW1hbmQ6IHBheSBhdHRlbnRpb24gdG8gd2hlcmUgdG8gcHV0IHRoZSBkZXNjcmlwdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogLy8gQ29tbWFuZCBpbXBsZW1lbnRlZCB1c2luZyBhY3Rpb24gaGFuZGxlciAoZGVzY3JpcHRpb24gaXMgc3VwcGxpZWQgc2VwYXJhdGVseSB0byBgLmNvbW1hbmRgKVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ2Nsb25lIDxzb3VyY2U+IFtkZXN0aW5hdGlvbl0nKVxuICAgKiAgIC5kZXNjcmlwdGlvbignY2xvbmUgYSByZXBvc2l0b3J5IGludG8gYSBuZXdseSBjcmVhdGVkIGRpcmVjdG9yeScpXG4gICAqICAgLmFjdGlvbigoc291cmNlLCBkZXN0aW5hdGlvbikgPT4ge1xuICAgKiAgICAgY29uc29sZS5sb2coJ2Nsb25lIGNvbW1hbmQgY2FsbGVkJyk7XG4gICAqICAgfSk7XG4gICAqXG4gICAqIC8vIENvbW1hbmQgaW1wbGVtZW50ZWQgdXNpbmcgc2VwYXJhdGUgZXhlY3V0YWJsZSBmaWxlIChkZXNjcmlwdGlvbiBpcyBzZWNvbmQgcGFyYW1ldGVyIHRvIGAuY29tbWFuZGApXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnc3RhcnQgPHNlcnZpY2U+JywgJ3N0YXJ0IG5hbWVkIHNlcnZpY2UnKVxuICAgKiAgIC5jb21tYW5kKCdzdG9wIFtzZXJ2aWNlXScsICdzdG9wIG5hbWVkIHNlcnZpY2UsIG9yIGFsbCBpZiBubyBuYW1lIHN1cHBsaWVkJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lQW5kQXJncyAtIGNvbW1hbmQgbmFtZSBhbmQgYXJndW1lbnRzLCBhcmdzIGFyZSBgPHJlcXVpcmVkPmAgb3IgYFtvcHRpb25hbF1gIGFuZCBsYXN0IG1heSBhbHNvIGJlIGB2YXJpYWRpYy4uLmBcbiAgICogQHBhcmFtIHsob2JqZWN0IHwgc3RyaW5nKX0gW2FjdGlvbk9wdHNPckV4ZWNEZXNjXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyAoZm9yIGFjdGlvbiksIG9yIGRlc2NyaXB0aW9uIChmb3IgZXhlY3V0YWJsZSlcbiAgICogQHBhcmFtIHtvYmplY3R9IFtleGVjT3B0c10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGZvciBleGVjdXRhYmxlKVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSByZXR1cm5zIG5ldyBjb21tYW5kIGZvciBhY3Rpb24gaGFuZGxlciwgb3IgYHRoaXNgIGZvciBleGVjdXRhYmxlIGNvbW1hbmRcbiAgICovXG5cbiAgY29tbWFuZChuYW1lQW5kQXJncywgYWN0aW9uT3B0c09yRXhlY0Rlc2MsIGV4ZWNPcHRzKSB7XG4gICAgbGV0IGRlc2MgPSBhY3Rpb25PcHRzT3JFeGVjRGVzYztcbiAgICBsZXQgb3B0cyA9IGV4ZWNPcHRzO1xuICAgIGlmICh0eXBlb2YgZGVzYyA9PT0gJ29iamVjdCcgJiYgZGVzYyAhPT0gbnVsbCkge1xuICAgICAgb3B0cyA9IGRlc2M7XG4gICAgICBkZXNjID0gbnVsbDtcbiAgICB9XG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgY29uc3QgWywgbmFtZSwgYXJnc10gPSBuYW1lQW5kQXJncy5tYXRjaCgvKFteIF0rKSAqKC4qKS8pO1xuXG4gICAgY29uc3QgY21kID0gdGhpcy5jcmVhdGVDb21tYW5kKG5hbWUpO1xuICAgIGlmIChkZXNjKSB7XG4gICAgICBjbWQuZGVzY3JpcHRpb24oZGVzYyk7XG4gICAgICBjbWQuX2V4ZWN1dGFibGVIYW5kbGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKG9wdHMuaXNEZWZhdWx0KSB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUgPSBjbWQuX25hbWU7XG4gICAgY21kLl9oaWRkZW4gPSAhIShvcHRzLm5vSGVscCB8fCBvcHRzLmhpZGRlbik7IC8vIG5vSGVscCBpcyBkZXByZWNhdGVkIG9sZCBuYW1lIGZvciBoaWRkZW5cbiAgICBjbWQuX2V4ZWN1dGFibGVGaWxlID0gb3B0cy5leGVjdXRhYmxlRmlsZSB8fCBudWxsOyAvLyBDdXN0b20gbmFtZSBmb3IgZXhlY3V0YWJsZSBmaWxlLCBzZXQgbWlzc2luZyB0byBudWxsIHRvIG1hdGNoIGNvbnN0cnVjdG9yXG4gICAgaWYgKGFyZ3MpIGNtZC5hcmd1bWVudHMoYXJncyk7XG4gICAgdGhpcy5fcmVnaXN0ZXJDb21tYW5kKGNtZCk7XG4gICAgY21kLnBhcmVudCA9IHRoaXM7XG4gICAgY21kLmNvcHlJbmhlcml0ZWRTZXR0aW5ncyh0aGlzKTtcblxuICAgIGlmIChkZXNjKSByZXR1cm4gdGhpcztcbiAgICByZXR1cm4gY21kO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3Rvcnkgcm91dGluZSB0byBjcmVhdGUgYSBuZXcgdW5hdHRhY2hlZCBjb21tYW5kLlxuICAgKlxuICAgKiBTZWUgLmNvbW1hbmQoKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgc3ViY29tbWFuZCwgd2hpY2ggdXNlcyB0aGlzIHJvdXRpbmUgdG9cbiAgICogY3JlYXRlIHRoZSBjb21tYW5kLiBZb3UgY2FuIG92ZXJyaWRlIGNyZWF0ZUNvbW1hbmQgdG8gY3VzdG9taXNlIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW25hbWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IG5ldyBjb21tYW5kXG4gICAqL1xuXG4gIGNyZWF0ZUNvbW1hbmQobmFtZSkge1xuICAgIHJldHVybiBuZXcgQ29tbWFuZChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIGN1c3RvbWlzZSB0aGUgaGVscCB3aXRoIGEgc3ViY2xhc3Mgb2YgSGVscCBieSBvdmVycmlkaW5nIGNyZWF0ZUhlbHAsXG4gICAqIG9yIGJ5IG92ZXJyaWRpbmcgSGVscCBwcm9wZXJ0aWVzIHVzaW5nIGNvbmZpZ3VyZUhlbHAoKS5cbiAgICpcbiAgICogQHJldHVybiB7SGVscH1cbiAgICovXG5cbiAgY3JlYXRlSGVscCgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXcgSGVscCgpLCB0aGlzLmNvbmZpZ3VyZUhlbHAoKSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjdXN0b21pc2UgdGhlIGhlbHAgYnkgb3ZlcnJpZGluZyBIZWxwIHByb3BlcnRpZXMgdXNpbmcgY29uZmlndXJlSGVscCgpLFxuICAgKiBvciB3aXRoIGEgc3ViY2xhc3Mgb2YgSGVscCBieSBvdmVycmlkaW5nIGNyZWF0ZUhlbHAoKS5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IFtjb25maWd1cmF0aW9uXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHsoQ29tbWFuZCB8IG9iamVjdCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3Igc3RvcmVkIGNvbmZpZ3VyYXRpb25cbiAgICovXG5cbiAgY29uZmlndXJlSGVscChjb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uO1xuXG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSBjb25maWd1cmF0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IG91dHB1dCBnb2VzIHRvIHN0ZG91dCBhbmQgc3RkZXJyLiBZb3UgY2FuIGN1c3RvbWlzZSB0aGlzIGZvciBzcGVjaWFsXG4gICAqIGFwcGxpY2F0aW9ucy4gWW91IGNhbiBhbHNvIGN1c3RvbWlzZSB0aGUgZGlzcGxheSBvZiBlcnJvcnMgYnkgb3ZlcnJpZGluZyBvdXRwdXRFcnJvci5cbiAgICpcbiAgICogVGhlIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcyBhcmUgYWxsIGZ1bmN0aW9uczpcbiAgICpcbiAgICogICAgIC8vIGNoYW5nZSBob3cgb3V0cHV0IGJlaW5nIHdyaXR0ZW4sIGRlZmF1bHRzIHRvIHN0ZG91dCBhbmQgc3RkZXJyXG4gICAqICAgICB3cml0ZU91dChzdHIpXG4gICAqICAgICB3cml0ZUVycihzdHIpXG4gICAqICAgICAvLyBjaGFuZ2UgaG93IG91dHB1dCBiZWluZyB3cml0dGVuIGZvciBlcnJvcnMsIGRlZmF1bHRzIHRvIHdyaXRlRXJyXG4gICAqICAgICBvdXRwdXRFcnJvcihzdHIsIHdyaXRlKSAvLyB1c2VkIGZvciBkaXNwbGF5aW5nIGVycm9ycyBhbmQgbm90IHVzZWQgZm9yIGRpc3BsYXlpbmcgaGVscFxuICAgKiAgICAgLy8gc3BlY2lmeSB3aWR0aCBmb3Igd3JhcHBpbmcgaGVscFxuICAgKiAgICAgZ2V0T3V0SGVscFdpZHRoKClcbiAgICogICAgIGdldEVyckhlbHBXaWR0aCgpXG4gICAqICAgICAvLyBjb2xvciBzdXBwb3J0LCBjdXJyZW50bHkgb25seSB1c2VkIHdpdGggSGVscFxuICAgKiAgICAgZ2V0T3V0SGFzQ29sb3JzKClcbiAgICogICAgIGdldEVyckhhc0NvbG9ycygpXG4gICAqICAgICBzdHJpcENvbG9yKCkgLy8gdXNlZCB0byByZW1vdmUgQU5TSSBlc2NhcGUgY29kZXMgaWYgb3V0cHV0IGRvZXMgbm90IGhhdmUgY29sb3JzXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl0gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7KENvbW1hbmQgfCBvYmplY3QpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHN0b3JlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuXG4gIGNvbmZpZ3VyZU91dHB1dChjb25maWd1cmF0aW9uKSB7XG4gICAgaWYgKGNvbmZpZ3VyYXRpb24gPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb247XG5cbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0ge1xuICAgICAgLi4udGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbixcbiAgICAgIC4uLmNvbmZpZ3VyYXRpb24sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHRoZSBoZWxwIG9yIGEgY3VzdG9tIG1lc3NhZ2UgYWZ0ZXIgYW4gZXJyb3Igb2NjdXJzLlxuICAgKlxuICAgKiBAcGFyYW0geyhib29sZWFufHN0cmluZyl9IFtkaXNwbGF5SGVscF1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBzaG93SGVscEFmdGVyRXJyb3IoZGlzcGxheUhlbHAgPSB0cnVlKSB7XG4gICAgaWYgKHR5cGVvZiBkaXNwbGF5SGVscCAhPT0gJ3N0cmluZycpIGRpc3BsYXlIZWxwID0gISFkaXNwbGF5SGVscDtcbiAgICB0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IgPSBkaXNwbGF5SGVscDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IHN1Z2dlc3Rpb24gb2Ygc2ltaWxhciBjb21tYW5kcyBmb3IgdW5rbm93biBjb21tYW5kcywgb3Igb3B0aW9ucyBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtkaXNwbGF5U3VnZ2VzdGlvbl1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBzaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IoZGlzcGxheVN1Z2dlc3Rpb24gPSB0cnVlKSB7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gISFkaXNwbGF5U3VnZ2VzdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwcmVwYXJlZCBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBTZWUgLmNvbW1hbmQoKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgc3ViY29tbWFuZCB3aGljaCBpbmhlcml0cyBzZXR0aW5ncyBmcm9tIGl0cyBwYXJlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kIC0gbmV3IHN1YmNvbW1hbmRcbiAgICogQHBhcmFtIHtvYmplY3R9IFtvcHRzXSAtIGNvbmZpZ3VyYXRpb24gb3B0aW9uc1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYWRkQ29tbWFuZChjbWQsIG9wdHMpIHtcbiAgICBpZiAoIWNtZC5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb21tYW5kIHBhc3NlZCB0byAuYWRkQ29tbWFuZCgpIG11c3QgaGF2ZSBhIG5hbWVcbi0gc3BlY2lmeSB0aGUgbmFtZSBpbiBDb21tYW5kIGNvbnN0cnVjdG9yIG9yIHVzaW5nIC5uYW1lKClgKTtcbiAgICB9XG5cbiAgICBvcHRzID0gb3B0cyB8fCB7fTtcbiAgICBpZiAob3B0cy5pc0RlZmF1bHQpIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSA9IGNtZC5fbmFtZTtcbiAgICBpZiAob3B0cy5ub0hlbHAgfHwgb3B0cy5oaWRkZW4pIGNtZC5faGlkZGVuID0gdHJ1ZTsgLy8gbW9kaWZ5aW5nIHBhc3NlZCBjb21tYW5kIGR1ZSB0byBleGlzdGluZyBpbXBsZW1lbnRhdGlvblxuXG4gICAgdGhpcy5fcmVnaXN0ZXJDb21tYW5kKGNtZCk7XG4gICAgY21kLnBhcmVudCA9IHRoaXM7XG4gICAgY21kLl9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgYXJndW1lbnQuXG4gICAqXG4gICAqIFNlZSAuYXJndW1lbnQoKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgYXJndW1lbnQsIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgYXJndW1lbnQuIFlvdSBjYW4gb3ZlcnJpZGUgY3JlYXRlQXJndW1lbnQgdG8gcmV0dXJuIGEgY3VzdG9tIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtBcmd1bWVudH0gbmV3IGFyZ3VtZW50XG4gICAqL1xuXG4gIGNyZWF0ZUFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZC5cbiAgICpcbiAgICogVGhlIGRlZmF1bHQgaXMgdGhhdCB0aGUgYXJndW1lbnQgaXMgcmVxdWlyZWQsIGFuZCB5b3UgY2FuIGV4cGxpY2l0bHlcbiAgICogaW5kaWNhdGUgdGhpcyB3aXRoIDw+IGFyb3VuZCB0aGUgbmFtZS4gUHV0IFtdIGFyb3VuZCB0aGUgbmFtZSBmb3IgYW4gb3B0aW9uYWwgYXJndW1lbnQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uYXJndW1lbnQoJzxpbnB1dC1maWxlPicpO1xuICAgKiBwcm9ncmFtLmFyZ3VtZW50KCdbb3V0cHV0LWZpbGVdJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIGFyZ3VtZW50IHByb2Nlc3NpbmcgZnVuY3Rpb24gb3IgZGVmYXVsdCB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IFtkZWZhdWx0VmFsdWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBjb25zdCBhcmd1bWVudCA9IHRoaXMuY3JlYXRlQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuICAgIGlmICh0eXBlb2YgcGFyc2VBcmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIocGFyc2VBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmd1bWVudC5kZWZhdWx0KHBhcnNlQXJnKTtcbiAgICB9XG4gICAgdGhpcy5hZGRBcmd1bWVudChhcmd1bWVudCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZCwgYWRkaW5nIG11bHRpcGxlIGF0IG9uY2UgKHdpdGhvdXQgZGVzY3JpcHRpb25zKS5cbiAgICpcbiAgICogU2VlIGFsc28gLmFyZ3VtZW50KCkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uYXJndW1lbnRzKCc8Y21kPiBbZW52XScpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZXNcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFyZ3VtZW50cyhuYW1lcykge1xuICAgIG5hbWVzXG4gICAgICAudHJpbSgpXG4gICAgICAuc3BsaXQoLyArLylcbiAgICAgIC5mb3JFYWNoKChkZXRhaWwpID0+IHtcbiAgICAgICAgdGhpcy5hcmd1bWVudChkZXRhaWwpO1xuICAgICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIGFyZ3VtZW50IHN5bnRheCBmb3IgY29tbWFuZCwgYWRkaW5nIGEgcHJlcGFyZWQgYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7QXJndW1lbnR9IGFyZ3VtZW50XG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkQXJndW1lbnQoYXJndW1lbnQpIHtcbiAgICBjb25zdCBwcmV2aW91c0FyZ3VtZW50ID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLnNsaWNlKC0xKVswXTtcbiAgICBpZiAocHJldmlvdXNBcmd1bWVudD8udmFyaWFkaWMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG9ubHkgdGhlIGxhc3QgYXJndW1lbnQgY2FuIGJlIHZhcmlhZGljICcke3ByZXZpb3VzQXJndW1lbnQubmFtZSgpfSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgYXJndW1lbnQucmVxdWlyZWQgJiZcbiAgICAgIGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICBhcmd1bWVudC5wYXJzZUFyZyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBhIGRlZmF1bHQgdmFsdWUgZm9yIGEgcmVxdWlyZWQgYXJndW1lbnQgaXMgbmV2ZXIgdXNlZDogJyR7YXJndW1lbnQubmFtZSgpfSdgLFxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLnB1c2goYXJndW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEN1c3RvbWlzZSBvciBvdmVycmlkZSBkZWZhdWx0IGhlbHAgY29tbWFuZC4gQnkgZGVmYXVsdCBhIGhlbHAgY29tbWFuZCBpcyBhdXRvbWF0aWNhbGx5IGFkZGVkIGlmIHlvdXIgY29tbWFuZCBoYXMgc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoJ2hlbHAgW2NtZF0nKTtcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZCgnaGVscCBbY21kXScsICdzaG93IGhlbHAnKTtcbiAgICogICAgcHJvZ3JhbS5oZWxwQ29tbWFuZChmYWxzZSk7IC8vIHN1cHByZXNzIGRlZmF1bHQgaGVscCBjb21tYW5kXG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQodHJ1ZSk7IC8vIGFkZCBoZWxwIGNvbW1hbmQgZXZlbiBpZiBubyBzdWJjb21tYW5kc1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xib29sZWFufSBlbmFibGVPck5hbWVBbmRBcmdzIC0gZW5hYmxlIHdpdGggY3VzdG9tIG5hbWUgYW5kL29yIGFyZ3VtZW50cywgb3IgYm9vbGVhbiB0byBvdmVycmlkZSB3aGV0aGVyIGFkZGVkXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dIC0gY3VzdG9tIGRlc2NyaXB0aW9uXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBoZWxwQ29tbWFuZChlbmFibGVPck5hbWVBbmRBcmdzLCBkZXNjcmlwdGlvbikge1xuICAgIGlmICh0eXBlb2YgZW5hYmxlT3JOYW1lQW5kQXJncyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gZW5hYmxlT3JOYW1lQW5kQXJncztcbiAgICAgIGlmIChlbmFibGVPck5hbWVBbmRBcmdzICYmIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXApIHtcbiAgICAgICAgLy8gbWFrZSB0aGUgY29tbWFuZCB0byBzdG9yZSB0aGUgZ3JvdXBcbiAgICAgICAgdGhpcy5faW5pdENvbW1hbmRHcm91cCh0aGlzLl9nZXRIZWxwQ29tbWFuZCgpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNvbnN0IG5hbWVBbmRBcmdzID0gZW5hYmxlT3JOYW1lQW5kQXJncyA/PyAnaGVscCBbY29tbWFuZF0nO1xuICAgIGNvbnN0IFssIGhlbHBOYW1lLCBoZWxwQXJnc10gPSBuYW1lQW5kQXJncy5tYXRjaCgvKFteIF0rKSAqKC4qKS8pO1xuICAgIGNvbnN0IGhlbHBEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uID8/ICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnO1xuXG4gICAgY29uc3QgaGVscENvbW1hbmQgPSB0aGlzLmNyZWF0ZUNvbW1hbmQoaGVscE5hbWUpO1xuICAgIGhlbHBDb21tYW5kLmhlbHBPcHRpb24oZmFsc2UpO1xuICAgIGlmIChoZWxwQXJncykgaGVscENvbW1hbmQuYXJndW1lbnRzKGhlbHBBcmdzKTtcbiAgICBpZiAoaGVscERlc2NyaXB0aW9uKSBoZWxwQ29tbWFuZC5kZXNjcmlwdGlvbihoZWxwRGVzY3JpcHRpb24pO1xuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHRydWU7XG4gICAgdGhpcy5faGVscENvbW1hbmQgPSBoZWxwQ29tbWFuZDtcbiAgICAvLyBpbml0IGdyb3VwIHVubGVzcyBsYXp5IGNyZWF0ZVxuICAgIGlmIChlbmFibGVPck5hbWVBbmRBcmdzIHx8IGRlc2NyaXB0aW9uKSB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKGhlbHBDb21tYW5kKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBwcmVwYXJlZCBjdXN0b20gaGVscCBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0geyhDb21tYW5kfHN0cmluZ3xib29sZWFuKX0gaGVscENvbW1hbmQgLSBjdXN0b20gaGVscCBjb21tYW5kLCBvciBkZXByZWNhdGVkIGVuYWJsZU9yTmFtZUFuZEFyZ3MgYXMgZm9yIGAuaGVscENvbW1hbmQoKWBcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXByZWNhdGVkRGVzY3JpcHRpb25dIC0gZGVwcmVjYXRlZCBjdXN0b20gZGVzY3JpcHRpb24gdXNlZCB3aXRoIGN1c3RvbSBuYW1lIG9ubHlcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhZGRIZWxwQ29tbWFuZChoZWxwQ29tbWFuZCwgZGVwcmVjYXRlZERlc2NyaXB0aW9uKSB7XG4gICAgLy8gSWYgbm90IHBhc3NlZCBhbiBvYmplY3QsIGNhbGwgdGhyb3VnaCB0byBoZWxwQ29tbWFuZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksXG4gICAgLy8gYXMgYWRkSGVscENvbW1hbmQgd2FzIG9yaWdpbmFsbHkgdXNlZCBsaWtlIGhlbHBDb21tYW5kIGlzIG5vdy5cbiAgICBpZiAodHlwZW9mIGhlbHBDb21tYW5kICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhpcy5oZWxwQ29tbWFuZChoZWxwQ29tbWFuZCwgZGVwcmVjYXRlZERlc2NyaXB0aW9uKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB0cnVlO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gaGVscENvbW1hbmQ7XG4gICAgdGhpcy5faW5pdENvbW1hbmRHcm91cChoZWxwQ29tbWFuZCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBjcmVhdGUgaGVscCBjb21tYW5kLlxuICAgKlxuICAgKiBAcmV0dXJuIHsoQ29tbWFuZHxudWxsKX1cbiAgICogQHBhY2thZ2VcbiAgICovXG4gIF9nZXRIZWxwQ29tbWFuZCgpIHtcbiAgICBjb25zdCBoYXNJbXBsaWNpdEhlbHBDb21tYW5kID1cbiAgICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPz9cbiAgICAgICh0aGlzLmNvbW1hbmRzLmxlbmd0aCAmJlxuICAgICAgICAhdGhpcy5fYWN0aW9uSGFuZGxlciAmJlxuICAgICAgICAhdGhpcy5fZmluZENvbW1hbmQoJ2hlbHAnKSk7XG5cbiAgICBpZiAoaGFzSW1wbGljaXRIZWxwQ29tbWFuZCkge1xuICAgICAgaWYgKHRoaXMuX2hlbHBDb21tYW5kID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpcy5oZWxwQ29tbWFuZCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7IC8vIHVzZSBkZWZhdWx0IG5hbWUgYW5kIGRlc2NyaXB0aW9uXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5faGVscENvbW1hbmQ7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBob29rIGZvciBsaWZlIGN5Y2xlIGV2ZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gbGlzdGVuZXJcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhvb2soZXZlbnQsIGxpc3RlbmVyKSB7XG4gICAgY29uc3QgYWxsb3dlZFZhbHVlcyA9IFsncHJlU3ViY29tbWFuZCcsICdwcmVBY3Rpb24nLCAncG9zdEFjdGlvbiddO1xuICAgIGlmICghYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyhldmVudCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB2YWx1ZSBmb3IgZXZlbnQgcGFzc2VkIHRvIGhvb2sgOiAnJHtldmVudH0nLlxuRXhwZWN0aW5nIG9uZSBvZiAnJHthbGxvd2VkVmFsdWVzLmpvaW4oXCInLCAnXCIpfSdgKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XSkge1xuICAgICAgdGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdLnB1c2gobGlzdGVuZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0gPSBbbGlzdGVuZXJdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBjYWxsYmFjayB0byB1c2UgYXMgcmVwbGFjZW1lbnQgZm9yIGNhbGxpbmcgcHJvY2Vzcy5leGl0LlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dIG9wdGlvbmFsIGNhbGxiYWNrIHdoaWNoIHdpbGwgYmUgcGFzc2VkIGEgQ29tbWFuZGVyRXJyb3IsIGRlZmF1bHRzIHRvIHRocm93aW5nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBleGl0T3ZlcnJpZGUoZm4pIHtcbiAgICBpZiAoZm4pIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayA9IGZuO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIuY29kZSAhPT0gJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJykge1xuICAgICAgICAgIHRocm93IGVycjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBBc3luYyBjYWxsYmFjayBmcm9tIHNwYXduIGV2ZW50cywgbm90IHVzZWZ1bCB0byB0aHJvdy5cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2FsbCBwcm9jZXNzLmV4aXQsIGFuZCBfZXhpdENhbGxiYWNrIGlmIGRlZmluZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBleGl0Q29kZSBleGl0IGNvZGUgZm9yIHVzaW5nIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjb2RlIGFuIGlkIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGVycm9yXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIGh1bWFuLXJlYWRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSBlcnJvclxuICAgKiBAcmV0dXJuIG5ldmVyXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGl0KGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSB7XG4gICAgaWYgKHRoaXMuX2V4aXRDYWxsYmFjaykge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrKG5ldyBDb21tYW5kZXJFcnJvcihleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkpO1xuICAgICAgLy8gRXhwZWN0aW5nIHRoaXMgbGluZSBpcyBub3QgcmVhY2hlZC5cbiAgICB9XG4gICAgcHJvY2Vzcy5leGl0KGV4aXRDb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWdpc3RlciBjYWxsYmFjayBgZm5gIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdzZXJ2ZScpXG4gICAqICAgLmRlc2NyaXB0aW9uKCdzdGFydCBzZXJ2aWNlJylcbiAgICogICAuYWN0aW9uKGZ1bmN0aW9uKCkge1xuICAgKiAgICAgIC8vIGRvIHdvcmsgaGVyZVxuICAgKiAgIH0pO1xuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYWN0aW9uKGZuKSB7XG4gICAgY29uc3QgbGlzdGVuZXIgPSAoYXJncykgPT4ge1xuICAgICAgLy8gVGhlIC5hY3Rpb24gY2FsbGJhY2sgdGFrZXMgYW4gZXh0cmEgcGFyYW1ldGVyIHdoaWNoIGlzIHRoZSBjb21tYW5kIG9yIG9wdGlvbnMuXG4gICAgICBjb25zdCBleHBlY3RlZEFyZ3NDb3VudCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGg7XG4gICAgICBjb25zdCBhY3Rpb25BcmdzID0gYXJncy5zbGljZSgwLCBleHBlY3RlZEFyZ3NDb3VudCk7XG4gICAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICAgIGFjdGlvbkFyZ3NbZXhwZWN0ZWRBcmdzQ291bnRdID0gdGhpczsgLy8gYmFja3dhcmRzIGNvbXBhdGlibGUgXCJvcHRpb25zXCJcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdGlvbkFyZ3NbZXhwZWN0ZWRBcmdzQ291bnRdID0gdGhpcy5vcHRzKCk7XG4gICAgICB9XG4gICAgICBhY3Rpb25BcmdzLnB1c2godGhpcyk7XG5cbiAgICAgIHJldHVybiBmbi5hcHBseSh0aGlzLCBhY3Rpb25BcmdzKTtcbiAgICB9O1xuICAgIHRoaXMuX2FjdGlvbkhhbmRsZXIgPSBsaXN0ZW5lcjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgb3B0aW9uLlxuICAgKlxuICAgKiBTZWUgLm9wdGlvbigpIGZvciBjcmVhdGluZyBhbiBhdHRhY2hlZCBvcHRpb24sIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgb3B0aW9uLiBZb3UgY2FuIG92ZXJyaWRlIGNyZWF0ZU9wdGlvbiB0byByZXR1cm4gYSBjdXN0b20gb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7T3B0aW9ufSBuZXcgb3B0aW9uXG4gICAqL1xuXG4gIGNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gbmV3IE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgcGFyc2VBcmdzIHRvIGNhdGNoICdjb21tYW5kZXIuaW52YWxpZEFyZ3VtZW50Jy5cbiAgICpcbiAgICogQHBhcmFtIHsoT3B0aW9uIHwgQXJndW1lbnQpfSB0YXJnZXRcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gcHJldmlvdXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGludmFsaWRBcmd1bWVudE1lc3NhZ2VcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NhbGxQYXJzZUFyZyh0YXJnZXQsIHZhbHVlLCBwcmV2aW91cywgaW52YWxpZEFyZ3VtZW50TWVzc2FnZSkge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGFyZ2V0LnBhcnNlQXJnKHZhbHVlLCBwcmV2aW91cyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdjb21tYW5kZXIuaW52YWxpZEFyZ3VtZW50Jykge1xuICAgICAgICBjb25zdCBtZXNzYWdlID0gYCR7aW52YWxpZEFyZ3VtZW50TWVzc2FnZX0gJHtlcnIubWVzc2FnZX1gO1xuICAgICAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgZXhpdENvZGU6IGVyci5leGl0Q29kZSwgY29kZTogZXJyLmNvZGUgfSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBvcHRpb24gZmxhZyBjb25mbGljdHMuXG4gICAqIFJlZ2lzdGVyIG9wdGlvbiBpZiBubyBjb25mbGljdHMgZm91bmQsIG9yIHRocm93IG9uIGNvbmZsaWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9yZWdpc3Rlck9wdGlvbihvcHRpb24pIHtcbiAgICBjb25zdCBtYXRjaGluZ09wdGlvbiA9XG4gICAgICAob3B0aW9uLnNob3J0ICYmIHRoaXMuX2ZpbmRPcHRpb24ob3B0aW9uLnNob3J0KSkgfHxcbiAgICAgIChvcHRpb24ubG9uZyAmJiB0aGlzLl9maW5kT3B0aW9uKG9wdGlvbi5sb25nKSk7XG4gICAgaWYgKG1hdGNoaW5nT3B0aW9uKSB7XG4gICAgICBjb25zdCBtYXRjaGluZ0ZsYWcgPVxuICAgICAgICBvcHRpb24ubG9uZyAmJiB0aGlzLl9maW5kT3B0aW9uKG9wdGlvbi5sb25nKVxuICAgICAgICAgID8gb3B0aW9uLmxvbmdcbiAgICAgICAgICA6IG9wdGlvbi5zaG9ydDtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGFkZCBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScke3RoaXMuX25hbWUgJiYgYCB0byBjb21tYW5kICcke3RoaXMuX25hbWV9J2B9IGR1ZSB0byBjb25mbGljdGluZyBmbGFnICcke21hdGNoaW5nRmxhZ30nXG4tICBhbHJlYWR5IHVzZWQgYnkgb3B0aW9uICcke21hdGNoaW5nT3B0aW9uLmZsYWdzfSdgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0T3B0aW9uR3JvdXAob3B0aW9uKTtcbiAgICB0aGlzLm9wdGlvbnMucHVzaChvcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIGZvciBjb21tYW5kIG5hbWUgYW5kIGFsaWFzIGNvbmZsaWN0cyB3aXRoIGV4aXN0aW5nIGNvbW1hbmRzLlxuICAgKiBSZWdpc3RlciBjb21tYW5kIGlmIG5vIGNvbmZsaWN0cyBmb3VuZCwgb3IgdGhyb3cgb24gY29uZmxpY3QuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY29tbWFuZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcmVnaXN0ZXJDb21tYW5kKGNvbW1hbmQpIHtcbiAgICBjb25zdCBrbm93bkJ5ID0gKGNtZCkgPT4ge1xuICAgICAgcmV0dXJuIFtjbWQubmFtZSgpXS5jb25jYXQoY21kLmFsaWFzZXMoKSk7XG4gICAgfTtcblxuICAgIGNvbnN0IGFscmVhZHlVc2VkID0ga25vd25CeShjb21tYW5kKS5maW5kKChuYW1lKSA9PlxuICAgICAgdGhpcy5fZmluZENvbW1hbmQobmFtZSksXG4gICAgKTtcbiAgICBpZiAoYWxyZWFkeVVzZWQpIHtcbiAgICAgIGNvbnN0IGV4aXN0aW5nQ21kID0ga25vd25CeSh0aGlzLl9maW5kQ29tbWFuZChhbHJlYWR5VXNlZCkpLmpvaW4oJ3wnKTtcbiAgICAgIGNvbnN0IG5ld0NtZCA9IGtub3duQnkoY29tbWFuZCkuam9pbignfCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgY2Fubm90IGFkZCBjb21tYW5kICcke25ld0NtZH0nIGFzIGFscmVhZHkgaGF2ZSBjb21tYW5kICcke2V4aXN0aW5nQ21kfSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9pbml0Q29tbWFuZEdyb3VwKGNvbW1hbmQpO1xuICAgIHRoaXMuY29tbWFuZHMucHVzaChjb21tYW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYW4gb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkT3B0aW9uKG9wdGlvbikge1xuICAgIHRoaXMuX3JlZ2lzdGVyT3B0aW9uKG9wdGlvbik7XG5cbiAgICBjb25zdCBvbmFtZSA9IG9wdGlvbi5uYW1lKCk7XG4gICAgY29uc3QgbmFtZSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG5cbiAgICAvLyBzdG9yZSBkZWZhdWx0IHZhbHVlXG4gICAgaWYgKG9wdGlvbi5uZWdhdGUpIHtcbiAgICAgIC8vIC0tbm8tZm9vIGlzIHNwZWNpYWwgYW5kIGRlZmF1bHRzIGZvbyB0byB0cnVlLCB1bmxlc3MgYSAtLWZvbyBvcHRpb24gaXMgYWxyZWFkeSBkZWZpbmVkXG4gICAgICBjb25zdCBwb3NpdGl2ZUxvbmdGbGFnID0gb3B0aW9uLmxvbmcucmVwbGFjZSgvXi0tbm8tLywgJy0tJyk7XG4gICAgICBpZiAoIXRoaXMuX2ZpbmRPcHRpb24ocG9zaXRpdmVMb25nRmxhZykpIHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UoXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBvcHRpb24uZGVmYXVsdFZhbHVlID09PSB1bmRlZmluZWQgPyB0cnVlIDogb3B0aW9uLmRlZmF1bHRWYWx1ZSxcbiAgICAgICAgICAnZGVmYXVsdCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChvcHRpb24uZGVmYXVsdFZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKG5hbWUsIG9wdGlvbi5kZWZhdWx0VmFsdWUsICdkZWZhdWx0Jyk7XG4gICAgfVxuXG4gICAgLy8gaGFuZGxlciBmb3IgY2xpIGFuZCBlbnYgc3VwcGxpZWQgdmFsdWVzXG4gICAgY29uc3QgaGFuZGxlT3B0aW9uVmFsdWUgPSAodmFsLCBpbnZhbGlkVmFsdWVNZXNzYWdlLCB2YWx1ZVNvdXJjZSkgPT4ge1xuICAgICAgLy8gdmFsIGlzIG51bGwgZm9yIG9wdGlvbmFsIG9wdGlvbiB1c2VkIHdpdGhvdXQgYW4gb3B0aW9uYWwtYXJndW1lbnQuXG4gICAgICAvLyB2YWwgaXMgdW5kZWZpbmVkIGZvciBib29sZWFuIGFuZCBuZWdhdGVkIG9wdGlvbi5cbiAgICAgIGlmICh2YWwgPT0gbnVsbCAmJiBvcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsID0gb3B0aW9uLnByZXNldEFyZztcbiAgICAgIH1cblxuICAgICAgLy8gY3VzdG9tIHByb2Nlc3NpbmdcbiAgICAgIGNvbnN0IG9sZFZhbHVlID0gdGhpcy5nZXRPcHRpb25WYWx1ZShuYW1lKTtcbiAgICAgIGlmICh2YWwgIT09IG51bGwgJiYgb3B0aW9uLnBhcnNlQXJnKSB7XG4gICAgICAgIHZhbCA9IHRoaXMuX2NhbGxQYXJzZUFyZyhvcHRpb24sIHZhbCwgb2xkVmFsdWUsIGludmFsaWRWYWx1ZU1lc3NhZ2UpO1xuICAgICAgfSBlbHNlIGlmICh2YWwgIT09IG51bGwgJiYgb3B0aW9uLnZhcmlhZGljKSB7XG4gICAgICAgIHZhbCA9IG9wdGlvbi5fY29sbGVjdFZhbHVlKHZhbCwgb2xkVmFsdWUpO1xuICAgICAgfVxuXG4gICAgICAvLyBGaWxsLWluIGFwcHJvcHJpYXRlIG1pc3NpbmcgdmFsdWVzLiBMb25nIHdpbmRlZCBidXQgZWFzeSB0byBmb2xsb3cuXG4gICAgICBpZiAodmFsID09IG51bGwpIHtcbiAgICAgICAgaWYgKG9wdGlvbi5uZWdhdGUpIHtcbiAgICAgICAgICB2YWwgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChvcHRpb24uaXNCb29sZWFuKCkgfHwgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgdmFsID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YWwgPSAnJzsgLy8gbm90IG5vcm1hbCwgcGFyc2VBcmcgbWlnaHQgaGF2ZSBmYWlsZWQgb3IgYmUgYSBtb2NrIGZ1bmN0aW9uIGZvciB0ZXN0aW5nXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKG5hbWUsIHZhbCwgdmFsdWVTb3VyY2UpO1xuICAgIH07XG5cbiAgICB0aGlzLm9uKCdvcHRpb246JyArIG9uYW1lLCAodmFsKSA9PiB7XG4gICAgICBjb25zdCBpbnZhbGlkVmFsdWVNZXNzYWdlID0gYGVycm9yOiBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgYXJndW1lbnQgJyR7dmFsfScgaXMgaW52YWxpZC5gO1xuICAgICAgaGFuZGxlT3B0aW9uVmFsdWUodmFsLCBpbnZhbGlkVmFsdWVNZXNzYWdlLCAnY2xpJyk7XG4gICAgfSk7XG5cbiAgICBpZiAob3B0aW9uLmVudlZhcikge1xuICAgICAgdGhpcy5vbignb3B0aW9uRW52OicgKyBvbmFtZSwgKHZhbCkgPT4ge1xuICAgICAgICBjb25zdCBpbnZhbGlkVmFsdWVNZXNzYWdlID0gYGVycm9yOiBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgdmFsdWUgJyR7dmFsfScgZnJvbSBlbnYgJyR7b3B0aW9uLmVudlZhcn0nIGlzIGludmFsaWQuYDtcbiAgICAgICAgaGFuZGxlT3B0aW9uVmFsdWUodmFsLCBpbnZhbGlkVmFsdWVNZXNzYWdlLCAnZW52Jyk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBzaGFyZWQgYnkgLm9wdGlvbigpIGFuZCAucmVxdWlyZWRPcHRpb24oKVxuICAgKlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9vcHRpb25FeChjb25maWcsIGZsYWdzLCBkZXNjcmlwdGlvbiwgZm4sIGRlZmF1bHRWYWx1ZSkge1xuICAgIGlmICh0eXBlb2YgZmxhZ3MgPT09ICdvYmplY3QnICYmIGZsYWdzIGluc3RhbmNlb2YgT3B0aW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdUbyBhZGQgYW4gT3B0aW9uIG9iamVjdCB1c2UgYWRkT3B0aW9uKCkgaW5zdGVhZCBvZiBvcHRpb24oKSBvciByZXF1aXJlZE9wdGlvbigpJyxcbiAgICAgICk7XG4gICAgfVxuICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gICAgb3B0aW9uLm1ha2VPcHRpb25NYW5kYXRvcnkoISFjb25maWcubWFuZGF0b3J5KTtcbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvcHRpb24uZGVmYXVsdChkZWZhdWx0VmFsdWUpLmFyZ1BhcnNlcihmbik7XG4gICAgfSBlbHNlIGlmIChmbiBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgLy8gZGVwcmVjYXRlZFxuICAgICAgY29uc3QgcmVnZXggPSBmbjtcbiAgICAgIGZuID0gKHZhbCwgZGVmKSA9PiB7XG4gICAgICAgIGNvbnN0IG0gPSByZWdleC5leGVjKHZhbCk7XG4gICAgICAgIHJldHVybiBtID8gbVswXSA6IGRlZjtcbiAgICAgIH07XG4gICAgICBvcHRpb24uZGVmYXVsdChkZWZhdWx0VmFsdWUpLmFyZ1BhcnNlcihmbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG9wdGlvbi5kZWZhdWx0KGZuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGRPcHRpb24ob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgb3B0aW9uIHdpdGggYGZsYWdzYCwgYGRlc2NyaXB0aW9uYCwgYW5kIG9wdGlvbmFsIGFyZ3VtZW50IHBhcnNpbmcgZnVuY3Rpb24gb3IgYGRlZmF1bHRWYWx1ZWAgb3IgYm90aC5cbiAgICpcbiAgICogVGhlIGBmbGFnc2Agc3RyaW5nIGNvbnRhaW5zIHRoZSBzaG9ydCBhbmQvb3IgbG9uZyBmbGFncywgc2VwYXJhdGVkIGJ5IGNvbW1hLCBhIHBpcGUgb3Igc3BhY2UuIEEgcmVxdWlyZWRcbiAgICogb3B0aW9uLWFyZ3VtZW50IGlzIGluZGljYXRlZCBieSBgPD5gIGFuZCBhbiBvcHRpb25hbCBvcHRpb24tYXJndW1lbnQgYnkgYFtdYC5cbiAgICpcbiAgICogU2VlIHRoZSBSRUFETUUgZm9yIG1vcmUgZGV0YWlscywgYW5kIHNlZSBhbHNvIGFkZE9wdGlvbigpIGFuZCByZXF1aXJlZE9wdGlvbigpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgICAub3B0aW9uKCctcCwgLS1wZXBwZXInLCAnYWRkIHBlcHBlcicpXG4gICAqICAgICAub3B0aW9uKCctLXB0LCAtLXBpenphLXR5cGUgPFRZUEU+JywgJ3R5cGUgb2YgcGl6emEnKSAvLyByZXF1aXJlZCBvcHRpb24tYXJndW1lbnRcbiAgICogICAgIC5vcHRpb24oJy1jLCAtLWNoZWVzZSBbQ0hFRVNFXScsICdhZGQgZXh0cmEgY2hlZXNlJywgJ21venphcmVsbGEnKSAvLyBvcHRpb25hbCBvcHRpb24tYXJndW1lbnQgd2l0aCBkZWZhdWx0XG4gICAqICAgICAub3B0aW9uKCctdCwgLS10aXAgPFZBTFVFPicsICdhZGQgdGlwIHRvIHB1cmNoYXNlIGNvc3QnLCBwYXJzZUZsb2F0KSAvLyBjdXN0b20gcGFyc2UgZnVuY3Rpb25cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIG9wdGlvbiBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgb3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25FeCh7fSwgZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSByZXF1aXJlZCBvcHRpb24gd2hpY2ggbXVzdCBoYXZlIGEgdmFsdWUgYWZ0ZXIgcGFyc2luZy4gVGhpcyB1c3VhbGx5IG1lYW5zXG4gICAqIHRoZSBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQgb24gdGhlIGNvbW1hbmQgbGluZS4gKE90aGVyd2lzZSB0aGUgc2FtZSBhcyAub3B0aW9uKCkuKVxuICAgKlxuICAgKiBUaGUgYGZsYWdzYCBzdHJpbmcgY29udGFpbnMgdGhlIHNob3J0IGFuZC9vciBsb25nIGZsYWdzLCBzZXBhcmF0ZWQgYnkgY29tbWEsIGEgcGlwZSBvciBzcGFjZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEBwYXJhbSB7KEZ1bmN0aW9ufCopfSBbcGFyc2VBcmddIC0gY3VzdG9tIG9wdGlvbiBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgcmVxdWlyZWRPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvbkV4KFxuICAgICAgeyBtYW5kYXRvcnk6IHRydWUgfSxcbiAgICAgIGZsYWdzLFxuICAgICAgZGVzY3JpcHRpb24sXG4gICAgICBwYXJzZUFyZyxcbiAgICAgIGRlZmF1bHRWYWx1ZSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsdGVyIHBhcnNpbmcgb2Ygc2hvcnQgZmxhZ3Mgd2l0aCBvcHRpb25hbCB2YWx1ZXMuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIGZvciBgLm9wdGlvbignLWYsLS1mbGFnIFt2YWx1ZV0nKTpcbiAgICogcHJvZ3JhbS5jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUodHJ1ZSk7ICAvLyBgLWY4MGAgaXMgdHJlYXRlZCBsaWtlIGAtLWZsYWc9ODBgLCB0aGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91clxuICAgKiBwcm9ncmFtLmNvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZShmYWxzZSkgLy8gYC1mYmAgaXMgdHJlYXRlZCBsaWtlIGAtZiAtYmBcbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbY29tYmluZV0gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgYW4gb3B0aW9uYWwgdmFsdWUgY2FuIGJlIHNwZWNpZmllZCBkaXJlY3RseSBhZnRlciB0aGUgZmxhZy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBjb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUoY29tYmluZSA9IHRydWUpIHtcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPSAhIWNvbWJpbmU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWxsb3cgdW5rbm93biBvcHRpb25zIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93VW5rbm93bl0gLSBpZiBgdHJ1ZWAgb3Igb21pdHRlZCwgbm8gZXJyb3Igd2lsbCBiZSB0aHJvd24gZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhbGxvd1Vua25vd25PcHRpb24oYWxsb3dVbmtub3duID0gdHJ1ZSkge1xuICAgIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9ICEhYWxsb3dVbmtub3duO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IGV4Y2VzcyBjb21tYW5kLWFyZ3VtZW50cyBvbiB0aGUgY29tbWFuZCBsaW5lLiBQYXNzIGZhbHNlIHRvIG1ha2UgZXhjZXNzIGFyZ3VtZW50cyBhbiBlcnJvci5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbYWxsb3dFeGNlc3NdIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duIGZvciBleGNlc3MgYXJndW1lbnRzLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFsbG93RXhjZXNzQXJndW1lbnRzKGFsbG93RXhjZXNzID0gdHJ1ZSkge1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gISFhbGxvd0V4Y2VzcztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBFbmFibGUgcG9zaXRpb25hbCBvcHRpb25zLiBQb3NpdGlvbmFsIG1lYW5zIGdsb2JhbCBvcHRpb25zIGFyZSBzcGVjaWZpZWQgYmVmb3JlIHN1YmNvbW1hbmRzIHdoaWNoIGxldHNcbiAgICogc3ViY29tbWFuZHMgcmV1c2UgdGhlIHNhbWUgb3B0aW9uIG5hbWVzLCBhbmQgYWxzbyBlbmFibGVzIHN1YmNvbW1hbmRzIHRvIHR1cm4gb24gcGFzc1Rocm91Z2hPcHRpb25zLlxuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm9uLXBvc2l0aW9uYWwgYW5kIGdsb2JhbCBvcHRpb25zIG1heSBhcHBlYXIgYW55d2hlcmUgb24gdGhlIGNvbW1hbmQgbGluZS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbcG9zaXRpb25hbF1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBlbmFibGVQb3NpdGlvbmFsT3B0aW9ucyhwb3NpdGlvbmFsID0gdHJ1ZSkge1xuICAgIHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zID0gISFwb3NpdGlvbmFsO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhc3MgdGhyb3VnaCBvcHRpb25zIHRoYXQgY29tZSBhZnRlciBjb21tYW5kLWFyZ3VtZW50cyByYXRoZXIgdGhhbiB0cmVhdCB0aGVtIGFzIGNvbW1hbmQtb3B0aW9ucyxcbiAgICogc28gYWN0dWFsIGNvbW1hbmQtb3B0aW9ucyBjb21lIGJlZm9yZSBjb21tYW5kLWFyZ3VtZW50cy4gVHVybmluZyB0aGlzIG9uIGZvciBhIHN1YmNvbW1hbmQgcmVxdWlyZXNcbiAgICogcG9zaXRpb25hbCBvcHRpb25zIHRvIGhhdmUgYmVlbiBlbmFibGVkIG9uIHRoZSBwcm9ncmFtIChwYXJlbnQgY29tbWFuZHMpLlxuICAgKiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgaXMgbm9uLXBvc2l0aW9uYWwgYW5kIG9wdGlvbnMgbWF5IGFwcGVhciBiZWZvcmUgb3IgYWZ0ZXIgY29tbWFuZC1hcmd1bWVudHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Bhc3NUaHJvdWdoXSBmb3IgdW5rbm93biBvcHRpb25zLlxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIHBhc3NUaHJvdWdoT3B0aW9ucyhwYXNzVGhyb3VnaCA9IHRydWUpIHtcbiAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgPSAhIXBhc3NUaHJvdWdoO1xuICAgIHRoaXMuX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpIHtcbiAgICBpZiAoXG4gICAgICB0aGlzLnBhcmVudCAmJlxuICAgICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zICYmXG4gICAgICAhdGhpcy5wYXJlbnQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBwYXNzVGhyb3VnaE9wdGlvbnMgY2Fubm90IGJlIHVzZWQgZm9yICcke3RoaXMuX25hbWV9JyB3aXRob3V0IHR1cm5pbmcgb24gZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgZm9yIHBhcmVudCBjb21tYW5kKHMpYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc3RvcmUgb3B0aW9uIHZhbHVlcyBhcyBwcm9wZXJ0aWVzIG9uIGNvbW1hbmQgb2JqZWN0LFxuICAgKiBvciBzdG9yZSBzZXBhcmF0ZWx5IChzcGVjaWZ5IGZhbHNlKS4gSW4gYm90aCBjYXNlcyB0aGUgb3B0aW9uIHZhbHVlcyBjYW4gYmUgYWNjZXNzZWQgdXNpbmcgLm9wdHMoKS5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbc3RvcmVBc1Byb3BlcnRpZXM9dHJ1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHN0b3JlT3B0aW9uc0FzUHJvcGVydGllcyhzdG9yZUFzUHJvcGVydGllcyA9IHRydWUpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjYWxsIC5zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoKSBiZWZvcmUgYWRkaW5nIG9wdGlvbnMnKTtcbiAgICB9XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuX29wdGlvblZhbHVlcykubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdjYWxsIC5zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoKSBiZWZvcmUgc2V0dGluZyBvcHRpb24gdmFsdWVzJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcyA9ICEhc3RvcmVBc1Byb3BlcnRpZXM7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0cmlldmUgb3B0aW9uIHZhbHVlLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge29iamVjdH0gdmFsdWVcbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWUoa2V5KSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgcmV0dXJuIHRoaXNba2V5XTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0b3JlIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge29iamVjdH0gdmFsdWVcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHNldE9wdGlvblZhbHVlKGtleSwgdmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2Uoa2V5LCB2YWx1ZSwgdW5kZWZpbmVkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBvcHRpb24gdmFsdWUgYW5kIHdoZXJlIHRoZSB2YWx1ZSBjYW1lIGZyb20uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzb3VyY2UgLSBleHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQvY29uZmlnL2Vudi9jbGkvaW1wbGllZFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKGtleSwgdmFsdWUsIHNvdXJjZSkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIHRoaXNba2V5XSA9IHZhbHVlO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9vcHRpb25WYWx1ZXNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXNba2V5XSA9IHNvdXJjZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc291cmNlIG9mIG9wdGlvbiB2YWx1ZS5cbiAgICogRXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0IHwgY29uZmlnIHwgZW52IHwgY2xpIHwgaW1wbGllZFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KSB7XG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlU291cmNlc1trZXldO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzb3VyY2Ugb2Ygb3B0aW9uIHZhbHVlLiBTZWUgYWxzbyAub3B0c1dpdGhHbG9iYWxzKCkuXG4gICAqIEV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdCB8IGNvbmZpZyB8IGVudiB8IGNsaSB8IGltcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlU291cmNlV2l0aEdsb2JhbHMoa2V5KSB7XG4gICAgLy8gZ2xvYmFsIG92ZXJ3cml0ZXMgbG9jYWwsIGxpa2Ugb3B0c1dpdGhHbG9iYWxzXG4gICAgbGV0IHNvdXJjZTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBpZiAoY21kLmdldE9wdGlvblZhbHVlU291cmNlKGtleSkgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzb3VyY2UgPSBjbWQuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uoa2V5KTtcbiAgICAgIH1cbiAgICB9KTtcbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB1c2VyIGFyZ3VtZW50cyBmcm9tIGltcGxpZWQgb3IgZXhwbGljaXQgYXJndW1lbnRzLlxuICAgKiBTaWRlLWVmZmVjdHM6IHNldCBfc2NyaXB0UGF0aCBpZiBhcmdzIGluY2x1ZGVkIHNjcmlwdC4gVXNlZCBmb3IgZGVmYXVsdCBwcm9ncmFtIG5hbWUsIGFuZCBzdWJjb21tYW5kIHNlYXJjaGVzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIGlmIChhcmd2ICE9PSB1bmRlZmluZWQgJiYgIUFycmF5LmlzQXJyYXkoYXJndikpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignZmlyc3QgcGFyYW1ldGVyIHRvIHBhcnNlIG11c3QgYmUgYXJyYXkgb3IgdW5kZWZpbmVkJyk7XG4gICAgfVxuICAgIHBhcnNlT3B0aW9ucyA9IHBhcnNlT3B0aW9ucyB8fCB7fTtcblxuICAgIC8vIGF1dG8tZGV0ZWN0IGFyZ3VtZW50IGNvbnZlbnRpb25zIGlmIG5vdGhpbmcgc3VwcGxpZWRcbiAgICBpZiAoYXJndiA9PT0gdW5kZWZpbmVkICYmIHBhcnNlT3B0aW9ucy5mcm9tID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChwcm9jZXNzLnZlcnNpb25zPy5lbGVjdHJvbikge1xuICAgICAgICBwYXJzZU9wdGlvbnMuZnJvbSA9ICdlbGVjdHJvbic7XG4gICAgICB9XG4gICAgICAvLyBjaGVjayBub2RlIHNwZWNpZmljIG9wdGlvbnMgZm9yIHNjZW5hcmlvcyB3aGVyZSB1c2VyIENMSSBhcmdzIGZvbGxvdyBleGVjdXRhYmxlIHdpdGhvdXQgc2NyaXB0bmFtZVxuICAgICAgY29uc3QgZXhlY0FyZ3YgPSBwcm9jZXNzLmV4ZWNBcmd2ID8/IFtdO1xuICAgICAgaWYgKFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLWUnKSB8fFxuICAgICAgICBleGVjQXJndi5pbmNsdWRlcygnLS1ldmFsJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy1wJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy0tcHJpbnQnKVxuICAgICAgKSB7XG4gICAgICAgIHBhcnNlT3B0aW9ucy5mcm9tID0gJ2V2YWwnOyAvLyBpbnRlcm5hbCB1c2FnZSwgbm90IGRvY3VtZW50ZWRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBkZWZhdWx0IHRvIHVzaW5nIHByb2Nlc3MuYXJndlxuICAgIGlmIChhcmd2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGFyZ3YgPSBwcm9jZXNzLmFyZ3Y7XG4gICAgfVxuICAgIHRoaXMucmF3QXJncyA9IGFyZ3Yuc2xpY2UoKTtcblxuICAgIC8vIGV4dHJhY3QgdGhlIHVzZXIgYXJncyBhbmQgc2NyaXB0UGF0aFxuICAgIGxldCB1c2VyQXJncztcbiAgICBzd2l0Y2ggKHBhcnNlT3B0aW9ucy5mcm9tKSB7XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgIGNhc2UgJ25vZGUnOlxuICAgICAgICB0aGlzLl9zY3JpcHRQYXRoID0gYXJndlsxXTtcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDIpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2VsZWN0cm9uJzpcbiAgICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBkZWZhdWx0QXBwIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgICAgaWYgKHByb2Nlc3MuZGVmYXVsdEFwcCkge1xuICAgICAgICAgIHRoaXMuX3NjcmlwdFBhdGggPSBhcmd2WzFdO1xuICAgICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1c2VyJzpcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2V2YWwnOlxuICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgIGB1bmV4cGVjdGVkIHBhcnNlIG9wdGlvbiB7IGZyb206ICcke3BhcnNlT3B0aW9ucy5mcm9tfScgfWAsXG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gRmluZCBkZWZhdWx0IG5hbWUgZm9yIHByb2dyYW0gZnJvbSBhcmd1bWVudHMuXG4gICAgaWYgKCF0aGlzLl9uYW1lICYmIHRoaXMuX3NjcmlwdFBhdGgpXG4gICAgICB0aGlzLm5hbWVGcm9tRmlsZW5hbWUodGhpcy5fc2NyaXB0UGF0aCk7XG4gICAgdGhpcy5fbmFtZSA9IHRoaXMuX25hbWUgfHwgJ3Byb2dyYW0nO1xuXG4gICAgcmV0dXJuIHVzZXJBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGBhcmd2YCwgc2V0dGluZyBvcHRpb25zIGFuZCBpbnZva2luZyBjb21tYW5kcyB3aGVuIGRlZmluZWQuXG4gICAqXG4gICAqIFVzZSBwYXJzZUFzeW5jIGluc3RlYWQgb2YgcGFyc2UgaWYgYW55IG9mIHlvdXIgYWN0aW9uIGhhbmRsZXJzIGFyZSBhc3luYy5cbiAgICpcbiAgICogQ2FsbCB3aXRoIG5vIHBhcmFtZXRlcnMgdG8gcGFyc2UgYHByb2Nlc3MuYXJndmAuIERldGVjdHMgRWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBvcHRpb25zIGxpa2UgYG5vZGUgLS1ldmFsYC4gRWFzeSBtb2RlIVxuICAgKlxuICAgKiBPciBjYWxsIHdpdGggYW4gYXJyYXkgb2Ygc3RyaW5ncyB0byBwYXJzZSwgYW5kIG9wdGlvbmFsbHkgd2hlcmUgdGhlIHVzZXIgYXJndW1lbnRzIHN0YXJ0IGJ5IHNwZWNpZnlpbmcgd2hlcmUgdGhlIGFyZ3VtZW50cyBhcmUgYGZyb21gOlxuICAgKiAtIGAnbm9kZSdgOiBkZWZhdWx0LCBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgaXMgdGhlIHNjcmlwdCBiZWluZyBydW4sIHdpdGggdXNlciBhcmd1bWVudHMgYWZ0ZXIgdGhhdFxuICAgKiAtIGAnZWxlY3Ryb24nYDogYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIHZhcmllcyBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZWxlY3Ryb24gYXBwbGljYXRpb24gaXMgcGFja2FnZWRcbiAgICogLSBgJ3VzZXInYDoganVzdCB1c2VyIGFyZ3VtZW50c1xuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLnBhcnNlKCk7IC8vIHBhcnNlIHByb2Nlc3MuYXJndiBhbmQgYXV0by1kZXRlY3QgZWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBmbGFnc1xuICAgKiBwcm9ncmFtLnBhcnNlKHByb2Nlc3MuYXJndik7IC8vIGFzc3VtZSBhcmd2WzBdIGlzIGFwcCBhbmQgYXJndlsxXSBpcyBzY3JpcHRcbiAgICogcHJvZ3JhbS5wYXJzZShteS1hcmdzLCB7IGZyb206ICd1c2VyJyB9KTsgLy8ganVzdCB1c2VyIHN1cHBsaWVkIGFyZ3VtZW50cywgbm90aGluZyBzcGVjaWFsIGFib3V0IGFyZ3ZbMF1cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gW2FyZ3ZdIC0gb3B0aW9uYWwsIGRlZmF1bHRzIHRvIHByb2Nlc3MuYXJndlxuICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcnNlT3B0aW9uc10gLSBvcHRpb25hbGx5IHNwZWNpZnkgc3R5bGUgb2Ygb3B0aW9ucyB3aXRoIGZyb206IG5vZGUvdXNlci9lbGVjdHJvblxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhcnNlT3B0aW9ucy5mcm9tXSAtIHdoZXJlIHRoZSBhcmdzIGFyZSBmcm9tOiAnbm9kZScsICd1c2VyJywgJ2VsZWN0cm9uJ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgcGFyc2UoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgdGhpcy5fcHJlcGFyZUZvclBhcnNlKCk7XG4gICAgY29uc3QgdXNlckFyZ3MgPSB0aGlzLl9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKTtcbiAgICB0aGlzLl9wYXJzZUNvbW1hbmQoW10sIHVzZXJBcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFBhcnNlIGBhcmd2YCwgc2V0dGluZyBvcHRpb25zIGFuZCBpbnZva2luZyBjb21tYW5kcyB3aGVuIGRlZmluZWQuXG4gICAqXG4gICAqIENhbGwgd2l0aCBubyBwYXJhbWV0ZXJzIHRvIHBhcnNlIGBwcm9jZXNzLmFyZ3ZgLiBEZXRlY3RzIEVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgb3B0aW9ucyBsaWtlIGBub2RlIC0tZXZhbGAuIEVhc3kgbW9kZSFcbiAgICpcbiAgICogT3IgY2FsbCB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UsIGFuZCBvcHRpb25hbGx5IHdoZXJlIHRoZSB1c2VyIGFyZ3VtZW50cyBzdGFydCBieSBzcGVjaWZ5aW5nIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIGBmcm9tYDpcbiAgICogLSBgJ25vZGUnYDogZGVmYXVsdCwgYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIGlzIHRoZSBzY3JpcHQgYmVpbmcgcnVuLCB3aXRoIHVzZXIgYXJndW1lbnRzIGFmdGVyIHRoYXRcbiAgICogLSBgJ2VsZWN0cm9uJ2A6IGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGVsZWN0cm9uIGFwcGxpY2F0aW9uIGlzIHBhY2thZ2VkXG4gICAqIC0gYCd1c2VyJ2A6IGp1c3QgdXNlciBhcmd1bWVudHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKCk7IC8vIHBhcnNlIHByb2Nlc3MuYXJndiBhbmQgYXV0by1kZXRlY3QgZWxlY3Ryb24gYW5kIHNwZWNpYWwgbm9kZSBmbGFnc1xuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMocHJvY2Vzcy5hcmd2KTsgLy8gYXNzdW1lIGFyZ3ZbMF0gaXMgYXBwIGFuZCBhcmd2WzFdIGlzIHNjcmlwdFxuICAgKiBhd2FpdCBwcm9ncmFtLnBhcnNlQXN5bmMobXktYXJncywgeyBmcm9tOiAndXNlcicgfSk7IC8vIGp1c3QgdXNlciBzdXBwbGllZCBhcmd1bWVudHMsIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBhcmd2WzBdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmd2XVxuICAgKiBAcGFyYW0ge29iamVjdH0gW3BhcnNlT3B0aW9uc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IHBhcnNlT3B0aW9ucy5mcm9tIC0gd2hlcmUgdGhlIGFyZ3MgYXJlIGZyb206ICdub2RlJywgJ3VzZXInLCAnZWxlY3Ryb24nXG4gICAqIEByZXR1cm4ge1Byb21pc2V9XG4gICAqL1xuXG4gIGFzeW5jIHBhcnNlQXN5bmMoYXJndiwgcGFyc2VPcHRpb25zKSB7XG4gICAgdGhpcy5fcHJlcGFyZUZvclBhcnNlKCk7XG4gICAgY29uc3QgdXNlckFyZ3MgPSB0aGlzLl9wcmVwYXJlVXNlckFyZ3MoYXJndiwgcGFyc2VPcHRpb25zKTtcbiAgICBhd2FpdCB0aGlzLl9wYXJzZUNvbW1hbmQoW10sIHVzZXJBcmdzKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgX3ByZXBhcmVGb3JQYXJzZSgpIHtcbiAgICBpZiAodGhpcy5fc2F2ZWRTdGF0ZSA9PT0gbnVsbCkge1xuICAgICAgdGhpcy5zYXZlU3RhdGVCZWZvcmVQYXJzZSgpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB0aGUgZmlyc3QgdGltZSBwYXJzZSBpcyBjYWxsZWQgdG8gc2F2ZSBzdGF0ZSBhbmQgYWxsb3cgYSByZXN0b3JlIGJlZm9yZSBzdWJzZXF1ZW50IGNhbGxzIHRvIHBhcnNlLlxuICAgKiBOb3QgdXN1YWxseSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBhdmFpbGFibGUgZm9yIHN1YmNsYXNzZXMgdG8gc2F2ZSB0aGVpciBjdXN0b20gc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGluIGEgbGF6eSB3YXkuIE9ubHkgY29tbWFuZHMgdXNlZCBpbiBwYXJzaW5nIGNoYWluIHdpbGwgaGF2ZSBzdGF0ZSBzYXZlZC5cbiAgICovXG4gIHNhdmVTdGF0ZUJlZm9yZVBhcnNlKCkge1xuICAgIHRoaXMuX3NhdmVkU3RhdGUgPSB7XG4gICAgICAvLyBuYW1lIGlzIHN0YWJsZSBpZiBzdXBwbGllZCBieSBhdXRob3IsIGJ1dCBtYXkgYmUgdW5zcGVjaWZpZWQgZm9yIHJvb3QgY29tbWFuZCBhbmQgZGVkdWNlZCBkdXJpbmcgcGFyc2luZ1xuICAgICAgX25hbWU6IHRoaXMuX25hbWUsXG4gICAgICAvLyBvcHRpb24gdmFsdWVzIGJlZm9yZSBwYXJzZSBoYXZlIGRlZmF1bHQgdmFsdWVzIChpbmNsdWRpbmcgZmFsc2UgZm9yIG5lZ2F0ZWQgb3B0aW9ucylcbiAgICAgIC8vIHNoYWxsb3cgY2xvbmVzXG4gICAgICBfb3B0aW9uVmFsdWVzOiB7IC4uLnRoaXMuX29wdGlvblZhbHVlcyB9LFxuICAgICAgX29wdGlvblZhbHVlU291cmNlczogeyAuLi50aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgfSxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc3RvcmUgc3RhdGUgYmVmb3JlIHBhcnNlIGZvciBjYWxscyBhZnRlciB0aGUgZmlyc3QuXG4gICAqIE5vdCB1c3VhbGx5IGNhbGxlZCBkaXJlY3RseSwgYnV0IGF2YWlsYWJsZSBmb3Igc3ViY2xhc3NlcyB0byBzYXZlIHRoZWlyIGN1c3RvbSBzdGF0ZS5cbiAgICpcbiAgICogVGhpcyBpcyBjYWxsZWQgaW4gYSBsYXp5IHdheS4gT25seSBjb21tYW5kcyB1c2VkIGluIHBhcnNpbmcgY2hhaW4gd2lsbCBoYXZlIHN0YXRlIHJlc3RvcmVkLlxuICAgKi9cbiAgcmVzdG9yZVN0YXRlQmVmb3JlUGFyc2UoKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcylcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCBjYWxsIHBhcnNlIGFnYWluIHdoZW4gc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzIGlzIHRydWUuXG4tIGVpdGhlciBtYWtlIGEgbmV3IENvbW1hbmQgZm9yIGVhY2ggY2FsbCB0byBwYXJzZSwgb3Igc3RvcCBzdG9yaW5nIG9wdGlvbnMgYXMgcHJvcGVydGllc2ApO1xuXG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBfcHJlcGFyZVVzZXJBcmdzXG4gICAgdGhpcy5fbmFtZSA9IHRoaXMuX3NhdmVkU3RhdGUuX25hbWU7XG4gICAgdGhpcy5fc2NyaXB0UGF0aCA9IG51bGw7XG4gICAgdGhpcy5yYXdBcmdzID0gW107XG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBzZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2VcbiAgICB0aGlzLl9vcHRpb25WYWx1ZXMgPSB7IC4uLnRoaXMuX3NhdmVkU3RhdGUuX29wdGlvblZhbHVlcyB9O1xuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlcyA9IHsgLi4udGhpcy5fc2F2ZWRTdGF0ZS5fb3B0aW9uVmFsdWVTb3VyY2VzIH07XG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBfcGFyc2VDb21tYW5kXG4gICAgdGhpcy5hcmdzID0gW107XG4gICAgLy8gY2xlYXIgc3RhdGUgZnJvbSBfcHJvY2Vzc0FyZ3VtZW50c1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIFRocm93IGlmIGV4cGVjdGVkIGV4ZWN1dGFibGUgaXMgbWlzc2luZy4gQWRkIGxvdHMgb2YgaGVscCBmb3IgYXV0aG9yLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXhlY3V0YWJsZUZpbGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4ZWN1dGFibGVEaXJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN1YmNvbW1hbmROYW1lXG4gICAqL1xuICBfY2hlY2tGb3JNaXNzaW5nRXhlY3V0YWJsZShleGVjdXRhYmxlRmlsZSwgZXhlY3V0YWJsZURpciwgc3ViY29tbWFuZE5hbWUpIHtcbiAgICBpZiAoZnMuZXhpc3RzU3luYyhleGVjdXRhYmxlRmlsZSkpIHJldHVybjtcblxuICAgIGNvbnN0IGV4ZWN1dGFibGVEaXJNZXNzYWdlID0gZXhlY3V0YWJsZURpclxuICAgICAgPyBgc2VhcmNoZWQgZm9yIGxvY2FsIHN1YmNvbW1hbmQgcmVsYXRpdmUgdG8gZGlyZWN0b3J5ICcke2V4ZWN1dGFibGVEaXJ9J2BcbiAgICAgIDogJ25vIGRpcmVjdG9yeSBmb3Igc2VhcmNoIGZvciBsb2NhbCBzdWJjb21tYW5kLCB1c2UgLmV4ZWN1dGFibGVEaXIoKSB0byBzdXBwbHkgYSBjdXN0b20gZGlyZWN0b3J5JztcbiAgICBjb25zdCBleGVjdXRhYmxlTWlzc2luZyA9IGAnJHtleGVjdXRhYmxlRmlsZX0nIGRvZXMgbm90IGV4aXN0XG4gLSBpZiAnJHtzdWJjb21tYW5kTmFtZX0nIGlzIG5vdCBtZWFudCB0byBiZSBhbiBleGVjdXRhYmxlIGNvbW1hbmQsIHJlbW92ZSBkZXNjcmlwdGlvbiBwYXJhbWV0ZXIgZnJvbSAnLmNvbW1hbmQoKScgYW5kIHVzZSAnLmRlc2NyaXB0aW9uKCknIGluc3RlYWRcbiAtIGlmIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUgbmFtZSBpcyBub3Qgc3VpdGFibGUsIHVzZSB0aGUgZXhlY3V0YWJsZUZpbGUgb3B0aW9uIHRvIHN1cHBseSBhIGN1c3RvbSBuYW1lIG9yIHBhdGhcbiAtICR7ZXhlY3V0YWJsZURpck1lc3NhZ2V9YDtcbiAgICB0aHJvdyBuZXcgRXJyb3IoZXhlY3V0YWJsZU1pc3NpbmcpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSBzdWItY29tbWFuZCBleGVjdXRhYmxlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhlY3V0ZVN1YkNvbW1hbmQoc3ViY29tbWFuZCwgYXJncykge1xuICAgIGFyZ3MgPSBhcmdzLnNsaWNlKCk7XG4gICAgbGV0IGxhdW5jaFdpdGhOb2RlID0gZmFsc2U7IC8vIFVzZSBub2RlIGZvciBzb3VyY2UgdGFyZ2V0cyBzbyBkbyBub3QgbmVlZCB0byBnZXQgcGVybWlzc2lvbnMgY29ycmVjdCwgYW5kIG9uIFdpbmRvd3MuXG4gICAgY29uc3Qgc291cmNlRXh0ID0gWycuanMnLCAnLnRzJywgJy50c3gnLCAnLm1qcycsICcuY2pzJ107XG5cbiAgICBmdW5jdGlvbiBmaW5kRmlsZShiYXNlRGlyLCBiYXNlTmFtZSkge1xuICAgICAgLy8gTG9vayBmb3Igc3BlY2lmaWVkIGZpbGVcbiAgICAgIGNvbnN0IGxvY2FsQmluID0gcGF0aC5yZXNvbHZlKGJhc2VEaXIsIGJhc2VOYW1lKTtcbiAgICAgIGlmIChmcy5leGlzdHNTeW5jKGxvY2FsQmluKSkgcmV0dXJuIGxvY2FsQmluO1xuXG4gICAgICAvLyBTdG9wIGxvb2tpbmcgaWYgY2FuZGlkYXRlIGFscmVhZHkgaGFzIGFuIGV4cGVjdGVkIGV4dGVuc2lvbi5cbiAgICAgIGlmIChzb3VyY2VFeHQuaW5jbHVkZXMocGF0aC5leHRuYW1lKGJhc2VOYW1lKSkpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICAgIC8vIFRyeSBhbGwgdGhlIGV4dGVuc2lvbnMuXG4gICAgICBjb25zdCBmb3VuZEV4dCA9IHNvdXJjZUV4dC5maW5kKChleHQpID0+XG4gICAgICAgIGZzLmV4aXN0c1N5bmMoYCR7bG9jYWxCaW59JHtleHR9YCksXG4gICAgICApO1xuICAgICAgaWYgKGZvdW5kRXh0KSByZXR1cm4gYCR7bG9jYWxCaW59JHtmb3VuZEV4dH1gO1xuXG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIE5vdCBjaGVja2luZyBmb3IgaGVscCBmaXJzdC4gVW5saWtlbHkgdG8gaGF2ZSBtYW5kYXRvcnkgYW5kIGV4ZWN1dGFibGUsIGFuZCBjYW4ndCByb2J1c3RseSB0ZXN0IGZvciBoZWxwIGZsYWdzIGluIGV4dGVybmFsIGNvbW1hbmQuXG4gICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpO1xuICAgIHRoaXMuX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCk7XG5cbiAgICAvLyBleGVjdXRhYmxlRmlsZSBhbmQgZXhlY3V0YWJsZURpciBtaWdodCBiZSBmdWxsIHBhdGgsIG9yIGp1c3QgYSBuYW1lXG4gICAgbGV0IGV4ZWN1dGFibGVGaWxlID1cbiAgICAgIHN1YmNvbW1hbmQuX2V4ZWN1dGFibGVGaWxlIHx8IGAke3RoaXMuX25hbWV9LSR7c3ViY29tbWFuZC5fbmFtZX1gO1xuICAgIGxldCBleGVjdXRhYmxlRGlyID0gdGhpcy5fZXhlY3V0YWJsZURpciB8fCAnJztcbiAgICBpZiAodGhpcy5fc2NyaXB0UGF0aCkge1xuICAgICAgbGV0IHJlc29sdmVkU2NyaXB0UGF0aDsgLy8gcmVzb2x2ZSBwb3NzaWJsZSBzeW1saW5rIGZvciBpbnN0YWxsZWQgbnBtIGJpbmFyeVxuICAgICAgdHJ5IHtcbiAgICAgICAgcmVzb2x2ZWRTY3JpcHRQYXRoID0gZnMucmVhbHBhdGhTeW5jKHRoaXMuX3NjcmlwdFBhdGgpO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJlc29sdmVkU2NyaXB0UGF0aCA9IHRoaXMuX3NjcmlwdFBhdGg7XG4gICAgICB9XG4gICAgICBleGVjdXRhYmxlRGlyID0gcGF0aC5yZXNvbHZlKFxuICAgICAgICBwYXRoLmRpcm5hbWUocmVzb2x2ZWRTY3JpcHRQYXRoKSxcbiAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gTG9vayBmb3IgYSBsb2NhbCBmaWxlIGluIHByZWZlcmVuY2UgdG8gYSBjb21tYW5kIGluIFBBVEguXG4gICAgaWYgKGV4ZWN1dGFibGVEaXIpIHtcbiAgICAgIGxldCBsb2NhbEZpbGUgPSBmaW5kRmlsZShleGVjdXRhYmxlRGlyLCBleGVjdXRhYmxlRmlsZSk7XG5cbiAgICAgIC8vIExlZ2FjeSBzZWFyY2ggdXNpbmcgcHJlZml4IG9mIHNjcmlwdCBuYW1lIGluc3RlYWQgb2YgY29tbWFuZCBuYW1lXG4gICAgICBpZiAoIWxvY2FsRmlsZSAmJiAhc3ViY29tbWFuZC5fZXhlY3V0YWJsZUZpbGUgJiYgdGhpcy5fc2NyaXB0UGF0aCkge1xuICAgICAgICBjb25zdCBsZWdhY3lOYW1lID0gcGF0aC5iYXNlbmFtZShcbiAgICAgICAgICB0aGlzLl9zY3JpcHRQYXRoLFxuICAgICAgICAgIHBhdGguZXh0bmFtZSh0aGlzLl9zY3JpcHRQYXRoKSxcbiAgICAgICAgKTtcbiAgICAgICAgaWYgKGxlZ2FjeU5hbWUgIT09IHRoaXMuX25hbWUpIHtcbiAgICAgICAgICBsb2NhbEZpbGUgPSBmaW5kRmlsZShcbiAgICAgICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgICAgICBgJHtsZWdhY3lOYW1lfS0ke3N1YmNvbW1hbmQuX25hbWV9YCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBleGVjdXRhYmxlRmlsZSA9IGxvY2FsRmlsZSB8fCBleGVjdXRhYmxlRmlsZTtcbiAgICB9XG5cbiAgICBsYXVuY2hXaXRoTm9kZSA9IHNvdXJjZUV4dC5pbmNsdWRlcyhwYXRoLmV4dG5hbWUoZXhlY3V0YWJsZUZpbGUpKTtcblxuICAgIGxldCBwcm9jO1xuICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtICE9PSAnd2luMzInKSB7XG4gICAgICBpZiAobGF1bmNoV2l0aE5vZGUpIHtcbiAgICAgICAgYXJncy51bnNoaWZ0KGV4ZWN1dGFibGVGaWxlKTtcbiAgICAgICAgLy8gYWRkIGV4ZWN1dGFibGUgYXJndW1lbnRzIHRvIHNwYXduXG4gICAgICAgIGFyZ3MgPSBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChwcm9jZXNzLmV4ZWNBcmd2KS5jb25jYXQoYXJncyk7XG5cbiAgICAgICAgcHJvYyA9IGNoaWxkUHJvY2Vzcy5zcGF3bihwcm9jZXNzLmFyZ3ZbMF0sIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24oZXhlY3V0YWJsZUZpbGUsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nRXhlY3V0YWJsZShcbiAgICAgICAgZXhlY3V0YWJsZUZpbGUsXG4gICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICAgIHN1YmNvbW1hbmQuX25hbWUsXG4gICAgICApO1xuICAgICAgYXJncy51bnNoaWZ0KGV4ZWN1dGFibGVGaWxlKTtcbiAgICAgIC8vIGFkZCBleGVjdXRhYmxlIGFyZ3VtZW50cyB0byBzcGF3blxuICAgICAgYXJncyA9IGluY3JlbWVudE5vZGVJbnNwZWN0b3JQb3J0KHByb2Nlc3MuZXhlY0FyZ3YpLmNvbmNhdChhcmdzKTtcbiAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24ocHJvY2Vzcy5leGVjUGF0aCwgYXJncywgeyBzdGRpbzogJ2luaGVyaXQnIH0pO1xuICAgIH1cblxuICAgIGlmICghcHJvYy5raWxsZWQpIHtcbiAgICAgIC8vIHRlc3RpbmcgbWFpbmx5IHRvIGF2b2lkIGxlYWsgd2FybmluZ3MgZHVyaW5nIHVuaXQgdGVzdHMgd2l0aCBtb2NrZWQgc3Bhd25cbiAgICAgIGNvbnN0IHNpZ25hbHMgPSBbJ1NJR1VTUjEnLCAnU0lHVVNSMicsICdTSUdURVJNJywgJ1NJR0lOVCcsICdTSUdIVVAnXTtcbiAgICAgIHNpZ25hbHMuZm9yRWFjaCgoc2lnbmFsKSA9PiB7XG4gICAgICAgIHByb2Nlc3Mub24oc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgaWYgKHByb2Mua2lsbGVkID09PSBmYWxzZSAmJiBwcm9jLmV4aXRDb2RlID09PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBAdHMtaWdub3JlIGJlY2F1c2Ugc2lnbmFscyBub3QgdHlwZWQgdG8ga25vd24gc3RyaW5nc1xuICAgICAgICAgICAgcHJvYy5raWxsKHNpZ25hbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIC8vIEJ5IGRlZmF1bHQgdGVybWluYXRlIHByb2Nlc3Mgd2hlbiBzcGF3bmVkIHByb2Nlc3MgdGVybWluYXRlcy5cbiAgICBjb25zdCBleGl0Q2FsbGJhY2sgPSB0aGlzLl9leGl0Q2FsbGJhY2s7XG4gICAgcHJvYy5vbignY2xvc2UnLCAoY29kZSkgPT4ge1xuICAgICAgY29kZSA9IGNvZGUgPz8gMTsgLy8gY29kZSBpcyBudWxsIGlmIHNwYXduZWQgcHJvY2VzcyB0ZXJtaW5hdGVkIGR1ZSB0byBhIHNpZ25hbFxuICAgICAgaWYgKCFleGl0Q2FsbGJhY2spIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KGNvZGUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXhpdENhbGxiYWNrKFxuICAgICAgICAgIG5ldyBDb21tYW5kZXJFcnJvcihcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnLFxuICAgICAgICAgICAgJyhjbG9zZSknLFxuICAgICAgICAgICksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcHJvYy5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGVyci5jb2RlIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VOT0VOVCcpIHtcbiAgICAgICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nRXhlY3V0YWJsZShcbiAgICAgICAgICBleGVjdXRhYmxlRmlsZSxcbiAgICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICAgIHN1YmNvbW1hbmQuX25hbWUsXG4gICAgICAgICk7XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZXJyLmNvZGUgaXMgYW4gdW5rbm93biBwcm9wZXJ0eVxuICAgICAgfSBlbHNlIGlmIChlcnIuY29kZSA9PT0gJ0VBQ0NFUycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAnJHtleGVjdXRhYmxlRmlsZX0nIG5vdCBleGVjdXRhYmxlYCk7XG4gICAgICB9XG4gICAgICBpZiAoIWV4aXRDYWxsYmFjaykge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB3cmFwcGVkRXJyb3IgPSBuZXcgQ29tbWFuZGVyRXJyb3IoXG4gICAgICAgICAgMSxcbiAgICAgICAgICAnY29tbWFuZGVyLmV4ZWN1dGVTdWJDb21tYW5kQXN5bmMnLFxuICAgICAgICAgICcoZXJyb3IpJyxcbiAgICAgICAgKTtcbiAgICAgICAgd3JhcHBlZEVycm9yLm5lc3RlZEVycm9yID0gZXJyO1xuICAgICAgICBleGl0Q2FsbGJhY2sod3JhcHBlZEVycm9yKTtcbiAgICAgIH1cbiAgICB9KTtcblxuICAgIC8vIFN0b3JlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGNoaWxkIHByb2Nlc3NcbiAgICB0aGlzLnJ1bm5pbmdDb21tYW5kID0gcHJvYztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZGlzcGF0Y2hTdWJjb21tYW5kKGNvbW1hbmROYW1lLCBvcGVyYW5kcywgdW5rbm93bikge1xuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSB0aGlzLl9maW5kQ29tbWFuZChjb21tYW5kTmFtZSk7XG4gICAgaWYgKCFzdWJDb21tYW5kKSB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcblxuICAgIHN1YkNvbW1hbmQuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGxldCBwcm9taXNlQ2hhaW47XG4gICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxTdWJDb21tYW5kSG9vayhcbiAgICAgIHByb21pc2VDaGFpbixcbiAgICAgIHN1YkNvbW1hbmQsXG4gICAgICAncHJlU3ViY29tbWFuZCcsXG4gICAgKTtcbiAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+IHtcbiAgICAgIGlmIChzdWJDb21tYW5kLl9leGVjdXRhYmxlSGFuZGxlcikge1xuICAgICAgICB0aGlzLl9leGVjdXRlU3ViQ29tbWFuZChzdWJDb21tYW5kLCBvcGVyYW5kcy5jb25jYXQodW5rbm93bikpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHN1YkNvbW1hbmQuX3BhcnNlQ29tbWFuZChvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHByb21pc2VDaGFpbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnZva2UgaGVscCBkaXJlY3RseSBpZiBwb3NzaWJsZSwgb3IgZGlzcGF0Y2ggaWYgbmVjZXNzYXJ5LlxuICAgKiBlLmcuIGhlbHAgZm9vXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9kaXNwYXRjaEhlbHBDb21tYW5kKHN1YmNvbW1hbmROYW1lKSB7XG4gICAgaWYgKCFzdWJjb21tYW5kTmFtZSkge1xuICAgICAgdGhpcy5oZWxwKCk7XG4gICAgfVxuICAgIGNvbnN0IHN1YkNvbW1hbmQgPSB0aGlzLl9maW5kQ29tbWFuZChzdWJjb21tYW5kTmFtZSk7XG4gICAgaWYgKHN1YkNvbW1hbmQgJiYgIXN1YkNvbW1hbmQuX2V4ZWN1dGFibGVIYW5kbGVyKSB7XG4gICAgICBzdWJDb21tYW5kLmhlbHAoKTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjayB0byBwYXJzaW5nIHRoZSBoZWxwIGZsYWcgdG8gaW52b2tlIHRoZSBoZWxwLlxuICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoXG4gICAgICBzdWJjb21tYW5kTmFtZSxcbiAgICAgIFtdLFxuICAgICAgW3RoaXMuX2dldEhlbHBPcHRpb24oKT8ubG9uZyA/PyB0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LnNob3J0ID8/ICctLWhlbHAnXSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrIHRoaXMuYXJncyBhZ2FpbnN0IGV4cGVjdGVkIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrTnVtYmVyT2ZBcmd1bWVudHMoKSB7XG4gICAgLy8gdG9vIGZld1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChhcmcsIGkpID0+IHtcbiAgICAgIGlmIChhcmcucmVxdWlyZWQgJiYgdGhpcy5hcmdzW2ldID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5taXNzaW5nQXJndW1lbnQoYXJnLm5hbWUoKSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgLy8gdG9vIG1hbnlcbiAgICBpZiAoXG4gICAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoID4gMCAmJlxuICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzW3RoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggLSAxXS52YXJpYWRpY1xuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5hcmdzLmxlbmd0aCA+IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuX2V4Y2Vzc0FyZ3VtZW50cyh0aGlzLmFyZ3MpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIHRoaXMuYXJncyB1c2luZyB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMgYW5kIHNhdmUgYXMgdGhpcy5wcm9jZXNzZWRBcmdzIVxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcHJvY2Vzc0FyZ3VtZW50cygpIHtcbiAgICBjb25zdCBteVBhcnNlQXJnID0gKGFyZ3VtZW50LCB2YWx1ZSwgcHJldmlvdXMpID0+IHtcbiAgICAgIC8vIEV4dHJhIHByb2Nlc3NpbmcgZm9yIG5pY2UgZXJyb3IgbWVzc2FnZSBvbiBwYXJzaW5nIGZhaWx1cmUuXG4gICAgICBsZXQgcGFyc2VkVmFsdWUgPSB2YWx1ZTtcbiAgICAgIGlmICh2YWx1ZSAhPT0gbnVsbCAmJiBhcmd1bWVudC5wYXJzZUFyZykge1xuICAgICAgICBjb25zdCBpbnZhbGlkVmFsdWVNZXNzYWdlID0gYGVycm9yOiBjb21tYW5kLWFyZ3VtZW50IHZhbHVlICcke3ZhbHVlfScgaXMgaW52YWxpZCBmb3IgYXJndW1lbnQgJyR7YXJndW1lbnQubmFtZSgpfScuYDtcbiAgICAgICAgcGFyc2VkVmFsdWUgPSB0aGlzLl9jYWxsUGFyc2VBcmcoXG4gICAgICAgICAgYXJndW1lbnQsXG4gICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgcHJldmlvdXMsXG4gICAgICAgICAgaW52YWxpZFZhbHVlTWVzc2FnZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJzZWRWYWx1ZTtcbiAgICB9O1xuXG4gICAgdGhpcy5fY2hlY2tOdW1iZXJPZkFyZ3VtZW50cygpO1xuXG4gICAgY29uc3QgcHJvY2Vzc2VkQXJncyA9IFtdO1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5mb3JFYWNoKChkZWNsYXJlZEFyZywgaW5kZXgpID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZTtcbiAgICAgIGlmIChkZWNsYXJlZEFyZy52YXJpYWRpYykge1xuICAgICAgICAvLyBDb2xsZWN0IHRvZ2V0aGVyIHJlbWFpbmluZyBhcmd1bWVudHMgZm9yIHBhc3NpbmcgdG9nZXRoZXIgYXMgYW4gYXJyYXkuXG4gICAgICAgIGlmIChpbmRleCA8IHRoaXMuYXJncy5sZW5ndGgpIHtcbiAgICAgICAgICB2YWx1ZSA9IHRoaXMuYXJncy5zbGljZShpbmRleCk7XG4gICAgICAgICAgaWYgKGRlY2xhcmVkQXJnLnBhcnNlQXJnKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlZHVjZSgocHJvY2Vzc2VkLCB2KSA9PiB7XG4gICAgICAgICAgICAgIHJldHVybiBteVBhcnNlQXJnKGRlY2xhcmVkQXJnLCB2LCBwcm9jZXNzZWQpO1xuICAgICAgICAgICAgfSwgZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHZhbHVlID0gW107XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaW5kZXggPCB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlID0gdGhpcy5hcmdzW2luZGV4XTtcbiAgICAgICAgaWYgKGRlY2xhcmVkQXJnLnBhcnNlQXJnKSB7XG4gICAgICAgICAgdmFsdWUgPSBteVBhcnNlQXJnKGRlY2xhcmVkQXJnLCB2YWx1ZSwgZGVjbGFyZWRBcmcuZGVmYXVsdFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHJvY2Vzc2VkQXJnc1tpbmRleF0gPSB2YWx1ZTtcbiAgICB9KTtcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBwcm9jZXNzZWRBcmdzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9uY2Ugd2UgaGF2ZSBhIHByb21pc2Ugd2UgY2hhaW4sIGJ1dCBjYWxsIHN5bmNocm9ub3VzbHkgdW50aWwgdGhlbi5cbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuXG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbChwcm9taXNlLCBmbikge1xuICAgIC8vIHRoZW5hYmxlXG4gICAgaWYgKHByb21pc2U/LnRoZW4gJiYgdHlwZW9mIHByb21pc2UudGhlbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gYWxyZWFkeSBoYXZlIGEgcHJvbWlzZSwgY2hhaW4gY2FsbGJhY2tcbiAgICAgIHJldHVybiBwcm9taXNlLnRoZW4oKCkgPT4gZm4oKSk7XG4gICAgfVxuICAgIC8vIGNhbGxiYWNrIG1pZ2h0IHJldHVybiBhIHByb21pc2VcbiAgICByZXR1cm4gZm4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyhQcm9taXNlfHVuZGVmaW5lZCl9IHByb21pc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEByZXR1cm4geyhQcm9taXNlfHVuZGVmaW5lZCl9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2UsIGV2ZW50KSB7XG4gICAgbGV0IHJlc3VsdCA9IHByb21pc2U7XG4gICAgY29uc3QgaG9va3MgPSBbXTtcbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKClcbiAgICAgIC5yZXZlcnNlKClcbiAgICAgIC5maWx0ZXIoKGNtZCkgPT4gY21kLl9saWZlQ3ljbGVIb29rc1tldmVudF0gIT09IHVuZGVmaW5lZClcbiAgICAgIC5mb3JFYWNoKChob29rZWRDb21tYW5kKSA9PiB7XG4gICAgICAgIGhvb2tlZENvbW1hbmQuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5mb3JFYWNoKChjYWxsYmFjaykgPT4ge1xuICAgICAgICAgIGhvb2tzLnB1c2goeyBob29rZWRDb21tYW5kLCBjYWxsYmFjayB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICBpZiAoZXZlbnQgPT09ICdwb3N0QWN0aW9uJykge1xuICAgICAgaG9va3MucmV2ZXJzZSgpO1xuICAgIH1cblxuICAgIGhvb2tzLmZvckVhY2goKGhvb2tEZXRhaWwpID0+IHtcbiAgICAgIHJlc3VsdCA9IHRoaXMuX2NoYWluT3JDYWxsKHJlc3VsdCwgKCkgPT4ge1xuICAgICAgICByZXR1cm4gaG9va0RldGFpbC5jYWxsYmFjayhob29rRGV0YWlsLmhvb2tlZENvbW1hbmQsIHRoaXMpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0geyhQcm9taXNlfHVuZGVmaW5lZCl9IHByb21pc2VcbiAgICogQHBhcmFtIHtDb21tYW5kfSBzdWJDb21tYW5kXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGxTdWJDb21tYW5kSG9vayhwcm9taXNlLCBzdWJDb21tYW5kLCBldmVudCkge1xuICAgIGxldCByZXN1bHQgPSBwcm9taXNlO1xuICAgIGlmICh0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdLmZvckVhY2goKGhvb2spID0+IHtcbiAgICAgICAgcmVzdWx0ID0gdGhpcy5fY2hhaW5PckNhbGwocmVzdWx0LCAoKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGhvb2sodGhpcywgc3ViQ29tbWFuZCk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyBhcmd1bWVudHMgaW4gY29udGV4dCBvZiB0aGlzIGNvbW1hbmQuXG4gICAqIFJldHVybnMgYWN0aW9uIHJlc3VsdCwgaW4gY2FzZSBpdCBpcyBhIHByb21pc2UuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9wYXJzZUNvbW1hbmQob3BlcmFuZHMsIHVua25vd24pIHtcbiAgICBjb25zdCBwYXJzZWQgPSB0aGlzLnBhcnNlT3B0aW9ucyh1bmtub3duKTtcbiAgICB0aGlzLl9wYXJzZU9wdGlvbnNFbnYoKTsgLy8gYWZ0ZXIgY2xpLCBzbyBwYXJzZUFyZyBub3QgY2FsbGVkIG9uIGJvdGggY2xpIGFuZCBlbnZcbiAgICB0aGlzLl9wYXJzZU9wdGlvbnNJbXBsaWVkKCk7XG4gICAgb3BlcmFuZHMgPSBvcGVyYW5kcy5jb25jYXQocGFyc2VkLm9wZXJhbmRzKTtcbiAgICB1bmtub3duID0gcGFyc2VkLnVua25vd247XG4gICAgdGhpcy5hcmdzID0gb3BlcmFuZHMuY29uY2F0KHVua25vd24pO1xuXG4gICAgaWYgKG9wZXJhbmRzICYmIHRoaXMuX2ZpbmRDb21tYW5kKG9wZXJhbmRzWzBdKSkge1xuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZChvcGVyYW5kc1swXSwgb3BlcmFuZHMuc2xpY2UoMSksIHVua25vd24pO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLl9nZXRIZWxwQ29tbWFuZCgpICYmXG4gICAgICBvcGVyYW5kc1swXSA9PT0gdGhpcy5fZ2V0SGVscENvbW1hbmQoKS5uYW1lKClcbiAgICApIHtcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaEhlbHBDb21tYW5kKG9wZXJhbmRzWzFdKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgdGhpcy5fb3V0cHV0SGVscElmUmVxdWVzdGVkKHVua25vd24pOyAvLyBSdW4gdGhlIGhlbHAgZm9yIGRlZmF1bHQgY29tbWFuZCBmcm9tIHBhcmVudCByYXRoZXIgdGhhbiBwYXNzaW5nIHRvIGRlZmF1bHQgY29tbWFuZFxuICAgICAgcmV0dXJuIHRoaXMuX2Rpc3BhdGNoU3ViY29tbWFuZChcbiAgICAgICAgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lLFxuICAgICAgICBvcGVyYW5kcyxcbiAgICAgICAgdW5rbm93bixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoICYmXG4gICAgICB0aGlzLmFyZ3MubGVuZ3RoID09PSAwICYmXG4gICAgICAhdGhpcy5fYWN0aW9uSGFuZGxlciAmJlxuICAgICAgIXRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZVxuICAgICkge1xuICAgICAgLy8gcHJvYmFibHkgbWlzc2luZyBzdWJjb21tYW5kIGFuZCBubyBoYW5kbGVyLCB1c2VyIG5lZWRzIGhlbHAgKGFuZCBleGl0KVxuICAgICAgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgdGhpcy5fb3V0cHV0SGVscElmUmVxdWVzdGVkKHBhcnNlZC51bmtub3duKTtcbiAgICB0aGlzLl9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCk7XG4gICAgdGhpcy5fY2hlY2tGb3JDb25mbGljdGluZ09wdGlvbnMoKTtcblxuICAgIC8vIFdlIGRvIG5vdCBhbHdheXMgY2FsbCB0aGlzIGNoZWNrIHRvIGF2b2lkIG1hc2tpbmcgYSBcImJldHRlclwiIGVycm9yLCBsaWtlIHVua25vd24gY29tbWFuZC5cbiAgICBjb25zdCBjaGVja0ZvclVua25vd25PcHRpb25zID0gKCkgPT4ge1xuICAgICAgaWYgKHBhcnNlZC51bmtub3duLmxlbmd0aCA+IDApIHtcbiAgICAgICAgdGhpcy51bmtub3duT3B0aW9uKHBhcnNlZC51bmtub3duWzBdKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY29tbWFuZEV2ZW50ID0gYGNvbW1hbmQ6JHt0aGlzLm5hbWUoKX1gO1xuICAgIGlmICh0aGlzLl9hY3Rpb25IYW5kbGVyKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG5cbiAgICAgIGxldCBwcm9taXNlQ2hhaW47XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2VDaGFpbiwgJ3ByZUFjdGlvbicpO1xuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PlxuICAgICAgICB0aGlzLl9hY3Rpb25IYW5kbGVyKHRoaXMucHJvY2Vzc2VkQXJncyksXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucGFyZW50LmVtaXQoY29tbWFuZEV2ZW50LCBvcGVyYW5kcywgdW5rbm93bik7IC8vIGxlZ2FjeVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsSG9va3MocHJvbWlzZUNoYWluLCAncG9zdEFjdGlvbicpO1xuICAgICAgcmV0dXJuIHByb21pc2VDaGFpbjtcbiAgICB9XG4gICAgaWYgKHRoaXMucGFyZW50Py5saXN0ZW5lckNvdW50KGNvbW1hbmRFdmVudCkpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIHRoaXMucGFyZW50LmVtaXQoY29tbWFuZEV2ZW50LCBvcGVyYW5kcywgdW5rbm93bik7IC8vIGxlZ2FjeVxuICAgIH0gZWxzZSBpZiAob3BlcmFuZHMubGVuZ3RoKSB7XG4gICAgICBpZiAodGhpcy5fZmluZENvbW1hbmQoJyonKSkge1xuICAgICAgICAvLyBsZWdhY3kgZGVmYXVsdCBjb21tYW5kXG4gICAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoJyonLCBvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdjb21tYW5kOionKSkge1xuICAgICAgICAvLyBza2lwIG9wdGlvbiBjaGVjaywgZW1pdCBldmVudCBmb3IgcG9zc2libGUgbWlzc3BlbGxpbmcgc3VnZ2VzdGlvblxuICAgICAgICB0aGlzLmVtaXQoJ2NvbW1hbmQ6KicsIG9wZXJhbmRzLCB1bmtub3duKTtcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy51bmtub3duQ29tbWFuZCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLmNvbW1hbmRzLmxlbmd0aCkge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgLy8gVGhpcyBjb21tYW5kIGhhcyBzdWJjb21tYW5kcyBhbmQgbm90aGluZyBob29rZWQgdXAgYXQgdGhpcyBsZXZlbCwgc28gZGlzcGxheSBoZWxwIChhbmQgZXhpdCkuXG4gICAgICB0aGlzLmhlbHAoeyBlcnJvcjogdHJ1ZSB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgLy8gZmFsbCB0aHJvdWdoIGZvciBjYWxsZXIgdG8gaGFuZGxlIGFmdGVyIGNhbGxpbmcgLnBhcnNlKClcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmluZCBtYXRjaGluZyBjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kIHwgdW5kZWZpbmVkfVxuICAgKi9cbiAgX2ZpbmRDb21tYW5kKG5hbWUpIHtcbiAgICBpZiAoIW5hbWUpIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHRoaXMuY29tbWFuZHMuZmluZChcbiAgICAgIChjbWQpID0+IGNtZC5fbmFtZSA9PT0gbmFtZSB8fCBjbWQuX2FsaWFzZXMuaW5jbHVkZXMobmFtZSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb3B0aW9uIG1hdGNoaW5nIGBhcmdgIGlmIGFueS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9maW5kT3B0aW9uKGFyZykge1xuICAgIHJldHVybiB0aGlzLm9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24uaXMoYXJnKSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGEgbWFuZGF0b3J5IG9wdGlvbiBkb2VzIG5vdCBoYXZlIGEgdmFsdWUuXG4gICAqIENhbGxlZCBhZnRlciBjaGVja2luZyBmb3IgaGVscCBmbGFncyBpbiBsZWFmIHN1YmNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja0Zvck1pc3NpbmdNYW5kYXRvcnlPcHRpb25zKCkge1xuICAgIC8vIFdhbGsgdXAgaGllcmFyY2h5IHNvIGNhbiBjYWxsIGluIHN1YmNvbW1hbmQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGRpc3BsYXlpbmcgaGVscC5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBjbWQub3B0aW9ucy5mb3JFYWNoKChhbk9wdGlvbikgPT4ge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgYW5PcHRpb24ubWFuZGF0b3J5ICYmXG4gICAgICAgICAgY21kLmdldE9wdGlvblZhbHVlKGFuT3B0aW9uLmF0dHJpYnV0ZU5hbWUoKSkgPT09IHVuZGVmaW5lZFxuICAgICAgICApIHtcbiAgICAgICAgICBjbWQubWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlKGFuT3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBhbiBlcnJvciBtZXNzYWdlIGlmIGNvbmZsaWN0aW5nIG9wdGlvbnMgYXJlIHVzZWQgdG9nZXRoZXIgaW4gdGhpcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0ZvckNvbmZsaWN0aW5nTG9jYWxPcHRpb25zKCkge1xuICAgIGNvbnN0IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucyA9IHRoaXMub3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gb3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGlmICh0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5nZXRPcHRpb25WYWx1ZVNvdXJjZShvcHRpb25LZXkpICE9PSAnZGVmYXVsdCc7XG4gICAgfSk7XG5cbiAgICBjb25zdCBvcHRpb25zV2l0aENvbmZsaWN0aW5nID0gZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zLmZpbHRlcihcbiAgICAgIChvcHRpb24pID0+IG9wdGlvbi5jb25mbGljdHNXaXRoLmxlbmd0aCA+IDAsXG4gICAgKTtcblxuICAgIG9wdGlvbnNXaXRoQ29uZmxpY3RpbmcuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBjb25mbGljdGluZ0FuZERlZmluZWQgPSBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMuZmluZCgoZGVmaW5lZCkgPT5cbiAgICAgICAgb3B0aW9uLmNvbmZsaWN0c1dpdGguaW5jbHVkZXMoZGVmaW5lZC5hdHRyaWJ1dGVOYW1lKCkpLFxuICAgICAgKTtcbiAgICAgIGlmIChjb25mbGljdGluZ0FuZERlZmluZWQpIHtcbiAgICAgICAgdGhpcy5fY29uZmxpY3RpbmdPcHRpb24ob3B0aW9uLCBjb25mbGljdGluZ0FuZERlZmluZWQpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSB1c2VkIHRvZ2V0aGVyLlxuICAgKiBDYWxsZWQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGhlbHAgZmxhZ3MgaW4gbGVhZiBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCkge1xuICAgIC8vIFdhbGsgdXAgaGllcmFyY2h5IHNvIGNhbiBjYWxsIGluIHN1YmNvbW1hbmQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGRpc3BsYXlpbmcgaGVscC5cbiAgICB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkuZm9yRWFjaCgoY21kKSA9PiB7XG4gICAgICBjbWQuX2NoZWNrRm9yQ29uZmxpY3RpbmdMb2NhbE9wdGlvbnMoKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBvcHRpb25zIGZyb20gYGFyZ3ZgIHJlbW92aW5nIGtub3duIG9wdGlvbnMsXG4gICAqIGFuZCByZXR1cm4gYXJndiBzcGxpdCBpbnRvIG9wZXJhbmRzIGFuZCB1bmtub3duIGFyZ3VtZW50cy5cbiAgICpcbiAgICogU2lkZSBlZmZlY3RzOiBtb2RpZmllcyBjb21tYW5kIGJ5IHN0b3Jpbmcgb3B0aW9ucy4gRG9lcyBub3QgcmVzZXQgc3RhdGUgaWYgY2FsbGVkIGFnYWluLlxuICAgKlxuICAgKiBFeGFtcGxlczpcbiAgICpcbiAgICogICAgIGFyZ3YgPT4gb3BlcmFuZHMsIHVua25vd25cbiAgICogICAgIC0ta25vd24ga2trIG9wID0+IFtvcF0sIFtdXG4gICAqICAgICBvcCAtLWtub3duIGtrayA9PiBbb3BdLCBbXVxuICAgKiAgICAgc3ViIC0tdW5rbm93biB1dXUgb3AgPT4gW3N1Yl0sIFstLXVua25vd24gdXV1IG9wXVxuICAgKiAgICAgc3ViIC0tIC0tdW5rbm93biB1dXUgb3AgPT4gW3N1YiAtLXVua25vd24gdXV1IG9wXSwgW11cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gYXJnc1xuICAgKiBAcmV0dXJuIHt7b3BlcmFuZHM6IHN0cmluZ1tdLCB1bmtub3duOiBzdHJpbmdbXX19XG4gICAqL1xuXG4gIHBhcnNlT3B0aW9ucyhhcmdzKSB7XG4gICAgY29uc3Qgb3BlcmFuZHMgPSBbXTsgLy8gb3BlcmFuZHMsIG5vdCBvcHRpb25zIG9yIHZhbHVlc1xuICAgIGNvbnN0IHVua25vd24gPSBbXTsgLy8gZmlyc3QgdW5rbm93biBvcHRpb24gYW5kIHJlbWFpbmluZyB1bmtub3duIGFyZ3NcbiAgICBsZXQgZGVzdCA9IG9wZXJhbmRzO1xuXG4gICAgZnVuY3Rpb24gbWF5YmVPcHRpb24oYXJnKSB7XG4gICAgICByZXR1cm4gYXJnLmxlbmd0aCA+IDEgJiYgYXJnWzBdID09PSAnLSc7XG4gICAgfVxuXG4gICAgY29uc3QgbmVnYXRpdmVOdW1iZXJBcmcgPSAoYXJnKSA9PiB7XG4gICAgICAvLyByZXR1cm4gZmFsc2UgaWYgbm90IGEgbmVnYXRpdmUgbnVtYmVyXG4gICAgICBpZiAoIS9eLVxcZCpcXC4/XFxkKyhlWystXT9cXGQrKT8kLy50ZXN0KGFyZykpIHJldHVybiBmYWxzZTtcbiAgICAgIC8vIG5lZ2F0aXZlIG51bWJlciBpcyBvayB1bmxlc3MgZGlnaXQgdXNlZCBhcyBhbiBvcHRpb24gaW4gY29tbWFuZCBoaWVyYXJjaHlcbiAgICAgIHJldHVybiAhdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLnNvbWUoKGNtZCkgPT5cbiAgICAgICAgY21kLm9wdGlvbnNcbiAgICAgICAgICAubWFwKChvcHQpID0+IG9wdC5zaG9ydClcbiAgICAgICAgICAuc29tZSgoc2hvcnQpID0+IC9eLVxcZCQvLnRlc3Qoc2hvcnQpKSxcbiAgICAgICk7XG4gICAgfTtcblxuICAgIC8vIHBhcnNlIG9wdGlvbnNcbiAgICBsZXQgYWN0aXZlVmFyaWFkaWNPcHRpb24gPSBudWxsO1xuICAgIGxldCBhY3RpdmVHcm91cCA9IG51bGw7IC8vIHdvcmtpbmcgdGhyb3VnaCBncm91cCBvZiBzaG9ydCBvcHRpb25zLCBsaWtlIC1hYmNcbiAgICBsZXQgaSA9IDA7XG4gICAgd2hpbGUgKGkgPCBhcmdzLmxlbmd0aCB8fCBhY3RpdmVHcm91cCkge1xuICAgICAgY29uc3QgYXJnID0gYWN0aXZlR3JvdXAgPz8gYXJnc1tpKytdO1xuICAgICAgYWN0aXZlR3JvdXAgPSBudWxsO1xuXG4gICAgICAvLyBsaXRlcmFsXG4gICAgICBpZiAoYXJnID09PSAnLS0nKSB7XG4gICAgICAgIGlmIChkZXN0ID09PSB1bmtub3duKSBkZXN0LnB1c2goYXJnKTtcbiAgICAgICAgZGVzdC5wdXNoKC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgaWYgKFxuICAgICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiAmJlxuICAgICAgICAoIW1heWJlT3B0aW9uKGFyZykgfHwgbmVnYXRpdmVOdW1iZXJBcmcoYXJnKSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke2FjdGl2ZVZhcmlhZGljT3B0aW9uLm5hbWUoKX1gLCBhcmcpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gbnVsbDtcblxuICAgICAgaWYgKG1heWJlT3B0aW9uKGFyZykpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5fZmluZE9wdGlvbihhcmcpO1xuICAgICAgICAvLyByZWNvZ25pc2VkIG9wdGlvbiwgY2FsbCBsaXN0ZW5lciB0byBhc3NpZ24gdmFsdWUgd2l0aCBwb3NzaWJsZSBjdXN0b20gcHJvY2Vzc2luZ1xuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgaWYgKG9wdGlvbi5yZXF1aXJlZCkge1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhcmdzW2krK107XG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdGhpcy5vcHRpb25NaXNzaW5nQXJndW1lbnQob3B0aW9uKTtcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCB2YWx1ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAvLyBoaXN0b3JpY2FsIGJlaGF2aW91ciBpcyBvcHRpb25hbCB2YWx1ZSBpcyBmb2xsb3dpbmcgYXJnIHVubGVzcyBhbiBvcHRpb25cbiAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgaSA8IGFyZ3MubGVuZ3RoICYmXG4gICAgICAgICAgICAgICghbWF5YmVPcHRpb24oYXJnc1tpXSkgfHwgbmVnYXRpdmVOdW1iZXJBcmcoYXJnc1tpXSkpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgdmFsdWUgPSBhcmdzW2krK107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuIGZsYWdcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gPSBvcHRpb24udmFyaWFkaWMgPyBvcHRpb24gOiBudWxsO1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvb2sgZm9yIGNvbWJvIG9wdGlvbnMgZm9sbG93aW5nIHNpbmdsZSBkYXNoLCBlYXQgZmlyc3Qgb25lIGlmIGtub3duLlxuICAgICAgaWYgKGFyZy5sZW5ndGggPiAyICYmIGFyZ1swXSA9PT0gJy0nICYmIGFyZ1sxXSAhPT0gJy0nKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYC0ke2FyZ1sxXX1gKTtcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIG9wdGlvbi5yZXF1aXJlZCB8fFxuICAgICAgICAgICAgKG9wdGlvbi5vcHRpb25hbCAmJiB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUpXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBvcHRpb24gd2l0aCB2YWx1ZSBmb2xsb3dpbmcgaW4gc2FtZSBhcmd1bWVudFxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIGFyZy5zbGljZSgyKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIGJvb2xlYW4gb3B0aW9uXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgICAvLyByZW1vdmUgdGhlIHByb2Nlc3NlZCBvcHRpb24gYW5kIGtlZXAgcHJvY2Vzc2luZyBncm91cFxuICAgICAgICAgICAgYWN0aXZlR3JvdXAgPSBgLSR7YXJnLnNsaWNlKDIpfWA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIExvb2sgZm9yIGtub3duIGxvbmcgZmxhZyB3aXRoIHZhbHVlLCBsaWtlIC0tZm9vPWJhclxuICAgICAgaWYgKC9eLS1bXj1dKz0vLnRlc3QoYXJnKSkge1xuICAgICAgICBjb25zdCBpbmRleCA9IGFyZy5pbmRleE9mKCc9Jyk7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYXJnLnNsaWNlKDAsIGluZGV4KSk7XG4gICAgICAgIGlmIChvcHRpb24gJiYgKG9wdGlvbi5yZXF1aXJlZCB8fCBvcHRpb24ub3B0aW9uYWwpKSB7XG4gICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIGFyZy5zbGljZShpbmRleCArIDEpKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBOb3QgYSByZWNvZ25pc2VkIG9wdGlvbiBieSB0aGlzIGNvbW1hbmQuXG4gICAgICAvLyBNaWdodCBiZSBhIGNvbW1hbmQtYXJndW1lbnQsIG9yIHN1YmNvbW1hbmQgb3B0aW9uLCBvciB1bmtub3duIG9wdGlvbiwgb3IgaGVscCBjb21tYW5kIG9yIG9wdGlvbi5cblxuICAgICAgLy8gQW4gdW5rbm93biBvcHRpb24gbWVhbnMgZnVydGhlciBhcmd1bWVudHMgYWxzbyBjbGFzc2lmaWVkIGFzIHVua25vd24gc28gY2FuIGJlIHJlcHJvY2Vzc2VkIGJ5IHN1YmNvbW1hbmRzLlxuICAgICAgLy8gQSBuZWdhdGl2ZSBudW1iZXIgaW4gYSBsZWFmIGNvbW1hbmQgaXMgbm90IGFuIHVua25vd24gb3B0aW9uLlxuICAgICAgaWYgKFxuICAgICAgICBkZXN0ID09PSBvcGVyYW5kcyAmJlxuICAgICAgICBtYXliZU9wdGlvbihhcmcpICYmXG4gICAgICAgICEodGhpcy5jb21tYW5kcy5sZW5ndGggPT09IDAgJiYgbmVnYXRpdmVOdW1iZXJBcmcoYXJnKSlcbiAgICAgICkge1xuICAgICAgICBkZXN0ID0gdW5rbm93bjtcbiAgICAgIH1cblxuICAgICAgLy8gSWYgdXNpbmcgcG9zaXRpb25hbE9wdGlvbnMsIHN0b3AgcHJvY2Vzc2luZyBvdXIgb3B0aW9ucyBhdCBzdWJjb21tYW5kLlxuICAgICAgaWYgKFxuICAgICAgICAodGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgfHwgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zKSAmJlxuICAgICAgICBvcGVyYW5kcy5sZW5ndGggPT09IDAgJiZcbiAgICAgICAgdW5rbm93bi5sZW5ndGggPT09IDBcbiAgICAgICkge1xuICAgICAgICBpZiAodGhpcy5fZmluZENvbW1hbmQoYXJnKSkge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2goYXJnKTtcbiAgICAgICAgICB1bmtub3duLnB1c2goLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgdGhpcy5fZ2V0SGVscENvbW1hbmQoKSAmJlxuICAgICAgICAgIGFyZyA9PT0gdGhpcy5fZ2V0SGVscENvbW1hbmQoKS5uYW1lKClcbiAgICAgICAgKSB7XG4gICAgICAgICAgb3BlcmFuZHMucHVzaChhcmcsIC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSkge1xuICAgICAgICAgIHVua25vd24ucHVzaChhcmcsIC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVzaW5nIHBhc3NUaHJvdWdoT3B0aW9ucywgc3RvcCBwcm9jZXNzaW5nIG9wdGlvbnMgYXQgZmlyc3QgY29tbWFuZC1hcmd1bWVudC5cbiAgICAgIGlmICh0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMpIHtcbiAgICAgICAgZGVzdC5wdXNoKGFyZywgLi4uYXJncy5zbGljZShpKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuXG4gICAgICAvLyBhZGQgYXJnXG4gICAgICBkZXN0LnB1c2goYXJnKTtcbiAgICB9XG5cbiAgICByZXR1cm4geyBvcGVyYW5kcywgdW5rbm93biB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBsb2NhbCBvcHRpb24gdmFsdWVzIGFzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3B0cygpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICAvLyBQcmVzZXJ2ZSBvcmlnaW5hbCBiZWhhdmlvdXIgc28gYmFja3dhcmRzIGNvbXBhdGlibGUgd2hlbiBzdGlsbCB1c2luZyBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCByZXN1bHQgPSB7fTtcbiAgICAgIGNvbnN0IGxlbiA9IHRoaXMub3B0aW9ucy5sZW5ndGg7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdGhpcy5vcHRpb25zW2ldLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgICAgcmVzdWx0W2tleV0gPVxuICAgICAgICAgIGtleSA9PT0gdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPyB0aGlzLl92ZXJzaW9uIDogdGhpc1trZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uVmFsdWVzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBhbiBvYmplY3QgY29udGFpbmluZyBtZXJnZWQgbG9jYWwgYW5kIGdsb2JhbCBvcHRpb24gdmFsdWVzIGFzIGtleS12YWx1ZSBwYWlycy5cbiAgICpcbiAgICogQHJldHVybiB7b2JqZWN0fVxuICAgKi9cbiAgb3B0c1dpdGhHbG9iYWxzKCkge1xuICAgIC8vIGdsb2JhbHMgb3ZlcndyaXRlIGxvY2Fsc1xuICAgIHJldHVybiB0aGlzLl9nZXRDb21tYW5kQW5kQW5jZXN0b3JzKCkucmVkdWNlKFxuICAgICAgKGNvbWJpbmVkT3B0aW9ucywgY21kKSA9PiBPYmplY3QuYXNzaWduKGNvbWJpbmVkT3B0aW9ucywgY21kLm9wdHMoKSksXG4gICAgICB7fSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCAob3IgY2FsbCBleGl0T3ZlcnJpZGUpLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2Vycm9yT3B0aW9uc11cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtlcnJvck9wdGlvbnMuY29kZV0gLSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge251bWJlcn0gW2Vycm9yT3B0aW9ucy5leGl0Q29kZV0gLSB1c2VkIHdpdGggcHJvY2Vzcy5leGl0XG4gICAqL1xuICBlcnJvcihtZXNzYWdlLCBlcnJvck9wdGlvbnMpIHtcbiAgICAvLyBvdXRwdXQgaGFuZGxpbmdcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLm91dHB1dEVycm9yKFxuICAgICAgYCR7bWVzc2FnZX1cXG5gLFxuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycixcbiAgICApO1xuICAgIGlmICh0eXBlb2YgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycihgJHt0aGlzLl9zaG93SGVscEFmdGVyRXJyb3J9XFxuYCk7XG4gICAgfSBlbHNlIGlmICh0aGlzLl9zaG93SGVscEFmdGVyRXJyb3IpIHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoJ1xcbicpO1xuICAgICAgdGhpcy5vdXRwdXRIZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgLy8gZXhpdCBoYW5kbGluZ1xuICAgIGNvbnN0IGNvbmZpZyA9IGVycm9yT3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBleGl0Q29kZSA9IGNvbmZpZy5leGl0Q29kZSB8fCAxO1xuICAgIGNvbnN0IGNvZGUgPSBjb25maWcuY29kZSB8fCAnY29tbWFuZGVyLmVycm9yJztcbiAgICB0aGlzLl9leGl0KGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbnkgb3B0aW9uIHJlbGF0ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzLCBpZiBvcHRpb24gZG9lc1xuICAgKiBub3QgaGF2ZSBhIHZhbHVlIGZyb20gY2xpIG9yIGNsaWVudCBjb2RlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3BhcnNlT3B0aW9uc0VudigpIHtcbiAgICB0aGlzLm9wdGlvbnMuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICBpZiAob3B0aW9uLmVudlZhciAmJiBvcHRpb24uZW52VmFyIGluIHByb2Nlc3MuZW52KSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICAgIC8vIFByaW9yaXR5IGNoZWNrLiBEbyBub3Qgb3ZlcndyaXRlIGNsaSBvciBvcHRpb25zIGZyb20gdW5rbm93biBzb3VyY2UgKGNsaWVudC1jb2RlKS5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgWydkZWZhdWx0JywgJ2NvbmZpZycsICdlbnYnXS5pbmNsdWRlcyhcbiAgICAgICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSxcbiAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQgfHwgb3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICAvLyBvcHRpb24gY2FuIHRha2UgYSB2YWx1ZVxuICAgICAgICAgICAgLy8ga2VlcCB2ZXJ5IHNpbXBsZSwgb3B0aW9uYWwgYWx3YXlzIHRha2VzIHZhbHVlXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbkVudjoke29wdGlvbi5uYW1lKCl9YCwgcHJvY2Vzcy5lbnZbb3B0aW9uLmVudlZhcl0pO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuXG4gICAgICAgICAgICAvLyBrZWVwIHZlcnkgc2ltcGxlLCBvbmx5IGNhcmUgdGhhdCBlbnZWYXIgZGVmaW5lZCBhbmQgbm90IHRoZSB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb25FbnY6JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGx5IGFueSBpbXBsaWVkIG9wdGlvbiB2YWx1ZXMsIGlmIG9wdGlvbiBpcyB1bmRlZmluZWQgb3IgZGVmYXVsdCB2YWx1ZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZU9wdGlvbnNJbXBsaWVkKCkge1xuICAgIGNvbnN0IGR1YWxIZWxwZXIgPSBuZXcgRHVhbE9wdGlvbnModGhpcy5vcHRpb25zKTtcbiAgICBjb25zdCBoYXNDdXN0b21PcHRpb25WYWx1ZSA9IChvcHRpb25LZXkpID0+IHtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KSAhPT0gdW5kZWZpbmVkICYmXG4gICAgICAgICFbJ2RlZmF1bHQnLCAnaW1wbGllZCddLmluY2x1ZGVzKHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSlcbiAgICAgICk7XG4gICAgfTtcbiAgICB0aGlzLm9wdGlvbnNcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChvcHRpb24pID0+XG4gICAgICAgICAgb3B0aW9uLmltcGxpZWQgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIGhhc0N1c3RvbU9wdGlvblZhbHVlKG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpICYmXG4gICAgICAgICAgZHVhbEhlbHBlci52YWx1ZUZyb21PcHRpb24oXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpLFxuICAgICAgICAgICAgb3B0aW9uLFxuICAgICAgICAgICksXG4gICAgICApXG4gICAgICAuZm9yRWFjaCgob3B0aW9uKSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKG9wdGlvbi5pbXBsaWVkKVxuICAgICAgICAgIC5maWx0ZXIoKGltcGxpZWRLZXkpID0+ICFoYXNDdXN0b21PcHRpb25WYWx1ZShpbXBsaWVkS2V5KSlcbiAgICAgICAgICAuZm9yRWFjaCgoaW1wbGllZEtleSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25WYWx1ZVdpdGhTb3VyY2UoXG4gICAgICAgICAgICAgIGltcGxpZWRLZXksXG4gICAgICAgICAgICAgIG9wdGlvbi5pbXBsaWVkW2ltcGxpZWRLZXldLFxuICAgICAgICAgICAgICAnaW1wbGllZCcsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQXJndW1lbnQgYG5hbWVgIGlzIG1pc3NpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG1pc3NpbmdBcmd1bWVudChuYW1lKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogbWlzc2luZyByZXF1aXJlZCBhcmd1bWVudCAnJHtuYW1lfSdgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm1pc3NpbmdBcmd1bWVudCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgaXMgbWlzc2luZyBhbiBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBvcHRpb25NaXNzaW5nQXJndW1lbnQob3B0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIGFyZ3VtZW50IG1pc3NpbmdgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm9wdGlvbk1pc3NpbmdBcmd1bWVudCcgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgZG9lcyBub3QgaGF2ZSBhIHZhbHVlLCBhbmQgaXMgYSBtYW5kYXRvcnkgb3B0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIG1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZShvcHRpb24pIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiByZXF1aXJlZCBvcHRpb24gJyR7b3B0aW9uLmZsYWdzfScgbm90IHNwZWNpZmllZGA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIubWlzc2luZ01hbmRhdG9yeU9wdGlvblZhbHVlJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBgT3B0aW9uYCBjb25mbGljdHMgd2l0aCBhbm90aGVyIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcGFyYW0ge09wdGlvbn0gY29uZmxpY3RpbmdPcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jb25mbGljdGluZ09wdGlvbihvcHRpb24sIGNvbmZsaWN0aW5nT3B0aW9uKSB7XG4gICAgLy8gVGhlIGNhbGxpbmcgY29kZSBkb2VzIG5vdCBrbm93IHdoZXRoZXIgYSBuZWdhdGVkIG9wdGlvbiBpcyB0aGUgc291cmNlIG9mIHRoZVxuICAgIC8vIHZhbHVlLCBzbyBkbyBzb21lIHdvcmsgdG8gdGFrZSBhbiBlZHVjYXRlZCBndWVzcy5cbiAgICBjb25zdCBmaW5kQmVzdE9wdGlvbkZyb21WYWx1ZSA9IChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBjb25zdCBvcHRpb25WYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUob3B0aW9uS2V5KTtcbiAgICAgIGNvbnN0IG5lZ2F0aXZlT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICAgICh0YXJnZXQpID0+IHRhcmdldC5uZWdhdGUgJiYgb3B0aW9uS2V5ID09PSB0YXJnZXQuYXR0cmlidXRlTmFtZSgpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHBvc2l0aXZlT3B0aW9uID0gdGhpcy5vcHRpb25zLmZpbmQoXG4gICAgICAgICh0YXJnZXQpID0+ICF0YXJnZXQubmVnYXRlICYmIG9wdGlvbktleSA9PT0gdGFyZ2V0LmF0dHJpYnV0ZU5hbWUoKSxcbiAgICAgICk7XG4gICAgICBpZiAoXG4gICAgICAgIG5lZ2F0aXZlT3B0aW9uICYmXG4gICAgICAgICgobmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnID09PSB1bmRlZmluZWQgJiYgb3B0aW9uVmFsdWUgPT09IGZhbHNlKSB8fFxuICAgICAgICAgIChuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICAgb3B0aW9uVmFsdWUgPT09IG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZykpXG4gICAgICApIHtcbiAgICAgICAgcmV0dXJuIG5lZ2F0aXZlT3B0aW9uO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHBvc2l0aXZlT3B0aW9uIHx8IG9wdGlvbjtcbiAgICB9O1xuXG4gICAgY29uc3QgZ2V0RXJyb3JNZXNzYWdlID0gKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgYmVzdE9wdGlvbiA9IGZpbmRCZXN0T3B0aW9uRnJvbVZhbHVlKG9wdGlvbik7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBiZXN0T3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICAgIGNvbnN0IHNvdXJjZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KTtcbiAgICAgIGlmIChzb3VyY2UgPT09ICdlbnYnKSB7XG4gICAgICAgIHJldHVybiBgZW52aXJvbm1lbnQgdmFyaWFibGUgJyR7YmVzdE9wdGlvbi5lbnZWYXJ9J2A7XG4gICAgICB9XG4gICAgICByZXR1cm4gYG9wdGlvbiAnJHtiZXN0T3B0aW9uLmZsYWdzfSdgO1xuICAgIH07XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiAke2dldEVycm9yTWVzc2FnZShvcHRpb24pfSBjYW5ub3QgYmUgdXNlZCB3aXRoICR7Z2V0RXJyb3JNZXNzYWdlKGNvbmZsaWN0aW5nT3B0aW9uKX1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLmNvbmZsaWN0aW5nT3B0aW9uJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmtub3duIG9wdGlvbiBgZmxhZ2AuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIHVua25vd25PcHRpb24oZmxhZykge1xuICAgIGlmICh0aGlzLl9hbGxvd1Vua25vd25PcHRpb24pIHJldHVybjtcbiAgICBsZXQgc3VnZ2VzdGlvbiA9ICcnO1xuXG4gICAgaWYgKGZsYWcuc3RhcnRzV2l0aCgnLS0nKSAmJiB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IpIHtcbiAgICAgIC8vIExvb3BpbmcgdG8gcGljayB1cCB0aGUgZ2xvYmFsIG9wdGlvbnMgdG9vXG4gICAgICBsZXQgY2FuZGlkYXRlRmxhZ3MgPSBbXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgbGV0IGNvbW1hbmQgPSB0aGlzO1xuICAgICAgZG8ge1xuICAgICAgICBjb25zdCBtb3JlRmxhZ3MgPSBjb21tYW5kXG4gICAgICAgICAgLmNyZWF0ZUhlbHAoKVxuICAgICAgICAgIC52aXNpYmxlT3B0aW9ucyhjb21tYW5kKVxuICAgICAgICAgIC5maWx0ZXIoKG9wdGlvbikgPT4gb3B0aW9uLmxvbmcpXG4gICAgICAgICAgLm1hcCgob3B0aW9uKSA9PiBvcHRpb24ubG9uZyk7XG4gICAgICAgIGNhbmRpZGF0ZUZsYWdzID0gY2FuZGlkYXRlRmxhZ3MuY29uY2F0KG1vcmVGbGFncyk7XG4gICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnBhcmVudDtcbiAgICAgIH0gd2hpbGUgKGNvbW1hbmQgJiYgIWNvbW1hbmQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zKTtcbiAgICAgIHN1Z2dlc3Rpb24gPSBzdWdnZXN0U2ltaWxhcihmbGFnLCBjYW5kaWRhdGVGbGFncyk7XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogdW5rbm93biBvcHRpb24gJyR7ZmxhZ30nJHtzdWdnZXN0aW9ufWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIudW5rbm93bk9wdGlvbicgfSk7XG4gIH1cblxuICAvKipcbiAgICogRXhjZXNzIGFyZ3VtZW50cywgbW9yZSB0aGFuIGV4cGVjdGVkLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSByZWNlaXZlZEFyZ3NcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4Y2Vzc0FyZ3VtZW50cyhyZWNlaXZlZEFyZ3MpIHtcbiAgICBpZiAodGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMpIHJldHVybjtcblxuICAgIGNvbnN0IGV4cGVjdGVkID0gdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aDtcbiAgICBjb25zdCBzID0gZXhwZWN0ZWQgPT09IDEgPyAnJyA6ICdzJztcbiAgICBjb25zdCBmb3JTdWJjb21tYW5kID0gdGhpcy5wYXJlbnQgPyBgIGZvciAnJHt0aGlzLm5hbWUoKX0nYCA6ICcnO1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHRvbyBtYW55IGFyZ3VtZW50cyR7Zm9yU3ViY29tbWFuZH0uIEV4cGVjdGVkICR7ZXhwZWN0ZWR9IGFyZ3VtZW50JHtzfSBidXQgZ290ICR7cmVjZWl2ZWRBcmdzLmxlbmd0aH0uYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5leGNlc3NBcmd1bWVudHMnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFVua25vd24gY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgdW5rbm93bkNvbW1hbmQoKSB7XG4gICAgY29uc3QgdW5rbm93bk5hbWUgPSB0aGlzLmFyZ3NbMF07XG4gICAgbGV0IHN1Z2dlc3Rpb24gPSAnJztcblxuICAgIGlmICh0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IpIHtcbiAgICAgIGNvbnN0IGNhbmRpZGF0ZU5hbWVzID0gW107XG4gICAgICB0aGlzLmNyZWF0ZUhlbHAoKVxuICAgICAgICAudmlzaWJsZUNvbW1hbmRzKHRoaXMpXG4gICAgICAgIC5mb3JFYWNoKChjb21tYW5kKSA9PiB7XG4gICAgICAgICAgY2FuZGlkYXRlTmFtZXMucHVzaChjb21tYW5kLm5hbWUoKSk7XG4gICAgICAgICAgLy8ganVzdCB2aXNpYmxlIGFsaWFzXG4gICAgICAgICAgaWYgKGNvbW1hbmQuYWxpYXMoKSkgY2FuZGlkYXRlTmFtZXMucHVzaChjb21tYW5kLmFsaWFzKCkpO1xuICAgICAgICB9KTtcbiAgICAgIHN1Z2dlc3Rpb24gPSBzdWdnZXN0U2ltaWxhcih1bmtub3duTmFtZSwgY2FuZGlkYXRlTmFtZXMpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHVua25vd24gY29tbWFuZCAnJHt1bmtub3duTmFtZX0nJHtzdWdnZXN0aW9ufWA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIudW5rbm93bkNvbW1hbmQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIHByb2dyYW0gdmVyc2lvbi5cbiAgICpcbiAgICogVGhpcyBtZXRob2QgYXV0by1yZWdpc3RlcnMgdGhlIFwiLVYsIC0tdmVyc2lvblwiIG9wdGlvbiB3aGljaCB3aWxsIHByaW50IHRoZSB2ZXJzaW9uIG51bWJlci5cbiAgICpcbiAgICogWW91IGNhbiBvcHRpb25hbGx5IHN1cHBseSB0aGUgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uIHRvIG92ZXJyaWRlIHRoZSBkZWZhdWx0cy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZmxhZ3NdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4geyh0aGlzIHwgc3RyaW5nIHwgdW5kZWZpbmVkKX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciB2ZXJzaW9uIHN0cmluZyBpZiBubyBhcmd1bWVudHNcbiAgICovXG5cbiAgdmVyc2lvbihzdHIsIGZsYWdzLCBkZXNjcmlwdGlvbikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX3ZlcnNpb247XG4gICAgdGhpcy5fdmVyc2lvbiA9IHN0cjtcbiAgICBmbGFncyA9IGZsYWdzIHx8ICctViwgLS12ZXJzaW9uJztcbiAgICBkZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICdvdXRwdXQgdGhlIHZlcnNpb24gbnVtYmVyJztcbiAgICBjb25zdCB2ZXJzaW9uT3B0aW9uID0gdGhpcy5jcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgICB0aGlzLl92ZXJzaW9uT3B0aW9uTmFtZSA9IHZlcnNpb25PcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgIHRoaXMuX3JlZ2lzdGVyT3B0aW9uKHZlcnNpb25PcHRpb24pO1xuXG4gICAgdGhpcy5vbignb3B0aW9uOicgKyB2ZXJzaW9uT3B0aW9uLm5hbWUoKSwgKCkgPT4ge1xuICAgICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZU91dChgJHtzdHJ9XFxuYCk7XG4gICAgICB0aGlzLl9leGl0KDAsICdjb21tYW5kZXIudmVyc2lvbicsIHN0cik7XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBkZXNjcmlwdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbYXJnc0Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cbiAgZGVzY3JpcHRpb24oc3RyLCBhcmdzRGVzY3JpcHRpb24pIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQgJiYgYXJnc0Rlc2NyaXB0aW9uID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gdGhpcy5fZGVzY3JpcHRpb247XG4gICAgdGhpcy5fZGVzY3JpcHRpb24gPSBzdHI7XG4gICAgaWYgKGFyZ3NEZXNjcmlwdGlvbikge1xuICAgICAgdGhpcy5fYXJnc0Rlc2NyaXB0aW9uID0gYXJnc0Rlc2NyaXB0aW9uO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIHN1bW1hcnkuIFVzZWQgd2hlbiBsaXN0ZWQgYXMgc3ViY29tbWFuZCBvZiBwYXJlbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cbiAgc3VtbWFyeShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9zdW1tYXJ5O1xuICAgIHRoaXMuX3N1bW1hcnkgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IGFuIGFsaWFzIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogWW91IG1heSBjYWxsIG1vcmUgdGhhbiBvbmNlIHRvIGFkZCBtdWx0aXBsZSBhbGlhc2VzLiBPbmx5IHRoZSBmaXJzdCBhbGlhcyBpcyBzaG93biBpbiB0aGUgYXV0by1nZW5lcmF0ZWQgaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFthbGlhc11cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgYWxpYXMoYWxpYXMpIHtcbiAgICBpZiAoYWxpYXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2FsaWFzZXNbMF07IC8vIGp1c3QgcmV0dXJuIGZpcnN0LCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcblxuICAgIC8qKiBAdHlwZSB7Q29tbWFuZH0gKi9cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBsZXQgY29tbWFuZCA9IHRoaXM7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggIT09IDAgJiZcbiAgICAgIHRoaXMuY29tbWFuZHNbdGhpcy5jb21tYW5kcy5sZW5ndGggLSAxXS5fZXhlY3V0YWJsZUhhbmRsZXJcbiAgICApIHtcbiAgICAgIC8vIGFzc3VtZSBhZGRpbmcgYWxpYXMgZm9yIGxhc3QgYWRkZWQgZXhlY3V0YWJsZSBzdWJjb21tYW5kLCByYXRoZXIgdGhhbiB0aGlzXG4gICAgICBjb21tYW5kID0gdGhpcy5jb21tYW5kc1t0aGlzLmNvbW1hbmRzLmxlbmd0aCAtIDFdO1xuICAgIH1cblxuICAgIGlmIChhbGlhcyA9PT0gY29tbWFuZC5fbmFtZSlcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbW1hbmQgYWxpYXMgY2FuJ3QgYmUgdGhlIHNhbWUgYXMgaXRzIG5hbWVcIik7XG4gICAgY29uc3QgbWF0Y2hpbmdDb21tYW5kID0gdGhpcy5wYXJlbnQ/Ll9maW5kQ29tbWFuZChhbGlhcyk7XG4gICAgaWYgKG1hdGNoaW5nQ29tbWFuZCkge1xuICAgICAgLy8gYy5mLiBfcmVnaXN0ZXJDb21tYW5kXG4gICAgICBjb25zdCBleGlzdGluZ0NtZCA9IFttYXRjaGluZ0NvbW1hbmQubmFtZSgpXVxuICAgICAgICAuY29uY2F0KG1hdGNoaW5nQ29tbWFuZC5hbGlhc2VzKCkpXG4gICAgICAgIC5qb2luKCd8Jyk7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBjYW5ub3QgYWRkIGFsaWFzICcke2FsaWFzfScgdG8gY29tbWFuZCAnJHt0aGlzLm5hbWUoKX0nIGFzIGFscmVhZHkgaGF2ZSBjb21tYW5kICcke2V4aXN0aW5nQ21kfSdgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb21tYW5kLl9hbGlhc2VzLnB1c2goYWxpYXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbGlhc2VzIGZvciB0aGUgY29tbWFuZC5cbiAgICpcbiAgICogT25seSB0aGUgZmlyc3QgYWxpYXMgaXMgc2hvd24gaW4gdGhlIGF1dG8tZ2VuZXJhdGVkIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthbGlhc2VzXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nW118Q29tbWFuZCl9XG4gICAqL1xuXG4gIGFsaWFzZXMoYWxpYXNlcykge1xuICAgIC8vIEdldHRlciBmb3IgdGhlIGFycmF5IG9mIGFsaWFzZXMgaXMgdGhlIG1haW4gcmVhc29uIGZvciBoYXZpbmcgYWxpYXNlcygpIGluIGFkZGl0aW9uIHRvIGFsaWFzKCkuXG4gICAgaWYgKGFsaWFzZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2FsaWFzZXM7XG5cbiAgICBhbGlhc2VzLmZvckVhY2goKGFsaWFzKSA9PiB0aGlzLmFsaWFzKGFsaWFzKSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IC8gZ2V0IHRoZSBjb21tYW5kIHVzYWdlIGBzdHJgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgdXNhZ2Uoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodGhpcy5fdXNhZ2UpIHJldHVybiB0aGlzLl91c2FnZTtcblxuICAgICAgY29uc3QgYXJncyA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5tYXAoKGFyZykgPT4ge1xuICAgICAgICByZXR1cm4gaHVtYW5SZWFkYWJsZUFyZ05hbWUoYXJnKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIFtdXG4gICAgICAgIC5jb25jYXQoXG4gICAgICAgICAgdGhpcy5vcHRpb25zLmxlbmd0aCB8fCB0aGlzLl9oZWxwT3B0aW9uICE9PSBudWxsID8gJ1tvcHRpb25zXScgOiBbXSxcbiAgICAgICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCA/ICdbY29tbWFuZF0nIDogW10sXG4gICAgICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCA/IGFyZ3MgOiBbXSxcbiAgICAgICAgKVxuICAgICAgICAuam9pbignICcpO1xuICAgIH1cblxuICAgIHRoaXMuX3VzYWdlID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBvciBzZXQgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcmV0dXJuIHsoc3RyaW5nfENvbW1hbmQpfVxuICAgKi9cblxuICBuYW1lKHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX25hbWU7XG4gICAgdGhpcy5fbmFtZSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IHRoZSBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIHRoaXMgc3ViY29tbWFuZCBpbiBwYXJlbnQgY29tbWFuZCdzIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaGVhZGluZ11cbiAgICogQHJldHVybiB7Q29tbWFuZCB8IHN0cmluZ31cbiAgICovXG5cbiAgaGVscEdyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5faGVscEdyb3VwSGVhZGluZyA/PyAnJztcbiAgICB0aGlzLl9oZWxwR3JvdXBIZWFkaW5nID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IHRoZSBkZWZhdWx0IGhlbHAgZ3JvdXAgaGVhZGluZyBmb3Igc3ViY29tbWFuZHMgYWRkZWQgdG8gdGhpcyBjb21tYW5kLlxuICAgKiAoVGhpcyBkb2VzIG5vdCBvdmVycmlkZSBhIGdyb3VwIHNldCBkaXJlY3RseSBvbiB0aGUgc3ViY29tbWFuZCB1c2luZyAuaGVscEdyb3VwKCkuKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmNvbW1hbmRzR3JvdXAoJ0RldmVsb3BtZW50IENvbW1hbmRzOik7XG4gICAqIHByb2dyYW0uY29tbWFuZCgnd2F0Y2gnKS4uLlxuICAgKiBwcm9ncmFtLmNvbW1hbmQoJ2xpbnQnKS4uLlxuICAgKiAuLi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtoZWFkaW5nXVxuICAgKiBAcmV0dXJucyB7Q29tbWFuZCB8IHN0cmluZ31cbiAgICovXG4gIGNvbW1hbmRzR3JvdXAoaGVhZGluZykge1xuICAgIGlmIChoZWFkaW5nID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID8/ICcnO1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPSBoZWFkaW5nO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldC9nZXQgdGhlIGRlZmF1bHQgaGVscCBncm91cCBoZWFkaW5nIGZvciBvcHRpb25zIGFkZGVkIHRvIHRoaXMgY29tbWFuZC5cbiAgICogKFRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgYSBncm91cCBzZXQgZGlyZWN0bHkgb24gdGhlIG9wdGlvbiB1c2luZyAuaGVscEdyb3VwKCkuKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtXG4gICAqICAgLm9wdGlvbnNHcm91cCgnRGV2ZWxvcG1lbnQgT3B0aW9uczonKVxuICAgKiAgIC5vcHRpb24oJy1kLCAtLWRlYnVnJywgJ291dHB1dCBleHRyYSBkZWJ1Z2dpbmcnKVxuICAgKiAgIC5vcHRpb24oJy1wLCAtLXByb2ZpbGUnLCAnb3V0cHV0IHByb2ZpbGluZyBpbmZvcm1hdGlvbicpXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaGVhZGluZ11cbiAgICogQHJldHVybnMge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuICBvcHRpb25zR3JvdXAoaGVhZGluZykge1xuICAgIGlmIChoZWFkaW5nID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgPz8gJyc7XG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdE9wdGlvbkdyb3VwKG9wdGlvbikge1xuICAgIGlmICh0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXAgJiYgIW9wdGlvbi5oZWxwR3JvdXBIZWFkaW5nKVxuICAgICAgb3B0aW9uLmhlbHBHcm91cCh0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXApO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfaW5pdENvbW1hbmRHcm91cChjbWQpIHtcbiAgICBpZiAodGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCAmJiAhY21kLmhlbHBHcm91cCgpKVxuICAgICAgY21kLmhlbHBHcm91cCh0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIG5hbWUgb2YgdGhlIGNvbW1hbmQgZnJvbSBzY3JpcHQgZmlsZW5hbWUsIHN1Y2ggYXMgcHJvY2Vzcy5hcmd2WzFdLFxuICAgKiBvciByZXF1aXJlLm1haW4uZmlsZW5hbWUsIG9yIF9fZmlsZW5hbWUuXG4gICAqXG4gICAqIChVc2VkIGludGVybmFsbHkgYW5kIHB1YmxpYyBhbHRob3VnaCBub3QgZG9jdW1lbnRlZCBpbiBSRUFETUUuKVxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLm5hbWVGcm9tRmlsZW5hbWUocmVxdWlyZS5tYWluLmZpbGVuYW1lKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZpbGVuYW1lXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9XG4gICAqL1xuXG4gIG5hbWVGcm9tRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICB0aGlzLl9uYW1lID0gcGF0aC5iYXNlbmFtZShmaWxlbmFtZSwgcGF0aC5leHRuYW1lKGZpbGVuYW1lKSk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBkaXJlY3RvcnkgZm9yIHNlYXJjaGluZyBmb3IgZXhlY3V0YWJsZSBzdWJjb21tYW5kcyBvZiB0aGlzIGNvbW1hbmQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uZXhlY3V0YWJsZURpcihfX2Rpcm5hbWUpO1xuICAgKiAvLyBvclxuICAgKiBwcm9ncmFtLmV4ZWN1dGFibGVEaXIoJ3N1YmNvbW1hbmRzJyk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbcGF0aF1cbiAgICogQHJldHVybiB7KHN0cmluZ3xudWxsfENvbW1hbmQpfVxuICAgKi9cblxuICBleGVjdXRhYmxlRGlyKHBhdGgpIHtcbiAgICBpZiAocGF0aCA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZXhlY3V0YWJsZURpcjtcbiAgICB0aGlzLl9leGVjdXRhYmxlRGlyID0gcGF0aDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gcHJvZ3JhbSBoZWxwIGRvY3VtZW50YXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9fSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JhcCBmb3Igc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgaGVscEluZm9ybWF0aW9uKGNvbnRleHRPcHRpb25zKSB7XG4gICAgY29uc3QgaGVscGVyID0gdGhpcy5jcmVhdGVIZWxwKCk7XG4gICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpO1xuICAgIGhlbHBlci5wcmVwYXJlQ29udGV4dCh7XG4gICAgICBlcnJvcjogY29udGV4dC5lcnJvcixcbiAgICAgIGhlbHBXaWR0aDogY29udGV4dC5oZWxwV2lkdGgsXG4gICAgICBvdXRwdXRIYXNDb2xvcnM6IGNvbnRleHQuaGFzQ29sb3JzLFxuICAgIH0pO1xuICAgIGNvbnN0IHRleHQgPSBoZWxwZXIuZm9ybWF0SGVscCh0aGlzLCBoZWxwZXIpO1xuICAgIGlmIChjb250ZXh0Lmhhc0NvbG9ycykgcmV0dXJuIHRleHQ7XG4gICAgcmV0dXJuIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uc3RyaXBDb2xvcih0ZXh0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAdHlwZWRlZiBIZWxwQ29udGV4dFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGVycm9yXG4gICAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBoZWxwV2lkdGhcbiAgICogQHByb3BlcnR5IHtib29sZWFufSBoYXNDb2xvcnNcbiAgICogQHByb3BlcnR5IHtmdW5jdGlvbn0gd3JpdGUgLSBpbmNsdWRlcyBzdHJpcENvbG9yIGlmIG5lZWRlZFxuICAgKlxuICAgKiBAcmV0dXJucyB7SGVscENvbnRleHR9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKSB7XG4gICAgY29udGV4dE9wdGlvbnMgPSBjb250ZXh0T3B0aW9ucyB8fCB7fTtcbiAgICBjb25zdCBlcnJvciA9ICEhY29udGV4dE9wdGlvbnMuZXJyb3I7XG4gICAgbGV0IGJhc2VXcml0ZTtcbiAgICBsZXQgaGFzQ29sb3JzO1xuICAgIGxldCBoZWxwV2lkdGg7XG4gICAgaWYgKGVycm9yKSB7XG4gICAgICBiYXNlV3JpdGUgPSAoc3RyKSA9PiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKHN0cik7XG4gICAgICBoYXNDb2xvcnMgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldEVyckhhc0NvbG9ycygpO1xuICAgICAgaGVscFdpZHRoID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRFcnJIZWxwV2lkdGgoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYmFzZVdyaXRlID0gKHN0cikgPT4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZU91dChzdHIpO1xuICAgICAgaGFzQ29sb3JzID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRPdXRIYXNDb2xvcnMoKTtcbiAgICAgIGhlbHBXaWR0aCA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0T3V0SGVscFdpZHRoKCk7XG4gICAgfVxuICAgIGNvbnN0IHdyaXRlID0gKHN0cikgPT4ge1xuICAgICAgaWYgKCFoYXNDb2xvcnMpIHN0ciA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uc3RyaXBDb2xvcihzdHIpO1xuICAgICAgcmV0dXJuIGJhc2VXcml0ZShzdHIpO1xuICAgIH07XG4gICAgcmV0dXJuIHsgZXJyb3IsIHdyaXRlLCBoYXNDb2xvcnMsIGhlbHBXaWR0aCB9O1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGZvciB0aGlzIGNvbW1hbmQuXG4gICAqXG4gICAqIE91dHB1dHMgYnVpbHQtaW4gaGVscCwgYW5kIGN1c3RvbSB0ZXh0IGFkZGVkIHVzaW5nIGAuYWRkSGVscFRleHQoKWAuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcjogYm9vbGVhbiB9IHwgRnVuY3Rpb259IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICovXG5cbiAgb3V0cHV0SGVscChjb250ZXh0T3B0aW9ucykge1xuICAgIGxldCBkZXByZWNhdGVkQ2FsbGJhY2s7XG4gICAgaWYgKHR5cGVvZiBjb250ZXh0T3B0aW9ucyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgZGVwcmVjYXRlZENhbGxiYWNrID0gY29udGV4dE9wdGlvbnM7XG4gICAgICBjb250ZXh0T3B0aW9ucyA9IHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRwdXRDb250ZXh0ID0gdGhpcy5fZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucyk7XG4gICAgLyoqIEB0eXBlIHtIZWxwVGV4dEV2ZW50Q29udGV4dH0gKi9cbiAgICBjb25zdCBldmVudENvbnRleHQgPSB7XG4gICAgICBlcnJvcjogb3V0cHV0Q29udGV4dC5lcnJvcixcbiAgICAgIHdyaXRlOiBvdXRwdXRDb250ZXh0LndyaXRlLFxuICAgICAgY29tbWFuZDogdGhpcyxcbiAgICB9O1xuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZm9yRWFjaCgoY29tbWFuZCkgPT4gY29tbWFuZC5lbWl0KCdiZWZvcmVBbGxIZWxwJywgZXZlbnRDb250ZXh0KSk7XG4gICAgdGhpcy5lbWl0KCdiZWZvcmVIZWxwJywgZXZlbnRDb250ZXh0KTtcblxuICAgIGxldCBoZWxwSW5mb3JtYXRpb24gPSB0aGlzLmhlbHBJbmZvcm1hdGlvbih7IGVycm9yOiBvdXRwdXRDb250ZXh0LmVycm9yIH0pO1xuICAgIGlmIChkZXByZWNhdGVkQ2FsbGJhY2spIHtcbiAgICAgIGhlbHBJbmZvcm1hdGlvbiA9IGRlcHJlY2F0ZWRDYWxsYmFjayhoZWxwSW5mb3JtYXRpb24pO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgaGVscEluZm9ybWF0aW9uICE9PSAnc3RyaW5nJyAmJlxuICAgICAgICAhQnVmZmVyLmlzQnVmZmVyKGhlbHBJbmZvcm1hdGlvbilcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ291dHB1dEhlbHAgY2FsbGJhY2sgbXVzdCByZXR1cm4gYSBzdHJpbmcgb3IgYSBCdWZmZXInKTtcbiAgICAgIH1cbiAgICB9XG4gICAgb3V0cHV0Q29udGV4dC53cml0ZShoZWxwSW5mb3JtYXRpb24pO1xuXG4gICAgaWYgKHRoaXMuX2dldEhlbHBPcHRpb24oKT8ubG9uZykge1xuICAgICAgdGhpcy5lbWl0KHRoaXMuX2dldEhlbHBPcHRpb24oKS5sb25nKTsgLy8gZGVwcmVjYXRlZFxuICAgIH1cbiAgICB0aGlzLmVtaXQoJ2FmdGVySGVscCcsIGV2ZW50Q29udGV4dCk7XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNvbW1hbmQpID0+XG4gICAgICBjb21tYW5kLmVtaXQoJ2FmdGVyQWxsSGVscCcsIGV2ZW50Q29udGV4dCksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBZb3UgY2FuIHBhc3MgaW4gZmxhZ3MgYW5kIGEgZGVzY3JpcHRpb24gdG8gY3VzdG9taXNlIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICogUGFzcyBpbiBmYWxzZSB0byBkaXNhYmxlIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5oZWxwT3B0aW9uKCctPywgLS1oZWxwJyAnc2hvdyBoZWxwJyk7IC8vIGN1c3RvbWlzZVxuICAgKiBwcm9ncmFtLmhlbHBPcHRpb24oZmFsc2UpOyAvLyBkaXNhYmxlXG4gICAqXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IGJvb2xlYW4pfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaGVscE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICAvLyBTdXBwb3J0IGVuYWJsaW5nL2Rpc2FibGluZyBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnYm9vbGVhbicpIHtcbiAgICAgIGlmIChmbGFncykge1xuICAgICAgICBpZiAodGhpcy5faGVscE9wdGlvbiA9PT0gbnVsbCkgdGhpcy5faGVscE9wdGlvbiA9IHVuZGVmaW5lZDsgLy8gcmVlbmFibGVcbiAgICAgICAgaWYgKHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCkge1xuICAgICAgICAgIC8vIG1ha2UgdGhlIG9wdGlvbiB0byBzdG9yZSB0aGUgZ3JvdXBcbiAgICAgICAgICB0aGlzLl9pbml0T3B0aW9uR3JvdXAodGhpcy5fZ2V0SGVscE9wdGlvbigpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faGVscE9wdGlvbiA9IG51bGw7IC8vIGRpc2FibGVcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8vIEN1c3RvbWlzZSBmbGFncyBhbmQgZGVzY3JpcHRpb24uXG4gICAgdGhpcy5faGVscE9wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uKFxuICAgICAgZmxhZ3MgPz8gJy1oLCAtLWhlbHAnLFxuICAgICAgZGVzY3JpcHRpb24gPz8gJ2Rpc3BsYXkgaGVscCBmb3IgY29tbWFuZCcsXG4gICAgKTtcbiAgICAvLyBpbml0IGdyb3VwIHVubGVzcyBsYXp5IGNyZWF0ZVxuICAgIGlmIChmbGFncyB8fCBkZXNjcmlwdGlvbikgdGhpcy5faW5pdE9wdGlvbkdyb3VwKHRoaXMuX2hlbHBPcHRpb24pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTGF6eSBjcmVhdGUgaGVscCBvcHRpb24uXG4gICAqIFJldHVybnMgbnVsbCBpZiBoYXMgYmVlbiBkaXNhYmxlZCB3aXRoIC5oZWxwT3B0aW9uKGZhbHNlKS5cbiAgICpcbiAgICogQHJldHVybnMgeyhPcHRpb24gfCBudWxsKX0gdGhlIGhlbHAgb3B0aW9uXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuICBfZ2V0SGVscE9wdGlvbigpIHtcbiAgICAvLyBMYXp5IGNyZWF0ZSBoZWxwIG9wdGlvbiBvbiBkZW1hbmQuXG4gICAgaWYgKHRoaXMuX2hlbHBPcHRpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5oZWxwT3B0aW9uKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX2hlbHBPcHRpb247XG4gIH1cblxuICAvKipcbiAgICogU3VwcGx5IHlvdXIgb3duIG9wdGlvbiB0byB1c2UgZm9yIHRoZSBidWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICogVGhpcyBpcyBhbiBhbHRlcm5hdGl2ZSB0byB1c2luZyBoZWxwT3B0aW9uKCkgdG8gY3VzdG9taXNlIHRoZSBmbGFncyBhbmQgZGVzY3JpcHRpb24gZXRjLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkSGVscE9wdGlvbihvcHRpb24pIHtcbiAgICB0aGlzLl9oZWxwT3B0aW9uID0gb3B0aW9uO1xuICAgIHRoaXMuX2luaXRPcHRpb25Hcm91cChvcHRpb24pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGFuZCBleGl0LlxuICAgKlxuICAgKiBPdXRwdXRzIGJ1aWx0LWluIGhlbHAsIGFuZCBjdXN0b20gdGV4dCBhZGRlZCB1c2luZyBgLmFkZEhlbHBUZXh0KClgLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfX0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyaXRlIHRvIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKi9cblxuICBoZWxwKGNvbnRleHRPcHRpb25zKSB7XG4gICAgdGhpcy5vdXRwdXRIZWxwKGNvbnRleHRPcHRpb25zKTtcbiAgICBsZXQgZXhpdENvZGUgPSBOdW1iZXIocHJvY2Vzcy5leGl0Q29kZSA/PyAwKTsgLy8gcHJvY2Vzcy5leGl0Q29kZSBkb2VzIGFsbG93IGEgc3RyaW5nIG9yIGFuIGludGVnZXIsIGJ1dCB3ZSBwcmVmZXIganVzdCBhIG51bWJlclxuICAgIGlmIChcbiAgICAgIGV4aXRDb2RlID09PSAwICYmXG4gICAgICBjb250ZXh0T3B0aW9ucyAmJlxuICAgICAgdHlwZW9mIGNvbnRleHRPcHRpb25zICE9PSAnZnVuY3Rpb24nICYmXG4gICAgICBjb250ZXh0T3B0aW9ucy5lcnJvclxuICAgICkge1xuICAgICAgZXhpdENvZGUgPSAxO1xuICAgIH1cbiAgICAvLyBtZXNzYWdlOiBkbyBub3QgaGF2ZSBhbGwgZGlzcGxheWVkIHRleHQgYXZhaWxhYmxlIHNvIG9ubHkgcGFzc2luZyBwbGFjZWhvbGRlci5cbiAgICB0aGlzLl9leGl0KGV4aXRDb2RlLCAnY29tbWFuZGVyLmhlbHAnLCAnKG91dHB1dEhlbHApJyk7XG4gIH1cblxuICAvKipcbiAgICogLy8gRG8gYSBsaXR0bGUgdHlwaW5nIHRvIGNvb3JkaW5hdGUgZW1pdCBhbmQgbGlzdGVuZXIgZm9yIHRoZSBoZWxwIHRleHQgZXZlbnRzLlxuICAgKiBAdHlwZWRlZiBIZWxwVGV4dEV2ZW50Q29udGV4dFxuICAgKiBAdHlwZSB7b2JqZWN0fVxuICAgKiBAcHJvcGVydHkge2Jvb2xlYW59IGVycm9yXG4gICAqIEBwcm9wZXJ0eSB7Q29tbWFuZH0gY29tbWFuZFxuICAgKiBAcHJvcGVydHkge2Z1bmN0aW9ufSB3cml0ZVxuICAgKi9cblxuICAvKipcbiAgICogQWRkIGFkZGl0aW9uYWwgdGV4dCB0byBiZSBkaXNwbGF5ZWQgd2l0aCB0aGUgYnVpbHQtaW4gaGVscC5cbiAgICpcbiAgICogUG9zaXRpb24gaXMgJ2JlZm9yZScgb3IgJ2FmdGVyJyB0byBhZmZlY3QganVzdCB0aGlzIGNvbW1hbmQsXG4gICAqIGFuZCAnYmVmb3JlQWxsJyBvciAnYWZ0ZXJBbGwnIHRvIGFmZmVjdCB0aGlzIGNvbW1hbmQgYW5kIGFsbCBpdHMgc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwb3NpdGlvbiAtIGJlZm9yZSBvciBhZnRlciBidWlsdC1pbiBoZWxwXG4gICAqIEBwYXJhbSB7KHN0cmluZyB8IEZ1bmN0aW9uKX0gdGV4dCAtIHN0cmluZyB0byBhZGQsIG9yIGEgZnVuY3Rpb24gcmV0dXJuaW5nIGEgc3RyaW5nXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhZGRIZWxwVGV4dChwb3NpdGlvbiwgdGV4dCkge1xuICAgIGNvbnN0IGFsbG93ZWRWYWx1ZXMgPSBbJ2JlZm9yZUFsbCcsICdiZWZvcmUnLCAnYWZ0ZXInLCAnYWZ0ZXJBbGwnXTtcbiAgICBpZiAoIWFsbG93ZWRWYWx1ZXMuaW5jbHVkZXMocG9zaXRpb24pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIHBvc2l0aW9uIHRvIGFkZEhlbHBUZXh0LlxuRXhwZWN0aW5nIG9uZSBvZiAnJHthbGxvd2VkVmFsdWVzLmpvaW4oXCInLCAnXCIpfSdgKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWxwRXZlbnQgPSBgJHtwb3NpdGlvbn1IZWxwYDtcbiAgICB0aGlzLm9uKGhlbHBFdmVudCwgKC8qKiBAdHlwZSB7SGVscFRleHRFdmVudENvbnRleHR9ICovIGNvbnRleHQpID0+IHtcbiAgICAgIGxldCBoZWxwU3RyO1xuICAgICAgaWYgKHR5cGVvZiB0ZXh0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGhlbHBTdHIgPSB0ZXh0KHsgZXJyb3I6IGNvbnRleHQuZXJyb3IsIGNvbW1hbmQ6IGNvbnRleHQuY29tbWFuZCB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGhlbHBTdHIgPSB0ZXh0O1xuICAgICAgfVxuICAgICAgLy8gSWdub3JlIGZhbHN5IHZhbHVlIHdoZW4gbm90aGluZyB0byBvdXRwdXQuXG4gICAgICBpZiAoaGVscFN0cikge1xuICAgICAgICBjb250ZXh0LndyaXRlKGAke2hlbHBTdHJ9XFxuYCk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT3V0cHV0IGhlbHAgaW5mb3JtYXRpb24gaWYgaGVscCBmbGFncyBzcGVjaWZpZWRcbiAgICpcbiAgICogQHBhcmFtIHtBcnJheX0gYXJncyAtIGFycmF5IG9mIG9wdGlvbnMgdG8gc2VhcmNoIGZvciBoZWxwIGZsYWdzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9vdXRwdXRIZWxwSWZSZXF1ZXN0ZWQoYXJncykge1xuICAgIGNvbnN0IGhlbHBPcHRpb24gPSB0aGlzLl9nZXRIZWxwT3B0aW9uKCk7XG4gICAgY29uc3QgaGVscFJlcXVlc3RlZCA9IGhlbHBPcHRpb24gJiYgYXJncy5maW5kKChhcmcpID0+IGhlbHBPcHRpb24uaXMoYXJnKSk7XG4gICAgaWYgKGhlbHBSZXF1ZXN0ZWQpIHtcbiAgICAgIHRoaXMub3V0cHV0SGVscCgpO1xuICAgICAgLy8gKERvIG5vdCBoYXZlIGFsbCBkaXNwbGF5ZWQgdGV4dCBhdmFpbGFibGUgc28gb25seSBwYXNzaW5nIHBsYWNlaG9sZGVyLilcbiAgICAgIHRoaXMuX2V4aXQoMCwgJ2NvbW1hbmRlci5oZWxwRGlzcGxheWVkJywgJyhvdXRwdXRIZWxwKScpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNjYW4gYXJndW1lbnRzIGFuZCBpbmNyZW1lbnQgcG9ydCBudW1iZXIgZm9yIGluc3BlY3QgY2FsbHMgKHRvIGF2b2lkIGNvbmZsaWN0cyB3aGVuIHNwYXduaW5nIG5ldyBjb21tYW5kKS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ1tdfSBhcmdzIC0gYXJyYXkgb2YgYXJndW1lbnRzIGZyb20gbm9kZS5leGVjQXJndlxuICogQHJldHVybnMge3N0cmluZ1tdfVxuICogQHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChhcmdzKSB7XG4gIC8vIFRlc3RpbmcgZm9yIHRoZXNlIG9wdGlvbnM6XG4gIC8vICAtLWluc3BlY3RbPVtob3N0Ol1wb3J0XVxuICAvLyAgLS1pbnNwZWN0LWJya1s9W2hvc3Q6XXBvcnRdXG4gIC8vICAtLWluc3BlY3QtcG9ydD1baG9zdDpdcG9ydFxuICByZXR1cm4gYXJncy5tYXAoKGFyZykgPT4ge1xuICAgIGlmICghYXJnLnN0YXJ0c1dpdGgoJy0taW5zcGVjdCcpKSB7XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH1cbiAgICBsZXQgZGVidWdPcHRpb247XG4gICAgbGV0IGRlYnVnSG9zdCA9ICcxMjcuMC4wLjEnO1xuICAgIGxldCBkZWJ1Z1BvcnQgPSAnOTIyOSc7XG4gICAgbGV0IG1hdGNoO1xuICAgIGlmICgobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmspPykkLykpICE9PSBudWxsKSB7XG4gICAgICAvLyBlLmcuIC0taW5zcGVjdFxuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrfC1wb3J0KT8pPShbXjpdKykkLykpICE9PSBudWxsXG4gICAgKSB7XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgICAgaWYgKC9eXFxkKyQvLnRlc3QobWF0Y2hbM10pKSB7XG4gICAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PTEyMzRcbiAgICAgICAgZGVidWdQb3J0ID0gbWF0Y2hbM107XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBlLmcuIC0taW5zcGVjdD1sb2NhbGhvc3RcbiAgICAgICAgZGVidWdIb3N0ID0gbWF0Y2hbM107XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJya3wtcG9ydCk/KT0oW146XSspOihcXGQrKSQvKSkgIT09IG51bGxcbiAgICApIHtcbiAgICAgIC8vIGUuZy4gLS1pbnNwZWN0PWxvY2FsaG9zdDoxMjM0XG4gICAgICBkZWJ1Z09wdGlvbiA9IG1hdGNoWzFdO1xuICAgICAgZGVidWdIb3N0ID0gbWF0Y2hbM107XG4gICAgICBkZWJ1Z1BvcnQgPSBtYXRjaFs0XTtcbiAgICB9XG5cbiAgICBpZiAoZGVidWdPcHRpb24gJiYgZGVidWdQb3J0ICE9PSAnMCcpIHtcbiAgICAgIHJldHVybiBgJHtkZWJ1Z09wdGlvbn09JHtkZWJ1Z0hvc3R9OiR7cGFyc2VJbnQoZGVidWdQb3J0KSArIDF9YDtcbiAgICB9XG4gICAgcmV0dXJuIGFyZztcbiAgfSk7XG59XG5cbi8qKlxuICogQHJldHVybnMge2Jvb2xlYW4gfCB1bmRlZmluZWR9XG4gKiBAcGFja2FnZVxuICovXG5mdW5jdGlvbiB1c2VDb2xvcigpIHtcbiAgLy8gVGVzdCBmb3IgY29tbW9uIGNvbnZlbnRpb25zLlxuICAvLyBOQjogdGhlIG9ic2VydmVkIGJlaGF2aW91ciBpcyBpbiBjb21iaW5hdGlvbiB3aXRoIGhvdyBhdXRob3IgYWRkcyBjb2xvciEgRm9yIGV4YW1wbGU6XG4gIC8vICAgLSB3ZSBkbyBub3QgdGVzdCBOT0RFX0RJU0FCTEVfQ09MT1JTLCBidXQgdXRpbDpzdHlsZXRleHQgZG9lc1xuICAvLyAgIC0gd2UgZG8gdGVzdCBOT19DT0xPUiwgYnV0IENoYWxrIGRvZXMgbm90XG4gIC8vXG4gIC8vIFJlZmVyZW5jZXM6XG4gIC8vIGh0dHBzOi8vbm8tY29sb3Iub3JnXG4gIC8vIGh0dHBzOi8vYml4ZW5zZS5jb20vY2xpY29sb3JzL1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi8wYTAwMjE3YTVmNjdlZjRhMjIzODRjZmM4MGViNmRkOWE5MTdmZGMxL2xpYi9pbnRlcm5hbC90dHkuanMjTDEwOVxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vY2hhbGsvc3VwcG9ydHMtY29sb3IvYmxvYi9jMjE0MzE0YTE0YmNiMTc0YjEyYjMwMTRiMmIwYThkZTM3NTAyOWFlL2luZGV4LmpzI0wzM1xuICAvLyAoaHR0cHM6Ly9mb3JjZS1jb2xvci5vcmcgcmVjZW50IHdlYiBwYWdlIGZyb20gMjAyMywgZG9lcyBub3QgbWF0Y2ggbWFqb3IgamF2YXNjcmlwdCBpbXBsZW1lbnRhdGlvbnMpXG5cbiAgaWYgKFxuICAgIHByb2Nlc3MuZW52Lk5PX0NPTE9SIHx8XG4gICAgcHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgPT09ICcwJyB8fFxuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID09PSAnZmFsc2UnXG4gIClcbiAgICByZXR1cm4gZmFsc2U7XG4gIGlmIChwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiB8fCBwcm9jZXNzLmVudi5DTElDT0xPUl9GT1JDRSAhPT0gdW5kZWZpbmVkKVxuICAgIHJldHVybiB0cnVlO1xuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG5leHBvcnRzLkNvbW1hbmQgPSBDb21tYW5kO1xuZXhwb3J0cy51c2VDb2xvciA9IHVzZUNvbG9yOyAvLyBleHBvcnRpbmcgZm9yIHRlc3RzXG4iLCAiY29uc3QgeyBBcmd1bWVudCB9ID0gcmVxdWlyZSgnLi9saWIvYXJndW1lbnQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZCB9ID0gcmVxdWlyZSgnLi9saWIvY29tbWFuZC5qcycpO1xuY29uc3QgeyBDb21tYW5kZXJFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vbGliL2Vycm9yLmpzJyk7XG5jb25zdCB7IEhlbHAgfSA9IHJlcXVpcmUoJy4vbGliL2hlbHAuanMnKTtcbmNvbnN0IHsgT3B0aW9uIH0gPSByZXF1aXJlKCcuL2xpYi9vcHRpb24uanMnKTtcblxuZXhwb3J0cy5wcm9ncmFtID0gbmV3IENvbW1hbmQoKTtcblxuZXhwb3J0cy5jcmVhdGVDb21tYW5kID0gKG5hbWUpID0+IG5ldyBDb21tYW5kKG5hbWUpO1xuZXhwb3J0cy5jcmVhdGVPcHRpb24gPSAoZmxhZ3MsIGRlc2NyaXB0aW9uKSA9PiBuZXcgT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG5leHBvcnRzLmNyZWF0ZUFyZ3VtZW50ID0gKG5hbWUsIGRlc2NyaXB0aW9uKSA9PiBuZXcgQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuXG4vKipcbiAqIEV4cG9zZSBjbGFzc2VzXG4gKi9cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcbmV4cG9ydHMuT3B0aW9uID0gT3B0aW9uO1xuZXhwb3J0cy5Bcmd1bWVudCA9IEFyZ3VtZW50O1xuZXhwb3J0cy5IZWxwID0gSGVscDtcblxuZXhwb3J0cy5Db21tYW5kZXJFcnJvciA9IENvbW1hbmRlckVycm9yO1xuZXhwb3J0cy5JbnZhbGlkQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yO1xuZXhwb3J0cy5JbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciA9IEludmFsaWRBcmd1bWVudEVycm9yOyAvLyBEZXByZWNhdGVkXG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgbmV0ID0gcmVxdWlyZSgnbmV0Jyk7XG52YXIgdGxzID0gcmVxdWlyZSgndGxzJyk7XG52YXIgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbnZhciBodHRwcyA9IHJlcXVpcmUoJ2h0dHBzJyk7XG52YXIgZXZlbnRzID0gcmVxdWlyZSgnZXZlbnRzJyk7XG52YXIgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0Jyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxuXG5leHBvcnRzLmh0dHBPdmVySHR0cCA9IGh0dHBPdmVySHR0cDtcbmV4cG9ydHMuaHR0cHNPdmVySHR0cCA9IGh0dHBzT3Zlckh0dHA7XG5leHBvcnRzLmh0dHBPdmVySHR0cHMgPSBodHRwT3Zlckh0dHBzO1xuZXhwb3J0cy5odHRwc092ZXJIdHRwcyA9IGh0dHBzT3Zlckh0dHBzO1xuXG5cbmZ1bmN0aW9uIGh0dHBPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHAucmVxdWVzdDtcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cC5yZXF1ZXN0O1xuICBhZ2VudC5jcmVhdGVTb2NrZXQgPSBjcmVhdGVTZWN1cmVTb2NrZXQ7XG4gIGFnZW50LmRlZmF1bHRQb3J0ID0gNDQzO1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBPdmVySHR0cHMob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0O1xuICByZXR1cm4gYWdlbnQ7XG59XG5cbmZ1bmN0aW9uIGh0dHBzT3Zlckh0dHBzKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdDtcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0O1xuICBhZ2VudC5kZWZhdWx0UG9ydCA9IDQ0MztcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5cbmZ1bmN0aW9uIFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzZWxmLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBzZWxmLnByb3h5T3B0aW9ucyA9IHNlbGYub3B0aW9ucy5wcm94eSB8fCB7fTtcbiAgc2VsZi5tYXhTb2NrZXRzID0gc2VsZi5vcHRpb25zLm1heFNvY2tldHMgfHwgaHR0cC5BZ2VudC5kZWZhdWx0TWF4U29ja2V0cztcbiAgc2VsZi5yZXF1ZXN0cyA9IFtdO1xuICBzZWxmLnNvY2tldHMgPSBbXTtcblxuICBzZWxmLm9uKCdmcmVlJywgZnVuY3Rpb24gb25GcmVlKHNvY2tldCwgaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSB7XG4gICAgdmFyIG9wdGlvbnMgPSB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKTtcbiAgICBmb3IgKHZhciBpID0gMCwgbGVuID0gc2VsZi5yZXF1ZXN0cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgdmFyIHBlbmRpbmcgPSBzZWxmLnJlcXVlc3RzW2ldO1xuICAgICAgaWYgKHBlbmRpbmcuaG9zdCA9PT0gb3B0aW9ucy5ob3N0ICYmIHBlbmRpbmcucG9ydCA9PT0gb3B0aW9ucy5wb3J0KSB7XG4gICAgICAgIC8vIERldGVjdCB0aGUgcmVxdWVzdCB0byBjb25uZWN0IHNhbWUgb3JpZ2luIHNlcnZlcixcbiAgICAgICAgLy8gcmV1c2UgdGhlIGNvbm5lY3Rpb24uXG4gICAgICAgIHNlbGYucmVxdWVzdHMuc3BsaWNlKGksIDEpO1xuICAgICAgICBwZW5kaW5nLnJlcXVlc3Qub25Tb2NrZXQoc29ja2V0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBzb2NrZXQuZGVzdHJveSgpO1xuICAgIHNlbGYucmVtb3ZlU29ja2V0KHNvY2tldCk7XG4gIH0pO1xufVxudXRpbC5pbmhlcml0cyhUdW5uZWxpbmdBZ2VudCwgZXZlbnRzLkV2ZW50RW1pdHRlcik7XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5hZGRSZXF1ZXN0ID0gZnVuY3Rpb24gYWRkUmVxdWVzdChyZXEsIGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIHZhciBvcHRpb25zID0gbWVyZ2VPcHRpb25zKHtyZXF1ZXN0OiByZXF9LCBzZWxmLm9wdGlvbnMsIHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpKTtcblxuICBpZiAoc2VsZi5zb2NrZXRzLmxlbmd0aCA+PSB0aGlzLm1heFNvY2tldHMpIHtcbiAgICAvLyBXZSBhcmUgb3ZlciBsaW1pdCBzbyB3ZSdsbCBhZGQgaXQgdG8gdGhlIHF1ZXVlLlxuICAgIHNlbGYucmVxdWVzdHMucHVzaChvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBJZiB3ZSBhcmUgdW5kZXIgbWF4U29ja2V0cyBjcmVhdGUgYSBuZXcgb25lLlxuICBzZWxmLmNyZWF0ZVNvY2tldChvcHRpb25zLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICBzb2NrZXQub24oJ2ZyZWUnLCBvbkZyZWUpO1xuICAgIHNvY2tldC5vbignY2xvc2UnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIHNvY2tldC5vbignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIHJlcS5vblNvY2tldChzb2NrZXQpO1xuXG4gICAgZnVuY3Rpb24gb25GcmVlKCkge1xuICAgICAgc2VsZi5lbWl0KCdmcmVlJywgc29ja2V0LCBvcHRpb25zKTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBvbkNsb3NlT3JSZW1vdmUoZXJyKSB7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChzb2NrZXQpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdmcmVlJywgb25GcmVlKTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKCdhZ2VudFJlbW92ZScsIG9uQ2xvc2VPclJlbW92ZSk7XG4gICAgfVxuICB9KTtcbn07XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5jcmVhdGVTb2NrZXQgPSBmdW5jdGlvbiBjcmVhdGVTb2NrZXQob3B0aW9ucywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgcGxhY2Vob2xkZXIgPSB7fTtcbiAgc2VsZi5zb2NrZXRzLnB1c2gocGxhY2Vob2xkZXIpO1xuXG4gIHZhciBjb25uZWN0T3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7fSwgc2VsZi5wcm94eU9wdGlvbnMsIHtcbiAgICBtZXRob2Q6ICdDT05ORUNUJyxcbiAgICBwYXRoOiBvcHRpb25zLmhvc3QgKyAnOicgKyBvcHRpb25zLnBvcnQsXG4gICAgYWdlbnQ6IGZhbHNlLFxuICAgIGhlYWRlcnM6IHtcbiAgICAgIGhvc3Q6IG9wdGlvbnMuaG9zdCArICc6JyArIG9wdGlvbnMucG9ydFxuICAgIH1cbiAgfSk7XG4gIGlmIChvcHRpb25zLmxvY2FsQWRkcmVzcykge1xuICAgIGNvbm5lY3RPcHRpb25zLmxvY2FsQWRkcmVzcyA9IG9wdGlvbnMubG9jYWxBZGRyZXNzO1xuICB9XG4gIGlmIChjb25uZWN0T3B0aW9ucy5wcm94eUF1dGgpIHtcbiAgICBjb25uZWN0T3B0aW9ucy5oZWFkZXJzID0gY29ubmVjdE9wdGlvbnMuaGVhZGVycyB8fCB7fTtcbiAgICBjb25uZWN0T3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArXG4gICAgICAgIG5ldyBCdWZmZXIoY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKS50b1N0cmluZygnYmFzZTY0Jyk7XG4gIH1cblxuICBkZWJ1ZygnbWFraW5nIENPTk5FQ1QgcmVxdWVzdCcpO1xuICB2YXIgY29ubmVjdFJlcSA9IHNlbGYucmVxdWVzdChjb25uZWN0T3B0aW9ucyk7XG4gIGNvbm5lY3RSZXEudXNlQ2h1bmtlZEVuY29kaW5nQnlEZWZhdWx0ID0gZmFsc2U7IC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgncmVzcG9uc2UnLCBvblJlc3BvbnNlKTsgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCd1cGdyYWRlJywgb25VcGdyYWRlKTsgICAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ2Nvbm5lY3QnLCBvbkNvbm5lY3QpOyAgIC8vIGZvciB2MC43IG9yIGxhdGVyXG4gIGNvbm5lY3RSZXEub25jZSgnZXJyb3InLCBvbkVycm9yKTtcbiAgY29ubmVjdFJlcS5lbmQoKTtcblxuICBmdW5jdGlvbiBvblJlc3BvbnNlKHJlcykge1xuICAgIC8vIFZlcnkgaGFja3kuIFRoaXMgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIGh0dHAtcGFyc2VyIGxlYWtzLlxuICAgIHJlcy51cGdyYWRlID0gdHJ1ZTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uVXBncmFkZShyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIC8vIEhhY2t5LlxuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24oKSB7XG4gICAgICBvbkNvbm5lY3QocmVzLCBzb2NrZXQsIGhlYWQpO1xuICAgIH0pO1xuICB9XG5cbiAgZnVuY3Rpb24gb25Db25uZWN0KHJlcywgc29ja2V0LCBoZWFkKSB7XG4gICAgY29ubmVjdFJlcS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICBzb2NrZXQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICBpZiAocmVzLnN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgZGVidWcoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCBzdGF0dXNDb2RlPSVkJyxcbiAgICAgICAgcmVzLnN0YXR1c0NvZGUpO1xuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsICcgK1xuICAgICAgICAnc3RhdHVzQ29kZT0nICsgcmVzLnN0YXR1c0NvZGUpO1xuICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKGhlYWQubGVuZ3RoID4gMCkge1xuICAgICAgZGVidWcoJ2dvdCBpbGxlZ2FsIHJlc3BvbnNlIGJvZHkgZnJvbSBwcm94eScpO1xuICAgICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcignZ290IGlsbGVnYWwgcmVzcG9uc2UgYm9keSBmcm9tIHByb3h5Jyk7XG4gICAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgICAgb3B0aW9ucy5yZXF1ZXN0LmVtaXQoJ2Vycm9yJywgZXJyb3IpO1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBkZWJ1ZygndHVubmVsaW5nIGNvbm5lY3Rpb24gaGFzIGVzdGFibGlzaGVkJyk7XG4gICAgc2VsZi5zb2NrZXRzW3NlbGYuc29ja2V0cy5pbmRleE9mKHBsYWNlaG9sZGVyKV0gPSBzb2NrZXQ7XG4gICAgcmV0dXJuIGNiKHNvY2tldCk7XG4gIH1cblxuICBmdW5jdGlvbiBvbkVycm9yKGNhdXNlKSB7XG4gICAgY29ubmVjdFJlcS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcblxuICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgY2F1c2U9JXNcXG4nLFxuICAgICAgICAgIGNhdXNlLm1lc3NhZ2UsIGNhdXNlLnN0YWNrKTtcbiAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NhdXNlPScgKyBjYXVzZS5tZXNzYWdlKTtcbiAgICBlcnJvci5jb2RlID0gJ0VDT05OUkVTRVQnO1xuICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gIH1cbn07XG5cblR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5yZW1vdmVTb2NrZXQgPSBmdW5jdGlvbiByZW1vdmVTb2NrZXQoc29ja2V0KSB7XG4gIHZhciBwb3MgPSB0aGlzLnNvY2tldHMuaW5kZXhPZihzb2NrZXQpXG4gIGlmIChwb3MgPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHRoaXMuc29ja2V0cy5zcGxpY2UocG9zLCAxKTtcblxuICB2YXIgcGVuZGluZyA9IHRoaXMucmVxdWVzdHMuc2hpZnQoKTtcbiAgaWYgKHBlbmRpbmcpIHtcbiAgICAvLyBJZiB3ZSBoYXZlIHBlbmRpbmcgcmVxdWVzdHMgYW5kIGEgc29ja2V0IGdldHMgY2xvc2VkIGEgbmV3IG9uZVxuICAgIC8vIG5lZWRzIHRvIGJlIGNyZWF0ZWQgdG8gdGFrZSBvdmVyIGluIHRoZSBwb29sIGZvciB0aGUgb25lIHRoYXQgY2xvc2VkLlxuICAgIHRoaXMuY3JlYXRlU29ja2V0KHBlbmRpbmcsIGZ1bmN0aW9uKHNvY2tldCkge1xuICAgICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldCk7XG4gICAgfSk7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyZWF0ZVNlY3VyZVNvY2tldChvcHRpb25zLCBjYikge1xuICB2YXIgc2VsZiA9IHRoaXM7XG4gIFR1bm5lbGluZ0FnZW50LnByb3RvdHlwZS5jcmVhdGVTb2NrZXQuY2FsbChzZWxmLCBvcHRpb25zLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICB2YXIgaG9zdEhlYWRlciA9IG9wdGlvbnMucmVxdWVzdC5nZXRIZWFkZXIoJ2hvc3QnKTtcbiAgICB2YXIgdGxzT3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7fSwgc2VsZi5vcHRpb25zLCB7XG4gICAgICBzb2NrZXQ6IHNvY2tldCxcbiAgICAgIHNlcnZlcm5hbWU6IGhvc3RIZWFkZXIgPyBob3N0SGVhZGVyLnJlcGxhY2UoLzouKiQvLCAnJykgOiBvcHRpb25zLmhvc3RcbiAgICB9KTtcblxuICAgIC8vIDAgaXMgZHVtbXkgcG9ydCBmb3IgdjAuNlxuICAgIHZhciBzZWN1cmVTb2NrZXQgPSB0bHMuY29ubmVjdCgwLCB0bHNPcHRpb25zKTtcbiAgICBzZWxmLnNvY2tldHNbc2VsZi5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KV0gPSBzZWN1cmVTb2NrZXQ7XG4gICAgY2Ioc2VjdXJlU29ja2V0KTtcbiAgfSk7XG59XG5cblxuZnVuY3Rpb24gdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICBpZiAodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKSB7IC8vIHNpbmNlIHYwLjEwXG4gICAgcmV0dXJuIHtcbiAgICAgIGhvc3Q6IGhvc3QsXG4gICAgICBwb3J0OiBwb3J0LFxuICAgICAgbG9jYWxBZGRyZXNzOiBsb2NhbEFkZHJlc3NcbiAgICB9O1xuICB9XG4gIHJldHVybiBob3N0OyAvLyBmb3IgdjAuMTEgb3IgbGF0ZXJcbn1cblxuZnVuY3Rpb24gbWVyZ2VPcHRpb25zKHRhcmdldCkge1xuICBmb3IgKHZhciBpID0gMSwgbGVuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgdmFyIG92ZXJyaWRlcyA9IGFyZ3VtZW50c1tpXTtcbiAgICBpZiAodHlwZW9mIG92ZXJyaWRlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHZhciBrZXlzID0gT2JqZWN0LmtleXMob3ZlcnJpZGVzKTtcbiAgICAgIGZvciAodmFyIGogPSAwLCBrZXlMZW4gPSBrZXlzLmxlbmd0aDsgaiA8IGtleUxlbjsgKytqKSB7XG4gICAgICAgIHZhciBrID0ga2V5c1tqXTtcbiAgICAgICAgaWYgKG92ZXJyaWRlc1trXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGFyZ2V0W2tdID0gb3ZlcnJpZGVzW2tdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiB0YXJnZXQ7XG59XG5cblxudmFyIGRlYnVnO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfREVCVUcgJiYgL1xcYnR1bm5lbFxcYi8udGVzdChwcm9jZXNzLmVudi5OT0RFX0RFQlVHKSkge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBhcmdzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICBpZiAodHlwZW9mIGFyZ3NbMF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICBhcmdzWzBdID0gJ1RVTk5FTDogJyArIGFyZ3NbMF07XG4gICAgfSBlbHNlIHtcbiAgICAgIGFyZ3MudW5zaGlmdCgnVFVOTkVMOicpO1xuICAgIH1cbiAgICBjb25zb2xlLmVycm9yLmFwcGx5KGNvbnNvbGUsIGFyZ3MpO1xuICB9XG59IGVsc2Uge1xuICBkZWJ1ZyA9IGZ1bmN0aW9uKCkge307XG59XG5leHBvcnRzLmRlYnVnID0gZGVidWc7IC8vIGZvciB0ZXN0XG4iLCAibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi90dW5uZWwnKTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHtcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtEZXN0cm95OiBTeW1ib2woJ2Rlc3Ryb3knKSxcbiAga0Rpc3BhdGNoOiBTeW1ib2woJ2Rpc3BhdGNoJyksXG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtXcml0aW5nOiBTeW1ib2woJ3dyaXRpbmcnKSxcbiAga1Jlc3VtaW5nOiBTeW1ib2woJ3Jlc3VtaW5nJyksXG4gIGtRdWV1ZTogU3ltYm9sKCdxdWV1ZScpLFxuICBrQ29ubmVjdDogU3ltYm9sKCdjb25uZWN0JyksXG4gIGtDb25uZWN0aW5nOiBTeW1ib2woJ2Nvbm5lY3RpbmcnKSxcbiAga0hlYWRlcnNMaXN0OiBTeW1ib2woJ2hlYWRlcnMgbGlzdCcpLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQ6IFN5bWJvbCgnZGVmYXVsdCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQ6IFN5bWJvbCgnbWF4IGtlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZDogU3ltYm9sKCdrZWVwIGFsaXZlIHRpbWVvdXQgdGhyZXNob2xkJyksXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWU6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmU6IFN5bWJvbCgna2VlcCBhbGl2ZScpLFxuICBrSGVhZGVyc1RpbWVvdXQ6IFN5bWJvbCgnaGVhZGVycyB0aW1lb3V0JyksXG4gIGtCb2R5VGltZW91dDogU3ltYm9sKCdib2R5IHRpbWVvdXQnKSxcbiAga1NlcnZlck5hbWU6IFN5bWJvbCgnc2VydmVyIG5hbWUnKSxcbiAga0xvY2FsQWRkcmVzczogU3ltYm9sKCdsb2NhbCBhZGRyZXNzJyksXG4gIGtIb3N0OiBTeW1ib2woJ2hvc3QnKSxcbiAga05vUmVmOiBTeW1ib2woJ25vIHJlZicpLFxuICBrQm9keVVzZWQ6IFN5bWJvbCgndXNlZCcpLFxuICBrUnVubmluZzogU3ltYm9sKCdydW5uaW5nJyksXG4gIGtCbG9ja2luZzogU3ltYm9sKCdibG9ja2luZycpLFxuICBrUGVuZGluZzogU3ltYm9sKCdwZW5kaW5nJyksXG4gIGtTaXplOiBTeW1ib2woJ3NpemUnKSxcbiAga0J1c3k6IFN5bWJvbCgnYnVzeScpLFxuICBrUXVldWVkOiBTeW1ib2woJ3F1ZXVlZCcpLFxuICBrRnJlZTogU3ltYm9sKCdmcmVlJyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJyksXG4gIGtDbG9zZWQ6IFN5bWJvbCgnY2xvc2VkJyksXG4gIGtOZWVkRHJhaW46IFN5bWJvbCgnbmVlZCBkcmFpbicpLFxuICBrUmVzZXQ6IFN5bWJvbCgncmVzZXQnKSxcbiAga0Rlc3Ryb3llZDogU3ltYm9sLmZvcignbm9kZWpzLnN0cmVhbS5kZXN0cm95ZWQnKSxcbiAga01heEhlYWRlcnNTaXplOiBTeW1ib2woJ21heCBoZWFkZXJzIHNpemUnKSxcbiAga1J1bm5pbmdJZHg6IFN5bWJvbCgncnVubmluZyBpbmRleCcpLFxuICBrUGVuZGluZ0lkeDogU3ltYm9sKCdwZW5kaW5nIGluZGV4JyksXG4gIGtFcnJvcjogU3ltYm9sKCdlcnJvcicpLFxuICBrQ2xpZW50czogU3ltYm9sKCdjbGllbnRzJyksXG4gIGtDbGllbnQ6IFN5bWJvbCgnY2xpZW50JyksXG4gIGtQYXJzZXI6IFN5bWJvbCgncGFyc2VyJyksXG4gIGtPbkRlc3Ryb3llZDogU3ltYm9sKCdkZXN0cm95IGNhbGxiYWNrcycpLFxuICBrUGlwZWxpbmluZzogU3ltYm9sKCdwaXBlbGluaW5nJyksXG4gIGtTb2NrZXQ6IFN5bWJvbCgnc29ja2V0JyksXG4gIGtIb3N0SGVhZGVyOiBTeW1ib2woJ2hvc3QgaGVhZGVyJyksXG4gIGtDb25uZWN0b3I6IFN5bWJvbCgnY29ubmVjdG9yJyksXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoOiBTeW1ib2woJ3N0cmljdCBjb250ZW50IGxlbmd0aCcpLFxuICBrTWF4UmVkaXJlY3Rpb25zOiBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpLFxuICBrTWF4UmVxdWVzdHM6IFN5bWJvbCgnbWF4UmVxdWVzdHNQZXJDbGllbnQnKSxcbiAga1Byb3h5OiBTeW1ib2woJ3Byb3h5IGFnZW50IG9wdGlvbnMnKSxcbiAga0NvdW50ZXI6IFN5bWJvbCgnc29ja2V0IHJlcXVlc3QgY291bnRlcicpLFxuICBrSW50ZXJjZXB0b3JzOiBTeW1ib2woJ2Rpc3BhdGNoIGludGVyY2VwdG9ycycpLFxuICBrTWF4UmVzcG9uc2VTaXplOiBTeW1ib2woJ21heCByZXNwb25zZSBzaXplJyksXG4gIGtIVFRQMlNlc3Npb246IFN5bWJvbCgnaHR0cDJTZXNzaW9uJyksXG4gIGtIVFRQMlNlc3Npb25TdGF0ZTogU3ltYm9sKCdodHRwMlNlc3Npb24gc3RhdGUnKSxcbiAga0hUVFAyQnVpbGRSZXF1ZXN0OiBTeW1ib2woJ2h0dHAyIGJ1aWxkIHJlcXVlc3QnKSxcbiAga0hUVFAxQnVpbGRSZXF1ZXN0OiBTeW1ib2woJ2h0dHAxIGJ1aWxkIHJlcXVlc3QnKSxcbiAga0hUVFAyQ29weUhlYWRlcnM6IFN5bWJvbCgnaHR0cDIgY29weSBoZWFkZXJzJyksXG4gIGtIVFRQQ29ublZlcnNpb246IFN5bWJvbCgnaHR0cCBjb25uZWN0aW9uIHZlcnNpb24nKSxcbiAga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeTogU3ltYm9sKCdyZXRyeSBhZ2VudCBkZWZhdWx0IHJldHJ5JyksXG4gIGtDb25zdHJ1Y3Q6IFN5bWJvbCgnY29uc3RydWN0YWJsZScpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNsYXNzIFVuZGljaUVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1VuZGljaUVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSJ1xuICB9XG59XG5cbmNsYXNzIENvbm5lY3RUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDb25uZWN0VGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDb25uZWN0VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0Nvbm5lY3QgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9DT05ORUNUX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgSGVhZGVyc1RpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEhlYWRlcnNUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSGVhZGVycyBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzT3ZlcmZsb3dFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEhlYWRlcnNPdmVyZmxvd0Vycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzT3ZlcmZsb3dFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIE92ZXJmbG93IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1cnXG4gIH1cbn1cblxuY2xhc3MgQm9keVRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEJvZHlUaW1lb3V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0JvZHlUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQm9keSBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JPRFlfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIGJvZHkpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZVN0YXR1c0NvZGVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBTdGF0dXMgQ29kZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNQT05TRV9TVEFUVVNfQ09ERSdcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5zdGF0dXMgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRBcmd1bWVudEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkQXJndW1lbnRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIEFyZ3VtZW50IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lOVkFMSURfQVJHJ1xuICB9XG59XG5cbmNsYXNzIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgSW52YWxpZFJldHVyblZhbHVlRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0ludmFsaWRSZXR1cm5WYWx1ZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0ludmFsaWQgUmV0dXJuIFZhbHVlIEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lOVkFMSURfUkVUVVJOX1ZBTFVFJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RBYm9ydGVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0QWJvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdBYm9ydEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYWJvcnRlZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9BQk9SVEVEJ1xuICB9XG59XG5cbmNsYXNzIEluZm9ybWF0aW9uYWxFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEluZm9ybWF0aW9uYWxFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW5mb3JtYXRpb25hbEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgaW5mb3JtYXRpb24nXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5GTydcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1JlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGJvZHkgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVFfQ09OVEVOVF9MRU5HVEhfTUlTTUFUQ0gnXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnREZXN0cm95ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIENsaWVudERlc3Ryb3llZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnREZXN0cm95ZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGRlc3Ryb3llZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9ERVNUUk9ZRUQnXG4gIH1cbn1cblxuY2xhc3MgQ2xpZW50Q2xvc2VkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDbGllbnRDbG9zZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50Q2xvc2VkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBjbG9zZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQ0xPU0VEJ1xuICB9XG59XG5cbmNsYXNzIFNvY2tldEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc29ja2V0KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBTb2NrZXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnU29ja2V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU29ja2V0IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1NPQ0tFVCdcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICB9XG59XG5cbmNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTm90U3VwcG9ydGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ05vdFN1cHBvcnRlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vdCBzdXBwb3J0ZWQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfTk9UX1NVUFBPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE5vdFN1cHBvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdNaXNzaW5nVXBzdHJlYW1FcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdObyB1cHN0cmVhbSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgQmFsYW5jZWRQb29sJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JQTF9NSVNTSU5HX1VQU1RSRUFNJ1xuICB9XG59XG5cbmNsYXNzIEhUVFBQYXJzZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIGRhdGEpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEhUVFBQYXJzZXJFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSFRUUFBhcnNlckVycm9yJ1xuICAgIHRoaXMuY29kZSA9IGNvZGUgPyBgSFBFXyR7Y29kZX1gIDogdW5kZWZpbmVkXG4gICAgdGhpcy5kYXRhID0gZGF0YSA/IGRhdGEudG9TdHJpbmcoKSA6IHVuZGVmaW5lZFxuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGNvbnRlbnQgZXhjZWVkZWQgbWF4IHNpemUnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0VYQ0VFREVEX01BWF9TSVpFJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RSZXRyeUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIFJlcXVlc3RSZXRyeUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0UmV0cnlFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IHJldHJ5IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9SRVRSWSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgSFRUUFBhcnNlckVycm9yLFxuICBVbmRpY2lFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQ29ubmVjdFRpbWVvdXRFcnJvcixcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIFJlcXVlc3RSZXRyeUVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nIHwgdW5kZWZpbmVkPn0gKi9cbmNvbnN0IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkID0ge31cblxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZG9jcy9XZWIvSFRUUC9IZWFkZXJzXG5jb25zdCB3ZWxsa25vd25IZWFkZXJOYW1lcyA9IFtcbiAgJ0FjY2VwdCcsXG4gICdBY2NlcHQtRW5jb2RpbmcnLFxuICAnQWNjZXB0LUxhbmd1YWdlJyxcbiAgJ0FjY2VwdC1SYW5nZXMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctQ3JlZGVudGlhbHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1NZXRob2RzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU9yaWdpbicsXG4gICdBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1NYXgtQWdlJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtSGVhZGVycycsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LU1ldGhvZCcsXG4gICdBZ2UnLFxuICAnQWxsb3cnLFxuICAnQWx0LVN2YycsXG4gICdBbHQtVXNlZCcsXG4gICdBdXRob3JpemF0aW9uJyxcbiAgJ0NhY2hlLUNvbnRyb2wnLFxuICAnQ2xlYXItU2l0ZS1EYXRhJyxcbiAgJ0Nvbm5lY3Rpb24nLFxuICAnQ29udGVudC1EaXNwb3NpdGlvbicsXG4gICdDb250ZW50LUVuY29kaW5nJyxcbiAgJ0NvbnRlbnQtTGFuZ3VhZ2UnLFxuICAnQ29udGVudC1MZW5ndGgnLFxuICAnQ29udGVudC1Mb2NhdGlvbicsXG4gICdDb250ZW50LVJhbmdlJyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5JyxcbiAgJ0NvbnRlbnQtU2VjdXJpdHktUG9saWN5LVJlcG9ydC1Pbmx5JyxcbiAgJ0NvbnRlbnQtVHlwZScsXG4gICdDb29raWUnLFxuICAnQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeScsXG4gICdDcm9zcy1PcmlnaW4tUmVzb3VyY2UtUG9saWN5JyxcbiAgJ0RhdGUnLFxuICAnRGV2aWNlLU1lbW9yeScsXG4gICdEb3dubGluaycsXG4gICdFQ1QnLFxuICAnRVRhZycsXG4gICdFeHBlY3QnLFxuICAnRXhwZWN0LUNUJyxcbiAgJ0V4cGlyZXMnLFxuICAnRm9yd2FyZGVkJyxcbiAgJ0Zyb20nLFxuICAnSG9zdCcsXG4gICdJZi1NYXRjaCcsXG4gICdJZi1Nb2RpZmllZC1TaW5jZScsXG4gICdJZi1Ob25lLU1hdGNoJyxcbiAgJ0lmLVJhbmdlJyxcbiAgJ0lmLVVubW9kaWZpZWQtU2luY2UnLFxuICAnS2VlcC1BbGl2ZScsXG4gICdMYXN0LU1vZGlmaWVkJyxcbiAgJ0xpbmsnLFxuICAnTG9jYXRpb24nLFxuICAnTWF4LUZvcndhcmRzJyxcbiAgJ09yaWdpbicsXG4gICdQZXJtaXNzaW9ucy1Qb2xpY3knLFxuICAnUHJhZ21hJyxcbiAgJ1Byb3h5LUF1dGhlbnRpY2F0ZScsXG4gICdQcm94eS1BdXRob3JpemF0aW9uJyxcbiAgJ1JUVCcsXG4gICdSYW5nZScsXG4gICdSZWZlcmVyJyxcbiAgJ1JlZmVycmVyLVBvbGljeScsXG4gICdSZWZyZXNoJyxcbiAgJ1JldHJ5LUFmdGVyJyxcbiAgJ1NlYy1XZWJTb2NrZXQtQWNjZXB0JyxcbiAgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucycsXG4gICdTZWMtV2ViU29ja2V0LUtleScsXG4gICdTZWMtV2ViU29ja2V0LVByb3RvY29sJyxcbiAgJ1NlYy1XZWJTb2NrZXQtVmVyc2lvbicsXG4gICdTZXJ2ZXInLFxuICAnU2VydmVyLVRpbWluZycsXG4gICdTZXJ2aWNlLVdvcmtlci1BbGxvd2VkJyxcbiAgJ1NlcnZpY2UtV29ya2VyLU5hdmlnYXRpb24tUHJlbG9hZCcsXG4gICdTZXQtQ29va2llJyxcbiAgJ1NvdXJjZU1hcCcsXG4gICdTdHJpY3QtVHJhbnNwb3J0LVNlY3VyaXR5JyxcbiAgJ1N1cHBvcnRzLUxvYWRpbmctTW9kZScsXG4gICdURScsXG4gICdUaW1pbmctQWxsb3ctT3JpZ2luJyxcbiAgJ1RyYWlsZXInLFxuICAnVHJhbnNmZXItRW5jb2RpbmcnLFxuICAnVXBncmFkZScsXG4gICdVcGdyYWRlLUluc2VjdXJlLVJlcXVlc3RzJyxcbiAgJ1VzZXItQWdlbnQnLFxuICAnVmFyeScsXG4gICdWaWEnLFxuICAnV1dXLUF1dGhlbnRpY2F0ZScsXG4gICdYLUNvbnRlbnQtVHlwZS1PcHRpb25zJyxcbiAgJ1gtRE5TLVByZWZldGNoLUNvbnRyb2wnLFxuICAnWC1GcmFtZS1PcHRpb25zJyxcbiAgJ1gtUGVybWl0dGVkLUNyb3NzLURvbWFpbi1Qb2xpY2llcycsXG4gICdYLVBvd2VyZWQtQnknLFxuICAnWC1SZXF1ZXN0ZWQtV2l0aCcsXG4gICdYLVhTUy1Qcm90ZWN0aW9uJ1xuXVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IHdlbGxrbm93bkhlYWRlck5hbWVzW2ldXG4gIGNvbnN0IGxvd2VyQ2FzZWRLZXkgPSBrZXkudG9Mb3dlckNhc2UoKVxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtrZXldID0gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbbG93ZXJDYXNlZEtleV0gPVxuICAgIGxvd2VyQ2FzZWRLZXlcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2YoaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB3ZWxsa25vd25IZWFkZXJOYW1lcyxcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsga0Rlc3Ryb3llZCwga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBJbmNvbWluZ01lc3NhZ2UgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB7IEJsb2IgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJ3F1ZXJ5c3RyaW5nJylcbmNvbnN0IHsgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuY29uc3QgW25vZGVNYWpvciwgbm9kZU1pbm9yXSA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh2ID0+IE51bWJlcih2KSlcblxuZnVuY3Rpb24gbm9wICgpIHt9XG5cbmZ1bmN0aW9uIGlzU3RyZWFtIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLnBpcGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbm9kZS1mZXRjaC9mZXRjaC1ibG9iL2Jsb2IvOGFiNTg3ZDM0MDgwZGU5NDE0MGI1NGYwNzE2ODQ1MWU3ZDBiNjU1ZS9pbmRleC5qcyNMMjI5LUwyNDEgKE1JVCBMaWNlbnNlKVxuZnVuY3Rpb24gaXNCbG9iTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoQmxvYiAmJiBvYmplY3QgaW5zdGFuY2VvZiBCbG9iKSB8fCAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgL14oQmxvYnxGaWxlKSQvLnRlc3Qob2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10pXG4gIClcbn1cblxuZnVuY3Rpb24gYnVpbGRVUkwgKHVybCwgcXVlcnlQYXJhbXMpIHtcbiAgaWYgKHVybC5pbmNsdWRlcygnPycpIHx8IHVybC5pbmNsdWRlcygnIycpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdRdWVyeSBwYXJhbXMgY2Fubm90IGJlIHBhc3NlZCB3aGVuIHVybCBhbHJlYWR5IGNvbnRhaW5zIFwiP1wiIG9yIFwiI1wiLicpXG4gIH1cblxuICBjb25zdCBzdHJpbmdpZmllZCA9IHN0cmluZ2lmeShxdWVyeVBhcmFtcylcblxuICBpZiAoc3RyaW5naWZpZWQpIHtcbiAgICB1cmwgKz0gJz8nICsgc3RyaW5naWZpZWRcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VVUkwgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAgIGlmICghL15odHRwcz86Ly50ZXN0KHVybC5vcmlnaW4gfHwgdXJsLnByb3RvY29sKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICAgIH1cblxuICAgIHJldHVybiB1cmxcbiAgfVxuXG4gIGlmICghdXJsIHx8IHR5cGVvZiB1cmwgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogVGhlIFVSTCBhcmd1bWVudCBtdXN0IGJlIGEgbm9uLW51bGwgb2JqZWN0LicpXG4gIH1cblxuICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gIH1cblxuICBpZiAoISh1cmwgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgaWYgKHVybC5wb3J0ICE9IG51bGwgJiYgdXJsLnBvcnQgIT09ICcnICYmICFOdW1iZXIuaXNGaW5pdGUocGFyc2VJbnQodXJsLnBvcnQpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTDogcG9ydCBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciBvciBhIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRoICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRoOiB0aGUgcGF0aCBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5wYXRobmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGhuYW1lOiB0aGUgcGF0aG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwuaG9zdG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLmhvc3RuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBob3N0bmFtZTogdGhlIGhvc3RuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLm9yaWdpbiAhPSBudWxsICYmIHR5cGVvZiB1cmwub3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBvcmlnaW46IHRoZSBvcmlnaW4gbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHBvcnQgPSB1cmwucG9ydCAhPSBudWxsXG4gICAgICA/IHVybC5wb3J0XG4gICAgICA6ICh1cmwucHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODApXG4gICAgbGV0IG9yaWdpbiA9IHVybC5vcmlnaW4gIT0gbnVsbFxuICAgICAgPyB1cmwub3JpZ2luXG4gICAgICA6IGAke3VybC5wcm90b2NvbH0vLyR7dXJsLmhvc3RuYW1lfToke3BvcnR9YFxuICAgIGxldCBwYXRoID0gdXJsLnBhdGggIT0gbnVsbFxuICAgICAgPyB1cmwucGF0aFxuICAgICAgOiBgJHt1cmwucGF0aG5hbWUgfHwgJyd9JHt1cmwuc2VhcmNoIHx8ICcnfWBcblxuICAgIGlmIChvcmlnaW4uZW5kc1dpdGgoJy8nKSkge1xuICAgICAgb3JpZ2luID0gb3JpZ2luLnN1YnN0cmluZygwLCBvcmlnaW4ubGVuZ3RoIC0gMSlcbiAgICB9XG5cbiAgICBpZiAocGF0aCAmJiAhcGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgfVxuICAgIC8vIG5ldyBVUkwocGF0aCwgb3JpZ2luKSBpcyB1bnNhZmUgd2hlbiBgcGF0aGAgY29udGFpbnMgYW4gYWJzb2x1dGUgVVJMXG4gICAgLy8gRnJvbSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvVVJML1VSTDpcbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYSByZWxhdGl2ZSBVUkwsIHNlY29uZCBwYXJhbSBpcyByZXF1aXJlZCwgYW5kIHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZSBVUkwuXG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGFuIGFic29sdXRlIFVSTCwgYSBnaXZlbiBzZWNvbmQgcGFyYW0gd2lsbCBiZSBpZ25vcmVkLlxuICAgIHVybCA9IG5ldyBVUkwob3JpZ2luICsgcGF0aClcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gcGFyc2VPcmlnaW4gKHVybCkge1xuICB1cmwgPSBwYXJzZVVSTCh1cmwpXG5cbiAgaWYgKHVybC5wYXRobmFtZSAhPT0gJy8nIHx8IHVybC5zZWFyY2ggfHwgdXJsLmhhc2gpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgfVxuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gZ2V0SG9zdG5hbWUgKGhvc3QpIHtcbiAgaWYgKGhvc3RbMF0gPT09ICdbJykge1xuICAgIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMSwgaWR4KVxuICB9XG5cbiAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCc6JylcbiAgaWYgKGlkeCA9PT0gLTEpIHJldHVybiBob3N0XG5cbiAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDAsIGlkeClcbn1cblxuLy8gSVAgYWRkcmVzc2VzIGFyZSBub3QgdmFsaWQgc2VydmVyIG5hbWVzIHBlciBSRkM2MDY2XG4vLyA+IEN1cnJlbnRseSwgdGhlIG9ubHkgc2VydmVyIG5hbWVzIHN1cHBvcnRlZCBhcmUgRE5TIGhvc3RuYW1lc1xuZnVuY3Rpb24gZ2V0U2VydmVyTmFtZSAoaG9zdCkge1xuICBpZiAoIWhvc3QpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgYXNzZXJ0LnN0cmljdEVxdWFsKHR5cGVvZiBob3N0LCAnc3RyaW5nJylcblxuICBjb25zdCBzZXJ2ZXJuYW1lID0gZ2V0SG9zdG5hbWUoaG9zdClcbiAgaWYgKG5ldC5pc0lQKHNlcnZlcm5hbWUpKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICByZXR1cm4gc2VydmVybmFtZVxufVxuXG5mdW5jdGlvbiBkZWVwQ2xvbmUgKG9iaikge1xuICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvYmopKVxufVxuXG5mdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpXG59XG5cbmZ1bmN0aW9uIGlzSXRlcmFibGUgKG9iaikge1xuICByZXR1cm4gISEob2JqICE9IG51bGwgJiYgKHR5cGVvZiBvYmpbU3ltYm9sLml0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykpXG59XG5cbmZ1bmN0aW9uIGJvZHlMZW5ndGggKGJvZHkpIHtcbiAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgIHJldHVybiAwXG4gIH0gZWxzZSBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICBjb25zdCBzdGF0ZSA9IGJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICByZXR1cm4gc3RhdGUgJiYgc3RhdGUub2JqZWN0TW9kZSA9PT0gZmFsc2UgJiYgc3RhdGUuZW5kZWQgPT09IHRydWUgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXRlLmxlbmd0aClcbiAgICAgID8gc3RhdGUubGVuZ3RoXG4gICAgICA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuc2l6ZSAhPSBudWxsID8gYm9keS5zaXplIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gaXNEZXN0cm95ZWQgKHN0cmVhbSkge1xuICByZXR1cm4gIXN0cmVhbSB8fCAhIShzdHJlYW0uZGVzdHJveWVkIHx8IHN0cmVhbVtrRGVzdHJveWVkXSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZUFib3J0ZWQgKHN0cmVhbSkge1xuICBjb25zdCBzdGF0ZSA9IHN0cmVhbSAmJiBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgcmV0dXJuIGlzRGVzdHJveWVkKHN0cmVhbSkgJiYgc3RhdGUgJiYgIXN0YXRlLmVuZEVtaXR0ZWRcbn1cblxuZnVuY3Rpb24gZGVzdHJveSAoc3RyZWFtLCBlcnIpIHtcbiAgaWYgKHN0cmVhbSA9PSBudWxsIHx8ICFpc1N0cmVhbShzdHJlYW0pIHx8IGlzRGVzdHJveWVkKHN0cmVhbSkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICh0eXBlb2Ygc3RyZWFtLmRlc3Ryb3kgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoT2JqZWN0LmdldFByb3RvdHlwZU9mKHN0cmVhbSkuY29uc3RydWN0b3IgPT09IEluY29taW5nTWVzc2FnZSkge1xuICAgICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC8zODUwNS9maWxlc1xuICAgICAgc3RyZWFtLnNvY2tldCA9IG51bGxcbiAgICB9XG5cbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH0gZWxzZSBpZiAoZXJyKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljaygoc3RyZWFtLCBlcnIpID0+IHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycilcbiAgICB9LCBzdHJlYW0sIGVycilcbiAgfVxuXG4gIGlmIChzdHJlYW0uZGVzdHJveWVkICE9PSB0cnVlKSB7XG4gICAgc3RyZWFtW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICB9XG59XG5cbmNvbnN0IEtFRVBBTElWRV9USU1FT1VUX0VYUFIgPSAvdGltZW91dD0oXFxkKykvXG5mdW5jdGlvbiBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQgKHZhbCkge1xuICBjb25zdCBtID0gdmFsLnRvU3RyaW5nKCkubWF0Y2goS0VFUEFMSVZFX1RJTUVPVVRfRVhQUilcbiAgcmV0dXJuIG0gPyBwYXJzZUludChtWzFdLCAxMCkgKiAxMDAwIDogbnVsbFxufVxuXG4vKipcbiAqIFJldHJpZXZlcyBhIGhlYWRlciBuYW1lIGFuZCByZXR1cm5zIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZyB8IEJ1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGhlYWRlck5hbWVUb1N0cmluZyAodmFsdWUpIHtcbiAgcmV0dXJuIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3ZhbHVlXSB8fCB2YWx1ZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyAoaGVhZGVycywgb2JqID0ge30pIHtcbiAgLy8gRm9yIEgyIHN1cHBvcnRcbiAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcnMpKSByZXR1cm4gaGVhZGVyc1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpXG4gICAgbGV0IHZhbCA9IG9ialtrZXldXG5cbiAgICBpZiAoIXZhbCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVyc1tpICsgMV0pKSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0ubWFwKHggPT4geC50b1N0cmluZygndXRmOCcpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqW2tleV0gPSBoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIHZhbCA9IFt2YWxdXG4gICAgICAgIG9ialtrZXldID0gdmFsXG4gICAgICB9XG4gICAgICB2YWwucHVzaChoZWFkZXJzW2kgKyAxXS50b1N0cmluZygndXRmOCcpKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoJ2NvbnRlbnQtbGVuZ3RoJyBpbiBvYmogJiYgJ2NvbnRlbnQtZGlzcG9zaXRpb24nIGluIG9iaikge1xuICAgIG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddID0gQnVmZmVyLmZyb20ob2JqWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiBwYXJzZVJhd0hlYWRlcnMgKGhlYWRlcnMpIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgbGV0IGhhc0NvbnRlbnRMZW5ndGggPSBmYWxzZVxuICBsZXQgY29udGVudERpc3Bvc2l0aW9uSWR4ID0gLTFcblxuICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW24gKyAwXS50b1N0cmluZygpXG4gICAgY29uc3QgdmFsID0gaGVhZGVyc1tuICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDE0ICYmIChrZXkgPT09ICdjb250ZW50LWxlbmd0aCcgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWxlbmd0aCcpKSB7XG4gICAgICByZXQucHVzaChrZXksIHZhbClcbiAgICAgIGhhc0NvbnRlbnRMZW5ndGggPSB0cnVlXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxOSAmJiAoa2V5ID09PSAnY29udGVudC1kaXNwb3NpdGlvbicgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJykpIHtcbiAgICAgIGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IHJldC5wdXNoKGtleSwgdmFsKSAtIDFcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgfVxuICB9XG5cbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9wdWxsLzQ2NTI4XG4gIGlmIChoYXNDb250ZW50TGVuZ3RoICYmIGNvbnRlbnREaXNwb3NpdGlvbklkeCAhPT0gLTEpIHtcbiAgICByZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSA9IEJ1ZmZlci5mcm9tKHJldFtjb250ZW50RGlzcG9zaXRpb25JZHhdKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIgKGJ1ZmZlcikge1xuICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9tY29sbGluYS91bmRpY2kvcHVsbC8zMTlcbiAgcmV0dXJuIGJ1ZmZlciBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkgfHwgQnVmZmVyLmlzQnVmZmVyKGJ1ZmZlcilcbn1cblxuZnVuY3Rpb24gdmFsaWRhdGVIYW5kbGVyIChoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpIHtcbiAgaWYgKCFoYW5kbGVyIHx8IHR5cGVvZiBoYW5kbGVyICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gIH1cblxuICBpZiAodHlwZW9mIGhhbmRsZXIub25Db25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQ29ubmVjdCBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRXJyb3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25FcnJvciBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQm9keVNlbnQgIT09ICdmdW5jdGlvbicgJiYgaGFuZGxlci5vbkJvZHlTZW50ICE9PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Cb2R5U2VudCBtZXRob2QnKVxuICB9XG5cbiAgaWYgKHVwZ3JhZGUgfHwgbWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25VcGdyYWRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25VcGdyYWRlIG1ldGhvZCcpXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkhlYWRlcnMgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkhlYWRlcnMgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25EYXRhICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25EYXRhIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29tcGxldGUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbXBsZXRlIG1ldGhvZCcpXG4gICAgfVxuICB9XG59XG5cbi8vIEEgYm9keSBpcyBkaXN0dXJiZWQgaWYgaXQgaGFzIGJlZW4gcmVhZCBmcm9tIGFuZCBpdCBjYW5ub3Rcbi8vIGJlIHJlLXVzZWQgd2l0aG91dCBsb3Npbmcgc3RhdGUgb3IgZGF0YS5cbmZ1bmN0aW9uIGlzRGlzdHVyYmVkIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNEaXN0dXJiZWRcbiAgICAgID8gc3RyZWFtLmlzRGlzdHVyYmVkKGJvZHkpIHx8IGJvZHlba0JvZHlVc2VkXSAvLyBUT0RPIChmaXgpOiBXaHkgaXMgYm9keVtrQm9keVVzZWRdIG5lZWRlZD9cbiAgICAgIDogYm9keVtrQm9keVVzZWRdIHx8XG4gICAgICAgIGJvZHkucmVhZGFibGVEaWRSZWFkIHx8XG4gICAgICAgIChib2R5Ll9yZWFkYWJsZVN0YXRlICYmIGJvZHkuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQpIHx8XG4gICAgICAgIGlzUmVhZGFibGVBYm9ydGVkKGJvZHkpXG4gICkpXG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRXJyb3JlZFxuICAgICAgPyBzdHJlYW0uaXNFcnJvcmVkKGJvZHkpXG4gICAgICA6IC9zdGF0ZTogJ2Vycm9yZWQnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlIChib2R5KSB7XG4gIHJldHVybiAhIShib2R5ICYmIChcbiAgICBzdHJlYW0uaXNSZWFkYWJsZVxuICAgICAgPyBzdHJlYW0uaXNSZWFkYWJsZShib2R5KVxuICAgICAgOiAvc3RhdGU6ICdyZWFkYWJsZScvLnRlc3Qobm9kZVV0aWwuaW5zcGVjdChib2R5KVxuICAgICAgKSkpXG59XG5cbmZ1bmN0aW9uIGdldFNvY2tldEluZm8gKHNvY2tldCkge1xuICByZXR1cm4ge1xuICAgIGxvY2FsQWRkcmVzczogc29ja2V0LmxvY2FsQWRkcmVzcyxcbiAgICBsb2NhbFBvcnQ6IHNvY2tldC5sb2NhbFBvcnQsXG4gICAgcmVtb3RlQWRkcmVzczogc29ja2V0LnJlbW90ZUFkZHJlc3MsXG4gICAgcmVtb3RlUG9ydDogc29ja2V0LnJlbW90ZVBvcnQsXG4gICAgcmVtb3RlRmFtaWx5OiBzb2NrZXQucmVtb3RlRmFtaWx5LFxuICAgIHRpbWVvdXQ6IHNvY2tldC50aW1lb3V0LFxuICAgIGJ5dGVzV3JpdHRlbjogc29ja2V0LmJ5dGVzV3JpdHRlbixcbiAgICBieXRlc1JlYWQ6IHNvY2tldC5ieXRlc1JlYWRcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnZlcnRJdGVyYWJsZVRvQnVmZmVyIChpdGVyYWJsZSkge1xuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGl0ZXJhYmxlKSB7XG4gICAgeWllbGQgQnVmZmVyLmlzQnVmZmVyKGNodW5rKSA/IGNodW5rIDogQnVmZmVyLmZyb20oY2h1bmspXG4gIH1cbn1cblxubGV0IFJlYWRhYmxlU3RyZWFtXG5mdW5jdGlvbiBSZWFkYWJsZVN0cmVhbUZyb20gKGl0ZXJhYmxlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgaWYgKFJlYWRhYmxlU3RyZWFtLmZyb20pIHtcbiAgICByZXR1cm4gUmVhZGFibGVTdHJlYW0uZnJvbShjb252ZXJ0SXRlcmFibGVUb0J1ZmZlcihpdGVyYWJsZSkpXG4gIH1cblxuICBsZXQgaXRlcmF0b3JcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSA/IHZhbHVlIDogQnVmZmVyLmZyb20odmFsdWUpXG4gICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH1cbiAgICB9LFxuICAgIDBcbiAgKVxufVxuXG4vLyBUaGUgY2h1bmsgc2hvdWxkIGJlIGEgRm9ybURhdGEgaW5zdGFuY2UgYW5kIGNvbnRhaW5zXG4vLyBhbGwgdGhlIHJlcXVpcmVkIG1ldGhvZHMuXG5mdW5jdGlvbiBpc0Zvcm1EYXRhTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgb2JqZWN0ICYmXG4gICAgdHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmFwcGVuZCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZGVsZXRlID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldEFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuaGFzID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5zZXQgPT09ICdmdW5jdGlvbicgJiZcbiAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0Zvcm1EYXRhJ1xuICApXG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzaWduYWwpIHtcbiAgaWYgKCFzaWduYWwpIHsgcmV0dXJuIH1cbiAgaWYgKHR5cGVvZiBzaWduYWwudGhyb3dJZkFib3J0ZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICBzaWduYWwudGhyb3dJZkFib3J0ZWQoKVxuICB9IGVsc2Uge1xuICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgLy8gRE9NRXhjZXB0aW9uIG5vdCBhdmFpbGFibGUgPCB2MTcuMC4wXG4gICAgICBjb25zdCBlcnIgPSBuZXcgRXJyb3IoJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQnKVxuICAgICAgZXJyLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRBYm9ydExpc3RlbmVyIChzaWduYWwsIGxpc3RlbmVyKSB7XG4gIGlmICgnYWRkRXZlbnRMaXN0ZW5lcicgaW4gc2lnbmFsKSB7XG4gICAgc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIsIHsgb25jZTogdHJ1ZSB9KVxuICAgIHJldHVybiAoKSA9PiBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBsaXN0ZW5lcilcbiAgfVxuICBzaWduYWwuYWRkTGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIHJldHVybiAoKSA9PiBzaWduYWwucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG59XG5cbmNvbnN0IGhhc1RvV2VsbEZvcm1lZCA9ICEhU3RyaW5nLnByb3RvdHlwZS50b1dlbGxGb3JtZWRcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsXG4gKi9cbmZ1bmN0aW9uIHRvVVNWU3RyaW5nICh2YWwpIHtcbiAgaWYgKGhhc1RvV2VsbEZvcm1lZCkge1xuICAgIHJldHVybiBgJHt2YWx9YC50b1dlbGxGb3JtZWQoKVxuICB9IGVsc2UgaWYgKG5vZGVVdGlsLnRvVVNWU3RyaW5nKSB7XG4gICAgcmV0dXJuIG5vZGVVdGlsLnRvVVNWU3RyaW5nKHZhbClcbiAgfVxuXG4gIHJldHVybiBgJHt2YWx9YFxufVxuXG4vLyBQYXJzZWQgYWNjb3JkaW5nbHkgdG8gUkZDIDkxMTBcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEwI2ZpZWxkLmNvbnRlbnQtcmFuZ2VcbmZ1bmN0aW9uIHBhcnNlUmFuZ2VIZWFkZXIgKHJhbmdlKSB7XG4gIGlmIChyYW5nZSA9PSBudWxsIHx8IHJhbmdlID09PSAnJykgcmV0dXJuIHsgc3RhcnQ6IDAsIGVuZDogbnVsbCwgc2l6ZTogbnVsbCB9XG5cbiAgY29uc3QgbSA9IHJhbmdlID8gcmFuZ2UubWF0Y2goL15ieXRlcyAoXFxkKyktKFxcZCspXFwvKFxcZCspPyQvKSA6IG51bGxcbiAgcmV0dXJuIG1cbiAgICA/IHtcbiAgICAgICAgc3RhcnQ6IHBhcnNlSW50KG1bMV0pLFxuICAgICAgICBlbmQ6IG1bMl0gPyBwYXJzZUludChtWzJdKSA6IG51bGwsXG4gICAgICAgIHNpemU6IG1bM10gPyBwYXJzZUludChtWzNdKSA6IG51bGxcbiAgICAgIH1cbiAgICA6IG51bGxcbn1cblxuY29uc3Qga0VudW1lcmFibGVQcm9wZXJ0eSA9IE9iamVjdC5jcmVhdGUobnVsbClcbmtFbnVtZXJhYmxlUHJvcGVydHkuZW51bWVyYWJsZSA9IHRydWVcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG5vcCxcbiAgaXNEaXN0dXJiZWQsXG4gIGlzRXJyb3JlZCxcbiAgaXNSZWFkYWJsZSxcbiAgdG9VU1ZTdHJpbmcsXG4gIGlzUmVhZGFibGVBYm9ydGVkLFxuICBpc0Jsb2JMaWtlLFxuICBwYXJzZU9yaWdpbixcbiAgcGFyc2VVUkwsXG4gIGdldFNlcnZlck5hbWUsXG4gIGlzU3RyZWFtLFxuICBpc0l0ZXJhYmxlLFxuICBpc0FzeW5jSXRlcmFibGUsXG4gIGlzRGVzdHJveWVkLFxuICBoZWFkZXJOYW1lVG9TdHJpbmcsXG4gIHBhcnNlUmF3SGVhZGVycyxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQsXG4gIGRlc3Ryb3ksXG4gIGJvZHlMZW5ndGgsXG4gIGRlZXBDbG9uZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0J1ZmZlcixcbiAgdmFsaWRhdGVIYW5kbGVyLFxuICBnZXRTb2NrZXRJbmZvLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgYnVpbGRVUkwsXG4gIHRocm93SWZBYm9ydGVkLFxuICBhZGRBYm9ydExpc3RlbmVyLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICBub2RlTWFqb3IsXG4gIG5vZGVNaW5vcixcbiAgbm9kZUhhc0F1dG9TZWxlY3RGYW1pbHk6IG5vZGVNYWpvciA+IDE4IHx8IChub2RlTWFqb3IgPT09IDE4ICYmIG5vZGVNaW5vciA+PSAxMyksXG4gIHNhZmVIVFRQTWV0aG9kczogWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbn1cbiIsICIndXNlIHN0cmljdCdcblxubGV0IGZhc3ROb3cgPSBEYXRlLm5vdygpXG5sZXQgZmFzdE5vd1RpbWVvdXRcblxuY29uc3QgZmFzdFRpbWVycyA9IFtdXG5cbmZ1bmN0aW9uIG9uVGltZW91dCAoKSB7XG4gIGZhc3ROb3cgPSBEYXRlLm5vdygpXG5cbiAgbGV0IGxlbiA9IGZhc3RUaW1lcnMubGVuZ3RoXG4gIGxldCBpZHggPSAwXG4gIHdoaWxlIChpZHggPCBsZW4pIHtcbiAgICBjb25zdCB0aW1lciA9IGZhc3RUaW1lcnNbaWR4XVxuXG4gICAgaWYgKHRpbWVyLnN0YXRlID09PSAwKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IGZhc3ROb3cgKyB0aW1lci5kZWxheVxuICAgIH0gZWxzZSBpZiAodGltZXIuc3RhdGUgPiAwICYmIGZhc3ROb3cgPj0gdGltZXIuc3RhdGUpIHtcbiAgICAgIHRpbWVyLnN0YXRlID0gLTFcbiAgICAgIHRpbWVyLmNhbGxiYWNrKHRpbWVyLm9wYXF1ZSlcbiAgICB9XG5cbiAgICBpZiAodGltZXIuc3RhdGUgPT09IC0xKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IC0yXG4gICAgICBpZiAoaWR4ICE9PSBsZW4gLSAxKSB7XG4gICAgICAgIGZhc3RUaW1lcnNbaWR4XSA9IGZhc3RUaW1lcnMucG9wKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhc3RUaW1lcnMucG9wKClcbiAgICAgIH1cbiAgICAgIGxlbiAtPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGlkeCArPSAxXG4gICAgfVxuICB9XG5cbiAgaWYgKGZhc3RUaW1lcnMubGVuZ3RoID4gMCkge1xuICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoVGltZW91dCAoKSB7XG4gIGlmIChmYXN0Tm93VGltZW91dCAmJiBmYXN0Tm93VGltZW91dC5yZWZyZXNoKSB7XG4gICAgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCgpXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJUaW1lb3V0KGZhc3ROb3dUaW1lb3V0KVxuICAgIGZhc3ROb3dUaW1lb3V0ID0gc2V0VGltZW91dChvblRpbWVvdXQsIDFlMylcbiAgICBpZiAoZmFzdE5vd1RpbWVvdXQudW5yZWYpIHtcbiAgICAgIGZhc3ROb3dUaW1lb3V0LnVucmVmKClcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgVGltZW91dCB7XG4gIGNvbnN0cnVjdG9yIChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSkge1xuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuZGVsYXkgPSBkZWxheVxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlXG5cbiAgICAvLyAgLTIgbm90IGluIHRpbWVyIGxpc3RcbiAgICAvLyAgLTEgaW4gdGltZXIgbGlzdCBidXQgaW5hY3RpdmVcbiAgICAvLyAgIDAgaW4gdGltZXIgbGlzdCB3YWl0aW5nIGZvciB0aW1lXG4gICAgLy8gPiAwIGluIHRpbWVyIGxpc3Qgd2FpdGluZyBmb3IgdGltZSB0byBleHBpcmVcbiAgICB0aGlzLnN0YXRlID0gLTJcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICByZWZyZXNoICgpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSA9PT0gLTIpIHtcbiAgICAgIGZhc3RUaW1lcnMucHVzaCh0aGlzKVxuICAgICAgaWYgKCFmYXN0Tm93VGltZW91dCB8fCBmYXN0VGltZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZWZyZXNoVGltZW91dCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9IDBcbiAgfVxuXG4gIGNsZWFyICgpIHtcbiAgICB0aGlzLnN0YXRlID0gLTFcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0VGltZW91dCAoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpIHtcbiAgICByZXR1cm4gZGVsYXkgPCAxZTNcbiAgICAgID8gc2V0VGltZW91dChjYWxsYmFjaywgZGVsYXksIG9wYXF1ZSlcbiAgICAgIDogbmV3IFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpXG4gIH0sXG4gIGNsZWFyVGltZW91dCAodGltZW91dCkge1xuICAgIGlmICh0aW1lb3V0IGluc3RhbmNlb2YgVGltZW91dCkge1xuICAgICAgdGltZW91dC5jbGVhcigpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIENvcHlyaWdodCBCcmlhbiBXaGl0ZS4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tc2NkZXgvc3RyZWFtc2VhcmNoXG4gKlxuICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weVxuICogb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG9cbiAqIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlXG4gKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3JcbiAqIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzXG4gKiBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOlxuICpcbiAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluXG4gKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cbiAqXG4gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SXG4gKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSxcbiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRVxuICogQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUlxuICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkdcbiAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1NcbiAqIElOIFRIRSBTT0ZUV0FSRS5cbiAqXG4gKiBCYXNlZCBoZWF2aWx5IG9uIHRoZSBTdHJlYW1pbmcgQm95ZXItTW9vcmUtSG9yc3Bvb2wgQysrIGltcGxlbWVudGF0aW9uXG4gKiBieSBIb25nbGkgTGFpIGF0OiBodHRwczovL2dpdGh1Yi5jb20vRm9vQmFyV2lkZ2V0L2JveWVyLW1vb3JlLWhvcnNwb29sXG4gKi9cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5cbmZ1bmN0aW9uIFNCTUggKG5lZWRsZSkge1xuICBpZiAodHlwZW9mIG5lZWRsZSA9PT0gJ3N0cmluZycpIHtcbiAgICBuZWVkbGUgPSBCdWZmZXIuZnJvbShuZWVkbGUpXG4gIH1cblxuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihuZWVkbGUpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIG5lZWRsZSBoYXMgdG8gYmUgYSBTdHJpbmcgb3IgYSBCdWZmZXIuJylcbiAgfVxuXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcblxuICBpZiAobmVlZGxlTGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBiZSBhbiBlbXB0eSBTdHJpbmcvQnVmZmVyLicpXG4gIH1cblxuICBpZiAobmVlZGxlTGVuZ3RoID4gMjU2KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgbmVlZGxlIGNhbm5vdCBoYXZlIGEgbGVuZ3RoIGJpZ2dlciB0aGFuIDI1Ni4nKVxuICB9XG5cbiAgdGhpcy5tYXhNYXRjaGVzID0gSW5maW5pdHlcbiAgdGhpcy5tYXRjaGVzID0gMFxuXG4gIHRoaXMuX29jYyA9IG5ldyBBcnJheSgyNTYpXG4gICAgLmZpbGwobmVlZGxlTGVuZ3RoKSAvLyBJbml0aWFsaXplIG9jY3VycmVuY2UgdGFibGUuXG4gIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgdGhpcy5fbmVlZGxlID0gbmVlZGxlXG4gIHRoaXMuX2J1ZnBvcyA9IDBcblxuICB0aGlzLl9sb29rYmVoaW5kID0gQnVmZmVyLmFsbG9jKG5lZWRsZUxlbmd0aClcblxuICAvLyBQb3B1bGF0ZSBvY2N1cnJlbmNlIHRhYmxlIHdpdGggYW5hbHlzaXMgb2YgdGhlIG5lZWRsZSxcbiAgLy8gaWdub3JpbmcgbGFzdCBsZXR0ZXIuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbmVlZGxlTGVuZ3RoIC0gMTsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgdGhpcy5fb2NjW25lZWRsZVtpXV0gPSBuZWVkbGVMZW5ndGggLSAxIC0gaVxuICB9XG59XG5pbmhlcml0cyhTQk1ILCBFdmVudEVtaXR0ZXIpXG5cblNCTUgucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMubWF0Y2hlcyA9IDBcbiAgdGhpcy5fYnVmcG9zID0gMFxufVxuXG5TQk1ILnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGNodW5rLCBwb3MpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspKSB7XG4gICAgY2h1bmsgPSBCdWZmZXIuZnJvbShjaHVuaywgJ2JpbmFyeScpXG4gIH1cbiAgY29uc3QgY2hsZW4gPSBjaHVuay5sZW5ndGhcbiAgdGhpcy5fYnVmcG9zID0gcG9zIHx8IDBcbiAgbGV0IHJcbiAgd2hpbGUgKHIgIT09IGNobGVuICYmIHRoaXMubWF0Y2hlcyA8IHRoaXMubWF4TWF0Y2hlcykgeyByID0gdGhpcy5fc2JtaF9mZWVkKGNodW5rKSB9XG4gIHJldHVybiByXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2ZlZWQgPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuICBjb25zdCBuZWVkbGUgPSB0aGlzLl9uZWVkbGVcbiAgY29uc3QgbmVlZGxlTGVuZ3RoID0gbmVlZGxlLmxlbmd0aFxuICBjb25zdCBsYXN0TmVlZGxlQ2hhciA9IG5lZWRsZVtuZWVkbGVMZW5ndGggLSAxXVxuXG4gIC8vIFBvc2l0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiBgZGF0YWBcbiAgLy8gICAgICAgICAgIHBvcyA9PSAzIHBvaW50cyB0byBkYXRhWzNdXG4gIC8vIE5lZ2F0aXZlOiBwb2ludHMgdG8gYSBwb3NpdGlvbiBpbiB0aGUgbG9va2JlaGluZCBidWZmZXJcbiAgLy8gICAgICAgICAgIHBvcyA9PSAtMiBwb2ludHMgdG8gbG9va2JlaGluZFtsb29rYmVoaW5kX3NpemUgLSAyXVxuICBsZXQgcG9zID0gLXRoaXMuX2xvb2tiZWhpbmRfc2l6ZVxuICBsZXQgY2hcblxuICBpZiAocG9zIDwgMCkge1xuICAgIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdCBlbXB0eS4gUGVyZm9ybSBCb3llci1Nb29yZS1Ib3JzcG9vbFxuICAgIC8vIHNlYXJjaCB3aXRoIGNoYXJhY3RlciBsb29rdXAgY29kZSB0aGF0IGNvbnNpZGVycyBib3RoIHRoZVxuICAgIC8vIGxvb2tiZWhpbmQgYnVmZmVyIGFuZCB0aGUgY3VycmVudCByb3VuZCdzIGhheXN0YWNrIGRhdGEuXG4gICAgLy9cbiAgICAvLyBMb29wIHVudGlsXG4gICAgLy8gICB0aGVyZSBpcyBhIG1hdGNoLlxuICAgIC8vIG9yIHVudGlsXG4gICAgLy8gICB3ZSd2ZSBtb3ZlZCBwYXN0IHRoZSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIHRoZVxuICAgIC8vICAgbG9va2JlaGluZCBidWZmZXIuIEluIHRoaXMgY2FzZSB3ZSBzd2l0Y2ggdG8gdGhlXG4gICAgLy8gICBvcHRpbWl6ZWQgbG9vcC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgdGhlIGNoYXJhY3RlciB0byBsb29rIGF0IGxpZXMgb3V0c2lkZSB0aGUgaGF5c3RhY2suXG4gICAgd2hpbGUgKHBvcyA8IDAgJiYgcG9zIDw9IGxlbiAtIG5lZWRsZUxlbmd0aCkge1xuICAgICAgY2ggPSB0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIG5lZWRsZUxlbmd0aCAtIDEpXG5cbiAgICAgIGlmIChcbiAgICAgICAgY2ggPT09IGxhc3ROZWVkbGVDaGFyICYmXG4gICAgICAgIHRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbmVlZGxlTGVuZ3RoIC0gMSlcbiAgICAgICkge1xuICAgICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gICAgICAgICsrdGhpcy5tYXRjaGVzXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIHRydWUpXG5cbiAgICAgICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gICAgICB9XG4gICAgICBwb3MgKz0gdGhpcy5fb2NjW2NoXVxuICAgIH1cblxuICAgIC8vIE5vIG1hdGNoLlxuXG4gICAgaWYgKHBvcyA8IDApIHtcbiAgICAgIC8vIFRoZXJlJ3MgdG9vIGZldyBkYXRhIGZvciBCb3llci1Nb29yZS1Ib3JzcG9vbCB0byBydW4sXG4gICAgICAvLyBzbyBsZXQncyB1c2UgYSBkaWZmZXJlbnQgYWxnb3JpdGhtIHRvIHNraXAgYXMgbXVjaCBhc1xuICAgICAgLy8gd2UgY2FuLlxuICAgICAgLy8gRm9yd2FyZCBwb3MgdW50aWxcbiAgICAgIC8vICAgdGhlIHRyYWlsaW5nIHBhcnQgb2YgbG9va2JlaGluZCArIGRhdGFcbiAgICAgIC8vICAgbG9va3MgbGlrZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZWVkbGVcbiAgICAgIC8vIG9yIHVudGlsXG4gICAgICAvLyAgIHBvcyA9PSAwXG4gICAgICB3aGlsZSAocG9zIDwgMCAmJiAhdGhpcy5fc2JtaF9tZW1jbXAoZGF0YSwgcG9zLCBsZW4gLSBwb3MpKSB7ICsrcG9zIH1cbiAgICB9XG5cbiAgICBpZiAocG9zID49IDApIHtcbiAgICAgIC8vIERpc2NhcmQgbG9va2JlaGluZCBidWZmZXIuXG4gICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBDdXQgb2ZmIHBhcnQgb2YgdGhlIGxvb2tiZWhpbmQgYnVmZmVyIHRoYXQgaGFzXG4gICAgICAvLyBiZWVuIHByb2Nlc3NlZCBhbmQgYXBwZW5kIHRoZSBlbnRpcmUgaGF5c3RhY2tcbiAgICAgIC8vIGludG8gaXQuXG4gICAgICBjb25zdCBieXRlc1RvQ3V0T2ZmID0gdGhpcy5fbG9va2JlaGluZF9zaXplICsgcG9zXG4gICAgICBpZiAoYnl0ZXNUb0N1dE9mZiA+IDApIHtcbiAgICAgICAgLy8gVGhlIGN1dCBvZmYgZGF0YSBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIHRoZSBuZWVkbGUuXG4gICAgICAgIHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCB0aGlzLl9sb29rYmVoaW5kLCAwLCBieXRlc1RvQ3V0T2ZmKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9sb29rYmVoaW5kLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZixcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplIC0gYnl0ZXNUb0N1dE9mZilcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtPSBieXRlc1RvQ3V0T2ZmXG5cbiAgICAgIGRhdGEuY29weSh0aGlzLl9sb29rYmVoaW5kLCB0aGlzLl9sb29rYmVoaW5kX3NpemUpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgKz0gbGVuXG5cbiAgICAgIHRoaXMuX2J1ZnBvcyA9IGxlblxuICAgICAgcmV0dXJuIGxlblxuICAgIH1cbiAgfVxuXG4gIHBvcyArPSAocG9zID49IDApICogdGhpcy5fYnVmcG9zXG5cbiAgLy8gTG9va2JlaGluZCBidWZmZXIgaXMgbm93IGVtcHR5LiBXZSBvbmx5IG5lZWQgdG8gY2hlY2sgaWYgdGhlXG4gIC8vIG5lZWRsZSBpcyBpbiB0aGUgaGF5c3RhY2suXG4gIGlmIChkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpICE9PSAtMSkge1xuICAgIHBvcyA9IGRhdGEuaW5kZXhPZihuZWVkbGUsIHBvcylcbiAgICArK3RoaXMubWF0Y2hlc1xuICAgIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIHRydWUsIGRhdGEsIHRoaXMuX2J1ZnBvcywgcG9zKSB9IGVsc2UgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKSB9XG5cbiAgICByZXR1cm4gKHRoaXMuX2J1ZnBvcyA9IHBvcyArIG5lZWRsZUxlbmd0aClcbiAgfSBlbHNlIHtcbiAgICBwb3MgPSBsZW4gLSBuZWVkbGVMZW5ndGhcbiAgfVxuXG4gIC8vIFRoZXJlIHdhcyBubyBtYXRjaC4gSWYgdGhlcmUncyB0cmFpbGluZyBoYXlzdGFjayBkYXRhIHRoYXQgd2UgY2Fubm90XG4gIC8vIG1hdGNoIHlldCB1c2luZyB0aGUgQm95ZXItTW9vcmUtSG9yc3Bvb2wgYWxnb3JpdGhtIChiZWNhdXNlIHRoZSB0cmFpbGluZ1xuICAvLyBkYXRhIGlzIGxlc3MgdGhhbiB0aGUgbmVlZGxlIHNpemUpIHRoZW4gbWF0Y2ggdXNpbmcgYSBtb2RpZmllZFxuICAvLyBhbGdvcml0aG0gdGhhdCBzdGFydHMgbWF0Y2hpbmcgZnJvbSB0aGUgYmVnaW5uaW5nIGluc3RlYWQgb2YgdGhlIGVuZC5cbiAgLy8gV2hhdGV2ZXIgdHJhaWxpbmcgZGF0YSBpcyBsZWZ0IGFmdGVyIHJ1bm5pbmcgdGhpcyBhbGdvcml0aG0gaXMgYWRkZWQgdG9cbiAgLy8gdGhlIGxvb2tiZWhpbmQgYnVmZmVyLlxuICB3aGlsZSAoXG4gICAgcG9zIDwgbGVuICYmXG4gICAgKFxuICAgICAgZGF0YVtwb3NdICE9PSBuZWVkbGVbMF0gfHxcbiAgICAgIChcbiAgICAgICAgKEJ1ZmZlci5jb21wYXJlKFxuICAgICAgICAgIGRhdGEuc3ViYXJyYXkocG9zLCBwb3MgKyBsZW4gLSBwb3MpLFxuICAgICAgICAgIG5lZWRsZS5zdWJhcnJheSgwLCBsZW4gLSBwb3MpXG4gICAgICAgICkgIT09IDApXG4gICAgICApXG4gICAgKVxuICApIHtcbiAgICArK3Bvc1xuICB9XG4gIGlmIChwb3MgPCBsZW4pIHtcbiAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgMCwgcG9zLCBwb3MgKyAobGVuIC0gcG9zKSlcbiAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSBsZW4gLSBwb3NcbiAgfVxuXG4gIC8vIEV2ZXJ5dGhpbmcgdW50aWwgcG9zIGlzIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gbmVlZGxlIGRhdGEuXG4gIGlmIChwb3MgPiAwKSB7IHRoaXMuZW1pdCgnaW5mbycsIGZhbHNlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcyA8IGxlbiA/IHBvcyA6IGxlbikgfVxuXG4gIHRoaXMuX2J1ZnBvcyA9IGxlblxuICByZXR1cm4gbGVuXG59XG5cblNCTUgucHJvdG90eXBlLl9zYm1oX2xvb2t1cF9jaGFyID0gZnVuY3Rpb24gKGRhdGEsIHBvcykge1xuICByZXR1cm4gKHBvcyA8IDApXG4gICAgPyB0aGlzLl9sb29rYmVoaW5kW3RoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc11cbiAgICA6IGRhdGFbcG9zXVxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9tZW1jbXAgPSBmdW5jdGlvbiAoZGF0YSwgcG9zLCBsZW4pIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmICh0aGlzLl9zYm1oX2xvb2t1cF9jaGFyKGRhdGEsIHBvcyArIGkpICE9PSB0aGlzLl9uZWVkbGVbaV0pIHsgcmV0dXJuIGZhbHNlIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFNCTUhcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuY29uc3QgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLlJlYWRhYmxlXG5cbmZ1bmN0aW9uIFBhcnRTdHJlYW0gKG9wdHMpIHtcbiAgUmVhZGFibGVTdHJlYW0uY2FsbCh0aGlzLCBvcHRzKVxufVxuaW5oZXJpdHMoUGFydFN0cmVhbSwgUmVhZGFibGVTdHJlYW0pXG5cblBhcnRTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gUGFydFN0cmVhbVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdldExpbWl0IChsaW1pdHMsIG5hbWUsIGRlZmF1bHRMaW1pdCkge1xuICBpZiAoXG4gICAgIWxpbWl0cyB8fFxuICAgIGxpbWl0c1tuYW1lXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgbGltaXRzW25hbWVdID09PSBudWxsXG4gICkgeyByZXR1cm4gZGVmYXVsdExpbWl0IH1cblxuICBpZiAoXG4gICAgdHlwZW9mIGxpbWl0c1tuYW1lXSAhPT0gJ251bWJlcicgfHxcbiAgICBpc05hTihsaW1pdHNbbmFtZV0pXG4gICkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdMaW1pdCAnICsgbmFtZSArICcgaXMgbm90IGEgdmFsaWQgbnVtYmVyJykgfVxuXG4gIHJldHVybiBsaW1pdHNbbmFtZV1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKS5FdmVudEVtaXR0ZXJcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vLi4vLi4vbGliL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBCX0RDUkxGID0gQnVmZmVyLmZyb20oJ1xcclxcblxcclxcbicpXG5jb25zdCBSRV9DUkxGID0gL1xcclxcbi9nXG5jb25zdCBSRV9IRFIgPSAvXihbXjpdKyk6WyBcXHRdPyhbXFx4MDAtXFx4RkZdKyk/JC8gLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG5cbmZ1bmN0aW9uIEhlYWRlclBhcnNlciAoY2ZnKSB7XG4gIEV2ZW50RW1pdHRlci5jYWxsKHRoaXMpXG5cbiAgY2ZnID0gY2ZnIHx8IHt9XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMubnJlYWQgPSAwXG4gIHRoaXMubWF4ZWQgPSBmYWxzZVxuICB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhIZWFkZXJQYWlycyA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclBhaXJzJywgMjAwMClcbiAgdGhpcy5tYXhIZWFkZXJTaXplID0gZ2V0TGltaXQoY2ZnLCAnbWF4SGVhZGVyU2l6ZScsIDgwICogMTAyNClcbiAgdGhpcy5idWZmZXIgPSAnJ1xuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLnNzID0gbmV3IFN0cmVhbVNlYXJjaChCX0RDUkxGKVxuICB0aGlzLnNzLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBpZiAoZGF0YSAmJiAhc2VsZi5tYXhlZCkge1xuICAgICAgaWYgKHNlbGYubnJlYWQgKyBlbmQgLSBzdGFydCA+PSBzZWxmLm1heEhlYWRlclNpemUpIHtcbiAgICAgICAgZW5kID0gc2VsZi5tYXhIZWFkZXJTaXplIC0gc2VsZi5ucmVhZCArIHN0YXJ0XG4gICAgICAgIHNlbGYubnJlYWQgPSBzZWxmLm1heEhlYWRlclNpemVcbiAgICAgICAgc2VsZi5tYXhlZCA9IHRydWVcbiAgICAgIH0gZWxzZSB7IHNlbGYubnJlYWQgKz0gKGVuZCAtIHN0YXJ0KSB9XG5cbiAgICAgIHNlbGYuYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHN0YXJ0LCBlbmQpXG4gICAgfVxuICAgIGlmIChpc01hdGNoKSB7IHNlbGYuX2ZpbmlzaCgpIH1cbiAgfSlcbn1cbmluaGVyaXRzKEhlYWRlclBhcnNlciwgRXZlbnRFbWl0dGVyKVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLnB1c2ggPSBmdW5jdGlvbiAoZGF0YSkge1xuICBjb25zdCByID0gdGhpcy5zcy5wdXNoKGRhdGEpXG4gIGlmICh0aGlzLmZpbmlzaGVkKSB7IHJldHVybiByIH1cbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLnNzLnJlc2V0KClcbn1cblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5fZmluaXNoID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5idWZmZXIpIHsgdGhpcy5fcGFyc2VIZWFkZXIoKSB9XG4gIHRoaXMuc3MubWF0Y2hlcyA9IHRoaXMuc3MubWF4TWF0Y2hlc1xuICBjb25zdCBoZWFkZXIgPSB0aGlzLmhlYWRlclxuICB0aGlzLmhlYWRlciA9IHt9XG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5maW5pc2hlZCA9IHRydWVcbiAgdGhpcy5ucmVhZCA9IHRoaXMubnBhaXJzID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5lbWl0KCdoZWFkZXInLCBoZWFkZXIpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX3BhcnNlSGVhZGVyID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgcmV0dXJuIH1cblxuICBjb25zdCBsaW5lcyA9IHRoaXMuYnVmZmVyLnNwbGl0KFJFX0NSTEYpXG4gIGNvbnN0IGxlbiA9IGxpbmVzLmxlbmd0aFxuICBsZXQgbSwgaFxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAobGluZXNbaV0ubGVuZ3RoID09PSAwKSB7IGNvbnRpbnVlIH1cbiAgICBpZiAobGluZXNbaV1bMF0gPT09ICdcXHQnIHx8IGxpbmVzW2ldWzBdID09PSAnICcpIHtcbiAgICAgIC8vIGZvbGRlZCBoZWFkZXIgY29udGVudFxuICAgICAgLy8gUkZDMjgyMiBzYXlzIHRvIGp1c3QgcmVtb3ZlIHRoZSBDUkxGIGFuZCBub3QgdGhlIHdoaXRlc3BhY2UgZm9sbG93aW5nXG4gICAgICAvLyBpdCwgc28gd2UgZm9sbG93IHRoZSBSRkMgYW5kIGluY2x1ZGUgdGhlIGxlYWRpbmcgd2hpdGVzcGFjZSAuLi5cbiAgICAgIGlmIChoKSB7XG4gICAgICAgIHRoaXMuaGVhZGVyW2hdW3RoaXMuaGVhZGVyW2hdLmxlbmd0aCAtIDFdICs9IGxpbmVzW2ldXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcG9zQ29sb24gPSBsaW5lc1tpXS5pbmRleE9mKCc6JylcbiAgICBpZiAoXG4gICAgICBwb3NDb2xvbiA9PT0gLTEgfHxcbiAgICAgIHBvc0NvbG9uID09PSAwXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgbSA9IFJFX0hEUi5leGVjKGxpbmVzW2ldKVxuICAgIGggPSBtWzFdLnRvTG93ZXJDYXNlKClcbiAgICB0aGlzLmhlYWRlcltoXSA9IHRoaXMuaGVhZGVyW2hdIHx8IFtdXG4gICAgdGhpcy5oZWFkZXJbaF0ucHVzaCgobVsyXSB8fCAnJykpXG4gICAgaWYgKCsrdGhpcy5ucGFpcnMgPT09IHRoaXMubWF4SGVhZGVyUGFpcnMpIHsgYnJlYWsgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gSGVhZGVyUGFyc2VyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFdyaXRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5Xcml0YWJsZVxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuXG5jb25zdCBTdHJlYW1TZWFyY2ggPSByZXF1aXJlKCcuLi8uLi9zdHJlYW1zZWFyY2gvc2JtaCcpXG5cbmNvbnN0IFBhcnRTdHJlYW0gPSByZXF1aXJlKCcuL1BhcnRTdHJlYW0nKVxuY29uc3QgSGVhZGVyUGFyc2VyID0gcmVxdWlyZSgnLi9IZWFkZXJQYXJzZXInKVxuXG5jb25zdCBEQVNIID0gNDVcbmNvbnN0IEJfT05FREFTSCA9IEJ1ZmZlci5mcm9tKCctJylcbmNvbnN0IEJfQ1JMRiA9IEJ1ZmZlci5mcm9tKCdcXHJcXG4nKVxuY29uc3QgRU1QVFlfRk4gPSBmdW5jdGlvbiAoKSB7fVxuXG5mdW5jdGlvbiBEaWNlciAoY2ZnKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBEaWNlcikpIHsgcmV0dXJuIG5ldyBEaWNlcihjZmcpIH1cbiAgV3JpdGFibGVTdHJlYW0uY2FsbCh0aGlzLCBjZmcpXG5cbiAgaWYgKCFjZmcgfHwgKCFjZmcuaGVhZGVyRmlyc3QgJiYgdHlwZW9mIGNmZy5ib3VuZGFyeSAhPT0gJ3N0cmluZycpKSB7IHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvdW5kYXJ5IHJlcXVpcmVkJykgfVxuXG4gIGlmICh0eXBlb2YgY2ZnLmJvdW5kYXJ5ID09PSAnc3RyaW5nJykgeyB0aGlzLnNldEJvdW5kYXJ5KGNmZy5ib3VuZGFyeSkgfSBlbHNlIHsgdGhpcy5fYnBhcnNlciA9IHVuZGVmaW5lZCB9XG5cbiAgdGhpcy5faGVhZGVyRmlyc3QgPSBjZmcuaGVhZGVyRmlyc3RcblxuICB0aGlzLl9kYXNoZXMgPSAwXG4gIHRoaXMuX3BhcnRzID0gMFxuICB0aGlzLl9maW5pc2hlZCA9IGZhbHNlXG4gIHRoaXMuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICB0aGlzLl9pc1ByZWFtYmxlID0gdHJ1ZVxuICB0aGlzLl9qdXN0TWF0Y2hlZCA9IGZhbHNlXG4gIHRoaXMuX2ZpcnN0V3JpdGUgPSB0cnVlXG4gIHRoaXMuX2luSGVhZGVyID0gdHJ1ZVxuICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gIHRoaXMuX2lnbm9yZURhdGEgPSBmYWxzZVxuICB0aGlzLl9wYXJ0T3B0cyA9IHsgaGlnaFdhdGVyTWFyazogY2ZnLnBhcnRId20gfVxuICB0aGlzLl9wYXVzZSA9IGZhbHNlXG5cbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5faHBhcnNlciA9IG5ldyBIZWFkZXJQYXJzZXIoY2ZnKVxuICB0aGlzLl9ocGFyc2VyLm9uKCdoZWFkZXInLCBmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgc2VsZi5faW5IZWFkZXIgPSBmYWxzZVxuICAgIHNlbGYuX3BhcnQuZW1pdCgnaGVhZGVyJywgaGVhZGVyKVxuICB9KVxufVxuaW5oZXJpdHMoRGljZXIsIFdyaXRhYmxlU3RyZWFtKVxuXG5EaWNlci5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldikge1xuICBpZiAoZXYgPT09ICdmaW5pc2gnICYmICF0aGlzLl9yZWFsRmluaXNoKSB7XG4gICAgaWYgKCF0aGlzLl9maW5pc2hlZCkge1xuICAgICAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICBzZWxmLmVtaXQoJ2Vycm9yJywgbmV3IEVycm9yKCdVbmV4cGVjdGVkIGVuZCBvZiBtdWx0aXBhcnQgZGF0YScpKVxuICAgICAgICBpZiAoc2VsZi5fcGFydCAmJiAhc2VsZi5faWdub3JlRGF0YSkge1xuICAgICAgICAgIGNvbnN0IHR5cGUgPSAoc2VsZi5faXNQcmVhbWJsZSA/ICdQcmVhbWJsZScgOiAnUGFydCcpXG4gICAgICAgICAgc2VsZi5fcGFydC5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcih0eXBlICsgJyB0ZXJtaW5hdGVkIGVhcmx5IGR1ZSB0byB1bmV4cGVjdGVkIGVuZCBvZiBtdWx0aXBhcnQgZGF0YScpKVxuICAgICAgICAgIHNlbGYuX3BhcnQucHVzaChudWxsKVxuICAgICAgICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IHRydWVcbiAgICAgICAgc2VsZi5lbWl0KCdmaW5pc2gnKVxuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgIH0pXG4gICAgfVxuICB9IGVsc2UgeyBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuZW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBlbmNvZGluZywgY2IpIHtcbiAgLy8gaWdub3JlIHVuZXhwZWN0ZWQgZGF0YSAoZS5nLiBleHRyYSB0cmFpbGVyIGRhdGEgYWZ0ZXIgZmluaXNoZWQpXG4gIGlmICghdGhpcy5faHBhcnNlciAmJiAhdGhpcy5fYnBhcnNlcikgeyByZXR1cm4gY2IoKSB9XG5cbiAgaWYgKHRoaXMuX2hlYWRlckZpcnN0ICYmIHRoaXMuX2lzUHJlYW1ibGUpIHtcbiAgICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICAgIHRoaXMuX3BhcnQgPSBuZXcgUGFydFN0cmVhbSh0aGlzLl9wYXJ0T3B0cylcbiAgICAgIGlmICh0aGlzLmxpc3RlbmVyQ291bnQoJ3ByZWFtYmxlJykgIT09IDApIHsgdGhpcy5lbWl0KCdwcmVhbWJsZScsIHRoaXMuX3BhcnQpIH0gZWxzZSB7IHRoaXMuX2lnbm9yZSgpIH1cbiAgICB9XG4gICAgY29uc3QgciA9IHRoaXMuX2hwYXJzZXIucHVzaChkYXRhKVxuICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBkYXRhLmxlbmd0aCkgeyBkYXRhID0gZGF0YS5zbGljZShyKSB9IGVsc2UgeyByZXR1cm4gY2IoKSB9XG4gIH1cblxuICAvLyBhbGxvd3MgZm9yIFwiZWFzaWVyXCIgdGVzdGluZ1xuICBpZiAodGhpcy5fZmlyc3RXcml0ZSkge1xuICAgIHRoaXMuX2JwYXJzZXIucHVzaChCX0NSTEYpXG4gICAgdGhpcy5fZmlyc3RXcml0ZSA9IGZhbHNlXG4gIH1cblxuICB0aGlzLl9icGFyc2VyLnB1c2goZGF0YSlcblxuICBpZiAodGhpcy5fcGF1c2UpIHsgdGhpcy5fY2IgPSBjYiB9IGVsc2UgeyBjYigpIH1cbn1cblxuRGljZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gIHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWRcbiAgdGhpcy5faHBhcnNlciA9IHVuZGVmaW5lZFxufVxuXG5EaWNlci5wcm90b3R5cGUuc2V0Qm91bmRhcnkgPSBmdW5jdGlvbiAoYm91bmRhcnkpIHtcbiAgY29uc3Qgc2VsZiA9IHRoaXNcbiAgdGhpcy5fYnBhcnNlciA9IG5ldyBTdHJlYW1TZWFyY2goJ1xcclxcbi0tJyArIGJvdW5kYXJ5KVxuICB0aGlzLl9icGFyc2VyLm9uKCdpbmZvJywgZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgICBzZWxmLl9vbmluZm8oaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZClcbiAgfSlcbn1cblxuRGljZXIucHJvdG90eXBlLl9pZ25vcmUgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLl9wYXJ0ICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgdGhpcy5faWdub3JlRGF0YSA9IHRydWVcbiAgICB0aGlzLl9wYXJ0Lm9uKCdlcnJvcicsIEVNUFRZX0ZOKVxuICAgIC8vIHdlIG11c3QgcGVyZm9ybSBzb21lIGtpbmQgb2YgcmVhZCBvbiB0aGUgc3RyZWFtIGV2ZW4gdGhvdWdoIHdlIGFyZVxuICAgIC8vIGlnbm9yaW5nIHRoZSBkYXRhLCBvdGhlcndpc2Ugbm9kZSdzIFJlYWRhYmxlIHN0cmVhbSB3aWxsIG5vdCBlbWl0ICdlbmQnXG4gICAgLy8gYWZ0ZXIgcHVzaGluZyBudWxsIHRvIHRoZSBzdHJlYW1cbiAgICB0aGlzLl9wYXJ0LnJlc3VtZSgpXG4gIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl9vbmluZm8gPSBmdW5jdGlvbiAoaXNNYXRjaCwgZGF0YSwgc3RhcnQsIGVuZCkge1xuICBsZXQgYnVmOyBjb25zdCBzZWxmID0gdGhpczsgbGV0IGkgPSAwOyBsZXQgcjsgbGV0IHNob3VsZFdyaXRlTW9yZSA9IHRydWVcblxuICBpZiAoIXRoaXMuX3BhcnQgJiYgdGhpcy5fanVzdE1hdGNoZWQgJiYgZGF0YSkge1xuICAgIHdoaWxlICh0aGlzLl9kYXNoZXMgPCAyICYmIChzdGFydCArIGkpIDwgZW5kKSB7XG4gICAgICBpZiAoZGF0YVtzdGFydCArIGldID09PSBEQVNIKSB7XG4gICAgICAgICsraVxuICAgICAgICArK3RoaXMuX2Rhc2hlc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHRoaXMuX2Rhc2hlcykgeyBidWYgPSBCX09ORURBU0ggfVxuICAgICAgICB0aGlzLl9kYXNoZXMgPSAwXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9kYXNoZXMgPT09IDIpIHtcbiAgICAgIGlmICgoc3RhcnQgKyBpKSA8IGVuZCAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3RyYWlsZXInKSAhPT0gMCkgeyB0aGlzLmVtaXQoJ3RyYWlsZXInLCBkYXRhLnNsaWNlKHN0YXJ0ICsgaSwgZW5kKSkgfVxuICAgICAgdGhpcy5yZXNldCgpXG4gICAgICB0aGlzLl9maW5pc2hlZCA9IHRydWVcbiAgICAgIC8vIG5vIG1vcmUgcGFydHMgd2lsbCBiZSBhZGRlZFxuICAgICAgaWYgKHNlbGYuX3BhcnRzID09PSAwKSB7XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgcmV0dXJuIH1cbiAgfVxuICBpZiAodGhpcy5fanVzdE1hdGNoZWQpIHsgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZSB9XG4gIGlmICghdGhpcy5fcGFydCkge1xuICAgIHRoaXMuX3BhcnQgPSBuZXcgUGFydFN0cmVhbSh0aGlzLl9wYXJ0T3B0cylcbiAgICB0aGlzLl9wYXJ0Ll9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgIHNlbGYuX3VucGF1c2UoKVxuICAgIH1cbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3ByZWFtYmxlJykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KVxuICAgIH0gZWxzZSBpZiAodGhpcy5faXNQcmVhbWJsZSAhPT0gdHJ1ZSAmJiB0aGlzLmxpc3RlbmVyQ291bnQoJ3BhcnQnKSAhPT0gMCkge1xuICAgICAgdGhpcy5lbWl0KCdwYXJ0JywgdGhpcy5fcGFydClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faWdub3JlKClcbiAgICB9XG4gICAgaWYgKCF0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2luSGVhZGVyID0gdHJ1ZSB9XG4gIH1cbiAgaWYgKGRhdGEgJiYgc3RhcnQgPCBlbmQgJiYgIXRoaXMuX2lnbm9yZURhdGEpIHtcbiAgICBpZiAodGhpcy5faXNQcmVhbWJsZSB8fCAhdGhpcy5faW5IZWFkZXIpIHtcbiAgICAgIGlmIChidWYpIHsgc2hvdWxkV3JpdGVNb3JlID0gdGhpcy5fcGFydC5wdXNoKGJ1ZikgfVxuICAgICAgc2hvdWxkV3JpdGVNb3JlID0gdGhpcy5fcGFydC5wdXNoKGRhdGEuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gICAgICBpZiAoIXNob3VsZFdyaXRlTW9yZSkgeyB0aGlzLl9wYXVzZSA9IHRydWUgfVxuICAgIH0gZWxzZSBpZiAoIXRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5faW5IZWFkZXIpIHtcbiAgICAgIGlmIChidWYpIHsgdGhpcy5faHBhcnNlci5wdXNoKGJ1ZikgfVxuICAgICAgciA9IHRoaXMuX2hwYXJzZXIucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCF0aGlzLl9pbkhlYWRlciAmJiByICE9PSB1bmRlZmluZWQgJiYgciA8IGVuZCkgeyB0aGlzLl9vbmluZm8oZmFsc2UsIGRhdGEsIHN0YXJ0ICsgciwgZW5kKSB9XG4gICAgfVxuICB9XG4gIGlmIChpc01hdGNoKSB7XG4gICAgdGhpcy5faHBhcnNlci5yZXNldCgpXG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUpIHsgdGhpcy5faXNQcmVhbWJsZSA9IGZhbHNlIH0gZWxzZSB7XG4gICAgICBpZiAoc3RhcnQgIT09IGVuZCkge1xuICAgICAgICArK3RoaXMuX3BhcnRzXG4gICAgICAgIHRoaXMuX3BhcnQub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoLS1zZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICAgICAgaWYgKHNlbGYuX2ZpbmlzaGVkKSB7XG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBzZWxmLl91bnBhdXNlKClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuX3BhcnQucHVzaChudWxsKVxuICAgIHRoaXMuX3BhcnQgPSB1bmRlZmluZWRcbiAgICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgICB0aGlzLl9qdXN0TWF0Y2hlZCA9IHRydWVcbiAgICB0aGlzLl9kYXNoZXMgPSAwXG4gIH1cbn1cblxuRGljZXIucHJvdG90eXBlLl91bnBhdXNlID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIXRoaXMuX3BhdXNlKSB7IHJldHVybiB9XG5cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuICBpZiAodGhpcy5fY2IpIHtcbiAgICBjb25zdCBjYiA9IHRoaXMuX2NiXG4gICAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgICBjYigpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaWNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBOb2RlIGhhcyBhbHdheXMgdXRmLThcbmNvbnN0IHV0ZjhEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcpXG5jb25zdCB0ZXh0RGVjb2RlcnMgPSBuZXcgTWFwKFtcbiAgWyd1dGYtOCcsIHV0ZjhEZWNvZGVyXSxcbiAgWyd1dGY4JywgdXRmOERlY29kZXJdXG5dKVxuXG5mdW5jdGlvbiBnZXREZWNvZGVyIChjaGFyc2V0KSB7XG4gIGxldCBsY1xuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoY2hhcnNldCkge1xuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy51dGY4XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYXNjaWknOiAvLyBUT0RPOiBNYWtlIHRoZXNlIGEgc2VwYXJhdGUsIHN0cmljdCBkZWNvZGVyP1xuICAgICAgY2FzZSAndXMtYXNjaWknOlxuICAgICAgY2FzZSAnaXNvLTg4NTktMSc6XG4gICAgICBjYXNlICdpc284ODU5LTEnOlxuICAgICAgY2FzZSAnaXNvODg1OTEnOlxuICAgICAgY2FzZSAnaXNvXzg4NTktMSc6XG4gICAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgICAgY2FzZSAnaXNvXzg4NTktMToxOTg3JzpcbiAgICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgICBjYXNlICd4LWNwMTI1Mic6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5sYXRpbjFcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICAgIHJldHVybiBkZWNvZGVycy51dGYxNmxlXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMuYmFzZTY0XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobGMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGxjID0gdHJ1ZVxuICAgICAgICAgIGNoYXJzZXQgPSBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBkZWNvZGVycy5vdGhlci5iaW5kKGNoYXJzZXQpXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGRlY29kZXJzID0ge1xuICB1dGY4OiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLnV0ZjhTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBsYXRpbjE6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBkYXRhXG4gICAgfVxuICAgIHJldHVybiBkYXRhLmxhdGluMVNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIHV0ZjE2bGU6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEudWNzMlNsaWNlKDAsIGRhdGEubGVuZ3RoKVxuICB9LFxuXG4gIGJhc2U2NDogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS5iYXNlNjRTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBvdGhlcjogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cblxuICAgIGlmICh0ZXh0RGVjb2RlcnMuaGFzKHRoaXMudG9TdHJpbmcoKSkpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0ZXh0RGVjb2RlcnMuZ2V0KHRoaXMpLmRlY29kZShkYXRhKVxuICAgICAgfSBjYXRjaCB7fVxuICAgIH1cbiAgICByZXR1cm4gdHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnXG4gICAgICA/IGRhdGFcbiAgICAgIDogZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVjb2RlVGV4dCAodGV4dCwgc291cmNlRW5jb2RpbmcsIGRlc3RFbmNvZGluZykge1xuICBpZiAodGV4dCkge1xuICAgIHJldHVybiBnZXREZWNvZGVyKGRlc3RFbmNvZGluZykodGV4dCwgc291cmNlRW5jb2RpbmcpXG4gIH1cbiAgcmV0dXJuIHRleHRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBkZWNvZGVUZXh0XG4iLCAiLyogZXNsaW50LWRpc2FibGUgb2JqZWN0LXByb3BlcnR5LW5ld2xpbmUgKi9cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi9kZWNvZGVUZXh0JylcblxuY29uc3QgUkVfRU5DT0RFRCA9IC8lW2EtZkEtRjAtOV1bYS1mQS1GMC05XS9nXG5cbmNvbnN0IEVuY29kZWRMb29rdXAgPSB7XG4gICclMDAnOiAnXFx4MDAnLCAnJTAxJzogJ1xceDAxJywgJyUwMic6ICdcXHgwMicsICclMDMnOiAnXFx4MDMnLCAnJTA0JzogJ1xceDA0JyxcbiAgJyUwNSc6ICdcXHgwNScsICclMDYnOiAnXFx4MDYnLCAnJTA3JzogJ1xceDA3JywgJyUwOCc6ICdcXHgwOCcsICclMDknOiAnXFx4MDknLFxuICAnJTBhJzogJ1xceDBhJywgJyUwQSc6ICdcXHgwYScsICclMGInOiAnXFx4MGInLCAnJTBCJzogJ1xceDBiJywgJyUwYyc6ICdcXHgwYycsXG4gICclMEMnOiAnXFx4MGMnLCAnJTBkJzogJ1xceDBkJywgJyUwRCc6ICdcXHgwZCcsICclMGUnOiAnXFx4MGUnLCAnJTBFJzogJ1xceDBlJyxcbiAgJyUwZic6ICdcXHgwZicsICclMEYnOiAnXFx4MGYnLCAnJTEwJzogJ1xceDEwJywgJyUxMSc6ICdcXHgxMScsICclMTInOiAnXFx4MTInLFxuICAnJTEzJzogJ1xceDEzJywgJyUxNCc6ICdcXHgxNCcsICclMTUnOiAnXFx4MTUnLCAnJTE2JzogJ1xceDE2JywgJyUxNyc6ICdcXHgxNycsXG4gICclMTgnOiAnXFx4MTgnLCAnJTE5JzogJ1xceDE5JywgJyUxYSc6ICdcXHgxYScsICclMUEnOiAnXFx4MWEnLCAnJTFiJzogJ1xceDFiJyxcbiAgJyUxQic6ICdcXHgxYicsICclMWMnOiAnXFx4MWMnLCAnJTFDJzogJ1xceDFjJywgJyUxZCc6ICdcXHgxZCcsICclMUQnOiAnXFx4MWQnLFxuICAnJTFlJzogJ1xceDFlJywgJyUxRSc6ICdcXHgxZScsICclMWYnOiAnXFx4MWYnLCAnJTFGJzogJ1xceDFmJywgJyUyMCc6ICdcXHgyMCcsXG4gICclMjEnOiAnXFx4MjEnLCAnJTIyJzogJ1xceDIyJywgJyUyMyc6ICdcXHgyMycsICclMjQnOiAnXFx4MjQnLCAnJTI1JzogJ1xceDI1JyxcbiAgJyUyNic6ICdcXHgyNicsICclMjcnOiAnXFx4MjcnLCAnJTI4JzogJ1xceDI4JywgJyUyOSc6ICdcXHgyOScsICclMmEnOiAnXFx4MmEnLFxuICAnJTJBJzogJ1xceDJhJywgJyUyYic6ICdcXHgyYicsICclMkInOiAnXFx4MmInLCAnJTJjJzogJ1xceDJjJywgJyUyQyc6ICdcXHgyYycsXG4gICclMmQnOiAnXFx4MmQnLCAnJTJEJzogJ1xceDJkJywgJyUyZSc6ICdcXHgyZScsICclMkUnOiAnXFx4MmUnLCAnJTJmJzogJ1xceDJmJyxcbiAgJyUyRic6ICdcXHgyZicsICclMzAnOiAnXFx4MzAnLCAnJTMxJzogJ1xceDMxJywgJyUzMic6ICdcXHgzMicsICclMzMnOiAnXFx4MzMnLFxuICAnJTM0JzogJ1xceDM0JywgJyUzNSc6ICdcXHgzNScsICclMzYnOiAnXFx4MzYnLCAnJTM3JzogJ1xceDM3JywgJyUzOCc6ICdcXHgzOCcsXG4gICclMzknOiAnXFx4MzknLCAnJTNhJzogJ1xceDNhJywgJyUzQSc6ICdcXHgzYScsICclM2InOiAnXFx4M2InLCAnJTNCJzogJ1xceDNiJyxcbiAgJyUzYyc6ICdcXHgzYycsICclM0MnOiAnXFx4M2MnLCAnJTNkJzogJ1xceDNkJywgJyUzRCc6ICdcXHgzZCcsICclM2UnOiAnXFx4M2UnLFxuICAnJTNFJzogJ1xceDNlJywgJyUzZic6ICdcXHgzZicsICclM0YnOiAnXFx4M2YnLCAnJTQwJzogJ1xceDQwJywgJyU0MSc6ICdcXHg0MScsXG4gICclNDInOiAnXFx4NDInLCAnJTQzJzogJ1xceDQzJywgJyU0NCc6ICdcXHg0NCcsICclNDUnOiAnXFx4NDUnLCAnJTQ2JzogJ1xceDQ2JyxcbiAgJyU0Nyc6ICdcXHg0NycsICclNDgnOiAnXFx4NDgnLCAnJTQ5JzogJ1xceDQ5JywgJyU0YSc6ICdcXHg0YScsICclNEEnOiAnXFx4NGEnLFxuICAnJTRiJzogJ1xceDRiJywgJyU0Qic6ICdcXHg0YicsICclNGMnOiAnXFx4NGMnLCAnJTRDJzogJ1xceDRjJywgJyU0ZCc6ICdcXHg0ZCcsXG4gICclNEQnOiAnXFx4NGQnLCAnJTRlJzogJ1xceDRlJywgJyU0RSc6ICdcXHg0ZScsICclNGYnOiAnXFx4NGYnLCAnJTRGJzogJ1xceDRmJyxcbiAgJyU1MCc6ICdcXHg1MCcsICclNTEnOiAnXFx4NTEnLCAnJTUyJzogJ1xceDUyJywgJyU1Myc6ICdcXHg1MycsICclNTQnOiAnXFx4NTQnLFxuICAnJTU1JzogJ1xceDU1JywgJyU1Nic6ICdcXHg1NicsICclNTcnOiAnXFx4NTcnLCAnJTU4JzogJ1xceDU4JywgJyU1OSc6ICdcXHg1OScsXG4gICclNWEnOiAnXFx4NWEnLCAnJTVBJzogJ1xceDVhJywgJyU1Yic6ICdcXHg1YicsICclNUInOiAnXFx4NWInLCAnJTVjJzogJ1xceDVjJyxcbiAgJyU1Qyc6ICdcXHg1YycsICclNWQnOiAnXFx4NWQnLCAnJTVEJzogJ1xceDVkJywgJyU1ZSc6ICdcXHg1ZScsICclNUUnOiAnXFx4NWUnLFxuICAnJTVmJzogJ1xceDVmJywgJyU1Ric6ICdcXHg1ZicsICclNjAnOiAnXFx4NjAnLCAnJTYxJzogJ1xceDYxJywgJyU2Mic6ICdcXHg2MicsXG4gICclNjMnOiAnXFx4NjMnLCAnJTY0JzogJ1xceDY0JywgJyU2NSc6ICdcXHg2NScsICclNjYnOiAnXFx4NjYnLCAnJTY3JzogJ1xceDY3JyxcbiAgJyU2OCc6ICdcXHg2OCcsICclNjknOiAnXFx4NjknLCAnJTZhJzogJ1xceDZhJywgJyU2QSc6ICdcXHg2YScsICclNmInOiAnXFx4NmInLFxuICAnJTZCJzogJ1xceDZiJywgJyU2Yyc6ICdcXHg2YycsICclNkMnOiAnXFx4NmMnLCAnJTZkJzogJ1xceDZkJywgJyU2RCc6ICdcXHg2ZCcsXG4gICclNmUnOiAnXFx4NmUnLCAnJTZFJzogJ1xceDZlJywgJyU2Zic6ICdcXHg2ZicsICclNkYnOiAnXFx4NmYnLCAnJTcwJzogJ1xceDcwJyxcbiAgJyU3MSc6ICdcXHg3MScsICclNzInOiAnXFx4NzInLCAnJTczJzogJ1xceDczJywgJyU3NCc6ICdcXHg3NCcsICclNzUnOiAnXFx4NzUnLFxuICAnJTc2JzogJ1xceDc2JywgJyU3Nyc6ICdcXHg3NycsICclNzgnOiAnXFx4NzgnLCAnJTc5JzogJ1xceDc5JywgJyU3YSc6ICdcXHg3YScsXG4gICclN0EnOiAnXFx4N2EnLCAnJTdiJzogJ1xceDdiJywgJyU3Qic6ICdcXHg3YicsICclN2MnOiAnXFx4N2MnLCAnJTdDJzogJ1xceDdjJyxcbiAgJyU3ZCc6ICdcXHg3ZCcsICclN0QnOiAnXFx4N2QnLCAnJTdlJzogJ1xceDdlJywgJyU3RSc6ICdcXHg3ZScsICclN2YnOiAnXFx4N2YnLFxuICAnJTdGJzogJ1xceDdmJywgJyU4MCc6ICdcXHg4MCcsICclODEnOiAnXFx4ODEnLCAnJTgyJzogJ1xceDgyJywgJyU4Myc6ICdcXHg4MycsXG4gICclODQnOiAnXFx4ODQnLCAnJTg1JzogJ1xceDg1JywgJyU4Nic6ICdcXHg4NicsICclODcnOiAnXFx4ODcnLCAnJTg4JzogJ1xceDg4JyxcbiAgJyU4OSc6ICdcXHg4OScsICclOGEnOiAnXFx4OGEnLCAnJThBJzogJ1xceDhhJywgJyU4Yic6ICdcXHg4YicsICclOEInOiAnXFx4OGInLFxuICAnJThjJzogJ1xceDhjJywgJyU4Qyc6ICdcXHg4YycsICclOGQnOiAnXFx4OGQnLCAnJThEJzogJ1xceDhkJywgJyU4ZSc6ICdcXHg4ZScsXG4gICclOEUnOiAnXFx4OGUnLCAnJThmJzogJ1xceDhmJywgJyU4Ric6ICdcXHg4ZicsICclOTAnOiAnXFx4OTAnLCAnJTkxJzogJ1xceDkxJyxcbiAgJyU5Mic6ICdcXHg5MicsICclOTMnOiAnXFx4OTMnLCAnJTk0JzogJ1xceDk0JywgJyU5NSc6ICdcXHg5NScsICclOTYnOiAnXFx4OTYnLFxuICAnJTk3JzogJ1xceDk3JywgJyU5OCc6ICdcXHg5OCcsICclOTknOiAnXFx4OTknLCAnJTlhJzogJ1xceDlhJywgJyU5QSc6ICdcXHg5YScsXG4gICclOWInOiAnXFx4OWInLCAnJTlCJzogJ1xceDliJywgJyU5Yyc6ICdcXHg5YycsICclOUMnOiAnXFx4OWMnLCAnJTlkJzogJ1xceDlkJyxcbiAgJyU5RCc6ICdcXHg5ZCcsICclOWUnOiAnXFx4OWUnLCAnJTlFJzogJ1xceDllJywgJyU5Zic6ICdcXHg5ZicsICclOUYnOiAnXFx4OWYnLFxuICAnJWEwJzogJ1xceGEwJywgJyVBMCc6ICdcXHhhMCcsICclYTEnOiAnXFx4YTEnLCAnJUExJzogJ1xceGExJywgJyVhMic6ICdcXHhhMicsXG4gICclQTInOiAnXFx4YTInLCAnJWEzJzogJ1xceGEzJywgJyVBMyc6ICdcXHhhMycsICclYTQnOiAnXFx4YTQnLCAnJUE0JzogJ1xceGE0JyxcbiAgJyVhNSc6ICdcXHhhNScsICclQTUnOiAnXFx4YTUnLCAnJWE2JzogJ1xceGE2JywgJyVBNic6ICdcXHhhNicsICclYTcnOiAnXFx4YTcnLFxuICAnJUE3JzogJ1xceGE3JywgJyVhOCc6ICdcXHhhOCcsICclQTgnOiAnXFx4YTgnLCAnJWE5JzogJ1xceGE5JywgJyVBOSc6ICdcXHhhOScsXG4gICclYWEnOiAnXFx4YWEnLCAnJUFhJzogJ1xceGFhJywgJyVhQSc6ICdcXHhhYScsICclQUEnOiAnXFx4YWEnLCAnJWFiJzogJ1xceGFiJyxcbiAgJyVBYic6ICdcXHhhYicsICclYUInOiAnXFx4YWInLCAnJUFCJzogJ1xceGFiJywgJyVhYyc6ICdcXHhhYycsICclQWMnOiAnXFx4YWMnLFxuICAnJWFDJzogJ1xceGFjJywgJyVBQyc6ICdcXHhhYycsICclYWQnOiAnXFx4YWQnLCAnJUFkJzogJ1xceGFkJywgJyVhRCc6ICdcXHhhZCcsXG4gICclQUQnOiAnXFx4YWQnLCAnJWFlJzogJ1xceGFlJywgJyVBZSc6ICdcXHhhZScsICclYUUnOiAnXFx4YWUnLCAnJUFFJzogJ1xceGFlJyxcbiAgJyVhZic6ICdcXHhhZicsICclQWYnOiAnXFx4YWYnLCAnJWFGJzogJ1xceGFmJywgJyVBRic6ICdcXHhhZicsICclYjAnOiAnXFx4YjAnLFxuICAnJUIwJzogJ1xceGIwJywgJyViMSc6ICdcXHhiMScsICclQjEnOiAnXFx4YjEnLCAnJWIyJzogJ1xceGIyJywgJyVCMic6ICdcXHhiMicsXG4gICclYjMnOiAnXFx4YjMnLCAnJUIzJzogJ1xceGIzJywgJyViNCc6ICdcXHhiNCcsICclQjQnOiAnXFx4YjQnLCAnJWI1JzogJ1xceGI1JyxcbiAgJyVCNSc6ICdcXHhiNScsICclYjYnOiAnXFx4YjYnLCAnJUI2JzogJ1xceGI2JywgJyViNyc6ICdcXHhiNycsICclQjcnOiAnXFx4YjcnLFxuICAnJWI4JzogJ1xceGI4JywgJyVCOCc6ICdcXHhiOCcsICclYjknOiAnXFx4YjknLCAnJUI5JzogJ1xceGI5JywgJyViYSc6ICdcXHhiYScsXG4gICclQmEnOiAnXFx4YmEnLCAnJWJBJzogJ1xceGJhJywgJyVCQSc6ICdcXHhiYScsICclYmInOiAnXFx4YmInLCAnJUJiJzogJ1xceGJiJyxcbiAgJyViQic6ICdcXHhiYicsICclQkInOiAnXFx4YmInLCAnJWJjJzogJ1xceGJjJywgJyVCYyc6ICdcXHhiYycsICclYkMnOiAnXFx4YmMnLFxuICAnJUJDJzogJ1xceGJjJywgJyViZCc6ICdcXHhiZCcsICclQmQnOiAnXFx4YmQnLCAnJWJEJzogJ1xceGJkJywgJyVCRCc6ICdcXHhiZCcsXG4gICclYmUnOiAnXFx4YmUnLCAnJUJlJzogJ1xceGJlJywgJyViRSc6ICdcXHhiZScsICclQkUnOiAnXFx4YmUnLCAnJWJmJzogJ1xceGJmJyxcbiAgJyVCZic6ICdcXHhiZicsICclYkYnOiAnXFx4YmYnLCAnJUJGJzogJ1xceGJmJywgJyVjMCc6ICdcXHhjMCcsICclQzAnOiAnXFx4YzAnLFxuICAnJWMxJzogJ1xceGMxJywgJyVDMSc6ICdcXHhjMScsICclYzInOiAnXFx4YzInLCAnJUMyJzogJ1xceGMyJywgJyVjMyc6ICdcXHhjMycsXG4gICclQzMnOiAnXFx4YzMnLCAnJWM0JzogJ1xceGM0JywgJyVDNCc6ICdcXHhjNCcsICclYzUnOiAnXFx4YzUnLCAnJUM1JzogJ1xceGM1JyxcbiAgJyVjNic6ICdcXHhjNicsICclQzYnOiAnXFx4YzYnLCAnJWM3JzogJ1xceGM3JywgJyVDNyc6ICdcXHhjNycsICclYzgnOiAnXFx4YzgnLFxuICAnJUM4JzogJ1xceGM4JywgJyVjOSc6ICdcXHhjOScsICclQzknOiAnXFx4YzknLCAnJWNhJzogJ1xceGNhJywgJyVDYSc6ICdcXHhjYScsXG4gICclY0EnOiAnXFx4Y2EnLCAnJUNBJzogJ1xceGNhJywgJyVjYic6ICdcXHhjYicsICclQ2InOiAnXFx4Y2InLCAnJWNCJzogJ1xceGNiJyxcbiAgJyVDQic6ICdcXHhjYicsICclY2MnOiAnXFx4Y2MnLCAnJUNjJzogJ1xceGNjJywgJyVjQyc6ICdcXHhjYycsICclQ0MnOiAnXFx4Y2MnLFxuICAnJWNkJzogJ1xceGNkJywgJyVDZCc6ICdcXHhjZCcsICclY0QnOiAnXFx4Y2QnLCAnJUNEJzogJ1xceGNkJywgJyVjZSc6ICdcXHhjZScsXG4gICclQ2UnOiAnXFx4Y2UnLCAnJWNFJzogJ1xceGNlJywgJyVDRSc6ICdcXHhjZScsICclY2YnOiAnXFx4Y2YnLCAnJUNmJzogJ1xceGNmJyxcbiAgJyVjRic6ICdcXHhjZicsICclQ0YnOiAnXFx4Y2YnLCAnJWQwJzogJ1xceGQwJywgJyVEMCc6ICdcXHhkMCcsICclZDEnOiAnXFx4ZDEnLFxuICAnJUQxJzogJ1xceGQxJywgJyVkMic6ICdcXHhkMicsICclRDInOiAnXFx4ZDInLCAnJWQzJzogJ1xceGQzJywgJyVEMyc6ICdcXHhkMycsXG4gICclZDQnOiAnXFx4ZDQnLCAnJUQ0JzogJ1xceGQ0JywgJyVkNSc6ICdcXHhkNScsICclRDUnOiAnXFx4ZDUnLCAnJWQ2JzogJ1xceGQ2JyxcbiAgJyVENic6ICdcXHhkNicsICclZDcnOiAnXFx4ZDcnLCAnJUQ3JzogJ1xceGQ3JywgJyVkOCc6ICdcXHhkOCcsICclRDgnOiAnXFx4ZDgnLFxuICAnJWQ5JzogJ1xceGQ5JywgJyVEOSc6ICdcXHhkOScsICclZGEnOiAnXFx4ZGEnLCAnJURhJzogJ1xceGRhJywgJyVkQSc6ICdcXHhkYScsXG4gICclREEnOiAnXFx4ZGEnLCAnJWRiJzogJ1xceGRiJywgJyVEYic6ICdcXHhkYicsICclZEInOiAnXFx4ZGInLCAnJURCJzogJ1xceGRiJyxcbiAgJyVkYyc6ICdcXHhkYycsICclRGMnOiAnXFx4ZGMnLCAnJWRDJzogJ1xceGRjJywgJyVEQyc6ICdcXHhkYycsICclZGQnOiAnXFx4ZGQnLFxuICAnJURkJzogJ1xceGRkJywgJyVkRCc6ICdcXHhkZCcsICclREQnOiAnXFx4ZGQnLCAnJWRlJzogJ1xceGRlJywgJyVEZSc6ICdcXHhkZScsXG4gICclZEUnOiAnXFx4ZGUnLCAnJURFJzogJ1xceGRlJywgJyVkZic6ICdcXHhkZicsICclRGYnOiAnXFx4ZGYnLCAnJWRGJzogJ1xceGRmJyxcbiAgJyVERic6ICdcXHhkZicsICclZTAnOiAnXFx4ZTAnLCAnJUUwJzogJ1xceGUwJywgJyVlMSc6ICdcXHhlMScsICclRTEnOiAnXFx4ZTEnLFxuICAnJWUyJzogJ1xceGUyJywgJyVFMic6ICdcXHhlMicsICclZTMnOiAnXFx4ZTMnLCAnJUUzJzogJ1xceGUzJywgJyVlNCc6ICdcXHhlNCcsXG4gICclRTQnOiAnXFx4ZTQnLCAnJWU1JzogJ1xceGU1JywgJyVFNSc6ICdcXHhlNScsICclZTYnOiAnXFx4ZTYnLCAnJUU2JzogJ1xceGU2JyxcbiAgJyVlNyc6ICdcXHhlNycsICclRTcnOiAnXFx4ZTcnLCAnJWU4JzogJ1xceGU4JywgJyVFOCc6ICdcXHhlOCcsICclZTknOiAnXFx4ZTknLFxuICAnJUU5JzogJ1xceGU5JywgJyVlYSc6ICdcXHhlYScsICclRWEnOiAnXFx4ZWEnLCAnJWVBJzogJ1xceGVhJywgJyVFQSc6ICdcXHhlYScsXG4gICclZWInOiAnXFx4ZWInLCAnJUViJzogJ1xceGViJywgJyVlQic6ICdcXHhlYicsICclRUInOiAnXFx4ZWInLCAnJWVjJzogJ1xceGVjJyxcbiAgJyVFYyc6ICdcXHhlYycsICclZUMnOiAnXFx4ZWMnLCAnJUVDJzogJ1xceGVjJywgJyVlZCc6ICdcXHhlZCcsICclRWQnOiAnXFx4ZWQnLFxuICAnJWVEJzogJ1xceGVkJywgJyVFRCc6ICdcXHhlZCcsICclZWUnOiAnXFx4ZWUnLCAnJUVlJzogJ1xceGVlJywgJyVlRSc6ICdcXHhlZScsXG4gICclRUUnOiAnXFx4ZWUnLCAnJWVmJzogJ1xceGVmJywgJyVFZic6ICdcXHhlZicsICclZUYnOiAnXFx4ZWYnLCAnJUVGJzogJ1xceGVmJyxcbiAgJyVmMCc6ICdcXHhmMCcsICclRjAnOiAnXFx4ZjAnLCAnJWYxJzogJ1xceGYxJywgJyVGMSc6ICdcXHhmMScsICclZjInOiAnXFx4ZjInLFxuICAnJUYyJzogJ1xceGYyJywgJyVmMyc6ICdcXHhmMycsICclRjMnOiAnXFx4ZjMnLCAnJWY0JzogJ1xceGY0JywgJyVGNCc6ICdcXHhmNCcsXG4gICclZjUnOiAnXFx4ZjUnLCAnJUY1JzogJ1xceGY1JywgJyVmNic6ICdcXHhmNicsICclRjYnOiAnXFx4ZjYnLCAnJWY3JzogJ1xceGY3JyxcbiAgJyVGNyc6ICdcXHhmNycsICclZjgnOiAnXFx4ZjgnLCAnJUY4JzogJ1xceGY4JywgJyVmOSc6ICdcXHhmOScsICclRjknOiAnXFx4ZjknLFxuICAnJWZhJzogJ1xceGZhJywgJyVGYSc6ICdcXHhmYScsICclZkEnOiAnXFx4ZmEnLCAnJUZBJzogJ1xceGZhJywgJyVmYic6ICdcXHhmYicsXG4gICclRmInOiAnXFx4ZmInLCAnJWZCJzogJ1xceGZiJywgJyVGQic6ICdcXHhmYicsICclZmMnOiAnXFx4ZmMnLCAnJUZjJzogJ1xceGZjJyxcbiAgJyVmQyc6ICdcXHhmYycsICclRkMnOiAnXFx4ZmMnLCAnJWZkJzogJ1xceGZkJywgJyVGZCc6ICdcXHhmZCcsICclZkQnOiAnXFx4ZmQnLFxuICAnJUZEJzogJ1xceGZkJywgJyVmZSc6ICdcXHhmZScsICclRmUnOiAnXFx4ZmUnLCAnJWZFJzogJ1xceGZlJywgJyVGRSc6ICdcXHhmZScsXG4gICclZmYnOiAnXFx4ZmYnLCAnJUZmJzogJ1xceGZmJywgJyVmRic6ICdcXHhmZicsICclRkYnOiAnXFx4ZmYnXG59XG5cbmZ1bmN0aW9uIGVuY29kZWRSZXBsYWNlciAobWF0Y2gpIHtcbiAgcmV0dXJuIEVuY29kZWRMb29rdXBbbWF0Y2hdXG59XG5cbmNvbnN0IFNUQVRFX0tFWSA9IDBcbmNvbnN0IFNUQVRFX1ZBTFVFID0gMVxuY29uc3QgU1RBVEVfQ0hBUlNFVCA9IDJcbmNvbnN0IFNUQVRFX0xBTkcgPSAzXG5cbmZ1bmN0aW9uIHBhcnNlUGFyYW1zIChzdHIpIHtcbiAgY29uc3QgcmVzID0gW11cbiAgbGV0IHN0YXRlID0gU1RBVEVfS0VZXG4gIGxldCBjaGFyc2V0ID0gJydcbiAgbGV0IGlucXVvdGUgPSBmYWxzZVxuICBsZXQgZXNjYXBpbmcgPSBmYWxzZVxuICBsZXQgcCA9IDBcbiAgbGV0IHRtcCA9ICcnXG4gIGNvbnN0IGxlbiA9IHN0ci5sZW5ndGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgY29uc3QgY2hhciA9IHN0cltpXVxuICAgIGlmIChjaGFyID09PSAnXFxcXCcgJiYgaW5xdW90ZSkge1xuICAgICAgaWYgKGVzY2FwaW5nKSB7IGVzY2FwaW5nID0gZmFsc2UgfSBlbHNlIHtcbiAgICAgICAgZXNjYXBpbmcgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjaGFyID09PSAnXCInKSB7XG4gICAgICBpZiAoIWVzY2FwaW5nKSB7XG4gICAgICAgIGlmIChpbnF1b3RlKSB7XG4gICAgICAgICAgaW5xdW90ZSA9IGZhbHNlXG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9LRVlcbiAgICAgICAgfSBlbHNlIHsgaW5xdW90ZSA9IHRydWUgfVxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHsgZXNjYXBpbmcgPSBmYWxzZSB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChlc2NhcGluZyAmJiBpbnF1b3RlKSB7IHRtcCArPSAnXFxcXCcgfVxuICAgICAgZXNjYXBpbmcgPSBmYWxzZVxuICAgICAgaWYgKChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCB8fCBzdGF0ZSA9PT0gU1RBVEVfTEFORykgJiYgY2hhciA9PT0gXCInXCIpIHtcbiAgICAgICAgaWYgKHN0YXRlID09PSBTVEFURV9DSEFSU0VUKSB7XG4gICAgICAgICAgc3RhdGUgPSBTVEFURV9MQU5HXG4gICAgICAgICAgY2hhcnNldCA9IHRtcC5zdWJzdHJpbmcoMSlcbiAgICAgICAgfSBlbHNlIHsgc3RhdGUgPSBTVEFURV9WQUxVRSB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKHN0YXRlID09PSBTVEFURV9LRVkgJiZcbiAgICAgICAgKGNoYXIgPT09ICcqJyB8fCBjaGFyID09PSAnPScpICYmXG4gICAgICAgIHJlcy5sZW5ndGgpIHtcbiAgICAgICAgc3RhdGUgPSBjaGFyID09PSAnKidcbiAgICAgICAgICA/IFNUQVRFX0NIQVJTRVRcbiAgICAgICAgICA6IFNUQVRFX1ZBTFVFXG4gICAgICAgIHJlc1twXSA9IFt0bXAsIHVuZGVmaW5lZF1cbiAgICAgICAgdG1wID0gJydcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgY2hhciA9PT0gJzsnKSB7XG4gICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIGlmIChjaGFyc2V0KSB7XG4gICAgICAgICAgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICAgICAgICAgJ2JpbmFyeScsXG4gICAgICAgICAgICAgIGNoYXJzZXQpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNoYXJzZXQgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKHRtcC5sZW5ndGgpIHtcbiAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgICAgICAgfVxuICAgICAgICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHsgcmVzW3BdID0gdG1wIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgICsrcFxuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmICghaW5xdW90ZSAmJiAoY2hhciA9PT0gJyAnIHx8IGNoYXIgPT09ICdcXHQnKSkgeyBjb250aW51ZSB9XG4gICAgfVxuICAgIHRtcCArPSBjaGFyXG4gIH1cbiAgaWYgKGNoYXJzZXQgJiYgdG1wLmxlbmd0aCkge1xuICAgIHRtcCA9IGRlY29kZVRleHQodG1wLnJlcGxhY2UoUkVfRU5DT0RFRCwgZW5jb2RlZFJlcGxhY2VyKSxcbiAgICAgICdiaW5hcnknLFxuICAgICAgY2hhcnNldClcbiAgfSBlbHNlIGlmICh0bXApIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcCwgJ2JpbmFyeScsICd1dGY4JylcbiAgfVxuXG4gIGlmIChyZXNbcF0gPT09IHVuZGVmaW5lZCkge1xuICAgIGlmICh0bXApIHsgcmVzW3BdID0gdG1wIH1cbiAgfSBlbHNlIHsgcmVzW3BdWzFdID0gdG1wIH1cblxuICByZXR1cm4gcmVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGFyc2VQYXJhbXNcbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBiYXNlbmFtZSAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7IHJldHVybiAnJyB9XG4gIGZvciAodmFyIGkgPSBwYXRoLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgc3dpdGNoIChwYXRoLmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgIGNhc2UgMHgyRjogLy8gJy8nXG4gICAgICBjYXNlIDB4NUM6IC8vICdcXCdcbiAgICAgICAgcGF0aCA9IHBhdGguc2xpY2UoaSArIDEpXG4gICAgICAgIHJldHVybiAocGF0aCA9PT0gJy4uJyB8fCBwYXRoID09PSAnLicgPyAnJyA6IHBhdGgpXG4gICAgfVxuICB9XG4gIHJldHVybiAocGF0aCA9PT0gJy4uJyB8fCBwYXRoID09PSAnLicgPyAnJyA6IHBhdGgpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRPRE86XG4vLyAgKiBzdXBwb3J0IDEgbmVzdGVkIG11bHRpcGFydCBsZXZlbFxuLy8gICAgKHNlZSBzZWNvbmQgbXVsdGlwYXJ0IGV4YW1wbGUgaGVyZTpcbi8vICAgICBodHRwOi8vd3d3LnczLm9yZy9UUi9odG1sNDAxL2ludGVyYWN0L2Zvcm1zLmh0bWwjZGlkeC1tdWx0aXBhcnRmb3JtLWRhdGEpXG4vLyAgKiBzdXBwb3J0IGxpbWl0cy5maWVsZE5hbWVTaXplXG4vLyAgICAgLS0gdGhpcyB3aWxsIHJlcXVpcmUgbW9kaWZpY2F0aW9ucyB0byB1dGlscy5wYXJzZVBhcmFtc1xuXG5jb25zdCB7IFJlYWRhYmxlIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB7IGluaGVyaXRzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG5jb25zdCBEaWNlciA9IHJlcXVpcmUoJy4uLy4uL2RlcHMvZGljZXIvbGliL0RpY2VyJylcblxuY29uc3QgcGFyc2VQYXJhbXMgPSByZXF1aXJlKCcuLi91dGlscy9wYXJzZVBhcmFtcycpXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZGVjb2RlVGV4dCcpXG5jb25zdCBiYXNlbmFtZSA9IHJlcXVpcmUoJy4uL3V0aWxzL2Jhc2VuYW1lJylcbmNvbnN0IGdldExpbWl0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZ2V0TGltaXQnKVxuXG5jb25zdCBSRV9CT1VOREFSWSA9IC9eYm91bmRhcnkkL2lcbmNvbnN0IFJFX0ZJRUxEID0gL15mb3JtLWRhdGEkL2lcbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcbmNvbnN0IFJFX0ZJTEVOQU1FID0gL15maWxlbmFtZSQvaVxuY29uc3QgUkVfTkFNRSA9IC9ebmFtZSQvaVxuXG5NdWx0aXBhcnQuZGV0ZWN0ID0gL15tdWx0aXBhcnRcXC9mb3JtLWRhdGEvaVxuZnVuY3Rpb24gTXVsdGlwYXJ0IChib3ksIGNmZykge1xuICBsZXQgaVxuICBsZXQgbGVuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIGxldCBib3VuZGFyeVxuICBjb25zdCBsaW1pdHMgPSBjZmcubGltaXRzXG4gIGNvbnN0IGlzUGFydEFGaWxlID0gY2ZnLmlzUGFydEFGaWxlIHx8ICgoZmllbGROYW1lLCBjb250ZW50VHlwZSwgZmlsZU5hbWUpID0+IChjb250ZW50VHlwZSA9PT0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScgfHwgZmlsZU5hbWUgIT09IHVuZGVmaW5lZCkpXG4gIGNvbnN0IHBhcnNlZENvblR5cGUgPSBjZmcucGFyc2VkQ29uVHlwZSB8fCBbXVxuICBjb25zdCBkZWZDaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnXG4gIGNvbnN0IHByZXNlcnZlUGF0aCA9IGNmZy5wcmVzZXJ2ZVBhdGhcbiAgY29uc3QgZmlsZU9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5maWxlSHdtIH1cblxuICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWRDb25UeXBlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkocGFyc2VkQ29uVHlwZVtpXSkgJiZcbiAgICAgIFJFX0JPVU5EQVJZLnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGJvdW5kYXJ5ID0gcGFyc2VkQ29uVHlwZVtpXVsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBjaGVja0ZpbmlzaGVkICgpIHtcbiAgICBpZiAobmVuZHMgPT09IDAgJiYgZmluaXNoZWQgJiYgIWJveS5fZG9uZSkge1xuICAgICAgZmluaXNoZWQgPSBmYWxzZVxuICAgICAgc2VsZi5lbmQoKVxuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgYm91bmRhcnkgIT09ICdzdHJpbmcnKSB7IHRocm93IG5ldyBFcnJvcignTXVsdGlwYXJ0OiBCb3VuZGFyeSBub3QgZm91bmQnKSB9XG5cbiAgY29uc3QgZmllbGRTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZFNpemUnLCAxICogMTAyNCAqIDEwMjQpXG4gIGNvbnN0IGZpbGVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWxlU2l6ZScsIEluZmluaXR5KVxuICBjb25zdCBmaWxlc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmlsZXMnLCBJbmZpbml0eSlcbiAgY29uc3QgZmllbGRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZHMnLCBJbmZpbml0eSlcbiAgY29uc3QgcGFydHNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ3BhcnRzJywgSW5maW5pdHkpXG4gIGNvbnN0IGhlYWRlclBhaXJzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdoZWFkZXJQYWlycycsIDIwMDApXG4gIGNvbnN0IGhlYWRlclNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2hlYWRlclNpemUnLCA4MCAqIDEwMjQpXG5cbiAgbGV0IG5maWxlcyA9IDBcbiAgbGV0IG5maWVsZHMgPSAwXG4gIGxldCBuZW5kcyA9IDBcbiAgbGV0IGN1ckZpbGVcbiAgbGV0IGN1ckZpZWxkXG4gIGxldCBmaW5pc2hlZCA9IGZhbHNlXG5cbiAgdGhpcy5fbmVlZERyYWluID0gZmFsc2VcbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9ucGFydHMgPSAwXG4gIHRoaXMuX2JveSA9IGJveVxuXG4gIGNvbnN0IHBhcnNlckNmZyA9IHtcbiAgICBib3VuZGFyeSxcbiAgICBtYXhIZWFkZXJQYWlyczogaGVhZGVyUGFpcnNMaW1pdCxcbiAgICBtYXhIZWFkZXJTaXplOiBoZWFkZXJTaXplTGltaXQsXG4gICAgcGFydEh3bTogZmlsZU9wdHMuaGlnaFdhdGVyTWFyayxcbiAgICBoaWdoV2F0ZXJNYXJrOiBjZmcuaGlnaFdhdGVyTWFya1xuICB9XG5cbiAgdGhpcy5wYXJzZXIgPSBuZXcgRGljZXIocGFyc2VyQ2ZnKVxuICB0aGlzLnBhcnNlci5vbignZHJhaW4nLCBmdW5jdGlvbiAoKSB7XG4gICAgc2VsZi5fbmVlZERyYWluID0gZmFsc2VcbiAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX3BhdXNlKSB7XG4gICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgY2IoKVxuICAgIH1cbiAgfSkub24oJ3BhcnQnLCBmdW5jdGlvbiBvblBhcnQgKHBhcnQpIHtcbiAgICBpZiAoKytzZWxmLl9ucGFydHMgPiBwYXJ0c0xpbWl0KSB7XG4gICAgICBzZWxmLnBhcnNlci5yZW1vdmVMaXN0ZW5lcigncGFydCcsIG9uUGFydClcbiAgICAgIHNlbGYucGFyc2VyLm9uKCdwYXJ0Jywgc2tpcFBhcnQpXG4gICAgICBib3kuaGl0UGFydHNMaW1pdCA9IHRydWVcbiAgICAgIGJveS5lbWl0KCdwYXJ0c0xpbWl0JylcbiAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgIH1cblxuICAgIC8vIGhhY2sgYmVjYXVzZSBzdHJlYW1zMiBfYWx3YXlzXyBkb2Vzbid0IGVtaXQgJ2VuZCcgdW50aWwgbmV4dFRpY2ssIHNvIGxldFxuICAgIC8vIHVzIGVtaXQgJ2VuZCcgZWFybHkgc2luY2Ugd2Uga25vdyB0aGUgcGFydCBoYXMgZW5kZWQgaWYgd2UgYXJlIGFscmVhZHlcbiAgICAvLyBzZWVpbmcgdGhlIG5leHQgcGFydFxuICAgIGlmIChjdXJGaWVsZCkge1xuICAgICAgY29uc3QgZmllbGQgPSBjdXJGaWVsZFxuICAgICAgZmllbGQuZW1pdCgnZW5kJylcbiAgICAgIGZpZWxkLnJlbW92ZUFsbExpc3RlbmVycygnZW5kJylcbiAgICB9XG5cbiAgICBwYXJ0Lm9uKCdoZWFkZXInLCBmdW5jdGlvbiAoaGVhZGVyKSB7XG4gICAgICBsZXQgY29udHlwZVxuICAgICAgbGV0IGZpZWxkbmFtZVxuICAgICAgbGV0IHBhcnNlZFxuICAgICAgbGV0IGNoYXJzZXRcbiAgICAgIGxldCBlbmNvZGluZ1xuICAgICAgbGV0IGZpbGVuYW1lXG4gICAgICBsZXQgbnNpemUgPSAwXG5cbiAgICAgIGlmIChoZWFkZXJbJ2NvbnRlbnQtdHlwZSddKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlclsnY29udGVudC10eXBlJ11bMF0pXG4gICAgICAgIGlmIChwYXJzZWRbMF0pIHtcbiAgICAgICAgICBjb250eXBlID0gcGFyc2VkWzBdLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICAgIGlmIChSRV9DSEFSU0VULnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgICBjaGFyc2V0ID0gcGFyc2VkW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGNvbnR5cGUgPT09IHVuZGVmaW5lZCkgeyBjb250eXBlID0gJ3RleHQvcGxhaW4nIH1cbiAgICAgIGlmIChjaGFyc2V0ID09PSB1bmRlZmluZWQpIHsgY2hhcnNldCA9IGRlZkNoYXJzZXQgfVxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pIHtcbiAgICAgICAgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyWydjb250ZW50LWRpc3Bvc2l0aW9uJ11bMF0pXG4gICAgICAgIGlmICghUkVfRklFTEQudGVzdChwYXJzZWRbMF0pKSB7IHJldHVybiBza2lwUGFydChwYXJ0KSB9XG4gICAgICAgIGZvciAoaSA9IDAsIGxlbiA9IHBhcnNlZC5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgICAgICAgIGlmIChSRV9OQU1FLnRlc3QocGFyc2VkW2ldWzBdKSkge1xuICAgICAgICAgICAgZmllbGRuYW1lID0gcGFyc2VkW2ldWzFdXG4gICAgICAgICAgfSBlbHNlIGlmIChSRV9GSUxFTkFNRS50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgIGZpbGVuYW1lID0gcGFyc2VkW2ldWzFdXG4gICAgICAgICAgICBpZiAoIXByZXNlcnZlUGF0aCkgeyBmaWxlbmFtZSA9IGJhc2VuYW1lKGZpbGVuYW1lKSB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgeyByZXR1cm4gc2tpcFBhcnQocGFydCkgfVxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ10pIHsgZW5jb2RpbmcgPSBoZWFkZXJbJ2NvbnRlbnQtdHJhbnNmZXItZW5jb2RpbmcnXVswXS50b0xvd2VyQ2FzZSgpIH0gZWxzZSB7IGVuY29kaW5nID0gJzdiaXQnIH1cblxuICAgICAgbGV0IG9uRGF0YSxcbiAgICAgICAgb25FbmRcblxuICAgICAgaWYgKGlzUGFydEFGaWxlKGZpZWxkbmFtZSwgY29udHlwZSwgZmlsZW5hbWUpKSB7XG4gICAgICAgIC8vIGZpbGUvYmluYXJ5IGZpZWxkXG4gICAgICAgIGlmIChuZmlsZXMgPT09IGZpbGVzTGltaXQpIHtcbiAgICAgICAgICBpZiAoIWJveS5oaXRGaWxlc0xpbWl0KSB7XG4gICAgICAgICAgICBib3kuaGl0RmlsZXNMaW1pdCA9IHRydWVcbiAgICAgICAgICAgIGJveS5lbWl0KCdmaWxlc0xpbWl0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgICAgIH1cblxuICAgICAgICArK25maWxlc1xuXG4gICAgICAgIGlmIChib3kubGlzdGVuZXJDb3VudCgnZmlsZScpID09PSAwKSB7XG4gICAgICAgICAgc2VsZi5wYXJzZXIuX2lnbm9yZSgpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICArK25lbmRzXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZVN0cmVhbShmaWxlT3B0cylcbiAgICAgICAgY3VyRmlsZSA9IGZpbGVcbiAgICAgICAgZmlsZS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC0tbmVuZHNcbiAgICAgICAgICBzZWxmLl9wYXVzZSA9IGZhbHNlXG4gICAgICAgICAgY2hlY2tGaW5pc2hlZCgpXG4gICAgICAgICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9uZWVkRHJhaW4pIHtcbiAgICAgICAgICAgIGNvbnN0IGNiID0gc2VsZi5fY2JcbiAgICAgICAgICAgIHNlbGYuX2NiID0gdW5kZWZpbmVkXG4gICAgICAgICAgICBjYigpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICBmaWxlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHtcbiAgICAgICAgICBpZiAoIXNlbGYuX3BhdXNlKSB7IHJldHVybiB9XG4gICAgICAgICAgc2VsZi5fcGF1c2UgPSBmYWxzZVxuICAgICAgICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fbmVlZERyYWluKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICAgICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgY2IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBib3kuZW1pdCgnZmlsZScsIGZpZWxkbmFtZSwgZmlsZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBjb250eXBlKVxuXG4gICAgICAgIG9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgaWYgKChuc2l6ZSArPSBkYXRhLmxlbmd0aCkgPiBmaWxlU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYWxlbiA9IGZpbGVTaXplTGltaXQgLSBuc2l6ZSArIGRhdGEubGVuZ3RoXG4gICAgICAgICAgICBpZiAoZXh0cmFsZW4gPiAwKSB7IGZpbGUucHVzaChkYXRhLnNsaWNlKDAsIGV4dHJhbGVuKSkgfVxuICAgICAgICAgICAgZmlsZS50cnVuY2F0ZWQgPSB0cnVlXG4gICAgICAgICAgICBmaWxlLmJ5dGVzUmVhZCA9IGZpbGVTaXplTGltaXRcbiAgICAgICAgICAgIHBhcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJylcbiAgICAgICAgICAgIGZpbGUuZW1pdCgnbGltaXQnKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfSBlbHNlIGlmICghZmlsZS5wdXNoKGRhdGEpKSB7IHNlbGYuX3BhdXNlID0gdHJ1ZSB9XG5cbiAgICAgICAgICBmaWxlLmJ5dGVzUmVhZCA9IG5zaXplXG4gICAgICAgIH1cblxuICAgICAgICBvbkVuZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjdXJGaWxlID0gdW5kZWZpbmVkXG4gICAgICAgICAgZmlsZS5wdXNoKG51bGwpXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIG5vbi1maWxlIGZpZWxkXG4gICAgICAgIGlmIChuZmllbGRzID09PSBmaWVsZHNMaW1pdCkge1xuICAgICAgICAgIGlmICghYm95LmhpdEZpZWxkc0xpbWl0KSB7XG4gICAgICAgICAgICBib3kuaGl0RmllbGRzTGltaXQgPSB0cnVlXG4gICAgICAgICAgICBib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICAgICAgfVxuXG4gICAgICAgICsrbmZpZWxkc1xuICAgICAgICArK25lbmRzXG4gICAgICAgIGxldCBidWZmZXIgPSAnJ1xuICAgICAgICBsZXQgdHJ1bmNhdGVkID0gZmFsc2VcbiAgICAgICAgY3VyRmllbGQgPSBwYXJ0XG5cbiAgICAgICAgb25EYXRhID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgICAgICBpZiAoKG5zaXplICs9IGRhdGEubGVuZ3RoKSA+IGZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgICBjb25zdCBleHRyYWxlbiA9IChmaWVsZFNpemVMaW1pdCAtIChuc2l6ZSAtIGRhdGEubGVuZ3RoKSlcbiAgICAgICAgICAgIGJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCAwLCBleHRyYWxlbilcbiAgICAgICAgICAgIHRydW5jYXRlZCA9IHRydWVcbiAgICAgICAgICAgIHBhcnQucmVtb3ZlQWxsTGlzdGVuZXJzKCdkYXRhJylcbiAgICAgICAgICB9IGVsc2UgeyBidWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5JykgfVxuICAgICAgICB9XG5cbiAgICAgICAgb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VyRmllbGQgPSB1bmRlZmluZWRcbiAgICAgICAgICBpZiAoYnVmZmVyLmxlbmd0aCkgeyBidWZmZXIgPSBkZWNvZGVUZXh0KGJ1ZmZlciwgJ2JpbmFyeScsIGNoYXJzZXQpIH1cbiAgICAgICAgICBib3kuZW1pdCgnZmllbGQnLCBmaWVsZG5hbWUsIGJ1ZmZlciwgZmFsc2UsIHRydW5jYXRlZCwgZW5jb2RpbmcsIGNvbnR5cGUpXG4gICAgICAgICAgLS1uZW5kc1xuICAgICAgICAgIGNoZWNrRmluaXNoZWQoKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8qIEFzIG9mIG5vZGVAMmVmZTRhYjc2MTY2NiAodjAuMTAuMjkrL3YwLjExLjE0KyksIGJ1c2JveSBoYWQgYmVjb21lXG4gICAgICAgICBicm9rZW4uIFN0cmVhbXMyL3N0cmVhbXMzIGlzIGEgaHVnZSBibGFjayBib3ggb2YgY29uZnVzaW9uLCBidXRcbiAgICAgICAgIHNvbWVob3cgb3ZlcnJpZGluZyB0aGUgc3luYyBzdGF0ZSBzZWVtcyB0byBmaXggdGhpbmdzIGFnYWluIChhbmQgc3RpbGxcbiAgICAgICAgIHNlZW1zIHRvIHdvcmsgZm9yIHByZXZpb3VzIG5vZGUgdmVyc2lvbnMpLlxuICAgICAgKi9cbiAgICAgIHBhcnQuX3JlYWRhYmxlU3RhdGUuc3luYyA9IGZhbHNlXG5cbiAgICAgIHBhcnQub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgICBwYXJ0Lm9uKCdlbmQnLCBvbkVuZClcbiAgICB9KS5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICBpZiAoY3VyRmlsZSkgeyBjdXJGaWxlLmVtaXQoJ2Vycm9yJywgZXJyKSB9XG4gICAgfSlcbiAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGJveS5lbWl0KCdlcnJvcicsIGVycilcbiAgfSkub24oJ2ZpbmlzaCcsIGZ1bmN0aW9uICgpIHtcbiAgICBmaW5pc2hlZCA9IHRydWVcbiAgICBjaGVja0ZpbmlzaGVkKClcbiAgfSlcbn1cblxuTXVsdGlwYXJ0LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgY2IpIHtcbiAgY29uc3QgciA9IHRoaXMucGFyc2VyLndyaXRlKGNodW5rKVxuICBpZiAociAmJiAhdGhpcy5fcGF1c2UpIHtcbiAgICBjYigpXG4gIH0gZWxzZSB7XG4gICAgdGhpcy5fbmVlZERyYWluID0gIXJcbiAgICB0aGlzLl9jYiA9IGNiXG4gIH1cbn1cblxuTXVsdGlwYXJ0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG5cbiAgaWYgKHNlbGYucGFyc2VyLndyaXRhYmxlKSB7XG4gICAgc2VsZi5wYXJzZXIuZW5kKClcbiAgfSBlbHNlIGlmICghc2VsZi5fYm95Ll9kb25lKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLl9ib3kuX2RvbmUgPSB0cnVlXG4gICAgICBzZWxmLl9ib3kuZW1pdCgnZmluaXNoJylcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIHNraXBQYXJ0IChwYXJ0KSB7XG4gIHBhcnQucmVzdW1lKClcbn1cblxuZnVuY3Rpb24gRmlsZVN0cmVhbSAob3B0cykge1xuICBSZWFkYWJsZS5jYWxsKHRoaXMsIG9wdHMpXG5cbiAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgdGhpcy50cnVuY2F0ZWQgPSBmYWxzZVxufVxuXG5pbmhlcml0cyhGaWxlU3RyZWFtLCBSZWFkYWJsZSlcblxuRmlsZVN0cmVhbS5wcm90b3R5cGUuX3JlYWQgPSBmdW5jdGlvbiAobikge31cblxubW9kdWxlLmV4cG9ydHMgPSBNdWx0aXBhcnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUkVfUExVUyA9IC9cXCsvZ1xuXG5jb25zdCBIRVggPSBbXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDEsIDEsIDEsIDEsIDEsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsXG4gIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDBcbl1cblxuZnVuY3Rpb24gRGVjb2RlciAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChzdHIpIHtcbiAgLy8gUmVwbGFjZSAnKycgd2l0aCAnICcgYmVmb3JlIGRlY29kaW5nXG4gIHN0ciA9IHN0ci5yZXBsYWNlKFJFX1BMVVMsICcgJylcbiAgbGV0IHJlcyA9ICcnXG4gIGxldCBpID0gMDsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG4gIGZvciAoOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpcy5idWZmZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKCFIRVhbc3RyLmNoYXJDb2RlQXQoaSldKSB7XG4gICAgICAgIHJlcyArPSAnJScgKyB0aGlzLmJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICAtLWkgLy8gcmV0cnkgY2hhcmFjdGVyXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmJ1ZmZlciArPSBzdHJbaV1cbiAgICAgICAgKytwXG4gICAgICAgIGlmICh0aGlzLmJ1ZmZlci5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludCh0aGlzLmJ1ZmZlciwgMTYpKVxuICAgICAgICAgIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHN0cltpXSA9PT0gJyUnKSB7XG4gICAgICBpZiAoaSA+IHApIHtcbiAgICAgICAgcmVzICs9IHN0ci5zdWJzdHJpbmcocCwgaSlcbiAgICAgICAgcCA9IGlcbiAgICAgIH1cbiAgICAgIHRoaXMuYnVmZmVyID0gJydcbiAgICAgICsrcFxuICAgIH1cbiAgfVxuICBpZiAocCA8IGxlbiAmJiB0aGlzLmJ1ZmZlciA9PT0gdW5kZWZpbmVkKSB7IHJlcyArPSBzdHIuc3Vic3RyaW5nKHApIH1cbiAgcmV0dXJuIHJlc1xufVxuRGVjb2Rlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuYnVmZmVyID0gdW5kZWZpbmVkXG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGVjb2RlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEZWNvZGVyID0gcmVxdWlyZSgnLi4vdXRpbHMvRGVjb2RlcicpXG5jb25zdCBkZWNvZGVUZXh0ID0gcmVxdWlyZSgnLi4vdXRpbHMvZGVjb2RlVGV4dCcpXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgUkVfQ0hBUlNFVCA9IC9eY2hhcnNldCQvaVxuXG5VcmxFbmNvZGVkLmRldGVjdCA9IC9eYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWQvaVxuZnVuY3Rpb24gVXJsRW5jb2RlZCAoYm95LCBjZmcpIHtcbiAgY29uc3QgbGltaXRzID0gY2ZnLmxpbWl0c1xuICBjb25zdCBwYXJzZWRDb25UeXBlID0gY2ZnLnBhcnNlZENvblR5cGVcbiAgdGhpcy5ib3kgPSBib3lcblxuICB0aGlzLmZpZWxkU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRTaXplJywgMSAqIDEwMjQgKiAxMDI0KVxuICB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkTmFtZVNpemUnLCAxMDApXG4gIHRoaXMuZmllbGRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZHMnLCBJbmZpbml0eSlcblxuICBsZXQgY2hhcnNldFxuICBmb3IgKHZhciBpID0gMCwgbGVuID0gcGFyc2VkQ29uVHlwZS5sZW5ndGg7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZENvblR5cGVbaV0pICYmXG4gICAgICAgIFJFX0NIQVJTRVQudGVzdChwYXJzZWRDb25UeXBlW2ldWzBdKSkge1xuICAgICAgY2hhcnNldCA9IHBhcnNlZENvblR5cGVbaV1bMV0udG9Mb3dlckNhc2UoKVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoY2hhcnNldCA9PT0gdW5kZWZpbmVkKSB7IGNoYXJzZXQgPSBjZmcuZGVmQ2hhcnNldCB8fCAndXRmOCcgfVxuXG4gIHRoaXMuZGVjb2RlciA9IG5ldyBEZWNvZGVyKClcbiAgdGhpcy5jaGFyc2V0ID0gY2hhcnNldFxuICB0aGlzLl9maWVsZHMgPSAwXG4gIHRoaXMuX3N0YXRlID0gJ2tleSdcbiAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgdGhpcy5fYnl0ZXNLZXkgPSAwXG4gIHRoaXMuX2J5dGVzVmFsID0gMFxuICB0aGlzLl9rZXkgPSAnJ1xuICB0aGlzLl92YWwgPSAnJ1xuICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX3ZhbFRydW5jID0gZmFsc2VcbiAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxufVxuXG5VcmxFbmNvZGVkLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIChkYXRhLCBjYikge1xuICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7XG4gICAgaWYgKCF0aGlzLmJveS5oaXRGaWVsZHNMaW1pdCkge1xuICAgICAgdGhpcy5ib3kuaGl0RmllbGRzTGltaXQgPSB0cnVlXG4gICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZHNMaW1pdCcpXG4gICAgfVxuICAgIHJldHVybiBjYigpXG4gIH1cblxuICBsZXQgaWR4ZXE7IGxldCBpZHhhbXA7IGxldCBpOyBsZXQgcCA9IDA7IGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoXG5cbiAgd2hpbGUgKHAgPCBsZW4pIHtcbiAgICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknKSB7XG4gICAgICBpZHhlcSA9IGlkeGFtcCA9IHVuZGVmaW5lZFxuICAgICAgZm9yIChpID0gcDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3AgfVxuICAgICAgICBpZiAoZGF0YVtpXSA9PT0gMHgzRC8qID0gKi8pIHtcbiAgICAgICAgICBpZHhlcSA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNLZXkgPT09IHRoaXMuZmllbGROYW1lU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgdGhpcy5faGl0TGltaXQgPSB0cnVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzKSB7ICsrdGhpcy5fYnl0ZXNLZXkgfVxuICAgICAgfVxuXG4gICAgICBpZiAoaWR4ZXEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBhc3NpZ25tZW50XG4gICAgICAgIGlmIChpZHhlcSA+IHApIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhlcSkpIH1cbiAgICAgICAgdGhpcy5fc3RhdGUgPSAndmFsJ1xuXG4gICAgICAgIHRoaXMuX2hpdExpbWl0ID0gZmFsc2VcbiAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IHRydWVcbiAgICAgICAgdGhpcy5fdmFsID0gJydcbiAgICAgICAgdGhpcy5fYnl0ZXNWYWwgPSAwXG4gICAgICAgIHRoaXMuX3ZhbFRydW5jID0gZmFsc2VcbiAgICAgICAgdGhpcy5kZWNvZGVyLnJlc2V0KClcblxuICAgICAgICBwID0gaWR4ZXEgKyAxXG4gICAgICB9IGVsc2UgaWYgKGlkeGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIGtleSB3aXRoIG5vIGFzc2lnbm1lbnRcbiAgICAgICAgKyt0aGlzLl9maWVsZHNcbiAgICAgICAgbGV0IGtleTsgY29uc3Qga2V5VHJ1bmMgPSB0aGlzLl9rZXlUcnVuY1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyBrZXkgPSAodGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpZHhhbXApKSkgfSBlbHNlIHsga2V5ID0gdGhpcy5fa2V5IH1cblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX2tleSA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzS2V5ID0gMFxuICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgaWYgKGtleS5sZW5ndGgpIHtcbiAgICAgICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQoa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICAgICcnLFxuICAgICAgICAgICAga2V5VHJ1bmMsXG4gICAgICAgICAgICBmYWxzZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl9ieXRlc0tleSA9IHRoaXMuX2tleS5sZW5ndGgpID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fa2V5ICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlkeGFtcCA9IHVuZGVmaW5lZFxuICAgICAgZm9yIChpID0gcDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3AgfVxuICAgICAgICBpZiAoZGF0YVtpXSA9PT0gMHgyNi8qICYgKi8pIHtcbiAgICAgICAgICBpZHhhbXAgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcyAmJiB0aGlzLl9ieXRlc1ZhbCA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzVmFsIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGFtcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGlmIChpZHhhbXAgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkgfVxuICAgICAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICAgICAgdGhpcy5fdmFsVHJ1bmMpXG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ2tleSdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX2tleSA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzS2V5ID0gMFxuICAgICAgICB0aGlzLl9rZXlUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGFtcCArIDFcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkgeyByZXR1cm4gY2IoKSB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuX2hpdExpbWl0KSB7XG4gICAgICAgIC8vIHdlIG1heSBub3QgaGF2ZSBoaXQgdGhlIGFjdHVhbCBsaW1pdCBpZiB0aGVyZSBhcmUgZW5jb2RlZCBieXRlcy4uLlxuICAgICAgICBpZiAoaSA+IHApIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwLCBpKSkgfVxuICAgICAgICBwID0gaVxuICAgICAgICBpZiAoKHRoaXMuX3ZhbCA9PT0gJycgJiYgdGhpcy5maWVsZFNpemVMaW1pdCA9PT0gMCkgfHxcbiAgICAgICAgICAgICh0aGlzLl9ieXRlc1ZhbCA9IHRoaXMuX3ZhbC5sZW5ndGgpID09PSB0aGlzLmZpZWxkU2l6ZUxpbWl0KSB7XG4gICAgICAgICAgLy8geWVwLCB3ZSBhY3R1YWxseSBkaWQgaGl0IHRoZSBsaW1pdFxuICAgICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSBmYWxzZVxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAocCA8IGxlbikgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHApKSB9XG4gICAgICAgIHAgPSBsZW5cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY2IoKVxufVxuXG5VcmxFbmNvZGVkLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoKSB7XG4gIGlmICh0aGlzLmJveS5fZG9uZSkgeyByZXR1cm4gfVxuXG4gIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ2tleScgJiYgdGhpcy5fa2V5Lmxlbmd0aCA+IDApIHtcbiAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgICcnLFxuICAgICAgdGhpcy5fa2V5VHJ1bmMsXG4gICAgICBmYWxzZSlcbiAgfSBlbHNlIGlmICh0aGlzLl9zdGF0ZSA9PT0gJ3ZhbCcpIHtcbiAgICB0aGlzLmJveS5lbWl0KCdmaWVsZCcsIGRlY29kZVRleHQodGhpcy5fa2V5LCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgIGRlY29kZVRleHQodGhpcy5fdmFsLCAnYmluYXJ5JywgdGhpcy5jaGFyc2V0KSxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgdGhpcy5fdmFsVHJ1bmMpXG4gIH1cbiAgdGhpcy5ib3kuX2RvbmUgPSB0cnVlXG4gIHRoaXMuYm95LmVtaXQoJ2ZpbmlzaCcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gVXJsRW5jb2RlZFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IHsgaW5oZXJpdHMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCBEaWNlciA9IHJlcXVpcmUoJy4uL2RlcHMvZGljZXIvbGliL0RpY2VyJylcblxuY29uc3QgTXVsdGlwYXJ0UGFyc2VyID0gcmVxdWlyZSgnLi90eXBlcy9tdWx0aXBhcnQnKVxuY29uc3QgVXJsZW5jb2RlZFBhcnNlciA9IHJlcXVpcmUoJy4vdHlwZXMvdXJsZW5jb2RlZCcpXG5jb25zdCBwYXJzZVBhcmFtcyA9IHJlcXVpcmUoJy4vdXRpbHMvcGFyc2VQYXJhbXMnKVxuXG5mdW5jdGlvbiBCdXNib3kgKG9wdHMpIHtcbiAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIEJ1c2JveSkpIHsgcmV0dXJuIG5ldyBCdXNib3kob3B0cykgfVxuXG4gIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCdXNib3kgZXhwZWN0ZWQgYW4gb3B0aW9ucy1PYmplY3QuJylcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCdXNib3kgZXhwZWN0ZWQgYW4gb3B0aW9ucy1PYmplY3Qgd2l0aCBoZWFkZXJzLWF0dHJpYnV0ZS4nKVxuICB9XG4gIGlmICh0eXBlb2Ygb3B0cy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdNaXNzaW5nIENvbnRlbnQtVHlwZS1oZWFkZXIuJylcbiAgfVxuXG4gIGNvbnN0IHtcbiAgICBoZWFkZXJzLFxuICAgIC4uLnN0cmVhbU9wdGlvbnNcbiAgfSA9IG9wdHNcblxuICB0aGlzLm9wdHMgPSB7XG4gICAgYXV0b0Rlc3Ryb3k6IGZhbHNlLFxuICAgIC4uLnN0cmVhbU9wdGlvbnNcbiAgfVxuICBXcml0YWJsZVN0cmVhbS5jYWxsKHRoaXMsIHRoaXMub3B0cylcblxuICB0aGlzLl9kb25lID0gZmFsc2VcbiAgdGhpcy5fcGFyc2VyID0gdGhpcy5nZXRQYXJzZXJCeUhlYWRlcnMoaGVhZGVycylcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxufVxuaW5oZXJpdHMoQnVzYm95LCBXcml0YWJsZVN0cmVhbSlcblxuQnVzYm95LnByb3RvdHlwZS5lbWl0ID0gZnVuY3Rpb24gKGV2KSB7XG4gIGlmIChldiA9PT0gJ2ZpbmlzaCcpIHtcbiAgICBpZiAoIXRoaXMuX2RvbmUpIHtcbiAgICAgIHRoaXMuX3BhcnNlcj8uZW5kKClcbiAgICAgIHJldHVyblxuICAgIH0gZWxzZSBpZiAodGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLl9maW5pc2hlZCA9IHRydWVcbiAgfVxuICBXcml0YWJsZVN0cmVhbS5wcm90b3R5cGUuZW1pdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1c2JveS5wcm90b3R5cGUuZ2V0UGFyc2VyQnlIZWFkZXJzID0gZnVuY3Rpb24gKGhlYWRlcnMpIHtcbiAgY29uc3QgcGFyc2VkID0gcGFyc2VQYXJhbXMoaGVhZGVyc1snY29udGVudC10eXBlJ10pXG5cbiAgY29uc3QgY2ZnID0ge1xuICAgIGRlZkNoYXJzZXQ6IHRoaXMub3B0cy5kZWZDaGFyc2V0LFxuICAgIGZpbGVId206IHRoaXMub3B0cy5maWxlSHdtLFxuICAgIGhlYWRlcnMsXG4gICAgaGlnaFdhdGVyTWFyazogdGhpcy5vcHRzLmhpZ2hXYXRlck1hcmssXG4gICAgaXNQYXJ0QUZpbGU6IHRoaXMub3B0cy5pc1BhcnRBRmlsZSxcbiAgICBsaW1pdHM6IHRoaXMub3B0cy5saW1pdHMsXG4gICAgcGFyc2VkQ29uVHlwZTogcGFyc2VkLFxuICAgIHByZXNlcnZlUGF0aDogdGhpcy5vcHRzLnByZXNlcnZlUGF0aFxuICB9XG5cbiAgaWYgKE11bHRpcGFydFBhcnNlci5kZXRlY3QudGVzdChwYXJzZWRbMF0pKSB7XG4gICAgcmV0dXJuIG5ldyBNdWx0aXBhcnRQYXJzZXIodGhpcywgY2ZnKVxuICB9XG4gIGlmIChVcmxlbmNvZGVkUGFyc2VyLmRldGVjdC50ZXN0KHBhcnNlZFswXSkpIHtcbiAgICByZXR1cm4gbmV3IFVybGVuY29kZWRQYXJzZXIodGhpcywgY2ZnKVxuICB9XG4gIHRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgQ29udGVudC1UeXBlLicpXG59XG5cbkJ1c2JveS5wcm90b3R5cGUuX3dyaXRlID0gZnVuY3Rpb24gKGNodW5rLCBlbmNvZGluZywgY2IpIHtcbiAgdGhpcy5fcGFyc2VyLndyaXRlKGNodW5rLCBjYilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCdXNib3lcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSBCdXNib3lcbm1vZHVsZS5leHBvcnRzLkJ1c2JveSA9IEJ1c2JveVxuXG5tb2R1bGUuZXhwb3J0cy5EaWNlciA9IERpY2VyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgTWVzc2FnZUNoYW5uZWwsIHJlY2VpdmVNZXNzYWdlT25Qb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnUE9TVCddXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQgPSBuZXcgU2V0KGNvcnNTYWZlTGlzdGVkTWV0aG9kcylcblxuY29uc3QgbnVsbEJvZHlTdGF0dXMgPSBbMTAxLCAyMDQsIDIwNSwgMzA0XVxuXG5jb25zdCByZWRpcmVjdFN0YXR1cyA9IFszMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Jsb2NrLWJhZC1wb3J0XG5jb25zdCBiYWRQb3J0cyA9IFtcbiAgJzEnLCAnNycsICc5JywgJzExJywgJzEzJywgJzE1JywgJzE3JywgJzE5JywgJzIwJywgJzIxJywgJzIyJywgJzIzJywgJzI1JywgJzM3JywgJzQyJywgJzQzJywgJzUzJywgJzY5JywgJzc3JywgJzc5JyxcbiAgJzg3JywgJzk1JywgJzEwMScsICcxMDInLCAnMTAzJywgJzEwNCcsICcxMDknLCAnMTEwJywgJzExMScsICcxMTMnLCAnMTE1JywgJzExNycsICcxMTknLCAnMTIzJywgJzEzNScsICcxMzcnLFxuICAnMTM5JywgJzE0MycsICcxNjEnLCAnMTc5JywgJzM4OScsICc0MjcnLCAnNDY1JywgJzUxMicsICc1MTMnLCAnNTE0JywgJzUxNScsICc1MjYnLCAnNTMwJywgJzUzMScsICc1MzInLFxuICAnNTQwJywgJzU0OCcsICc1NTQnLCAnNTU2JywgJzU2MycsICc1ODcnLCAnNjAxJywgJzYzNicsICc5ODknLCAnOTkwJywgJzk5MycsICc5OTUnLCAnMTcxOScsICcxNzIwJywgJzE3MjMnLFxuICAnMjA0OScsICczNjU5JywgJzQwNDUnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY5NycsXG4gICcxMDA4MCdcbl1cblxuY29uc3QgYmFkUG9ydHNTZXQgPSBuZXcgU2V0KGJhZFBvcnRzKVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWNpZXNcbmNvbnN0IHJlZmVycmVyUG9saWN5ID0gW1xuICAnJyxcbiAgJ25vLXJlZmVycmVyJyxcbiAgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJyxcbiAgJ3NhbWUtb3JpZ2luJyxcbiAgJ29yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luJyxcbiAgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3Vuc2FmZS11cmwnXG5dXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IFsnZm9sbG93JywgJ21hbnVhbCcsICdlcnJvciddXG5cbmNvbnN0IHNhZmVNZXRob2RzID0gWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ11cbmNvbnN0IHNhZmVNZXRob2RzU2V0ID0gbmV3IFNldChzYWZlTWV0aG9kcylcblxuY29uc3QgcmVxdWVzdE1vZGUgPSBbJ25hdmlnYXRlJywgJ3NhbWUtb3JpZ2luJywgJ25vLWNvcnMnLCAnY29ycyddXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IFsnb21pdCcsICdzYW1lLW9yaWdpbicsICdpbmNsdWRlJ11cblxuY29uc3QgcmVxdWVzdENhY2hlID0gW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWJvZHktaGVhZGVyLW5hbWVcbmNvbnN0IHJlcXVlc3RCb2R5SGVhZGVyID0gW1xuICAnY29udGVudC1lbmNvZGluZycsXG4gICdjb250ZW50LWxhbmd1YWdlJyxcbiAgJ2NvbnRlbnQtbG9jYXRpb24nLFxuICAnY29udGVudC10eXBlJyxcbiAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDIxXG4gIC8vICdDb250ZW50LUxlbmd0aCcgaXMgYSBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHdoaWNoIGlzIHR5cGljYWxseVxuICAvLyByZW1vdmVkIGluIHRoZSBIZWFkZXJzIGltcGxlbWVudGF0aW9uLiBIb3dldmVyLCB1bmRpY2kgZG9lc24ndFxuICAvLyBmaWx0ZXIgb3V0IGhlYWRlcnMsIHNvIHdlIGFkZCBpdCBoZXJlLlxuICAnY29udGVudC1sZW5ndGgnXG5dXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNlbnVtZGVmLXJlcXVlc3RkdXBsZXhcbmNvbnN0IHJlcXVlc3REdXBsZXggPSBbXG4gICdoYWxmJ1xuXVxuXG4vLyBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzID0gWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ11cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHNTZXQgPSBuZXcgU2V0KGZvcmJpZGRlbk1ldGhvZHMpXG5cbmNvbnN0IHN1YnJlc291cmNlID0gW1xuICAnYXVkaW8nLFxuICAnYXVkaW93b3JrbGV0JyxcbiAgJ2ZvbnQnLFxuICAnaW1hZ2UnLFxuICAnbWFuaWZlc3QnLFxuICAncGFpbnR3b3JrbGV0JyxcbiAgJ3NjcmlwdCcsXG4gICdzdHlsZScsXG4gICd0cmFjaycsXG4gICd2aWRlbycsXG4gICd4c2x0JyxcbiAgJydcbl1cbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydET01FeGNlcHRpb24nXX0gKi9cbmNvbnN0IERPTUV4Y2VwdGlvbiA9IGdsb2JhbFRoaXMuRE9NRXhjZXB0aW9uID8/ICgoKSA9PiB7XG4gIC8vIERPTUV4Y2VwdGlvbiB3YXMgb25seSBtYWRlIGEgZ2xvYmFsIGluIE5vZGUgdjE3LjAuMCxcbiAgLy8gYnV0IGZldGNoIHN1cHBvcnRzID49IHYxNi44LlxuICB0cnkge1xuICAgIGF0b2IoJ34nKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gT2JqZWN0LmdldFByb3RvdHlwZU9mKGVycikuY29uc3RydWN0b3JcbiAgfVxufSkoKVxuXG5sZXQgY2hhbm5lbFxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ3N0cnVjdHVyZWRDbG9uZSddfSAqL1xuY29uc3Qgc3RydWN0dXJlZENsb25lID1cbiAgZ2xvYmFsVGhpcy5zdHJ1Y3R1cmVkQ2xvbmUgPz9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvYjI3YWUyNGRjYzQyNTFiYWQ3MjZkOWQ4NGJhZjY3OGQxZjcwN2ZlZC9saWIvaW50ZXJuYWwvc3RydWN0dXJlZF9jbG9uZS5qc1xuICAvLyBzdHJ1Y3R1cmVkQ2xvbmUgd2FzIGFkZGVkIGluIHYxNy4wLjAsIGJ1dCBmZXRjaCBzdXBwb3J0cyB2MTYuOFxuICBmdW5jdGlvbiBzdHJ1Y3R1cmVkQ2xvbmUgKHZhbHVlLCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ21pc3NpbmcgYXJndW1lbnQnKVxuICAgIH1cblxuICAgIGlmICghY2hhbm5lbCkge1xuICAgICAgY2hhbm5lbCA9IG5ldyBNZXNzYWdlQ2hhbm5lbCgpXG4gICAgfVxuICAgIGNoYW5uZWwucG9ydDEudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDIudW5yZWYoKVxuICAgIGNoYW5uZWwucG9ydDEucG9zdE1lc3NhZ2UodmFsdWUsIG9wdGlvbnM/LnRyYW5zZmVyKVxuICAgIHJldHVybiByZWNlaXZlTWVzc2FnZU9uUG9ydChjaGFubmVsLnBvcnQyKS5tZXNzYWdlXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIERPTUV4Y2VwdGlvbixcbiAgc3RydWN0dXJlZENsb25lLFxuICBzdWJyZXNvdXJjZSxcbiAgZm9yYmlkZGVuTWV0aG9kcyxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVkaXJlY3RTdGF0dXMsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kcyxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIHNhZmVNZXRob2RzLFxuICBiYWRQb3J0cyxcbiAgcmVxdWVzdER1cGxleCxcbiAgc3VicmVzb3VyY2VTZXQsXG4gIGJhZFBvcnRzU2V0LFxuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICBzYWZlTWV0aG9kc1NldCxcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgcmVmZXJyZXJQb2xpY3lTZXRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gSW4gY2FzZSBvZiBicmVha2luZyBjaGFuZ2VzLCBpbmNyZWFzZSB0aGUgdmVyc2lvblxuLy8gbnVtYmVyIHRvIGF2b2lkIGNvbmZsaWN0cy5cbmNvbnN0IGdsb2JhbE9yaWdpbiA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxPcmlnaW4uMScpXG5cbmZ1bmN0aW9uIGdldEdsb2JhbE9yaWdpbiAoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzW2dsb2JhbE9yaWdpbl1cbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsT3JpZ2luIChuZXdPcmlnaW4pIHtcbiAgaWYgKG5ld09yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgICAgdmFsdWU6IHVuZGVmaW5lZCxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSlcblxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTChuZXdPcmlnaW4pXG5cbiAgaWYgKHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHA6JyAmJiBwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwczonKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgT25seSBodHRwICYgaHR0cHMgdXJscyBhcmUgYWxsb3dlZCwgcmVjZWl2ZWQgJHtwYXJzZWRVUkwucHJvdG9jb2x9YClcbiAgfVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICB2YWx1ZTogcGFyc2VkVVJMLFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEdsb2JhbE9yaWdpbixcbiAgc2V0R2xvYmFsT3JpZ2luXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcmVkaXJlY3RTdGF0dXNTZXQsIHJlZmVycmVyUG9saWN5U2V0OiByZWZlcnJlclBvbGljeVRva2VucywgYmFkUG9ydHNTZXQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2dsb2JhbCcpXG5jb25zdCB7IHBlcmZvcm1hbmNlIH0gPSByZXF1aXJlKCdwZXJmX2hvb2tzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSwgdG9VU1ZTdHJpbmcsIFJlYWRhYmxlU3RyZWFtRnJvbSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGlzVWludDhBcnJheSB9ID0gcmVxdWlyZSgndXRpbC90eXBlcycpXG5cbmxldCBzdXBwb3J0ZWRIYXNoZXMgPSBbXVxuXG4vLyBodHRwczovL25vZGVqcy5vcmcvYXBpL2NyeXB0by5odG1sI2RldGVybWluaW5nLWlmLWNyeXB0by1zdXBwb3J0LWlzLXVuYXZhaWxhYmxlXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl8dW5kZWZpbmVkfSAqL1xubGV0IGNyeXB0b1xuXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxuICBjb25zdCBwb3NzaWJsZVJlbGV2YW50SGFzaGVzID0gWydzaGEyNTYnLCAnc2hhMzg0JywgJ3NoYTUxMiddXG4gIHN1cHBvcnRlZEhhc2hlcyA9IGNyeXB0by5nZXRIYXNoZXMoKS5maWx0ZXIoKGhhc2gpID0+IHBvc3NpYmxlUmVsZXZhbnRIYXNoZXMuaW5jbHVkZXMoaGFzaCkpXG4vKiBjOCBpZ25vcmUgbmV4dCAzICovXG59IGNhdGNoIHtcbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VVUkwgKHJlc3BvbnNlKSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZXNcbiAgLy8gQSByZXNwb25zZSBoYXMgYW4gYXNzb2NpYXRlZCBVUkwuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgbGFzdCBVUkxcbiAgLy8gaW4gcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGFuZCBudWxsIGlmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eS5cbiAgY29uc3QgdXJsTGlzdCA9IHJlc3BvbnNlLnVybExpc3RcbiAgY29uc3QgbGVuZ3RoID0gdXJsTGlzdC5sZW5ndGhcbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IG51bGwgOiB1cmxMaXN0W2xlbmd0aCAtIDFdLnRvU3RyaW5nKClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtbG9jYXRpb24tdXJsXG5mdW5jdGlvbiByZXNwb25zZUxvY2F0aW9uVVJMIChyZXNwb25zZSwgcmVxdWVzdEZyYWdtZW50KSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHJldHVybiBudWxsLlxuICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDIuIExldCBsb2NhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuXG4gIC8vIGBMb2NhdGlvbmAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdsb2NhdGlvbicpXG5cbiAgLy8gMy4gSWYgbG9jYXRpb24gaXMgYSBoZWFkZXIgdmFsdWUsIHRoZW4gc2V0IGxvY2F0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgcGFyc2luZyBsb2NhdGlvbiB3aXRoIHJlc3BvbnNlXHUyMDE5cyBVUkwuXG4gIGlmIChsb2NhdGlvbiAhPT0gbnVsbCAmJiBpc1ZhbGlkSGVhZGVyVmFsdWUobG9jYXRpb24pKSB7XG4gICAgbG9jYXRpb24gPSBuZXcgVVJMKGxvY2F0aW9uLCByZXNwb25zZVVSTChyZXNwb25zZSkpXG4gIH1cblxuICAvLyA0LiBJZiBsb2NhdGlvbiBpcyBhIFVSTCB3aG9zZSBmcmFnbWVudCBpcyBudWxsLCB0aGVuIHNldCBsb2NhdGlvblx1MjAxOXNcbiAgLy8gZnJhZ21lbnQgdG8gcmVxdWVzdEZyYWdtZW50LlxuICBpZiAobG9jYXRpb24gJiYgIWxvY2F0aW9uLmhhc2gpIHtcbiAgICBsb2NhdGlvbi5oYXNoID0gcmVxdWVzdEZyYWdtZW50XG4gIH1cblxuICAvLyA1LiBSZXR1cm4gbG9jYXRpb24uXG4gIHJldHVybiBsb2NhdGlvblxufVxuXG4vKiogQHJldHVybnMge1VSTH0gKi9cbmZ1bmN0aW9uIHJlcXVlc3RDdXJyZW50VVJMIChyZXF1ZXN0KSB7XG4gIHJldHVybiByZXF1ZXN0LnVybExpc3RbcmVxdWVzdC51cmxMaXN0Lmxlbmd0aCAtIDFdXG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RCYWRQb3J0IChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCB1cmwgYmUgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgLy8gMi4gSWYgdXJsXHUyMDE5cyBzY2hlbWUgaXMgYW4gSFRUUChTKSBzY2hlbWUgYW5kIHVybFx1MjAxOXMgcG9ydCBpcyBhIGJhZCBwb3J0LFxuICAvLyB0aGVuIHJldHVybiBibG9ja2VkLlxuICBpZiAodXJsSXNIdHRwSHR0cHNTY2hlbWUodXJsKSAmJiBiYWRQb3J0c1NldC5oYXModXJsLnBvcnQpKSB7XG4gICAgcmV0dXJuICdibG9ja2VkJ1xuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGFsbG93ZWQuXG4gIHJldHVybiAnYWxsb3dlZCdcbn1cblxuZnVuY3Rpb24gaXNFcnJvckxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gb2JqZWN0IGluc3RhbmNlb2YgRXJyb3IgfHwgKFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFcnJvcicgfHxcbiAgICBvYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRE9NRXhjZXB0aW9uJ1xuICApXG59XG5cbi8vIENoZWNrIHdoZXRoZXIgfHN0YXR1c1RleHR8IGlzIGEgQnl0ZVN0cmluZyBhbmRcbi8vIG1hdGNoZXMgdGhlIFJlYXNvbi1QaHJhc2UgdG9rZW4gcHJvZHVjdGlvbi5cbi8vIFJGQyAyNjE2OiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMjYxNlxuLy8gUkZDIDcyMzA6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwXG4vLyBcInJlYXNvbi1waHJhc2UgPSAqKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcIlxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2Nocm9taXVtL2Jsb2IvOTQuMC40NjA0LjEvdGhpcmRfcGFydHkvYmxpbmsvcmVuZGVyZXIvY29yZS9mZXRjaC9yZXNwb25zZS5jYyNMMTE2XG5mdW5jdGlvbiBpc1ZhbGlkUmVhc29uUGhyYXNlIChzdGF0dXNUZXh0KSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgc3RhdHVzVGV4dC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGMgPSBzdGF0dXNUZXh0LmNoYXJDb2RlQXQoaSlcbiAgICBpZiAoXG4gICAgICAhKFxuICAgICAgICAoXG4gICAgICAgICAgYyA9PT0gMHgwOSB8fCAvLyBIVEFCXG4gICAgICAgICAgKGMgPj0gMHgyMCAmJiBjIDw9IDB4N2UpIHx8IC8vIFNQIC8gVkNIQVJcbiAgICAgICAgICAoYyA+PSAweDgwICYmIGMgPD0gMHhmZilcbiAgICAgICAgKSAvLyBvYnMtdGV4dFxuICAgICAgKVxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi42XG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICovXG5mdW5jdGlvbiBpc1Rva2VuQ2hhckNvZGUgKGMpIHtcbiAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAweDIyOlxuICAgIGNhc2UgMHgyODpcbiAgICBjYXNlIDB4Mjk6XG4gICAgY2FzZSAweDJjOlxuICAgIGNhc2UgMHgyZjpcbiAgICBjYXNlIDB4M2E6XG4gICAgY2FzZSAweDNiOlxuICAgIGNhc2UgMHgzYzpcbiAgICBjYXNlIDB4M2Q6XG4gICAgY2FzZSAweDNlOlxuICAgIGNhc2UgMHgzZjpcbiAgICBjYXNlIDB4NDA6XG4gICAgY2FzZSAweDViOlxuICAgIGNhc2UgMHg1YzpcbiAgICBjYXNlIDB4NWQ6XG4gICAgY2FzZSAweDdiOlxuICAgIGNhc2UgMHg3ZDpcbiAgICAgIC8vIERRVU9URSBhbmQgXCIoKSwvOjs8PT4/QFtcXF17fVwiXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVkNIQVIgJXgyMS03RVxuICAgICAgcmV0dXJuIGMgPj0gMHgyMSAmJiBjIDw9IDB4N2VcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyYWN0ZXJzXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIVFRQVG9rZW4gKGNoYXJhY3RlcnMpIHtcbiAgaWYgKGNoYXJhY3RlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFpc1Rva2VuQ2hhckNvZGUoY2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLW5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkSGVhZGVyTmFtZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgcmV0dXJuIGlzVmFsaWRIVFRQVG9rZW4ocG90ZW50aWFsVmFsdWUpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLXZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhlYWRlclZhbHVlIChwb3RlbnRpYWxWYWx1ZSkge1xuICAvLyAtIEhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIEhUVFAgdGFiIG9yIHNwYWNlIGJ5dGVzLlxuICAvLyAtIENvbnRhaW5zIG5vIDB4MDAgKE5VTCkgb3IgSFRUUCBuZXdsaW5lIGJ5dGVzLlxuICBpZiAoXG4gICAgcG90ZW50aWFsVmFsdWUuc3RhcnRzV2l0aCgnXFx0JykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5zdGFydHNXaXRoKCcgJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5lbmRzV2l0aCgnXFx0JykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5lbmRzV2l0aCgnICcpXG4gICkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXDAnKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXHInKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXG4nKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzZXQtcmVxdWVzdHMtcmVmZXJyZXItcG9saWN5LW9uLXJlZGlyZWN0XG5mdW5jdGlvbiBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0IChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSkge1xuICAvLyAgR2l2ZW4gYSByZXF1ZXN0IHJlcXVlc3QgYW5kIGEgcmVzcG9uc2UgYWN0dWFsUmVzcG9uc2UsIHRoaXMgYWxnb3JpdGhtXG4gIC8vICB1cGRhdGVzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBhY2NvcmRpbmcgdG8gdGhlIFJlZmVycmVyLVBvbGljeVxuICAvLyAgaGVhZGVyIChpZiBhbnkpIGluIGFjdHVhbFJlc3BvbnNlLlxuXG4gIC8vIDEuIExldCBwb2xpY3kgYmUgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgXHUwMEE3IDguMSBQYXJzZSBhIHJlZmVycmVyIHBvbGljeVxuICAvLyBmcm9tIGEgUmVmZXJyZXItUG9saWN5IGhlYWRlciBvbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3kgZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXJcbiAgLy8gMS4gTGV0IHBvbGljeS10b2tlbnMgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlcyBnaXZlbiBgUmVmZXJyZXItUG9saWN5YCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBjb25zdCB7IGhlYWRlcnNMaXN0IH0gPSBhY3R1YWxSZXNwb25zZVxuICAvLyAyLiBMZXQgcG9saWN5IGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIC8vIDMuIEZvciBlYWNoIHRva2VuIGluIHBvbGljeS10b2tlbnMsIGlmIHRva2VuIGlzIGEgcmVmZXJyZXIgcG9saWN5IGFuZCB0b2tlbiBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcG9saWN5IHRvIHRva2VuLlxuICAvLyA0LiBSZXR1cm4gcG9saWN5LlxuICBjb25zdCBwb2xpY3lIZWFkZXIgPSAoaGVhZGVyc0xpc3QuZ2V0KCdyZWZlcnJlci1wb2xpY3knKSA/PyAnJykuc3BsaXQoJywnKVxuXG4gIC8vIE5vdGU6IEFzIHRoZSByZWZlcnJlci1wb2xpY3kgY2FuIGNvbnRhaW4gbXVsdGlwbGUgcG9saWNpZXNcbiAgLy8gc2VwYXJhdGVkIGJ5IGNvbW1hLCB3ZSBuZWVkIHRvIGxvb3AgdGhyb3VnaCBhbGwgb2YgdGhlbVxuICAvLyBhbmQgcGljayB0aGUgZmlyc3QgdmFsaWQgb25lLlxuICAvLyBSZWY6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9SZWZlcnJlci1Qb2xpY3kjc3BlY2lmeV9hX2ZhbGxiYWNrX3BvbGljeVxuICBsZXQgcG9saWN5ID0gJydcbiAgaWYgKHBvbGljeUhlYWRlci5sZW5ndGggPiAwKSB7XG4gICAgLy8gVGhlIHJpZ2h0LW1vc3QgcG9saWN5IHRha2VzIHByZWNlZGVuY2UuXG4gICAgLy8gVGhlIGxlZnQtbW9zdCBwb2xpY3kgaXMgdGhlIGZhbGxiYWNrLlxuICAgIGZvciAobGV0IGkgPSBwb2xpY3lIZWFkZXIubGVuZ3RoOyBpICE9PSAwOyBpLS0pIHtcbiAgICAgIGNvbnN0IHRva2VuID0gcG9saWN5SGVhZGVyW2kgLSAxXS50cmltKClcbiAgICAgIGlmIChyZWZlcnJlclBvbGljeVRva2Vucy5oYXModG9rZW4pKSB7XG4gICAgICAgIHBvbGljeSA9IHRva2VuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMi4gSWYgcG9saWN5IGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgdG8gcG9saWN5LlxuICBpZiAocG9saWN5ICE9PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBwb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3Jvc3Mtb3JpZ2luLXJlc291cmNlLXBvbGljeS1jaGVja1xuZnVuY3Rpb24gY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ2FsbG93ZWQnXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWNvcnMtY2hlY2tcbmZ1bmN0aW9uIGNvcnNDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC10YW8tY2hlY2tcbmZ1bmN0aW9uIFRBT0NoZWNrICgpIHtcbiAgLy8gVE9ET1xuICByZXR1cm4gJ3N1Y2Nlc3MnXG59XG5cbmZ1bmN0aW9uIGFwcGVuZEZldGNoTWV0YWRhdGEgKGh0dHBSZXF1ZXN0KSB7XG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtZGVzdC1oZWFkZXJcbiAgLy8gIFRPRE9cblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLW1vZGUtaGVhZGVyXG5cbiAgLy8gIDEuIEFzc2VydDogclx1MjAxOXMgdXJsIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLlxuICAvLyAgVE9ET1xuXG4gIC8vICAyLiBMZXQgaGVhZGVyIGJlIGEgU3RydWN0dXJlZCBIZWFkZXIgd2hvc2UgdmFsdWUgaXMgYSB0b2tlbi5cbiAgbGV0IGhlYWRlciA9IG51bGxcblxuICAvLyAgMy4gU2V0IGhlYWRlclx1MjAxOXMgdmFsdWUgdG8gclx1MjAxOXMgbW9kZS5cbiAgaGVhZGVyID0gaHR0cFJlcXVlc3QubW9kZVxuXG4gIC8vICA0LiBTZXQgYSBzdHJ1Y3R1cmVkIGZpZWxkIHZhbHVlIGBTZWMtRmV0Y2gtTW9kZWAvaGVhZGVyIGluIHJcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5zZXQoJ3NlYy1mZXRjaC1tb2RlJywgaGVhZGVyKVxuXG4gIC8vICBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLWZldGNoLW1ldGFkYXRhLyNzZWMtZmV0Y2gtc2l0ZS1oZWFkZXJcbiAgLy8gIFRPRE9cblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXVzZXItaGVhZGVyXG4gIC8vICBUT0RPXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhcHBlbmQtYS1yZXF1ZXN0LW9yaWdpbi1oZWFkZXJcbmZ1bmN0aW9uIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHNlcmlhbGl6ZWRPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBieXRlLXNlcmlhbGl6aW5nIGEgcmVxdWVzdCBvcmlnaW4gd2l0aCByZXF1ZXN0LlxuICBsZXQgc2VyaWFsaXplZE9yaWdpbiA9IHJlcXVlc3Qub3JpZ2luXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgb3IgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIndlYnNvY2tldFwiLCB0aGVuIGFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0Jykge1xuICAgIGlmIChzZXJpYWxpemVkT3JpZ2luKSB7XG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbilcbiAgICB9XG5cbiAgLy8gMy4gT3RoZXJ3aXNlLCBpZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbmVpdGhlciBgR0VUYCBub3IgYEhFQURgLCB0aGVuOlxuICB9IGVsc2UgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnKSB7XG4gICAgLy8gMS4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeTpcbiAgICBzd2l0Y2ggKHJlcXVlc3QucmVmZXJyZXJQb2xpY3kpIHtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyJzpcbiAgICAgICAgLy8gU2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6XG4gICAgICBjYXNlICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIGEgdHVwbGUgb3JpZ2luLCBpdHMgc2NoZW1lIGlzIFwiaHR0cHNcIiwgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwiaHR0cHNcIiwgdGhlbiBzZXQgc2VyaWFsaXplZE9yaWdpbiB0byBgbnVsbGAuXG4gICAgICAgIGlmIChyZXF1ZXN0Lm9yaWdpbiAmJiB1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Lm9yaWdpbikgJiYgIXVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4sIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAoIXNhbWVPcmlnaW4ocmVxdWVzdCwgcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9XG5cbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUgKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtYW4tb3BhcXVlLXRpbWluZy1pbmZvXG5mdW5jdGlvbiBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvICh0aW1pbmdJbmZvKSB7XG4gIHJldHVybiB7XG4gICAgc3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIHJlZGlyZWN0U3RhcnRUaW1lOiAwLFxuICAgIHJlZGlyZWN0RW5kVGltZTogMCxcbiAgICBwb3N0UmVkaXJlY3RTdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgZmluYWxTZXJ2aWNlV29ya2VyU3RhcnRUaW1lOiAwLFxuICAgIGZpbmFsTmV0d29ya1Jlc3BvbnNlU3RhcnRUaW1lOiAwLFxuICAgIGZpbmFsTmV0d29ya1JlcXVlc3RTdGFydFRpbWU6IDAsXG4gICAgZW5kVGltZTogMCxcbiAgICBlbmNvZGVkQm9keVNpemU6IDAsXG4gICAgZGVjb2RlZEJvZHlTaXplOiAwLFxuICAgIGZpbmFsQ29ubmVjdGlvblRpbWluZ0luZm86IG51bGxcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNwb2xpY3ktY29udGFpbmVyXG5mdW5jdGlvbiBtYWtlUG9saWN5Q29udGFpbmVyICgpIHtcbiAgLy8gTm90ZTogdGhlIGZldGNoIHNwZWMgZG9lc24ndCBtYWtlIHVzZSBvZiBlbWJlZGRlciBwb2xpY3kgb3IgQ1NQIGxpc3RcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjY2xvbmUtYS1wb2xpY3ktY29udGFpbmVyXG5mdW5jdGlvbiBjbG9uZVBvbGljeUNvbnRhaW5lciAocG9saWN5Q29udGFpbmVyKSB7XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6IHBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNkZXRlcm1pbmUtcmVxdWVzdHMtcmVmZXJyZXJcbmZ1bmN0aW9uIGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHBvbGljeSBiZSByZXF1ZXN0J3MgcmVmZXJyZXIgcG9saWN5LlxuICBjb25zdCBwb2xpY3kgPSByZXF1ZXN0LnJlZmVycmVyUG9saWN5XG5cbiAgLy8gTm90ZTogcG9saWN5IGNhbm5vdCAoc2hvdWxkbid0KSBiZSBudWxsIG9yIGFuIGVtcHR5IHN0cmluZy5cbiAgYXNzZXJ0KHBvbGljeSlcblxuICAvLyAyLiBMZXQgZW52aXJvbm1lbnQgYmUgcmVxdWVzdFx1MjAxOXMgY2xpZW50LlxuXG4gIGxldCByZWZlcnJlclNvdXJjZSA9IG51bGxcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXI6XG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIE5vdGU6IG5vZGUgaXNuJ3QgYSBicm93c2VyIGFuZCBkb2Vzbid0IGltcGxlbWVudCBkb2N1bWVudC9pZnJhbWVzLFxuICAgIC8vIHNvIHdlIGJ5cGFzcyB0aGlzIHN0ZXAgYW5kIHJlcGxhY2UgaXQgd2l0aCBvdXIgb3duLlxuXG4gICAgY29uc3QgZ2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIGlmICghZ2xvYmFsT3JpZ2luIHx8IGdsb2JhbE9yaWdpbi5vcmlnaW4gPT09ICdudWxsJykge1xuICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICB9XG5cbiAgICAvLyBub3RlOiB3ZSBuZWVkIHRvIGNsb25lIGl0IGFzIGl0J3MgbXV0YXRlZFxuICAgIHJlZmVycmVyU291cmNlID0gbmV3IFVSTChnbG9iYWxPcmlnaW4pXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIC8vIExldCByZWZlcnJlclNvdXJjZSBiZSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgICByZWZlcnJlclNvdXJjZSA9IHJlcXVlc3QucmVmZXJyZXJcbiAgfVxuXG4gIC8vIDQuIExldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlclVSTCBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3JcbiAgLy8gICAgdXNlIGFzIGEgcmVmZXJyZXIuXG4gIGxldCByZWZlcnJlclVSTCA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UpXG5cbiAgLy8gNS4gTGV0IHJlZmVycmVyT3JpZ2luIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvciB1c2UgYXNcbiAgLy8gICAgYSByZWZlcnJlciwgd2l0aCB0aGUgb3JpZ2luLW9ubHkgZmxhZyBzZXQgdG8gdHJ1ZS5cbiAgY29uc3QgcmVmZXJyZXJPcmlnaW4gPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlLCB0cnVlKVxuXG4gIC8vIDYuIElmIHRoZSByZXN1bHQgb2Ygc2VyaWFsaXppbmcgcmVmZXJyZXJVUkwgaXMgYSBzdHJpbmcgd2hvc2UgbGVuZ3RoIGlzXG4gIC8vICAgIGdyZWF0ZXIgdGhhbiA0MDk2LCBzZXQgcmVmZXJyZXJVUkwgdG8gcmVmZXJyZXJPcmlnaW4uXG4gIGlmIChyZWZlcnJlclVSTC50b1N0cmluZygpLmxlbmd0aCA+IDQwOTYpIHtcbiAgICByZWZlcnJlclVSTCA9IHJlZmVycmVyT3JpZ2luXG4gIH1cblxuICBjb25zdCBhcmVTYW1lT3JpZ2luID0gc2FtZU9yaWdpbihyZXF1ZXN0LCByZWZlcnJlclVSTClcbiAgY29uc3QgaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID0gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlZmVycmVyVVJMKSAmJlxuICAgICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVxdWVzdC51cmwpXG5cbiAgLy8gOC4gRXhlY3V0ZSB0aGUgc3dpdGNoIHN0YXRlbWVudHMgY29ycmVzcG9uZGluZyB0byB0aGUgdmFsdWUgb2YgcG9saWN5OlxuICBzd2l0Y2ggKHBvbGljeSkge1xuICAgIGNhc2UgJ29yaWdpbic6IHJldHVybiByZWZlcnJlck9yaWdpbiAhPSBudWxsID8gcmVmZXJyZXJPcmlnaW4gOiBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlLCB0cnVlKVxuICAgIGNhc2UgJ3Vuc2FmZS11cmwnOiByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICByZXR1cm4gYXJlU2FtZU9yaWdpbiA/IHJlZmVycmVyT3JpZ2luIDogJ25vLXJlZmVycmVyJ1xuICAgIGNhc2UgJ29yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICByZXR1cm4gYXJlU2FtZU9yaWdpbiA/IHJlZmVycmVyVVJMIDogcmVmZXJyZXJPcmlnaW5cbiAgICBjYXNlICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzoge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIDEuIElmIHRoZSBvcmlnaW4gb2YgcmVmZXJyZXJVUkwgYW5kIHRoZSBvcmlnaW4gb2YgcmVxdWVzdFx1MjAxOXMgY3VycmVudFxuICAgICAgLy8gICAgVVJMIGFyZSB0aGUgc2FtZSwgdGhlbiByZXR1cm4gcmVmZXJyZXJVUkwuXG4gICAgICBpZiAoc2FtZU9yaWdpbihyZWZlcnJlclVSTCwgY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZCByZXF1ZXN0XHUyMDE5c1xuICAgICAgLy8gICAgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLCB0aGVuIHJldHVybiBub1xuICAgICAgLy8gICAgcmVmZXJyZXIuXG4gICAgICBpZiAoaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlZmVycmVyVVJMKSAmJiAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFJldHVybiByZWZlcnJlck9yaWdpbi5cbiAgICAgIHJldHVybiByZWZlcnJlck9yaWdpblxuICAgIH1cbiAgICBjYXNlICdzdHJpY3Qtb3JpZ2luJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICAgKiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsXG4gICAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICAgKi9cbiAgICBjYXNlICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZSc6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgKiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsXG4gICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgKi9cblxuICAgIGRlZmF1bHQ6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIHJldHVybiBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPyAnbm8tcmVmZXJyZXInIDogcmVmZXJyZXJPcmlnaW5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3N0cmlwLXVybFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtib29sZWFufHVuZGVmaW5lZH0gb3JpZ2luT25seVxuICovXG5mdW5jdGlvbiBzdHJpcFVSTEZvclJlZmVycmVyICh1cmwsIG9yaWdpbk9ubHkpIHtcbiAgLy8gMS4gQXNzZXJ0OiB1cmwgaXMgYSBVUkwuXG4gIGFzc2VydCh1cmwgaW5zdGFuY2VvZiBVUkwpXG5cbiAgLy8gMi4gSWYgdXJsXHUyMDE5cyBzY2hlbWUgaXMgYSBsb2NhbCBzY2hlbWUsIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICBpZiAodXJsLnByb3RvY29sID09PSAnZmlsZTonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2Fib3V0OicgfHwgdXJsLnByb3RvY29sID09PSAnYmxhbms6Jykge1xuICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gIH1cblxuICAvLyAzLiBTZXQgdXJsXHUyMDE5cyB1c2VybmFtZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwudXNlcm5hbWUgPSAnJ1xuXG4gIC8vIDQuIFNldCB1cmxcdTIwMTlzIHBhc3N3b3JkIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC5wYXNzd29yZCA9ICcnXG5cbiAgLy8gNS4gU2V0IHVybFx1MjAxOXMgZnJhZ21lbnQgdG8gbnVsbC5cbiAgdXJsLmhhc2ggPSAnJ1xuXG4gIC8vIDYuIElmIHRoZSBvcmlnaW4tb25seSBmbGFnIGlzIHRydWUsIHRoZW46XG4gIGlmIChvcmlnaW5Pbmx5KSB7XG4gICAgLy8gMS4gU2V0IHVybFx1MjAxOXMgcGF0aCB0byBcdTAwQUIgdGhlIGVtcHR5IHN0cmluZyBcdTAwQkIuXG4gICAgdXJsLnBhdGhuYW1lID0gJydcblxuICAgIC8vIDIuIFNldCB1cmxcdTIwMTlzIHF1ZXJ5IHRvIG51bGwuXG4gICAgdXJsLnNlYXJjaCA9ICcnXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdXJsLlxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeSAodXJsKSB7XG4gIGlmICghKHVybCBpbnN0YW5jZW9mIFVSTCkpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIElmIGNoaWxkIG9mIGFib3V0LCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLmhyZWYgPT09ICdhYm91dDpibGFuaycgfHwgdXJsLmhyZWYgPT09ICdhYm91dDpzcmNkb2MnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIElmIHNjaGVtZSBpcyBkYXRhLCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLnByb3RvY29sID09PSAnZGF0YTonKSByZXR1cm4gdHJ1ZVxuXG4gIC8vIElmIGZpbGUsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicpIHJldHVybiB0cnVlXG5cbiAgcmV0dXJuIGlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSh1cmwub3JpZ2luKVxuXG4gIGZ1bmN0aW9uIGlzT3JpZ2luUG90ZW50aWFsbHlUcnVzdHdvcnRoeSAob3JpZ2luKSB7XG4gICAgLy8gSWYgb3JpZ2luIGlzIGV4cGxpY2l0bHkgbnVsbCwgcmV0dXJuIGZhbHNlXG4gICAgaWYgKG9yaWdpbiA9PSBudWxsIHx8IG9yaWdpbiA9PT0gJ251bGwnKSByZXR1cm4gZmFsc2VcblxuICAgIGNvbnN0IG9yaWdpbkFzVVJMID0gbmV3IFVSTChvcmlnaW4pXG5cbiAgICAvLyBJZiBzZWN1cmUsIHJldHVybiB0cnVlXG4gICAgaWYgKG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnaHR0cHM6JyB8fCBvcmlnaW5Bc1VSTC5wcm90b2NvbCA9PT0gJ3dzczonKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGxvY2FsaG9zdCBvciB2YXJpYW50cywgcmV0dXJuIHRydWVcbiAgICBpZiAoL14xMjcoPzpcXC5bMC05XSspezAsMn1cXC5bMC05XSskfF5cXFsoPzowKjopKj86PzAqMVxcXSQvLnRlc3Qob3JpZ2luQXNVUkwuaG9zdG5hbWUpIHx8XG4gICAgIChvcmlnaW5Bc1VSTC5ob3N0bmFtZSA9PT0gJ2xvY2FsaG9zdCcgfHwgb3JpZ2luQXNVUkwuaG9zdG5hbWUuaW5jbHVkZXMoJ2xvY2FsaG9zdC4nKSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lLmVuZHNXaXRoKCcubG9jYWxob3N0JykpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIC8vIElmIGFueSBvdGhlciwgcmV0dXJuIGZhbHNlXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNkb2VzLXJlc3BvbnNlLW1hdGNoLW1ldGFkYXRhbGlzdFxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IG1ldGFkYXRhTGlzdFxuICovXG5mdW5jdGlvbiBieXRlc01hdGNoIChieXRlcywgbWV0YWRhdGFMaXN0KSB7XG4gIC8vIElmIG5vZGUgaXMgbm90IGJ1aWx0IHdpdGggT3BlblNTTCBzdXBwb3J0LCB3ZSBjYW5ub3QgY2hlY2tcbiAgLy8gYSByZXF1ZXN0J3MgaW50ZWdyaXR5LCBzbyBhbGxvdyBpdCBieSBkZWZhdWx0ICh0aGUgc3BlYyB3aWxsXG4gIC8vIGFsbG93IHJlcXVlc3RzIGlmIGFuIGludmFsaWQgaGFzaCBpcyBnaXZlbiwgYXMgcHJlY2VkZW5jZSkuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZjogb25seSBpZiBub2RlIGlzIGJ1aWx0IHdpdGggLS13aXRob3V0LXNzbCAqL1xuICBpZiAoY3J5cHRvID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMS4gTGV0IHBhcnNlZE1ldGFkYXRhIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBtZXRhZGF0YUxpc3QuXG4gIGNvbnN0IHBhcnNlZE1ldGFkYXRhID0gcGFyc2VNZXRhZGF0YShtZXRhZGF0YUxpc3QpXG5cbiAgLy8gMi4gSWYgcGFyc2VkTWV0YWRhdGEgaXMgbm8gbWV0YWRhdGEsIHJldHVybiB0cnVlLlxuICBpZiAocGFyc2VkTWV0YWRhdGEgPT09ICdubyBtZXRhZGF0YScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gSWYgcmVzcG9uc2UgaXMgbm90IGVsaWdpYmxlIGZvciBpbnRlZ3JpdHkgdmFsaWRhdGlvbiwgcmV0dXJuIGZhbHNlLlxuICAvLyBUT0RPXG5cbiAgLy8gNC4gSWYgcGFyc2VkTWV0YWRhdGEgaXMgdGhlIGVtcHR5IHNldCwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gNS4gTGV0IG1ldGFkYXRhIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyB0aGUgc3Ryb25nZXN0XG4gIC8vICAgIG1ldGFkYXRhIGZyb20gcGFyc2VkTWV0YWRhdGEuXG4gIGNvbnN0IHN0cm9uZ2VzdCA9IGdldFN0cm9uZ2VzdE1ldGFkYXRhKHBhcnNlZE1ldGFkYXRhKVxuICBjb25zdCBtZXRhZGF0YSA9IGZpbHRlck1ldGFkYXRhTGlzdEJ5QWxnb3JpdGhtKHBhcnNlZE1ldGFkYXRhLCBzdHJvbmdlc3QpXG5cbiAgLy8gNi4gRm9yIGVhY2ggaXRlbSBpbiBtZXRhZGF0YTpcbiAgZm9yIChjb25zdCBpdGVtIG9mIG1ldGFkYXRhKSB7XG4gICAgLy8gMS4gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGFsZ29yaXRobSA9IGl0ZW0uYWxnb1xuXG4gICAgLy8gMi4gTGV0IGV4cGVjdGVkVmFsdWUgYmUgdGhlIHZhbCBjb21wb25lbnQgb2YgaXRlbS5cbiAgICBjb25zdCBleHBlY3RlZFZhbHVlID0gaXRlbS5oYXNoXG5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvY29tbWl0L2U0YzVjYzdhNWU0ODA5MzIyMDUyOGRmZGQxYzQwMTJkYzM4MzdhMGVcbiAgICAvLyBcImJlIGxpYmVyYWwgd2l0aCBwYWRkaW5nXCIuIFRoaXMgaXMgYW5ub3lpbmcsIGFuZCBpdCdzIG5vdCBldmVuIGluIHRoZSBzcGVjLlxuXG4gICAgLy8gMy4gTGV0IGFjdHVhbFZhbHVlIGJlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgYWxnb3JpdGhtIHRvIGJ5dGVzLlxuICAgIGxldCBhY3R1YWxWYWx1ZSA9IGNyeXB0by5jcmVhdGVIYXNoKGFsZ29yaXRobSkudXBkYXRlKGJ5dGVzKS5kaWdlc3QoJ2Jhc2U2NCcpXG5cbiAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICc9Jykge1xuICAgICAgaWYgKGFjdHVhbFZhbHVlW2FjdHVhbFZhbHVlLmxlbmd0aCAtIDJdID09PSAnPScpIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWUuc2xpY2UoMCwgLTEpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgYWN0dWFsVmFsdWUgaXMgYSBjYXNlLXNlbnNpdGl2ZSBtYXRjaCBmb3IgZXhwZWN0ZWRWYWx1ZSxcbiAgICAvLyAgICByZXR1cm4gdHJ1ZS5cbiAgICBpZiAoY29tcGFyZUJhc2U2NE1peGVkKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBSZXR1cm4gZmFsc2UuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jZ3JhbW1hcmRlZi1oYXNoLXdpdGgtb3B0aW9uc1xuLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUDIvI3NvdXJjZS1saXN0LXN5bnRheFxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzUyMzQjYXBwZW5kaXgtQi4xXG5jb25zdCBwYXJzZUhhc2hXaXRoT3B0aW9ucyA9IC8oPzxhbGdvPnNoYTI1NnxzaGEzODR8c2hhNTEyKS0oKD88aGFzaD5bQS1aYS16MC05Ky9dK3xbQS1aYS16MC05Xy1dKyk9ezAsMn0oPzpcXHN8JCkoICtbIS1+XSopPyk/L2lcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNwYXJzZS1tZXRhZGF0YVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGFkYXRhXG4gKi9cbmZ1bmN0aW9uIHBhcnNlTWV0YWRhdGEgKG1ldGFkYXRhKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIGVtcHR5IHNldC5cbiAgLyoqIEB0eXBlIHt7IGFsZ286IHN0cmluZywgaGFzaDogc3RyaW5nIH1bXX0gKi9cbiAgY29uc3QgcmVzdWx0ID0gW11cblxuICAvLyAyLiBMZXQgZW1wdHkgYmUgZXF1YWwgdG8gdHJ1ZS5cbiAgbGV0IGVtcHR5ID0gdHJ1ZVxuXG4gIC8vIDMuIEZvciBlYWNoIHRva2VuIHJldHVybmVkIGJ5IHNwbGl0dGluZyBtZXRhZGF0YSBvbiBzcGFjZXM6XG4gIGZvciAoY29uc3QgdG9rZW4gb2YgbWV0YWRhdGEuc3BsaXQoJyAnKSkge1xuICAgIC8vIDEuIFNldCBlbXB0eSB0byBmYWxzZS5cbiAgICBlbXB0eSA9IGZhbHNlXG5cbiAgICAvLyAyLiBQYXJzZSB0b2tlbiBhcyBhIGhhc2gtd2l0aC1vcHRpb25zLlxuICAgIGNvbnN0IHBhcnNlZFRva2VuID0gcGFyc2VIYXNoV2l0aE9wdGlvbnMuZXhlYyh0b2tlbilcblxuICAgIC8vIDMuIElmIHRva2VuIGRvZXMgbm90IHBhcnNlLCBjb250aW51ZSB0byB0aGUgbmV4dCB0b2tlbi5cbiAgICBpZiAoXG4gICAgICBwYXJzZWRUb2tlbiA9PT0gbnVsbCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHBhcnNlZFRva2VuLmdyb3Vwcy5hbGdvID09PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIC8vIE5vdGU6IENocm9taXVtIGJsb2NrcyB0aGUgcmVxdWVzdCBhdCB0aGlzIHBvaW50LCBidXQgRmlyZWZveFxuICAgICAgLy8gZ2l2ZXMgYSB3YXJuaW5nIHRoYXQgYW4gaW52YWxpZCBpbnRlZ3JpdHkgd2FzIGdpdmVuLiBUaGVcbiAgICAgIC8vIGNvcnJlY3QgYmVoYXZpb3IgaXMgdG8gaWdub3JlIHRoZXNlLCBhbmQgc3Vic2VxdWVudGx5IG5vdFxuICAgICAgLy8gY2hlY2sgdGhlIGludGVncml0eSBvZiB0aGUgcmVzb3VyY2UuXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIDQuIExldCBhbGdvcml0aG0gYmUgdGhlIGhhc2gtYWxnbyBjb21wb25lbnQgb2YgdG9rZW4uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28udG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNS4gSWYgYWxnb3JpdGhtIGlzIGEgaGFzaCBmdW5jdGlvbiByZWNvZ25pemVkIGJ5IHRoZSB1c2VyXG4gICAgLy8gICAgYWdlbnQsIGFkZCB0aGUgcGFyc2VkIHRva2VuIHRvIHJlc3VsdC5cbiAgICBpZiAoc3VwcG9ydGVkSGFzaGVzLmluY2x1ZGVzKGFsZ29yaXRobSkpIHtcbiAgICAgIHJlc3VsdC5wdXNoKHBhcnNlZFRva2VuLmdyb3VwcylcbiAgICB9XG4gIH1cblxuICAvLyA0LiBSZXR1cm4gbm8gbWV0YWRhdGEgaWYgZW1wdHkgaXMgdHJ1ZSwgb3RoZXJ3aXNlIHJldHVybiByZXN1bHQuXG4gIGlmIChlbXB0eSA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiAnbm8gbWV0YWRhdGEnXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHBhcmFtIHt7IGFsZ286ICdzaGEyNTYnIHwgJ3NoYTM4NCcgfCAnc2hhNTEyJyB9W119IG1ldGFkYXRhTGlzdFxuICovXG5mdW5jdGlvbiBnZXRTdHJvbmdlc3RNZXRhZGF0YSAobWV0YWRhdGFMaXN0KSB7XG4gIC8vIExldCBhbGdvcml0aG0gYmUgdGhlIGFsZ28gY29tcG9uZW50IG9mIHRoZSBmaXJzdCBpdGVtIGluIG1ldGFkYXRhTGlzdC5cbiAgLy8gQ2FuIGJlIHNoYTI1NlxuICBsZXQgYWxnb3JpdGhtID0gbWV0YWRhdGFMaXN0WzBdLmFsZ29cbiAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGE1MTIsIHRoZW4gaXQgaXMgdGhlIHN0cm9uZ2VzdFxuICAvLyBhbmQgd2UgY2FuIHJldHVybiBpbW1lZGlhdGVseVxuICBpZiAoYWxnb3JpdGhtWzNdID09PSAnNScpIHtcbiAgICByZXR1cm4gYWxnb3JpdGhtXG4gIH1cblxuICBmb3IgKGxldCBpID0gMTsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IG1ldGFkYXRhID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGE1MTIsIHRoZW4gaXQgaXMgdGhlIHN0cm9uZ2VzdFxuICAgIC8vIGFuZCB3ZSBjYW4gYnJlYWsgdGhlIGxvb3AgaW1tZWRpYXRlbHlcbiAgICBpZiAobWV0YWRhdGEuYWxnb1szXSA9PT0gJzUnKSB7XG4gICAgICBhbGdvcml0aG0gPSAnc2hhNTEyJ1xuICAgICAgYnJlYWtcbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTM4NCwgdGhlbiBhIHBvdGVudGlhbCBzaGEyNTYgb3Igc2hhMzg0IGlzIGlnbm9yZWRcbiAgICB9IGVsc2UgaWYgKGFsZ29yaXRobVszXSA9PT0gJzMnKSB7XG4gICAgICBjb250aW51ZVxuICAgIC8vIGFsZ29yaXRobSBpcyBzaGEyNTYsIGNoZWNrIGlmIGFsZ29yaXRobSBpcyBzaGEzODQgYW5kIGlmIHNvLCBzZXQgaXQgYXNcbiAgICAvLyB0aGUgc3Ryb25nZXN0XG4gICAgfSBlbHNlIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnMycpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGEzODQnXG4gICAgfVxuICB9XG4gIHJldHVybiBhbGdvcml0aG1cbn1cblxuZnVuY3Rpb24gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0gKG1ldGFkYXRhTGlzdCwgYWxnb3JpdGhtKSB7XG4gIGlmIChtZXRhZGF0YUxpc3QubGVuZ3RoID09PSAxKSB7XG4gICAgcmV0dXJuIG1ldGFkYXRhTGlzdFxuICB9XG5cbiAgbGV0IHBvcyA9IDBcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBtZXRhZGF0YUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAobWV0YWRhdGFMaXN0W2ldLmFsZ28gPT09IGFsZ29yaXRobSkge1xuICAgICAgbWV0YWRhdGFMaXN0W3BvcysrXSA9IG1ldGFkYXRhTGlzdFtpXVxuICAgIH1cbiAgfVxuXG4gIG1ldGFkYXRhTGlzdC5sZW5ndGggPSBwb3NcblxuICByZXR1cm4gbWV0YWRhdGFMaXN0XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIGJhc2U2NCBzdHJpbmdzLCBhbGxvd2luZyBmb3IgYmFzZTY0dXJsXG4gKiBpbiB0aGUgc2Vjb25kIHN0cmluZy5cbiAqXG4qIEBwYXJhbSB7c3RyaW5nfSBhY3R1YWxWYWx1ZSBhbHdheXMgYmFzZTY0XG4gKiBAcGFyYW0ge3N0cmluZ30gZXhwZWN0ZWRWYWx1ZSBiYXNlNjQgb3IgYmFzZTY0dXJsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gY29tcGFyZUJhc2U2NE1peGVkIChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSkge1xuICBpZiAoYWN0dWFsVmFsdWUubGVuZ3RoICE9PSBleHBlY3RlZFZhbHVlLmxlbmd0aCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYWN0dWFsVmFsdWUubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoYWN0dWFsVmFsdWVbaV0gIT09IGV4cGVjdGVkVmFsdWVbaV0pIHtcbiAgICAgIGlmIChcbiAgICAgICAgKGFjdHVhbFZhbHVlW2ldID09PSAnKycgJiYgZXhwZWN0ZWRWYWx1ZVtpXSA9PT0gJy0nKSB8fFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcvJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnXycpXG4gICAgICApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtdXBncmFkZS1pbnNlY3VyZS1yZXF1ZXN0cy8jdXBncmFkZS1yZXF1ZXN0XG5mdW5jdGlvbiB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwgKHJlcXVlc3QpIHtcbiAgLy8gVE9ET1xufVxuXG4vKipcbiAqIEBsaW5rIHtodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNzYW1lLW9yaWdpbn1cbiAqIEBwYXJhbSB7VVJMfSBBXG4gKiBAcGFyYW0ge1VSTH0gQlxuICovXG5mdW5jdGlvbiBzYW1lT3JpZ2luIChBLCBCKSB7XG4gIC8vIDEuIElmIEEgYW5kIEIgYXJlIHRoZSBzYW1lIG9wYXF1ZSBvcmlnaW4sIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLm9yaWdpbiA9PT0gQi5vcmlnaW4gJiYgQS5vcmlnaW4gPT09ICdudWxsJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAyLiBJZiBBIGFuZCBCIGFyZSBib3RoIHR1cGxlIG9yaWdpbnMgYW5kIHRoZWlyIHNjaGVtZXMsXG4gIC8vICAgIGhvc3RzLCBhbmQgcG9ydCBhcmUgaWRlbnRpY2FsLCB0aGVuIHJldHVybiB0cnVlLlxuICBpZiAoQS5wcm90b2NvbCA9PT0gQi5wcm90b2NvbCAmJiBBLmhvc3RuYW1lID09PSBCLmhvc3RuYW1lICYmIEEucG9ydCA9PT0gQi5wb3J0KSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZURlZmVycmVkUHJvbWlzZSAoKSB7XG4gIGxldCByZXNcbiAgbGV0IHJlalxuICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIHJlcyA9IHJlc29sdmVcbiAgICByZWogPSByZWplY3RcbiAgfSlcblxuICByZXR1cm4geyBwcm9taXNlLCByZXNvbHZlOiByZXMsIHJlamVjdDogcmVqIH1cbn1cblxuZnVuY3Rpb24gaXNBYm9ydGVkIChmZXRjaFBhcmFtcykge1xuICByZXR1cm4gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zdGF0ZSA9PT0gJ2Fib3J0ZWQnXG59XG5cbmZ1bmN0aW9uIGlzQ2FuY2VsbGVkIChmZXRjaFBhcmFtcykge1xuICByZXR1cm4gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zdGF0ZSA9PT0gJ2Fib3J0ZWQnIHx8XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zdGF0ZSA9PT0gJ3Rlcm1pbmF0ZWQnXG59XG5cbmNvbnN0IG5vcm1hbGl6ZU1ldGhvZFJlY29yZCA9IHtcbiAgZGVsZXRlOiAnREVMRVRFJyxcbiAgREVMRVRFOiAnREVMRVRFJyxcbiAgZ2V0OiAnR0VUJyxcbiAgR0VUOiAnR0VUJyxcbiAgaGVhZDogJ0hFQUQnLFxuICBIRUFEOiAnSEVBRCcsXG4gIG9wdGlvbnM6ICdPUFRJT05TJyxcbiAgT1BUSU9OUzogJ09QVElPTlMnLFxuICBwb3N0OiAnUE9TVCcsXG4gIFBPU1Q6ICdQT1NUJyxcbiAgcHV0OiAnUFVUJyxcbiAgUFVUOiAnUFVUJ1xufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihub3JtYWxpemVNZXRob2RSZWNvcmQsIG51bGwpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1tZXRob2Qtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0aG9kXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZU1ldGhvZCAobWV0aG9kKSB7XG4gIHJldHVybiBub3JtYWxpemVNZXRob2RSZWNvcmRbbWV0aG9kLnRvTG93ZXJDYXNlKCldID8/IG1ldGhvZFxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtamF2YXNjcmlwdC12YWx1ZS10by1hLWpzb24tc3RyaW5nXG5mdW5jdGlvbiBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcgKHZhbHVlKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgPyBDYWxsKCVKU09OLnN0cmluZ2lmeSUsIHVuZGVmaW5lZCwgXHUwMEFCIHZhbHVlIFx1MDBCQikuXG4gIGNvbnN0IHJlc3VsdCA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKVxuXG4gIC8vIDIuIElmIHJlc3VsdCBpcyB1bmRlZmluZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChyZXN1bHQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1ZhbHVlIGlzIG5vdCBKU09OIHNlcmlhbGl6YWJsZScpXG4gIH1cblxuICAvLyAzLiBBc3NlcnQ6IHJlc3VsdCBpcyBhIHN0cmluZy5cbiAgYXNzZXJ0KHR5cGVvZiByZXN1bHQgPT09ICdzdHJpbmcnKVxuXG4gIC8vIDQuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0lMjVpdGVyYXRvcnByb3RvdHlwZSUyNS1vYmplY3RcbmNvbnN0IGVzSXRlcmF0b3JQcm90b3R5cGUgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YoT2JqZWN0LmdldFByb3RvdHlwZU9mKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Rmbi1pdGVyYXRvci1wcm90b3R5cGUtb2JqZWN0XG4gKiBAcGFyYW0geygpID0+IHVua25vd25bXX0gaXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0geydrZXknfCd2YWx1ZSd8J2tleSt2YWx1ZSd9IGtpbmRcbiAqL1xuZnVuY3Rpb24gbWFrZUl0ZXJhdG9yIChpdGVyYXRvciwgbmFtZSwga2luZCkge1xuICBjb25zdCBvYmplY3QgPSB7XG4gICAgaW5kZXg6IDAsXG4gICAga2luZCxcbiAgICB0YXJnZXQ6IGl0ZXJhdG9yXG4gIH1cblxuICBjb25zdCBpID0ge1xuICAgIG5leHQgKCkge1xuICAgICAgLy8gMS4gTGV0IGludGVyZmFjZSBiZSB0aGUgaW50ZXJmYWNlIGZvciB3aGljaCB0aGUgaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBleGlzdHMuXG5cbiAgICAgIC8vIDIuIExldCB0aGlzVmFsdWUgYmUgdGhlIHRoaXMgdmFsdWUuXG5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuXG4gICAgICAvLyA0LiBJZiBvYmplY3QgaXMgYSBwbGF0Zm9ybSBvYmplY3QsIHRoZW4gcGVyZm9ybSBhIHNlY3VyaXR5XG4gICAgICAvLyAgICBjaGVjaywgcGFzc2luZzpcblxuICAgICAgLy8gNS4gSWYgb2JqZWN0IGlzIG5vdCBhIGRlZmF1bHQgaXRlcmF0b3Igb2JqZWN0IGZvciBpbnRlcmZhY2UsXG4gICAgICAvLyAgICB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZih0aGlzKSAhPT0gaSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnbmV4dCcgY2FsbGVkIG9uIGFuIG9iamVjdCB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBpbnRlcmZhY2UgJHtuYW1lfSBJdGVyYXRvci5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IGluZGV4IGJlIG9iamVjdFx1MjAxOXMgaW5kZXguXG4gICAgICAvLyA3LiBMZXQga2luZCBiZSBvYmplY3RcdTIwMTlzIGtpbmQuXG4gICAgICAvLyA4LiBMZXQgdmFsdWVzIGJlIG9iamVjdFx1MjAxOXMgdGFyZ2V0J3MgdmFsdWUgcGFpcnMgdG8gaXRlcmF0ZSBvdmVyLlxuICAgICAgY29uc3QgeyBpbmRleCwga2luZCwgdGFyZ2V0IH0gPSBvYmplY3RcbiAgICAgIGNvbnN0IHZhbHVlcyA9IHRhcmdldCgpXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9XG4gICAgICB9XG5cbiAgICAgIC8vIDExLiBMZXQgcGFpciBiZSB0aGUgZW50cnkgaW4gdmFsdWVzIGF0IGluZGV4IGluZGV4LlxuICAgICAgY29uc3QgcGFpciA9IHZhbHVlc1tpbmRleF1cblxuICAgICAgLy8gMTIuIFNldCBvYmplY3RcdTIwMTlzIGluZGV4IHRvIGluZGV4ICsgMS5cbiAgICAgIG9iamVjdC5pbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG4gICAgICByZXR1cm4gaXRlcmF0b3JSZXN1bHQocGFpciwga2luZClcbiAgICB9LFxuICAgIC8vIFRoZSBjbGFzcyBzdHJpbmcgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBmb3IgYSBnaXZlbiBpbnRlcmZhY2UgaXMgdGhlXG4gICAgLy8gcmVzdWx0IG9mIGNvbmNhdGVuYXRpbmcgdGhlIGlkZW50aWZpZXIgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlIHN0cmluZyBcIiBJdGVyYXRvclwiLlxuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgfVxuXG4gIC8vIFRoZSBbW1Byb3RvdHlwZV1dIGludGVybmFsIHNsb3Qgb2YgYW4gaXRlcmF0b3IgcHJvdG90eXBlIG9iamVjdCBtdXN0IGJlICVJdGVyYXRvclByb3RvdHlwZSUuXG4gIE9iamVjdC5zZXRQcm90b3R5cGVPZihpLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuICAvLyBlc0l0ZXJhdG9yUHJvdG90eXBlIG5lZWRzIHRvIGJlIHRoZSBwcm90b3R5cGUgb2YgaVxuICAvLyB3aGljaCBpcyB0aGUgcHJvdG90eXBlIG9mIGFuIGVtcHR5IG9iamVjdC4gWWVzLCBpdCdzIGNvbmZ1c2luZy5cbiAgcmV0dXJuIE9iamVjdC5zZXRQcm90b3R5cGVPZih7fSwgaSlcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpdGVyYXRvci1yZXN1bHRcbmZ1bmN0aW9uIGl0ZXJhdG9yUmVzdWx0IChwYWlyLCBraW5kKSB7XG4gIGxldCByZXN1bHRcblxuICAvLyAxLiBMZXQgcmVzdWx0IGJlIGEgdmFsdWUgZGV0ZXJtaW5lZCBieSB0aGUgdmFsdWUgb2Yga2luZDpcbiAgc3dpdGNoIChraW5kKSB7XG4gICAgY2FzZSAna2V5Jzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAvLyAyLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgcmVzdWx0ID0gcGFpclswXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAndmFsdWUnOiB7XG4gICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgcmVzdWx0ID0gcGFpclsxXVxuICAgICAgYnJlYWtcbiAgICB9XG4gICAgY2FzZSAna2V5K3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAvLyAzLiBMZXQga2V5IGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxLZXkgdG8gYW5cbiAgICAgIC8vICAgIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAvLyAgICBhbiBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNS4gTGV0IGFycmF5IGJlICEgQXJyYXlDcmVhdGUoMikuXG4gICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgIC8vIDcuIENhbGwgISBDcmVhdGVEYXRhUHJvcGVydHkoYXJyYXksIFwiMVwiLCB2YWx1ZSkuXG4gICAgICAvLyA4LiByZXN1bHQgaXMgYXJyYXkuXG4gICAgICByZXN1bHQgPSBwYWlyXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDIuIFJldHVybiBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHJlc3VsdCwgZmFsc2UpLlxuICByZXR1cm4geyB2YWx1ZTogcmVzdWx0LCBkb25lOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keS1mdWxseS1yZWFkXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGZ1bGx5UmVhZEJvZHkgKGJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKSB7XG4gIC8vIDEuIElmIHRhc2tEZXN0aW5hdGlvbiBpcyBudWxsLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG9cbiAgLy8gICAgdGhlIHJlc3VsdCBvZiBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cblxuICAvLyAyLiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlcyBiZSB0byBxdWV1ZSBhXG4gIC8vICAgIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzLCB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gcHJvY2Vzc0JvZHlcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBiZSB0byBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5RXJyb3IsXG4gIC8vICAgIHdpdGggdGFza0Rlc3RpbmF0aW9uLlxuICBjb25zdCBlcnJvclN0ZXBzID0gcHJvY2Vzc0JvZHlFcnJvclxuXG4gIC8vIDQuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZvciBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzIHdpdGggdGhhdFxuICAvLyAgICBleGNlcHRpb24gYW5kIHJldHVybi5cbiAgbGV0IHJlYWRlclxuXG4gIHRyeSB7XG4gICAgcmVhZGVyID0gYm9keS5zdHJlYW0uZ2V0UmVhZGVyKClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDUuIFJlYWQgYWxsIGJ5dGVzIGZyb20gcmVhZGVyLCBnaXZlbiBzdWNjZXNzU3RlcHMgYW5kIGVycm9yU3RlcHMuXG4gIHRyeSB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVhZEFsbEJ5dGVzKHJlYWRlcilcbiAgICBzdWNjZXNzU3RlcHMocmVzdWx0KVxuICB9IGNhdGNoIChlKSB7XG4gICAgZXJyb3JTdGVwcyhlKVxuICB9XG59XG5cbi8qKiBAdHlwZSB7UmVhZGFibGVTdHJlYW19ICovXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlIChzdHJlYW0pIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICByZXR1cm4gc3RyZWFtIGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gfHwgKFxuICAgIHN0cmVhbVtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnUmVhZGFibGVTdHJlYW0nICYmXG4gICAgdHlwZW9mIHN0cmVhbS50ZWUgPT09ICdmdW5jdGlvbidcbiAgKVxufVxuXG5jb25zdCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCA9IDY1NTM1XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7bnVtYmVyW118VWludDhBcnJheX0gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0RlY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gVG8gaXNvbW9ycGhpYyBkZWNvZGUgYSBieXRlIHNlcXVlbmNlIGlucHV0LCByZXR1cm4gYSBzdHJpbmcgd2hvc2UgY29kZSBwb2ludFxuICAvLyAgICBsZW5ndGggaXMgZXF1YWwgdG8gaW5wdXRcdTIwMTlzIGxlbmd0aCBhbmQgd2hvc2UgY29kZSBwb2ludHMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXNcbiAgLy8gICAgYXMgdGhlIHZhbHVlcyBvZiBpbnB1dFx1MjAxOXMgYnl0ZXMsIGluIHRoZSBzYW1lIG9yZGVyLlxuXG4gIGlmIChpbnB1dC5sZW5ndGggPCBNQVhJTVVNX0FSR1VNRU5UX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKC4uLmlucHV0KVxuICB9XG5cbiAgcmV0dXJuIGlucHV0LnJlZHVjZSgocHJldmlvdXMsIGN1cnJlbnQpID0+IHByZXZpb3VzICsgU3RyaW5nLmZyb21DaGFyQ29kZShjdXJyZW50KSwgJycpXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBUT0RPOiBhZGQgY29tbWVudCBleHBsYWluaW5nIHdoeSB0aGlzIGVycm9yIG9jY3Vycy5cbiAgICBpZiAoIWVyci5tZXNzYWdlLmluY2x1ZGVzKCdDb250cm9sbGVyIGlzIGFscmVhZHkgY2xvc2VkJykpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgYXNzZXJ0KGlucHV0LmNoYXJDb2RlQXQoaSkgPD0gMHhGRilcbiAgfVxuXG4gIC8vIDIuIFJldHVybiBhIGJ5dGUgc2VxdWVuY2Ugd2hvc2UgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBjb2RlXG4gIC8vICAgIHBvaW50IGxlbmd0aCBhbmQgd2hvc2UgYnl0ZXMgaGF2ZSB0aGUgc2FtZSB2YWx1ZXMgYXMgdGhlXG4gIC8vICAgIHZhbHVlcyBvZiBpbnB1dFx1MjAxOXMgY29kZSBwb2ludHMsIGluIHRoZSBzYW1lIG9yZGVyXG4gIHJldHVybiBpbnB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW1kZWZhdWx0cmVhZGVyLXJlYWQtYWxsLWJ5dGVzXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWQtbG9vcFxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXJ9IHJlYWRlclxuICovXG5hc3luYyBmdW5jdGlvbiByZWFkQWxsQnl0ZXMgKHJlYWRlcikge1xuICBjb25zdCBieXRlcyA9IFtdXG4gIGxldCBieXRlTGVuZ3RoID0gMFxuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgY29uc3QgeyBkb25lLCB2YWx1ZTogY2h1bmsgfSA9IGF3YWl0IHJlYWRlci5yZWFkKClcblxuICAgIGlmIChkb25lKSB7XG4gICAgICAvLyAxLiBDYWxsIHN1Y2Nlc3NTdGVwcyB3aXRoIGJ5dGVzLlxuICAgICAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnl0ZXMsIGJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgY2h1bmsgaXMgbm90IGEgVWludDhBcnJheSBvYmplY3QsIGNhbGwgZmFpbHVyZVN0ZXBzXG4gICAgLy8gICAgd2l0aCBhIFR5cGVFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZWNlaXZlZCBub24tVWludDhBcnJheSBjaHVuaycpXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIHRoZSBieXRlcyByZXByZXNlbnRlZCBieSBjaHVuayB0byBieXRlcy5cbiAgICBieXRlcy5wdXNoKGNodW5rKVxuICAgIGJ5dGVMZW5ndGggKz0gY2h1bmsubGVuZ3RoXG5cbiAgICAvLyAzLiBSZWFkLWxvb3AgZ2l2ZW4gcmVhZGVyLCBieXRlcywgc3VjY2Vzc1N0ZXBzLCBhbmQgZmFpbHVyZVN0ZXBzLlxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaXMtbG9jYWxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSXNMb2NhbCAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHByb3RvY29sID09PSAnYmxvYjonIHx8IHByb3RvY29sID09PSAnZGF0YTonXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICBpZiAodHlwZW9mIHVybCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gdXJsLnN0YXJ0c1dpdGgoJ2h0dHBzOicpXG4gIH1cblxuICByZXR1cm4gdXJsLnByb3RvY29sID09PSAnaHR0cHM6J1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBGZXRjaCBzdXBwb3J0cyBub2RlID49IDE2LjguMCwgYnV0IE9iamVjdC5oYXNPd24gd2FzIGFkZGVkIGluIHYxNi45LjAuXG4gKi9cbmNvbnN0IGhhc093biA9IE9iamVjdC5oYXNPd24gfHwgKChkaWN0LCBrZXkpID0+IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChkaWN0LCBrZXkpKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIHRvVVNWU3RyaW5nLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YSxcbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcixcbiAgVEFPQ2hlY2ssXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICBpc1ZhbGlkSFRUUFRva2VuLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgcmVxdWVzdEN1cnJlbnRVUkwsXG4gIHJlc3BvbnNlVVJMLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICBpc0Jsb2JMaWtlLFxuICBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHksXG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nLFxuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGhhc093bixcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGJ5dGVzTWF0Y2gsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBpc29tb3JwaGljRGVjb2RlLFxuICB1cmxJc0xvY2FsLFxuICB1cmxIYXNIdHRwc1NjaGVtZSxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHJlYWRBbGxCeXRlcyxcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkLFxuICBwYXJzZU1ldGFkYXRhXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrSGVhZGVyczogU3ltYm9sKCdoZWFkZXJzJyksXG4gIGtTaWduYWw6IFN5bWJvbCgnc2lnbmFsJyksXG4gIGtTdGF0ZTogU3ltYm9sKCdzdGF0ZScpLFxuICBrR3VhcmQ6IFN5bWJvbCgnZ3VhcmQnKSxcbiAga1JlYWxtOiBTeW1ib2woJ3JlYWxtJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGhhc093biwgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi90eXBlcy93ZWJpZGwnKS5XZWJpZGx9ICovXG5jb25zdCB3ZWJpZGwgPSB7fVxud2ViaWRsLmNvbnZlcnRlcnMgPSB7fVxud2ViaWRsLnV0aWwgPSB7fVxud2ViaWRsLmVycm9ycyA9IHt9XG5cbndlYmlkbC5lcnJvcnMuZXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYCR7bWVzc2FnZS5oZWFkZXJ9OiAke21lc3NhZ2UubWVzc2FnZX1gKVxufVxuXG53ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBwbHVyYWwgPSBjb250ZXh0LnR5cGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJyBvbmUgb2YnXG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgIGAke2NvbnRleHQuYXJndW1lbnR9IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG9gICtcbiAgICBgJHtwbHVyYWx9OiAke2NvbnRleHQudHlwZXMuam9pbignLCAnKX0uYFxuXG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbndlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2U6IGBcIiR7Y29udGV4dC52YWx1ZX1cIiBpcyBhbiBpbnZhbGlkICR7Y29udGV4dC50eXBlfS5gXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaW1wbGVtZW50c1xud2ViaWRsLmJyYW5kQ2hlY2sgPSBmdW5jdGlvbiAoViwgSSwgb3B0cyA9IHVuZGVmaW5lZCkge1xuICBpZiAob3B0cz8uc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBJKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0lsbGVnYWwgaW52b2NhdGlvbicpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIFY/LltTeW1ib2wudG9TdHJpbmdUYWddID09PSBJLnByb3RvdHlwZVtTeW1ib2wudG9TdHJpbmdUYWddXG4gIH1cbn1cblxud2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2sgPSBmdW5jdGlvbiAoeyBsZW5ndGggfSwgbWluLCBjdHgpIHtcbiAgaWYgKGxlbmd0aCA8IG1pbikge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIG1lc3NhZ2U6IGAke21pbn0gYXJndW1lbnQke21pbiAhPT0gMSA/ICdzJyA6ICcnfSByZXF1aXJlZCwgYCArXG4gICAgICAgICAgICAgICBgYnV0JHtsZW5ndGggPyAnIG9ubHknIDogJyd9ICR7bGVuZ3RofSBmb3VuZC5gLFxuICAgICAgLi4uY3R4XG4gICAgfSlcbiAgfVxufVxuXG53ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiAnVHlwZUVycm9yJyxcbiAgICBtZXNzYWdlOiAnSWxsZWdhbCBjb25zdHJ1Y3RvcidcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xud2ViaWRsLnV0aWwuVHlwZSA9IGZ1bmN0aW9uIChWKSB7XG4gIHN3aXRjaCAodHlwZW9mIFYpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gJ1VuZGVmaW5lZCdcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuICdCb29sZWFuJ1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiAnU3RyaW5nJ1xuICAgIGNhc2UgJ3N5bWJvbCc6IHJldHVybiAnU3ltYm9sJ1xuICAgIGNhc2UgJ251bWJlcic6IHJldHVybiAnTnVtYmVyJ1xuICAgIGNhc2UgJ2JpZ2ludCc6IHJldHVybiAnQmlnSW50J1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ051bGwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnT2JqZWN0J1xuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2Fic3RyYWN0LW9wZGVmLWNvbnZlcnR0b2ludFxud2ViaWRsLnV0aWwuQ29udmVydFRvSW50ID0gZnVuY3Rpb24gKFYsIGJpdExlbmd0aCwgc2lnbmVkbmVzcywgb3B0cyA9IHt9KSB7XG4gIGxldCB1cHBlckJvdW5kXG4gIGxldCBsb3dlckJvdW5kXG5cbiAgLy8gMS4gSWYgYml0TGVuZ3RoIGlzIDY0LCB0aGVuOlxuICBpZiAoYml0TGVuZ3RoID09PSA2NCkge1xuICAgIC8vIDEuIExldCB1cHBlckJvdW5kIGJlIDJeNTMgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDFcblxuICAgIC8vIDIuIElmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuIGxldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIGxvd2VyQm91bmQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSBsZXQgbG93ZXJCb3VuZCBiZSBcdTIyMTIyXjUzICsgMS5cbiAgICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgNTMpICsgMVxuICAgIH1cbiAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbjpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgbG93ZXJCb3VuZCA9IDBcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIC0yXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIGJpdExlbmd0aCkgLSAxXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMSBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxXG4gIH1cblxuICAvLyA0LiBMZXQgeCBiZSA/IFRvTnVtYmVyKFYpLlxuICBsZXQgeCA9IE51bWJlcihWKVxuXG4gIC8vIDUuIElmIHggaXMgXHUyMjEyMCwgdGhlbiBzZXQgeCB0byArMC5cbiAgaWYgKHggPT09IDApIHtcbiAgICB4ID0gMFxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbRW5mb3JjZVJhbmdlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmIChvcHRzLmVuZm9yY2VSYW5nZSA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIElmIHggaXMgTmFOLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgICB4ID09PSBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkgfHxcbiAgICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhbiBpbnRlZ2VyLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gICAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgICAvLyAzLiBJZiB4IDwgbG93ZXJCb3VuZCBvciB4ID4gdXBwZXJCb3VuZCwgdGhlblxuICAgIC8vICAgIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7bG93ZXJCb3VuZH0tJHt1cHBlckJvdW5kfSwgZ290ICR7eH0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gNy4gSWYgeCBpcyBub3QgTmFOIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJRExcbiAgLy8gICAgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFtDbGFtcF0gZXh0ZW5kZWRcbiAgLy8gICAgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAoIU51bWJlci5pc05hTih4KSAmJiBvcHRzLmNsYW1wID09PSB0cnVlKSB7XG4gICAgLy8gMS4gU2V0IHggdG8gbWluKG1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZCkuXG4gICAgeCA9IE1hdGgubWluKE1hdGgubWF4KHgsIGxvd2VyQm91bmQpLCB1cHBlckJvdW5kKVxuXG4gICAgLy8gMi4gUm91bmQgeCB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCBjaG9vc2luZyB0aGVcbiAgICAvLyAgICBldmVuIGludGVnZXIgaWYgaXQgbGllcyBoYWxmd2F5IGJldHdlZW4gdHdvLFxuICAgIC8vICAgIGFuZCBjaG9vc2luZyArMCByYXRoZXIgdGhhbiBcdTIyMTIwLlxuICAgIGlmIChNYXRoLmZsb29yKHgpICUgMiA9PT0gMCkge1xuICAgICAgeCA9IE1hdGguZmxvb3IoeClcbiAgICB9IGVsc2Uge1xuICAgICAgeCA9IE1hdGguY2VpbCh4KVxuICAgIH1cblxuICAgIC8vIDMuIFJldHVybiB4LlxuICAgIHJldHVybiB4XG4gIH1cblxuICAvLyA4LiBJZiB4IGlzIE5hTiwgKzAsICtcdTIyMUUsIG9yIFx1MjIxMlx1MjIxRSwgdGhlbiByZXR1cm4gKzAuXG4gIGlmIChcbiAgICBOdW1iZXIuaXNOYU4oeCkgfHxcbiAgICAoeCA9PT0gMCAmJiBPYmplY3QuaXMoMCwgeCkpIHx8XG4gICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgeCA9PT0gTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZXG4gICkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyA5LiBTZXQgeCB0byBJbnRlZ2VyUGFydCh4KS5cbiAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgLy8gMTAuIFNldCB4IHRvIHggbW9kdWxvIDJeYml0TGVuZ3RoLlxuICB4ID0geCAlIE1hdGgucG93KDIsIGJpdExlbmd0aClcblxuICAvLyAxMS4gSWYgc2lnbmVkbmVzcyBpcyBcInNpZ25lZFwiIGFuZCB4IFx1MjI2NSAyXmJpdExlbmd0aCBcdTIyMTIgMSxcbiAgLy8gICAgdGhlbiByZXR1cm4geCBcdTIyMTIgMl5iaXRMZW5ndGguXG4gIGlmIChzaWduZWRuZXNzID09PSAnc2lnbmVkJyAmJiB4ID49IE1hdGgucG93KDIsIGJpdExlbmd0aCkgLSAxKSB7XG4gICAgcmV0dXJuIHggLSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG4gIH1cblxuICAvLyAxMi4gT3RoZXJ3aXNlLCByZXR1cm4geC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNhYnN0cmFjdC1vcGRlZi1pbnRlZ2VycGFydFxud2ViaWRsLnV0aWwuSW50ZWdlclBhcnQgPSBmdW5jdGlvbiAobikge1xuICAvLyAxLiBMZXQgciBiZSBmbG9vcihhYnMobikpLlxuICBjb25zdCByID0gTWF0aC5mbG9vcihNYXRoLmFicyhuKSlcblxuICAvLyAyLiBJZiBuIDwgMCwgdGhlbiByZXR1cm4gLTEgXHUwMEQ3IHIuXG4gIGlmIChuIDwgMCkge1xuICAgIHJldHVybiAtMSAqIHJcbiAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgcmV0dXJuIHIuXG4gIHJldHVybiByXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnU2VxdWVuY2UnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgb2YgdHlwZSAke3dlYmlkbC51dGlsLlR5cGUoVil9IGlzIG5vdCBhbiBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgbWV0aG9kIGJlID8gR2V0TWV0aG9kKFYsIEBAaXRlcmF0b3IpLlxuICAgIC8qKiBAdHlwZSB7R2VuZXJhdG9yfSAqL1xuICAgIGNvbnN0IG1ldGhvZCA9IFY/LltTeW1ib2wuaXRlcmF0b3JdPy4oKVxuICAgIGNvbnN0IHNlcSA9IFtdXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogJ09iamVjdCBpcyBub3QgYW4gaXRlcmF0b3IuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1zZXF1ZW5jZS1mcm9tLWl0ZXJhYmxlXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IG1ldGhvZC5uZXh0KClcblxuICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgc2VxLnB1c2goY29udmVydGVyKHZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8pID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZWNvcmQnLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgb2YgdHlwZSAke3dlYmlkbC51dGlsLlR5cGUoTyl9IGlzIG5vdCBhbiBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIGEgbmV3IGVtcHR5IGluc3RhbmNlIG9mIHJlY29yZDxLLCBWPi5cbiAgICBjb25zdCByZXN1bHQgPSB7fVxuXG4gICAgaWYgKCF0eXBlcy5pc1Byb3h5KE8pKSB7XG4gICAgICAvLyBPYmplY3Qua2V5cyBvbmx5IHJldHVybnMgZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoTylcblxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIFJldHVybiByZXN1bHQuXG4gICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IGtleXMgYmUgPyBPLltbT3duUHJvcGVydHlLZXlzXV0oKS5cbiAgICBjb25zdCBrZXlzID0gUmVmbGVjdC5vd25LZXlzKE8pXG5cbiAgICAvLyA0LiBGb3IgZWFjaCBrZXkgb2Yga2V5cy5cbiAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzYyBiZSA/IE8uW1tHZXRPd25Qcm9wZXJ0eV1dKGtleSkuXG4gICAgICBjb25zdCBkZXNjID0gUmVmbGVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTywga2V5KVxuXG4gICAgICAvLyAyLiBJZiBkZXNjIGlzIG5vdCB1bmRlZmluZWQgYW5kIGRlc2MuW1tFbnVtZXJhYmxlXV0gaXMgdHJ1ZTpcbiAgICAgIGlmIChkZXNjPy5lbnVtZXJhYmxlKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlZEtleSBiZSBrZXkgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIEsuXG4gICAgICAgIGNvbnN0IHR5cGVkS2V5ID0ga2V5Q29udmVydGVyKGtleSlcblxuICAgICAgICAvLyAyLiBMZXQgdmFsdWUgYmUgPyBHZXQoTywga2V5KS5cbiAgICAgICAgLy8gMy4gTGV0IHR5cGVkVmFsdWUgYmUgdmFsdWUgY29udmVydGVkIHRvIGFuIElETCB2YWx1ZSBvZiB0eXBlIFYuXG4gICAgICAgIGNvbnN0IHR5cGVkVmFsdWUgPSB2YWx1ZUNvbnZlcnRlcihPW2tleV0pXG5cbiAgICAgICAgLy8gNC4gU2V0IHJlc3VsdFt0eXBlZEtleV0gdG8gdHlwZWRWYWx1ZS5cbiAgICAgICAgcmVzdWx0W3R5cGVkS2V5XSA9IHR5cGVkVmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgIHJldHVybiByZXN1bHRcbiAgfVxufVxuXG53ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyID0gZnVuY3Rpb24gKGkpIHtcbiAgcmV0dXJuIChWLCBvcHRzID0ge30pID0+IHtcbiAgICBpZiAob3B0cy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogaS5uYW1lLFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtWfSB0byBiZSBhbiBpbnN0YW5jZSBvZiAke2kubmFtZX0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXR1cm4gVlxuICB9XG59XG5cbndlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcnMpIHtcbiAgcmV0dXJuIChkaWN0aW9uYXJ5KSA9PiB7XG4gICAgY29uc3QgdHlwZSA9IHdlYmlkbC51dGlsLlR5cGUoZGljdGlvbmFyeSlcbiAgICBjb25zdCBkaWN0ID0ge31cblxuICAgIGlmICh0eXBlID09PSAnTnVsbCcgfHwgdHlwZSA9PT0gJ1VuZGVmaW5lZCcpIHtcbiAgICAgIHJldHVybiBkaWN0XG4gICAgfSBlbHNlIGlmICh0eXBlICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7ZGljdGlvbmFyeX0gdG8gYmUgb25lIG9mOiBOdWxsLCBVbmRlZmluZWQsIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIGZvciAoY29uc3Qgb3B0aW9ucyBvZiBjb252ZXJ0ZXJzKSB7XG4gICAgICBjb25zdCB7IGtleSwgZGVmYXVsdFZhbHVlLCByZXF1aXJlZCwgY29udmVydGVyIH0gPSBvcHRpb25zXG5cbiAgICAgIGlmIChyZXF1aXJlZCA9PT0gdHJ1ZSkge1xuICAgICAgICBpZiAoIWhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBoYXNPd24ob3B0aW9ucywgJ2RlZmF1bHRWYWx1ZScpXG5cbiAgICAgIC8vIE9ubHkgdXNlIGRlZmF1bHRWYWx1ZSBpZiB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kXG4gICAgICAvLyBhIGRlZmF1bHRWYWx1ZSBvcHRpb25zIHdhcyBwcm92aWRlZC5cbiAgICAgIGlmIChoYXNEZWZhdWx0ICYmIHZhbHVlICE9PSBudWxsKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUgPz8gZGVmYXVsdFZhbHVlXG4gICAgICB9XG5cbiAgICAgIC8vIEEga2V5IGNhbiBiZSBvcHRpb25hbCBhbmQgaGF2ZSBubyBkZWZhdWx0IHZhbHVlLlxuICAgICAgLy8gV2hlbiB0aGlzIGhhcHBlbnMsIGRvIG5vdCBwZXJmb3JtIGEgY29udmVyc2lvbixcbiAgICAgIC8vIGFuZCBkbyBub3QgYXNzaWduIHRoZSBrZXkgYSB2YWx1ZS5cbiAgICAgIGlmIChyZXF1aXJlZCB8fCBoYXNEZWZhdWx0IHx8IHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdmFsdWUgPSBjb252ZXJ0ZXIodmFsdWUpXG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIG9wdGlvbnMuYWxsb3dlZFZhbHVlcyAmJlxuICAgICAgICAgICFvcHRpb25zLmFsbG93ZWRWYWx1ZXMuaW5jbHVkZXModmFsdWUpXG4gICAgICAgICkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYCR7dmFsdWV9IGlzIG5vdCBhbiBhY2NlcHRlZCB0eXBlLiBFeHBlY3RlZCBvbmUgb2YgJHtvcHRpb25zLmFsbG93ZWRWYWx1ZXMuam9pbignLCAnKX0uYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBkaWN0W2tleV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkaWN0XG4gIH1cbn1cblxud2ViaWRsLm51bGxhYmxlQ29udmVydGVyID0gZnVuY3Rpb24gKGNvbnZlcnRlcikge1xuICByZXR1cm4gKFYpID0+IHtcbiAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFZcbiAgICB9XG5cbiAgICByZXR1cm4gY29udmVydGVyKFYpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ET01TdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzLmxlZ2FjeU51bGxUb0VtcHR5U3RyaW5nKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAyLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICBpZiAodHlwZW9mIFYgPT09ICdzeW1ib2wnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ291bGQgbm90IGNvbnZlcnQgYXJndW1lbnQgb2YgdHlwZSBzeW1ib2wgdG8gc3RyaW5nLicpXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gdGhlIElETCBET01TdHJpbmcgdmFsdWUgdGhhdCByZXByZXNlbnRzIHRoZVxuICAvLyAgICBzYW1lIHNlcXVlbmNlIG9mIGNvZGUgdW5pdHMgYXMgdGhlIG9uZSB0aGVcbiAgLy8gICAgRUNNQVNjcmlwdCBTdHJpbmcgdmFsdWUgeCByZXByZXNlbnRzLlxuICByZXR1cm4gU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtQnl0ZVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gVG9TdHJpbmcoVikuXG4gIC8vIE5vdGU6IERPTVN0cmluZyBjb252ZXJ0ZXIgcGVyZm9ybSA/IFRvU3RyaW5nKFYpXG4gIGNvbnN0IHggPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcblxuICAvLyAyLiBJZiB0aGUgdmFsdWUgb2YgYW55IGVsZW1lbnQgb2YgeCBpcyBncmVhdGVyIHRoYW5cbiAgLy8gICAgMjU1LCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgeC5sZW5ndGg7IGluZGV4KyspIHtcbiAgICBpZiAoeC5jaGFyQ29kZUF0KGluZGV4KSA+IDI1NSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ0Nhbm5vdCBjb252ZXJ0IGFyZ3VtZW50IHRvIGEgQnl0ZVN0cmluZyBiZWNhdXNlIHRoZSBjaGFyYWN0ZXIgYXQgJyArXG4gICAgICAgIGBpbmRleCAke2luZGV4fSBoYXMgYSB2YWx1ZSBvZiAke3guY2hhckNvZGVBdChpbmRleCl9IHdoaWNoIGlzIGdyZWF0ZXIgdGhhbiAyNTUuYFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBhbiBJREwgQnl0ZVN0cmluZyB2YWx1ZSB3aG9zZSBsZW5ndGggaXMgdGhlXG4gIC8vICAgIGxlbmd0aCBvZiB4LCBhbmQgd2hlcmUgdGhlIHZhbHVlIG9mIGVhY2ggZWxlbWVudCBpc1xuICAvLyAgICB0aGUgdmFsdWUgb2YgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBvZiB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLVVTVlN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBsb25nIGxvbmcgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAndW5zaWduZWQnKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCAzMiwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCAzMiwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICAvLyAxLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhblxuICAvLyAgICBbW0FycmF5QnVmZmVyRGF0YV1dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1hcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgLy8gc2VlOiBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb3BlcnRpZXMtb2YtdGhlLXNoYXJlZGFycmF5YnVmZmVyLWluc3RhbmNlc1xuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKVxuICApIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiBgJHtWfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFsnQXJyYXlCdWZmZXInXVxuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVikgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVikgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhXG4gIC8vICAgIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWwuXG5cbiAgLy8gNC4gUmV0dXJuIHRoZSBJREwgQXJyYXlCdWZmZXIgdmFsdWUgdGhhdCBpcyBhXG4gIC8vICAgIHJlZmVyZW5jZSB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChWLCBULCBvcHRzID0ge30pIHtcbiAgLy8gMS4gTGV0IFQgYmUgdGhlIElETCB0eXBlIFYgaXMgYmVpbmcgY29udmVydGVkIHRvLlxuXG4gIC8vIDIuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tUeXBlZEFycmF5TmFtZV1dIGludGVybmFsIHNsb3Qgd2l0aCBhIHZhbHVlXG4gIC8vICAgIGVxdWFsIHRvIFRcdTIwMTlzIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChcbiAgICB3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fFxuICAgICF0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHxcbiAgICBWLmNvbnN0cnVjdG9yLm5hbWUgIT09IFQubmFtZVxuICApIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiBgJHtULm5hbWV9YCxcbiAgICAgIGFyZ3VtZW50OiBgJHtWfWAsXG4gICAgICB0eXBlczogW1QubmFtZV1cbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAob3B0cy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWLmJ1ZmZlcikpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBoZWFkZXI6ICdBcnJheUJ1ZmZlcicsXG4gICAgICBtZXNzYWdlOiAnU2hhcmVkQXJyYXlCdWZmZXIgaXMgbm90IGFsbG93ZWQuJ1xuICAgIH0pXG4gIH1cblxuICAvLyA0LiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dSZXNpemFibGVdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzUmVzaXphYmxlQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzXG4gIC8vICAgIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBhcnJheSBidWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbFxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnRGF0YVZpZXcnLFxuICAgICAgbWVzc2FnZTogJ09iamVjdCBpcyBub3QgYSBEYXRhVmlldy4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgQXJyYXlCdWZmZXJzIGFyZSBjdXJyZW50bHkgYSBwcm9wb3NhbFxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIG9wdHMpXG4gIH1cblxuICBpZiAodHlwZXMuaXNUeXBlZEFycmF5KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkoViwgVi5jb25zdHJ1Y3RvcilcbiAgfVxuXG4gIGlmICh0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRhdGFWaWV3KFYsIG9wdHMpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKGBDb3VsZCBub3QgY29udmVydCAke1Z9IHRvIGEgQnVmZmVyU291cmNlLmApXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJ5dGVTdHJpbmc+J11cbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddID0gd2ViaWRsLnJlY29yZENvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyxcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2ViaWRsXG59XG4iLCAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgYXRvYiB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgaXNvbW9ycGhpY0RlY29kZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtdG9rZW4tY29kZS1wb2ludFxuICovXG5jb25zdCBIVFRQX1RPS0VOX0NPREVQT0lOVFMgPSAvXlshIyQlJicqKy0uXl98fkEtWmEtejAtOV0rJC9cbmNvbnN0IEhUVFBfV0hJVEVTUEFDRV9SRUdFWCA9IC8oXFx1MDAwQXxcXHUwMDBEfFxcdTAwMDl8XFx1MDAyMCkvIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcXVvdGVkLXN0cmluZy10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMgPSAvW1xcdTAwMDl8XFx1MDAyMC1cXHUwMDdFfFxcdTAwODAtXFx1MDBGRl0vIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RhdGEtdXJsLXByb2Nlc3NvclxuLyoqIEBwYXJhbSB7VVJMfSBkYXRhVVJMICovXG5mdW5jdGlvbiBkYXRhVVJMUHJvY2Vzc29yIChkYXRhVVJMKSB7XG4gIC8vIDEuIEFzc2VydDogZGF0YVVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiZGF0YVwiLlxuICBhc3NlcnQoZGF0YVVSTC5wcm90b2NvbCA9PT0gJ2RhdGE6JylcblxuICAvLyAyLiBMZXQgaW5wdXQgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZSBVUkxcbiAgLy8gc2VyaWFsaXplciBvbiBkYXRhVVJMIHdpdGggZXhjbHVkZSBmcmFnbWVudFxuICAvLyBzZXQgdG8gdHJ1ZS5cbiAgbGV0IGlucHV0ID0gVVJMU2VyaWFsaXplcihkYXRhVVJMLCB0cnVlKVxuXG4gIC8vIDMuIFJlbW92ZSB0aGUgbGVhZGluZyBcImRhdGE6XCIgc3RyaW5nIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gaW5wdXQuc2xpY2UoNSlcblxuICAvLyA0LiBMZXQgcG9zaXRpb24gcG9pbnQgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDUuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAvLyBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgZXF1YWxcbiAgLy8gdG8gVSswMDJDICgsKSwgZ2l2ZW4gcG9zaXRpb24uXG4gIGxldCBtaW1lVHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICcsJyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gNi4gU3RyaXAgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZVxuICAvLyBmcm9tIG1pbWVUeXBlLlxuICAvLyBVbmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogd2UgbmVlZCB0byBzdG9yZSB0aGVcbiAgLy8gbGVuZ3RoIGJlY2F1c2UgaWYgdGhlIG1pbWV0eXBlIGhhcyBzcGFjZXMgcmVtb3ZlZCxcbiAgLy8gdGhlIHdyb25nIGFtb3VudCB3aWxsIGJlIHNsaWNlZCBmcm9tIHRoZSBpbnB1dCBpblxuICAvLyBzdGVwICM5XG4gIGNvbnN0IG1pbWVUeXBlTGVuZ3RoID0gbWltZVR5cGUubGVuZ3RoXG4gIG1pbWVUeXBlID0gcmVtb3ZlQVNDSUlXaGl0ZXNwYWNlKG1pbWVUeXBlLCB0cnVlLCB0cnVlKVxuXG4gIC8vIDcuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlblxuICAvLyByZXR1cm4gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gOC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gOS4gTGV0IGVuY29kZWRCb2R5IGJlIHRoZSByZW1haW5kZXIgb2YgaW5wdXQuXG4gIGNvbnN0IGVuY29kZWRCb2R5ID0gaW5wdXQuc2xpY2UobWltZVR5cGVMZW5ndGggKyAxKVxuXG4gIC8vIDEwLiBMZXQgYm9keSBiZSB0aGUgcGVyY2VudC1kZWNvZGluZyBvZiBlbmNvZGVkQm9keS5cbiAgbGV0IGJvZHkgPSBzdHJpbmdQZXJjZW50RGVjb2RlKGVuY29kZWRCb2R5KVxuXG4gIC8vIDExLiBJZiBtaW1lVHlwZSBlbmRzIHdpdGggVSswMDNCICg7KSwgZm9sbG93ZWQgYnlcbiAgLy8gemVybyBvciBtb3JlIFUrMDAyMCBTUEFDRSwgZm9sbG93ZWQgYnkgYW4gQVNDSUlcbiAgLy8gY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgXCJiYXNlNjRcIiwgdGhlbjpcbiAgaWYgKC87KFxcdTAwMjApezAsfWJhc2U2NCQvaS50ZXN0KG1pbWVUeXBlKSkge1xuICAgIC8vIDEuIExldCBzdHJpbmdCb2R5IGJlIHRoZSBpc29tb3JwaGljIGRlY29kZSBvZiBib2R5LlxuICAgIGNvbnN0IHN0cmluZ0JvZHkgPSBpc29tb3JwaGljRGVjb2RlKGJvZHkpXG5cbiAgICAvLyAyLiBTZXQgYm9keSB0byB0aGUgZm9yZ2l2aW5nLWJhc2U2NCBkZWNvZGUgb2ZcbiAgICAvLyBzdHJpbmdCb2R5LlxuICAgIGJvZHkgPSBmb3JnaXZpbmdCYXNlNjQoc3RyaW5nQm9keSlcblxuICAgIC8vIDMuIElmIGJvZHkgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgICBpZiAoYm9keSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gNC4gUmVtb3ZlIHRoZSBsYXN0IDYgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnNsaWNlKDAsIC02KVxuXG4gICAgLy8gNS4gUmVtb3ZlIHRyYWlsaW5nIFUrMDAyMCBTUEFDRSBjb2RlIHBvaW50cyBmcm9tIG1pbWVUeXBlLFxuICAgIC8vIGlmIGFueS5cbiAgICBtaW1lVHlwZSA9IG1pbWVUeXBlLnJlcGxhY2UoLyhcXHUwMDIwKSskLywgJycpXG5cbiAgICAvLyA2LiBSZW1vdmUgdGhlIGxhc3QgVSswMDNCICg7KSBjb2RlIHBvaW50IGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtMSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBtaW1lVHlwZSBzdGFydHMgd2l0aCBVKzAwM0IgKDspLCB0aGVuIHByZXBlbmRcbiAgLy8gXCJ0ZXh0L3BsYWluXCIgdG8gbWltZVR5cGUuXG4gIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCc7JykpIHtcbiAgICBtaW1lVHlwZSA9ICd0ZXh0L3BsYWluJyArIG1pbWVUeXBlXG4gIH1cblxuICAvLyAxMy4gTGV0IG1pbWVUeXBlUmVjb3JkIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZ1xuICAvLyBtaW1lVHlwZS5cbiAgbGV0IG1pbWVUeXBlUmVjb3JkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAvLyAxNC4gSWYgbWltZVR5cGVSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiBzZXRcbiAgLy8gbWltZVR5cGVSZWNvcmQgdG8gdGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJLlxuICBpZiAobWltZVR5cGVSZWNvcmQgPT09ICdmYWlsdXJlJykge1xuICAgIG1pbWVUeXBlUmVjb3JkID0gcGFyc2VNSU1FVHlwZSgndGV4dC9wbGFpbjtjaGFyc2V0PVVTLUFTQ0lJJylcbiAgfVxuXG4gIC8vIDE1LiBSZXR1cm4gYSBuZXcgZGF0YTogVVJMIHN0cnVjdCB3aG9zZSBNSU1FXG4gIC8vIHR5cGUgaXMgbWltZVR5cGVSZWNvcmQgYW5kIGJvZHkgaXMgYm9keS5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RhdGEtdXJsLXN0cnVjdFxuICByZXR1cm4geyBtaW1lVHlwZTogbWltZVR5cGVSZWNvcmQsIGJvZHkgfVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLXNlcmlhbGl6ZXJcbi8qKlxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtib29sZWFufSBleGNsdWRlRnJhZ21lbnRcbiAqL1xuZnVuY3Rpb24gVVJMU2VyaWFsaXplciAodXJsLCBleGNsdWRlRnJhZ21lbnQgPSBmYWxzZSkge1xuICBpZiAoIWV4Y2x1ZGVGcmFnbWVudCkge1xuICAgIHJldHVybiB1cmwuaHJlZlxuICB9XG5cbiAgY29uc3QgaHJlZiA9IHVybC5ocmVmXG4gIGNvbnN0IGhhc2hMZW5ndGggPSB1cmwuaGFzaC5sZW5ndGhcblxuICByZXR1cm4gaGFzaExlbmd0aCA9PT0gMCA/IGhyZWYgOiBocmVmLnN1YnN0cmluZygwLCBocmVmLmxlbmd0aCAtIGhhc2hMZW5ndGgpXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWEtc2VxdWVuY2Utb2YtY29kZS1wb2ludHNcbi8qKlxuICogQHBhcmFtIHsoY2hhcjogc3RyaW5nKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyAyLiBXaGlsZSBwb3NpdGlvbiBkb2Vzblx1MjAxOXQgcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGlucHV0IGFuZCB0aGVcbiAgLy8gY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgbWVldHMgdGhlIGNvbmRpdGlvbiBjb25kaXRpb246XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBjb25kaXRpb24oaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dKSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGF0IGNvZGUgcG9pbnQgdG8gdGhlIGVuZCBvZiByZXN1bHQuXG4gICAgcmVzdWx0ICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDMuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBIGZhc3RlciBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIHRoYXQgb25seSB3b3JrcyB3aGVuIGNvbXBhcmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCAoY2hhciwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGlkeCA9IGlucHV0LmluZGV4T2YoY2hhciwgcG9zaXRpb24ucG9zaXRpb24pXG4gIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uID0gaW5wdXQubGVuZ3RoXG4gICAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0KVxuICB9XG5cbiAgcG9zaXRpb24ucG9zaXRpb24gPSBpZHhcbiAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdHJpbmctcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHN0cmluZ1BlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgaW5wdXQuXG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGJ5dGVzLlxuICByZXR1cm4gcGVyY2VudERlY29kZShieXRlcylcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNwZXJjZW50LWRlY29kZVxuLyoqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXQgKi9cbmZ1bmN0aW9uIHBlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtudW1iZXJbXX0gKi9cbiAgY29uc3Qgb3V0cHV0ID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBieXRlIGJ5dGUgaW4gaW5wdXQ6XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBieXRlID0gaW5wdXRbaV1cblxuICAgIC8vIDEuIElmIGJ5dGUgaXMgbm90IDB4MjUgKCUpLCB0aGVuIGFwcGVuZCBieXRlIHRvIG91dHB1dC5cbiAgICBpZiAoYnl0ZSAhPT0gMHgyNSkge1xuICAgICAgb3V0cHV0LnB1c2goYnl0ZSlcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgYnl0ZSBpcyAweDI1ICglKSBhbmQgdGhlIG5leHQgdHdvIGJ5dGVzXG4gICAgLy8gYWZ0ZXIgYnl0ZSBpbiBpbnB1dCBhcmUgbm90IGluIHRoZSByYW5nZXNcbiAgICAvLyAweDMwICgwKSB0byAweDM5ICg5KSwgMHg0MSAoQSkgdG8gMHg0NiAoRiksXG4gICAgLy8gYW5kIDB4NjEgKGEpIHRvIDB4NjYgKGYpLCBhbGwgaW5jbHVzaXZlLCBhcHBlbmQgYnl0ZVxuICAgIC8vIHRvIG91dHB1dC5cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgYnl0ZSA9PT0gMHgyNSAmJlxuICAgICAgIS9eWzAtOUEtRmEtZl17Mn0kL2kudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGlucHV0W2kgKyAxXSwgaW5wdXRbaSArIDJdKSlcbiAgICApIHtcbiAgICAgIG91dHB1dC5wdXNoKDB4MjUpXG5cbiAgICAvLyAzLiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIExldCBieXRlUG9pbnQgYmUgdGhlIHR3byBieXRlcyBhZnRlciBieXRlIGluIGlucHV0LFxuICAgICAgLy8gZGVjb2RlZCwgYW5kIHRoZW4gaW50ZXJwcmV0ZWQgYXMgaGV4YWRlY2ltYWwgbnVtYmVyLlxuICAgICAgY29uc3QgbmV4dFR3b0J5dGVzID0gU3RyaW5nLmZyb21DaGFyQ29kZShpbnB1dFtpICsgMV0sIGlucHV0W2kgKyAyXSlcbiAgICAgIGNvbnN0IGJ5dGVQb2ludCA9IE51bWJlci5wYXJzZUludChuZXh0VHdvQnl0ZXMsIDE2KVxuXG4gICAgICAvLyAyLiBBcHBlbmQgYSBieXRlIHdob3NlIHZhbHVlIGlzIGJ5dGVQb2ludCB0byBvdXRwdXQuXG4gICAgICBvdXRwdXQucHVzaChieXRlUG9pbnQpXG5cbiAgICAgIC8vIDMuIFNraXAgdGhlIG5leHQgdHdvIGJ5dGVzIGluIGlucHV0LlxuICAgICAgaSArPSAyXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShvdXRwdXQpXG59XG5cbi8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtYS1taW1lLXR5cGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUgKGlucHV0KSB7XG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UoaW5wdXQsIHRydWUsIHRydWUpXG5cbiAgLy8gMi4gTGV0IHBvc2l0aW9uIGJlIGEgcG9zaXRpb24gdmFyaWFibGUgZm9yIGlucHV0LFxuICAvLyBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDMuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlXG4gIC8vIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMkYgKC8pIGZyb21cbiAgLy8gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCB0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJy8nLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA0LiBJZiB0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAgaWYgKHR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDUuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiByZXR1cm5cbiAgLy8gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDJGICgvKS4pXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBMZXQgc3VidHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZlxuICAvLyBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlblxuICAvLyBwb3NpdGlvbi5cbiAgbGV0IHN1YnR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnOycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDguIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gc3VidHlwZS5cbiAgc3VidHlwZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHN1YnR5cGUsIGZhbHNlLCB0cnVlKVxuXG4gIC8vIDkuIElmIHN1YnR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHN1YnR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgdHlwZUxvd2VyY2FzZSA9IHR5cGUudG9Mb3dlckNhc2UoKVxuICBjb25zdCBzdWJ0eXBlTG93ZXJjYXNlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gMTAuIExldCBtaW1lVHlwZSBiZSBhIG5ldyBNSU1FIHR5cGUgcmVjb3JkIHdob3NlIHR5cGVcbiAgLy8gaXMgdHlwZSwgaW4gQVNDSUkgbG93ZXJjYXNlLCBhbmQgc3VidHlwZSBpcyBzdWJ0eXBlLFxuICAvLyBpbiBBU0NJSSBsb3dlcmNhc2UuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlXG4gIGNvbnN0IG1pbWVUeXBlID0ge1xuICAgIHR5cGU6IHR5cGVMb3dlcmNhc2UsXG4gICAgc3VidHlwZTogc3VidHlwZUxvd2VyY2FzZSxcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlLWVzc2VuY2VcbiAgICBlc3NlbmNlOiBgJHt0eXBlTG93ZXJjYXNlfS8ke3N1YnR5cGVMb3dlcmNhc2V9YFxuICB9XG5cbiAgLy8gMTEuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDEuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0IgKDspLilcbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgSFRUUFxuICAgIC8vIHdoaXRlc3BhY2UgZnJvbSBpbnB1dCBnaXZlbiBwb3NpdGlvbi5cbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICAgICAgY2hhciA9PiBIVFRQX1dISVRFU1BBQ0VfUkVHRVgudGVzdChjaGFyKSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAzLiBMZXQgcGFyYW1ldGVyTmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAgIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgLy8gb3IgVSswMDNEICg9KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJzsnICYmIGNoYXIgIT09ICc9JyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA0LiBTZXQgcGFyYW1ldGVyTmFtZSB0byBwYXJhbWV0ZXJOYW1lLCBpbiBBU0NJSVxuICAgIC8vIGxvd2VyY2FzZS5cbiAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuOlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgLy8gMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgICAvLyBVKzAwM0IgKDspLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0QgKD0pLilcbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgICB9XG5cbiAgICAvLyA2LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDcuIExldCBwYXJhbWV0ZXJWYWx1ZSBiZSBudWxsLlxuICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IG51bGxcblxuICAgIC8vIDguIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgIC8vIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGFuIEhUVFAgcXVvdGVkIHN0cmluZyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvblxuICAgICAgLy8gYW5kIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uLCB0cnVlKVxuXG4gICAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAvLyA5LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAgIC8vIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgICAgLy8gMi4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBwYXJhbWV0ZXJWYWx1ZS5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUsIGZhbHNlLCB0cnVlKVxuXG4gICAgICAvLyAzLiBJZiBwYXJhbWV0ZXJWYWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBzb2xlbHkgY29udGFpbnMgSFRUUCB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gcGFyYW1ldGVyVmFsdWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gZG9lcyBub3QgZXhpc3RcbiAgICAvLyB0aGVuIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSB0byBwYXJhbWV0ZXJWYWx1ZS5cbiAgICBpZiAoXG4gICAgICBwYXJhbWV0ZXJOYW1lLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUy50ZXN0KHBhcmFtZXRlclZhbHVlKSkgJiZcbiAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKVxuICAgICkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNmb3JnaXZpbmctYmFzZTY0LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICovXG5mdW5jdGlvbiBmb3JnaXZpbmdCYXNlNjQgKGRhdGEpIHtcbiAgLy8gMS4gUmVtb3ZlIGFsbCBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gZGF0YS5cbiAgZGF0YSA9IGRhdGEucmVwbGFjZSgvW1xcdTAwMDlcXHUwMDBBXFx1MDAwQ1xcdTAwMERcXHUwMDIwXS9nLCAnJykgIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAvLyAyLiBJZiBkYXRhXHUyMDE5cyBjb2RlIHBvaW50IGxlbmd0aCBkaXZpZGVzIGJ5IDQgbGVhdmluZ1xuICAvLyBubyByZW1haW5kZXIsIHRoZW46XG4gIGlmIChkYXRhLmxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAvLyAxLiBJZiBkYXRhIGVuZHMgd2l0aCBvbmUgb3IgdHdvIFUrMDAzRCAoPSkgY29kZSBwb2ludHMsXG4gICAgLy8gdGhlbiByZW1vdmUgdGhlbSBmcm9tIGRhdGEuXG4gICAgZGF0YSA9IGRhdGEucmVwbGFjZSgvPT89JC8sICcnKVxuICB9XG5cbiAgLy8gMy4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gYSByZW1haW5kZXIgb2YgMSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKGRhdGEubGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDQuIElmIGRhdGEgY29udGFpbnMgYSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG9uZSBvZlxuICAvLyAgVSswMDJCICgrKVxuICAvLyAgVSswMDJGICgvKVxuICAvLyAgQVNDSUkgYWxwaGFudW1lcmljXG4gIC8vIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICgvW14rLzAtOUEtWmEtel0vLnRlc3QoZGF0YSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICBjb25zdCBiaW5hcnkgPSBhdG9iKGRhdGEpXG4gIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5Lmxlbmd0aClcblxuICBmb3IgKGxldCBieXRlID0gMDsgYnl0ZSA8IGJpbmFyeS5sZW5ndGg7IGJ5dGUrKykge1xuICAgIGJ5dGVzW2J5dGVdID0gYmluYXJ5LmNoYXJDb2RlQXQoYnl0ZSlcbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29sbGVjdC1hbi1odHRwLXF1b3RlZC1zdHJpbmdcbi8vIHRlc3RzOiBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZXhhbXBsZS1odHRwLXF1b3RlZC1zdHJpbmdcbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICogQHBhcmFtIHtib29sZWFuP30gZXh0cmFjdFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcgKGlucHV0LCBwb3NpdGlvbiwgZXh0cmFjdFZhbHVlKSB7XG4gIC8vIDEuIExldCBwb3NpdGlvblN0YXJ0IGJlIHBvc2l0aW9uLlxuICBjb25zdCBwb3NpdGlvblN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICAvLyAyLiBMZXQgdmFsdWUgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAzLiBBc3NlcnQ6IHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dFxuICAvLyBpcyBVKzAwMjIgKFwiKS5cbiAgYXNzZXJ0KGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJ1wiJylcblxuICAvLyA0LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA1LiBXaGlsZSB0cnVlOlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50c1xuICAgIC8vIHRoYXQgYXJlIG5vdCBVKzAwMjIgKFwiKSBvciBVKzAwNUMgKFxcKSBmcm9tIGlucHV0LCBnaXZlblxuICAgIC8vIHBvc2l0aW9uLCB0byB2YWx1ZS5cbiAgICB2YWx1ZSArPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgIT09ICdcIicgJiYgY2hhciAhPT0gJ1xcXFwnLFxuICAgICAgaW5wdXQsXG4gICAgICBwb3NpdGlvblxuICAgIClcblxuICAgIC8vIDIuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBicmVhay5cbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDMuIExldCBxdW90ZU9yQmFja3NsYXNoIGJlIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpblxuICAgIC8vIGlucHV0LlxuICAgIGNvbnN0IHF1b3RlT3JCYWNrc2xhc2ggPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA1LiBJZiBxdW90ZU9yQmFja3NsYXNoIGlzIFUrMDA1QyAoXFwpLCB0aGVuOlxuICAgIGlmIChxdW90ZU9yQmFja3NsYXNoID09PSAnXFxcXCcpIHtcbiAgICAgIC8vIDEuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBhcHBlbmRcbiAgICAgIC8vIFUrMDA1QyAoXFwpIHRvIHZhbHVlIGFuZCBicmVhay5cbiAgICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgKz0gJ1xcXFwnXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFwcGVuZCB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSArPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgICAgLy8gMy4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gNi4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBBc3NlcnQ6IHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDIyIChcIikuXG4gICAgICBhc3NlcnQocXVvdGVPckJhY2tzbGFzaCA9PT0gJ1wiJylcblxuICAgICAgLy8gMi4gQnJlYWsuXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIC8vIDYuIElmIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcgaXMgc2V0LCB0aGVuIHJldHVybiB2YWx1ZS5cbiAgaWYgKGV4dHJhY3RWYWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG5cbiAgLy8gNy4gUmV0dXJuIHRoZSBjb2RlIHBvaW50cyBmcm9tIHBvc2l0aW9uU3RhcnQgdG8gcG9zaXRpb24sXG4gIC8vIGluY2x1c2l2ZSwgd2l0aGluIGlucHV0LlxuICByZXR1cm4gaW5wdXQuc2xpY2UocG9zaXRpb25TdGFydCwgcG9zaXRpb24ucG9zaXRpb24pXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGl6ZS1hLW1pbWUtdHlwZVxuICovXG5mdW5jdGlvbiBzZXJpYWxpemVBTWltZVR5cGUgKG1pbWVUeXBlKSB7XG4gIGFzc2VydChtaW1lVHlwZSAhPT0gJ2ZhaWx1cmUnKVxuICBjb25zdCB7IHBhcmFtZXRlcnMsIGVzc2VuY2UgfSA9IG1pbWVUeXBlXG5cbiAgLy8gMS4gTGV0IHNlcmlhbGl6YXRpb24gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgbWltZVR5cGVcdTIwMTlzXG4gIC8vICAgIHR5cGUsIFUrMDAyRiAoLyksIGFuZCBtaW1lVHlwZVx1MjAxOXMgc3VidHlwZS5cbiAgbGV0IHNlcmlhbGl6YXRpb24gPSBlc3NlbmNlXG5cbiAgLy8gMi4gRm9yIGVhY2ggbmFtZSBcdTIxOTIgdmFsdWUgb2YgbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnM6XG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgcGFyYW1ldGVycy5lbnRyaWVzKCkpIHtcbiAgICAvLyAxLiBBcHBlbmQgVSswMDNCICg7KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJzsnXG5cbiAgICAvLyAyLiBBcHBlbmQgbmFtZSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gbmFtZVxuXG4gICAgLy8gMy4gQXBwZW5kIFUrMDAzRCAoPSkgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9ICc9J1xuXG4gICAgLy8gNC4gSWYgdmFsdWUgZG9lcyBub3Qgc29sZWx5IGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlXG4gICAgLy8gICAgcG9pbnRzIG9yIHZhbHVlIGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKCFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh2YWx1ZSkpIHtcbiAgICAgIC8vIDEuIFByZWNlZGUgZWFjaCBvY2N1cmVuY2Ugb2YgVSswMDIyIChcIikgb3JcbiAgICAgIC8vICAgIFUrMDA1QyAoXFwpIGluIHZhbHVlIHdpdGggVSswMDVDIChcXCkuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhcXFxcfFwiKS9nLCAnXFxcXCQxJylcblxuICAgICAgLy8gMi4gUHJlcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlID0gJ1wiJyArIHZhbHVlXG5cbiAgICAgIC8vIDMuIEFwcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9ICdcIidcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgdmFsdWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gc2VyaWFsaXphdGlvbi5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb25cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2UgKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPT09ICdcXHInIHx8IGNoYXIgPT09ICdcXG4nIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICcgJ1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICovXG5mdW5jdGlvbiByZW1vdmVIVFRQV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIGxldCBsZWFkID0gMFxuICBsZXQgdHJhaWwgPSBzdHIubGVuZ3RoIC0gMVxuXG4gIGlmIChsZWFkaW5nKSB7XG4gICAgZm9yICg7IGxlYWQgPCBzdHIubGVuZ3RoICYmIGlzSFRUUFdoaXRlU3BhY2Uoc3RyW2xlYWRdKTsgbGVhZCsrKTtcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIGZvciAoOyB0cmFpbCA+IDAgJiYgaXNIVFRQV2hpdGVTcGFjZShzdHJbdHJhaWxdKTsgdHJhaWwtLSk7XG4gIH1cblxuICByZXR1cm4gc3RyLnNsaWNlKGxlYWQsIHRyYWlsICsgMSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNhc2NpaS13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICovXG5mdW5jdGlvbiBpc0FTQ0lJV2hpdGVzcGFjZSAoY2hhcikge1xuICByZXR1cm4gY2hhciA9PT0gJ1xccicgfHwgY2hhciA9PT0gJ1xcbicgfHwgY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJ1xcZicgfHwgY2hhciA9PT0gJyAnXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtbGVhZGluZy1hbmQtdHJhaWxpbmctYXNjaWktd2hpdGVzcGFjZVxuICovXG5mdW5jdGlvbiByZW1vdmVBU0NJSVdoaXRlc3BhY2UgKHN0ciwgbGVhZGluZyA9IHRydWUsIHRyYWlsaW5nID0gdHJ1ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIGZvciAoOyBsZWFkIDwgc3RyLmxlbmd0aCAmJiBpc0FTQ0lJV2hpdGVzcGFjZShzdHJbbGVhZF0pOyBsZWFkKyspO1xuICB9XG5cbiAgaWYgKHRyYWlsaW5nKSB7XG4gICAgZm9yICg7IHRyYWlsID4gMCAmJiBpc0FTQ0lJV2hpdGVzcGFjZShzdHJbdHJhaWxdKTsgdHJhaWwtLSk7XG4gIH1cblxuICByZXR1cm4gc3RyLnNsaWNlKGxlYWQsIHRyYWlsICsgMSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRhdGFVUkxQcm9jZXNzb3IsXG4gIFVSTFNlcmlhbGl6ZXIsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0LFxuICBzdHJpbmdQZXJjZW50RGVjb2RlLFxuICBwYXJzZU1JTUVUeXBlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLFxuICBzZXJpYWxpemVBTWltZVR5cGVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG5jbGFzcyBGaWxlIGV4dGVuZHMgQmxvYiB7XG4gIGNvbnN0cnVjdG9yIChmaWxlQml0cywgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRmlsZSBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGZpbGVCaXRzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddKGZpbGVCaXRzKVxuICAgIGZpbGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVOYW1lKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcob3B0aW9ucylcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuICAgIC8vIE5vdGU6IEJsb2IgaGFuZGxlcyB0aGlzIGZvciB1c1xuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICBsZXQgdCA9IG9wdGlvbnMudHlwZVxuICAgIGxldCBkXG5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbGFiZWxzXG4gICAgc3Vic3RlcDoge1xuICAgICAgaWYgKHQpIHtcbiAgICAgICAgdCA9IHBhcnNlTUlNRVR5cGUodClcblxuICAgICAgICBpZiAodCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgdCA9ICcnXG4gICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgICAgICAgIGJyZWFrIHN1YnN0ZXBcbiAgICAgICAgfVxuXG4gICAgICAgIHQgPSBzZXJpYWxpemVBTWltZVR5cGUodCkudG9Mb3dlckNhc2UoKVxuICAgICAgfVxuXG4gICAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICAgIGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZFxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHN1cGVyKHByb2Nlc3NCbG9iUGFydHMoZmlsZUJpdHMsIG9wdGlvbnMpLCB7IHR5cGU6IHQgfSlcbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBuYW1lOiBuLFxuICAgICAgbGFzdE1vZGlmaWVkOiBkLFxuICAgICAgdHlwZTogdFxuICAgIH1cbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cbn1cblxuY2xhc3MgRmlsZUxpa2Uge1xuICBjb25zdHJ1Y3RvciAoYmxvYkxpa2UsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUT0RPOiBhcmd1bWVudCBpZGwgdHlwZSBjaGVja1xuXG4gICAgLy8gVGhlIEZpbGUgY29uc3RydWN0b3IgaXMgaW52b2tlZCB3aXRoIHR3byBvciB0aHJlZSBwYXJhbWV0ZXJzLCBkZXBlbmRpbmdcbiAgICAvLyBvbiB3aGV0aGVyIHRoZSBvcHRpb25hbCBkaWN0aW9uYXJ5IHBhcmFtZXRlciBpcyB1c2VkLiBXaGVuIHRoZSBGaWxlKClcbiAgICAvLyBjb25zdHJ1Y3RvciBpcyBpbnZva2VkLCB1c2VyIGFnZW50cyBtdXN0IHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgcHJvY2Vzc2luZyBibG9iIHBhcnRzIGdpdmVuIGZpbGVCaXRzIGFuZFxuICAgIC8vIG9wdGlvbnMuXG5cbiAgICAvLyAyLiBMZXQgbiBiZSB0aGUgZmlsZU5hbWUgYXJndW1lbnQgdG8gdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IG4gPSBmaWxlTmFtZVxuXG4gICAgLy8gMy4gUHJvY2VzcyBGaWxlUHJvcGVydHlCYWcgZGljdGlvbmFyeSBhcmd1bWVudCBieSBydW5uaW5nIHRoZSBmb2xsb3dpbmdcbiAgICAvLyBzdWJzdGVwczpcblxuICAgIC8vICAgIDEuIElmIHRoZSB0eXBlIG1lbWJlciBpcyBwcm92aWRlZCBhbmQgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIGxldCB0XG4gICAgLy8gICAgYmUgc2V0IHRvIHRoZSB0eXBlIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiB0IGNvbnRhaW5zIGFueSBjaGFyYWN0ZXJzXG4gICAgLy8gICAgb3V0c2lkZSB0aGUgcmFuZ2UgVSswMDIwIHRvIFUrMDA3RSwgdGhlbiBzZXQgdCB0byB0aGUgZW1wdHkgc3RyaW5nXG4gICAgLy8gICAgYW5kIHJldHVybiBmcm9tIHRoZXNlIHN1YnN0ZXBzLlxuICAgIC8vICAgIFRPRE9cbiAgICBjb25zdCB0ID0gb3B0aW9ucy50eXBlXG5cbiAgICAvLyAgICAyLiBDb252ZXJ0IGV2ZXJ5IGNoYXJhY3RlciBpbiB0IHRvIEFTQ0lJIGxvd2VyY2FzZS5cbiAgICAvLyAgICBUT0RPXG5cbiAgICAvLyAgICAzLiBJZiB0aGUgbGFzdE1vZGlmaWVkIG1lbWJlciBpcyBwcm92aWRlZCwgbGV0IGQgYmUgc2V0IHRvIHRoZVxuICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAvLyAgICBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcmVwcmVzZW50ZWQgYXMgdGhlIG51bWJlciBvZiBtaWxsaXNlY29uZHMgc2luY2VcbiAgICAvLyAgICB0aGUgVW5peCBFcG9jaCAod2hpY2ggaXMgdGhlIGVxdWl2YWxlbnQgb2YgRGF0ZS5ub3coKSBbRUNNQS0yNjJdKS5cbiAgICBjb25zdCBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWQgPz8gRGF0ZS5ub3coKVxuXG4gICAgLy8gNC4gUmV0dXJuIGEgbmV3IEZpbGUgb2JqZWN0IEYgc3VjaCB0aGF0OlxuICAgIC8vIEYgcmVmZXJzIHRvIHRoZSBieXRlcyBieXRlIHNlcXVlbmNlLlxuICAgIC8vIEYuc2l6ZSBpcyBzZXQgdG8gdGhlIG51bWJlciBvZiB0b3RhbCBieXRlcyBpbiBieXRlcy5cbiAgICAvLyBGLm5hbWUgaXMgc2V0IHRvIG4uXG4gICAgLy8gRi50eXBlIGlzIHNldCB0byB0LlxuICAgIC8vIEYubGFzdE1vZGlmaWVkIGlzIHNldCB0byBkLlxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgYmxvYkxpa2UsXG4gICAgICBuYW1lOiBuLFxuICAgICAgdHlwZTogdCxcbiAgICAgIGxhc3RNb2RpZmllZDogZFxuICAgIH1cbiAgfVxuXG4gIHN0cmVhbSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zdHJlYW0oLi4uYXJncylcbiAgfVxuXG4gIGFycmF5QnVmZmVyICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLmFycmF5QnVmZmVyKC4uLmFyZ3MpXG4gIH1cblxuICBzbGljZSAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zbGljZSguLi5hcmdzKVxuICB9XG5cbiAgdGV4dCAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50ZXh0KC4uLmFyZ3MpXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNpemVcbiAgfVxuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudHlwZVxuICB9XG5cbiAgZ2V0IG5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5uYW1lXG4gIH1cblxuICBnZXQgbGFzdE1vZGlmaWVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgW1N5bWJvbC50b1N0cmluZ1RhZ10gKCkge1xuICAgIHJldHVybiAnRmlsZSdcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnRmlsZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RNb2RpZmllZDoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYiA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoQmxvYilcblxud2ViaWRsLmNvbnZlcnRlcnMuQmxvYlBhcnQgPSBmdW5jdGlvbiAoViwgb3B0cykge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcpIHtcbiAgICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8XG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpXG4gICAgKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYsIG9wdHMpXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWLCBvcHRzKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8QmxvYlBhcnQ+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0XG4pXG5cbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNkZm4tRmlsZVByb3BlcnR5QmFnXG53ZWJpZGwuY29udmVydGVycy5GaWxlUHJvcGVydHlCYWcgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsYXN0TW9kaWZpZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIERhdGUubm93KClcbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0eXBlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlbmRpbmdzJyxcbiAgICBjb252ZXJ0ZXI6ICh2YWx1ZSkgPT4ge1xuICAgICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodmFsdWUpXG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvTG93ZXJDYXNlKClcblxuICAgICAgaWYgKHZhbHVlICE9PSAnbmF0aXZlJykge1xuICAgICAgICB2YWx1ZSA9ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlXG4gICAgfSxcbiAgICBkZWZhdWx0VmFsdWU6ICd0cmFuc3BhcmVudCdcbiAgfVxuXSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9GaWxlQVBJLyNwcm9jZXNzLWJsb2ItcGFydHNcbiAqIEBwYXJhbSB7KE5vZGVKUy5UeXBlZEFycmF5fEJsb2J8c3RyaW5nKVtdfSBwYXJ0c1xuICogQHBhcmFtIHt7IHR5cGU6IHN0cmluZywgZW5kaW5nczogc3RyaW5nIH19IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gcHJvY2Vzc0Jsb2JQYXJ0cyAocGFydHMsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IHNlcXVlbmNlIG9mIGJ5dGVzLlxuICAvKiogQHR5cGUge05vZGVKUy5UeXBlZEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyAyLiBGb3IgZWFjaCBlbGVtZW50IGluIHBhcnRzOlxuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgcGFydHMpIHtcbiAgICAvLyAxLiBJZiBlbGVtZW50IGlzIGEgVVNWU3RyaW5nLCBydW4gdGhlIGZvbGxvd2luZyBzdWJzdGVwczpcbiAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyAxLiBMZXQgcyBiZSBlbGVtZW50LlxuICAgICAgbGV0IHMgPSBlbGVtZW50XG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmRpbmdzIG1lbWJlciBvZiBvcHRpb25zIGlzIFwibmF0aXZlXCIsIHNldCBzXG4gICAgICAvLyAgICB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbGluZSBlbmRpbmdzIHRvIG5hdGl2ZVxuICAgICAgLy8gICAgb2YgZWxlbWVudC5cbiAgICAgIGlmIChvcHRpb25zLmVuZGluZ3MgPT09ICduYXRpdmUnKSB7XG4gICAgICAgIHMgPSBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUocylcbiAgICAgIH1cblxuICAgICAgLy8gMy4gQXBwZW5kIHRoZSByZXN1bHQgb2YgVVRGLTggZW5jb2RpbmcgcyB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZW5jb2Rlci5lbmNvZGUocykpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoZWxlbWVudCkgfHxcbiAgICAgIHR5cGVzLmlzVHlwZWRBcnJheShlbGVtZW50KVxuICAgICkge1xuICAgICAgLy8gMi4gSWYgZWxlbWVudCBpcyBhIEJ1ZmZlclNvdXJjZSwgZ2V0IGEgY29weSBvZiB0aGVcbiAgICAgIC8vICAgIGJ5dGVzIGhlbGQgYnkgdGhlIGJ1ZmZlciBzb3VyY2UsIGFuZCBhcHBlbmQgdGhvc2VcbiAgICAgIC8vICAgIGJ5dGVzIHRvIGJ5dGVzLlxuICAgICAgaWYgKCFlbGVtZW50LmJ1ZmZlcikgeyAvLyBBcnJheUJ1ZmZlclxuICAgICAgICBieXRlcy5wdXNoKG5ldyBVaW50OEFycmF5KGVsZW1lbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgICBuZXcgVWludDhBcnJheShlbGVtZW50LmJ1ZmZlciwgZWxlbWVudC5ieXRlT2Zmc2V0LCBlbGVtZW50LmJ5dGVMZW5ndGgpXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZWxlbWVudCkpIHtcbiAgICAgIC8vIDMuIElmIGVsZW1lbnQgaXMgYSBCbG9iLCBhcHBlbmQgdGhlIGJ5dGVzIGl0IHJlcHJlc2VudHNcbiAgICAgIC8vICAgIHRvIGJ5dGVzLlxuICAgICAgYnl0ZXMucHVzaChlbGVtZW50KVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBieXRlcy5cbiAgcmV0dXJuIGJ5dGVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jY29udmVydC1saW5lLWVuZGluZ3MtdG8tbmF0aXZlXG4gKiBAcGFyYW0ge3N0cmluZ30gc1xuICovXG5mdW5jdGlvbiBjb252ZXJ0TGluZUVuZGluZ3NOYXRpdmUgKHMpIHtcbiAgLy8gMS4gTGV0IG5hdGl2ZSBsaW5lIGVuZGluZyBiZSBiZSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGxldCBuYXRpdmVMaW5lRW5kaW5nID0gJ1xcbidcblxuICAvLyAyLiBJZiB0aGUgdW5kZXJseWluZyBwbGF0Zm9ybVx1MjAxOXMgY29udmVudGlvbnMgYXJlIHRvXG4gIC8vICAgIHJlcHJlc2VudCBuZXdsaW5lcyBhcyBhIGNhcnJpYWdlIHJldHVybiBhbmQgbGluZSBmZWVkXG4gIC8vICAgIHNlcXVlbmNlLCBzZXQgbmF0aXZlIGxpbmUgZW5kaW5nIHRvIHRoZSBjb2RlIHBvaW50XG4gIC8vICAgIFUrMDAwRCBDUiBmb2xsb3dlZCBieSB0aGUgY29kZSBwb2ludCBVKzAwMEEgTEYuXG4gIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgbmF0aXZlTGluZUVuZGluZyA9ICdcXHJcXG4nXG4gIH1cblxuICByZXR1cm4gcy5yZXBsYWNlKC9cXHI/XFxuL2csIG5hdGl2ZUxpbmVFbmRpbmcpXG59XG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAoTmF0aXZlRmlsZSAmJiBvYmplY3QgaW5zdGFuY2VvZiBOYXRpdmVGaWxlKSB8fFxuICAgIG9iamVjdCBpbnN0YW5jZW9mIEZpbGUgfHwgKFxuICAgICAgb2JqZWN0ICYmXG4gICAgICAodHlwZW9mIG9iamVjdC5zdHJlYW0gPT09ICdmdW5jdGlvbicgfHxcbiAgICAgIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpICYmXG4gICAgICBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ0ZpbGUnXG4gICAgKVxuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgaXNCbG9iTGlrZSwgdG9VU1ZTdHJpbmcsIG1ha2VJdGVyYXRvciB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBGaWxlOiBVbmRpY2lGaWxlLCBGaWxlTGlrZSwgaXNGaWxlTGlrZSB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRmlsZSddfSAqL1xuY29uc3QgRmlsZSA9IE5hdGl2ZUZpbGUgPz8gVW5kaWNpRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgaWYgKGZvcm0gIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgICAgcHJlZml4OiAnRm9ybURhdGEgY29uc3RydWN0b3InLFxuICAgICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgICB0eXBlczogWyd1bmRlZmluZWQnXVxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0ZV0gPSBbXVxuICB9XG5cbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGb3JtRGF0YS5hcHBlbmQnIH0pXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2FwcGVuZCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aFxuICAgIC8vIG5hbWUsIHZhbHVlLCBhbmQgZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gQXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdLnB1c2goZW50cnkpXG4gIH1cblxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiBudWxsLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggPT09IC0xKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWUgb2YgdGhlIGZpcnN0IGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBmcm9tXG4gICAgLy8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdW2lkeF0udmFsdWVcbiAgfVxuXG4gIGdldEFsbCAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmdldEFsbCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIHRoZXJlIGlzIG5vIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LFxuICAgIC8vIHRoZW4gcmV0dXJuIHRoZSBlbXB0eSBsaXN0LlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBlbnRyaWVzIHdob3NlIG5hbWUgaXMgbmFtZSwgaW4gb3JkZXIsXG4gICAgLy8gZnJvbSB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV1cbiAgICAgIC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgICAgLm1hcCgoZW50cnkpID0+IGVudHJ5LnZhbHVlKVxuICB9XG5cbiAgaGFzIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuaGFzJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdGb3JtRGF0YS5zZXQnIH0pXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgICAgOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodmFsdWUpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHRvVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGggbmFtZSwgdmFsdWUsIGFuZFxuICAgIC8vIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBlbnRyaWVzIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Qgd2hvc2UgbmFtZSBpcyBuYW1lLCB0aGVuXG4gICAgLy8gcmVwbGFjZSB0aGUgZmlyc3Qgc3VjaCBlbnRyeSB3aXRoIGVudHJ5IGFuZCByZW1vdmUgdGhlIG90aGVycy5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgdGhpc1trU3RhdGVdID0gW1xuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoMCwgaWR4KSxcbiAgICAgICAgZW50cnksXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZShpZHggKyAxKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICAgICAgXVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIGFwcGVuZCBlbnRyeSB0byB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgICAgdGhpc1trU3RhdGVdLnB1c2goZW50cnkpXG4gICAgfVxuICB9XG5cbiAgZW50cmllcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gdGhpc1trU3RhdGVdLm1hcChwYWlyID0+IFtwYWlyLm5hbWUsIHBhaXIudmFsdWVdKSxcbiAgICAgICdGb3JtRGF0YScsXG4gICAgICAna2V5K3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSdcbiAgICApXG4gIH1cblxuICB2YWx1ZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0geyh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZywgc2VsZjogRm9ybURhdGEpID0+IHZvaWR9IGNhbGxiYWNrRm5cbiAgICogQHBhcmFtIHt1bmtub3dufSB0aGlzQXJnXG4gICAqL1xuICBmb3JFYWNoIChjYWxsYmFja0ZuLCB0aGlzQXJnID0gZ2xvYmFsVGhpcykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmZvckVhY2gnIH0pXG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrRm4gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ2ZvckVhY2gnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdGdW5jdGlvbicuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzKSB7XG4gICAgICBjYWxsYmFja0ZuLmFwcGx5KHRoaXNBcmcsIFt2YWx1ZSwga2V5LCB0aGlzXSlcbiAgICB9XG4gIH1cbn1cblxuRm9ybURhdGEucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBGb3JtRGF0YS5wcm90b3R5cGUuZW50cmllc1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gXCJUbyBjb252ZXJ0IGEgc3RyaW5nIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLCByZXBsYWNlIGFueSBzdXJyb2dhdGVzXG4gIC8vICB3aXRoIFUrRkZGRC5cIlxuICAvLyBzZWU6IGh0dHBzOi8vbm9kZWpzLm9yZy9kaXN0L2xhdGVzdC12MTgueC9kb2NzL2FwaS9idWZmZXIuaHRtbCNidWZ0b3N0cmluZ2VuY29kaW5nLXN0YXJ0LWVuZFxuICBuYW1lID0gQnVmZmVyLmZyb20obmFtZSkudG9TdHJpbmcoJ3V0ZjgnKVxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgdmFsdWUgPSBCdWZmZXIuZnJvbSh2YWx1ZSkudG9TdHJpbmcoJ3V0ZjgnKVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IChOYXRpdmVGaWxlICYmIHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZSkgfHwgdmFsdWUgaW5zdGFuY2VvZiBVbmRpY2lGaWxlXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgICAgIDogbmV3IEZpbGVMaWtlKHZhbHVlLCBmaWxlbmFtZSwgb3B0aW9ucylcbiAgICB9XG4gIH1cblxuICAvLyA0LiBSZXR1cm4gYW4gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGFuZCB3aG9zZSB2YWx1ZSBpcyB2YWx1ZS5cbiAgcmV0dXJuIHsgbmFtZSwgdmFsdWUgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgRm9ybURhdGEgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBCdXNib3kgPSByZXF1aXJlKCdAZmFzdGlmeS9idXNib3knKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCbG9iTGlrZSxcbiAgaXNSZWFkYWJsZVN0cmVhbUxpa2UsXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgZnVsbHlSZWFkQm9keVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEZvcm1EYXRhIH0gPSByZXF1aXJlKCcuL2Zvcm1kYXRhJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uLCBzdHJ1Y3R1cmVkQ2xvbmUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgaXNFcnJvcmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBpc1VpbnQ4QXJyYXksIGlzQXJyYXlCdWZmZXIgfSA9IHJlcXVpcmUoJ3V0aWwvdHlwZXMnKVxuY29uc3QgeyBGaWxlOiBVbmRpY2lGaWxlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5cbmxldCByYW5kb21cbnRyeSB7XG4gIGNvbnN0IGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbiAgcmFuZG9tID0gKG1heCkgPT4gY3J5cHRvLnJhbmRvbUludCgwLCBtYXgpXG59IGNhdGNoIHtcbiAgcmFuZG9tID0gKG1heCkgPT4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbShtYXgpKVxufVxuXG5sZXQgUmVhZGFibGVTdHJlYW0gPSBnbG9iYWxUaGlzLlJlYWRhYmxlU3RyZWFtXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRmlsZSddfSAqL1xuY29uc3QgRmlsZSA9IE5hdGl2ZUZpbGUgPz8gVW5kaWNpRmlsZVxuY29uc3QgdGV4dEVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuY29uc3QgdGV4dERlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5aW5pdC1leHRyYWN0XG5mdW5jdGlvbiBleHRyYWN0Qm9keSAob2JqZWN0LCBrZWVwYWxpdmUgPSBmYWxzZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIC8vIDEuIExldCBzdHJlYW0gYmUgbnVsbC5cbiAgbGV0IHN0cmVhbSA9IG51bGxcblxuICAvLyAyLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW4gc2V0IHN0cmVhbSB0byBvYmplY3QuXG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIHN0cmVhbSA9IG9iamVjdFxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2Uob2JqZWN0KSkge1xuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgb2JqZWN0IGlzIGEgQmxvYiBvYmplY3QsIHNldCBzdHJlYW0gdG8gdGhlXG4gICAgLy8gICAgcmVzdWx0IG9mIHJ1bm5pbmcgb2JqZWN0XHUyMDE5cyBnZXQgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG9iamVjdC5zdHJlYW0oKVxuICB9IGVsc2Uge1xuICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHN0cmVhbSB0byBhIG5ldyBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIGFuZCBzZXRcbiAgICAvLyAgICB1cCBzdHJlYW0uXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKFxuICAgICAgICAgIHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcbiAgICAgICAgKVxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiByZWFkYWJsZVN0cmVhbUNsb3NlKGNvbnRyb2xsZXIpKVxuICAgICAgfSxcbiAgICAgIHN0YXJ0ICgpIHt9LFxuICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIEFzc2VydDogc3RyZWFtIGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LlxuICBhc3NlcnQoaXNSZWFkYWJsZVN0cmVhbUxpa2Uoc3RyZWFtKSlcblxuICAvLyA2LiBMZXQgYWN0aW9uIGJlIG51bGwuXG4gIGxldCBhY3Rpb24gPSBudWxsXG5cbiAgLy8gNy4gTGV0IHNvdXJjZSBiZSBudWxsLlxuICBsZXQgc291cmNlID0gbnVsbFxuXG4gIC8vIDguIExldCBsZW5ndGggYmUgbnVsbC5cbiAgbGV0IGxlbmd0aCA9IG51bGxcblxuICAvLyA5LiBMZXQgdHlwZSBiZSBudWxsLlxuICBsZXQgdHlwZSA9IG51bGxcblxuICAvLyAxMC4gU3dpdGNoIG9uIG9iamVjdDpcbiAgaWYgKHR5cGVvZiBvYmplY3QgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgVVRGLTggZW5jb2Rpbmcgb2Ygb2JqZWN0LlxuICAgIC8vIE5vdGU6IHNldHRpbmcgc291cmNlIHRvIGEgVWludDhBcnJheSBoZXJlIGJyZWFrcyBzb21lIG1vY2tpbmcgYXNzdW1wdGlvbnMuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgdGV4dC9wbGFpbjtjaGFyc2V0PVVURi04YC5cbiAgICB0eXBlID0gJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICAvLyBVUkxTZWFyY2hQYXJhbXNcblxuICAgIC8vIHNwZWMgc2F5cyB0byBydW4gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIG9uIGJvZHkubGlzdFxuICAgIC8vIHRoaXMgaXMgaW1wbGVtZW50ZWQgaW4gTm9kZS5qcyBhcyBhcGFydCBvZiBhbiBVUkxTZWFyY2hQYXJhbXMgaW5zdGFuY2UgdG9TdHJpbmcgbWV0aG9kXG4gICAgLy8gU2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9lNDZjNjgwYmYyYjIxMWJiZDUyY2Y5NTljYTE3ZWU5OGM3ZjY1N2Y1L2xpYi9pbnRlcm5hbC91cmwuanMjTDQ5MFxuICAgIC8vIGFuZCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvYmxvYi9lNDZjNjgwYmYyYjIxMWJiZDUyY2Y5NTljYTE3ZWU5OGM3ZjY1N2Y1L2xpYi9pbnRlcm5hbC91cmwuanMjTDExMDBcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZSBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgc2VyaWFsaXplciB3aXRoIG9iamVjdFx1MjAxOXMgbGlzdC5cbiAgICBzb3VyY2UgPSBvYmplY3QudG9TdHJpbmcoKVxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04YC5cbiAgICB0eXBlID0gJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBhIGNvcHkgb2YgdGhlIGJ5dGVzIGhlbGQgYnkgb2JqZWN0LlxuICAgIHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KG9iamVjdC5zbGljZSgpKVxuICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyVmlld1xuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBhIGNvcHkgb2YgdGhlIGJ5dGVzIGhlbGQgYnkgb2JqZWN0LlxuICAgIHNvdXJjZSA9IG5ldyBVaW50OEFycmF5KG9iamVjdC5idWZmZXIuc2xpY2Uob2JqZWN0LmJ5dGVPZmZzZXQsIG9iamVjdC5ieXRlT2Zmc2V0ICsgb2JqZWN0LmJ5dGVMZW5ndGgpKVxuICB9IGVsc2UgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2Uob2JqZWN0KSkge1xuICAgIGNvbnN0IGJvdW5kYXJ5ID0gYC0tLS1mb3JtZGF0YS11bmRpY2ktMCR7YCR7cmFuZG9tKDFlMTEpfWAucGFkU3RhcnQoMTEsICcwJyl9YFxuICAgIGNvbnN0IHByZWZpeCA9IGAtLSR7Ym91bmRhcnl9XFxyXFxuQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhYFxuXG4gICAgLyohIGZvcm1kYXRhLXBvbHlmaWxsLiBNSVQgTGljZW5zZS4gSmltbXkgV1x1MDBFNHJ0aW5nIDxodHRwczovL2ppbW15LndhcnRpbmcuc2Uvb3BlbnNvdXJjZT4gKi9cbiAgICBjb25zdCBlc2NhcGUgPSAoc3RyKSA9PlxuICAgICAgc3RyLnJlcGxhY2UoL1xcbi9nLCAnJTBBJykucmVwbGFjZSgvXFxyL2csICclMEQnKS5yZXBsYWNlKC9cIi9nLCAnJTIyJylcbiAgICBjb25zdCBub3JtYWxpemVMaW5lZmVlZHMgPSAodmFsdWUpID0+IHZhbHVlLnJlcGxhY2UoL1xccj9cXG58XFxyL2csICdcXHJcXG4nKVxuXG4gICAgLy8gU2V0IGFjdGlvbiB0byB0aGlzIHN0ZXA6IHJ1biB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YVxuICAgIC8vIGVuY29kaW5nIGFsZ29yaXRobSwgd2l0aCBvYmplY3RcdTIwMTlzIGVudHJ5IGxpc3QgYW5kIFVURi04LlxuICAgIC8vIC0gVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGJvZHkgaXMgaW1tdXRhYmxlIGFuZCBjYW4ndCBiZSBjaGFuZ2VkIGFmdGVyd29yZHNcbiAgICAvLyAtIFRoYXQgdGhlIGNvbnRlbnQtbGVuZ3RoIGlzIGNhbGN1bGF0ZWQgaW4gYWR2YW5jZS5cbiAgICAvLyAtIEFuZCB0aGF0IGFsbCBwYXJ0cyBhcmUgcHJlLWVuY29kZWQgYW5kIHJlYWR5IHRvIGJlIHNlbnQuXG5cbiAgICBjb25zdCBibG9iUGFydHMgPSBbXVxuICAgIGNvbnN0IHJuID0gbmV3IFVpbnQ4QXJyYXkoWzEzLCAxMF0pIC8vICdcXHJcXG4nXG4gICAgbGVuZ3RoID0gMFxuICAgIGxldCBoYXNVbmtub3duU2l6ZVZhbHVlID0gZmFsc2VcblxuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBvYmplY3QpIHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKHByZWZpeCArXG4gICAgICAgICAgYDsgbmFtZT1cIiR7ZXNjYXBlKG5vcm1hbGl6ZUxpbmVmZWVkcyhuYW1lKSl9XCJgICtcbiAgICAgICAgICBgXFxyXFxuXFxyXFxuJHtub3JtYWxpemVMaW5lZmVlZHModmFsdWUpfVxcclxcbmApXG4gICAgICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgICAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYCR7cHJlZml4fTsgbmFtZT1cIiR7ZXNjYXBlKG5vcm1hbGl6ZUxpbmVmZWVkcyhuYW1lKSl9XCJgICtcbiAgICAgICAgICAodmFsdWUubmFtZSA/IGA7IGZpbGVuYW1lPVwiJHtlc2NhcGUodmFsdWUubmFtZSl9XCJgIDogJycpICsgJ1xcclxcbicgK1xuICAgICAgICAgIGBDb250ZW50LVR5cGU6ICR7XG4gICAgICAgICAgICB2YWx1ZS50eXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nXG4gICAgICAgICAgfVxcclxcblxcclxcbmApXG4gICAgICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rLCB2YWx1ZSwgcm4pXG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUuc2l6ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aCArIHZhbHVlLnNpemUgKyBybi5ieXRlTGVuZ3RoXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGFzVW5rbm93blNpemVWYWx1ZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAtLSR7Ym91bmRhcnl9LS1gKVxuICAgIGJsb2JQYXJ0cy5wdXNoKGNodW5rKVxuICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgaWYgKGhhc1Vua25vd25TaXplVmFsdWUpIHtcbiAgICAgIGxlbmd0aCA9IG51bGxcbiAgICB9XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIGFjdGlvbiA9IGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgZm9yIChjb25zdCBwYXJ0IG9mIGJsb2JQYXJ0cykge1xuICAgICAgICBpZiAocGFydC5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHBhcnQuc3RyZWFtKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB5aWVsZCBwYXJ0XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdHlwZSB0byBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9YCxcbiAgICAvLyBmb2xsb3dlZCBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBib3VuZGFyeSBzdHJpbmcgZ2VuZXJhdGVkXG4gICAgLy8gYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgZW5jb2RpbmcgYWxnb3JpdGhtLlxuICAgIHR5cGUgPSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JyArIGJvdW5kYXJ5XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gQmxvYlxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICAvLyBTZXQgbGVuZ3RoIHRvIG9iamVjdFx1MjAxOXMgc2l6ZS5cbiAgICBsZW5ndGggPSBvYmplY3Quc2l6ZVxuXG4gICAgLy8gSWYgb2JqZWN0XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSBpcyBub3QgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIHNldFxuICAgIC8vIHR5cGUgdG8gaXRzIHZhbHVlLlxuICAgIGlmIChvYmplY3QudHlwZSkge1xuICAgICAgdHlwZSA9IG9iamVjdC50eXBlXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGVvZiBvYmplY3RbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gSWYga2VlcGFsaXZlIGlzIHRydWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGtlZXBhbGl2ZSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigna2VlcGFsaXZlJylcbiAgICB9XG5cbiAgICAvLyBJZiBvYmplY3QgaXMgZGlzdHVyYmVkIG9yIGxvY2tlZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpIHx8IG9iamVjdC5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdSZXNwb25zZSBib2R5IG9iamVjdCBzaG91bGQgbm90IGJlIGRpc3R1cmJlZCBvciBsb2NrZWQnXG4gICAgICApXG4gICAgfVxuXG4gICAgc3RyZWFtID1cbiAgICAgIG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtID8gb2JqZWN0IDogUmVhZGFibGVTdHJlYW1Gcm9tKG9iamVjdClcbiAgfVxuXG4gIC8vIDExLiBJZiBzb3VyY2UgaXMgYSBieXRlIHNlcXVlbmNlLCB0aGVuIHNldCBhY3Rpb24gdG8gYVxuICAvLyBzdGVwIHRoYXQgcmV0dXJucyBzb3VyY2UgYW5kIGxlbmd0aCB0byBzb3VyY2VcdTIwMTlzIGxlbmd0aC5cbiAgaWYgKHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnIHx8IHV0aWwuaXNCdWZmZXIoc291cmNlKSkge1xuICAgIGxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHNvdXJjZSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBhY3Rpb24gaXMgbm9uLW51bGwsIHRoZW4gcnVuIHRoZXNlIHN0ZXBzIGluIGluIHBhcmFsbGVsOlxuICBpZiAoYWN0aW9uICE9IG51bGwpIHtcbiAgICAvLyBSdW4gYWN0aW9uLlxuICAgIGxldCBpdGVyYXRvclxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gYWN0aW9uKG9iamVjdClbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgdmFsdWUsIGRvbmUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIFdoZW4gcnVubmluZyBhY3Rpb24gaXMgZG9uZSwgY2xvc2Ugc3RyZWFtLlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gV2hlbmV2ZXIgb25lIG9yIG1vcmUgYnl0ZXMgYXJlIGF2YWlsYWJsZSBhbmQgc3RyZWFtIGlzIG5vdCBlcnJvcmVkLFxuICAgICAgICAgIC8vIGVucXVldWUgYSBVaW50OEFycmF5IHdyYXBwaW5nIGFuIEFycmF5QnVmZmVyIGNvbnRhaW5pbmcgdGhlIGF2YWlsYWJsZVxuICAgICAgICAgIC8vIGJ5dGVzIGludG8gc3RyZWFtLlxuICAgICAgICAgIGlmICghaXNFcnJvcmVkKHN0cmVhbSkpIHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheSh2YWx1ZSkpXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9LFxuICAgICAgdHlwZTogdW5kZWZpbmVkXG4gICAgfSlcbiAgfVxuXG4gIC8vIDEzLiBMZXQgYm9keSBiZSBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIHN0cmVhbSwgc291cmNlIGlzIHNvdXJjZSxcbiAgLy8gYW5kIGxlbmd0aCBpcyBsZW5ndGguXG4gIGNvbnN0IGJvZHkgPSB7IHN0cmVhbSwgc291cmNlLCBsZW5ndGggfVxuXG4gIC8vIDE0LiBSZXR1cm4gKGJvZHksIHR5cGUpLlxuICByZXR1cm4gW2JvZHksIHR5cGVdXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdC1zYWZlbHktZXh0cmFjdFxuZnVuY3Rpb24gc2FmZWx5RXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIC8vIFRvIHNhZmVseSBleHRyYWN0IGEgYm9keSBhbmQgYSBgQ29udGVudC1UeXBlYCB2YWx1ZSBmcm9tXG4gIC8vIGEgYnl0ZSBzZXF1ZW5jZSBvciBCb2R5SW5pdCBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuOlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBBc3NlcnQ6IG9iamVjdCBpcyBuZWl0aGVyIGRpc3R1cmJlZCBub3IgbG9ja2VkLlxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCF1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCksICdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIW9iamVjdC5sb2NrZWQsICdUaGUgc3RyZWFtIGlzIGxvY2tlZC4nKVxuICB9XG5cbiAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHRzIG9mIGV4dHJhY3Rpbmcgb2JqZWN0LlxuICByZXR1cm4gZXh0cmFjdEJvZHkob2JqZWN0LCBrZWVwYWxpdmUpXG59XG5cbmZ1bmN0aW9uIGNsb25lQm9keSAoYm9keSkge1xuICAvLyBUbyBjbG9uZSBhIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY2xvbmVcblxuICAvLyAxLiBMZXQgXHUwMEFCIG91dDEsIG91dDIgXHUwMEJCIGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHlcdTIwMTlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcbiAgY29uc3Qgb3V0MkNsb25lID0gc3RydWN0dXJlZENsb25lKG91dDIsIHsgdHJhbnNmZXI6IFtvdXQyXSB9KVxuICAvLyBUaGlzLCBmb3Igd2hhdGV2ZXIgcmVhc29ucywgdW5yZWZzIG91dDJDbG9uZSB3aGljaCBhbGxvd3NcbiAgLy8gdGhlIHByb2Nlc3MgdG8gZXhpdCBieSBpdHNlbGYuXG4gIGNvbnN0IFssIGZpbmFsQ2xvbmVdID0gb3V0MkNsb25lLnRlZSgpXG5cbiAgLy8gMi4gU2V0IGJvZHlcdTIwMTlzIHN0cmVhbSB0byBvdXQxLlxuICBib2R5LnN0cmVhbSA9IG91dDFcblxuICAvLyAzLiBSZXR1cm4gYSBib2R5IHdob3NlIHN0cmVhbSBpcyBvdXQyIGFuZCBvdGhlciBtZW1iZXJzIGFyZSBjb3BpZWQgZnJvbSBib2R5LlxuICByZXR1cm4ge1xuICAgIHN0cmVhbTogZmluYWxDbG9uZSxcbiAgICBsZW5ndGg6IGJvZHkubGVuZ3RoLFxuICAgIHNvdXJjZTogYm9keS5zb3VyY2VcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiAqIGNvbnN1bWVCb2R5IChib2R5KSB7XG4gIGlmIChib2R5KSB7XG4gICAgaWYgKGlzVWludDhBcnJheShib2R5KSkge1xuICAgICAgeWllbGQgYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBzdHJlYW0gPSBib2R5LnN0cmVhbVxuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChzdHJlYW0pKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAgIH1cblxuICAgICAgaWYgKHN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgICAgIH1cblxuICAgICAgLy8gQ29tcGF0LlxuICAgICAgc3RyZWFtW2tCb2R5VXNlZF0gPSB0cnVlXG5cbiAgICAgIHlpZWxkICogc3RyZWFtXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc1x1MjAxOXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIGxldCBtaW1lVHlwZSA9IGJvZHlNaW1lVHlwZSh0aGlzKVxuXG4gICAgICAgIGlmIChtaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnl0ZXMpLmJ1ZmZlclxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIHRleHQgKCkge1xuICAgICAgLy8gVGhlIHRleHQoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIFVURi04IGRlY29kZS5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgdXRmOERlY29kZUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAganNvbiAoKSB7XG4gICAgICAvLyBUaGUganNvbigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgcGFyc2UgSlNPTiBmcm9tIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBpbnN0YW5jZSlcblxuICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpXG5cbiAgICAgIC8vIElmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLCB0aGVuOlxuICAgICAgaWYgKC9tdWx0aXBhcnRcXC9mb3JtLWRhdGEvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzLmhlYWRlcnMpIGhlYWRlcnNba2V5LnRvTG93ZXJDYXNlKCldID0gdmFsdWVcblxuICAgICAgICBjb25zdCByZXNwb25zZUZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcblxuICAgICAgICBsZXQgYnVzYm95XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBidXNib3kgPSBuZXcgQnVzYm95KHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBwcmVzZXJ2ZVBhdGg6IHRydWVcbiAgICAgICAgICB9KVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGAke2Vycn1gLCAnQWJvcnRFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICBidXNib3kub24oJ2ZpZWxkJywgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgICAgIGJ1c2JveS5vbignZmlsZScsIChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUsIGVuY29kaW5nLCBtaW1lVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNodW5rcyA9IFtdXG5cbiAgICAgICAgICBpZiAoZW5jb2RpbmcgPT09ICdiYXNlNjQnIHx8IGVuY29kaW5nLnRvTG93ZXJDYXNlKCkgPT09ICdiYXNlNjQnKSB7XG4gICAgICAgICAgICBsZXQgYmFzZTY0Y2h1bmsgPSAnJ1xuXG4gICAgICAgICAgICB2YWx1ZS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICAgICAgICBiYXNlNjRjaHVuayArPSBjaHVuay50b1N0cmluZygpLnJlcGxhY2UoL1tcXHJcXG5dL2dtLCAnJylcblxuICAgICAgICAgICAgICBjb25zdCBlbmQgPSBiYXNlNjRjaHVuay5sZW5ndGggLSBiYXNlNjRjaHVuay5sZW5ndGggJSA0XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKEJ1ZmZlci5mcm9tKGJhc2U2NGNodW5rLnNsaWNlKDAsIGVuZCksICdiYXNlNjQnKSlcblxuICAgICAgICAgICAgICBiYXNlNjRjaHVuayA9IGJhc2U2NGNodW5rLnNsaWNlKGVuZClcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB2YWx1ZS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuaywgJ2Jhc2U2NCcpKVxuICAgICAgICAgICAgICByZXNwb25zZUZvcm1EYXRhLmFwcGVuZChuYW1lLCBuZXcgRmlsZShjaHVua3MsIGZpbGVuYW1lLCB7IHR5cGU6IG1pbWVUeXBlIH0pKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN0IGJ1c2JveVJlc29sdmUgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgYnVzYm95Lm9uKCdmaW5pc2gnLCByZXNvbHZlKVxuICAgICAgICAgIGJ1c2JveS5vbignZXJyb3InLCAoZXJyKSA9PiByZWplY3QobmV3IFR5cGVFcnJvcihlcnIpKSlcbiAgICAgICAgfSlcblxuICAgICAgICBpZiAodGhpcy5ib2R5ICE9PSBudWxsKSBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkgYnVzYm95LndyaXRlKGNodW5rKVxuICAgICAgICBidXNib3kuZW5kKClcbiAgICAgICAgYXdhaXQgYnVzYm95UmVzb2x2ZVxuXG4gICAgICAgIHJldHVybiByZXNwb25zZUZvcm1EYXRhXG4gICAgICB9IGVsc2UgaWYgKC9hcHBsaWNhdGlvblxcL3gtd3d3LWZvcm0tdXJsZW5jb2RlZC8udGVzdChjb250ZW50VHlwZSkpIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBpZiBtaW1lVHlwZVx1MjAxOXMgZXNzZW5jZSBpcyBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiLCB0aGVuOlxuXG4gICAgICAgIC8vIDEuIExldCBlbnRyaWVzIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBieXRlcy5cbiAgICAgICAgbGV0IGVudHJpZXNcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBsZXQgdGV4dCA9ICcnXG4gICAgICAgICAgLy8gYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHBhcnNlciB3aWxsIGtlZXAgdGhlIEJPTS5cbiAgICAgICAgICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsZW5jb2RlZC1wYXJzZXJcbiAgICAgICAgICAvLyBOb3RlIHRoYXQgc3RyZWFtaW5nIGRlY29kZXIgaXMgc3RhdGVmdWwgYW5kIGNhbm5vdCBiZSByZXVzZWRcbiAgICAgICAgICBjb25zdCBzdHJlYW1pbmdEZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgaWdub3JlQk9NOiB0cnVlIH0pXG5cbiAgICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNvbnN1bWVCb2R5KHRoaXNba1N0YXRlXS5ib2R5KSkge1xuICAgICAgICAgICAgaWYgKCFpc1VpbnQ4QXJyYXkoY2h1bmspKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIFVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZShjaHVuaywgeyBzdHJlYW06IHRydWUgfSlcbiAgICAgICAgICB9XG4gICAgICAgICAgdGV4dCArPSBzdHJlYW1pbmdEZWNvZGVyLmRlY29kZSgpXG4gICAgICAgICAgZW50cmllcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXModGV4dClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHQ6IFVuY2xlYXIgd2hlbiBuZXcgVVJMU2VhcmNoUGFyYW1zIGNhbiBmYWlsIG9uIGEgc3RyaW5nLlxuICAgICAgICAgIC8vIDIuIElmIGVudHJpZXMgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoKSwgeyBjYXVzZTogZXJyIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBSZXR1cm4gYSBuZXcgRm9ybURhdGEgb2JqZWN0IHdob3NlIGVudHJpZXMgYXJlIGVudHJpZXMuXG4gICAgICAgIGNvbnN0IGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXYWl0IGEgdGljayBiZWZvcmUgY2hlY2tpbmcgaWYgdGhlIHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZC5cbiAgICAgICAgLy8gT3RoZXJ3aXNlLCBhIFR5cGVFcnJvciBjYW4gYmUgdGhyb3duIHdoZW4gYW4gQWJvcnRFcnJvciBzaG91bGQuXG4gICAgICAgIGF3YWl0IFByb21pc2UucmVzb2x2ZSgpXG5cbiAgICAgICAgdGhyb3dJZkFib3J0ZWQodGhpc1trU3RhdGVdKVxuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6IGAke2luc3RhbmNlLm5hbWV9LmZvcm1EYXRhYCxcbiAgICAgICAgICBtZXNzYWdlOiAnQ291bGQgbm90IHBhcnNlIGNvbnRlbnQgYXMgRm9ybURhdGEuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNwZWNDb25zdW1lQm9keSAob2JqZWN0LCBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUsIGluc3RhbmNlKSB7XG4gIHdlYmlkbC5icmFuZENoZWNrKG9iamVjdCwgaW5zdGFuY2UpXG5cbiAgdGhyb3dJZkFib3J0ZWQob2JqZWN0W2tTdGF0ZV0pXG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIHVudXNhYmxlLCB0aGVuIHJldHVybiBhIHByb21pc2UgcmVqZWN0ZWRcbiAgLy8gICAgd2l0aCBhIFR5cGVFcnJvci5cbiAgaWYgKGJvZHlVbnVzYWJsZShvYmplY3Rba1N0YXRlXS5ib2R5KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgaXMgdW51c2FibGUnKVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb21pc2UgYmUgYSBuZXcgcHJvbWlzZS5cbiAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgZ2l2ZW4gZXJyb3IgYmUgdG8gcmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IChlcnJvcikgPT4gcHJvbWlzZS5yZWplY3QoZXJyb3IpXG5cbiAgLy8gNC4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgZGF0YSBiZSB0byByZXNvbHZlXG4gIC8vICAgIHByb21pc2Ugd2l0aCB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gIC8vICAgIHdpdGggZGF0YS4gSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIHRoZW4gcnVuIGVycm9yU3RlcHNcbiAgLy8gICAgd2l0aCB0aGF0IGV4Y2VwdGlvbi5cbiAgY29uc3Qgc3VjY2Vzc1N0ZXBzID0gKGRhdGEpID0+IHtcbiAgICB0cnkge1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKGNvbnZlcnRCeXRlc1RvSlNWYWx1ZShkYXRhKSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvclN0ZXBzKGUpXG4gICAgfVxuICB9XG5cbiAgLy8gNS4gSWYgb2JqZWN0XHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHN1Y2Nlc3NTdGVwcyB3aXRoIGFuXG4gIC8vICAgIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIGlmIChvYmplY3Rba1N0YXRlXS5ib2R5ID09IG51bGwpIHtcbiAgICBzdWNjZXNzU3RlcHMobmV3IFVpbnQ4QXJyYXkoKSlcbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgb2JqZWN0XHUyMDE5cyBib2R5IGdpdmVuIHN1Y2Nlc3NTdGVwcyxcbiAgLy8gICAgZXJyb3JTdGVwcywgYW5kIG9iamVjdFx1MjAxOXMgcmVsZXZhbnQgZ2xvYmFsIG9iamVjdC5cbiAgYXdhaXQgZnVsbHlSZWFkQm9keShvYmplY3Rba1N0YXRlXS5ib2R5LCBzdWNjZXNzU3RlcHMsIGVycm9yU3RlcHMpXG5cbiAgLy8gNy4gUmV0dXJuIHByb21pc2UuXG4gIHJldHVybiBwcm9taXNlLnByb21pc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGJvZHlVbnVzYWJsZSAoYm9keSkge1xuICAvLyBBbiBvYmplY3QgaW5jbHVkaW5nIHRoZSBCb2R5IGludGVyZmFjZSBtaXhpbiBpc1xuICAvLyBzYWlkIHRvIGJlIHVudXNhYmxlIGlmIGl0cyBib2R5IGlzIG5vbi1udWxsIGFuZFxuICAvLyBpdHMgYm9keVx1MjAxOXMgc3RyZWFtIGlzIGRpc3R1cmJlZCBvciBsb2NrZWQuXG4gIHJldHVybiBib2R5ICE9IG51bGwgJiYgKGJvZHkuc3RyZWFtLmxvY2tlZCB8fCB1dGlsLmlzRGlzdHVyYmVkKGJvZHkuc3RyZWFtKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyN1dGYtOC1kZWNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBidWZmZXJcbiAqL1xuZnVuY3Rpb24gdXRmOERlY29kZUJ5dGVzIChidWZmZXIpIHtcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIDEuIExldCBidWZmZXIgYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIHRocmVlIGJ5dGVzIGZyb21cbiAgLy8gICAgaW9RdWV1ZSwgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cblxuICAvLyAyLiBJZiBidWZmZXIgaXMgMHhFRiAweEJCIDB4QkYsIHRoZW4gcmVhZCB0aHJlZVxuICAvLyAgICBieXRlcyBmcm9tIGlvUXVldWUuIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICBpZiAoYnVmZmVyWzBdID09PSAweEVGICYmIGJ1ZmZlclsxXSA9PT0gMHhCQiAmJiBidWZmZXJbMl0gPT09IDB4QkYpIHtcbiAgICBidWZmZXIgPSBidWZmZXIuc3ViYXJyYXkoMylcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIFVURi04XHUyMDE5c1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG4gIGNvbnN0IG91dHB1dCA9IHRleHREZWNvZGVyLmRlY29kZShidWZmZXIpXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cbiAgcmV0dXJuIG91dHB1dFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGJvZHlNaW1lVHlwZSAob2JqZWN0KSB7XG4gIGNvbnN0IHsgaGVhZGVyc0xpc3QgfSA9IG9iamVjdFtrU3RhdGVdXG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVyc0xpc3QuZ2V0KCdjb250ZW50LXR5cGUnKVxuXG4gIGlmIChjb250ZW50VHlwZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIHJldHVybiBwYXJzZU1JTUVUeXBlKGNvbnRlbnRUeXBlKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZXh0cmFjdEJvZHksXG4gIHNhZmVseUV4dHJhY3RCb2R5LFxuICBjbG9uZUJvZHksXG4gIG1peGluQm9keVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtIVFRQMkJ1aWxkUmVxdWVzdCwga0hUVFAyQ29weUhlYWRlcnMsIGtIVFRQMUJ1aWxkUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vLyB0b2tlblJlZ0V4cCBhbmQgaGVhZGVyQ2hhclJlZ2V4IGhhdmUgYmVlbiBsaWZ0ZWQgZnJvbVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvbWFpbi9saWIvX2h0dHBfY29tbW9uLmpzXG5cbi8qKlxuICogVmVyaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gdmFsIGlzIGEgdmFsaWQgSFRUUCB0b2tlblxuICogcGVyIHRoZSBydWxlcyBkZWZpbmVkIGluIFJGQyA3MjMwXG4gKiBTZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICovXG5jb25zdCB0b2tlblJlZ0V4cCA9IC9eW1xcXl9gYS16QS1aXFwtMC05ISMkJSYnKisufH5dKyQvXG5cbi8qKlxuICogTWF0Y2hlcyBpZiB2YWwgY29udGFpbnMgYW4gaW52YWxpZCBmaWVsZC12Y2hhclxuICogIGZpZWxkLXZhbHVlICAgID0gKiggZmllbGQtY29udGVudCAvIG9icy1mb2xkIClcbiAqICBmaWVsZC1jb250ZW50ICA9IGZpZWxkLXZjaGFyIFsgMSooIFNQIC8gSFRBQiApIGZpZWxkLXZjaGFyIF1cbiAqICBmaWVsZC12Y2hhciAgICA9IFZDSEFSIC8gb2JzLXRleHRcbiAqL1xuY29uc3QgaGVhZGVyQ2hhclJlZ2V4ID0gL1teXFx0XFx4MjAtXFx4N2VcXHg4MC1cXHhmZl0vXG5cbi8vIFZlcmlmaWVzIHRoYXQgYSBnaXZlbiBwYXRoIGlzIHZhbGlkIGRvZXMgbm90IGNvbnRhaW4gY29udHJvbCBjaGFycyBcXHgwMCB0byBcXHgyMFxuY29uc3QgaW52YWxpZFBhdGhSZWdleCA9IC9bXlxcdTAwMjEtXFx1MDBmZl0vXG5cbmNvbnN0IGtIYW5kbGVyID0gU3ltYm9sKCdoYW5kbGVyJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuXG5sZXQgZXh0cmFjdEJvZHlcblxudHJ5IHtcbiAgY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG4gIGNoYW5uZWxzLmNyZWF0ZSA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpjcmVhdGUnKVxuICBjaGFubmVscy5ib2R5U2VudCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpib2R5U2VudCcpXG4gIGNoYW5uZWxzLmhlYWRlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6aGVhZGVycycpXG4gIGNoYW5uZWxzLnRyYWlsZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OnRyYWlsZXJzJylcbiAgY2hhbm5lbHMuZXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKVxufSBjYXRjaCB7XG4gIGNoYW5uZWxzLmNyZWF0ZSA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuYm9keVNlbnQgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmhlYWRlcnMgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLnRyYWlsZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5lcnJvciA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbn1cblxuY2xhc3MgUmVxdWVzdCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIHtcbiAgICBwYXRoLFxuICAgIG1ldGhvZCxcbiAgICBib2R5LFxuICAgIGhlYWRlcnMsXG4gICAgcXVlcnksXG4gICAgaWRlbXBvdGVudCxcbiAgICBibG9ja2luZyxcbiAgICB1cGdyYWRlLFxuICAgIGhlYWRlcnNUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIHJlc2V0LFxuICAgIHRocm93T25FcnJvcixcbiAgICBleHBlY3RDb250aW51ZVxuICB9LCBoYW5kbGVyKSB7XG4gICAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdwYXRoIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICBwYXRoWzBdICE9PSAnLycgJiZcbiAgICAgICEocGF0aC5zdGFydHNXaXRoKCdodHRwOi8vJykgfHwgcGF0aC5zdGFydHNXaXRoKCdodHRwczovLycpKSAmJlxuICAgICAgbWV0aG9kICE9PSAnQ09OTkVDVCdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGFuIGFic29sdXRlIFVSTCBvciBzdGFydCB3aXRoIGEgc2xhc2gnKVxuICAgIH0gZWxzZSBpZiAoaW52YWxpZFBhdGhSZWdleC5leGVjKHBhdGgpICE9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVxdWVzdCBwYXRoJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG1ldGhvZCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWV0aG9kIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhtZXRob2QpID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVxdWVzdCBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlICYmIHR5cGVvZiB1cGdyYWRlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1cGdyYWRlIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5XG5cbiAgICAgIGNvbnN0IHJTdGF0ZSA9IHRoaXMuYm9keS5fcmVhZGFibGVTdGF0ZVxuICAgICAgaWYgKCFyU3RhdGUgfHwgIXJTdGF0ZS5hdXRvRGVzdHJveSkge1xuICAgICAgICB0aGlzLmVuZEhhbmRsZXIgPSBmdW5jdGlvbiBhdXRvRGVzdHJveSAoKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHRoaXMpXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5ib2R5Lm9uKCdlbmQnLCB0aGlzLmVuZEhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gZXJyID0+IHtcbiAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLmVycm9yID0gZXJyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keS5vbignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkgfHwgdXRpbC5pc0l0ZXJhYmxlKGJvZHkpIHx8IHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gdXRpbC5idWlsZFVSTChwYXRoLCBxdWVyeSkgOiBwYXRoXG5cbiAgICB0aGlzLm9yaWdpbiA9IG9yaWdpblxuXG4gICAgdGhpcy5pZGVtcG90ZW50ID0gaWRlbXBvdGVudCA9PSBudWxsXG4gICAgICA/IG1ldGhvZCA9PT0gJ0hFQUQnIHx8IG1ldGhvZCA9PT0gJ0dFVCdcbiAgICAgIDogaWRlbXBvdGVudFxuXG4gICAgdGhpcy5ibG9ja2luZyA9IGJsb2NraW5nID09IG51bGwgPyBmYWxzZSA6IGJsb2NraW5nXG5cbiAgICB0aGlzLnJlc2V0ID0gcmVzZXQgPT0gbnVsbCA/IG51bGwgOiByZXNldFxuXG4gICAgdGhpcy5ob3N0ID0gbnVsbFxuXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gbnVsbFxuXG4gICAgdGhpcy5jb250ZW50VHlwZSA9IG51bGxcblxuICAgIHRoaXMuaGVhZGVycyA9ICcnXG5cbiAgICAvLyBPbmx5IGZvciBIMlxuICAgIHRoaXMuZXhwZWN0Q29udGludWUgPSBleHBlY3RDb250aW51ZSAhPSBudWxsID8gZXhwZWN0Q29udGludWUgOiBmYWxzZVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UodGhpcy5ib2R5KSkge1xuICAgICAgaWYgKHV0aWwubm9kZU1ham9yIDwgMTYgfHwgKHV0aWwubm9kZU1ham9yID09PSAxNiAmJiB1dGlsLm5vZGVNaW5vciA8IDgpKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignRm9ybS1EYXRhIGJvZGllcyBhcmUgb25seSBzdXBwb3J0ZWQgaW4gbm9kZSB2MTYuOCBhbmQgbmV3ZXIuJylcbiAgICAgIH1cblxuICAgICAgaWYgKCFleHRyYWN0Qm9keSkge1xuICAgICAgICBleHRyYWN0Qm9keSA9IHJlcXVpcmUoJy4uL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuICAgICAgfVxuXG4gICAgICBjb25zdCBbYm9keVN0cmVhbSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGlmICh0aGlzLmNvbnRlbnRUeXBlID09IG51bGwpIHtcbiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG4gICAgICAgIHRoaXMuaGVhZGVycyArPSBgY29udGVudC10eXBlOiAke2NvbnRlbnRUeXBlfVxcclxcbmBcbiAgICAgIH1cbiAgICAgIHRoaXMuYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBib2R5U3RyZWFtLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpICYmIHRoaXMuY29udGVudFR5cGUgPT0gbnVsbCAmJiBib2R5LnR5cGUpIHtcbiAgICAgIHRoaXMuY29udGVudFR5cGUgPSBib2R5LnR5cGVcbiAgICAgIHRoaXMuaGVhZGVycyArPSBgY29udGVudC10eXBlOiAke2JvZHkudHlwZX1cXHJcXG5gXG4gICAgfVxuXG4gICAgdXRpbC52YWxpZGF0ZUhhbmRsZXIoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKVxuXG4gICAgdGhpcy5zZXJ2ZXJuYW1lID0gdXRpbC5nZXRTZXJ2ZXJOYW1lKHRoaXMuaG9zdClcblxuICAgIHRoaXNba0hhbmRsZXJdID0gaGFuZGxlclxuXG4gICAgaWYgKGNoYW5uZWxzLmNyZWF0ZS5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY3JlYXRlLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQoY2h1bmspXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25SZXF1ZXN0U2VudCAoKSB7XG4gICAgaWYgKGNoYW5uZWxzLmJvZHlTZW50Lmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5ib2R5U2VudC5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAodGhpcy5lcnJvcikge1xuICAgICAgYWJvcnQodGhpcy5lcnJvcilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db25uZWN0KGFib3J0KVxuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIFRPRE86IGFkanVzdCB0byBzdXBwb3J0IEgyXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhdGljIFtrSFRUUDFCdWlsZFJlcXVlc3RdIChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBUT0RPOiBNaWdyYXRlIGhlYWRlciBwYXJzaW5nIGhlcmUsIHRvIG1ha2UgUmVxdWVzdHNcbiAgICAvLyBIVFRQIGFnbm9zdGljXG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KG9yaWdpbiwgb3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IG9wdHMuaGVhZGVyc1xuICAgIG9wdHMgPSB7IC4uLm9wdHMsIGhlYWRlcnM6IG51bGwgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHJlcXVlc3QuaGVhZGVycyA9IHt9XG5cbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgICAgaWYgKGhlYWRlcnMubGVuZ3RoICUgMiAhPT0gMCkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgYXJyYXkgbXVzdCBiZSBldmVuJylcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICBwcm9jZXNzSGVhZGVyKHJlcXVlc3QsIGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdLCB0cnVlKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IGtleXNbaV1cbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBrZXksIGhlYWRlcnNba2V5XSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgICB9XG5cbiAgICByZXR1cm4gcmVxdWVzdFxuICB9XG5cbiAgc3RhdGljIFtrSFRUUDJDb3B5SGVhZGVyc10gKHJhdykge1xuICAgIGNvbnN0IHJhd0hlYWRlcnMgPSByYXcuc3BsaXQoJ1xcclxcbicpXG4gICAgY29uc3QgaGVhZGVycyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiByYXdIZWFkZXJzKSB7XG4gICAgICBjb25zdCBba2V5LCB2YWx1ZV0gPSBoZWFkZXIuc3BsaXQoJzogJylcblxuICAgICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUubGVuZ3RoID09PSAwKSBjb250aW51ZVxuXG4gICAgICBpZiAoaGVhZGVyc1trZXldKSBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbHVlfWBcbiAgICAgIGVsc2UgaGVhZGVyc1trZXldID0gdmFsdWVcbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXJWYWx1ZSAoa2V5LCB2YWwsIHNraXBBcHBlbmQpIHtcbiAgaWYgKHZhbCAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHZhbCA9IHZhbCAhPSBudWxsID8gYCR7dmFsfWAgOiAnJ1xuXG4gIGlmIChoZWFkZXJDaGFyUmVnZXguZXhlYyh2YWwpICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9XG5cbiAgcmV0dXJuIHNraXBBcHBlbmQgPyB2YWwgOiBgJHtrZXl9OiAke3ZhbH1cXHJcXG5gXG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsLCBza2lwQXBwZW5kID0gZmFsc2UpIHtcbiAgaWYgKHZhbCAmJiAodHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH0gZWxzZSBpZiAodmFsID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChcbiAgICByZXF1ZXN0Lmhvc3QgPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSA0ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdob3N0J1xuICApIHtcbiAgICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICAgIH1cbiAgICAvLyBDb25zdW1lZCBieSBDbGllbnRcbiAgICByZXF1ZXN0Lmhvc3QgPSB2YWxcbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSAxNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnXG4gICkge1xuICAgIHJlcXVlc3QuY29udGVudExlbmd0aCA9IHBhcnNlSW50KHZhbCwgMTApXG4gICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUocmVxdWVzdC5jb250ZW50TGVuZ3RoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcicpXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIHJlcXVlc3QuY29udGVudFR5cGUgPT09IG51bGwgJiZcbiAgICBrZXkubGVuZ3RoID09PSAxMiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC10eXBlJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID0gdmFsXG4gICAgaWYgKHNraXBBcHBlbmQpIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsLCBza2lwQXBwZW5kKVxuICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxNyAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAndHJhbnNmZXItZW5jb2RpbmcnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB0cmFuc2Zlci1lbmNvZGluZyBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb25uZWN0aW9uJ1xuICApIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnID8gdmFsLnRvTG93ZXJDYXNlKCkgOiBudWxsXG4gICAgaWYgKHZhbHVlICE9PSAnY2xvc2UnICYmIHZhbHVlICE9PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0aW9uIGhlYWRlcicpXG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gJ2Nsb3NlJykge1xuICAgICAgcmVxdWVzdC5yZXNldCA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTAgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBrZWVwLWFsaXZlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNyAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAndXBncmFkZSdcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVwZ3JhZGUgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSA2ICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdleHBlY3QnXG4gICkge1xuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcignZXhwZWN0IGhlYWRlciBub3Qgc3VwcG9ydGVkJylcbiAgfSBlbHNlIGlmICh0b2tlblJlZ0V4cC5leGVjKGtleSkgPT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyIGtleScpXG4gIH0gZWxzZSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWwubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHNraXBBcHBlbmQpIHtcbiAgICAgICAgICBpZiAocmVxdWVzdC5oZWFkZXJzW2tleV0pIHJlcXVlc3QuaGVhZGVyc1trZXldICs9IGAsJHtwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0sIHNraXBBcHBlbmQpfWBcbiAgICAgICAgICBlbHNlIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWxbaV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHNraXBBcHBlbmQpIHJlcXVlc3QuaGVhZGVyc1trZXldID0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsLCBza2lwQXBwZW5kKVxuICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlcXVlc3RcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnZXZlbnRzJylcblxuY2xhc3MgRGlzcGF0Y2hlciBleHRlbmRzIEV2ZW50RW1pdHRlciB7XG4gIGRpc3BhdGNoICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzcGF0Y2hlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrRGVzdHJveSwga0Nsb3NlLCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuY29uc3Qga0Rlc3Ryb3llZCA9IFN5bWJvbCgnZGVzdHJveWVkJylcbmNvbnN0IGtDbG9zZWQgPSBTeW1ib2woJ2Nsb3NlZCcpXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5cbmxldCB0bHMgLy8gaW5jbHVkZSB0bHMgY29uZGl0aW9uYWxseSBzaW5jZSBpdCBpcyBub3QgYWx3YXlzIGF2YWlsYWJsZVxuXG4vLyBUT0RPOiBzZXNzaW9uIHJlLXVzZSBkb2VzIG5vdCB3YWl0IGZvciB0aGUgZmlyc3Rcbi8vIGNvbm5lY3Rpb24gdG8gcmVzb2x2ZSB0aGUgc2Vzc2lvbiBhbmQgbWlnaHQgdGhlcmVmb3JlXG4vLyByZXNvbHZlIHRoZSBzYW1lIHNlcnZlcm5hbWUgbXVsdGlwbGUgdGltZXMgZXZlbiB3aGVuXG4vLyByZS11c2UgaXMgZW5hYmxlZC5cblxubGV0IFNlc3Npb25DYWNoZVxuLy8gRklYTUU6IHJlbW92ZSB3b3JrYXJvdW5kIHdoZW4gdGhlIE5vZGUgYnVnIGlzIGZpeGVkXG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG5pZiAoZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmICFwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFdlYWtTZXNzaW9uQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yIChtYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPSBtYXhDYWNoZWRTZXNzaW9uc1xuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlID0gbmV3IE1hcCgpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkgPSBuZXcgZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5KChrZXkpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplIDwgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoa2V5KVxuICAgICAgICBpZiAocmVmICE9PSB1bmRlZmluZWQgJiYgcmVmLmRlcmVmKCkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5kZWxldGUoa2V5KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KVxuICAgICAgcmV0dXJuIHJlZiA/IHJlZi5kZXJlZigpIDogbnVsbFxuICAgIH1cblxuICAgIHNldCAoc2Vzc2lvbktleSwgc2Vzc2lvbikge1xuICAgICAgaWYgKHRoaXMuX21heENhY2hlZFNlc3Npb25zID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIG5ldyBXZWFrUmVmKHNlc3Npb24pKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5LnJlZ2lzdGVyKHNlc3Npb24sIHNlc3Npb25LZXkpXG4gICAgfVxuICB9XG59IGVsc2Uge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBTaW1wbGVTZXNzaW9uQ2FjaGUge1xuICAgIGNvbnN0cnVjdG9yIChtYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPSBtYXhDYWNoZWRTZXNzaW9uc1xuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlID0gbmV3IE1hcCgpXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChzZXNzaW9uS2V5KVxuICAgIH1cblxuICAgIHNldCAoc2Vzc2lvbktleSwgc2Vzc2lvbikge1xuICAgICAgaWYgKHRoaXMuX21heENhY2hlZFNlc3Npb25zID09PSAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPj0gdGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgICAgLy8gcmVtb3ZlIHRoZSBvbGRlc3Qgc2Vzc2lvblxuICAgICAgICBjb25zdCB7IHZhbHVlOiBvbGRlc3RLZXkgfSA9IHRoaXMuX3Nlc3Npb25DYWNoZS5rZXlzKCkubmV4dCgpXG4gICAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5kZWxldGUob2xkZXN0S2V5KVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkQ29ubmVjdG9yICh7IGFsbG93SDIsIG1heENhY2hlZFNlc3Npb25zLCBzb2NrZXRQYXRoLCB0aW1lb3V0LCAuLi5vcHRzIH0pIHtcbiAgaWYgKG1heENhY2hlZFNlc3Npb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heENhY2hlZFNlc3Npb25zKSB8fCBtYXhDYWNoZWRTZXNzaW9ucyA8IDApKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhDYWNoZWRTZXNzaW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgfVxuXG4gIGNvbnN0IG9wdGlvbnMgPSB7IHBhdGg6IHNvY2tldFBhdGgsIC4uLm9wdHMgfVxuICBjb25zdCBzZXNzaW9uQ2FjaGUgPSBuZXcgU2Vzc2lvbkNhY2hlKG1heENhY2hlZFNlc3Npb25zID09IG51bGwgPyAxMDAgOiBtYXhDYWNoZWRTZXNzaW9ucylcbiAgdGltZW91dCA9IHRpbWVvdXQgPT0gbnVsbCA/IDEwZTMgOiB0aW1lb3V0XG4gIGFsbG93SDIgPSBhbGxvd0gyICE9IG51bGwgPyBhbGxvd0gyIDogZmFsc2VcbiAgcmV0dXJuIGZ1bmN0aW9uIGNvbm5lY3QgKHsgaG9zdG5hbWUsIGhvc3QsIHByb3RvY29sLCBwb3J0LCBzZXJ2ZXJuYW1lLCBsb2NhbEFkZHJlc3MsIGh0dHBTb2NrZXQgfSwgY2FsbGJhY2spIHtcbiAgICBsZXQgc29ja2V0XG4gICAgaWYgKHByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgaWYgKCF0bHMpIHtcbiAgICAgICAgdGxzID0gcmVxdWlyZSgndGxzJylcbiAgICAgIH1cbiAgICAgIHNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IG9wdGlvbnMuc2VydmVybmFtZSB8fCB1dGlsLmdldFNlcnZlck5hbWUoaG9zdCkgfHwgbnVsbFxuXG4gICAgICBjb25zdCBzZXNzaW9uS2V5ID0gc2VydmVybmFtZSB8fCBob3N0bmFtZVxuICAgICAgY29uc3Qgc2Vzc2lvbiA9IHNlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSkgfHwgbnVsbFxuXG4gICAgICBhc3NlcnQoc2Vzc2lvbktleSlcblxuICAgICAgc29ja2V0ID0gdGxzLmNvbm5lY3Qoe1xuICAgICAgICBoaWdoV2F0ZXJNYXJrOiAxNjM4NCwgLy8gVExTIGluIG5vZGUgY2FuJ3QgaGF2ZSBiaWdnZXIgSFdNIGFueXdheS4uLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBzZXJ2ZXJuYW1lLFxuICAgICAgICBzZXNzaW9uLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIC8vIFRPRE8oSFRUUC8yKTogQWRkIHN1cHBvcnQgZm9yIGgyY1xuICAgICAgICBBTFBOUHJvdG9jb2xzOiBhbGxvd0gyID8gWydodHRwLzEuMScsICdoMiddIDogWydodHRwLzEuMSddLFxuICAgICAgICBzb2NrZXQ6IGh0dHBTb2NrZXQsIC8vIHVwZ3JhZGUgc29ja2V0IGNvbm5lY3Rpb25cbiAgICAgICAgcG9ydDogcG9ydCB8fCA0NDMsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuICAgICAgc29ja2V0ID0gbmV0LmNvbm5lY3Qoe1xuICAgICAgICBoaWdoV2F0ZXJNYXJrOiA2NCAqIDEwMjQsIC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIGxvY2FsQWRkcmVzcyxcbiAgICAgICAgcG9ydDogcG9ydCB8fCA4MCxcbiAgICAgICAgaG9zdDogaG9zdG5hbWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gU2V0IFRDUCBrZWVwIGFsaXZlIG9wdGlvbnMgb24gdGhlIHNvY2tldCBoZXJlIGluc3RlYWQgb2YgaW4gY29ubmVjdCgpIGZvciB0aGUgY2FzZSBvZiBhc3NpZ25pbmcgdGhlIHNvY2tldFxuICAgIGlmIChvcHRpb25zLmtlZXBBbGl2ZSA9PSBudWxsIHx8IG9wdGlvbnMua2VlcEFsaXZlKSB7XG4gICAgICBjb25zdCBrZWVwQWxpdmVJbml0aWFsRGVsYXkgPSBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheSA9PT0gdW5kZWZpbmVkID8gNjBlMyA6IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5XG4gICAgICBzb2NrZXQuc2V0S2VlcEFsaXZlKHRydWUsIGtlZXBBbGl2ZUluaXRpYWxEZWxheSlcbiAgICB9XG5cbiAgICBjb25zdCBjYW5jZWxUaW1lb3V0ID0gc2V0dXBUaW1lb3V0KCgpID0+IG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0KSwgdGltZW91dClcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IobnVsbCwgdGhpcylcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQoKVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihlcnIpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICByZXR1cm4gc29ja2V0XG4gIH1cbn1cblxuZnVuY3Rpb24gc2V0dXBUaW1lb3V0IChvbkNvbm5lY3RUaW1lb3V0LCB0aW1lb3V0KSB7XG4gIGlmICghdGltZW91dCkge1xuICAgIHJldHVybiAoKSA9PiB7fVxuICB9XG5cbiAgbGV0IHMxID0gbnVsbFxuICBsZXQgczIgPSBudWxsXG4gIGNvbnN0IHRpbWVvdXRJZCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgIC8vIHNldEltbWVkaWF0ZSBpcyBhZGRlZCB0byBtYWtlIHN1cmUgdGhhdCB3ZSBwcmlvdG9yaXNlIHNvY2tldCBlcnJvciBldmVudHMgb3ZlciB0aW1lb3V0c1xuICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSAnd2luMzInKSB7XG4gICAgICAgIC8vIFdpbmRvd3MgbmVlZHMgYW4gZXh0cmEgc2V0SW1tZWRpYXRlIHByb2JhYmx5IGR1ZSB0byBpbXBsZW1lbnRhdGlvbiBkaWZmZXJlbmNlcyBpbiB0aGUgc29ja2V0IGxvZ2ljXG4gICAgICAgIHMyID0gc2V0SW1tZWRpYXRlKCgpID0+IG9uQ29ubmVjdFRpbWVvdXQoKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoKVxuICAgICAgfVxuICAgIH0pXG4gIH0sIHRpbWVvdXQpXG4gIHJldHVybiAoKSA9PiB7XG4gICAgY2xlYXJUaW1lb3V0KHRpbWVvdXRJZClcbiAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQpIHtcbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IoKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBidWlsZENvbm5lY3RvclxuIiwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcblxuY29uc3QgcmVkaXJlY3RhYmxlU3RhdHVzQ29kZXMgPSBbMzAwLCAzMDEsIDMwMiwgMzAzLCAzMDcsIDMwOF1cblxuY29uc3Qga0JvZHkgPSBTeW1ib2woJ2JvZHknKVxuXG5jbGFzcyBCb2R5QXN5bmNJdGVyYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChib2R5KSB7XG4gICAgdGhpc1trQm9keV0gPSBib2R5XG4gICAgdGhpc1trQm9keVVzZWRdID0gZmFsc2VcbiAgfVxuXG4gIGFzeW5jICogW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSAoKSB7XG4gICAgYXNzZXJ0KCF0aGlzW2tCb2R5VXNlZF0sICdkaXN0dXJiZWQnKVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IHRydWVcbiAgICB5aWVsZCAqIHRoaXNba0JvZHldXG4gIH1cbn1cblxuY2xhc3MgUmVkaXJlY3RIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoLCBtYXhSZWRpcmVjdGlvbnMsIG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG9wdHMubWV0aG9kLCBvcHRzLnVwZ3JhZGUpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gZGlzcGF0Y2hcbiAgICB0aGlzLmxvY2F0aW9uID0gbnVsbFxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5vcHRzID0geyAuLi5vcHRzLCBtYXhSZWRpcmVjdGlvbnM6IDAgfSAvLyBvcHRzIG11c3QgYmUgYSBjb3B5XG4gICAgdGhpcy5tYXhSZWRpcmVjdGlvbnMgPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5oaXN0b3J5ID0gW11cblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgLy8gVE9ETyAoZml4KTogUHJvdmlkZSBzb21lIHdheSBmb3IgdGhlIHVzZXIgdG8gY2FjaGUgdGhlIGZpbGUgdG8gZS5nLiAvdG1wXG4gICAgICAvLyBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVkIGFnYWluP1xuICAgICAgLy8gVE9ETyAoZml4KTogRG8gd2UgbmVlZCAxMDAtZXhwZWN0IHN1cHBvcnQgdG8gcHJvdmlkZSBhIHdheSB0byBkbyB0aGlzIHByb3Blcmx5P1xuICAgICAgaWYgKHV0aWwuYm9keUxlbmd0aCh0aGlzLm9wdHMuYm9keSkgPT09IDApIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlcbiAgICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhc3NlcnQoZmFsc2UpXG4gICAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdHMuYm9keS5yZWFkYWJsZURpZFJlYWQgIT09ICdib29sZWFuJykge1xuICAgICAgICB0aGlzLm9wdHMuYm9keVtrQm9keVVzZWRdID0gZmFsc2VcbiAgICAgICAgRUUucHJvdG90eXBlLm9uLmNhbGwodGhpcy5vcHRzLmJvZHksICdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoaXNba0JvZHlVc2VkXSA9IHRydWVcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHRoaXMub3B0cy5ib2R5ICYmIHR5cGVvZiB0aGlzLm9wdHMuYm9keS5waXBlVG8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFdlIGNhbid0IGFjY2VzcyBSZWFkYWJsZVN0cmVhbSBpbnRlcm5hbCBzdGF0ZVxuICAgICAgLy8gdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IGl0IGhhcyBiZWVuIGRpc3R1cmJlZC4gVGhpcyBpcyBqdXN0XG4gICAgICAvLyBhIHdvcmthcm91bmQuXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5vcHRzLmJvZHkgJiZcbiAgICAgIHR5cGVvZiB0aGlzLm9wdHMuYm9keSAhPT0gJ3N0cmluZycgJiZcbiAgICAgICFBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5vcHRzLmJvZHkpICYmXG4gICAgICB1dGlsLmlzSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgKSB7XG4gICAgICAvLyBUT0RPOiBTaG91bGQgd2UgYWxsb3cgcmUtdXNpbmcgaXRlcmFibGUgaWYgIXRoaXMub3B0cy5pZGVtcG90ZW50XG4gICAgICAvLyBvciB0aHJvdWdoIHNvbWUgb3RoZXIgZmxhZz9cbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbmV3IEJvZHlBc3luY0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmhhbmRsZXIub25Db25uZWN0KGFib3J0LCB7IGhpc3Rvcnk6IHRoaXMuaGlzdG9yeSB9KVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIHRoaXMubG9jYXRpb24gPSB0aGlzLmhpc3RvcnkubGVuZ3RoID49IHRoaXMubWF4UmVkaXJlY3Rpb25zIHx8IHV0aWwuaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpXG4gICAgICA/IG51bGxcbiAgICAgIDogcGFyc2VMb2NhdGlvbihzdGF0dXNDb2RlLCBoZWFkZXJzKVxuXG4gICAgaWYgKHRoaXMub3B0cy5vcmlnaW4pIHtcbiAgICAgIHRoaXMuaGlzdG9yeS5wdXNoKG5ldyBVUkwodGhpcy5vcHRzLnBhdGgsIHRoaXMub3B0cy5vcmlnaW4pKVxuICAgIH1cblxuICAgIGlmICghdGhpcy5sb2NhdGlvbikge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH1cblxuICAgIGNvbnN0IHsgb3JpZ2luLCBwYXRobmFtZSwgc2VhcmNoIH0gPSB1dGlsLnBhcnNlVVJMKG5ldyBVUkwodGhpcy5sb2NhdGlvbiwgdGhpcy5vcHRzLm9yaWdpbiAmJiBuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSkpXG4gICAgY29uc3QgcGF0aCA9IHNlYXJjaCA/IGAke3BhdGhuYW1lfSR7c2VhcmNofWAgOiBwYXRobmFtZVxuXG4gICAgLy8gUmVtb3ZlIGhlYWRlcnMgcmVmZXJyaW5nIHRvIHRoZSBvcmlnaW5hbCBVUkwuXG4gICAgLy8gQnkgZGVmYXVsdCBpdCBpcyBIb3N0IG9ubHksIHVubGVzcyBpdCdzIGEgMzAzIChzZWUgYmVsb3cpLCB3aGljaCByZW1vdmVzIGFsc28gYWxsIENvbnRlbnQtKiBoZWFkZXJzLlxuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG4gICAgdGhpcy5vcHRzLmhlYWRlcnMgPSBjbGVhblJlcXVlc3RIZWFkZXJzKHRoaXMub3B0cy5oZWFkZXJzLCBzdGF0dXNDb2RlID09PSAzMDMsIHRoaXMub3B0cy5vcmlnaW4gIT09IG9yaWdpbilcbiAgICB0aGlzLm9wdHMucGF0aCA9IHBhdGhcbiAgICB0aGlzLm9wdHMub3JpZ2luID0gb3JpZ2luXG4gICAgdGhpcy5vcHRzLm1heFJlZGlyZWN0aW9ucyA9IDBcbiAgICB0aGlzLm9wdHMucXVlcnkgPSBudWxsXG5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG4gICAgLy8gSW4gY2FzZSBvZiBIVFRQIDMwMywgYWx3YXlzIHJlcGxhY2UgbWV0aG9kIHRvIGJlIGVpdGhlciBIRUFEIG9yIEdFVFxuICAgIGlmIChzdGF0dXNDb2RlID09PSAzMDMgJiYgdGhpcy5vcHRzLm1ldGhvZCAhPT0gJ0hFQUQnKSB7XG4gICAgICB0aGlzLm9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICAgIHRoaXMub3B0cy5ib2R5ID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIGJvZGllcy5cblxuICAgICAgICBSZWRpcmVjdGlvbiBpcyB1c2VkIHRvIHNlcnZlIHRoZSByZXF1ZXN0ZWQgcmVzb3VyY2UgZnJvbSBhbm90aGVyIFVSTCwgc28gaXQgaXMgYXNzdW1lcyB0aGF0XG4gICAgICAgIG5vIGJvZHkgaXMgZ2VuZXJhdGVkIChhbmQgdGh1cyBjYW4gYmUgaWdub3JlZCkuIEV2ZW4gdGhvdWdoIGdlbmVyYXRpbmcgYSBib2R5IGlzIG5vdCBwcm9oaWJpdGVkLlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAxLCAzMDIsIDMwMywgMzA3IGFuZCAzMDggKHRoZSBsYXR0ZXIgZnJvbSBSRkMgNzIzOCksIHRoZSBzcGVjcyBtZW50aW9uIHRoYXQgdGhlIGJvZHkgdXN1YWxseVxuICAgICAgICAod2hpY2ggbWVhbnMgaXQncyBvcHRpb25hbCBhbmQgbm90IG1hbmRhdGVkKSBjb250YWluIGp1c3QgYW4gaHlwZXJsaW5rIHRvIHRoZSB2YWx1ZSBvZlxuICAgICAgICB0aGUgTG9jYXRpb24gcmVzcG9uc2UgaGVhZGVyLCBzbyB0aGUgYm9keSBjYW4gYmUgaWdub3JlZCBzYWZlbHkuXG5cbiAgICAgICAgRm9yIHN0YXR1cyAzMDAsIHdoaWNoIGlzIFwiTXVsdGlwbGUgQ2hvaWNlc1wiLCB0aGUgc3BlYyBtZW50aW9ucyBib3RoIGdlbmVyYXRpbmcgYSBMb2NhdGlvblxuICAgICAgICByZXNwb25zZSBoZWFkZXIgQU5EIGEgcmVzcG9uc2UgYm9keSB3aXRoIHRoZSBvdGhlciBwb3NzaWJsZSBsb2NhdGlvbiB0byBmb2xsb3cuXG4gICAgICAgIFNpbmNlIHRoZSBzcGVjIGV4cGxpY2l0aWx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbnMuXG4gICAgICAqL1xuXG4gICAgICB0aGlzLmxvY2F0aW9uID0gbnVsbFxuICAgICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgICAgdGhpcy5kaXNwYXRjaCh0aGlzLm9wdHMsIHRoaXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHRyYWlsZXJzKVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Cb2R5U2VudChjaHVuaylcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFyc2VMb2NhdGlvbiAoc3RhdHVzQ29kZSwgaGVhZGVycykge1xuICBpZiAocmVkaXJlY3RhYmxlU3RhdHVzQ29kZXMuaW5kZXhPZihzdGF0dXNDb2RlKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgaWYgKGhlYWRlcnNbaV0udG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuZnVuY3Rpb24gc2hvdWxkUmVtb3ZlSGVhZGVyIChoZWFkZXIsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgaWYgKGhlYWRlci5sZW5ndGggPT09IDQpIHtcbiAgICByZXR1cm4gdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKSA9PT0gJ2hvc3QnXG4gIH1cbiAgaWYgKHJlbW92ZUNvbnRlbnQgJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKS5zdGFydHNXaXRoKCdjb250ZW50LScpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodW5rbm93bk9yaWdpbiAmJiAoaGVhZGVyLmxlbmd0aCA9PT0gMTMgfHwgaGVhZGVyLmxlbmd0aCA9PT0gNiB8fCBoZWFkZXIubGVuZ3RoID09PSAxOSkpIHtcbiAgICBjb25zdCBuYW1lID0gdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyKVxuICAgIHJldHVybiBuYW1lID09PSAnYXV0aG9yaXphdGlvbicgfHwgbmFtZSA9PT0gJ2Nvb2tpZScgfHwgbmFtZSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5mdW5jdGlvbiBjbGVhblJlcXVlc3RIZWFkZXJzIChoZWFkZXJzLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihoZWFkZXJzW2ldLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSkge1xuICAgICAgICByZXQucHVzaChoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSBpZiAoaGVhZGVycyAmJiB0eXBlb2YgaGVhZGVycyA9PT0gJ29iamVjdCcpIHtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhoZWFkZXJzKSkge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoa2V5LCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSkge1xuICAgICAgICByZXQucHVzaChrZXksIGhlYWRlcnNba2V5XSlcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGhlYWRlcnMgPT0gbnVsbCwgJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZWRpcmVjdEhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9SZWRpcmVjdEhhbmRsZXInKVxuXG5mdW5jdGlvbiBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yICh7IG1heFJlZGlyZWN0aW9uczogZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IG1heFJlZGlyZWN0aW9ucyA9IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSA9IG9wdHNcblxuICAgICAgaWYgKCFtYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZGlyZWN0SGFuZGxlciA9IG5ldyBSZWRpcmVjdEhhbmRsZXIoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcilcbiAgICAgIG9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIFN0b3Agc3ViIGRpc3BhdGNoZXIgZnJvbSBhbHNvIHJlZGlyZWN0aW5nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG4iLCAibW9kdWxlLmV4cG9ydHMgPSAnQUdGemJRRUFBQUFCTUFoZ0FYOEJmMkFEZjM5L0FYOWdCSDkvZjM4QmYyQUFBR0FEZjM5L0FHQUJmd0JnQW45L0FHQUdmMzkvZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBQ0EyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUEwWkZBd01FQUFBRkFBQUFBQUFBQlFFRkFBVUZCUUFBQmdBQUFBQUdCZ1lHQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQUFBQkFRY0FBQVVGQXdBQkJBVUJjQUVTRWdVREFRQUNCZ2dCZndGQmdOUUVDd2ZSQlNJR2JXVnRiM0o1QWdBTFgybHVhWFJwWVd4cGVtVUFDUmxmWDJsdVpHbHlaV04wWDJaMWJtTjBhVzl1WDNSaFlteGxBUUFMYkd4b2RIUndYMmx1YVhRQUNoaHNiR2gwZEhCZmMyaHZkV3hrWDJ0bFpYQmZZV3hwZG1VQVFReHNiR2gwZEhCZllXeHNiMk1BREFadFlXeHNiMk1BUmd0c2JHaDBkSEJmWm5KbFpRQU5CR1p5WldVQVNBOXNiR2gwZEhCZloyVjBYM1I1Y0dVQURoVnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXRnFiM0lBRHhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldsdWIzSUFFQkZzYkdoMGRIQmZaMlYwWDIxbGRHaHZaQUFSRm14c2FIUjBjRjluWlhSZmMzUmhkSFZ6WDJOdlpHVUFFaEpzYkdoMGRIQmZaMlYwWDNWd1ozSmhaR1VBRXd4c2JHaDBkSEJmY21WelpYUUFGQTVzYkdoMGRIQmZaWGhsWTNWMFpRQVZGR3hzYUhSMGNGOXpaWFIwYVc1bmMxOXBibWwwQUJZTmJHeG9kSFJ3WDJacGJtbHphQUFYREd4c2FIUjBjRjl3WVhWelpRQVlEV3hzYUhSMGNGOXlaWE4xYldVQUdSdHNiR2gwZEhCZmNtVnpkVzFsWDJGbWRHVnlYM1Z3WjNKaFpHVUFHaEJzYkdoMGRIQmZaMlYwWDJWeWNtNXZBQnNYYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl5WldGemIyNEFIQmRzYkdoMGRIQmZjMlYwWDJWeWNtOXlYM0psWVhOdmJnQWRGR3hzYUhSMGNGOW5aWFJmWlhKeWIzSmZjRzl6QUI0UmJHeG9kSFJ3WDJWeWNtNXZYMjVoYldVQUh4SnNiR2gwZEhCZmJXVjBhRzlrWDI1aGJXVUFJQkpzYkdoMGRIQmZjM1JoZEhWelgyNWhiV1VBSVJwc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmFHVmhaR1Z5Y3dBaUlXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOWphSFZ1YTJWa1gyeGxibWQwYUFBakhXeHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOXJaV1Z3WDJGc2FYWmxBQ1FrYkd4b2RIUndYM05sZEY5c1pXNXBaVzUwWDNSeVlXNXpabVZ5WDJWdVkyOWthVzVuQUNVWWJHeG9kSFJ3WDIxbGMzTmhaMlZmYm1WbFpITmZaVzltQUQ4SkZ3RUFRUUVMRVFFQ0F3UUZDd1lITlRrM01TOHRKeXNwQ3NMZ0FrVUNBQXNJQUJDSWdJQ0FBQXNaQUNBQUVNS0FnSUFBR2lBQUlBSTJBamdnQUNBQk9nQW9DeHdBSUFBZ0FDOEJNaUFBTFFBdUlBQVF3WUNBZ0FBUWdJQ0FnQUFMS2dFQmYwSEFBQkRHZ0lDQUFDSUJFTUtBZ0lBQUdpQUJRWUNJZ0lBQU5nSTRJQUVnQURvQUtDQUJDd29BSUFBUXlJQ0FnQUFMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFJRRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJEQ2dJQ0FBQm9nQUNBRU5nSTRJQUFnQXpvQUtDQUFJQUk2QUMwZ0FDQUJOZ0lZQ3hFQUlBQWdBU0FCSUFKcUVNT0FnSUFBQ3hBQUlBQkJBRUhjQUJETWdJQ0FBQm9MWndFQmYwRUFJUUVDUUNBQUtBSU1EUUFDUUFKQUFrQUNRQ0FBTFFBdkRnTUJBQU1DQ3lBQUtBSTRJZ0ZGRFFBZ0FTZ0NMQ0lCUlEwQUlBQWdBUkdBZ0lDQUFBQWlBUTBEQzBFQUR3c1F5b0NBZ0FBQUN5QUFRY09XZ0lBQU5nSVFRUTRoQVFzZ0FRc2VBQUpBSUFBb0Fnd05BQ0FBUWRHYmdJQUFOZ0lRSUFCQkZUWUNEQXNMRmdBQ1FDQUFLQUlNUVJWSERRQWdBRUVBTmdJTUN3c1dBQUpBSUFBb0FneEJGa2NOQUNBQVFRQTJBZ3dMQ3djQUlBQW9BZ3dMQndBZ0FDZ0NFQXNKQUNBQUlBRTJBaEFMQndBZ0FDZ0NGQXNpQUFKQUlBQkJKRWtOQUJES2dJQ0FBQUFMSUFCQkFuUkJvTE9BZ0FCcUtBSUFDeUlBQWtBZ0FFRXVTUTBBRU1xQWdJQUFBQXNnQUVFQ2RFR3d0SUNBQUdvb0FnQUw3Z3NCQVg5QjY2aUFnQUFoQVFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkJuSDlxRHZRRFkySUFBV0ZoWVdGaFlRSURCQVZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEJnY0lDUW9MREEwT0QyRmhZV0ZoRUdGaFlXRmhZV0ZoWVdGaEVXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlSSVRGQlVXRnhnWkdodGhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhIQjBlSHlBaElpTWtKU1luS0NrcUt5d3RMaTh3TVRJek5EVTJZVGM0T1RwaFlXRmhZV0ZoWVR0aFlXRThZV0ZoWVQwK1AyRmhZV0ZoWVdGaFFHRmhRV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVVKRFJFVkdSMGhKU2t0TVRVNVBVRkZTVTJGaFlXRmhZV0ZoVkZWV1YxaFpXbHRoWEYxaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmVZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhYMkJoQzBIaHA0Q0FBQThMUWFTaGdJQUFEd3RCeTZ5QWdBQVBDMEgrc1lDQUFBOExRY0NrZ0lBQUR3dEJxNlNBZ0FBUEMwR05xSUNBQUE4TFFlS21nSUFBRHd0QmdMQ0FnQUFQQzBHNXI0Q0FBQThMUWRla2dJQUFEd3RCNzUrQWdBQVBDMEhobjRDQUFBOExRZnFmZ0lBQUR3dEI4cUNBZ0FBUEMwR29yNENBQUE4TFFhNnlnSUFBRHd0QmlMQ0FnQUFQQzBIc3A0Q0FBQThMUVlLaWdJQUFEd3RCanAyQWdBQVBDMEhRcm9DQUFBOExRY3FqZ0lBQUR3dEJ4YktBZ0FBUEMwSGZuSUNBQUE4TFFkS2NnSUFBRHd0QnhLQ0FnQUFQQzBIWG9JQ0FBQThMUWFLZmdJQUFEd3RCN2E2QWdBQVBDMEdyc0lDQUFBOExRZFNsZ0lBQUR3dEJ6SzZBZ0FBUEMwSDZyb0NBQUE4TFFmeXJnSUFBRHd0QjByQ0FnQUFQQzBIeG5ZQ0FBQThMUWJ1Z2dJQUFEd3RCOTZ1QWdBQVBDMEdRc1lDQUFBOExRZGV4Z0lBQUR3dEJvcTJBZ0FBUEMwSFVwNENBQUE4TFFlQ3JnSUFBRHd0Qm42eUFnQUFQQzBIcnNZQ0FBQThMUWRXZmdJQUFEd3RCeXJHQWdBQVBDMEhlcFlDQUFBOExRZFNlZ0lBQUR3dEI5SnlBZ0FBUEMwR25zb0NBQUE4TFFiR2RnSUFBRHd0Qm9KMkFnQUFQQzBHNXNZQ0FBQThMUWJ5d2dJQUFEd3RCa3FHQWdBQVBDMEd6cG9DQUFBOExRZW1zZ0lBQUR3dEJySjZBZ0FBUEMwSFVxNENBQUE4TFFmZW1nSUFBRHd0QmdLYUFnQUFQQzBHd29ZQ0FBQThMUWY2ZWdJQUFEd3RCamFPQWdBQVBDMEdKcllDQUFBOExRZmVpZ0lBQUR3dEJvTEdBZ0FBUEMwR3VuNENBQUE4TFFjYWxnSUFBRHd0QjZKNkFnQUFQQzBHVG9vQ0FBQThMUWNLdmdJQUFEd3RCdzUyQWdBQVBDMEdMcklDQUFBOExRZUdkZ0lBQUR3dEJqYStBZ0FBUEMwSHFvWUNBQUE4TFFiU3RnSUFBRHd0QjBxK0FnQUFQQzBIZnNvQ0FBQThMUWRLeWdJQUFEd3RCOExDQWdBQVBDMEdwb29DQUFBOExRZm1qZ0lBQUR3dEJtWjZBZ0FBUEMwRzFySUNBQUE4TFFadXdnSUFBRHd0QmtyS0FnQUFQQzBHMnE0Q0FBQThMUWNLaWdJQUFEd3RCK0xLQWdBQVBDMEdlcFlDQUFBOExRZENpZ0lBQUR3dEJ1cDZBZ0FBUEMwR0Jub0NBQUE4TEVNcUFnSUFBQUF0QjFxR0FnQUFoQVFzZ0FRc1dBQ0FBSUFBdEFDMUIvZ0Z4SUFGQkFFZHlPZ0F0Q3hrQUlBQWdBQzBBTFVIOUFYRWdBVUVBUjBFQmRISTZBQzBMR1FBZ0FDQUFMUUF0UWZzQmNTQUJRUUJIUVFKMGNqb0FMUXNaQUNBQUlBQXRBQzFCOXdGeElBRkJBRWRCQTNSeU9nQXRDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnQWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NCQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFjYVJnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUl3SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaW9DQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ05DSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSU1JZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdacUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BamdpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDRUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWldRZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJOElnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FoUWlCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVHcW00Q0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NRQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlZSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3Wk9BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0pDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXNJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaWdpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpSUNBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDVUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJY0lnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCd3BtQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NJQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaU1VnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUpNSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWxRaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1dDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RGQVFGL0FrQUNRQ0FBTHdFd1FSUnhRUlJIRFFCQkFTRURJQUF0QUNoQkFVWU5BU0FBTHdFeVFlVUFSaUVEREFFTElBQXRBQ2xCQlVZaEF3c2dBQ0FET2dBdVFRQUwvZ0VCQTM5QkFTRURBa0FnQUM4Qk1DSUVRUWh4RFFBZ0FDa0RJRUlBVWlFREN3SkFBa0FnQUMwQUxrVU5BRUVCSVFVZ0FDMEFLVUVGUmcwQlFRRWhCU0FFUWNBQWNVVWdBM0ZCQVVjTkFRdEJBQ0VGSUFSQndBQnhEUUJCQWlFRklBUkIvLzhEY1NJRFFRaHhEUUFDUUNBRFFZQUVjVVVOQUFKQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFweERRQkJCUThMUVFRUEN3SkFJQU5CSUhFTkFBSkFJQUF0QUNoQkFVWU5BQ0FBTHdFeVFmLy9BM0VpQUVHY2YycEI1QUJKRFFBZ0FFSE1BVVlOQUNBQVFiQUNSZzBBUVFRaEJTQUVRU2h4UlEwQ0lBTkJpQVJ4UVlBRVJnMENDMEVBRHd0QkFFRURJQUFwQXlCUUd5RUZDeUFGQzJJQkFuOUJBQ0VCQWtBZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUNRWngvYWtIa0FFa05BQ0FDUWN3QlJnMEFJQUpCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFTQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUJDeUFCQzZjQkFRTi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUVFQUlRTWdBQzhCTUNJRVFRSnhSUTBCREFJTFFRQWhBeUFBTHdFd0lnUkJBWEZGRFFFTFFRRWhBeUFBTFFBb1FRRkdEUUFnQUM4Qk1rSC8vd054SWdWQm5IOXFRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRVFjQUFjUTBBUVFBaEF5QUVRWWdFY1VHQUJFWU5BQ0FFUVNoeFFRQkhJUU1MSUFCQkFEc0JNQ0FBUVFBNkFDOGdBd3VaQVFFQ2Z3SkFBa0FDUUNBQUxRQXFSUTBBSUFBdEFDdEZEUUJCQUNFQklBQXZBVEFpQWtFQ2NVVU5BUXdDQzBFQUlRRWdBQzhCTUNJQ1FRRnhSUTBCQzBFQklRRWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lBUVp4L2FrSGtBRWtOQUNBQVFjd0JSZzBBSUFCQnNBSkdEUUFnQWtIQUFIRU5BRUVBSVFFZ0FrR0lCSEZCZ0FSR0RRQWdBa0VvY1VFQVJ5RUJDeUFCQzFrQUlBQkJHR3BDQURjREFDQUFRZ0EzQXdBZ0FFRTRha0lBTndNQUlBQkJNR3BDQURjREFDQUFRU2hxUWdBM0F3QWdBRUVnYWtJQU53TUFJQUJCRUdwQ0FEY0RBQ0FBUVFocVFnQTNBd0FnQUVIZEFUWUNIRUVBQzNzQkFYOENRQ0FBS0FJTUlnTU5BQUpBSUFBb0FnUkZEUUFnQUNBQk5nSUVDd0pBSUFBZ0FTQUNFTVNBZ0lBQUlnTU5BQ0FBS0FJTUR3c2dBQ0FETmdJY1FRQWhBeUFBS0FJRUlnRkZEUUFnQUNBQklBSWdBQ2dDQ0JHQmdJQ0FBQUFpQVVVTkFDQUFJQUkyQWhRZ0FDQUJOZ0lNSUFFaEF3c2dBd3ZrOHdFRERuOERmZ1IvSTRDQWdJQUFRUkJySWdNa2dJQ0FnQUFnQVNFRUlBRWhCU0FCSVFZZ0FTRUhJQUVoQ0NBQklRa2dBU0VLSUFFaEN5QUJJUXdnQVNFTklBRWhEaUFCSVE4Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FDZ0NIQ0lRUVg5cUR0MEIyZ0VCMlFFQ0F3UUZCZ2NJQ1FvTERBME8yQUVQRU5jQkVSTFdBUk1VRlJZWEdCa2FHK0FCM3dFY0hSN1ZBUjhnSVNJakpDWFVBU1luS0NrcUt5elRBZElCTFM3UkFkQUJMekF4TWpNME5UWTNPRGs2T3p3OVBqOUFRVUpEUkVWRzJ3RkhTRWxLendIT0FVdk5BVXpNQVUxT1QxQlJVbE5VVlZaWFdGbGFXMXhkWGw5Z1lXSmpaR1ZtWjJocGFtdHNiVzV2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStmNEFCZ1FHQ0FZTUJoQUdGQVlZQmh3R0lBWWtCaWdHTEFZd0JqUUdPQVk4QmtBR1JBWklCa3dHVUFaVUJsZ0dYQVpnQm1RR2FBWnNCbkFHZEFaNEJud0dnQWFFQm9nR2pBYVFCcFFHbUFhY0JxQUdwQWFvQnF3R3NBYTBCcmdHdkFiQUJzUUd5QWJNQnRBRzFBYllCdHdITEFjb0J1QUhKQWJrQnlBRzZBYnNCdkFHOUFiNEJ2d0hBQWNFQndnSERBY1FCeFFIR0FRRGNBUXRCQUNFUURNWUJDMEVPSVJBTXhRRUxRUTBoRUF6RUFRdEJEeUVRRE1NQkMwRVFJUkFNd2dFTFFSTWhFQXpCQVF0QkZDRVFETUFCQzBFVklSQU12d0VMUVJZaEVBeStBUXRCRnlFUURMMEJDMEVZSVJBTXZBRUxRUmtoRUF5N0FRdEJHaUVRRExvQkMwRWJJUkFNdVFFTFFSd2hFQXk0QVF0QkNDRVFETGNCQzBFZElSQU10Z0VMUVNBaEVBeTFBUXRCSHlFUURMUUJDMEVISVJBTXN3RUxRU0VoRUF5eUFRdEJJaUVRRExFQkMwRWVJUkFNc0FFTFFTTWhFQXl2QVF0QkVpRVFESzRCQzBFUklSQU1yUUVMUVNRaEVBeXNBUXRCSlNFUURLc0JDMEVtSVJBTXFnRUxRU2NoRUF5cEFRdEJ3d0VoRUF5b0FRdEJLU0VRREtjQkMwRXJJUkFNcGdFTFFTd2hFQXlsQVF0QkxTRVFES1FCQzBFdUlSQU1vd0VMUVM4aEVBeWlBUXRCeEFFaEVBeWhBUXRCTUNFUURLQUJDMEUwSVJBTW53RUxRUXdoRUF5ZUFRdEJNU0VRREowQkMwRXlJUkFNbkFFTFFUTWhFQXliQVF0Qk9TRVFESm9CQzBFMUlSQU1tUUVMUWNVQklSQU1tQUVMUVFzaEVBeVhBUXRCT2lFUURKWUJDMEUySVJBTWxRRUxRUW9oRUF5VUFRdEJOeUVRREpNQkMwRTRJUkFNa2dFTFFUd2hFQXlSQVF0Qk95RVFESkFCQzBFOUlSQU1qd0VMUVFraEVBeU9BUXRCS0NFUURJMEJDMEUrSVJBTWpBRUxRVDhoRUF5TEFRdEJ3QUFoRUF5S0FRdEJ3UUFoRUF5SkFRdEJ3Z0FoRUF5SUFRdEJ3d0FoRUF5SEFRdEJ4QUFoRUF5R0FRdEJ4UUFoRUF5RkFRdEJ4Z0FoRUF5RUFRdEJLaUVRRElNQkMwSEhBQ0VRRElJQkMwSElBQ0VRRElFQkMwSEpBQ0VRRElBQkMwSEtBQ0VRREg4TFFjc0FJUkFNZmd0QnpRQWhFQXg5QzBITUFDRVFESHdMUWM0QUlSQU1ld3RCendBaEVBeDZDMEhRQUNFUURIa0xRZEVBSVJBTWVBdEIwZ0FoRUF4M0MwSFRBQ0VRREhZTFFkUUFJUkFNZFF0QjFnQWhFQXgwQzBIVkFDRVFESE1MUVFZaEVBeHlDMEhYQUNFUURIRUxRUVVoRUF4d0MwSFlBQ0VRREc4TFFRUWhFQXh1QzBIWkFDRVFERzBMUWRvQUlSQU1iQXRCMndBaEVBeHJDMEhjQUNFUURHb0xRUU1oRUF4cEMwSGRBQ0VRREdnTFFkNEFJUkFNWnd0QjN3QWhFQXhtQzBIaEFDRVFER1VMUWVBQUlSQU1aQXRCNGdBaEVBeGpDMEhqQUNFUURHSUxRUUloRUF4aEMwSGtBQ0VRREdBTFFlVUFJUkFNWHd0QjVnQWhFQXhlQzBIbkFDRVFERjBMUWVnQUlSQU1YQXRCNlFBaEVBeGJDMEhxQUNFUURGb0xRZXNBSVJBTVdRdEI3QUFoRUF4WUMwSHRBQ0VRREZjTFFlNEFJUkFNVmd0Qjd3QWhFQXhWQzBId0FDRVFERlFMUWZFQUlSQU1Vd3RCOGdBaEVBeFNDMEh6QUNFUURGRUxRZlFBSVJBTVVBdEI5UUFoRUF4UEMwSDJBQ0VRREU0TFFmY0FJUkFNVFF0QitBQWhFQXhNQzBINUFDRVFERXNMUWZvQUlSQU1TZ3RCK3dBaEVBeEpDMEg4QUNFUURFZ0xRZjBBSVJBTVJ3dEIvZ0FoRUF4R0MwSC9BQ0VRREVVTFFZQUJJUkFNUkF0QmdRRWhFQXhEQzBHQ0FTRVFERUlMUVlNQklSQU1RUXRCaEFFaEVBeEFDMEdGQVNFUUREOExRWVlCSVJBTVBndEJod0VoRUF3OUMwR0lBU0VRRER3TFFZa0JJUkFNT3d0QmlnRWhFQXc2QzBHTEFTRVFERGtMUVl3QklSQU1PQXRCalFFaEVBdzNDMEdPQVNFUUREWUxRWThCSVJBTU5RdEJrQUVoRUF3MEMwR1JBU0VRRERNTFFaSUJJUkFNTWd0Qmt3RWhFQXd4QzBHVUFTRVFEREFMUVpVQklSQU1Md3RCbGdFaEVBd3VDMEdYQVNFUURDMExRWmdCSVJBTUxBdEJtUUVoRUF3ckMwR2FBU0VRRENvTFFac0JJUkFNS1F0Qm5BRWhFQXdvQzBHZEFTRVFEQ2NMUVo0QklSQU1KZ3RCbndFaEVBd2xDMEdnQVNFUURDUUxRYUVCSVJBTUl3dEJvZ0VoRUF3aUMwR2pBU0VRRENFTFFhUUJJUkFNSUF0QnBRRWhFQXdmQzBHbUFTRVFEQjRMUWFjQklSQU1IUXRCcUFFaEVBd2NDMEdwQVNFUURCc0xRYW9CSVJBTUdndEJxd0VoRUF3WkMwR3NBU0VRREJnTFFhMEJJUkFNRnd0QnJnRWhFQXdXQzBFQklSQU1GUXRCcndFaEVBd1VDMEd3QVNFUURCTUxRYkVCSVJBTUVndEJzd0VoRUF3UkMwR3lBU0VRREJBTFFiUUJJUkFNRHd0QnRRRWhFQXdPQzBHMkFTRVFEQTBMUWJjQklSQU1EQXRCdUFFaEVBd0xDMEc1QVNFUURBb0xRYm9CSVJBTUNRdEJ1d0VoRUF3SUMwSEdBU0VRREFjTFFid0JJUkFNQmd0QnZRRWhFQXdGQzBHK0FTRVFEQVFMUWI4QklSQU1Bd3RCd0FFaEVBd0NDMEhDQVNFUURBRUxRY0VCSVJBTEEwQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRRHNjQkFBRUNBd1FGQmdjSUNRb0xEQTBPRHhBUkVoTVVGUllYR0JrYUd4d2VIeUFoSXlVb1AwQkJSRVZHUjBoSlNrdE1UVTlRVVZKVDNnTlhXVnRjWFdCaVpXWm5hR2xxYTJ4dGIzQnhjbk4wZFhaM2VIbDZlM3g5Zm9BQmdnR0ZBWVlCaHdHSkFZc0JqQUdOQVk0Qmp3R1FBWkVCbEFHVkFaWUJsd0dZQVprQm1nR2JBWndCblFHZUFaOEJvQUdoQWFJQm93R2tBYVVCcGdHbkFhZ0JxUUdxQWFzQnJBR3RBYTRCcndHd0FiRUJzZ0d6QWJRQnRRRzJBYmNCdUFHNUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQnh3SElBY2tCeWdITEFjd0J6UUhPQWM4QjBBSFJBZElCMHdIVUFkVUIxZ0hYQWRnQjJRSGFBZHNCM0FIZEFkNEI0QUhoQWVJQjR3SGtBZVVCNWdIbkFlZ0I2UUhxQWVzQjdBSHRBZTRCN3dId0FmRUI4Z0h6QVprQ3BBS3dBdjRDL2dJTElBRWlCQ0FDUnczekFVSGRBU0VRRFA4REN5QUJJaEFnQWtjTjNRRkJ3d0VoRUF6K0F3c2dBU0lCSUFKSERaQUJRZmNBSVJBTS9RTUxJQUVpQVNBQ1J3MkdBVUh2QUNFUURQd0RDeUFCSWdFZ0FrY05mMEhxQUNFUURQc0RDeUFCSWdFZ0FrY05lMEhvQUNFUURQb0RDeUFCSWdFZ0FrY05lRUhtQUNFUURQa0RDeUFCSWdFZ0FrY05Ha0VZSVJBTStBTUxJQUVpQVNBQ1J3MFVRUkloRUF6M0F3c2dBU0lCSUFKSERWbEJ4UUFoRUF6MkF3c2dBU0lCSUFKSERVcEJQeUVRRFBVREN5QUJJZ0VnQWtjTlNFRThJUkFNOUFNTElBRWlBU0FDUncxQlFURWhFQXp6QXdzZ0FDMEFMa0VCUmczckF3eUhBZ3NnQUNBQklnRWdBaERBZ0lDQUFFRUJSdzNtQVNBQVFnQTNBeUFNNXdFTElBQWdBU0lCSUFJUXRJQ0FnQUFpRUEzbkFTQUJJUUVNOVFJTEFrQWdBU0lCSUFKSERRQkJCaUVRRFBBREN5QUFJQUZCQVdvaUFTQUNFTHVBZ0lBQUloQU42QUVnQVNFQkRERUxJQUJDQURjRElFRVNJUkFNMVFNTElBRWlFQ0FDUncwclFSMGhFQXp0QXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFGQkVDRVFETlFEQzBFSElSQU03QU1MSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU41UUZCQ0NFUURPc0RDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRVVJUkFNMGdNTFFRa2hFQXpxQXdzZ0FTRUJJQUFwQXlCUURlUUJJQUVoQVF6eUFnc0NRQ0FCSWdFZ0FrY05BRUVMSVJBTTZRTUxJQUFnQVVFQmFpSUJJQUlRdG9DQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNsQVNBQklRRU04Z0lMSUFBZ0FTSUJJQUlRdUlDQWdBQWlFQTNtQVNBQklRRU1EUXNnQUNBQklnRWdBaEM2Z0lDQUFDSVFEZWNCSUFFaEFRendBZ3NDUUNBQklnRWdBa2NOQUVFUElSQU01UU1MSUFFdEFBQWlFRUU3UmcwSUlCQkJEVWNONkFFZ0FVRUJhaUVCRE84Q0N5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZBRWdBU0VCRFBJQ0N3TkFBa0FnQVMwQUFFSHd0WUNBQUdvdEFBQWlFRUVCUmcwQUlCQkJBa2NONndFZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0FVRUJhaUlCRUxtQWdJQUFJaEFONmdFZ0FTRUJEUFFDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJFaUVRRE9JREN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjZRRWdBU0VCREFvTElBRWlBU0FDUncwR1FSc2hFQXpnQXdzQ1FDQUJJZ0VnQWtjTkFFRVdJUkFNNEFNTElBQkJpb0NBZ0FBMkFnZ2dBQ0FCTmdJRUlBQWdBU0FDRUxpQWdJQUFJaEFONmdFZ0FTRUJRU0FoRUF6R0F3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUh3dDRDQUFHb3RBQUFpRUVFQ1JnMEFBa0FnRUVGL2FnNEU1UUhzQVFEckFld0JDeUFCUVFGcUlRRkJDQ0VRRE1nREN5QUJRUUZxSWdFZ0FrY05BQXRCRlNFUUROOERDMEVWSVJBTTNnTUxBMEFDUUNBQkxRQUFRZkM1Z0lBQWFpMEFBQ0lRUVFKR0RRQWdFRUYvYWc0RTNnSHNBZUFCNndIc0FRc2dBVUVCYWlJQklBSkhEUUFMUVJnaEVBemRBd3NDUUNBQklnRWdBa1lOQUNBQVFZdUFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJCeUVRRE1RREMwRVpJUkFNM0FNTElBRkJBV29oQVF3Q0N3SkFJQUVpRkNBQ1J3MEFRUm9oRUF6YkF3c2dGQ0VCQWtBZ0ZDMEFBRUZ6YWc0VTNRTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnSUE3Z0lMUVFBaEVDQUFRUUEyQWh3Z0FFR3ZpNENBQURZQ0VDQUFRUUkyQWd3Z0FDQVVRUUZxTmdJVUROb0RDd0pBSUFFdEFBQWlFRUU3UmcwQUlCQkJEVWNONkFFZ0FVRUJhaUVCRE9VQ0N5QUJRUUZxSVFFTFFTSWhFQXkvQXdzQ1FDQUJJaEFnQWtjTkFFRWNJUkFNMkFNTFFnQWhFU0FRSVFFZ0VDMEFBRUZRYWc0MzV3SG1BUUVDQXdRRkJnY0lBQUFBQUFBQUFBa0tDd3dORGdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRHhBUkVoTVVBQXRCSGlFUURMMERDMElDSVJFTTVRRUxRZ01oRVF6a0FRdENCQ0VSRE9NQkMwSUZJUkVNNGdFTFFnWWhFUXpoQVF0Q0J5RVJET0FCQzBJSUlSRU0zd0VMUWdraEVRemVBUXRDQ2lFUkROMEJDMElMSVJFTTNBRUxRZ3doRVF6YkFRdENEU0VSRE5vQkMwSU9JUkVNMlFFTFFnOGhFUXpZQVF0Q0NpRVJETmNCQzBJTElSRU0xZ0VMUWd3aEVRelZBUXRDRFNFUkROUUJDMElPSVJFTTB3RUxRZzhoRVF6U0FRdENBQ0VSQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQVFMUUFBUVZCcURqZmxBZVFCQUFFQ0F3UUZCZ2ZtQWVZQjVnSG1BZVlCNWdIbUFRZ0pDZ3NNRGVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0VPRHhBUkVoUG1BUXRDQWlFUkRPUUJDMElESVJFTTR3RUxRZ1FoRVF6aUFRdENCU0VSRE9FQkMwSUdJUkVNNEFFTFFnY2hFUXpmQVF0Q0NDRVJETjRCQzBJSklSRU0zUUVMUWdvaEVRemNBUXRDQ3lFUkROc0JDMElNSVJFTTJnRUxRZzBoRVF6WkFRdENEaUVSRE5nQkMwSVBJUkVNMXdFTFFnb2hFUXpXQVF0Q0N5RVJETlVCQzBJTUlSRU0xQUVMUWcwaEVRelRBUXRDRGlFUkROSUJDMElQSVJFTTBRRUxJQUJDQUNBQUtRTWdJaEVnQWlBQkloQnJyU0lTZlNJVElCTWdFVlliTndNZ0lCRWdFbFlpRkVVTjBnRkJIeUVRRE1BREN3SkFJQUVpQVNBQ1JnMEFJQUJCaVlDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFa0lSQU1wd01MUVNBaEVBeS9Bd3NnQUNBQkloQWdBaEMrZ0lDQUFFRi9hZzRGdGdFQXhRSUIwUUhTQVF0QkVTRVFES1FEQ3lBQVFRRTZBQzhnRUNFQkRMc0RDeUFCSWdFZ0FrY04wZ0ZCSkNFUURMc0RDeUFCSWcwZ0FrY05Ia0hHQUNFUURMb0RDeUFBSUFFaUFTQUNFTEtBZ0lBQUloQU4xQUVnQVNFQkRMVUJDeUFCSWhBZ0FrY05Ka0hRQUNFUURMZ0RDd0pBSUFFaUFTQUNSdzBBUVNnaEVBeTRBd3NnQUVFQU5nSUVJQUJCaklDQWdBQTJBZ2dnQUNBQklBRVFzWUNBZ0FBaUVBM1RBU0FCSVFFTTJBRUxBa0FnQVNJUUlBSkhEUUJCS1NFUURMY0RDeUFRTFFBQUlnRkJJRVlORkNBQlFRbEhEZE1CSUJCQkFXb2hBUXdWQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3WEMwRXFJUkFNdFFNTEFrQWdBU0lRSUFKSERRQkJLeUVRRExVREN3SkFJQkF0QUFBaUFVRUpSZzBBSUFGQklFY04xUUVMSUFBdEFDeEJDRVlOMHdFZ0VDRUJESkVEQ3dKQUlBRWlBU0FDUncwQVFTd2hFQXkwQXdzZ0FTMEFBRUVLUnczVkFTQUJRUUZxSVFFTXlRSUxJQUVpRGlBQ1J3M1ZBVUV2SVJBTXNnTUxBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFJQkJCZG1vT0JBRGNBZHdCQU5vQkN5QUJJUUVNNEFFTElBRkJBV29pQVNBQ1J3MEFDMEV4SVJBTXNRTUxRVEloRUNBQkloUWdBa1lOc0FNZ0FpQVVheUFBS0FJQUlnRnFJUlVnRkNBQmEwRURhaUVXQWtBRFFDQVVMUUFBSWhkQklISWdGeUFYUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWZDN2dJQUFhaTBBQUVjTkFRSkFJQUZCQTBjTkFFRUdJUUVNbGdNTElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FWTmdJQURMRURDeUFBUVFBMkFnQWdGQ0VCRE5rQkMwRXpJUkFnQVNJVUlBSkdEYThESUFJZ0ZHc2dBQ2dDQUNJQmFpRVZJQlFnQVd0QkNHb2hGZ0pBQTBBZ0ZDMEFBQ0lYUVNCeUlCY2dGMEcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUgwdTRDQUFHb3RBQUJIRFFFQ1FDQUJRUWhIRFFCQkJTRUJESlVEQ3lBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGVFlDQUF5d0F3c2dBRUVBTmdJQUlCUWhBUXpZQVF0Qk5DRVFJQUVpRkNBQ1JnMnVBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFWcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzBCQWtBZ0FVRUZSdzBBUVFjaEFReVVBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNcndNTElBQkJBRFlDQUNBVUlRRU0xd0VMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMNkFnQUJxTFFBQUloQkJBVVlOQUNBUVFRSkdEUW9nQVNFQkROMEJDeUFCUVFGcUlnRWdBa2NOQUF0Qk1DRVFESzREQzBFd0lSQU1yUU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQmRtb09CTmtCMmdIYUFka0IyZ0VMSUFGQkFXb2lBU0FDUncwQUMwRTRJUkFNclFNTFFUZ2hFQXlzQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBSUJCQkNVY05Bd3NnQVVFQmFpSUJJQUpIRFFBTFFUd2hFQXlyQXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FDQVFRWFpxRGdUYUFRRUIyZ0VBQ3lBUVFTeEdEZHNCQ3lBQklRRU1CQXNnQVVFQmFpSUJJQUpIRFFBTFFUOGhFQXlxQXdzZ0FTRUJETnNCQzBIQUFDRVFJQUVpRkNBQ1JnMm9BeUFDSUJScklBQW9BZ0FpQVdvaEZpQVVJQUZyUVFacUlSY0NRQU5BSUJRdEFBQkJJSElnQVVHQXdJQ0FBR290QUFCSERRRWdBVUVHUmcyT0F5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRmpZQ0FBeXBBd3NnQUVFQU5nSUFJQlFoQVF0Qk5pRVFESTREQ3dKQUlBRWlEeUFDUncwQVFjRUFJUkFNcHdNTElBQkJqSUNBZ0FBMkFnZ2dBQ0FQTmdJRUlBOGhBU0FBTFFBc1FYOXFEZ1ROQWRVQjF3SFpBWWNEQ3lBQlFRRnFJUUVNekFFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnY2lBUUlCQkJ2MzlxUWY4QmNVRWFTUnRCL3dGeEloQkJDVVlOQUNBUVFTQkdEUUFDUUFKQUFrQUNRQ0FRUVoxL2FnNFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVJBTWtRTUxJQUZCQVdvaEFVRXlJUkFNa0FNTElBRkJBV29oQVVFeklSQU1qd01MSUFFaEFRelFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUVWhFQXlsQXd0Qk5TRVFES1FEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFZQzhnSUFBYWkwQUFFRUJSZzBBSUFFaEFRelRBUXNnQVVFQmFpSUJJQUpIRFFBTFFUMGhFQXlrQXd0QlBTRVFES01EQ3lBQUlBRWlBU0FDRUxDQWdJQUFJaEFOMWdFZ0FTRUJEQUVMSUJCQkFXb2hBUXRCUENFUURJY0RDd0pBSUFFaUFTQUNSdzBBUWNJQUlSQU1vQU1MQWtBRFFBSkFJQUV0QUFCQmQyb09HQUFDL2dMK0FvUUQvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NENBUDRDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ3Z0FoRUF5Z0F3c2dBVUVCYWlFQklBQXRBQzFCQVhGRkRiMEJJQUVoQVF0QkxDRVFESVVEQ3lBQklnRWdBa2NOMHdGQnhBQWhFQXlkQXdzRFFBSkFJQUV0QUFCQmtNQ0FnQUJxTFFBQVFRRkdEUUFnQVNFQkRMY0NDeUFCUVFGcUlnRWdBa2NOQUF0QnhRQWhFQXljQXdzZ0RTMEFBQ0lRUVNCR0RiTUJJQkJCT2tjTmdRTWdBQ2dDQkNFQklBQkJBRFlDQkNBQUlBRWdEUkN2Z0lDQUFDSUJEZEFCSUExQkFXb2hBUXl6QWd0Qnh3QWhFQ0FCSWcwZ0FrWU5tZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFRmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1F3b0NBQUdvdEFBQkhEWUFESUFGQkJVWU45QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbWdNTFFjZ0FJUkFnQVNJTklBSkdEWmtESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkNXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJsc0tBZ0FCcUxRQUFSdzMvQWdKQUlBRkJDVWNOQUVFQ0lRRU05UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREprREN3SkFJQUVpRFNBQ1J3MEFRY2tBSVJBTW1RTUxBa0FDUUNBTkxRQUFJZ0ZCSUhJZ0FTQUJRYjkvYWtIL0FYRkJHa2tiUWY4QmNVR1NmMm9PQndDQUE0QURnQU9BQTRBREFZQURDeUFOUVFGcUlRRkJQaUVRRElBREN5QU5RUUZxSVFGQlB5RVFEUDhDQzBIS0FDRVFJQUVpRFNBQ1JnMlhBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFGcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhRENnSUFBYWkwQUFFY04vUUlnQVVFQlJnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlYQXd0Qnl3QWhFQ0FCSWcwZ0FrWU5sZ01nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFT2FpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR2l3b0NBQUdvdEFBQkhEZndDSUFGQkRrWU44QUlnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbGdNTFFjd0FJUkFnQVNJTklBSkdEWlVESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkQyb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkJ3TUtBZ0FCcUxRQUFSdzM3QWdKQUlBRkJEMGNOQUVFRElRRU04UUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpVREMwSE5BQ0VRSUFFaURTQUNSZzJVQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRVnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZERDZ0lBQWFpMEFBRWNOK2dJQ1FDQUJRUVZIRFFCQkJDRUJEUEFDQ3lBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5VUF3c0NRQ0FCSWcwZ0FrY05BRUhPQUNFUURKUURDd0pBQWtBQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVoxL2FnNFRBUDBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDL1FMOUFnSDlBdjBDL1FJQ0EvMENDeUFOUVFGcUlRRkJ3UUFoRUF6OUFnc2dEVUVCYWlFQlFjSUFJUkFNL0FJTElBMUJBV29oQVVIREFDRVFEUHNDQ3lBTlFRRnFJUUZCeEFBaEVBejZBZ3NDUUNBQklnRWdBa1lOQUNBQVFZMkFnSUFBTmdJSUlBQWdBVFlDQkNBQklRRkJ4UUFoRUF6NkFndEJ6d0FoRUF5U0F3c2dFQ0VCQWtBQ1FDQVFMUUFBUVhacURnUUJxQUtvQWdDb0Fnc2dFRUVCYWlFQkMwRW5JUkFNK0FJTEFrQWdBU0lCSUFKSERRQkIwUUFoRUF5UkF3c0NRQ0FCTFFBQVFTQkdEUUFnQVNFQkRJMEJDeUFCUVFGcUlRRWdBQzBBTFVFQmNVVU54d0VnQVNFQkRJd0JDeUFCSWhjZ0FrY055QUZCMGdBaEVBeVBBd3RCMHdBaEVDQUJJaFFnQWtZTmpnTWdBaUFVYXlBQUtBSUFJZ0ZxSVJZZ0ZDQUJhMEVCYWlFWEEwQWdGQzBBQUNBQlFkYkNnSUFBYWkwQUFFY056QUVnQVVFQlJnM0hBU0FCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlPQXdzQ1FDQUJJZ0VnQWtjTkFFSFZBQ0VRREk0REN5QUJMUUFBUVFwSERjd0JJQUZCQVdvaEFRekhBUXNDUUNBQklnRWdBa2NOQUVIV0FDRVFESTBEQ3dKQUFrQWdBUzBBQUVGMmFnNEVBTTBCelFFQnpRRUxJQUZCQVdvaEFRekhBUXNnQVVFQmFpRUJRY29BSVJBTTh3SUxJQUFnQVNJQklBSVFyb0NBZ0FBaUVBM0xBU0FCSVFGQnpRQWhFQXp5QWdzZ0FDMEFLVUVpUmcyRkF3eW1BZ3NDUUNBQklnRWdBa2NOQUVIYkFDRVFESW9EQzBFQUlSUkJBU0VYUVFFaEZrRUFJUkFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQVMwQUFFRlFhZzRLMUFIVEFRQUJBZ01FQlFZSTFRRUxRUUloRUF3R0MwRURJUkFNQlF0QkJDRVFEQVFMUVFVaEVBd0RDMEVHSVJBTUFndEJCeUVRREFFTFFRZ2hFQXRCQUNFWFFRQWhGa0VBSVJRTXpBRUxRUWtoRUVFQklSUkJBQ0VYUVFBaEZnekxBUXNDUUNBQklnRWdBa2NOQUVIZEFDRVFESWtEQ3lBQkxRQUFRUzVIRGN3QklBRkJBV29oQVF5bUFnc2dBU0lCSUFKSERjd0JRZDhBSVJBTWh3TUxBa0FnQVNJQklBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFkQUFJUkFNN2dJTFFlQUFJUkFNaGdNTFFlRUFJUkFnQVNJQklBSkdEWVVESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhpd29DQUFHb3RBQUJIRGMwQklCUkJBMFlOekFFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWhRTUxRZUlBSVJBZ0FTSUJJQUpHRFlRRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBbW9oRndOQUlBRXRBQUFnRkVIbXdvQ0FBR290QUFCSERjd0JJQlJCQWtZTnpnRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oQU1MUWVNQUlSQWdBU0lCSUFKR0RZTURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQTJvaEZ3TkFJQUV0QUFBZ0ZFSHB3b0NBQUdvdEFBQkhEY3NCSUJSQkEwWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNZ3dNTEFrQWdBU0lCSUFKSERRQkI1UUFoRUF5REF3c2dBQ0FCUVFGcUlnRWdBaENvZ0lDQUFDSVFEYzBCSUFFaEFVSFdBQ0VRRE9rQ0N3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFJaEJCSUVZTkFBSkFBa0FDUUNBUVFiaC9hZzRMQUFIUEFjOEJ6d0hQQWM4Qnp3SFBBYzhCQXM4QkN5QUJRUUZxSVFGQjBnQWhFQXp0QWdzZ0FVRUJhaUVCUWRNQUlSQU03QUlMSUFGQkFXb2hBVUhVQUNFUURPc0NDeUFCUVFGcUlnRWdBa2NOQUF0QjVBQWhFQXlDQXd0QjVBQWhFQXlCQXdzRFFBSkFJQUV0QUFCQjhNS0FnQUJxTFFBQUloQkJBVVlOQUNBUVFYNXFEZ1BQQWRBQjBRSFNBUXNnQVVFQmFpSUJJQUpIRFFBTFFlWUFJUkFNZ0FNTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQkRBTUxRZWNBSVJBTS93SUxBMEFDUUNBQkxRQUFRZkRFZ0lBQWFpMEFBQ0lRUVFGR0RRQUNRQ0FRUVg1cURnVFNBZE1CMUFFQTFRRUxJQUVoQVVIWEFDRVFET2NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI2QUFoRUF6K0Fnc0NRQ0FCSWdFZ0FrY05BRUhwQUNFUURQNENDd0pBSUFFdEFBQWlFRUYyYWc0YXVnSFZBZFVCdkFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIS0FkVUIxUUVBMHdFTElBRkJBV29oQVF0QkJpRVFET01DQ3dOQUFrQWdBUzBBQUVId3hvQ0FBR290QUFCQkFVWU5BQ0FCSVFFTW5nSUxJQUZCQVdvaUFTQUNSdzBBQzBIcUFDRVFEUHNDQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVF3REMwSHJBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1J3MEFRZXdBSVJBTStnSUxJQUZCQVdvaEFRd0JDd0pBSUFFaUFTQUNSdzBBUWUwQUlSQU0rUUlMSUFGQkFXb2hBUXRCQkNFUURONENDd0pBSUFFaUZDQUNSdzBBUWU0QUlSQU05d0lMSUJRaEFRSkFBa0FDUUNBVUxRQUFRZkRJZ0lBQWFpMEFBRUYvYWc0SDFBSFZBZFlCQUp3Q0FRTFhBUXNnRkVFQmFpRUJEQW9MSUJSQkFXb2hBUXpOQVF0QkFDRVFJQUJCQURZQ0hDQUFRWnVTZ0lBQU5nSVFJQUJCQnpZQ0RDQUFJQlJCQVdvMkFoUU05Z0lMQWtBRFFBSkFJQUV0QUFCQjhNaUFnQUJxTFFBQUloQkJCRVlOQUFKQUFrQWdFRUYvYWc0SDBnSFRBZFFCMlFFQUJBSFpBUXNnQVNFQlFkb0FJUkFNNEFJTElBRkJBV29oQVVIY0FDRVFETjhDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI3d0FoRUF6MkFnc2dBVUVCYWlFQkRNc0JDd0pBSUFFaUZDQUNSdzBBUWZBQUlSQU05UUlMSUJRdEFBQkJMMGNOMUFFZ0ZFRUJhaUVCREFZTEFrQWdBU0lVSUFKSERRQkI4UUFoRUF6MEFnc0NRQ0FVTFFBQUlnRkJMMGNOQUNBVVFRRnFJUUZCM1FBaEVBemJBZ3NnQVVGMmFpSUVRUlpMRGRNQlFRRWdCSFJCaVlDQUFuRkZEZE1CRE1vQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFVSGVBQ0VRRE5vQ0MwSHlBQ0VRRFBJQ0N3SkFJQUVpRkNBQ1J3MEFRZlFBSVJBTThnSUxJQlFoQVFKQUlCUXRBQUJCOE15QWdBQnFMUUFBUVg5cURnUEpBcFFDQU5RQkMwSGhBQ0VRRE5nQ0N3SkFJQUVpRkNBQ1JnMEFBMEFDUUNBVUxRQUFRZkRLZ0lBQWFpMEFBQ0lCUVFOR0RRQUNRQ0FCUVg5cURnTExBZ0RWQVFzZ0ZDRUJRZDhBSVJBTTJnSUxJQlJCQVdvaUZDQUNSdzBBQzBIekFDRVFEUEVDQzBIekFDRVFEUEFDQ3dKQUlBRWlBU0FDUmcwQUlBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUhnQUNFUUROY0NDMEgxQUNFUURPOENDd0pBSUFFaUFTQUNSdzBBUWZZQUlSQU03d0lMSUFCQmo0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFRdEJBeUVRRE5RQ0N3TkFJQUV0QUFCQklFY053d0lnQVVFQmFpSUJJQUpIRFFBTFFmY0FJUkFNN0FJTEFrQWdBU0lCSUFKSERRQkIrQUFoRUF6c0Fnc2dBUzBBQUVFZ1J3M09BU0FCUVFGcUlRRU03d0VMSUFBZ0FTSUJJQUlRcklDQWdBQWlFQTNPQVNBQklRRU1qZ0lMQWtBZ0FTSUVJQUpIRFFCQitnQWhFQXpxQWdzZ0JDMEFBRUhNQUVjTjBRRWdCRUVCYWlFQlFSTWhFQXpQQVFzQ1FDQUJJZ1FnQWtjTkFFSDdBQ0VRRE9rQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBRFFDQUVMUUFBSUFGQjhNNkFnQUJxTFFBQVJ3M1FBU0FCUVFWR0RjNEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRZnNBSVJBTTZBSUxBa0FnQVNJRUlBSkhEUUJCL0FBaEVBem9BZ3NDUUFKQUlBUXRBQUJCdlg5cURnd0EwUUhSQWRFQjBRSFJBZEVCMFFIUkFkRUIwUUVCMFFFTElBUkJBV29oQVVIbUFDRVFETThDQ3lBRVFRRnFJUUZCNXdBaEVBek9BZ3NDUUNBQklnUWdBa2NOQUVIOUFDRVFET2NDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERjOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSDlBQ0VRRE9jQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJBaEVBek1BUXNDUUNBQklnUWdBa2NOQUVIK0FDRVFET1lDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIMnpvQ0FBR290QUFCSERjNEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSCtBQ0VRRE9ZQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJZaEVBekxBUXNDUUNBQklnUWdBa2NOQUVIL0FDRVFET1VDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVIOHpvQ0FBR290QUFCSERjMEJJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSC9BQ0VRRE9VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFVaEVBektBUXNDUUNBQklnUWdBa2NOQUVHQUFTRVFET1FDQ3lBRUxRQUFRZGtBUnczTEFTQUVRUUZxSVFGQkNDRVFETWtCQ3dKQUlBRWlCQ0FDUncwQVFZRUJJUkFNNHdJTEFrQUNRQ0FFTFFBQVFiSi9hZzREQU13QkFjd0JDeUFFUVFGcUlRRkI2d0FoRUF6S0Fnc2dCRUVCYWlFQlFld0FJUkFNeVFJTEFrQWdBU0lFSUFKSERRQkJnZ0VoRUF6aUFnc0NRQUpBSUFRdEFBQkJ1SDlxRGdnQXl3SExBY3NCeXdITEFjc0JBY3NCQ3lBRVFRRnFJUUZCNmdBaEVBekpBZ3NnQkVFQmFpRUJRZTBBSVJBTXlBSUxBa0FnQVNJRUlBSkhEUUJCZ3dFaEVBemhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSQWdCQ0FCYTBFQ2FpRVVBa0FEUUNBRUxRQUFJQUZCZ00rQWdBQnFMUUFBUnczSkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQkEyQWdCQmd3RWhFQXpoQWd0QkFDRVFJQUJCQURZQ0FDQVVRUUZxSVFFTXhnRUxBa0FnQVNJRUlBSkhEUUJCaEFFaEVBemdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCZzgrQWdBQnFMUUFBUnczSUFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmhBRWhFQXpnQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVqSVJBTXhRRUxBa0FnQVNJRUlBSkhEUUJCaFFFaEVBemZBZ3NDUUFKQUlBUXRBQUJCdEg5cURnZ0F5QUhJQWNnQnlBSElBY2dCQWNnQkN5QUVRUUZxSVFGQjd3QWhFQXpHQWdzZ0JFRUJhaUVCUWZBQUlSQU14UUlMQWtBZ0FTSUVJQUpIRFFCQmhnRWhFQXplQWdzZ0JDMEFBRUhGQUVjTnhRRWdCRUVCYWlFQkRJTUNDd0pBSUFFaUJDQUNSdzBBUVljQklSQU0zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUVlqUGdJQUFhaTBBQUVjTnhRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZY0JJUkFNM1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCTFNFUURNSUJDd0pBSUFFaUJDQUNSdzBBUVlnQklSQU0zQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkNHb2hFQUpBQTBBZ0JDMEFBQ0FCUWREUGdJQUFhaTBBQUVjTnhBRWdBVUVJUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZZ0JJUkFNM0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCS1NFUURNRUJDd0pBSUFFaUFTQUNSdzBBUVlrQklSQU0yd0lMUVFFaEVDQUJMUUFBUWQ4QVJ3M0FBU0FCUVFGcUlRRU1nUUlMQWtBZ0FTSUVJQUpIRFFCQmlnRWhFQXphQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQTBBZ0JDMEFBQ0FCUVl6UGdJQUFhaTBBQUVjTndRRWdBVUVCUmcydkFpQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR0tBU0VRRE5rQ0N3SkFJQUVpQkNBQ1J3MEFRWXNCSVJBTTJRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWTdQZ0lBQWFpMEFBRWNOd1FFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlzQklSQU0yUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBaUVRREw0QkN3SkFJQUVpQkNBQ1J3MEFRWXdCSVJBTTJBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkRQZ0lBQWFpMEFBRWNOd0FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVl3QklSQU0yQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIeUVRREwwQkN3SkFJQUVpQkNBQ1J3MEFRWTBCSVJBTTF3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOdndFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVkwQklSQU0xd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJDU0VRREx3QkN3SkFJQUVpQkNBQ1J3MEFRWTRCSVJBTTFnSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFMOEJ2d0cvQWI4QnZ3RUJ2d0VMSUFSQkFXb2hBVUg0QUNFUURMMENDeUFFUVFGcUlRRkIrUUFoRUF5OEFnc0NRQ0FCSWdRZ0FrY05BRUdQQVNFUUROVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdSejRDQUFHb3RBQUJIRGIwQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUEFTRVFETlVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmdoRUF5NkFRc0NRQ0FCSWdRZ0FrY05BRUdRQVNFUUROUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUdYejRDQUFHb3RBQUJIRGJ3QklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUUFTRVFETlFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUmNoRUF5NUFRc0NRQ0FCSWdRZ0FrY05BRUdSQVNFUUROTUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUdhejRDQUFHb3RBQUJIRGJzQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHUkFTRVFETk1DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlVoRUF5NEFRc0NRQ0FCSWdRZ0FrY05BRUdTQVNFUUROSUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUdoejRDQUFHb3RBQUJIRGJvQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHU0FTRVFETklDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUjRoRUF5M0FRc0NRQ0FCSWdRZ0FrY05BRUdUQVNFUURORUNDeUFFTFFBQVFjd0FSdzI0QVNBRVFRRnFJUUZCQ2lFUURMWUJDd0pBSUFRZ0FrY05BRUdVQVNFUUROQUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0R3QzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFRRzVBUXNnQkVFQmFpRUJRZjRBSVJBTXR3SUxJQVJCQVdvaEFVSC9BQ0VRRExZQ0N3SkFJQVFnQWtjTkFFR1ZBU0VRRE04Q0N3SkFBa0FnQkMwQUFFRy9mMm9PQXdDNEFRRzRBUXNnQkVFQmFpRUJRZjBBSVJBTXRnSUxJQVJCQVdvaEJFR0FBU0VRRExVQ0N3SkFJQVFnQWtjTkFFR1dBU0VRRE00Q0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVR256NENBQUdvdEFBQkhEYllCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdXQVNFUURNNENDeUFBUVFBMkFnQWdFRUVCYWlFQlFRc2hFQXl6QVFzQ1FDQUVJQUpIRFFCQmx3RWhFQXpOQWdzQ1FBSkFBa0FDUUNBRUxRQUFRVk5xRGlNQXVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFRRzRBYmdCdUFHNEFiZ0JBcmdCdUFHNEFRTzRBUXNnQkVFQmFpRUJRZnNBSVJBTXRnSUxJQVJCQVdvaEFVSDhBQ0VRRExVQ0N5QUVRUUZxSVFSQmdRRWhFQXkwQWdzZ0JFRUJhaUVFUVlJQklSQU1zd0lMQWtBZ0JDQUNSdzBBUVpnQklSQU16QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWFuUGdJQUFhaTBBQUVjTnRBRWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaZ0JJUkFNekFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR1NFUURMRUJDd0pBSUFRZ0FrY05BRUdaQVNFUURNc0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUd1ejRDQUFHb3RBQUJIRGJNQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHWkFTRVFETXNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUVloRUF5d0FRc0NRQ0FFSUFKSERRQkJtZ0VoRUF6S0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ0TStBZ0FCcUxRQUFSdzJ5QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbWdFaEVBektBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWNJUkFNcndFTEFrQWdCQ0FDUncwQVFac0JJUkFNeVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFiYlBnSUFBYWkwQUFFY05zUUVnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWnNCSVJBTXlRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkp5RVFESzRCQ3dKQUlBUWdBa2NOQUVHY0FTRVFETWdDQ3dKQUFrQWdCQzBBQUVHc2Yyb09BZ0FCc1FFTElBUkJBV29oQkVHR0FTRVFESzhDQ3lBRVFRRnFJUVJCaHdFaEVBeXVBZ3NDUUNBRUlBSkhEUUJCblFFaEVBekhBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdU0rQWdBQnFMUUFBUncydkFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm5RRWhFQXpIQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVtSVJBTXJBRUxBa0FnQkNBQ1J3MEFRWjRCSVJBTXhnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYnJQZ0lBQWFpMEFBRWNOcmdFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVo0QklSQU14Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJBeUVRREtzQkN3SkFJQVFnQWtjTkFFR2ZBU0VRRE1VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYTBCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdmQVNFUURNVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRd2hFQXlxQVFzQ1FDQUVJQUpIRFFCQm9BRWhFQXpFQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQnZNK0FnQUJxTFFBQVJ3MnNBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJvQUVoRUF6RUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFTklSQU1xUUVMQWtBZ0JDQUNSdzBBUWFFQklSQU13d0lMQWtBQ1FDQUVMUUFBUWJwL2FnNExBS3dCckFHc0Fhd0JyQUdzQWF3QnJBR3NBUUdzQVFzZ0JFRUJhaUVFUVlzQklSQU1xZ0lMSUFSQkFXb2hCRUdNQVNFUURLa0NDd0pBSUFRZ0FrY05BRUdpQVNFUURNSUNDeUFFTFFBQVFkQUFSdzJwQVNBRVFRRnFJUVFNNlFFTEFrQWdCQ0FDUncwQVFhTUJJUkFNd1FJTEFrQUNRQ0FFTFFBQVFiZC9hZzRIQWFvQnFnR3FBYW9CcWdFQXFnRUxJQVJCQVdvaEJFR09BU0VRREtnQ0N5QUVRUUZxSVFGQklpRVFES1lCQ3dKQUlBUWdBa2NOQUVHa0FTRVFETUFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIQXo0Q0FBR290QUFCSERhZ0JJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2tBU0VRRE1BQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVIwaEVBeWxBUXNDUUNBRUlBSkhEUUJCcFFFaEVBeS9BZ3NDUUFKQUlBUXRBQUJCcm45cURnTUFxQUVCcUFFTElBUkJBV29oQkVHUUFTRVFES1lDQ3lBRVFRRnFJUUZCQkNFUURLUUJDd0pBSUFRZ0FrY05BRUdtQVNFUURMNENDd0pBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFDcUFhb0JxZ0dxQWFvQnFnR3FBYW9CcWdHcUFRR3FBYW9CQXFvQnFnRURxZ0dxQVFTcUFRc2dCRUVCYWlFRVFZZ0JJUkFNcUFJTElBUkJBV29oQkVHSkFTRVFES2NDQ3lBRVFRRnFJUVJCaWdFaEVBeW1BZ3NnQkVFQmFpRUVRWThCSVJBTXBRSUxJQVJCQVdvaEJFR1JBU0VRREtRQ0N3SkFJQVFnQWtjTkFFR25BU0VRREwwQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYVVCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUduQVNFUURMMENDeUFBUVFBMkFnQWdFRUVCYWlFQlFSRWhFQXlpQVFzQ1FDQUVJQUpIRFFCQnFBRWhFQXk4QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQndzK0FnQUJxTFFBQVJ3MmtBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJxQUVoRUF5OEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFc0lSQU1vUUVMQWtBZ0JDQUNSdzBBUWFrQklSQU11d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJHb2hFQUpBQTBBZ0JDMEFBQ0FCUWNYUGdJQUFhaTBBQUVjTm93RWdBVUVFUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFha0JJUkFNdXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCS3lFUURLQUJDd0pBSUFRZ0FrY05BRUdxQVNFUURMb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhLejRDQUFHb3RBQUJIRGFJQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHcUFTRVFETG9DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUlFoRUF5ZkFRc0NRQ0FFSUFKSERRQkJxd0VoRUF5NUFnc0NRQUpBQWtBQ1FDQUVMUUFBUWI1L2FnNFBBQUVDcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCcEFHa0FRT2tBUXNnQkVFQmFpRUVRWk1CSVJBTW9nSUxJQVJCQVdvaEJFR1VBU0VRREtFQ0N5QUVRUUZxSVFSQmxRRWhFQXlnQWdzZ0JFRUJhaUVFUVpZQklSQU1ud0lMQWtBZ0JDQUNSdzBBUWF3QklSQU11QUlMSUFRdEFBQkJ4UUJIRFo4QklBUkJBV29oQkF6Z0FRc0NRQ0FFSUFKSERRQkJyUUVoRUF5M0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ6YytBZ0FCcUxRQUFSdzJmQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCclFFaEVBeTNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU9JUkFNbkFFTEFrQWdCQ0FDUncwQVFhNEJJUkFNdGdJTElBUXRBQUJCMEFCSERaMEJJQVJCQVdvaEFVRWxJUkFNbXdFTEFrQWdCQ0FDUncwQVFhOEJJUkFNdFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY05uUUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYThCSVJBTXRRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktpRVFESm9CQ3dKQUlBUWdBa2NOQUVHd0FTRVFETFFDQ3dKQUFrQWdCQzBBQUVHcmYyb09Dd0NkQVowQm5RR2RBWjBCblFHZEFaMEJuUUVCblFFTElBUkJBV29oQkVHYUFTRVFESnNDQ3lBRVFRRnFJUVJCbXdFaEVBeWFBZ3NDUUNBRUlBSkhEUUJCc1FFaEVBeXpBZ3NDUUFKQUlBUXRBQUJCdjM5cURoUUFuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JBWndCQ3lBRVFRRnFJUVJCbVFFaEVBeWFBZ3NnQkVFQmFpRUVRWndCSVJBTW1RSUxBa0FnQkNBQ1J3MEFRYklCSVJBTXNnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZG5QZ0lBQWFpMEFBRWNObWdFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJJQklSQU1zZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJJU0VRREpjQkN3SkFJQVFnQWtjTkFFR3pBU0VRRExFQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVpxSVJBQ1FBTkFJQVF0QUFBZ0FVSGR6NENBQUdvdEFBQkhEWmtCSUFGQkJrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd6QVNFUURMRUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSb2hFQXlXQVFzQ1FDQUVJQUpIRFFCQnRBRWhFQXl3QWdzQ1FBSkFBa0FnQkMwQUFFRzdmMm9PRVFDYUFab0JtZ0dhQVpvQm1nR2FBWm9CbWdFQm1nR2FBWm9CbWdHYUFRS2FBUXNnQkVFQmFpRUVRWjBCSVJBTW1BSUxJQVJCQVdvaEJFR2VBU0VRREpjQ0N5QUVRUUZxSVFSQm53RWhFQXlXQWdzQ1FDQUVJQUpIRFFCQnRRRWhFQXl2QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUZhaUVRQWtBRFFDQUVMUUFBSUFGQjVNK0FnQUJxTFFBQVJ3MlhBU0FCUVFWR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ0UUVoRUF5dkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFb0lSQU1sQUVMQWtBZ0JDQUNSdzBBUWJZQklSQU1yZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWVyUGdJQUFhaTBBQUVjTmxnRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiWUJJUkFNcmdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQnlFUURKTUJDd0pBSUFRZ0FrY05BRUczQVNFUURLMENDd0pBQWtBZ0JDMEFBRUc3ZjJvT0RnQ1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBWllCbGdFQmxnRUxJQVJCQVdvaEJFR2hBU0VRREpRQ0N5QUVRUUZxSVFSQm9nRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQnVBRWhFQXlzQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQjdjK0FnQUJxTFFBQVJ3MlVBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJ1QUVoRUF5c0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFU0lSQU1rUUVMQWtBZ0JDQUNSdzBBUWJrQklSQU1xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTmt3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFia0JJUkFNcXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCSUNFUURKQUJDd0pBSUFRZ0FrY05BRUc2QVNFUURLb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUh5ejRDQUFHb3RBQUJIRFpJQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNkFTRVFES29DQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUThoRUF5UEFRc0NRQ0FFSUFKSERRQkJ1d0VoRUF5cEFnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQWtnR1NBWklCa2dHU0FRR1NBUXNnQkVFQmFpRUVRYVVCSVJBTWtBSUxJQVJCQVdvaEJFR21BU0VRREk4Q0N3SkFJQVFnQWtjTkFFRzhBU0VRREtnQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUWRxSVJBQ1FBTkFJQVF0QUFBZ0FVSDB6NENBQUdvdEFBQkhEWkFCSUFGQkIwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUc4QVNFUURLZ0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSc2hFQXlOQVFzQ1FDQUVJQUpIRFFCQnZRRWhFQXluQWdzQ1FBSkFBa0FnQkMwQUFFRytmMm9PRWdDUkFaRUJrUUdSQVpFQmtRR1JBWkVCa1FFQmtRR1JBWkVCa1FHUkFaRUJBcEVCQ3lBRVFRRnFJUVJCcEFFaEVBeVBBZ3NnQkVFQmFpRUVRYWNCSVJBTWpnSUxJQVJCQVdvaEJFR29BU0VRREkwQ0N3SkFJQVFnQWtjTkFFRytBU0VRREtZQ0N5QUVMUUFBUWM0QVJ3Mk5BU0FFUVFGcUlRUU16d0VMQWtBZ0JDQUNSdzBBUWI4QklSQU1wUUlMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdCQzBBQUVHL2Yyb09GUUFCQWdPY0FRUUZCcHdCbkFHY0FRY0lDUW9MbkFFTURRNFBuQUVMSUFSQkFXb2hBVUhvQUNFUURKb0NDeUFFUVFGcUlRRkI2UUFoRUF5WkFnc2dCRUVCYWlFQlFlNEFJUkFNbUFJTElBUkJBV29oQVVIeUFDRVFESmNDQ3lBRVFRRnFJUUZCOHdBaEVBeVdBZ3NnQkVFQmFpRUJRZllBSVJBTWxRSUxJQVJCQVdvaEFVSDNBQ0VRREpRQ0N5QUVRUUZxSVFGQitnQWhFQXlUQWdzZ0JFRUJhaUVFUVlNQklSQU1rZ0lMSUFSQkFXb2hCRUdFQVNFUURKRUNDeUFFUVFGcUlRUkJoUUVoRUF5UUFnc2dCRUVCYWlFRVFaSUJJUkFNandJTElBUkJBV29oQkVHWUFTRVFESTRDQ3lBRVFRRnFJUVJCb0FFaEVBeU5BZ3NnQkVFQmFpRUVRYU1CSVJBTWpBSUxJQVJCQVdvaEJFR3FBU0VRRElzQ0N3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFR3JBU0VRRElzQ0MwSEFBU0VRREtNQ0N5QUFJQVVnQWhDcWdJQ0FBQ0lCRFlzQklBVWhBUXhjQ3dKQUlBWWdBa1lOQUNBR1FRRnFJUVVNalFFTFFjSUJJUkFNb1FJTEEwQUNRQ0FRTFFBQVFYWnFEZ1NNQVFBQWp3RUFDeUFRUVFGcUloQWdBa2NOQUF0Qnd3RWhFQXlnQWdzQ1FDQUhJQUpHRFFBZ0FFR1JnSUNBQURZQ0NDQUFJQWMyQWdRZ0J5RUJRUUVoRUF5SEFndEJ4QUVoRUF5ZkFnc0NRQ0FISUFKSERRQkJ4UUVoRUF5ZkFnc0NRQUpBSUFjdEFBQkJkbW9PQkFIT0FjNEJBTTRCQ3lBSFFRRnFJUVlNalFFTElBZEJBV29oQlF5SkFRc0NRQ0FISUFKSERRQkJ4Z0VoRUF5ZUFnc0NRQUpBSUFjdEFBQkJkbW9PRndHUEFZOEJBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBUUNQQVFzZ0IwRUJhaUVIQzBHd0FTRVFESVFDQ3dKQUlBZ2dBa2NOQUVISUFTRVFESjBDQ3lBSUxRQUFRU0JIRFkwQklBQkJBRHNCTWlBSVFRRnFJUUZCc3dFaEVBeURBZ3NnQVNFWEFrQURRQ0FYSWdjZ0FrWU5BU0FITFFBQVFWQnFRZjhCY1NJUVFRcFBEY3dCQWtBZ0FDOEJNaUlVUVprelN3MEFJQUFnRkVFS2JDSVVPd0V5SUJCQi8vOERjeUFVUWY3L0EzRkpEUUFnQjBFQmFpRVhJQUFnRkNBUWFpSVFPd0V5SUJCQi8vOERjVUhvQjBrTkFRc0xRUUFoRUNBQVFRQTJBaHdnQUVIQmlZQ0FBRFlDRUNBQVFRMDJBZ3dnQUNBSFFRRnFOZ0lVREp3Q0MwSEhBU0VRREpzQ0N5QUFJQWdnQWhDdWdJQ0FBQ0lRUlEzS0FTQVFRUlZIRFl3QklBQkJ5QUUyQWh3Z0FDQUlOZ0lVSUFCQnlaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeWFBZ3NDUUNBSklBSkhEUUJCekFFaEVBeWFBZ3RCQUNFVVFRRWhGMEVCSVJaQkFDRVFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQWt0QUFCQlVHb09DcFlCbFFFQUFRSURCQVVHQ0pjQkMwRUNJUkFNQmd0QkF5RVFEQVVMUVFRaEVBd0VDMEVGSVJBTUF3dEJCaUVRREFJTFFRY2hFQXdCQzBFSUlSQUxRUUFoRjBFQUlSWkJBQ0VVREk0QkMwRUpJUkJCQVNFVVFRQWhGMEVBSVJZTWpRRUxBa0FnQ2lBQ1J3MEFRYzRCSVJBTW1RSUxJQW90QUFCQkxrY05qZ0VnQ2tFQmFpRUpETW9CQ3lBTElBSkhEWTRCUWRBQklSQU1sd0lMQWtBZ0N5QUNSZzBBSUFCQmpvQ0FnQUEyQWdnZ0FDQUxOZ0lFUWJjQklSQU0vZ0VMUWRFQklSQU1sZ0lMQWtBZ0JDQUNSdzBBUWRJQklSQU1sZ0lMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkJHb2hDd05BSUFRdEFBQWdFRUg4ejRDQUFHb3RBQUJIRFk0QklCQkJCRVlONlFFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjBnRWhFQXlWQWdzZ0FDQU1JQUlRcklDQWdBQWlBUTJOQVNBTUlRRU11QUVMQWtBZ0JDQUNSdzBBUWRRQklSQU1sQUlMSUFJZ0JHc2dBQ2dDQUNJUWFpRVVJQVFnRUd0QkFXb2hEQU5BSUFRdEFBQWdFRUdCMElDQUFHb3RBQUJIRFk4QklCQkJBVVlOamdFZ0VFRUJhaUVRSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQjFBRWhFQXlUQWdzQ1FDQUVJQUpIRFFCQjFnRWhFQXlUQWdzZ0FpQUVheUFBS0FJQUloQnFJUlFnQkNBUWEwRUNhaUVMQTBBZ0JDMEFBQ0FRUVlQUWdJQUFhaTBBQUVjTmpnRWdFRUVDUmcyUUFTQVFRUUZxSVJBZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFSFdBU0VRREpJQ0N3SkFJQVFnQWtjTkFFSFhBU0VRREpJQ0N3SkFBa0FnQkMwQUFFRzdmMm9PRUFDUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFZOEJDeUFFUVFGcUlRUkJ1d0VoRUF6NUFRc2dCRUVCYWlFRVFid0JJUkFNK0FFTEFrQWdCQ0FDUncwQVFkZ0JJUkFNa1FJTElBUXRBQUJCeUFCSERZd0JJQVJCQVdvaEJBekVBUXNDUUNBRUlBSkdEUUFnQUVHUWdJQ0FBRFlDQ0NBQUlBUTJBZ1JCdmdFaEVBejNBUXRCMlFFaEVBeVBBZ3NDUUNBRUlBSkhEUUJCMmdFaEVBeVBBZ3NnQkMwQUFFSElBRVlOd3dFZ0FFRUJPZ0FvRExrQkN5QUFRUUk2QUM4Z0FDQUVJQUlRcG9DQWdBQWlFQTJOQVVIQ0FTRVFEUFFCQ3lBQUxRQW9RWDlxRGdLM0Fia0J1QUVMQTBBQ1FDQUVMUUFBUVhacURnUUFqZ0dPQVFDT0FRc2dCRUVCYWlJRUlBSkhEUUFMUWQwQklSQU1pd0lMSUFCQkFEb0FMeUFBTFFBdFFRUnhSUTJFQWdzZ0FFRUFPZ0F2SUFCQkFUb0FOQ0FCSVFFTWpBRUxJQkJCRlVZTjJnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU1pQUlMQWtBZ0FDQVFJQUlRdElDQWdBQWlCQTBBSUJBaEFReUJBZ3NDUUNBRVFSVkhEUUFnQUVFRE5nSWNJQUFnRURZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNaUFJTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHbmpvQ0FBRFlDRUNBQVFSSTJBZ3hCQUNFUURJY0NDeUFRUVJWR0RkWUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSGFqWUNBQURZQ0VDQUFRUlEyQWd4QkFDRVFESVlDQ3lBQUtBSUVJUmNnQUVFQU5nSUVJQkFnRWFkcUloWWhBU0FBSUJjZ0VDQVdJQlFiSWhBUXRZQ0FnQUFpRkVVTmpRRWdBRUVITmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURJVUNDeUFBSUFBdkFUQkJnQUZ5T3dFd0lBRWhBUXRCS2lFUURPb0JDeUFRUVJWR0RkRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0RqSUNBQURZQ0VDQUFRUk0yQWd4QkFDRVFESUlDQ3lBUVFSVkdEYzhCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRElFQ0N5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlOQVFzZ0FFRU1OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURJQUNDeUFRUVJWR0Rjd0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUDhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReU1BUXNnQUVFTk5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFA0QkN5QVFRUlZHRGNrQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5TEFRc2dBRUVPTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUHdCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCd0pXQWdBQTJBaEFnQUVFQ05nSU1RUUFoRUF6N0FRc2dFRUVWUmczRkFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhveUFnQUEyQWhBZ0FFRWpOZ0lNUVFBaEVBejZBUXNnQUVFUU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFEUGtCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenhBUXNnQUVFUk5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBnQkN5QVFRUlZHRGNFQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQY0JDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXVZQ0FnQUFpRUEwQUlBRkJBV29oQVF5SUFRc2dBRUVUTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUFlCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF1WUNBZ0FBaUJBMEFJQUZCQVdvaEFRenRBUXNnQUVFVU5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBVQkN5QVFRUlZHRGIwQklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURQUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5R0FRc2dBRUVXTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFEUE1CQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVF0NENBZ0FBaUJBMEFJQUZCQVdvaEFRenBBUXNnQUVFWE5nSWNJQUFnQkRZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBJQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenhBUXRDQVNFUkN5QVFRUUZxSVFFQ1FDQUFLUU1nSWhKQy8vLy8vLy8vLy84UFZnMEFJQUFnRWtJRWhpQVJoRGNESUNBQklRRU1oQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd0aVlDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE84QkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnpaT0FnQUEyQWhBZ0FFRU1OZ0lNUVFBaEVBenVBUXNnQUNnQ0JDRVhJQUJCQURZQ0JDQVFJQkduYWlJV0lRRWdBQ0FYSUJBZ0ZpQVVHeUlRRUxXQWdJQUFJaFJGRFhNZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBSUJRMkFneEJBQ0VRRE8wQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnFweUFnQUEyQWhBZ0FFRVBOZ0lNUVFBaEVBenNBUXNnQUNBUUlBSVF0SUNBZ0FBaUFRMEJJQkFoQVF0QkRpRVFETkVCQ3dKQUlBRkJGVWNOQUNBQVFRSTJBaHdnQUNBUU5nSVVJQUJCc0ppQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cUFRc2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFhZU9nSUFBTmdJUUlBQkJFallDREVFQUlSQU02UUVMSUFGQkFXb2hFQUpBSUFBdkFUQWlBVUdBQVhGRkRRQUNRQ0FBSUJBZ0FoQzdnSUNBQUNJQkRRQWdFQ0VCREhBTElBRkJGVWNOdWdFZ0FFRUZOZ0ljSUFBZ0VEWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxBa0FnQVVHZ0JIRkJvQVJIRFFBZ0FDMEFMVUVDY1EwQUlBQkJBRFlDSENBQUlCQTJBaFFnQUVHV2s0Q0FBRFlDRUNBQVFRUTJBZ3hCQUNFUURPa0JDeUFBSUJBZ0FoQzlnSUNBQUJvZ0VDRUJBa0FDUUFKQUFrQUNRQ0FBSUJBZ0FoQ3pnSUNBQUE0V0FnRUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBd1FMSUFCQkFUb0FMZ3NnQUNBQUx3RXdRY0FBY2pzQk1DQVFJUUVMUVNZaEVBelJBUXNnQUVFak5nSWNJQUFnRURZQ0ZDQUFRYVdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNNlFFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVIVmk0Q0FBRFlDRUNBQVFSRTJBZ3hCQUNFUURPZ0JDeUFBTFFBdFFRRnhSUTBCUWNNQklSQU16Z0VMQWtBZ0RTQUNSZzBBQTBBQ1FDQU5MUUFBUVNCR0RRQWdEU0VCRE1RQkN5QU5RUUZxSWcwZ0FrY05BQXRCSlNFUURPY0JDMEVsSVJBTTVnRUxJQUFvQWdRaEJDQUFRUUEyQWdRZ0FDQUVJQTBRcjRDQWdBQWlCRVVOclFFZ0FFRW1OZ0ljSUFBZ0JEWUNEQ0FBSUExQkFXbzJBaFJCQUNFUURPVUJDeUFRUVJWR0Rhc0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSDlqWUNBQURZQ0VDQUFRUjAyQWd4QkFDRVFET1FCQ3lBQVFTYzJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNNHdFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBTFFBc1FYNXFEZ2NHQlFVREFRSUFCUXNnQUNBQUx3RXdRUWh5T3dFd0RBTUxRUUloRkF3QkMwRUVJUlFMSUFCQkFUb0FMQ0FBSUFBdkFUQWdGSEk3QVRBTElCQWhBUXRCS3lFUURNb0JDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxNUtBZ0FBMkFoQWdBRUVMTmdJTVFRQWhFQXppQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVHUGdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTTRRRUxJQUJCQURvQUxDQVFJUUVNdlFFTElCQWhBVUVCSVJRQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ0FGQ3lBQUlBQXZBVEJCQ0hJN0FUQU1Bd3RCQWlFVURBRUxRUVFoRkFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FVY2pzQk1Bc2dFQ0VCQzBFcElSQU14UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUh3bElDQUFEWUNFQ0FBUVFNMkFneEJBQ0VRRE4wQkN3SkFJQTR0QUFCQkRVY05BQ0FBS0FJRUlRRWdBRUVBTmdJRUFrQWdBQ0FCSUE0UXNZQ0FnQUFpQVEwQUlBNUJBV29oQVF4MUN5QUFRU3cyQWh3Z0FDQUJOZ0lNSUFBZ0RrRUJhallDRkVFQUlSQU0zUUVMSUFBdEFDMUJBWEZGRFFGQnhBRWhFQXpEQVFzQ1FDQU9JQUpIRFFCQkxTRVFETndCQ3dKQUFrQURRQUpBSUE0dEFBQkJkbW9PQkFJQUFBTUFDeUFPUVFGcUlnNGdBa2NOQUF0QkxTRVFETjBCQ3lBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTRoQVF4MEN5QUFRU3cyQWh3Z0FDQU9OZ0lVSUFBZ0FUWUNERUVBSVJBTTNBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhNTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemJBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnRGhDeGdJQ0FBQ0lFRGFBQklBNGhBUXpPQVFzZ0VFRXNSdzBCSUFGQkFXb2hFRUVCSVFFQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZTJvT0JBTUJBZ1FBQ3lBUUlRRU1CQXRCQWlFQkRBRUxRUVFoQVFzZ0FFRUJPZ0FzSUFBZ0FDOEJNQ0FCY2pzQk1DQVFJUUVNQVFzZ0FDQUFMd0V3UVFoeU93RXdJQkFoQVF0Qk9TRVFETDhCQ3lBQVFRQTZBQ3dnQVNFQkMwRTBJUkFNdlFFTElBQWdBQzhCTUVFZ2Nqc0JNQ0FCSVFFTUFnc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUxHQWdJQUFJZ1FOQUNBQklRRU14d0VMSUFCQk56WUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXpVQVFzZ0FFRUlPZ0FzSUFFaEFRdEJNQ0VRRExrQkN3SkFJQUF0QUNoQkFVWU5BQ0FCSVFFTUJBc2dBQzBBTFVFSWNVVU5rd0VnQVNFQkRBTUxJQUF0QURCQklIRU5sQUZCeFFFaEVBeTNBUXNDUUNBUElBSkdEUUFDUUFOQUFrQWdEeTBBQUVGUWFpSUJRZjhCY1VFS1NRMEFJQThoQVVFMUlSQU11Z0VMSUFBcEF5QWlFVUtacytiTW1iUG16QmxXRFFFZ0FDQVJRZ3ArSWhFM0F5QWdFU0FCclVML0FZTWlFa0ovaFZZTkFTQUFJQkVnRW53M0F5QWdEMEVCYWlJUElBSkhEUUFMUVRraEVBelJBUXNnQUNnQ0JDRUNJQUJCQURZQ0JDQUFJQUlnRDBFQmFpSUVFTEdBZ0lBQUlnSU5sUUVnQkNFQkRNTUJDMEU1SVJBTXp3RUxBa0FnQUM4Qk1DSUJRUWh4UlEwQUlBQXRBQ2hCQVVjTkFDQUFMUUF0UVFoeFJRMlFBUXNnQUNBQlFmZjdBM0ZCZ0FSeU93RXdJQThoQVF0Qk55RVFETFFCQ3lBQUlBQXZBVEJCRUhJN0FUQU1xd0VMSUJCQkZVWU5pd0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNPZ0lBQU5nSVFJQUJCSERZQ0RFRUFJUkFNeXdFTElBQkJ3d0EyQWh3Z0FDQUJOZ0lNSUFBZ0RVRUJhallDRkVFQUlSQU15Z0VMQWtBZ0FTMEFBRUU2UncwQUlBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkN2Z0lDQUFDSVFEUUFnQVVFQmFpRUJER01MSUFCQnd3QTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTXlnRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR3hrWUNBQURZQ0VDQUFRUW8yQWd4QkFDRVFETWtCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCb0ptQWdBQTJBaEFnQUVFZU5nSU1RUUFoRUF6SUFRc2dBRUVBTmdJQUN5QUFRWUFTT3dFcUlBQWdGMEVCYWlJQklBSVFxSUNBZ0FBaUVBMEJJQUVoQVF0Qnh3QWhFQXlzQVFzZ0VFRVZSdzJEQVNBQVFkRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVPWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTXhBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERjRMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNd3dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIQnFJQ0FBRFlDRUNBQVFRYzJBZ3dnQUVFQU5nSUFRUUFoRUF6Q0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpCQVF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR0FrWUNBQURZQ0VDQUFRUWsyQWd3TXdBRUxJQkJCRlVZTmZTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeS9BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dBVUVCYWlFQkFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSzJBZ0lBQUloQU5BQ0FCSVFFTVhBc2dBRUhZQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeStBUXNnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVLMkFnSUFBSWdRTkFDQUJJUUVNclFFTElBQkIyUUEyQWh3Z0FDQUJOZ0lVSUFBZ0JEWUNERUVBSVJBTXZRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES3NCQ3lBQVFkb0FOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRREx3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXBBUXNnQUVIY0FEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk3QVFzQ1FDQUJMUUFBUVZCcUloQkIvd0Z4UVFwUERRQWdBQ0FRT2dBcUlBRkJBV29oQVVIUEFDRVFES0lCQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFyWUNBZ0FBaUJBMEFJQUVoQVF5bkFRc2dBRUhlQURZQ0hDQUFJQUUyQWhRZ0FDQUVOZ0lNUVFBaEVBeTZBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQkkwOE5BQ0FCSVFFTVdRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkT0pnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU11UUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dNdHdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBRU0ZIRFFBZ0FTRUJERllMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdiaW9DQUFEWUNFQ0FBUVFnMkFneEJBQ0VRRExZQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLU0lRUVYxcVFRdFBEUUFnQVNFQkRGVUxBa0FnRUVFR1N3MEFRUUVnRUhSQnlnQnhSUTBBSUFFaEFReFZDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZlSmdJQUFOZ0lRSUFCQkNEWUNEQXkxQVFzZ0VFRVZSZzF4SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUc1allDQUFEWUNFQ0FBUVJvMkFneEJBQ0VRRExRQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFVDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETE1CQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMSUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExFQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReFJDeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETEFCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeG9xQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5dkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl1QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVNRc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXRBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNVFFzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5c0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFkeUlnSUFBTmdJUUlBQkJCellDREVFQUlSQU1xd0VMSUJCQlAwY05BU0FCUVFGcUlRRUxRUVVoRUF5UUFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5a29DQUFEWUNFQ0FBUVFjMkFnd01xQUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXB3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERUlMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcGdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFWUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwZ0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTXBBRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERDhMSUFCQjB3QTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb3dFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkRFTUxJQUJCNVFBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1vZ0VMSUFCQkFEWUNIQ0FBSUJRMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtFQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnc0K0FnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeWdBUXRCQUNFUUlBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3dNbndFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVHTW5JQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKNEJDeUFBUVFBMkFod2dBQ0FVTmdJVUlBQkIvcEdBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlkQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVk2YmdJQUFOZ0lRSUFCQkJqWUNERUVBSVJBTW5BRUxJQkJCRlVZTlZ5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpJNkFnQUEyQWhBZ0FFRWdOZ0lNUVFBaEVBeWJBUXNnQUVFQU5nSUFJQkJCQVdvaEFVRWtJUkFMSUFBZ0VEb0FLU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCRUt1QWdJQUFJaEFOVkNBQklRRU1QZ3NnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWZHYmdJQUFOZ0lRSUFCQkJqWUNEQXlYQVFzZ0FVRVZSZzFRSUFCQkFEWUNIQ0FBSUFVMkFoUWdBRUh3aklDQUFEWUNFQ0FBUVJzMkFneEJBQ0VRREpZQkN5QUFLQUlFSVFVZ0FFRUFOZ0lFSUFBZ0JTQVFFS21BZ0lBQUlnVU5BU0FRUVFGcUlRVUxRYTBCSVJBTWV3c2dBRUhCQVRZQ0hDQUFJQVUyQWd3Z0FDQVFRUUZxTmdJVVFRQWhFQXlUQVFzZ0FDZ0NCQ0VHSUFCQkFEWUNCQ0FBSUFZZ0VCQ3BnSUNBQUNJR0RRRWdFRUVCYWlFR0MwR3VBU0VRREhnTElBQkJ3Z0UyQWh3Z0FDQUdOZ0lNSUFBZ0VFRUJhallDRkVFQUlSQU1rQUVMSUFCQkFEWUNIQ0FBSUFjMkFoUWdBRUdYaTRDQUFEWUNFQ0FBUVEwMkFneEJBQ0VRREk4QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQjQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBeU9BUXNnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWlNOZ0lBQU5nSVFJQUJCSVRZQ0RFRUFJUkFNalFFTFFRRWhGa0VBSVJkQkFDRVVRUUVoRUFzZ0FDQVFPZ0FySUFsQkFXb2hDQUpBQWtBZ0FDMEFMVUVRY1EwQUFrQUNRQUpBSUFBdEFDb09Bd0VBQWdRTElCWkZEUU1NQWdzZ0ZBMEJEQUlMSUJkRkRRRUxJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQWdRcllDQWdBQWlFRVVOUFNBQVFja0JOZ0ljSUFBZ0NEWUNGQ0FBSUJBMkFneEJBQ0VRREl3QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUlFSzJBZ0lBQUlnUkZEWFlnQUVIS0FUWUNIQ0FBSUFnMkFoUWdBQ0FFTmdJTVFRQWhFQXlMQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0NSQ3RnSUNBQUNJRVJRMTBJQUJCeXdFMkFod2dBQ0FKTmdJVUlBQWdCRFlDREVFQUlSQU1pZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFvUXJZQ0FnQUFpQkVVTmNpQUFRYzBCTmdJY0lBQWdDallDRkNBQUlBUTJBZ3hCQUNFUURJa0JDd0pBSUFzdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQzBFQmFpRUtRYllCSVJBTWNBc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDeEN0Z0lDQUFDSUVSUTF3SUFCQnp3RTJBaHdnQUNBTE5nSVVJQUFnQkRZQ0RFRUFJUkFNaUFFTElBQkJBRFlDSENBQUlBUTJBaFFnQUVHUXM0Q0FBRFlDRUNBQVFRZzJBZ3dnQUVFQU5nSUFRUUFoRUF5SEFRc2dBVUVWUmcwL0lBQkJBRFlDSENBQUlBdzJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURJWUJDeUFBUVlFRU93RW9JQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXhCQVdvaURCQ3JnSUNBQUNJUVJRMDRJQUJCMHdFMkFod2dBQ0FNTmdJVUlBQWdFRFlDREVFQUlSQU1oUUVMSUFCQkFEWUNBQXRCQUNFUUlBQkJBRFlDSENBQUlBUTJBaFFnQUVIWW00Q0FBRFlDRUNBQVFRZzJBZ3dNZ3dFTElBQW9BZ1FoRUNBQVFnQTNBd0FnQUNBUUlBdEJBV29pQ3hDcmdJQ0FBQ0lRRFFGQnhnRWhFQXhwQ3lBQVFRSTZBQ2dNVlFzZ0FFSFZBVFlDSENBQUlBczJBaFFnQUNBUU5nSU1RUUFoRUF5QUFRc2dFRUVWUmcwM0lBQkJBRFlDSENBQUlBUTJBaFFnQUVHa2pJQ0FBRFlDRUNBQVFSQTJBZ3hCQUNFUURIOExJQUF0QURSQkFVY05OQ0FBSUFRZ0FoQzhnSUNBQUNJUVJRMDBJQkJCRlVjTk5TQUFRZHdCTmdJY0lBQWdCRFlDRkNBQVFkV1dnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1mZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTWZRdEJBQ0VRREdNTFFRSWhFQXhpQzBFTklSQU1ZUXRCRHlFUURHQUxRU1VoRUF4ZkMwRVRJUkFNWGd0QkZTRVFERjBMUVJZaEVBeGNDMEVYSVJBTVd3dEJHQ0VRREZvTFFSa2hFQXhaQzBFYUlSQU1XQXRCR3lFUURGY0xRUndoRUF4V0MwRWRJUkFNVlF0Qkh5RVFERlFMUVNFaEVBeFRDMEVqSVJBTVVndEJ4Z0FoRUF4UkMwRXVJUkFNVUF0Qkx5RVFERThMUVRzaEVBeE9DMEU5SVJBTVRRdEJ5QUFoRUF4TUMwSEpBQ0VRREVzTFFjc0FJUkFNU2d0QnpBQWhFQXhKQzBIT0FDRVFERWdMUWRFQUlSQU1Sd3RCMVFBaEVBeEdDMEhZQUNFUURFVUxRZGtBSVJBTVJBdEIyd0FoRUF4REMwSGtBQ0VRREVJTFFlVUFJUkFNUVF0QjhRQWhFQXhBQzBIMEFDRVFERDhMUVkwQklSQU1QZ3RCbHdFaEVBdzlDMEdwQVNFUUREd0xRYXdCSVJBTU93dEJ3QUVoRUF3NkMwRzVBU0VRRERrTFFhOEJJUkFNT0F0QnNRRWhFQXczQzBHeUFTRVFERFlMUWJRQklSQU1OUXRCdFFFaEVBdzBDMEc2QVNFUURETUxRYjBCSVJBTU1ndEJ2d0VoRUF3eEMwSEJBU0VRRERBTElBQkJBRFlDSENBQUlBUTJBaFFnQUVIcGk0Q0FBRFlDRUNBQVFSODJBZ3hCQUNFUURFZ0xJQUJCMndFMkFod2dBQ0FFTmdJVUlBQkIrcGFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhIQ3lBQVFmZ0FOZ0ljSUFBZ0REWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJnc2dBRUhSQURZQ0hDQUFJQVUyQWhRZ0FFR3dsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERVVMSUFCQitRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNUkFzZ0FFSDRBRFlDSENBQUlBRTJBaFFnQUVIS21JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFTUxJQUJCNUFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhDQ3lBQVFkY0FOZ0ljSUFBZ0FUWUNGQ0FBUWNtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU1RQXNnQUVIQ0FEWUNIQ0FBSUFFMkFoUWdBRUhqbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREQ4TElBQkJBRFlDQkNBQUlBOGdEeEN4Z0lDQUFDSUVSUTBCSUFCQk9qWUNIQ0FBSUFRMkFnd2dBQ0FQUVFGcU5nSVVRUUFoRUF3K0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCRVVOQUNBQVFUczJBaHdnQUNBRU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTVBnc2dBVUVCYWlFQkRDMExJQTlCQVdvaEFRd3RDeUFBUVFBMkFod2dBQ0FQTmdJVUlBQkI1SktBZ0FBMkFoQWdBRUVFTmdJTVFRQWhFQXc3Q3lBQVFUWTJBaHdnQUNBRU5nSVVJQUFnQWpZQ0RFRUFJUkFNT2dzZ0FFRXVOZ0ljSUFBZ0RqWUNGQ0FBSUFRMkFneEJBQ0VRRERrTElBQkIwQUEyQWh3Z0FDQUJOZ0lVSUFCQmtaaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzRDeUFOUVFGcUlRRU1MQXNnQUVFVk5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTmdzZ0FFRWJOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5Rc2dBRUVQTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OQXNnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTXdzZ0FFRWFOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1nc2dBRUVMTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NUXNnQUVFS05nSWNJQUFnQVRZQ0ZDQUFRZVNXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTUFzZ0FFRWVOZ0ljSUFBZ0FUWUNGQ0FBUWZtWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUx3c2dBRUVBTmdJY0lBQWdFRFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1MZ3NnQUVFRU5nSWNJQUFnQVRZQ0ZDQUFRYkNZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTFFzZ0FFRUFOZ0lBSUF0QkFXb2hDd3RCdUFFaEVBd1NDeUFBUVFBMkFnQWdFRUVCYWlFQlFmVUFJUkFNRVFzZ0FTRUJBa0FnQUMwQUtVRUZSdzBBUWVNQUlSQU1FUXRCNGdBaEVBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFCQjVKR0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF3b0N5QUFRUUEyQWdBZ0YwRUJhaUVCUWNBQUlSQU1EZ3RCQVNFQkN5QUFJQUU2QUN3Z0FFRUFOZ0lBSUJkQkFXb2hBUXRCS0NFUURBc0xJQUVoQVF0Qk9DRVFEQWtMQWtBZ0FTSVBJQUpHRFFBRFFBSkFJQTh0QUFCQmdMNkFnQUJxTFFBQUlnRkJBVVlOQUNBQlFRSkhEUU1nRDBFQmFpRUJEQVFMSUE5QkFXb2lEeUFDUncwQUMwRStJUkFNSWd0QlBpRVFEQ0VMSUFCQkFEb0FMQ0FQSVFFTUFRdEJDeUVRREFZTFFUb2hFQXdGQ3lBQlFRRnFJUUZCTFNFUURBUUxJQUFnQVRvQUxDQUFRUUEyQWdBZ0ZrRUJhaUVCUVF3aEVBd0RDeUFBUVFBMkFnQWdGMEVCYWlFQlFRb2hFQXdDQ3lBQVFRQTJBZ0FMSUFCQkFEb0FMQ0FOSVFGQkNTRVFEQUFMQzBFQUlSQWdBRUVBTmdJY0lBQWdDellDRkNBQVFjMlFnSUFBTmdJUUlBQkJDVFlDREF3WEMwRUFJUkFnQUVFQU5nSWNJQUFnQ2pZQ0ZDQUFRZW1LZ0lBQU5nSVFJQUJCQ1RZQ0RBd1dDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NUWUNGQ0FBUWJlUWdJQUFOZ0lRSUFCQkNUWUNEQXdWQzBFQUlSQWdBRUVBTmdJY0lBQWdDRFlDRkNBQVFaeVJnSUFBTmdJUUlBQkJDVFlDREF3VUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1RDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdTQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3UkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1FDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVplVmdJQUFOZ0lRSUFCQkR6WUNEQXdQQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3T0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY0NTZ0lBQU5nSVFJQUJCQ3pZQ0RBd05DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpXSmdJQUFOZ0lRSUFCQkN6WUNEQXdNQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREF3TEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZnVQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0tDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZHWmdJQUFOZ0lRSUFCQkFqWUNEQXdKQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFjU1VnSUFBTmdJUUlBQkJBallDREF3SUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZktWZ0lBQU5nSVFJQUJCQWpZQ0RBd0hDeUFBUVFJMkFod2dBQ0FCTmdJVUlBQkJuSnFBZ0FBMkFoQWdBRUVXTmdJTVFRQWhFQXdHQzBFQklSQU1CUXRCMUFBaEVDQUJJZ1FnQWtZTkJDQURRUWhxSUFBZ0JDQUNRZGpDZ0lBQVFRb1F4WUNBZ0FBZ0F5Z0NEQ0VFSUFNb0FnZ09Bd0VFQWdBTEVNcUFnSUFBQUFzZ0FFRUFOZ0ljSUFCQnRacUFnQUEyQWhBZ0FFRVhOZ0lNSUFBZ0JFRUJhallDRkVFQUlSQU1BZ3NnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRY3FhZ0lBQU5nSVFJQUJCQ1RZQ0RFRUFJUkFNQVFzQ1FDQUJJZ1FnQWtjTkFFRWlJUkFNQVFzZ0FFR0pnSUNBQURZQ0NDQUFJQVEyQWdSQklTRVFDeUFEUVJCcUpJQ0FnSUFBSUJBTHJ3RUJBbjhnQVNnQ0FDRUdBa0FDUUNBQ0lBTkdEUUFnQkNBR2FpRUVJQVlnQTJvZ0Ftc2hCeUFDSUFaQmYzTWdCV29pQm1vaEJRTkFBa0FnQWkwQUFDQUVMUUFBUmcwQVFRSWhCQXdEQ3dKQUlBWU5BRUVBSVFRZ0JTRUNEQU1MSUFaQmYyb2hCaUFFUVFGcUlRUWdBa0VCYWlJQ0lBTkhEUUFMSUFjaEJpQURJUUlMSUFCQkFUWUNBQ0FCSUFZMkFnQWdBQ0FDTmdJRUR3c2dBVUVBTmdJQUlBQWdCRFlDQUNBQUlBSTJBZ1FMQ2dBZ0FCREhnSUNBQUF2eU5nRUxmeU9BZ0lDQUFFRVFheUlCSklDQWdJQUFBa0JCQUNnQ29OQ0FnQUFOQUVFQUVNdUFnSUFBUVlEVWhJQUFheUlDUWRrQVNRMEFRUUFoQXdKQVFRQW9BdURUZ0lBQUlnUU5BRUVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRUlha0Z3Y1VIWXF0V3FCWE1pQkRZQzROT0FnQUJCQUVFQU5nTDAwNENBQUVFQVFRQTJBc1RUZ0lBQUMwRUFJQUkyQXN6VGdJQUFRUUJCZ05TRWdBQTJBc2pUZ0lBQVFRQkJnTlNFZ0FBMkFwalFnSUFBUVFBZ0JEWUNyTkNBZ0FCQkFFRi9OZ0tvMElDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTFFZRFVoSUFBUVhoQmdOU0VnQUJyUVE5eFFRQkJnTlNFZ0FCQkNHcEJEM0ViSWdOcUlnUkJCR29nQWtGSWFpSUZJQU5ySWdOQkFYSTJBZ0JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRE5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQVFZRFVoSUFBSUFWcVFUZzJBZ1FMQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCN0FGTERRQUNRRUVBS0FLSTBJQ0FBQ0lHUVJBZ0FFRVRha0Z3Y1NBQVFRdEpHeUlDUVFOMklnUjJJZ05CQTNGRkRRQUNRQUpBSUFOQkFYRWdCSEpCQVhNaUJVRURkQ0lFUWJEUWdJQUFhaUlESUFSQnVOQ0FnQUJxS0FJQUlnUW9BZ2dpQWtjTkFFRUFJQVpCZmlBRmQzRTJBb2pRZ0lBQURBRUxJQU1nQWpZQ0NDQUNJQU0yQWd3TElBUkJDR29oQXlBRUlBVkJBM1FpQlVFRGNqWUNCQ0FFSUFWcUlnUWdCQ2dDQkVFQmNqWUNCQXdNQ3lBQ1FRQW9BcERRZ0lBQUlnZE5EUUVDUUNBRFJRMEFBa0FDUUNBRElBUjBRUUlnQkhRaUEwRUFJQU5yY25FaUEwRUFJQU5yY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacUlnUkJBM1FpQTBHdzBJQ0FBR29pQlNBRFFialFnSUFBYWlnQ0FDSURLQUlJSWdCSERRQkJBQ0FHUVg0Z0JIZHhJZ1kyQW9qUWdJQUFEQUVMSUFVZ0FEWUNDQ0FBSUFVMkFnd0xJQU1nQWtFRGNqWUNCQ0FESUFSQkEzUWlCR29nQkNBQ2F5SUZOZ0lBSUFNZ0Ftb2lBQ0FGUVFGeU5nSUVBa0FnQjBVTkFDQUhRWGh4UWJEUWdJQUFhaUVDUVFBb0FwelFnSUFBSVFRQ1FBSkFJQVpCQVNBSFFRTjJkQ0lJY1EwQVFRQWdCaUFJY2pZQ2lOQ0FnQUFnQWlFSURBRUxJQUlvQWdnaENBc2dDQ0FFTmdJTUlBSWdCRFlDQ0NBRUlBSTJBZ3dnQkNBSU5nSUlDeUFEUVFocUlRTkJBQ0FBTmdLYzBJQ0FBRUVBSUFVMkFwRFFnSUFBREF3TFFRQW9Bb3pRZ0lBQUlnbEZEUUVnQ1VFQUlBbHJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCRUVGZGtFSWNTSUZJQU55SUFRZ0JYWWlBMEVDZGtFRWNTSUVjaUFESUFSMklnTkJBWFpCQW5FaUJISWdBeUFFZGlJRFFRRjJRUUZ4SWdSeUlBTWdCSFpxUVFKMFFialNnSUFBYWlnQ0FDSUFLQUlFUVhoeElBSnJJUVFnQUNFRkFrQURRQUpBSUFVb0FoQWlBdzBBSUFWQkZHb29BZ0FpQTBVTkFnc2dBeWdDQkVGNGNTQUNheUlGSUFRZ0JTQUVTU0lGR3lFRUlBTWdBQ0FGR3lFQUlBTWhCUXdBQ3dzZ0FDZ0NHQ0VLQWtBZ0FDZ0NEQ0lJSUFCR0RRQWdBQ2dDQ0NJRFFRQW9BcGpRZ0lBQVNSb2dDQ0FETmdJSUlBTWdDRFlDREF3TEN3SkFJQUJCRkdvaUJTZ0NBQ0lERFFBZ0FDZ0NFQ0lEUlEwRElBQkJFR29oQlFzRFFDQUZJUXNnQXlJSVFSUnFJZ1VvQWdBaUF3MEFJQWhCRUdvaEJTQUlLQUlRSWdNTkFBc2dDMEVBTmdJQURBb0xRWDhoQWlBQVFiOS9TdzBBSUFCQkUyb2lBMEZ3Y1NFQ1FRQW9Bb3pRZ0lBQUlnZEZEUUJCQUNFTEFrQWdBa0dBQWtrTkFFRWZJUXNnQWtILy8vOEhTdzBBSUFOQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCQ0FFUVlEZ0gycEJFSFpCQkhFaUJIUWlCU0FGUVlDQUQycEJFSFpCQW5FaUJYUkJEM1lnQXlBRWNpQUZjbXNpQTBFQmRDQUNJQU5CRldwMlFRRnhja0VjYWlFTEMwRUFJQUpySVFRQ1FBSkFBa0FDUUNBTFFRSjBRYmpTZ0lBQWFpZ0NBQ0lGRFFCQkFDRURRUUFoQ0F3QkMwRUFJUU1nQWtFQVFSa2dDMEVCZG1zZ0MwRWZSaHQwSVFCQkFDRUlBMEFDUUNBRktBSUVRWGh4SUFKcklnWWdCRThOQUNBR0lRUWdCU0VJSUFZTkFFRUFJUVFnQlNFSUlBVWhBd3dEQ3lBRElBVkJGR29vQWdBaUJpQUdJQVVnQUVFZGRrRUVjV3BCRUdvb0FnQWlCVVliSUFNZ0Joc2hBeUFBUVFGMElRQWdCUTBBQ3dzQ1FDQURJQWh5RFFCQkFDRUlRUUlnQzNRaUEwRUFJQU5yY2lBSGNTSURSUTBESUFOQkFDQURhM0ZCZjJvaUF5QURRUXgyUVJCeElnTjJJZ1ZCQlhaQkNIRWlBQ0FEY2lBRklBQjJJZ05CQW5aQkJIRWlCWElnQXlBRmRpSURRUUYyUVFKeElnVnlJQU1nQlhZaUEwRUJka0VCY1NJRmNpQURJQVYyYWtFQ2RFRzQwb0NBQUdvb0FnQWhBd3NnQTBVTkFRc0RRQ0FES0FJRVFYaHhJQUpySWdZZ0JFa2hBQUpBSUFNb0FoQWlCUTBBSUFOQkZHb29BZ0FoQlFzZ0JpQUVJQUFiSVFRZ0F5QUlJQUFiSVFnZ0JTRURJQVVOQUFzTElBaEZEUUFnQkVFQUtBS1EwSUNBQUNBQ2EwOE5BQ0FJS0FJWUlRc0NRQ0FJS0FJTUlnQWdDRVlOQUNBSUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBQUlBTTJBZ2dnQXlBQU5nSU1EQWtMQWtBZ0NFRVVhaUlGS0FJQUlnTU5BQ0FJS0FJUUlnTkZEUU1nQ0VFUWFpRUZDd05BSUFVaEJpQURJZ0JCRkdvaUJTZ0NBQ0lERFFBZ0FFRVFhaUVGSUFBb0FoQWlBdzBBQ3lBR1FRQTJBZ0FNQ0FzQ1FFRUFLQUtRMElDQUFDSURJQUpKRFFCQkFDZ0NuTkNBZ0FBaEJBSkFBa0FnQXlBQ2F5SUZRUkJKRFFBZ0JDQUNhaUlBSUFWQkFYSTJBZ1JCQUNBRk5nS1EwSUNBQUVFQUlBQTJBcHpRZ0lBQUlBUWdBMm9nQlRZQ0FDQUVJQUpCQTNJMkFnUU1BUXNnQkNBRFFRTnlOZ0lFSUFRZ0Eyb2lBeUFES0FJRVFRRnlOZ0lFUVFCQkFEWUNuTkNBZ0FCQkFFRUFOZ0tRMElDQUFBc2dCRUVJYWlFRERBb0xBa0JCQUNnQ2xOQ0FnQUFpQUNBQ1RRMEFRUUFvQXFEUWdJQUFJZ01nQW1vaUJDQUFJQUpySWdWQkFYSTJBZ1JCQUNBRk5nS1UwSUNBQUVFQUlBUTJBcURRZ0lBQUlBTWdBa0VEY2pZQ0JDQURRUWhxSVFNTUNnc0NRQUpBUVFBb0F1RFRnSUFBUlEwQVFRQW9BdWpUZ0lBQUlRUU1BUXRCQUVKL053THMwNENBQUVFQVFvQ0FoSUNBZ01BQU53TGswNENBQUVFQUlBRkJER3BCY0hGQjJLclZxZ1Z6TmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FCQmdJQUVJUVFMUVFBaEF3SkFJQVFnQWtISEFHb2lCMm9pQmtFQUlBUnJJZ3R4SWdnZ0Frc05BRUVBUVRBMkF2alRnSUFBREFvTEFrQkJBQ2dDd05PQWdBQWlBMFVOQUFKQVFRQW9BcmpUZ0lBQUlnUWdDR29pQlNBRVRRMEFJQVVnQTAwTkFRdEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUNndEJBQzBBeE5PQWdBQkJCSEVOQkFKQUFrQUNRRUVBS0FLZzBJQ0FBQ0lFUlEwQVFjalRnSUFBSVFNRFFBSkFJQU1vQWdBaUJTQUVTdzBBSUFVZ0F5Z0NCR29nQkVzTkF3c2dBeWdDQ0NJRERRQUxDMEVBRU11QWdJQUFJZ0JCZjBZTkJTQUlJUVlDUUVFQUtBTGswNENBQUNJRFFYOXFJZ1FnQUhGRkRRQWdDQ0FBYXlBRUlBQnFRUUFnQTJ0eGFpRUdDeUFHSUFKTkRRVWdCa0grLy8vL0Iwc05CUUpBUVFBb0FzRFRnSUFBSWdORkRRQkJBQ2dDdU5PQWdBQWlCQ0FHYWlJRklBUk5EUVlnQlNBRFN3MEdDeUFHRU11QWdJQUFJZ01nQUVjTkFRd0hDeUFHSUFCcklBdHhJZ1pCL3YvLy93ZExEUVFnQmhETGdJQ0FBQ0lBSUFNb0FnQWdBeWdDQkdwR0RRTWdBQ0VEQ3dKQUlBTkJmMFlOQUNBQ1FjZ0FhaUFHVFEwQUFrQWdCeUFHYTBFQUtBTG8wNENBQUNJRWFrRUFJQVJyY1NJRVFmNy8vLzhIVFEwQUlBTWhBQXdIQ3dKQUlBUVF5NENBZ0FCQmYwWU5BQ0FFSUFacUlRWWdBeUVBREFjTFFRQWdCbXNReTRDQWdBQWFEQVFMSUFNaEFDQURRWDlIRFFVTUF3dEJBQ0VJREFjTFFRQWhBQXdGQ3lBQVFYOUhEUUlMUVFCQkFDZ0N4Tk9BZ0FCQkJISTJBc1RUZ0lBQUN5QUlRZjcvLy84SFN3MEJJQWdReTRDQWdBQWhBRUVBRU11QWdJQUFJUU1nQUVGL1JnMEJJQU5CZjBZTkFTQUFJQU5QRFFFZ0F5QUFheUlHSUFKQk9HcE5EUUVMUVFCQkFDZ0N1Tk9BZ0FBZ0Jtb2lBellDdU5PQWdBQUNRQ0FEUVFBb0FyelRnSUFBVFEwQVFRQWdBellDdk5PQWdBQUxBa0FDUUFKQUFrQkJBQ2dDb05DQWdBQWlCRVVOQUVISTA0Q0FBQ0VEQTBBZ0FDQURLQUlBSWdVZ0F5Z0NCQ0lJYWtZTkFpQURLQUlJSWdNTkFBd0RDd3NDUUFKQVFRQW9BcGpRZ0lBQUlnTkZEUUFnQUNBRFR3MEJDMEVBSUFBMkFwalFnSUFBQzBFQUlRTkJBQ0FHTmdMTTA0Q0FBRUVBSUFBMkFzalRnSUFBUVFCQmZ6WUNxTkNBZ0FCQkFFRUFLQUxnMDRDQUFEWUNyTkNBZ0FCQkFFRUFOZ0xVMDRDQUFBTkFJQU5CeE5DQWdBQnFJQU5CdU5DQWdBQnFJZ1EyQWdBZ0JDQURRYkRRZ0lBQWFpSUZOZ0lBSUFOQnZOQ0FnQUJxSUFVMkFnQWdBMEhNMElDQUFHb2dBMEhBMElDQUFHb2lCVFlDQUNBRklBUTJBZ0FnQTBIVTBJQ0FBR29nQTBISTBJQ0FBR29pQkRZQ0FDQUVJQVUyQWdBZ0EwSFEwSUNBQUdvZ0JEWUNBQ0FEUVNCcUlnTkJnQUpIRFFBTElBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJJZ05xSWdRZ0JrRklhaUlGSUFOcklnTkJBWEkyQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQUFnQldwQk9EWUNCQXdDQ3lBRExRQU1RUWh4RFFBZ0JDQUZTUTBBSUFRZ0FFOE5BQ0FFUVhnZ0JHdEJEM0ZCQUNBRVFRaHFRUTl4R3lJRmFpSUFRUUFvQXBUUWdJQUFJQVpxSWdzZ0JXc2lCVUVCY2pZQ0JDQURJQWdnQm1vMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FGTmdLVTBJQ0FBRUVBSUFBMkFxRFFnSUFBSUFRZ0MycEJPRFlDQkF3QkN3SkFJQUJCQUNnQ21OQ0FnQUFpQ0U4TkFFRUFJQUEyQXBqUWdJQUFJQUFoQ0FzZ0FDQUdhaUVGUWNqVGdJQUFJUU1DUUFKQUFrQUNRQUpBQWtBQ1FBTkFJQU1vQWdBZ0JVWU5BU0FES0FJSUlnTU5BQXdDQ3dzZ0F5MEFERUVJY1VVTkFRdEJ5Tk9BZ0FBaEF3TkFBa0FnQXlnQ0FDSUZJQVJMRFFBZ0JTQURLQUlFYWlJRklBUkxEUU1MSUFNb0FnZ2hBd3dBQ3dzZ0F5QUFOZ0lBSUFNZ0F5Z0NCQ0FHYWpZQ0JDQUFRWGdnQUd0QkQzRkJBQ0FBUVFocVFROXhHMm9pQ3lBQ1FRTnlOZ0lFSUFWQmVDQUZhMEVQY1VFQUlBVkJDR3BCRDNFYmFpSUdJQXNnQW1vaUFtc2hBd0pBSUFZZ0JFY05BRUVBSUFJMkFxRFFnSUFBUVFCQkFDZ0NsTkNBZ0FBZ0Eyb2lBellDbE5DQWdBQWdBaUFEUVFGeU5nSUVEQU1MQWtBZ0JrRUFLQUtjMElDQUFFY05BRUVBSUFJMkFwelFnSUFBUVFCQkFDZ0NrTkNBZ0FBZ0Eyb2lBellDa05DQWdBQWdBaUFEUVFGeU5nSUVJQUlnQTJvZ0F6WUNBQXdEQ3dKQUlBWW9BZ1FpQkVFRGNVRUJSdzBBSUFSQmVIRWhCd0pBQWtBZ0JFSC9BVXNOQUNBR0tBSUlJZ1VnQkVFRGRpSUlRUU4wUWJEUWdJQUFhaUlBUmhvQ1FDQUdLQUlNSWdRZ0JVY05BRUVBUVFBb0FvalFnSUFBUVg0Z0NIZHhOZ0tJMElDQUFBd0NDeUFFSUFCR0dpQUVJQVUyQWdnZ0JTQUVOZ0lNREFFTElBWW9BaGdoQ1FKQUFrQWdCaWdDRENJQUlBWkdEUUFnQmlnQ0NDSUVJQWhKR2lBQUlBUTJBZ2dnQkNBQU5nSU1EQUVMQWtBZ0JrRVVhaUlFS0FJQUlnVU5BQ0FHUVJCcUlnUW9BZ0FpQlEwQVFRQWhBQXdCQ3dOQUlBUWhDQ0FGSWdCQkZHb2lCQ2dDQUNJRkRRQWdBRUVRYWlFRUlBQW9BaEFpQlEwQUN5QUlRUUEyQWdBTElBbEZEUUFDUUFKQUlBWWdCaWdDSENJRlFRSjBRYmpTZ0lBQWFpSUVLQUlBUncwQUlBUWdBRFlDQUNBQURRRkJBRUVBS0FLTTBJQ0FBRUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDVUVRUVJRZ0NTZ0NFQ0FHUmh0cUlBQTJBZ0FnQUVVTkFRc2dBQ0FKTmdJWUFrQWdCaWdDRUNJRVJRMEFJQUFnQkRZQ0VDQUVJQUEyQWhnTElBWW9BaFFpQkVVTkFDQUFRUlJxSUFRMkFnQWdCQ0FBTmdJWUN5QUhJQU5xSVFNZ0JpQUhhaUlHS0FJRUlRUUxJQVlnQkVGK2NUWUNCQ0FDSUFOcUlBTTJBZ0FnQWlBRFFRRnlOZ0lFQWtBZ0EwSC9BVXNOQUNBRFFYaHhRYkRRZ0lBQWFpRUVBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBMEVEZG5RaUEzRU5BRUVBSUFVZ0EzSTJBb2pRZ0lBQUlBUWhBd3dCQ3lBRUtBSUlJUU1MSUFNZ0FqWUNEQ0FFSUFJMkFnZ2dBaUFFTmdJTUlBSWdBellDQ0F3REMwRWZJUVFDUUNBRFFmLy8vd2RMRFFBZ0EwRUlkaUlFSUFSQmdQNC9ha0VRZGtFSWNTSUVkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lBSUFCQmdJQVBha0VRZGtFQ2NTSUFkRUVQZGlBRUlBVnlJQUJ5YXlJRVFRRjBJQU1nQkVFVmFuWkJBWEZ5UVJ4cUlRUUxJQUlnQkRZQ0hDQUNRZ0EzQWhBZ0JFRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdCQkFTQUVkQ0lJY1EwQUlBVWdBallDQUVFQUlBQWdDSEkyQW96UWdJQUFJQUlnQlRZQ0dDQUNJQUkyQWdnZ0FpQUNOZ0lNREFNTElBTkJBRUVaSUFSQkFYWnJJQVJCSDBZYmRDRUVJQVVvQWdBaEFBTkFJQUFpQlNnQ0JFRjRjU0FEUmcwQ0lBUkJIWFloQUNBRVFRRjBJUVFnQlNBQVFRUnhha0VRYWlJSUtBSUFJZ0FOQUFzZ0NDQUNOZ0lBSUFJZ0JUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBSUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnc2dCa0ZJYWlJSUlBTnJJZ05CQVhJMkFnUWdBQ0FJYWtFNE5nSUVJQVFnQlVFM0lBVnJRUTl4UVFBZ0JVRkpha0VQY1J0cVFVRnFJZ2dnQ0NBRVFSQnFTUnNpQ0VFak5nSUVRUUJCQUNnQzhOT0FnQUEyQXFUUWdJQUFRUUFnQXpZQ2xOQ0FnQUJCQUNBTE5nS2cwSUNBQUNBSVFSQnFRUUFwQXREVGdJQUFOd0lBSUFoQkFDa0N5Tk9BZ0FBM0FnaEJBQ0FJUVFocU5nTFEwNENBQUVFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUVBTmdMVTA0Q0FBQ0FJUVNScUlRTURRQ0FEUVFjMkFnQWdBMEVFYWlJRElBVkpEUUFMSUFnZ0JFWU5BeUFJSUFnb0FnUkJmbkUyQWdRZ0NDQUlJQVJySWdBMkFnQWdCQ0FBUVFGeU5nSUVBa0FnQUVIL0FVc05BQ0FBUVhoeFFiRFFnSUFBYWlFREFrQUNRRUVBS0FLSTBJQ0FBQ0lGUVFFZ0FFRURkblFpQUhFTkFFRUFJQVVnQUhJMkFvalFnSUFBSUFNaEJRd0JDeUFES0FJSUlRVUxJQVVnQkRZQ0RDQURJQVEyQWdnZ0JDQUROZ0lNSUFRZ0JUWUNDQXdFQzBFZklRTUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUZJQVZCZ09BZmFrRVFka0VFY1NJRmRDSUlJQWhCZ0lBUGFrRVFka0VDY1NJSWRFRVBkaUFESUFWeUlBaHlheUlEUVFGMElBQWdBMEVWYW5aQkFYRnlRUnhxSVFNTElBUWdBellDSENBRVFnQTNBaEFnQTBFQ2RFRzQwb0NBQUdvaEJRSkFRUUFvQW96UWdJQUFJZ2hCQVNBRGRDSUdjUTBBSUFVZ0JEWUNBRUVBSUFnZ0JuSTJBb3pRZ0lBQUlBUWdCVFlDR0NBRUlBUTJBZ2dnQkNBRU5nSU1EQVFMSUFCQkFFRVpJQU5CQVhacklBTkJIMFliZENFRElBVW9BZ0FoQ0FOQUlBZ2lCU2dDQkVGNGNTQUFSZzBESUFOQkhYWWhDQ0FEUVFGMElRTWdCU0FJUVFSeGFrRVFhaUlHS0FJQUlnZ05BQXNnQmlBRU5nSUFJQVFnQlRZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFNTElBVW9BZ2dpQXlBQ05nSU1JQVVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUZOZ0lNSUFJZ0F6WUNDQXNnQzBFSWFpRUREQVVMSUFVb0FnZ2lBeUFFTmdJTUlBVWdCRFlDQ0NBRVFRQTJBaGdnQkNBRk5nSU1JQVFnQXpZQ0NBdEJBQ2dDbE5DQWdBQWlBeUFDVFEwQVFRQW9BcURRZ0lBQUlnUWdBbW9pQlNBRElBSnJJZ05CQVhJMkFnUkJBQ0FETmdLVTBJQ0FBRUVBSUFVMkFxRFFnSUFBSUFRZ0FrRURjallDQkNBRVFRaHFJUU1NQXd0QkFDRURRUUJCTURZQytOT0FnQUFNQWdzQ1FDQUxSUTBBQWtBQ1FDQUlJQWdvQWh3aUJVRUNkRUc0MG9DQUFHb2lBeWdDQUVjTkFDQURJQUEyQWdBZ0FBMEJRUUFnQjBGK0lBVjNjU0lITmdLTTBJQ0FBQXdDQ3lBTFFSQkJGQ0FMS0FJUUlBaEdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBczJBaGdDUUNBSUtBSVFJZ05GRFFBZ0FDQUROZ0lRSUFNZ0FEWUNHQXNnQ0VFVWFpZ0NBQ0lEUlEwQUlBQkJGR29nQXpZQ0FDQURJQUEyQWhnTEFrQUNRQ0FFUVE5TERRQWdDQ0FFSUFKcUlnTkJBM0kyQWdRZ0NDQURhaUlESUFNb0FnUkJBWEkyQWdRTUFRc2dDQ0FDYWlJQUlBUkJBWEkyQWdRZ0NDQUNRUU55TmdJRUlBQWdCR29nQkRZQ0FBSkFJQVJCL3dGTERRQWdCRUY0Y1VHdzBJQ0FBR29oQXdKQUFrQkJBQ2dDaU5DQWdBQWlCVUVCSUFSQkEzWjBJZ1J4RFFCQkFDQUZJQVJ5TmdLSTBJQ0FBQ0FESVFRTUFRc2dBeWdDQ0NFRUN5QUVJQUEyQWd3Z0F5QUFOZ0lJSUFBZ0F6WUNEQ0FBSUFRMkFnZ01BUXRCSHlFREFrQWdCRUgvLy84SFN3MEFJQVJCQ0hZaUF5QURRWUQrUDJwQkVIWkJDSEVpQTNRaUJTQUZRWURnSDJwQkVIWkJCSEVpQlhRaUFpQUNRWUNBRDJwQkVIWkJBbkVpQW5SQkQzWWdBeUFGY2lBQ2Ntc2lBMEVCZENBRUlBTkJGV3AyUVFGeGNrRWNhaUVEQ3lBQUlBTTJBaHdnQUVJQU53SVFJQU5CQW5SQnVOS0FnQUJxSVFVQ1FDQUhRUUVnQTNRaUFuRU5BQ0FGSUFBMkFnQkJBQ0FISUFKeU5nS00wSUNBQUNBQUlBVTJBaGdnQUNBQU5nSUlJQUFnQURZQ0RBd0JDeUFFUVFCQkdTQURRUUYyYXlBRFFSOUdHM1FoQXlBRktBSUFJUUlDUUFOQUlBSWlCU2dDQkVGNGNTQUVSZzBCSUFOQkhYWWhBaUFEUVFGMElRTWdCU0FDUVFSeGFrRVFhaUlHS0FJQUlnSU5BQXNnQmlBQU5nSUFJQUFnQlRZQ0dDQUFJQUEyQWd3Z0FDQUFOZ0lJREFFTElBVW9BZ2dpQXlBQU5nSU1JQVVnQURZQ0NDQUFRUUEyQWhnZ0FDQUZOZ0lNSUFBZ0F6WUNDQXNnQ0VFSWFpRUREQUVMQWtBZ0NrVU5BQUpBQWtBZ0FDQUFLQUljSWdWQkFuUkJ1TktBZ0FCcUlnTW9BZ0JIRFFBZ0F5QUlOZ0lBSUFnTkFVRUFJQWxCZmlBRmQzRTJBb3pRZ0lBQURBSUxJQXBCRUVFVUlBb29BaEFnQUVZYmFpQUlOZ0lBSUFoRkRRRUxJQWdnQ2pZQ0dBSkFJQUFvQWhBaUEwVU5BQ0FJSUFNMkFoQWdBeUFJTmdJWUN5QUFRUlJxS0FJQUlnTkZEUUFnQ0VFVWFpQUROZ0lBSUFNZ0NEWUNHQXNDUUFKQUlBUkJEMHNOQUNBQUlBUWdBbW9pQTBFRGNqWUNCQ0FBSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBQUlBSnFJZ1VnQkVFQmNqWUNCQ0FBSUFKQkEzSTJBZ1FnQlNBRWFpQUVOZ0lBQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRTUNRQUpBUVFFZ0IwRURkblFpQ0NBR2NRMEFRUUFnQ0NBR2NqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRE5nSU1JQUlnQXpZQ0NDQURJQUkyQWd3Z0F5QUlOZ0lJQzBFQUlBVTJBcHpRZ0lBQVFRQWdCRFlDa05DQWdBQUxJQUJCQ0dvaEF3c2dBVUVRYWlTQWdJQ0FBQ0FEQ3dvQUlBQVF5WUNBZ0FBTDRnMEJCMzhDUUNBQVJRMEFJQUJCZUdvaUFTQUFRWHhxS0FJQUlnSkJlSEVpQUdvaEF3SkFJQUpCQVhFTkFDQUNRUU54UlEwQklBRWdBU2dDQUNJQ2F5SUJRUUFvQXBqUWdJQUFJZ1JKRFFFZ0FpQUFhaUVBQWtBZ0FVRUFLQUtjMElDQUFFWU5BQUpBSUFKQi93RkxEUUFnQVNnQ0NDSUVJQUpCQTNZaUJVRURkRUd3MElDQUFHb2lCa1lhQWtBZ0FTZ0NEQ0lDSUFSSERRQkJBRUVBS0FLSTBJQ0FBRUYrSUFWM2NUWUNpTkNBZ0FBTUF3c2dBaUFHUmhvZ0FpQUVOZ0lJSUFRZ0FqWUNEQXdDQ3lBQktBSVlJUWNDUUFKQUlBRW9BZ3dpQmlBQlJnMEFJQUVvQWdnaUFpQUVTUm9nQmlBQ05nSUlJQUlnQmpZQ0RBd0JDd0pBSUFGQkZHb2lBaWdDQUNJRURRQWdBVUVRYWlJQ0tBSUFJZ1FOQUVFQUlRWU1BUXNEUUNBQ0lRVWdCQ0lHUVJScUlnSW9BZ0FpQkEwQUlBWkJFR29oQWlBR0tBSVFJZ1FOQUFzZ0JVRUFOZ0lBQ3lBSFJRMEJBa0FDUUNBQklBRW9BaHdpQkVFQ2RFRzQwb0NBQUdvaUFpZ0NBRWNOQUNBQ0lBWTJBZ0FnQmcwQlFRQkJBQ2dDak5DQWdBQkJmaUFFZDNFMkFvelFnSUFBREFNTElBZEJFRUVVSUFjb0FoQWdBVVliYWlBR05nSUFJQVpGRFFJTElBWWdCellDR0FKQUlBRW9BaEFpQWtVTkFDQUdJQUkyQWhBZ0FpQUdOZ0lZQ3lBQktBSVVJZ0pGRFFFZ0JrRVVhaUFDTmdJQUlBSWdCallDR0F3QkN5QURLQUlFSWdKQkEzRkJBMGNOQUNBRElBSkJmbkUyQWdSQkFDQUFOZ0tRMElDQUFDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVEd3NnQVNBRFR3MEFJQU1vQWdRaUFrRUJjVVVOQUFKQUFrQWdBa0VDY1EwQUFrQWdBMEVBS0FLZzBJQ0FBRWNOQUVFQUlBRTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBR29pQURZQ2xOQ0FnQUFnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRTkJBRUVBTmdLUTBJQ0FBRUVBUVFBMkFwelFnSUFBRHdzQ1FDQURRUUFvQXB6UWdJQUFSdzBBUVFBZ0FUWUNuTkNBZ0FCQkFFRUFLQUtRMElDQUFDQUFhaUlBTmdLUTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVNBQWFpQUFOZ0lBRHdzZ0FrRjRjU0FBYWlFQUFrQUNRQ0FDUWY4QlN3MEFJQU1vQWdnaUJDQUNRUU4ySWdWQkEzUkJzTkNBZ0FCcUlnWkdHZ0pBSUFNb0Fnd2lBaUFFUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFGZDNFMkFvalFnSUFBREFJTElBSWdCa1lhSUFJZ0JEWUNDQ0FFSUFJMkFnd01BUXNnQXlnQ0dDRUhBa0FDUUNBREtBSU1JZ1lnQTBZTkFDQURLQUlJSWdKQkFDZ0NtTkNBZ0FCSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBMEVVYWlJQ0tBSUFJZ1FOQUNBRFFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFBQ1FBSkFJQU1nQXlnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1BZ3NnQjBFUVFSUWdCeWdDRUNBRFJodHFJQVkyQWdBZ0JrVU5BUXNnQmlBSE5nSVlBa0FnQXlnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQU1vQWhRaUFrVU5BQ0FHUVJScUlBSTJBZ0FnQWlBR05nSVlDeUFCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFSUFGQkFDZ0NuTkNBZ0FCSERRRkJBQ0FBTmdLUTBJQ0FBQThMSUFNZ0FrRitjVFlDQkNBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUN3SkFJQUJCL3dGTERRQWdBRUY0Y1VHdzBJQ0FBR29oQWdKQUFrQkJBQ2dDaU5DQWdBQWlCRUVCSUFCQkEzWjBJZ0J4RFFCQkFDQUVJQUJ5TmdLSTBJQ0FBQ0FDSVFBTUFRc2dBaWdDQ0NFQUN5QUFJQUUyQWd3Z0FpQUJOZ0lJSUFFZ0FqWUNEQ0FCSUFBMkFnZ1BDMEVmSVFJQ1FDQUFRZi8vL3dkTERRQWdBRUVJZGlJQ0lBSkJnUDQvYWtFUWRrRUljU0lDZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJR0lBWkJnSUFQYWtFUWRrRUNjU0lHZEVFUGRpQUNJQVJ5SUFaeWF5SUNRUUYwSUFBZ0FrRVZhblpCQVhGeVFSeHFJUUlMSUFFZ0FqWUNIQ0FCUWdBM0FoQWdBa0VDZEVHNDBvQ0FBR29oQkFKQUFrQkJBQ2dDak5DQWdBQWlCa0VCSUFKMElnTnhEUUFnQkNBQk5nSUFRUUFnQmlBRGNqWUNqTkNBZ0FBZ0FTQUVOZ0lZSUFFZ0FUWUNDQ0FCSUFFMkFnd01BUXNnQUVFQVFSa2dBa0VCZG1zZ0FrRWZSaHQwSVFJZ0JDZ0NBQ0VHQWtBRFFDQUdJZ1FvQWdSQmVIRWdBRVlOQVNBQ1FSMTJJUVlnQWtFQmRDRUNJQVFnQmtFRWNXcEJFR29pQXlnQ0FDSUdEUUFMSUFNZ0FUWUNBQ0FCSUFRMkFoZ2dBU0FCTmdJTUlBRWdBVFlDQ0F3QkN5QUVLQUlJSWdBZ0FUWUNEQ0FFSUFFMkFnZ2dBVUVBTmdJWUlBRWdCRFlDRENBQklBQTJBZ2dMUVFCQkFDZ0NxTkNBZ0FCQmYyb2lBVUYvSUFFYk5nS28wSUNBQUFzTEJBQUFBQXRPQUFKQUlBQU5BRDhBUVJCMER3c0NRQ0FBUWYvL0EzRU5BQ0FBUVg5TURRQUNRQ0FBUVJCMlFBQWlBRUYvUncwQVFRQkJNRFlDK05PQWdBQkJmdzhMSUFCQkVIUVBDeERLZ0lDQUFBQUw4Z0lDQTM4QmZnSkFJQUpGRFFBZ0FDQUJPZ0FBSUFJZ0FHb2lBMEYvYWlBQk9nQUFJQUpCQTBrTkFDQUFJQUU2QUFJZ0FDQUJPZ0FCSUFOQmZXb2dBVG9BQUNBRFFYNXFJQUU2QUFBZ0FrRUhTUTBBSUFBZ0FUb0FBeUFEUVh4cUlBRTZBQUFnQWtFSlNRMEFJQUJCQUNBQWEwRURjU0lFYWlJRElBRkIvd0Z4UVlHQ2hBaHNJZ0UyQWdBZ0F5QUNJQVJyUVh4eElnUnFJZ0pCZkdvZ0FUWUNBQ0FFUVFsSkRRQWdBeUFCTmdJSUlBTWdBVFlDQkNBQ1FYaHFJQUUyQWdBZ0FrRjBhaUFCTmdJQUlBUkJHVWtOQUNBRElBRTJBaGdnQXlBQk5nSVVJQU1nQVRZQ0VDQURJQUUyQWd3Z0FrRndhaUFCTmdJQUlBSkJiR29nQVRZQ0FDQUNRV2hxSUFFMkFnQWdBa0ZrYWlBQk5nSUFJQVFnQTBFRWNVRVljaUlGYXlJQ1FTQkpEUUFnQWExQ2dZQ0FnQkIrSVFZZ0F5QUZhaUVCQTBBZ0FTQUdOd01ZSUFFZ0JqY0RFQ0FCSUFZM0F3Z2dBU0FHTndNQUlBRkJJR29oQVNBQ1FXQnFJZ0pCSDBzTkFBc0xJQUFMQzQ1SUFRQkJnQWdMaGtnQkFBQUFBZ0FBQUFNQUFBQUFBQUFBQUFBQUFBUUFBQUFGQUFBQUFBQUFBQUFBQUFBR0FBQUFCd0FBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2djWFZsY25rQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5aWIyUjVBRU52Ym5SbGJuUXRUR1Z1WjNSb0lHOTJaWEptYkc5M0FFTm9kVzVySUhOcGVtVWdiM1psY21ac2IzY0FVbVZ6Y0c5dWMyVWdiM1psY21ac2IzY0FTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRWhVVkZBdmVDNTRJSEpsY1hWbGMzUUFTVzUyWVd4cFpDQnRaWFJvYjJRZ1ptOXlJRkpVVTFBdmVDNTRJSEpsY1hWbGMzUUFSWGh3WldOMFpXUWdVMDlWVWtORklHMWxkR2h2WkNCbWIzSWdTVU5GTDNndWVDQnlaWEYxWlhOMEFFbHVkbUZzYVdRZ1kyaGhjaUJwYmlCMWNtd2dabkpoWjIxbGJuUWdjM1JoY25RQVJYaHdaV04wWldRZ1pHOTBBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZjM1JoZEhWekFFbHVkbUZzYVdRZ2NtVnpjRzl1YzJVZ2MzUmhkSFZ6QUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NQVZYTmxjaUJqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmY21WelpYUmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOW9aV0ZrWlhKZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXRaWE56WVdkbFgySmxaMmx1WUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYzNSaGRIVnpYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDNWeWJGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZhR1ZoWkdWeVgzWmhiSFZsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxkR2h2WkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCVmJtVjRjR1ZqZEdWa0lHTm9ZWElnYVc0Z2RYSnNJSE5sY25abGNnQkpiblpoYkdsa0lHaGxZV1JsY2lCMllXeDFaU0JqYUdGeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUdacFpXeGtJR05vWVhJQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MlpYSnphVzl1QUVsdWRtRnNhV1FnYldsdWIzSWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMWhhbTl5SUhabGNuTnBiMjRBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2RtVnljMmx2YmdCRmVIQmxZM1JsWkNCRFVreEdJR0ZtZEdWeUlIWmxjbk5wYjI0QVNXNTJZV3hwWkNCSVZGUlFJSFpsY25OcGIyNEFTVzUyWVd4cFpDQm9aV0ZrWlhJZ2RHOXJaVzRBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDkxY213QVNXNTJZV3hwWkNCamFHRnlZV04wWlhKeklHbHVJSFZ5YkFCVmJtVjRjR1ZqZEdWa0lITjBZWEowSUdOb1lYSWdhVzRnZFhKc0FFUnZkV0pzWlNCQUlHbHVJSFZ5YkFCRmJYQjBlU0JEYjI1MFpXNTBMVXhsYm1kMGFBQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJEYjI1MFpXNTBMVXhsYm1kMGFBQkVkWEJzYVdOaGRHVWdRMjl1ZEdWdWRDMU1aVzVuZEdnQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQndZWFJvQUVOdmJuUmxiblF0VEdWdVozUm9JR05oYmlkMElHSmxJSEJ5WlhObGJuUWdkMmwwYUNCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WndCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCemFYcGxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZhR1ZoWkdWeVgzWmhiSFZsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYM1poYkhWbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdkbUZzZFdVQVRXbHpjMmx1WnlCbGVIQmxZM1JsWkNCTVJpQmhablJsY2lCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsSUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVmtJSFpoYkhWbEFGQmhkWE5sWkNCaWVTQnZibDlvWldGa1pYSnpYMk52YlhCc1pYUmxBRWx1ZG1Gc2FXUWdSVTlHSUhOMFlYUmxBRzl1WDNKbGMyVjBJSEJoZFhObEFHOXVYMk5vZFc1clgyaGxZV1JsY2lCd1lYVnpaUUJ2Ymw5dFpYTnpZV2RsWDJKbFoybHVJSEJoZFhObEFHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWlNCd1lYVnpaUUJ2Ymw5emRHRjBkWE5mWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmZG1WeWMybHZibDlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkxY214ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyMWxjM05oWjJWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJobFlXUmxjbDltYVdWc1pGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaU0J3WVhWelpRQlZibVY0Y0dWamRHVmtJSE53WVdObElHRm1kR1Z5SUhOMFlYSjBJR3hwYm1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmYm1GdFpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJRzVoYldVQVVHRjFjMlVnYjI0Z1EwOU9Ua1ZEVkM5VmNHZHlZV1JsQUZCaGRYTmxJRzl1SUZCU1NTOVZjR2R5WVdSbEFFVjRjR1ZqZEdWa0lFaFVWRkF2TWlCRGIyNXVaV04wYVc5dUlGQnlaV1poWTJVQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5dFpYUm9iMlFBUlhod1pXTjBaV1FnYzNCaFkyVWdZV1owWlhJZ2JXVjBhRzlrQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYMlpwWld4a0FGQmhkWE5sWkFCSmJuWmhiR2xrSUhkdmNtUWdaVzVqYjNWdWRHVnlaV1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdaVzVqYjNWdWRHVnlaV1FBVlc1bGVIQmxZM1JsWkNCamFHRnlJR2x1SUhWeWJDQnpZMmhsYldFQVVtVnhkV1Z6ZENCb1lYTWdhVzUyWVd4cFpDQmdWSEpoYm5ObVpYSXRSVzVqYjJScGJtZGdBRk5YU1ZSRFNGOVFVazlZV1FCVlUwVmZVRkpQV0ZrQVRVdEJRMVJKVmtsVVdRQlZUbEJTVDBORlUxTkJRa3hGWDBWT1ZFbFVXUUJEVDFCWkFFMVBWa1ZFWDFCRlVrMUJUa1ZPVkV4WkFGUlBUMTlGUVZKTVdRQk9UMVJKUmxrQVJrRkpURVZFWDBSRlVFVk9SRVZPUTFrQVFrRkVYMGRCVkVWWFFWa0FVRXhCV1FCUVZWUUFRMGhGUTB0UFZWUUFSMEZVUlZkQldWOVVTVTFGVDFWVUFGSkZVVlZGVTFSZlZFbE5SVTlWVkFCT1JWUlhUMUpMWDBOUFRrNUZRMVJmVkVsTlJVOVZWQUJEVDA1T1JVTlVTVTlPWDFSSlRVVlBWVlFBVEU5SFNVNWZWRWxOUlU5VlZBQk9SVlJYVDFKTFgxSkZRVVJmVkVsTlJVOVZWQUJRVDFOVUFFMUpVMFJKVWtWRFZFVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZURTlCUkY5Q1FVeEJUa05GUkY5U1JWRlZSVk5VQUVKQlJGOVNSVkZWUlZOVUFFaFVWRkJmVWtWUlZVVlRWRjlUUlU1VVgxUlBYMGhVVkZCVFgxQlBVbFFBVWtWUVQxSlVBRWxOWDBGZlZFVkJVRTlVQUZKRlUwVlVYME5QVGxSRlRsUUFUazlmUTA5T1ZFVk9WQUJRUVZKVVNVRk1YME5QVGxSRlRsUUFTRkJGWDBsT1ZrRk1TVVJmUTA5T1UxUkJUbFFBU0ZCRlgwTkNYMUpGVTBWVUFFZEZWQUJJVUVWZlUxUlNTVU5VQUVOUFRrWk1TVU5VQUZSRlRWQlBVa0ZTV1Y5U1JVUkpVa1ZEVkFCUVJWSk5RVTVGVGxSZlVrVkVTVkpGUTFRQVEwOU9Ua1ZEVkFCTlZVeFVTVjlUVkVGVVZWTUFTRkJGWDBsT1ZrRk1TVVJmVTFSQlZGVlRBRlJQVDE5TlFVNVpYMUpGVVZWRlUxUlRBRVZCVWt4WlgwaEpUbFJUQUZWT1FWWkJTVXhCUWt4RlgwWlBVbDlNUlVkQlRGOVNSVUZUVDA1VEFFOVFWRWxQVGxNQVUxZEpWRU5JU1U1SFgxQlNUMVJQUTA5TVV3QldRVkpKUVU1VVgwRk1VMDlmVGtWSFQxUkpRVlJGVXdCTlZVeFVTVkJNUlY5RFNFOUpRMFZUQUVsT1ZFVlNUa0ZNWDFORlVsWkZVbDlGVWxKUFVnQlhSVUpmVTBWU1ZrVlNYMVZPUzA1UFYwNWZSVkpTVDFJQVVrRkpURWRWVGw5RlVsSlBVZ0JKUkVWT1ZFbFVXVjlRVWs5V1NVUkZVbDlCVlZSSVJVNVVTVU5CVkVsUFRsOUZVbEpQVWdCVFUweGZRMFZTVkVsR1NVTkJWRVZmUlZKU1QxSUFTVTVXUVV4SlJGOVlYMFpQVWxkQlVrUkZSRjlHVDFJQVUwVlVYMUJCVWtGTlJWUkZVZ0JIUlZSZlVFRlNRVTFGVkVWU0FFaFFSVjlWVTBWU0FGTkZSVjlQVkVoRlVnQklVRVZmUTBKZlEwaFZUa3RmU0VWQlJFVlNBRTFMUTBGTVJVNUVRVklBVTBWVVZWQUFWMFZDWDFORlVsWkZVbDlKVTE5RVQxZE9BRlJGUVZKRVQxZE9BRWhRUlY5RFRFOVRSVVJmUTA5T1RrVkRWRWxQVGdCSVJWVlNTVk5VU1VOZlJWaFFTVkpCVkVsUFRnQkVTVk5EVDA1T1JVTlVSVVJmVDFCRlVrRlVTVTlPQUU1UFRsOUJWVlJJVDFKSlZFRlVTVlpGWDBsT1JrOVNUVUZVU1U5T0FFaFFSVjlKVGxaQlRFbEVYMVpGVWxOSlQwNEFTRkJGWDBOQ1gwMUZVMU5CUjBWZlFrVkhTVTRBVTBsVVJWOUpVMTlHVWs5YVJVNEFTRkJGWDBsT1ZrRk1TVVJmU0VWQlJFVlNYMVJQUzBWT0FFbE9Wa0ZNU1VSZlZFOUxSVTRBUms5U1FrbEVSRVZPQUVWT1NFRk9RMFZmV1U5VlVsOURRVXhOQUVoUVJWOUpUbFpCVEVsRVgxVlNUQUJDVEU5RFMwVkVYMEpaWDFCQlVrVk9WRUZNWDBOUFRsUlNUMHdBVFV0RFQwd0FRVU5NQUVoUVJWOUpUbFJGVWs1QlRBQlNSVkZWUlZOVVgwaEZRVVJGVWw5R1NVVk1SRk5mVkU5UFgweEJVa2RGWDFWT1QwWkdTVU5KUVV3QVNGQkZYMDlMQUZWT1RFbE9Td0JWVGt4UFEwc0FVRkpKQUZKRlZGSlpYMWRKVkVnQVNGQkZYMGxPVmtGTVNVUmZRMDlPVkVWT1ZGOU1SVTVIVkVnQVNGQkZYMVZPUlZoUVJVTlVSVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FSa3hWVTBnQVVGSlBVRkJCVkVOSUFFMHRVMFZCVWtOSUFGVlNTVjlVVDA5ZlRFOU9Sd0JRVWs5RFJWTlRTVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZVRVZTVTBsVFZFVk9WRjlYUVZKT1NVNUhBRTFKVTBORlRFeEJUa1ZQVlZOZlYwRlNUa2xPUndCSVVFVmZTVTVXUVV4SlJGOVVVa0ZPVTBaRlVsOUZUa05QUkVsT1J3QkZlSEJsWTNSbFpDQkRVa3hHQUVoUVJWOUpUbFpCVEVsRVgwTklWVTVMWDFOSldrVUFUVTlXUlFCRFQwNVVTVTVWUlFCSVVFVmZRMEpmVTFSQlZGVlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKVFgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5V1JWSlRTVTlPWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlWVWt4ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYME5QVFZCTVJWUkZBRWhRUlY5RFFsOUlSVUZFUlZKZlZrRk1WVVZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYME5JVlU1TFgwVllWRVZPVTBsUFRsOVdRVXhWUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZSVmhVUlU1VFNVOU9YMDVCVFVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlUxTkJSMFZmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMDFGVkVoUFJGOURUMDFRVEVWVVJRQklVRVZmUTBKZlNFVkJSRVZTWDBaSlJVeEVYME5QVFZCTVJWUkZBRVJGVEVWVVJRQklVRVZmU1U1V1FVeEpSRjlGVDBaZlUxUkJWRVVBU1U1V1FVeEpSRjlUVTB4ZlEwVlNWRWxHU1VOQlZFVUFVRUZWVTBVQVRrOWZVa1ZUVUU5T1UwVUFWVTVUVlZCUVQxSlVSVVJmVFVWRVNVRmZWRmxRUlFCSFQwNUZBRTVQVkY5QlEwTkZVRlJCUWt4RkFGTkZVbFpKUTBWZlZVNUJWa0ZKVEVGQ1RFVUFVa0ZPUjBWZlRrOVVYMU5CVkVsVFJrbEJRa3hGQUU5U1NVZEpUbDlKVTE5VlRsSkZRVU5JUVVKTVJRQlNSVk5RVDA1VFJWOUpVMTlUVkVGTVJRQlFWVkpIUlFCTlJWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDFSUFQxOU1RVkpIUlFCUVFWbE1UMEZFWDFSUFQxOU1RVkpIUlFCSlRsTlZSa1pKUTBsRlRsUmZVMVJQVWtGSFJRQklVRVZmVUVGVlUwVkVYMVZRUjFKQlJFVUFTRkJGWDFCQlZWTkZSRjlJTWw5VlVFZFNRVVJGQUZOUFZWSkRSUUJCVGs1UFZVNURSUUJVVWtGRFJRQklVRVZmVlU1RldGQkZRMVJGUkY5VFVFRkRSUUJFUlZORFVrbENSUUJWVGxOVlFsTkRVa2xDUlFCU1JVTlBVa1FBU0ZCRlgwbE9Wa0ZNU1VSZlRVVlVTRTlFQUU1UFZGOUdUMVZPUkFCUVVrOVFSa2xPUkFCVlRrSkpUa1FBVWtWQ1NVNUVBRlZPUVZWVVNFOVNTVnBGUkFCTlJWUklUMFJmVGs5VVgwRk1URTlYUlVRQVNGUlVVRjlXUlZKVFNVOU9YMDVQVkY5VFZWQlFUMUpVUlVRQVFVeFNSVUZFV1Y5U1JWQlBVbFJGUkFCQlEwTkZVRlJGUkFCT1QxUmZTVTFRVEVWTlJVNVVSVVFBVEU5UFVGOUVSVlJGUTFSRlJBQklVRVZmUTFKZlJWaFFSVU5VUlVRQVNGQkZYMHhHWDBWWVVFVkRWRVZFQUVOU1JVRlVSVVFBU1UxZlZWTkZSQUJJVUVWZlVFRlZVMFZFQUZSSlRVVlBWVlJmVDBORFZWSkZSQUJRUVZsTlJVNVVYMUpGVVZWSlVrVkVBRkJTUlVOUFRrUkpWRWxQVGw5U1JWRlZTVkpGUkFCUVVrOVlXVjlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk9SVlJYVDFKTFgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUV4RlRrZFVTRjlTUlZGVlNWSkZSQUJUVTB4ZlEwVlNWRWxHU1VOQlZFVmZVa1ZSVlVsU1JVUUFWVkJIVWtGRVJWOVNSVkZWU1ZKRlJBQlFRVWRGWDBWWVVFbFNSVVFBVUZKRlEwOU9SRWxVU1U5T1gwWkJTVXhGUkFCRldGQkZRMVJCVkVsUFRsOUdRVWxNUlVRQVVrVldRVXhKUkVGVVNVOU9YMFpCU1V4RlJBQlRVMHhmU0VGT1JGTklRVXRGWDBaQlNVeEZSQUJNVDBOTFJVUUFWRkpCVGxOR1QxSk5RVlJKVDA1ZlFWQlFURWxGUkFCT1QxUmZUVTlFU1VaSlJVUUFUazlVWDBWWVZFVk9SRVZFQUVKQlRrUlhTVVJVU0Y5TVNVMUpWRjlGV0VORlJVUkZSQUJUU1ZSRlgwbFRYMDlXUlZKTVQwRkVSVVFBU0VWQlJBQkZlSEJsWTNSbFpDQklWRlJRTHdBQVhoTUFBQ1lUQUFBd0VBQUE4QmNBQUowVEFBQVZFZ0FBT1JjQUFQQVNBQUFLRUFBQWRSSUFBSzBTQUFDQ0V3QUFUeFFBQUg4UUFBQ2dGUUFBSXhRQUFJa1NBQUNMRkFBQVRSVUFBTlFSQUFEUEZBQUFFQmdBQU1rV0FBRGNGZ0FBd1JFQUFPQVhBQUM3RkFBQWRCUUFBSHdWQUFEbEZBQUFDQmNBQUI4UUFBQmxGUUFBb3hRQUFDZ1ZBQUFDRlFBQW1SVUFBQ3dRQUFDTEdRQUFUdzhBQU5RT0FBQnFFQUFBemhBQUFBSVhBQUNKRGdBQWJoTUFBQndUQUFCbUZBQUFWaGNBQU1FVEFBRE5Fd0FBYkJNQUFHZ1hBQUJtRndBQVh4Y0FBQ0lUQUFET0R3QUFhUTRBQU5nT0FBQmpGZ0FBeXhNQUFLb09BQUFvRndBQUpoY0FBTVVUQUFCZEZnQUE2QkVBQUdjVEFBQmxFd0FBOGhZQUFITVRBQUFkRndBQStSWUFBUE1SQUFEUERnQUF6aFVBQUF3U0FBQ3pFUUFBcFJFQUFHRVFBQUF5RndBQXV4TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlEQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFCQUFBQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0FBSUNBZ0lDQUFBQ0FnQUNBZ0FDQWdJQ0FnSUNBZ0lDQUFNQUJBQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUFBQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFnQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBYkc5elpXVmxjQzFoYkdsMlpRQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQVFFQkFRRUJBUUVCQVFJQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJZMmgxYm10bFpBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVBQUFFQkFBRUJBQUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJsWTNScGIyNWxiblF0YkdWdVozUm9iMjV5YjNoNUxXTnZibTVsWTNScGIyNEFBQUFBQUFBQUFBQUFBQUFBQUFCeVlXNXpabVZ5TFdWdVkyOWthVzVuY0dkeVlXUmxEUW9OQ2cwS1UwME5DZzBLVkZSUUwwTkZMMVJUVUM4QUFBQUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFJQUFRTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBUUVGQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFBQVFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTUVBQUFFQkFRRUJBUUVCQVFFQkFVRUJBUUVCQVFFQkFRRUJBUUFCQUFHQndRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUFBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBSUFBQUFBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCT1QxVk9RMFZGUTB0UFZWUk9SVU5VUlZSRlExSkpRa1ZNVlZOSVJWUkZRVVJUUlVGU1EwaFNSMFZEVkVsV1NWUlpURVZPUkVGU1ZrVlBWRWxHV1ZCVVNVOU9VME5JVTBWQldWTlVRVlJEU0VkRlQxSkVTVkpGUTFSUFVsUlNRMGhRUVZKQlRVVlVSVkpWVWtORlFsTkRVa2xDUlVGU1JFOVhUa0ZEUlVsT1JFNUxRMHRWUWxORFVrbENSVWhVVkZBdlFVUlVVQzg9J1xuIiwgIm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQk1BaGdBWDhCZjJBRGYzOS9BWDlnQkg5L2YzOEJmMkFBQUdBRGYzOS9BR0FCZndCZ0FuOS9BR0FHZjM5L2YzOS9BQUxMQVFnRFpXNTJHSGRoYzIxZmIyNWZhR1ZoWkdWeWMxOWpiMjF3YkdWMFpRQUNBMlZ1ZGhWM1lYTnRYMjl1WDIxbGMzTmhaMlZmWW1WbmFXNEFBQU5sYm5ZTGQyRnpiVjl2Ymw5MWNtd0FBUU5sYm5ZT2QyRnpiVjl2Ymw5emRHRjBkWE1BQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZlptbGxiR1FBQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZmRtRnNkV1VBQVFObGJuWU1kMkZ6YlY5dmJsOWliMlI1QUFFRFpXNTJHSGRoYzIxZmIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpRQUFBMFpGQXdNRUFBQUZBQUFBQUFBQUJRRUZBQVVGQlFBQUJnQUFBQUFHQmdZR0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBQUJBUWNBQUFVRkF3QUJCQVVCY0FFU0VnVURBUUFDQmdnQmZ3RkJnTlFFQ3dmUkJTSUdiV1Z0YjNKNUFnQUxYMmx1YVhScFlXeHBlbVVBQ1JsZlgybHVaR2x5WldOMFgyWjFibU4wYVc5dVgzUmhZbXhsQVFBTGJHeG9kSFJ3WDJsdWFYUUFDaGhzYkdoMGRIQmZjMmh2ZFd4a1gydGxaWEJmWVd4cGRtVUFRUXhzYkdoMGRIQmZZV3hzYjJNQURBWnRZV3hzYjJNQVJndHNiR2gwZEhCZlpuSmxaUUFOQkdaeVpXVUFTQTlzYkdoMGRIQmZaMlYwWDNSNWNHVUFEaFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV0ZxYjNJQUR4VnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXbHViM0lBRUJGc2JHaDBkSEJmWjJWMFgyMWxkR2h2WkFBUkZteHNhSFIwY0Y5blpYUmZjM1JoZEhWelgyTnZaR1VBRWhKc2JHaDBkSEJmWjJWMFgzVndaM0poWkdVQUV3eHNiR2gwZEhCZmNtVnpaWFFBRkE1c2JHaDBkSEJmWlhobFkzVjBaUUFWRkd4c2FIUjBjRjl6WlhSMGFXNW5jMTlwYm1sMEFCWU5iR3hvZEhSd1gyWnBibWx6YUFBWERHeHNhSFIwY0Y5d1lYVnpaUUFZRFd4c2FIUjBjRjl5WlhOMWJXVUFHUnRzYkdoMGRIQmZjbVZ6ZFcxbFgyRm1kR1Z5WDNWd1ozSmhaR1VBR2hCc2JHaDBkSEJmWjJWMFgyVnljbTV2QUJzWGJHeG9kSFJ3WDJkbGRGOWxjbkp2Y2w5eVpXRnpiMjRBSEJkc2JHaDBkSEJmYzJWMFgyVnljbTl5WDNKbFlYTnZiZ0FkRkd4c2FIUjBjRjluWlhSZlpYSnliM0pmY0c5ekFCNFJiR3hvZEhSd1gyVnljbTV2WDI1aGJXVUFIeEpzYkdoMGRIQmZiV1YwYUc5a1gyNWhiV1VBSUJKc2JHaDBkSEJmYzNSaGRIVnpYMjVoYldVQUlScHNiR2gwZEhCZmMyVjBYMnhsYm1sbGJuUmZhR1ZoWkdWeWN3QWlJV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlqYUhWdWEyVmtYMnhsYm1kMGFBQWpIV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlyWldWd1gyRnNhWFpsQUNRa2JHeG9kSFJ3WDNObGRGOXNaVzVwWlc1MFgzUnlZVzV6Wm1WeVgyVnVZMjlrYVc1bkFDVVliR3hvZEhSd1gyMWxjM05oWjJWZmJtVmxaSE5mWlc5bUFEOEpGd0VBUVFFTEVRRUNBd1FGQ3dZSE5UazNNUzh0SnlzcENyTGdBa1VDQUFzSUFCQ0lnSUNBQUFzWkFDQUFFTUtBZ0lBQUdpQUFJQUkyQWpnZ0FDQUJPZ0FvQ3h3QUlBQWdBQzhCTWlBQUxRQXVJQUFRd1lDQWdBQVFnSUNBZ0FBTEtnRUJmMEhBQUJER2dJQ0FBQ0lCRU1LQWdJQUFHaUFCUVlDSWdJQUFOZ0k0SUFFZ0FEb0FLQ0FCQ3dvQUlBQVF5SUNBZ0FBTEJ3QWdBQzBBS0FzSEFDQUFMUUFxQ3djQUlBQXRBQ3NMQndBZ0FDMEFLUXNIQUNBQUx3RXlDd2NBSUFBdEFDNExSUUVFZnlBQUtBSVlJUUVnQUMwQUxTRUNJQUF0QUNnaEF5QUFLQUk0SVFRZ0FCRENnSUNBQUJvZ0FDQUVOZ0k0SUFBZ0F6b0FLQ0FBSUFJNkFDMGdBQ0FCTmdJWUN4RUFJQUFnQVNBQklBSnFFTU9BZ0lBQUN4QUFJQUJCQUVIY0FCRE1nSUNBQUJvTFp3RUJmMEVBSVFFQ1FDQUFLQUlNRFFBQ1FBSkFBa0FDUUNBQUxRQXZEZ01CQUFNQ0N5QUFLQUk0SWdGRkRRQWdBU2dDTENJQlJRMEFJQUFnQVJHQWdJQ0FBQUFpQVEwREMwRUFEd3NReW9DQWdBQUFDeUFBUWNPV2dJQUFOZ0lRUVE0aEFRc2dBUXNlQUFKQUlBQW9BZ3dOQUNBQVFkR2JnSUFBTmdJUUlBQkJGVFlDREFzTEZnQUNRQ0FBS0FJTVFSVkhEUUFnQUVFQU5nSU1Dd3NXQUFKQUlBQW9BZ3hCRmtjTkFDQUFRUUEyQWd3TEN3Y0FJQUFvQWd3TEJ3QWdBQ2dDRUFzSkFDQUFJQUUyQWhBTEJ3QWdBQ2dDRkFzaUFBSkFJQUJCSkVrTkFCREtnSUNBQUFBTElBQkJBblJCb0xPQWdBQnFLQUlBQ3lJQUFrQWdBRUV1U1EwQUVNcUFnSUFBQUFzZ0FFRUNkRUd3dElDQUFHb29BZ0FMN2dzQkFYOUI2NmlBZ0FBaEFRSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCbkg5cUR2UURZMklBQVdGaFlXRmhZUUlEQkFWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhCZ2NJQ1FvTERBME9EMkZoWVdGaEVHRmhZV0ZoWVdGaFlXRmhFV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZUklURkJVV0Z4Z1pHaHRoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyWVRjNE9UcGhZV0ZoWVdGaFlUdGhZV0U4WVdGaFlUMCtQMkZoWVdGaFlXRmhRR0ZoUVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UyRmhZV0ZoWVdGaFZGVldWMWhaV2x0aFhGMWhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZlWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWDJCaEMwSGhwNENBQUE4TFFhU2hnSUFBRHd0Qnk2eUFnQUFQQzBIK3NZQ0FBQThMUWNDa2dJQUFEd3RCcTZTQWdBQVBDMEdOcUlDQUFBOExRZUttZ0lBQUR3dEJnTENBZ0FBUEMwRzVyNENBQUE4TFFkZWtnSUFBRHd0Qjc1K0FnQUFQQzBIaG40Q0FBQThMUWZxZmdJQUFEd3RCOHFDQWdBQVBDMEdvcjRDQUFBOExRYTZ5Z0lBQUR3dEJpTENBZ0FBUEMwSHNwNENBQUE4TFFZS2lnSUFBRHd0QmpwMkFnQUFQQzBIUXJvQ0FBQThMUWNxamdJQUFEd3RCeGJLQWdBQVBDMEhmbklDQUFBOExRZEtjZ0lBQUR3dEJ4S0NBZ0FBUEMwSFhvSUNBQUE4TFFhS2ZnSUFBRHd0QjdhNkFnQUFQQzBHcnNJQ0FBQThMUWRTbGdJQUFEd3RCeks2QWdBQVBDMEg2cm9DQUFBOExRZnlyZ0lBQUR3dEIwckNBZ0FBUEMwSHhuWUNBQUE4TFFidWdnSUFBRHd0Qjk2dUFnQUFQQzBHUXNZQ0FBQThMUWRleGdJQUFEd3RCb3EyQWdBQVBDMEhVcDRDQUFBOExRZUNyZ0lBQUR3dEJuNnlBZ0FBUEMwSHJzWUNBQUE4TFFkV2ZnSUFBRHd0QnlyR0FnQUFQQzBIZXBZQ0FBQThMUWRTZWdJQUFEd3RCOUp5QWdBQVBDMEduc29DQUFBOExRYkdkZ0lBQUR3dEJvSjJBZ0FBUEMwRzVzWUNBQUE4TFFieXdnSUFBRHd0QmtxR0FnQUFQQzBHenBvQ0FBQThMUWVtc2dJQUFEd3RCcko2QWdBQVBDMEhVcTRDQUFBOExRZmVtZ0lBQUR3dEJnS2FBZ0FBUEMwR3dvWUNBQUE4TFFmNmVnSUFBRHd0QmphT0FnQUFQQzBHSnJZQ0FBQThMUWZlaWdJQUFEd3RCb0xHQWdBQVBDMEd1bjRDQUFBOExRY2FsZ0lBQUR3dEI2SjZBZ0FBUEMwR1Rvb0NBQUE4TFFjS3ZnSUFBRHd0Qnc1MkFnQUFQQzBHTHJJQ0FBQThMUWVHZGdJQUFEd3RCamErQWdBQVBDMEhxb1lDQUFBOExRYlN0Z0lBQUR3dEIwcStBZ0FBUEMwSGZzb0NBQUE4TFFkS3lnSUFBRHd0QjhMQ0FnQUFQQzBHcG9vQ0FBQThMUWZtamdJQUFEd3RCbVo2QWdBQVBDMEcxcklDQUFBOExRWnV3Z0lBQUR3dEJrcktBZ0FBUEMwRzJxNENBQUE4TFFjS2lnSUFBRHd0QitMS0FnQUFQQzBHZXBZQ0FBQThMUWRDaWdJQUFEd3RCdXA2QWdBQVBDMEdCbm9DQUFBOExFTXFBZ0lBQUFBdEIxcUdBZ0FBaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ0FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDQkNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRY2FSZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJd0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlvQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NOQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlNSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3WnFBZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWpnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0VDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpXUWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSThJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaFFpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFR3FtNENBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDUUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJWUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pPQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NKQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlzSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWlnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaUlDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1VDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSWNJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQndwbUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba2dpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWlNVZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FKTUlnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FsUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NXQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0RkFRRi9Ba0FDUUNBQUx3RXdRUlJ4UVJSSERRQkJBU0VESUFBdEFDaEJBVVlOQVNBQUx3RXlRZVVBUmlFRERBRUxJQUF0QUNsQkJVWWhBd3NnQUNBRE9nQXVRUUFML2dFQkEzOUJBU0VEQWtBZ0FDOEJNQ0lFUVFoeERRQWdBQ2tESUVJQVVpRURDd0pBQWtBZ0FDMEFMa1VOQUVFQklRVWdBQzBBS1VFRlJnMEJRUUVoQlNBRVFjQUFjVVVnQTNGQkFVY05BUXRCQUNFRklBUkJ3QUJ4RFFCQkFpRUZJQVJCLy84RGNTSURRUWh4RFFBQ1FDQURRWUFFY1VVTkFBSkFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRcHhEUUJCQlE4TFFRUVBDd0pBSUFOQklIRU5BQUpBSUFBdEFDaEJBVVlOQUNBQUx3RXlRZi8vQTNFaUFFR2NmMnBCNUFCSkRRQWdBRUhNQVVZTkFDQUFRYkFDUmcwQVFRUWhCU0FFUVNoeFJRMENJQU5CaUFSeFFZQUVSZzBDQzBFQUR3dEJBRUVESUFBcEF5QlFHeUVGQ3lBRkMySUJBbjlCQUNFQkFrQWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lDUVp4L2FrSGtBRWtOQUNBQ1Fjd0JSZzBBSUFKQnNBSkdEUUFnQUM4Qk1DSUFRY0FBY1EwQVFRRWhBU0FBUVlnRWNVR0FCRVlOQUNBQVFTaHhSU0VCQ3lBQkM2Y0JBUU4vQWtBQ1FBSkFJQUF0QUNwRkRRQWdBQzBBSzBVTkFFRUFJUU1nQUM4Qk1DSUVRUUp4UlEwQkRBSUxRUUFoQXlBQUx3RXdJZ1JCQVhGRkRRRUxRUUVoQXlBQUxRQW9RUUZHRFFBZ0FDOEJNa0gvL3dOeElnVkJuSDlxUWVRQVNRMEFJQVZCekFGR0RRQWdCVUd3QWtZTkFDQUVRY0FBY1EwQVFRQWhBeUFFUVlnRWNVR0FCRVlOQUNBRVFTaHhRUUJISVFNTElBQkJBRHNCTUNBQVFRQTZBQzhnQXd1WkFRRUNmd0pBQWtBQ1FDQUFMUUFxUlEwQUlBQXRBQ3RGRFFCQkFDRUJJQUF2QVRBaUFrRUNjVVVOQVF3Q0MwRUFJUUVnQUM4Qk1DSUNRUUZ4UlEwQkMwRUJJUUVnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQVFaeC9ha0hrQUVrTkFDQUFRY3dCUmcwQUlBQkJzQUpHRFFBZ0FrSEFBSEVOQUVFQUlRRWdBa0dJQkhGQmdBUkdEUUFnQWtFb2NVRUFSeUVCQ3lBQkMwa0JBWHNnQUVFUWF2ME1BQUFBQUFBQUFBQUFBQUFBQUFBQUFDSUIvUXNEQUNBQUlBSDlDd01BSUFCQk1Hb2dBZjBMQXdBZ0FFRWdhaUFCL1FzREFDQUFRZDBCTmdJY1FRQUxld0VCZndKQUlBQW9BZ3dpQXcwQUFrQWdBQ2dDQkVVTkFDQUFJQUUyQWdRTEFrQWdBQ0FCSUFJUXhJQ0FnQUFpQXcwQUlBQW9BZ3dQQ3lBQUlBTTJBaHhCQUNFRElBQW9BZ1FpQVVVTkFDQUFJQUVnQWlBQUtBSUlFWUdBZ0lBQUFDSUJSUTBBSUFBZ0FqWUNGQ0FBSUFFMkFnd2dBU0VEQ3lBREMrVHpBUU1PZndOK0JIOGpnSUNBZ0FCQkVHc2lBeVNBZ0lDQUFDQUJJUVFnQVNFRklBRWhCaUFCSVFjZ0FTRUlJQUVoQ1NBQklRb2dBU0VMSUFFaERDQUJJUTBnQVNFT0lBRWhEd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FBS0FJY0loQkJmMm9PM1FIYUFRSFpBUUlEQkFVR0J3Z0pDZ3NNRFE3WUFROFExd0VSRXRZQkV4UVZGaGNZR1JvYjRBSGZBUndkSHRVQkh5QWhJaU1rSmRRQkppY29LU29yTE5NQjBnRXRMdEVCMEFFdk1ERXlNelExTmpjNE9UbzdQRDArUDBCQlFrTkVSVWJiQVVkSVNVclBBYzRCUzgwQlRNd0JUVTVQVUZGU1UxUlZWbGRZV1ZwYlhGMWVYMkJoWW1Oa1pXWm5hR2xxYTJ4dGJtOXdjWEp6ZEhWMmQzaDVlbnQ4Zlg1L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBY3NCeWdHNEFja0J1UUhJQWJvQnV3RzhBYjBCdmdHL0FjQUJ3UUhDQWNNQnhBSEZBY1lCQU53QkMwRUFJUkFNeGdFTFFRNGhFQXpGQVF0QkRTRVFETVFCQzBFUElSQU13d0VMUVJBaEVBekNBUXRCRXlFUURNRUJDMEVVSVJBTXdBRUxRUlVoRUF5L0FRdEJGaUVRREw0QkMwRVhJUkFNdlFFTFFSZ2hFQXk4QVF0QkdTRVFETHNCQzBFYUlSQU11Z0VMUVJzaEVBeTVBUXRCSENFUURMZ0JDMEVJSVJBTXR3RUxRUjBoRUF5MkFRdEJJQ0VRRExVQkMwRWZJUkFNdEFFTFFRY2hFQXl6QVF0QklTRVFETElCQzBFaUlSQU1zUUVMUVI0aEVBeXdBUXRCSXlFUURLOEJDMEVTSVJBTXJnRUxRUkVoRUF5dEFRdEJKQ0VRREt3QkMwRWxJUkFNcXdFTFFTWWhFQXlxQVF0Qkp5RVFES2tCQzBIREFTRVFES2dCQzBFcElSQU1wd0VMUVNzaEVBeW1BUXRCTENFUURLVUJDMEV0SVJBTXBBRUxRUzRoRUF5akFRdEJMeUVRREtJQkMwSEVBU0VRREtFQkMwRXdJUkFNb0FFTFFUUWhFQXlmQVF0QkRDRVFESjRCQzBFeElSQU1uUUVMUVRJaEVBeWNBUXRCTXlFUURKc0JDMEU1SVJBTW1nRUxRVFVoRUF5WkFRdEJ4UUVoRUF5WUFRdEJDeUVRREpjQkMwRTZJUkFNbGdFTFFUWWhFQXlWQVF0QkNpRVFESlFCQzBFM0lSQU1rd0VMUVRnaEVBeVNBUXRCUENFUURKRUJDMEU3SVJBTWtBRUxRVDBoRUF5UEFRdEJDU0VRREk0QkMwRW9JUkFNalFFTFFUNGhFQXlNQVF0QlB5RVFESXNCQzBIQUFDRVFESW9CQzBIQkFDRVFESWtCQzBIQ0FDRVFESWdCQzBIREFDRVFESWNCQzBIRUFDRVFESVlCQzBIRkFDRVFESVVCQzBIR0FDRVFESVFCQzBFcUlSQU1nd0VMUWNjQUlSQU1nZ0VMUWNnQUlSQU1nUUVMUWNrQUlSQU1nQUVMUWNvQUlSQU1md3RCeXdBaEVBeCtDMEhOQUNFUURIMExRY3dBSVJBTWZBdEJ6Z0FoRUF4N0MwSFBBQ0VRREhvTFFkQUFJUkFNZVF0QjBRQWhFQXg0QzBIU0FDRVFESGNMUWRNQUlSQU1kZ3RCMUFBaEVBeDFDMEhXQUNFUURIUUxRZFVBSVJBTWN3dEJCaUVRREhJTFFkY0FJUkFNY1F0QkJTRVFESEFMUWRnQUlSQU1id3RCQkNFUURHNExRZGtBSVJBTWJRdEIyZ0FoRUF4c0MwSGJBQ0VRREdzTFFkd0FJUkFNYWd0QkF5RVFER2tMUWQwQUlSQU1hQXRCM2dBaEVBeG5DMEhmQUNFUURHWUxRZUVBSVJBTVpRdEI0QUFoRUF4a0MwSGlBQ0VRREdNTFFlTUFJUkFNWWd0QkFpRVFER0VMUWVRQUlSQU1ZQXRCNVFBaEVBeGZDMEhtQUNFUURGNExRZWNBSVJBTVhRdEI2QUFoRUF4Y0MwSHBBQ0VRREZzTFFlb0FJUkFNV2d0QjZ3QWhFQXhaQzBIc0FDRVFERmdMUWUwQUlSQU1Wd3RCN2dBaEVBeFdDMEh2QUNFUURGVUxRZkFBSVJBTVZBdEI4UUFoRUF4VEMwSHlBQ0VRREZJTFFmTUFJUkFNVVF0QjlBQWhFQXhRQzBIMUFDRVFERThMUWZZQUlSQU1UZ3RCOXdBaEVBeE5DMEg0QUNFUURFd0xRZmtBSVJBTVN3dEIrZ0FoRUF4S0MwSDdBQ0VRREVrTFFmd0FJUkFNU0F0Qi9RQWhFQXhIQzBIK0FDRVFERVlMUWY4QUlSQU1SUXRCZ0FFaEVBeEVDMEdCQVNFUURFTUxRWUlCSVJBTVFndEJnd0VoRUF4QkMwR0VBU0VRREVBTFFZVUJJUkFNUHd0QmhnRWhFQXcrQzBHSEFTRVFERDBMUVlnQklSQU1QQXRCaVFFaEVBdzdDMEdLQVNFUUREb0xRWXNCSVJBTU9RdEJqQUVoRUF3NEMwR05BU0VRRERjTFFZNEJJUkFNTmd0Qmp3RWhFQXcxQzBHUUFTRVFERFFMUVpFQklSQU1Nd3RCa2dFaEVBd3lDMEdUQVNFUURERUxRWlFCSVJBTU1BdEJsUUVoRUF3dkMwR1dBU0VRREM0TFFaY0JJUkFNTFF0Qm1BRWhFQXdzQzBHWkFTRVFEQ3NMUVpvQklSQU1LZ3RCbXdFaEVBd3BDMEdjQVNFUURDZ0xRWjBCSVJBTUp3dEJuZ0VoRUF3bUMwR2ZBU0VRRENVTFFhQUJJUkFNSkF0Qm9RRWhFQXdqQzBHaUFTRVFEQ0lMUWFNQklSQU1JUXRCcEFFaEVBd2dDMEdsQVNFUURCOExRYVlCSVJBTUhndEJwd0VoRUF3ZEMwR29BU0VRREJ3TFFha0JJUkFNR3d0QnFnRWhFQXdhQzBHckFTRVFEQmtMUWF3QklSQU1HQXRCclFFaEVBd1hDMEd1QVNFUURCWUxRUUVoRUF3VkMwR3ZBU0VRREJRTFFiQUJJUkFNRXd0QnNRRWhFQXdTQzBHekFTRVFEQkVMUWJJQklSQU1FQXRCdEFFaEVBd1BDMEcxQVNFUURBNExRYllCSVJBTURRdEJ0d0VoRUF3TUMwRzRBU0VRREFzTFFia0JJUkFNQ2d0QnVnRWhFQXdKQzBHN0FTRVFEQWdMUWNZQklSQU1Cd3RCdkFFaEVBd0dDMEc5QVNFUURBVUxRYjRCSVJBTUJBdEJ2d0VoRUF3REMwSEFBU0VRREFJTFFjSUJJUkFNQVF0QndRRWhFQXNEUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQU94d0VBQVFJREJBVUdCd2dKQ2dzTURRNFBFQkVTRXhRVkZoY1lHUm9iSEI0ZklDRWpKU2cvUUVGRVJVWkhTRWxLUzB4TlQxQlJVbFBlQTFkWlcxeGRZR0psWm1kb2FXcHJiRzF2Y0hGeWMzUjFkbmQ0ZVhwN2ZIMStnQUdDQVlVQmhnR0hBWWtCaXdHTUFZMEJqZ0dQQVpBQmtRR1VBWlVCbGdHWEFaZ0JtUUdhQVpzQm5BR2RBWjRCbndHZ0FhRUJvZ0dqQWFRQnBRR21BYWNCcUFHcEFhb0Jxd0dzQWEwQnJnR3ZBYkFCc1FHeUFiTUJ0QUcxQWJZQnR3RzRBYmtCdWdHN0Fid0J2UUcrQWI4QndBSEJBY0lCd3dIRUFjVUJ4Z0hIQWNnQnlRSEtBY3NCekFITkFjNEJ6d0hRQWRFQjBnSFRBZFFCMVFIV0FkY0IyQUhaQWRvQjJ3SGNBZDBCM2dIZ0FlRUI0Z0hqQWVRQjVRSG1BZWNCNkFIcEFlb0I2d0hzQWUwQjdnSHZBZkFCOFFIeUFmTUJtUUtrQXJBQy9nTCtBZ3NnQVNJRUlBSkhEZk1CUWQwQklSQU0vd01MSUFFaUVDQUNSdzNkQVVIREFTRVFEUDREQ3lBQklnRWdBa2NOa0FGQjl3QWhFQXo5QXdzZ0FTSUJJQUpIRFlZQlFlOEFJUkFNL0FNTElBRWlBU0FDUncxL1Flb0FJUkFNK3dNTElBRWlBU0FDUncxN1FlZ0FJUkFNK2dNTElBRWlBU0FDUncxNFFlWUFJUkFNK1FNTElBRWlBU0FDUncwYVFSZ2hFQXo0QXdzZ0FTSUJJQUpIRFJSQkVpRVFEUGNEQ3lBQklnRWdBa2NOV1VIRkFDRVFEUFlEQ3lBQklnRWdBa2NOU2tFL0lSQU05UU1MSUFFaUFTQUNSdzFJUVR3aEVBejBBd3NnQVNJQklBSkhEVUZCTVNFUURQTURDeUFBTFFBdVFRRkdEZXNEREljQ0N5QUFJQUVpQVNBQ0VNQ0FnSUFBUVFGSERlWUJJQUJDQURjRElBem5BUXNnQUNBQklnRWdBaEMwZ0lDQUFDSVFEZWNCSUFFaEFRejFBZ3NDUUNBQklnRWdBa2NOQUVFR0lSQU04QU1MSUFBZ0FVRUJhaUlCSUFJUXU0Q0FnQUFpRUEzb0FTQUJJUUVNTVFzZ0FFSUFOd01nUVJJaEVBelZBd3NnQVNJUUlBSkhEU3RCSFNFUURPMERDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBVUVRSVJBTTFBTUxRUWNoRUF6c0F3c2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzbEFVRUlJUkFNNndNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVJRaEVBelNBd3RCQ1NFUURPb0RDeUFCSVFFZ0FDa0RJRkFONUFFZ0FTRUJEUElDQ3dKQUlBRWlBU0FDUncwQVFRc2hFQXpwQXdzZ0FDQUJRUUZxSWdFZ0FoQzJnSUNBQUNJUURlVUJJQUVoQVF6eUFnc2dBQ0FCSWdFZ0FoQzRnSUNBQUNJUURlVUJJQUVoQVF6eUFnc2dBQ0FCSWdFZ0FoQzRnSUNBQUNJUURlWUJJQUVoQVF3TkN5QUFJQUVpQVNBQ0VMcUFnSUFBSWhBTjV3RWdBU0VCRFBBQ0N3SkFJQUVpQVNBQ1J3MEFRUThoRUF6bEF3c2dBUzBBQUNJUVFUdEdEUWdnRUVFTlJ3M29BU0FCUVFGcUlRRU03d0lMSUFBZ0FTSUJJQUlRdW9DQWdBQWlFQTNvQVNBQklRRU04Z0lMQTBBQ1FDQUJMUUFBUWZDMWdJQUFhaTBBQUNJUVFRRkdEUUFnRUVFQ1J3M3JBU0FBS0FJRUlSQWdBRUVBTmdJRUlBQWdFQ0FCUVFGcUlnRVF1WUNBZ0FBaUVBM3FBU0FCSVFFTTlBSUxJQUZCQVdvaUFTQUNSdzBBQzBFU0lSQU00Z01MSUFBZ0FTSUJJQUlRdW9DQWdBQWlFQTNwQVNBQklRRU1DZ3NnQVNJQklBSkhEUVpCR3lFUURPQURDd0pBSUFFaUFTQUNSdzBBUVJZaEVBemdBd3NnQUVHS2dJQ0FBRFlDQ0NBQUlBRTJBZ1FnQUNBQklBSVF1SUNBZ0FBaUVBM3FBU0FCSVFGQklDRVFETVlEQ3dKQUlBRWlBU0FDUmcwQUEwQUNRQ0FCTFFBQVFmQzNnSUFBYWkwQUFDSVFRUUpHRFFBQ1FDQVFRWDlxRGdUbEFld0JBT3NCN0FFTElBRkJBV29oQVVFSUlSQU15QU1MSUFGQkFXb2lBU0FDUncwQUMwRVZJUkFNM3dNTFFSVWhFQXplQXdzRFFBSkFJQUV0QUFCQjhMbUFnQUJxTFFBQUloQkJBa1lOQUNBUVFYOXFEZ1RlQWV3QjRBSHJBZXdCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJHQ0VRRE4wREN3SkFJQUVpQVNBQ1JnMEFJQUJCaTRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVFSElSQU14QU1MUVJraEVBemNBd3NnQVVFQmFpRUJEQUlMQWtBZ0FTSVVJQUpIRFFCQkdpRVFETnNEQ3lBVUlRRUNRQ0FVTFFBQVFYTnFEaFRkQXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QWdEdUFndEJBQ0VRSUFCQkFEWUNIQ0FBUWErTGdJQUFOZ0lRSUFCQkFqWUNEQ0FBSUJSQkFXbzJBaFFNMmdNTEFrQWdBUzBBQUNJUVFUdEdEUUFnRUVFTlJ3M29BU0FCUVFGcUlRRU01UUlMSUFGQkFXb2hBUXRCSWlFUURMOERDd0pBSUFFaUVDQUNSdzBBUVJ3aEVBellBd3RDQUNFUklCQWhBU0FRTFFBQVFWQnFEamZuQWVZQkFRSURCQVVHQndnQUFBQUFBQUFBQ1FvTERBME9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVBFQkVTRXhRQUMwRWVJUkFNdlFNTFFnSWhFUXpsQVF0Q0F5RVJET1FCQzBJRUlSRU00d0VMUWdVaEVRemlBUXRDQmlFUkRPRUJDMElISVJFTTRBRUxRZ2doRVF6ZkFRdENDU0VSRE40QkMwSUtJUkVNM1FFTFFnc2hFUXpjQVF0Q0RDRVJETnNCQzBJTklSRU0yZ0VMUWc0aEVRelpBUXRDRHlFUkROZ0JDMElLSVJFTTF3RUxRZ3NoRVF6V0FRdENEQ0VSRE5VQkMwSU5JUkVNMUFFTFFnNGhFUXpUQVF0Q0R5RVJETklCQzBJQUlSRUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUJBdEFBQkJVR29PTitVQjVBRUFBUUlEQkFVR0IrWUI1Z0htQWVZQjVnSG1BZVlCQ0FrS0N3d041Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFRNFBFQkVTRStZQkMwSUNJUkVNNUFFTFFnTWhFUXpqQVF0Q0JDRVJET0lCQzBJRklSRU00UUVMUWdZaEVRemdBUXRDQnlFUkROOEJDMElJSVJFTTNnRUxRZ2toRVF6ZEFRdENDaUVSRE53QkMwSUxJUkVNMndFTFFnd2hFUXphQVF0Q0RTRVJETmtCQzBJT0lSRU0yQUVMUWc4aEVRelhBUXRDQ2lFUkROWUJDMElMSVJFTTFRRUxRZ3doRVF6VUFRdENEU0VSRE5NQkMwSU9JUkVNMGdFTFFnOGhFUXpSQVFzZ0FFSUFJQUFwQXlBaUVTQUNJQUVpRUd1dEloSjlJaE1nRXlBUlZoczNBeUFnRVNBU1ZpSVVSUTNTQVVFZklSQU13QU1MQWtBZ0FTSUJJQUpHRFFBZ0FFR0pnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRU1FoRUF5bkF3dEJJQ0VRREw4REN5QUFJQUVpRUNBQ0VMNkFnSUFBUVg5cURnVzJBUURGQWdIUkFkSUJDMEVSSVJBTXBBTUxJQUJCQVRvQUx5QVFJUUVNdXdNTElBRWlBU0FDUnczU0FVRWtJUkFNdXdNTElBRWlEU0FDUncwZVFjWUFJUkFNdWdNTElBQWdBU0lCSUFJUXNvQ0FnQUFpRUEzVUFTQUJJUUVNdFFFTElBRWlFQ0FDUncwbVFkQUFJUkFNdUFNTEFrQWdBU0lCSUFKSERRQkJLQ0VRRExnREN5QUFRUUEyQWdRZ0FFR01nSUNBQURZQ0NDQUFJQUVnQVJDeGdJQ0FBQ0lRRGRNQklBRWhBUXpZQVFzQ1FDQUJJaEFnQWtjTkFFRXBJUkFNdHdNTElCQXRBQUFpQVVFZ1JnMFVJQUZCQ1VjTjB3RWdFRUVCYWlFQkRCVUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQmNMUVNvaEVBeTFBd3NDUUNBQkloQWdBa2NOQUVFcklSQU10UU1MQWtBZ0VDMEFBQ0lCUVFsR0RRQWdBVUVnUnczVkFRc2dBQzBBTEVFSVJnM1RBU0FRSVFFTWtRTUxBa0FnQVNJQklBSkhEUUJCTENFUURMUURDeUFCTFFBQVFRcEhEZFVCSUFGQkFXb2hBUXpKQWdzZ0FTSU9JQUpIRGRVQlFTOGhFQXl5QXdzRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBZ0VFRjJhZzRFQU53QjNBRUEyZ0VMSUFFaEFRemdBUXNnQVVFQmFpSUJJQUpIRFFBTFFURWhFQXl4QXd0Qk1pRVFJQUVpRkNBQ1JnMndBeUFDSUJScklBQW9BZ0FpQVdvaEZTQVVJQUZyUVFOcUlSWUNRQU5BSUJRdEFBQWlGMEVnY2lBWElCZEJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkI4THVBZ0FCcUxRQUFSdzBCQWtBZ0FVRURSdzBBUVFZaEFReVdBd3NnQVVFQmFpRUJJQlJCQVdvaUZDQUNSdzBBQ3lBQUlCVTJBZ0FNc1FNTElBQkJBRFlDQUNBVUlRRU0yUUVMUVRNaEVDQUJJaFFnQWtZTnJ3TWdBaUFVYXlBQUtBSUFJZ0ZxSVJVZ0ZDQUJhMEVJYWlFV0FrQURRQ0FVTFFBQUloZEJJSElnRnlBWFFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFmUzdnSUFBYWkwQUFFY05BUUpBSUFGQkNFY05BRUVGSVFFTWxRTUxJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBVk5nSUFETEFEQ3lBQVFRQTJBZ0FnRkNFQkROZ0JDMEUwSVJBZ0FTSVVJQUpHRGE0RElBSWdGR3NnQUNnQ0FDSUJhaUVWSUJRZ0FXdEJCV29oRmdKQUEwQWdGQzBBQUNJWFFTQnlJQmNnRjBHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIUXdvQ0FBR290QUFCSERRRUNRQ0FCUVFWSERRQkJCeUVCREpRREN5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRlRZQ0FBeXZBd3NnQUVFQU5nSUFJQlFoQVF6WEFRc0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBRUdBdm9DQUFHb3RBQUFpRUVFQlJnMEFJQkJCQWtZTkNpQUJJUUVNM1FFTElBRkJBV29pQVNBQ1J3MEFDMEV3SVJBTXJnTUxRVEFoRUF5dEF3c0NRQ0FCSWdFZ0FrWU5BQU5BQWtBZ0FTMEFBQ0lRUVNCR0RRQWdFRUYyYWc0RTJRSGFBZG9CMlFIYUFRc2dBVUVCYWlJQklBSkhEUUFMUVRnaEVBeXRBd3RCT0NFUURLd0RDd05BQWtBZ0FTMEFBQ0lRUVNCR0RRQWdFRUVKUncwREN5QUJRUUZxSWdFZ0FrY05BQXRCUENFUURLc0RDd05BQWtBZ0FTMEFBQ0lRUVNCR0RRQUNRQUpBSUJCQmRtb09CTm9CQVFIYUFRQUxJQkJCTEVZTjJ3RUxJQUVoQVF3RUN5QUJRUUZxSWdFZ0FrY05BQXRCUHlFUURLb0RDeUFCSVFFTTJ3RUxRY0FBSVJBZ0FTSVVJQUpHRGFnRElBSWdGR3NnQUNnQ0FDSUJhaUVXSUJRZ0FXdEJCbW9oRndKQUEwQWdGQzBBQUVFZ2NpQUJRWURBZ0lBQWFpMEFBRWNOQVNBQlFRWkdEWTRESUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVdOZ0lBREtrREN5QUFRUUEyQWdBZ0ZDRUJDMEUySVJBTWpnTUxBa0FnQVNJUElBSkhEUUJCd1FBaEVBeW5Bd3NnQUVHTWdJQ0FBRFlDQ0NBQUlBODJBZ1FnRHlFQklBQXRBQ3hCZjJvT0JNMEIxUUhYQWRrQmh3TUxJQUZCQVdvaEFRek1BUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQnlJQkFnRUVHL2YycEIvd0Z4UVJwSkcwSC9BWEVpRUVFSlJnMEFJQkJCSUVZTkFBSkFBa0FDUUFKQUlCQkJuWDlxRGhNQUF3TURBd01EQXdFREF3TURBd01EQXdNQ0F3c2dBVUVCYWlFQlFURWhFQXlSQXdzZ0FVRUJhaUVCUVRJaEVBeVFBd3NnQVVFQmFpRUJRVE1oRUF5UEF3c2dBU0VCRE5BQkN5QUJRUUZxSWdFZ0FrY05BQXRCTlNFUURLVURDMEUxSVJBTXBBTUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUJCZ0x5QWdBQnFMUUFBUVFGR0RRQWdBU0VCRE5NQkN5QUJRUUZxSWdFZ0FrY05BQXRCUFNFUURLUURDMEU5SVJBTW93TUxJQUFnQVNJQklBSVFzSUNBZ0FBaUVBM1dBU0FCSVFFTUFRc2dFRUVCYWlFQkMwRThJUkFNaHdNTEFrQWdBU0lCSUFKSERRQkJ3Z0FoRUF5Z0F3c0NRQU5BQWtBZ0FTMEFBRUYzYWc0WUFBTCtBdjRDaEFQK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dJQS9nSUxJQUZCQVdvaUFTQUNSdzBBQzBIQ0FDRVFES0FEQ3lBQlFRRnFJUUVnQUMwQUxVRUJjVVVOdlFFZ0FTRUJDMEVzSVJBTWhRTUxJQUVpQVNBQ1J3M1RBVUhFQUNFUURKMERDd05BQWtBZ0FTMEFBRUdRd0lDQUFHb3RBQUJCQVVZTkFDQUJJUUVNdHdJTElBRkJBV29pQVNBQ1J3MEFDMEhGQUNFUURKd0RDeUFOTFFBQUloQkJJRVlOc3dFZ0VFRTZSdzJCQXlBQUtBSUVJUUVnQUVFQU5nSUVJQUFnQVNBTkVLK0FnSUFBSWdFTjBBRWdEVUVCYWlFQkRMTUNDMEhIQUNFUUlBRWlEU0FDUmcyYUF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUVZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUVpEQ2dJQUFhaTBBQUVjTmdBTWdBVUVGUmczMEFpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeWFBd3RCeUFBaEVDQUJJZzBnQWtZTm1RTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVKYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVHV3dvQ0FBR290QUFCSERmOENBa0FnQVVFSlJ3MEFRUUloQVF6MUFnc2dBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1tUU1MQWtBZ0FTSU5JQUpIRFFCQnlRQWhFQXlaQXdzQ1FBSkFJQTB0QUFBaUFVRWdjaUFCSUFGQnYzOXFRZjhCY1VFYVNSdEIvd0Z4UVpKL2FnNEhBSUFEZ0FPQUE0QURnQU1CZ0FNTElBMUJBV29oQVVFK0lSQU1nQU1MSUExQkFXb2hBVUUvSVJBTS93SUxRY29BSVJBZ0FTSU5JQUpHRFpjRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJBV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCb01LQWdBQnFMUUFBUnczOUFpQUJRUUZHRGZBQ0lBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKY0RDMEhMQUNFUUlBRWlEU0FDUmcyV0F5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUTVxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWFMQ2dJQUFhaTBBQUVjTi9BSWdBVUVPUmczd0FpQUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVdBd3RCekFBaEVDQUJJZzBnQWtZTmxRTWdBaUFOYXlBQUtBSUFJZ0ZxSVJZZ0RTQUJhMEVQYWlFWEEwQWdEUzBBQUNJVVFTQnlJQlFnRkVHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIQXdvQ0FBR290QUFCSERmc0NBa0FnQVVFUFJ3MEFRUU1oQVF6eEFnc2dBVUVCYWlFQklBMUJBV29pRFNBQ1J3MEFDeUFBSUJZMkFnQU1sUU1MUWMwQUlSQWdBU0lOSUFKR0RaUURJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQldvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQjBNS0FnQUJxTFFBQVJ3MzZBZ0pBSUFGQkJVY05BRUVFSVFFTThBSUxJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESlFEQ3dKQUlBRWlEU0FDUncwQVFjNEFJUkFNbEFNTEFrQUNRQUpBQWtBZ0RTMEFBQ0lCUVNCeUlBRWdBVUcvZjJwQi93RnhRUnBKRzBIL0FYRkJuWDlxRGhNQS9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBdjBDQWYwQy9RTDlBZ0lEL1FJTElBMUJBV29oQVVIQkFDRVFEUDBDQ3lBTlFRRnFJUUZCd2dBaEVBejhBZ3NnRFVFQmFpRUJRY01BSVJBTSt3SUxJQTFCQVdvaEFVSEVBQ0VRRFBvQ0N3SkFJQUVpQVNBQ1JnMEFJQUJCallDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVIRkFDRVFEUG9DQzBIUEFDRVFESklEQ3lBUUlRRUNRQUpBSUJBdEFBQkJkbW9PQkFHb0FxZ0NBS2dDQ3lBUVFRRnFJUUVMUVNjaEVBejRBZ3NDUUNBQklnRWdBa2NOQUVIUkFDRVFESkVEQ3dKQUlBRXRBQUJCSUVZTkFDQUJJUUVNalFFTElBRkJBV29oQVNBQUxRQXRRUUZ4UlEzSEFTQUJJUUVNakFFTElBRWlGeUFDUnczSUFVSFNBQ0VRREk4REMwSFRBQ0VRSUFFaUZDQUNSZzJPQXlBQ0lCUnJJQUFvQWdBaUFXb2hGaUFVSUFGclFRRnFJUmNEUUNBVUxRQUFJQUZCMXNLQWdBQnFMUUFBUnczTUFTQUJRUUZHRGNjQklBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURJNERDd0pBSUFFaUFTQUNSdzBBUWRVQUlSQU1qZ01MSUFFdEFBQkJDa2NOekFFZ0FVRUJhaUVCRE1jQkN3SkFJQUVpQVNBQ1J3MEFRZFlBSVJBTWpRTUxBa0FDUUNBQkxRQUFRWFpxRGdRQXpRSE5BUUhOQVFzZ0FVRUJhaUVCRE1jQkN5QUJRUUZxSVFGQnlnQWhFQXp6QWdzZ0FDQUJJZ0VnQWhDdWdJQ0FBQ0lRRGNzQklBRWhBVUhOQUNFUURQSUNDeUFBTFFBcFFTSkdEWVVEREtZQ0N3SkFJQUVpQVNBQ1J3MEFRZHNBSVJBTWlnTUxRUUFoRkVFQklSZEJBU0VXUVFBaEVBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUJMUUFBUVZCcURnclVBZE1CQUFFQ0F3UUZCZ2pWQVF0QkFpRVFEQVlMUVFNaEVBd0ZDMEVFSVJBTUJBdEJCU0VRREFNTFFRWWhFQXdDQzBFSElSQU1BUXRCQ0NFUUMwRUFJUmRCQUNFV1FRQWhGQXpNQVF0QkNTRVFRUUVoRkVFQUlSZEJBQ0VXRE1zQkN3SkFJQUVpQVNBQ1J3MEFRZDBBSVJBTWlRTUxJQUV0QUFCQkxrY056QUVnQVVFQmFpRUJES1lDQ3lBQklnRWdBa2NOekFGQjN3QWhFQXlIQXdzQ1FDQUJJZ0VnQWtZTkFDQUFRWTZBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCMEFBaEVBenVBZ3RCNEFBaEVBeUdBd3RCNFFBaEVDQUJJZ0VnQWtZTmhRTWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlTENnSUFBYWkwQUFFY056UUVnRkVFRFJnM01BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlGQXd0QjRnQWhFQ0FCSWdFZ0FrWU5oQU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFQ2FpRVhBMEFnQVMwQUFDQVVRZWJDZ0lBQWFpMEFBRWNOekFFZ0ZFRUNSZzNPQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RUF3dEI0d0FoRUNBQklnRWdBa1lOZ3dNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRURhaUVYQTBBZ0FTMEFBQ0FVUWVuQ2dJQUFhaTBBQUVjTnl3RWdGRUVEUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeURBd3NDUUNBQklnRWdBa2NOQUVIbEFDRVFESU1EQ3lBQUlBRkJBV29pQVNBQ0VLaUFnSUFBSWhBTnpRRWdBU0VCUWRZQUlSQU02UUlMQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFBaUVFRWdSZzBBQWtBQ1FBSkFJQkJCdUg5cURnc0FBYzhCendIUEFjOEJ6d0hQQWM4Qnp3RUN6d0VMSUFGQkFXb2hBVUhTQUNFUURPMENDeUFCUVFGcUlRRkIwd0FoRUF6c0Fnc2dBVUVCYWlFQlFkUUFJUkFNNndJTElBRkJBV29pQVNBQ1J3MEFDMEhrQUNFUURJSURDMEhrQUNFUURJRURDd05BQWtBZ0FTMEFBRUh3d29DQUFHb3RBQUFpRUVFQlJnMEFJQkJCZm1vT0E4OEIwQUhSQWRJQkN5QUJRUUZxSWdFZ0FrY05BQXRCNWdBaEVBeUFBd3NDUUNBQklnRWdBa1lOQUNBQlFRRnFJUUVNQXd0QjV3QWhFQXovQWdzRFFBSkFJQUV0QUFCQjhNU0FnQUJxTFFBQUloQkJBVVlOQUFKQUlCQkJmbW9PQk5JQjB3SFVBUURWQVFzZ0FTRUJRZGNBSVJBTTV3SUxJQUZCQVdvaUFTQUNSdzBBQzBIb0FDRVFEUDRDQ3dKQUlBRWlBU0FDUncwQVFla0FJUkFNL2dJTEFrQWdBUzBBQUNJUVFYWnFEaHE2QWRVQjFRRzhBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBY29CMVFIVkFRRFRBUXNnQVVFQmFpRUJDMEVHSVJBTTR3SUxBMEFDUUNBQkxRQUFRZkRHZ0lBQWFpMEFBRUVCUmcwQUlBRWhBUXllQWdzZ0FVRUJhaUlCSUFKSERRQUxRZW9BSVJBTSt3SUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQU1MUWVzQUlSQU0rZ0lMQWtBZ0FTSUJJQUpIRFFCQjdBQWhFQXo2QWdzZ0FVRUJhaUVCREFFTEFrQWdBU0lCSUFKSERRQkI3UUFoRUF6NUFnc2dBVUVCYWlFQkMwRUVJUkFNM2dJTEFrQWdBU0lVSUFKSERRQkI3Z0FoRUF6M0Fnc2dGQ0VCQWtBQ1FBSkFJQlF0QUFCQjhNaUFnQUJxTFFBQVFYOXFEZ2ZVQWRVQjFnRUFuQUlCQXRjQkN5QVVRUUZxSVFFTUNnc2dGRUVCYWlFQkRNMEJDMEVBSVJBZ0FFRUFOZ0ljSUFCQm01S0FnQUEyQWhBZ0FFRUhOZ0lNSUFBZ0ZFRUJhallDRkF6MkFnc0NRQU5BQWtBZ0FTMEFBRUh3eUlDQUFHb3RBQUFpRUVFRVJnMEFBa0FDUUNBUVFYOXFEZ2ZTQWRNQjFBSFpBUUFFQWRrQkN5QUJJUUZCMmdBaEVBemdBZ3NnQVVFQmFpRUJRZHdBSVJBTTN3SUxJQUZCQVdvaUFTQUNSdzBBQzBIdkFDRVFEUFlDQ3lBQlFRRnFJUUVNeXdFTEFrQWdBU0lVSUFKSERRQkI4QUFoRUF6MUFnc2dGQzBBQUVFdlJ3M1VBU0FVUVFGcUlRRU1CZ3NDUUNBQkloUWdBa2NOQUVIeEFDRVFEUFFDQ3dKQUlCUXRBQUFpQVVFdlJ3MEFJQlJCQVdvaEFVSGRBQ0VRRE5zQ0N5QUJRWFpxSWdSQkZrc04wd0ZCQVNBRWRFR0pnSUFDY1VVTjB3RU15Z0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCUWQ0QUlSQU0yZ0lMUWZJQUlSQU04Z0lMQWtBZ0FTSVVJQUpIRFFCQjlBQWhFQXp5QWdzZ0ZDRUJBa0FnRkMwQUFFSHd6SUNBQUdvdEFBQkJmMm9PQThrQ2xBSUExQUVMUWVFQUlSQU0yQUlMQWtBZ0FTSVVJQUpHRFFBRFFBSkFJQlF0QUFCQjhNcUFnQUJxTFFBQUlnRkJBMFlOQUFKQUlBRkJmMm9PQXNzQ0FOVUJDeUFVSVFGQjN3QWhFQXphQWdzZ0ZFRUJhaUlVSUFKSERRQUxRZk1BSVJBTThRSUxRZk1BSVJBTThBSUxBa0FnQVNJQklBSkdEUUFnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFlQUFJUkFNMXdJTFFmVUFJUkFNN3dJTEFrQWdBU0lCSUFKSERRQkI5Z0FoRUF6dkFnc2dBRUdQZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCQzBFRElSQU0xQUlMQTBBZ0FTMEFBRUVnUnczREFpQUJRUUZxSWdFZ0FrY05BQXRCOXdBaEVBenNBZ3NDUUNBQklnRWdBa2NOQUVINEFDRVFET3dDQ3lBQkxRQUFRU0JIRGM0QklBRkJBV29oQVF6dkFRc2dBQ0FCSWdFZ0FoQ3NnSUNBQUNJUURjNEJJQUVoQVF5T0Fnc0NRQ0FCSWdRZ0FrY05BRUg2QUNFUURPb0NDeUFFTFFBQVFjd0FSdzNSQVNBRVFRRnFJUUZCRXlFUURNOEJDd0pBSUFFaUJDQUNSdzBBUWZzQUlSQU02UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQU5BSUFRdEFBQWdBVUh3em9DQUFHb3RBQUJIRGRBQklBRkJCVVlOemdFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQit3QWhFQXpvQWdzQ1FDQUJJZ1FnQWtjTkFFSDhBQ0VRRE9nQ0N3SkFBa0FnQkMwQUFFRzlmMm9PREFEUkFkRUIwUUhSQWRFQjBRSFJBZEVCMFFIUkFRSFJBUXNnQkVFQmFpRUJRZVlBSVJBTXp3SUxJQVJCQVdvaEFVSG5BQ0VRRE00Q0N3SkFJQUVpQkNBQ1J3MEFRZjBBSVJBTTV3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRZTNQZ0lBQWFpMEFBRWNOendFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWYwQUlSQU01d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJFQ0VRRE13QkN3SkFJQUVpQkNBQ1J3MEFRZjRBSVJBTTVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRZmJPZ0lBQWFpMEFBRWNOemdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWY0QUlSQU01Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGaUVRRE1zQkN3SkFJQUVpQkNBQ1J3MEFRZjhBSVJBTTVRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQTJvaEVBSkFBMEFnQkMwQUFDQUJRZnpPZ0lBQWFpMEFBRWNOelFFZ0FVRURSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWY4QUlSQU01UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCU0VRRE1vQkN3SkFJQUVpQkNBQ1J3MEFRWUFCSVJBTTVBSUxJQVF0QUFCQjJRQkhEY3NCSUFSQkFXb2hBVUVJSVJBTXlRRUxBa0FnQVNJRUlBSkhEUUJCZ1FFaEVBempBZ3NDUUFKQUlBUXRBQUJCc245cURnTUF6QUVCekFFTElBUkJBV29oQVVIckFDRVFETW9DQ3lBRVFRRnFJUUZCN0FBaEVBekpBZ3NDUUNBQklnUWdBa2NOQUVHQ0FTRVFET0lDQ3dKQUFrQWdCQzBBQUVHNGYyb09DQURMQWNzQnl3SExBY3NCeXdFQnl3RUxJQVJCQVdvaEFVSHFBQ0VRRE1rQ0N5QUVRUUZxSVFGQjdRQWhFQXpJQWdzQ1FDQUJJZ1FnQWtjTkFFR0RBU0VRRE9FQ0N5QUNJQVJySUFBb0FnQWlBV29oRUNBRUlBRnJRUUpxSVJRQ1FBTkFJQVF0QUFBZ0FVR0F6NENBQUdvdEFBQkhEY2tCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0VEWUNBRUdEQVNFUURPRUNDMEVBSVJBZ0FFRUFOZ0lBSUJSQkFXb2hBUXpHQVFzQ1FDQUJJZ1FnQWtjTkFFR0VBU0VRRE9BQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVJxSVJBQ1FBTkFJQVF0QUFBZ0FVR0R6NENBQUdvdEFBQkhEY2dCSUFGQkJFWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdFQVNFUURPQUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFTTWhFQXpGQVFzQ1FDQUJJZ1FnQWtjTkFFR0ZBU0VRRE44Q0N3SkFBa0FnQkMwQUFFRzBmMm9PQ0FESUFjZ0J5QUhJQWNnQnlBRUJ5QUVMSUFSQkFXb2hBVUh2QUNFUURNWUNDeUFFUVFGcUlRRkI4QUFoRUF6RkFnc0NRQ0FCSWdRZ0FrY05BRUdHQVNFUURONENDeUFFTFFBQVFjVUFSdzNGQVNBRVFRRnFJUUVNZ3dJTEFrQWdBU0lFSUFKSERRQkJod0VoRUF6ZEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkJpTStBZ0FCcUxRQUFSdzNGQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaHdFaEVBemRBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXRJUkFNd2dFTEFrQWdBU0lFSUFKSERRQkJpQUVoRUF6Y0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVJYWlFUUFrQURRQ0FFTFFBQUlBRkIwTStBZ0FCcUxRQUFSdzNFQVNBQlFRaEdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaUFFaEVBemNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXBJUkFNd1FFTEFrQWdBU0lCSUFKSERRQkJpUUVoRUF6YkFndEJBU0VRSUFFdEFBQkIzd0JIRGNBQklBRkJBV29oQVF5QkFnc0NRQ0FCSWdRZ0FrY05BRUdLQVNFUUROb0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQURRQ0FFTFFBQUlBRkJqTStBZ0FCcUxRQUFSdzNCQVNBQlFRRkdEYThDSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVlvQklSQU0yUUlMQWtBZ0FTSUVJQUpIRFFCQml3RWhFQXpaQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUNhaUVRQWtBRFFDQUVMUUFBSUFGQmpzK0FnQUJxTFFBQVJ3M0JBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJpd0VoRUF6WkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFQ0lSQU12Z0VMQWtBZ0FTSUVJQUpIRFFCQmpBRWhFQXpZQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhNK0FnQUJxTFFBQVJ3M0FBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJqQUVoRUF6WUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFZklSQU12UUVMQWtBZ0FTSUVJQUpIRFFCQmpRRWhFQXpYQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQjhzK0FnQUJxTFFBQVJ3Mi9BU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJqUUVoRUF6WEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFSklSQU12QUVMQWtBZ0FTSUVJQUpIRFFCQmpnRWhFQXpXQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NBdndHL0FiOEJ2d0cvQVFHL0FRc2dCRUVCYWlFQlFmZ0FJUkFNdlFJTElBUkJBV29oQVVINUFDRVFETHdDQ3dKQUlBRWlCQ0FDUncwQVFZOEJJUkFNMVFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFaSFBnSUFBYWkwQUFFY052UUVnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWThCSVJBTTFRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdDRVFETG9CQ3dKQUlBRWlCQ0FDUncwQVFaQUJJUkFNMUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFaZlBnSUFBYWkwQUFFY052QUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWkFCSVJBTTFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZ5RVFETGtCQ3dKQUlBRWlCQ0FDUncwQVFaRUJJUkFNMHdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFaclBnSUFBYWkwQUFFY051d0VnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWkVCSVJBTTB3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZTRVFETGdCQ3dKQUlBRWlCQ0FDUncwQVFaSUJJUkFNMGdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFhSFBnSUFBYWkwQUFFY051Z0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWklCSVJBTTBnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkhpRVFETGNCQ3dKQUlBRWlCQ0FDUncwQVFaTUJJUkFNMFFJTElBUXRBQUJCekFCSERiZ0JJQVJCQVdvaEFVRUtJUkFNdGdFTEFrQWdCQ0FDUncwQVFaUUJJUkFNMEFJTEFrQUNRQ0FFTFFBQVFiOS9hZzRQQUxrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBYmtCQWJrQkN5QUVRUUZxSVFGQi9nQWhFQXkzQWdzZ0JFRUJhaUVCUWY4QUlSQU10Z0lMQWtBZ0JDQUNSdzBBUVpVQklSQU16d0lMQWtBQ1FDQUVMUUFBUWI5L2FnNERBTGdCQWJnQkN5QUVRUUZxSVFGQi9RQWhFQXkyQWdzZ0JFRUJhaUVFUVlBQklSQU10UUlMQWtBZ0JDQUNSdzBBUVpZQklSQU16Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWFmUGdJQUFhaTBBQUVjTnRnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaWUJJUkFNemdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQ3lFUURMTUJDd0pBSUFRZ0FrY05BRUdYQVNFUURNMENDd0pBQWtBQ1FBSkFJQVF0QUFCQlUyb09Jd0M0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCQWJnQnVBRzRBYmdCdUFFQ3VBRzRBYmdCQTdnQkN5QUVRUUZxSVFGQit3QWhFQXkyQWdzZ0JFRUJhaUVCUWZ3QUlSQU10UUlMSUFSQkFXb2hCRUdCQVNFUURMUUNDeUFFUVFGcUlRUkJnZ0VoRUF5ekFnc0NRQ0FFSUFKSERRQkJtQUVoRUF6TUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJxYytBZ0FCcUxRQUFSdzIwQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbUFFaEVBek1BZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRVpJUkFNc1FFTEFrQWdCQ0FDUncwQVFaa0JJUkFNeXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFKQUEwQWdCQzBBQUNBQlFhN1BnSUFBYWkwQUFFY05zd0VnQVVFRlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWmtCSVJBTXl3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJpRVFETEFCQ3dKQUlBUWdBa2NOQUVHYUFTRVFETW9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVHMHo0Q0FBR290QUFCSERiSUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2FBU0VRRE1vQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJ3aEVBeXZBUXNDUUNBRUlBSkhEUUJCbXdFaEVBekpBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdHMrQWdBQnFMUUFBUncyeEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm13RWhFQXpKQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVuSVJBTXJnRUxBa0FnQkNBQ1J3MEFRWndCSVJBTXlBSUxBa0FDUUNBRUxRQUFRYXgvYWc0Q0FBR3hBUXNnQkVFQmFpRUVRWVlCSVJBTXJ3SUxJQVJCQVdvaEJFR0hBU0VRREs0Q0N3SkFJQVFnQWtjTkFFR2RBU0VRRE1jQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzR6NENBQUdvdEFBQkhEYThCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdkQVNFUURNY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFTWWhFQXlzQVFzQ1FDQUVJQUpIRFFCQm5nRWhFQXpHQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnVzK0FnQUJxTFFBQVJ3MnVBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJuZ0VoRUF6R0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFRElSQU1xd0VMQWtBZ0JDQUNSdzBBUVo4QklSQU14UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnJRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaOEJJUkFNeFFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRENFUURLb0JDd0pBSUFRZ0FrY05BRUdnQVNFUURNUUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFOcUlSQUNRQU5BSUFRdEFBQWdBVUc4ejRDQUFHb3RBQUJIRGF3QklBRkJBMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZ0FTRVFETVFDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUTBoRUF5cEFRc0NRQ0FFSUFKSERRQkJvUUVoRUF6REFnc0NRQUpBSUFRdEFBQkJ1bjlxRGdzQXJBR3NBYXdCckFHc0Fhd0JyQUdzQWF3QkFhd0JDeUFFUVFGcUlRUkJpd0VoRUF5cUFnc2dCRUVCYWlFRVFZd0JJUkFNcVFJTEFrQWdCQ0FDUncwQVFhSUJJUkFNd2dJTElBUXRBQUJCMEFCSERha0JJQVJCQVdvaEJBenBBUXNDUUNBRUlBSkhEUUJCb3dFaEVBekJBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0JxZ0dxQWFvQnFnR3FBUUNxQVFzZ0JFRUJhaUVFUVk0QklSQU1xQUlMSUFSQkFXb2hBVUVpSVJBTXBnRUxBa0FnQkNBQ1J3MEFRYVFCSVJBTXdBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRY0RQZ0lBQWFpMEFBRWNOcUFFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFRQklSQU13QUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIU0VRREtVQkN3SkFJQVFnQWtjTkFFR2xBU0VRREw4Q0N3SkFBa0FnQkMwQUFFR3VmMm9PQXdDb0FRR29BUXNnQkVFQmFpRUVRWkFCSVJBTXBnSUxJQVJCQVdvaEFVRUVJUkFNcEFFTEFrQWdCQ0FDUncwQVFhWUJJUkFNdmdJTEFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBS29CcWdHcUFhb0JxZ0dxQWFvQnFnR3FBYW9CQWFvQnFnRUNxZ0dxQVFPcUFhb0JCS29CQ3lBRVFRRnFJUVJCaUFFaEVBeW9BZ3NnQkVFQmFpRUVRWWtCSVJBTXB3SUxJQVJCQVdvaEJFR0tBU0VRREtZQ0N5QUVRUUZxSVFSQmp3RWhFQXlsQWdzZ0JFRUJhaUVFUVpFQklSQU1wQUlMQWtBZ0JDQUNSdzBBUWFjQklSQU12UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnBRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhY0JJUkFNdlFJTElBQkJBRFlDQUNBUVFRRnFJUUZCRVNFUURLSUJDd0pBSUFRZ0FrY05BRUdvQVNFUURMd0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUhDejRDQUFHb3RBQUJIRGFRQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHb0FTRVFETHdDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU3doRUF5aEFRc0NRQ0FFSUFKSERRQkJxUUVoRUF5N0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVFYWlFUUFrQURRQ0FFTFFBQUlBRkJ4YytBZ0FCcUxRQUFSdzJqQVNBQlFRUkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcVFFaEVBeTdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXJJUkFNb0FFTEFrQWdCQ0FDUncwQVFhb0JJUkFNdWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFjclBnSUFBYWkwQUFFY05vZ0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYW9CSVJBTXVnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkZDRVFESjhCQ3dKQUlBUWdBa2NOQUVHckFTRVFETGtDQ3dKQUFrQUNRQUpBSUFRdEFBQkJ2bjlxRGc4QUFRS2tBYVFCcEFHa0FhUUJwQUdrQWFRQnBBR2tBYVFCQTZRQkN5QUVRUUZxSVFSQmt3RWhFQXlpQWdzZ0JFRUJhaUVFUVpRQklSQU1vUUlMSUFSQkFXb2hCRUdWQVNFUURLQUNDeUFFUVFGcUlRUkJsZ0VoRUF5ZkFnc0NRQ0FFSUFKSERRQkJyQUVoRUF5NEFnc2dCQzBBQUVIRkFFY05ud0VnQkVFQmFpRUVET0FCQ3dKQUlBUWdBa2NOQUVHdEFTRVFETGNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVITno0Q0FBR290QUFCSERaOEJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3RBU0VRRExjQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVE0aEVBeWNBUXNDUUNBRUlBSkhEUUJCcmdFaEVBeTJBZ3NnQkMwQUFFSFFBRWNOblFFZ0JFRUJhaUVCUVNVaEVBeWJBUXNDUUNBRUlBSkhEUUJCcndFaEVBeTFBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUncyZEFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnJ3RWhFQXkxQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVxSVJBTW1nRUxBa0FnQkNBQ1J3MEFRYkFCSVJBTXRBSUxBa0FDUUNBRUxRQUFRYXQvYWc0TEFKMEJuUUdkQVowQm5RR2RBWjBCblFHZEFRR2RBUXNnQkVFQmFpRUVRWm9CSVJBTW13SUxJQVJCQVdvaEJFR2JBU0VRREpvQ0N3SkFJQVFnQWtjTkFFR3hBU0VRRExNQ0N3SkFBa0FnQkMwQUFFRy9mMm9PRkFDY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFFQm5BRUxJQVJCQVdvaEJFR1pBU0VRREpvQ0N5QUVRUUZxSVFSQm5BRWhFQXlaQWdzQ1FDQUVJQUpIRFFCQnNnRWhFQXl5QWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRURhaUVRQWtBRFFDQUVMUUFBSUFGQjJjK0FnQUJxTFFBQVJ3MmFBU0FCUVFOR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJzZ0VoRUF5eUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFaElSQU1sd0VMQWtBZ0JDQUNSdzBBUWJNQklSQU1zUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJtb2hFQUpBQTBBZ0JDMEFBQ0FCUWQzUGdJQUFhaTBBQUVjTm1RRWdBVUVHUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiTUJJUkFNc1FJTElBQkJBRFlDQUNBUVFRRnFJUUZCR2lFUURKWUJDd0pBSUFRZ0FrY05BRUcwQVNFUURMQUNDd0pBQWtBQ1FDQUVMUUFBUWJ0L2FnNFJBSm9CbWdHYUFab0JtZ0dhQVpvQm1nR2FBUUdhQVpvQm1nR2FBWm9CQXBvQkN5QUVRUUZxSVFSQm5RRWhFQXlZQWdzZ0JFRUJhaUVFUVo0QklSQU1sd0lMSUFSQkFXb2hCRUdmQVNFUURKWUNDd0pBSUFRZ0FrY05BRUcxQVNFUURLOENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQUNRQU5BSUFRdEFBQWdBVUhrejRDQUFHb3RBQUJIRFpjQklBRkJCVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHMUFTRVFESzhDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU2doRUF5VUFRc0NRQ0FFSUFKSERRQkJ0Z0VoRUF5dUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkI2cytBZ0FCcUxRQUFSdzJXQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdGdFaEVBeXVBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUhJUkFNa3dFTEFrQWdCQ0FDUncwQVFiY0JJUkFNclFJTEFrQUNRQ0FFTFFBQVFidC9hZzRPQUpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnR1dBUUdXQVFzZ0JFRUJhaUVFUWFFQklSQU1sQUlMSUFSQkFXb2hCRUdpQVNFUURKTUNDd0pBSUFRZ0FrY05BRUc0QVNFUURLd0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRFpRQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHNEFTRVFES3dDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkloRUF5UkFRc0NRQ0FFSUFKSERRQkJ1UUVoRUF5ckFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzJUQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdVFFaEVBeXJBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWdJUkFNa0FFTEFrQWdCQ0FDUncwQVFib0JJUkFNcWdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmTFBnSUFBYWkwQUFFY05rZ0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYm9CSVJBTXFnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkR5RVFESThCQ3dKQUlBUWdBa2NOQUVHN0FTRVFES2tDQ3dKQUFrQWdCQzBBQUVHM2Yyb09Cd0NTQVpJQmtnR1NBWklCQVpJQkN5QUVRUUZxSVFSQnBRRWhFQXlRQWdzZ0JFRUJhaUVFUWFZQklSQU1qd0lMQWtBZ0JDQUNSdzBBUWJ3QklSQU1xQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkIyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZUUGdJQUFhaTBBQUVjTmtBRWdBVUVIUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFid0JJUkFNcUFJTElBQkJBRFlDQUNBUVFRRnFJUUZCR3lFUURJMEJDd0pBSUFRZ0FrY05BRUc5QVNFUURLY0NDd0pBQWtBQ1FDQUVMUUFBUWI1L2FnNFNBSkVCa1FHUkFaRUJrUUdSQVpFQmtRR1JBUUdSQVpFQmtRR1JBWkVCa1FFQ2tRRUxJQVJCQVdvaEJFR2tBU0VRREk4Q0N5QUVRUUZxSVFSQnB3RWhFQXlPQWdzZ0JFRUJhaUVFUWFnQklSQU1qUUlMQWtBZ0JDQUNSdzBBUWI0QklSQU1wZ0lMSUFRdEFBQkJ6Z0JIRFkwQklBUkJBV29oQkF6UEFRc0NRQ0FFSUFKSERRQkJ2d0VoRUF5bEFnc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUxRQUFRYjkvYWc0VkFBRUNBNXdCQkFVR25BR2NBWndCQndnSkNndWNBUXdORGcrY0FRc2dCRUVCYWlFQlFlZ0FJUkFNbWdJTElBUkJBV29oQVVIcEFDRVFESmtDQ3lBRVFRRnFJUUZCN2dBaEVBeVlBZ3NnQkVFQmFpRUJRZklBSVJBTWx3SUxJQVJCQVdvaEFVSHpBQ0VRREpZQ0N5QUVRUUZxSVFGQjlnQWhFQXlWQWdzZ0JFRUJhaUVCUWZjQUlSQU1sQUlMSUFSQkFXb2hBVUg2QUNFUURKTUNDeUFFUVFGcUlRUkJnd0VoRUF5U0Fnc2dCRUVCYWlFRVFZUUJJUkFNa1FJTElBUkJBV29oQkVHRkFTRVFESkFDQ3lBRVFRRnFJUVJCa2dFaEVBeVBBZ3NnQkVFQmFpRUVRWmdCSVJBTWpnSUxJQVJCQVdvaEJFR2dBU0VRREkwQ0N5QUVRUUZxSVFSQm93RWhFQXlNQWdzZ0JFRUJhaUVFUWFvQklSQU1pd0lMQWtBZ0JDQUNSZzBBSUFCQmtJQ0FnQUEyQWdnZ0FDQUVOZ0lFUWFzQklSQU1pd0lMUWNBQklSQU1vd0lMSUFBZ0JTQUNFS3FBZ0lBQUlnRU5pd0VnQlNFQkRGd0xBa0FnQmlBQ1JnMEFJQVpCQVdvaEJReU5BUXRCd2dFaEVBeWhBZ3NEUUFKQUlCQXRBQUJCZG1vT0JJd0JBQUNQQVFBTElCQkJBV29pRUNBQ1J3MEFDMEhEQVNFUURLQUNDd0pBSUFjZ0FrWU5BQ0FBUVpHQWdJQUFOZ0lJSUFBZ0J6WUNCQ0FISVFGQkFTRVFESWNDQzBIRUFTRVFESjhDQ3dKQUlBY2dBa2NOQUVIRkFTRVFESjhDQ3dKQUFrQWdCeTBBQUVGMmFnNEVBYzRCemdFQXpnRUxJQWRCQVdvaEJneU5BUXNnQjBFQmFpRUZESWtCQ3dKQUlBY2dBa2NOQUVIR0FTRVFESjRDQ3dKQUFrQWdCeTBBQUVGMmFnNFhBWThCandFQmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4QkFJOEJDeUFIUVFGcUlRY0xRYkFCSVJBTWhBSUxBa0FnQ0NBQ1J3MEFRY2dCSVJBTW5RSUxJQWd0QUFCQklFY05qUUVnQUVFQU93RXlJQWhCQVdvaEFVR3pBU0VRRElNQ0N5QUJJUmNDUUFOQUlCY2lCeUFDUmcwQklBY3RBQUJCVUdwQi93RnhJaEJCQ2s4TnpBRUNRQ0FBTHdFeUloUkJtVE5MRFFBZ0FDQVVRUXBzSWhRN0FUSWdFRUgvL3dOeklCUkIvdjhEY1VrTkFDQUhRUUZxSVJjZ0FDQVVJQkJxSWhBN0FUSWdFRUgvL3dOeFFlZ0hTUTBCQ3d0QkFDRVFJQUJCQURZQ0hDQUFRY0dKZ0lBQU5nSVFJQUJCRFRZQ0RDQUFJQWRCQVdvMkFoUU1uQUlMUWNjQklSQU1td0lMSUFBZ0NDQUNFSzZBZ0lBQUloQkZEY29CSUJCQkZVY05qQUVnQUVISUFUWUNIQ0FBSUFnMkFoUWdBRUhKbDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREpvQ0N3SkFJQWtnQWtjTkFFSE1BU0VRREpvQ0MwRUFJUlJCQVNFWFFRRWhGa0VBSVJBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0NTMEFBRUZRYWc0S2xnR1ZBUUFCQWdNRUJRWUlsd0VMUVFJaEVBd0dDMEVESVJBTUJRdEJCQ0VRREFRTFFRVWhFQXdEQzBFR0lSQU1BZ3RCQnlFUURBRUxRUWdoRUF0QkFDRVhRUUFoRmtFQUlSUU1qZ0VMUVFraEVFRUJJUlJCQUNFWFFRQWhGZ3lOQVFzQ1FDQUtJQUpIRFFCQnpnRWhFQXlaQWdzZ0NpMEFBRUV1UncyT0FTQUtRUUZxSVFrTXlnRUxJQXNnQWtjTmpnRkIwQUVoRUF5WEFnc0NRQ0FMSUFKR0RRQWdBRUdPZ0lDQUFEWUNDQ0FBSUFzMkFnUkJ0d0VoRUF6K0FRdEIwUUVoRUF5V0Fnc0NRQ0FFSUFKSERRQkIwZ0VoRUF5V0Fnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVFYWlFTEEwQWdCQzBBQUNBUVFmelBnSUFBYWkwQUFFY05qZ0VnRUVFRVJnM3BBU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhTQVNFUURKVUNDeUFBSUF3Z0FoQ3NnSUNBQUNJQkRZMEJJQXdoQVF5NEFRc0NRQ0FFSUFKSERRQkIxQUVoRUF5VUFnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVCYWlFTUEwQWdCQzBBQUNBUVFZSFFnSUFBYWkwQUFFY05qd0VnRUVFQlJnMk9BU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhVQVNFUURKTUNDd0pBSUFRZ0FrY05BRUhXQVNFUURKTUNDeUFDSUFScklBQW9BZ0FpRUdvaEZDQUVJQkJyUVFKcUlRc0RRQ0FFTFFBQUlCQkJnOUNBZ0FCcUxRQUFSdzJPQVNBUVFRSkdEWkFCSUJCQkFXb2hFQ0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWRZQklSQU1rZ0lMQWtBZ0JDQUNSdzBBUWRjQklSQU1rZ0lMQWtBQ1FDQUVMUUFBUWJ0L2FnNFFBSThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0VCandFTElBUkJBV29oQkVHN0FTRVFEUGtCQ3lBRVFRRnFJUVJCdkFFaEVBejRBUXNDUUNBRUlBSkhEUUJCMkFFaEVBeVJBZ3NnQkMwQUFFSElBRWNOakFFZ0JFRUJhaUVFRE1RQkN3SkFJQVFnQWtZTkFDQUFRWkNBZ0lBQU5nSUlJQUFnQkRZQ0JFRytBU0VRRFBjQkMwSFpBU0VRREk4Q0N3SkFJQVFnQWtjTkFFSGFBU0VRREk4Q0N5QUVMUUFBUWNnQVJnM0RBU0FBUVFFNkFDZ011UUVMSUFCQkFqb0FMeUFBSUFRZ0FoQ21nSUNBQUNJUURZMEJRY0lCSVJBTTlBRUxJQUF0QUNoQmYyb09BcmNCdVFHNEFRc0RRQUpBSUFRdEFBQkJkbW9PQkFDT0FZNEJBSTRCQ3lBRVFRRnFJZ1FnQWtjTkFBdEIzUUVoRUF5TEFnc2dBRUVBT2dBdklBQXRBQzFCQkhGRkRZUUNDeUFBUVFBNkFDOGdBRUVCT2dBMElBRWhBUXlNQVFzZ0VFRVZSZzNhQVNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCcDQ2QWdBQTJBaEFnQUVFU05nSU1RUUFoRUF5SUFnc0NRQ0FBSUJBZ0FoQzBnSUNBQUNJRURRQWdFQ0VCRElFQ0N3SkFJQVJCRlVjTkFDQUFRUU0yQWh3Z0FDQVFOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeUlBZ3NnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNaHdJTElCQkJGVVlOMWdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWRxTmdJQUFOZ0lRSUFCQkZEWUNERUVBSVJBTWhnSUxJQUFvQWdRaEZ5QUFRUUEyQWdRZ0VDQVJwMm9pRmlFQklBQWdGeUFRSUJZZ0ZCc2lFQkMxZ0lDQUFDSVVSUTJOQVNBQVFRYzJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNaFFJTElBQWdBQzhCTUVHQUFYSTdBVEFnQVNFQkMwRXFJUkFNNmdFTElCQkJGVVlOMFFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVlPTWdJQUFOZ0lRSUFCQkV6WUNERUVBSVJBTWdnSUxJQkJCRlVZTnp3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU1nUUlMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJMEJDeUFBUVF3MkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNZ0FJTElCQkJGVVlOekFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTS93RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCREl3QkN5QUFRUTAyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vZ0VMSUJCQkZVWU55UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY2FNZ0lBQU5nSVFJQUJCSXpZQ0RFRUFJUkFNL1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkM1Z0lDQUFDSVFEUUFnQVVFQmFpRUJESXNCQ3lBQVFRNDJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTS9BRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEFsWUNBQURZQ0VDQUFRUUkyQWd4QkFDRVFEUHNCQ3lBUVFSVkdEY1VCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaklDQUFEWUNFQ0FBUVNNMkFneEJBQ0VRRFBvQkN5QUFRUkEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTStRRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDNWdJQ0FBQ0lFRFFBZ0FVRUJhaUVCRFBFQkN5QUFRUkUyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0rQUVMSUJCQkZVWU53UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY2FNZ0lBQU5nSVFJQUJCSXpZQ0RFRUFJUkFNOXdFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkM1Z0lDQUFDSVFEUUFnQVVFQmFpRUJESWdCQ3lBQVFSTTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTlnRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDNWdJQ0FBQ0lFRFFBZ0FVRUJhaUVCRE8wQkN5QUFRUlEyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05UUVMSUJCQkZVWU52UUVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNOUFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESVlCQ3lBQVFSWTJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTTh3RUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDM2dJQ0FBQ0lFRFFBZ0FVRUJhaUVCRE9rQkN5QUFRUmMyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04Z0VMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhOazRDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRFBFQkMwSUJJUkVMSUJCQkFXb2hBUUpBSUFBcEF5QWlFa0wvLy8vLy8vLy8vdzlXRFFBZ0FDQVNRZ1NHSUJHRU53TWdJQUVoQVF5RUFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFhMkpnSUFBTmdJUUlBQkJERFlDREVFQUlSQU03d0VMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUhOazRDQUFEWUNFQ0FBUVF3MkFneEJBQ0VRRE80QkN5QUFLQUlFSVJjZ0FFRUFOZ0lFSUJBZ0VhZHFJaFloQVNBQUlCY2dFQ0FXSUJRYkloQVF0WUNBZ0FBaUZFVU5jeUFBUVFVMkFod2dBQ0FRTmdJVUlBQWdGRFlDREVFQUlSQU03UUVMSUFCQkFEWUNIQ0FBSUJBMkFoUWdBRUdxbklDQUFEWUNFQ0FBUVE4MkFneEJBQ0VRRE93QkN5QUFJQkFnQWhDMGdJQ0FBQ0lCRFFFZ0VDRUJDMEVPSVJBTTBRRUxBa0FnQVVFVlJ3MEFJQUJCQWpZQ0hDQUFJQkEyQWhRZ0FFR3dtSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFET29CQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcDQ2QWdBQTJBaEFnQUVFU05nSU1RUUFoRUF6cEFRc2dBVUVCYWlFUUFrQWdBQzhCTUNJQlFZQUJjVVVOQUFKQUlBQWdFQ0FDRUx1QWdJQUFJZ0VOQUNBUUlRRU1jQXNnQVVFVlJ3MjZBU0FBUVFVMkFod2dBQ0FRTmdJVUlBQkIrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzQ1FDQUJRYUFFY1VHZ0JFY05BQ0FBTFFBdFFRSnhEUUFnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRWmFUZ0lBQU5nSVFJQUJCQkRZQ0RFRUFJUkFNNlFFTElBQWdFQ0FDRUwyQWdJQUFHaUFRSVFFQ1FBSkFBa0FDUUFKQUlBQWdFQ0FDRUxPQWdJQUFEaFlDQVFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRREJBc2dBRUVCT2dBdUN5QUFJQUF2QVRCQndBQnlPd0V3SUJBaEFRdEJKaUVRRE5FQkN5QUFRU00yQWh3Z0FDQVFOZ0lVSUFCQnBaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenBBUXNnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRZFdMZ0lBQU5nSVFJQUJCRVRZQ0RFRUFJUkFNNkFFTElBQXRBQzFCQVhGRkRRRkJ3d0VoRUF6T0FRc0NRQ0FOSUFKR0RRQURRQUpBSUEwdEFBQkJJRVlOQUNBTklRRU14QUVMSUExQkFXb2lEU0FDUncwQUMwRWxJUkFNNXdFTFFTVWhFQXptQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0RSQ3ZnSUNBQUNJRVJRMnRBU0FBUVNZMkFod2dBQ0FFTmdJTUlBQWdEVUVCYWpZQ0ZFRUFJUkFNNVFFTElCQkJGVVlOcXdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWYyTmdJQUFOZ0lRSUFCQkhUWUNERUVBSVJBTTVBRUxJQUJCSnpZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBempBUXNnRUNFQlFRRWhGQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQXRBQ3hCZm1vT0J3WUZCUU1CQWdBRkN5QUFJQUF2QVRCQkNISTdBVEFNQXd0QkFpRVVEQUVMUVFRaEZBc2dBRUVCT2dBc0lBQWdBQzhCTUNBVWNqc0JNQXNnRUNFQkMwRXJJUkFNeWdFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcmtvQ0FBRFlDRUNBQVFRczJBZ3hCQUNFUURPSUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkI0WStBZ0FBMkFoQWdBRUVLTmdJTVFRQWhFQXpoQVFzZ0FFRUFPZ0FzSUJBaEFReTlBUXNnRUNFQlFRRWhGQUpBQWtBQ1FBSkFBa0FnQUMwQUxFRjdhZzRFQXdFQ0FBVUxJQUFnQUM4Qk1FRUljanNCTUF3REMwRUNJUlFNQVF0QkJDRVVDeUFBUVFFNkFDd2dBQ0FBTHdFd0lCUnlPd0V3Q3lBUUlRRUxRU2toRUF6RkFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFmQ1VnSUFBTmdJUUlBQkJBellDREVFQUlSQU0zUUVMQWtBZ0RpMEFBRUVOUncwQUlBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdEaEN4Z0lDQUFDSUJEUUFnRGtFQmFpRUJESFVMSUFCQkxEWUNIQ0FBSUFFMkFnd2dBQ0FPUVFGcU5nSVVRUUFoRUF6ZEFRc2dBQzBBTFVFQmNVVU5BVUhFQVNFUURNTUJDd0pBSUE0Z0FrY05BRUV0SVJBTTNBRUxBa0FDUUFOQUFrQWdEaTBBQUVGMmFnNEVBZ0FBQXdBTElBNUJBV29pRGlBQ1J3MEFDMEV0SVJBTTNRRUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RpRUJESFFMSUFCQkxEWUNIQ0FBSUE0MkFoUWdBQ0FCTmdJTVFRQWhFQXpjQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQU9FTEdBZ0lBQUlnRU5BQ0FPUVFGcUlRRU1jd3NnQUVFc05nSWNJQUFnQVRZQ0RDQUFJQTVCQVdvMkFoUkJBQ0VRRE5zQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQU9FTEdBZ0lBQUlnUU5vQUVnRGlFQkRNNEJDeUFRUVN4SERRRWdBVUVCYWlFUVFRRWhBUUpBQWtBQ1FBSkFBa0FnQUMwQUxFRjdhZzRFQXdFQ0JBQUxJQkFoQVF3RUMwRUNJUUVNQVF0QkJDRUJDeUFBUVFFNkFDd2dBQ0FBTHdFd0lBRnlPd0V3SUJBaEFRd0JDeUFBSUFBdkFUQkJDSEk3QVRBZ0VDRUJDMEU1SVJBTXZ3RUxJQUJCQURvQUxDQUJJUUVMUVRRaEVBeTlBUXNnQUNBQUx3RXdRU0J5T3dFd0lBRWhBUXdDQ3lBQUtBSUVJUVFnQUVFQU5nSUVBa0FnQUNBRUlBRVFzWUNBZ0FBaUJBMEFJQUVoQVF6SEFRc2dBRUUzTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUUROUUJDeUFBUVFnNkFDd2dBU0VCQzBFd0lSQU11UUVMQWtBZ0FDMEFLRUVCUmcwQUlBRWhBUXdFQ3lBQUxRQXRRUWh4UlEyVEFTQUJJUUVNQXdzZ0FDMEFNRUVnY1EyVUFVSEZBU0VRRExjQkN3SkFJQThnQWtZTkFBSkFBMEFDUUNBUExRQUFRVkJxSWdGQi93RnhRUXBKRFFBZ0R5RUJRVFVoRUF5NkFRc2dBQ2tESUNJUlFwbXo1c3lacytiTUdWWU5BU0FBSUJGQ0NuNGlFVGNESUNBUklBR3RRdjhCZ3lJU1FuK0ZWZzBCSUFBZ0VTQVNmRGNESUNBUFFRRnFJZzhnQWtjTkFBdEJPU0VRRE5FQkN5QUFLQUlFSVFJZ0FFRUFOZ0lFSUFBZ0FpQVBRUUZxSWdRUXNZQ0FnQUFpQWcyVkFTQUVJUUVNd3dFTFFUa2hFQXpQQVFzQ1FDQUFMd0V3SWdGQkNIRkZEUUFnQUMwQUtFRUJSdzBBSUFBdEFDMUJDSEZGRFpBQkN5QUFJQUZCOS9zRGNVR0FCSEk3QVRBZ0R5RUJDMEUzSVJBTXRBRUxJQUFnQUM4Qk1FRVFjanNCTUF5ckFRc2dFRUVWUmcyTEFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhJNkFnQUEyQWhBZ0FFRWNOZ0lNUVFBaEVBekxBUXNnQUVIREFEWUNIQ0FBSUFFMkFnd2dBQ0FOUVFGcU5nSVVRUUFoRUF6S0FRc0NRQ0FCTFFBQVFUcEhEUUFnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLK0FnSUFBSWhBTkFDQUJRUUZxSVFFTVl3c2dBRUhEQURZQ0hDQUFJQkEyQWd3Z0FDQUJRUUZxTmdJVVFRQWhFQXpLQVFzZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWJHUmdJQUFOZ0lRSUFCQkNqWUNERUVBSVJBTXlRRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2dtWUNBQURZQ0VDQUFRUjQyQWd4QkFDRVFETWdCQ3lBQVFRQTJBZ0FMSUFCQmdCSTdBU29nQUNBWFFRRnFJZ0VnQWhDb2dJQ0FBQ0lRRFFFZ0FTRUJDMEhIQUNFUURLd0JDeUFRUVJWSERZTUJJQUJCMFFBMkFod2dBQ0FCTmdJVUlBQkI0NWVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpFQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVhnc2dBRUhTQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBekRBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY0dvZ0lBQU5nSVFJQUJCQnpZQ0RDQUFRUUEyQWdCQkFDRVFETUlCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4ZEN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURNRUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVlDUmdJQUFOZ0lRSUFCQkNUWUNEQXpBQVFzZ0VFRVZSZzE5SUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdVallDQUFEWUNFQ0FBUVNFMkFneEJBQ0VRREw4QkMwRUJJUlpCQUNFWFFRQWhGRUVCSVJBTElBQWdFRG9BS3lBQlFRRnFJUUVDUUFKQUlBQXRBQzFCRUhFTkFBSkFBa0FDUUNBQUxRQXFEZ01CQUFJRUN5QVdSUTBEREFJTElCUU5BUXdDQ3lBWFJRMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXJZQ0FnQUFpRUEwQUlBRWhBUXhjQ3lBQVFkZ0FOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREw0QkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReXRBUXNnQUVIWkFEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk5QVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFSzJBZ0lBQUlnUU5BQ0FCSVFFTXF3RUxJQUJCMmdBMkFod2dBQ0FCTmdJVUlBQWdCRFlDREVFQUlSQU12QUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtrQkN5QUFRZHdBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMc0JDd0pBSUFFdEFBQkJVR29pRUVIL0FYRkJDazhOQUNBQUlCQTZBQ29nQVVFQmFpRUJRYzhBSVJBTW9nRUxJQUFvQWdRaEJDQUFRUUEyQWdRQ1FDQUFJQVFnQVJDdGdJQ0FBQ0lFRFFBZ0FTRUJES2NCQ3lBQVFkNEFOZ0ljSUFBZ0FUWUNGQ0FBSUFRMkFneEJBQ0VRRExvQkN5QUFRUUEyQWdBZ0YwRUJhaUVCQWtBZ0FDMEFLVUVqVHcwQUlBRWhBUXhaQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCMDRtQWdBQTJBaEFnQUVFSU5nSU1RUUFoRUF5NUFRc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWkN6Z0lBQU5nSVFJQUJCQ0RZQ0RBeTNBUXNnQUVFQU5nSUFJQmRCQVdvaEFRSkFJQUF0QUNsQklVY05BQ0FCSVFFTVZnc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFadUtnSUFBTmdJUUlBQkJDRFlDREVFQUlSQU10Z0VMSUFCQkFEWUNBQ0FYUVFGcUlRRUNRQ0FBTFFBcEloQkJYV3BCQzA4TkFDQUJJUUVNVlFzQ1FDQVFRUVpMRFFCQkFTQVFkRUhLQUhGRkRRQWdBU0VCREZVTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI5NG1BZ0FBMkFoQWdBRUVJTmdJTURMVUJDeUFRUVJWR0RYRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFibU5nSUFBTmdJUUlBQkJHallDREVFQUlSQU10QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREZRTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXN3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjBnQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc2dFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFMExJQUJCMHdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREZFTElBQkI1UUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNBRUxJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdpb0NBQURZQ0VDQUFRUWMyQWd4QkFDRVFESzhCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZElBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLNEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhKQ3lBQVFkTUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREswQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWVVQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFES3dCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCM0lpQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5ckFRc2dFRUUvUncwQklBRkJBV29oQVF0QkJTRVFESkFCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMlNnSUFBTmdJUUlBQkJCellDREF5b0FRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXluQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVFnc2dBRUhUQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeW1BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUmdzZ0FFSGxBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bEFRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIU0FEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlrQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVB3c2dBRUhUQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWpBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUXdzZ0FFSGxBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5aUFRc2dBRUVBTmdJY0lBQWdGRFlDRkNBQVFjT1BnSUFBTmdJUUlBQkJCellDREVFQUlSQU1vUUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhEajRDQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREtBQkMwRUFJUkFnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRWXljZ0lBQU5nSVFJQUJCQnpZQ0RBeWZBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRWXljZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNbmdFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIK2tZQ0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURKMEJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJqcHVBZ0FBMkFoQWdBRUVHTmdJTVFRQWhFQXljQVFzZ0VFRVZSZzFYSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhNam9DQUFEWUNFQ0FBUVNBMkFneEJBQ0VRREpzQkN5QUFRUUEyQWdBZ0VFRUJhaUVCUVNRaEVBc2dBQ0FRT2dBcElBQW9BZ1FoRUNBQVFRQTJBZ1FnQUNBUUlBRVFxNENBZ0FBaUVBMVVJQUVoQVF3K0N5QUFRUUEyQWdBTFFRQWhFQ0FBUVFBMkFod2dBQ0FFTmdJVUlBQkI4WnVBZ0FBMkFoQWdBRUVHTmdJTURKY0JDeUFCUVJWR0RWQWdBRUVBTmdJY0lBQWdCVFlDRkNBQVFmQ01nSUFBTmdJUUlBQkJHellDREVFQUlSQU1sZ0VMSUFBb0FnUWhCU0FBUVFBMkFnUWdBQ0FGSUJBUXFZQ0FnQUFpQlEwQklCQkJBV29oQlF0QnJRRWhFQXg3Q3lBQVFjRUJOZ0ljSUFBZ0JUWUNEQ0FBSUJCQkFXbzJBaFJCQUNFUURKTUJDeUFBS0FJRUlRWWdBRUVBTmdJRUlBQWdCaUFRRUttQWdJQUFJZ1lOQVNBUVFRRnFJUVlMUWE0QklSQU1lQXNnQUVIQ0FUWUNIQ0FBSUFZMkFnd2dBQ0FRUVFGcU5nSVVRUUFoRUF5UUFRc2dBRUVBTmdJY0lBQWdCellDRkNBQVFaZUxnSUFBTmdJUUlBQkJEVFlDREVFQUlSQU1qd0VMSUFCQkFEWUNIQ0FBSUFnMkFoUWdBRUhqa0lDQUFEWUNFQ0FBUVFrMkFneEJBQ0VRREk0QkN5QUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQmxJMkFnQUEyQWhBZ0FFRWhOZ0lNUVFBaEVBeU5BUXRCQVNFV1FRQWhGMEVBSVJSQkFTRVFDeUFBSUJBNkFDc2dDVUVCYWlFSUFrQUNRQ0FBTFFBdFFSQnhEUUFDUUFKQUFrQWdBQzBBS2c0REFRQUNCQXNnRmtVTkF3d0NDeUFVRFFFTUFnc2dGMFVOQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQ0FBSUJBZ0NCQ3RnSUNBQUNJUVJRMDlJQUJCeVFFMkFod2dBQ0FJTmdJVUlBQWdFRFlDREVFQUlSQU1qQUVMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUFnUXJZQ0FnQUFpQkVVTmRpQUFRY29CTmdJY0lBQWdDRFlDRkNBQUlBUTJBZ3hCQUNFUURJc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FKRUsyQWdJQUFJZ1JGRFhRZ0FFSExBVFlDSENBQUlBazJBaFFnQUNBRU5nSU1RUUFoRUF5S0FRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDaEN0Z0lDQUFDSUVSUTF5SUFCQnpRRTJBaHdnQUNBS05nSVVJQUFnQkRZQ0RFRUFJUkFNaVFFTEFrQWdDeTBBQUVGUWFpSVFRZjhCY1VFS1R3MEFJQUFnRURvQUtpQUxRUUZxSVFwQnRnRWhFQXh3Q3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBTEVLMkFnSUFBSWdSRkRYQWdBRUhQQVRZQ0hDQUFJQXMyQWhRZ0FDQUVOZ0lNUVFBaEVBeUlBUXNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRWkN6Z0lBQU5nSVFJQUJCQ0RZQ0RDQUFRUUEyQWdCQkFDRVFESWNCQ3lBQlFSVkdEVDhnQUVFQU5nSWNJQUFnRERZQ0ZDQUFRY3lPZ0lBQU5nSVFJQUJCSURZQ0RFRUFJUkFNaGdFTElBQkJnUVE3QVNnZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0RFRUJhaUlNRUt1QWdJQUFJaEJGRFRnZ0FFSFRBVFlDSENBQUlBdzJBaFFnQUNBUU5nSU1RUUFoRUF5RkFRc2dBRUVBTmdJQUMwRUFJUkFnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZGliZ0lBQU5nSVFJQUJCQ0RZQ0RBeURBUXNnQUNnQ0JDRVFJQUJDQURjREFDQUFJQkFnQzBFQmFpSUxFS3VBZ0lBQUloQU5BVUhHQVNFUURHa0xJQUJCQWpvQUtBeFZDeUFBUWRVQk5nSWNJQUFnQ3pZQ0ZDQUFJQkEyQWd4QkFDRVFESUFCQ3lBUVFSVkdEVGNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRYVNNZ0lBQU5nSVFJQUJCRURZQ0RFRUFJUkFNZndzZ0FDMEFORUVCUncwMElBQWdCQ0FDRUx5QWdJQUFJaEJGRFRRZ0VFRVZSdzAxSUFCQjNBRTJBaHdnQUNBRU5nSVVJQUJCMVphQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4K0MwRUFJUkFnQUVFQU5nSWNJQUJCcjR1QWdBQTJBaEFnQUVFQ05nSU1JQUFnRkVFQmFqWUNGQXg5QzBFQUlSQU1Zd3RCQWlFUURHSUxRUTBoRUF4aEMwRVBJUkFNWUF0QkpTRVFERjhMUVJNaEVBeGVDMEVWSVJBTVhRdEJGaUVRREZ3TFFSY2hFQXhiQzBFWUlSQU1XZ3RCR1NFUURGa0xRUm9oRUF4WUMwRWJJUkFNVnd0QkhDRVFERllMUVIwaEVBeFZDMEVmSVJBTVZBdEJJU0VRREZNTFFTTWhFQXhTQzBIR0FDRVFERkVMUVM0aEVBeFFDMEV2SVJBTVR3dEJPeUVRREU0TFFUMGhFQXhOQzBISUFDRVFERXdMUWNrQUlSQU1Td3RCeXdBaEVBeEtDMEhNQUNFUURFa0xRYzRBSVJBTVNBdEIwUUFoRUF4SEMwSFZBQ0VRREVZTFFkZ0FJUkFNUlF0QjJRQWhFQXhFQzBIYkFDRVFERU1MUWVRQUlSQU1RZ3RCNVFBaEVBeEJDMEh4QUNFUURFQUxRZlFBSVJBTVB3dEJqUUVoRUF3K0MwR1hBU0VRREQwTFFha0JJUkFNUEF0QnJBRWhFQXc3QzBIQUFTRVFERG9MUWJrQklSQU1PUXRCcndFaEVBdzRDMEd4QVNFUUREY0xRYklCSVJBTU5ndEJ0QUVoRUF3MUMwRzFBU0VRRERRTFFib0JJUkFNTXd0QnZRRWhFQXd5QzBHL0FTRVFEREVMUWNFQklSQU1NQXNnQUVFQU5nSWNJQUFnQkRZQ0ZDQUFRZW1MZ0lBQU5nSVFJQUJCSHpZQ0RFRUFJUkFNU0FzZ0FFSGJBVFlDSENBQUlBUTJBaFFnQUVINmxvQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFY0xJQUJCK0FBMkFod2dBQ0FNTmdJVUlBQkJ5cGlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhHQ3lBQVFkRUFOZ0ljSUFBZ0JUWUNGQ0FBUWJDWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVJRc2dBRUg1QURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeEVDeUFBUWZnQU5nSWNJQUFnQVRZQ0ZDQUFRY3FZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUXdzZ0FFSGtBRFlDSENBQUlBRTJBaFFnQUVIamw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURFSUxJQUJCMXdBMkFod2dBQ0FCTmdJVUlBQkJ5WmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXhCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdVkyQWdBQTJBaEFnQUVFYU5nSU1RUUFoRUF4QUN5QUFRY0lBTmdJY0lBQWdBVFlDRkNBQVFlT1lnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Qd3NnQUVFQU5nSUVJQUFnRHlBUEVMR0FnSUFBSWdSRkRRRWdBRUU2TmdJY0lBQWdCRFlDRENBQUlBOUJBV28yQWhSQkFDRVFERDRMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3hnSUNBQUNJRVJRMEFJQUJCT3pZQ0hDQUFJQVEyQWd3Z0FDQUJRUUZxTmdJVVFRQWhFQXcrQ3lBQlFRRnFJUUVNTFFzZ0QwRUJhaUVCREMwTElBQkJBRFlDSENBQUlBODJBaFFnQUVIa2tvQ0FBRFlDRUNBQVFRUTJBZ3hCQUNFUUREc0xJQUJCTmpZQ0hDQUFJQVEyQWhRZ0FDQUNOZ0lNUVFBaEVBdzZDeUFBUVM0MkFod2dBQ0FPTmdJVUlBQWdCRFlDREVFQUlSQU1PUXNnQUVIUUFEWUNIQ0FBSUFFMkFoUWdBRUdSbUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRERnTElBMUJBV29oQVF3c0N5QUFRUlUyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzJDeUFBUVJzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcxQ3lBQVFRODJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MEN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3pDeUFBUVJvMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd5Q3lBQVFRczJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eEN5QUFRUW8yQWh3Z0FDQUJOZ0lVSUFCQjVKYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3dDeUFBUVI0MkFod2dBQ0FCTmdJVUlBQkIrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd2Q3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCMm8yQWdBQTJBaEFnQUVFVU5nSU1RUUFoRUF3dUN5QUFRUVEyQWh3Z0FDQUJOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3RDeUFBUVFBMkFnQWdDMEVCYWlFTEMwRzRBU0VRREJJTElBQkJBRFlDQUNBUVFRRnFJUUZCOVFBaEVBd1JDeUFCSVFFQ1FDQUFMUUFwUVFWSERRQkI0d0FoRUF3UkMwSGlBQ0VRREJBTFFRQWhFQ0FBUVFBMkFod2dBRUhra1lDQUFEWUNFQ0FBUVFjMkFnd2dBQ0FVUVFGcU5nSVVEQ2dMSUFCQkFEWUNBQ0FYUVFGcUlRRkJ3QUFoRUF3T0MwRUJJUUVMSUFBZ0FUb0FMQ0FBUVFBMkFnQWdGMEVCYWlFQkMwRW9JUkFNQ3dzZ0FTRUJDMEU0SVJBTUNRc0NRQ0FCSWc4Z0FrWU5BQU5BQWtBZ0R5MEFBRUdBdm9DQUFHb3RBQUFpQVVFQlJnMEFJQUZCQWtjTkF5QVBRUUZxSVFFTUJBc2dEMEVCYWlJUElBSkhEUUFMUVQ0aEVBd2lDMEUrSVJBTUlRc2dBRUVBT2dBc0lBOGhBUXdCQzBFTElSQU1CZ3RCT2lFUURBVUxJQUZCQVdvaEFVRXRJUkFNQkFzZ0FDQUJPZ0FzSUFCQkFEWUNBQ0FXUVFGcUlRRkJEQ0VRREFNTElBQkJBRFlDQUNBWFFRRnFJUUZCQ2lFUURBSUxJQUJCQURZQ0FBc2dBRUVBT2dBc0lBMGhBVUVKSVJBTUFBc0xRUUFoRUNBQVFRQTJBaHdnQUNBTE5nSVVJQUJCelpDQWdBQTJBaEFnQUVFSk5nSU1EQmNMUVFBaEVDQUFRUUEyQWh3Z0FDQUtOZ0lVSUFCQjZZcUFnQUEyQWhBZ0FFRUpOZ0lNREJZTFFRQWhFQ0FBUVFBMkFod2dBQ0FKTmdJVUlBQkJ0NUNBZ0FBMkFoQWdBRUVKTmdJTURCVUxRUUFoRUNBQVFRQTJBaHdnQUNBSU5nSVVJQUJCbkpHQWdBQTJBaEFnQUVFSk5nSU1EQlFMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJNTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCSUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQkVMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJBTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsNVdBZ0FBMkFoQWdBRUVQTmdJTURBOExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQTRMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQndKS0FnQUEyQWhBZ0FFRUxOZ0lNREEwTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsWW1BZ0FBMkFoQWdBRUVMTmdJTURBd0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1EQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQis0K0FnQUEyQWhBZ0FFRUtOZ0lNREFvTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4Wm1BZ0FBMkFoQWdBRUVDTmdJTURBa0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCeEpTQWdBQTJBaEFnQUVFQ05nSU1EQWdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjhwV0FnQUEyQWhBZ0FFRUNOZ0lNREFjTElBQkJBallDSENBQUlBRTJBaFFnQUVHY21vQ0FBRFlDRUNBQVFSWTJBZ3hCQUNFUURBWUxRUUVoRUF3RkMwSFVBQ0VRSUFFaUJDQUNSZzBFSUFOQkNHb2dBQ0FFSUFKQjJNS0FnQUJCQ2hERmdJQ0FBQ0FES0FJTUlRUWdBeWdDQ0E0REFRUUNBQXNReW9DQWdBQUFDeUFBUVFBMkFod2dBRUcxbW9DQUFEWUNFQ0FBUVJjMkFnd2dBQ0FFUVFGcU5nSVVRUUFoRUF3Q0N5QUFRUUEyQWh3Z0FDQUVOZ0lVSUFCQnlwcUFnQUEyQWhBZ0FFRUpOZ0lNUVFBaEVBd0JDd0pBSUFFaUJDQUNSdzBBUVNJaEVBd0JDeUFBUVltQWdJQUFOZ0lJSUFBZ0JEWUNCRUVoSVJBTElBTkJFR29rZ0lDQWdBQWdFQXV2QVFFQ2Z5QUJLQUlBSVFZQ1FBSkFJQUlnQTBZTkFDQUVJQVpxSVFRZ0JpQURhaUFDYXlFSElBSWdCa0YvY3lBRmFpSUdhaUVGQTBBQ1FDQUNMUUFBSUFRdEFBQkdEUUJCQWlFRURBTUxBa0FnQmcwQVFRQWhCQ0FGSVFJTUF3c2dCa0YvYWlFR0lBUkJBV29oQkNBQ1FRRnFJZ0lnQTBjTkFBc2dCeUVHSUFNaEFnc2dBRUVCTmdJQUlBRWdCallDQUNBQUlBSTJBZ1FQQ3lBQlFRQTJBZ0FnQUNBRU5nSUFJQUFnQWpZQ0JBc0tBQ0FBRU1lQWdJQUFDL0kyQVF0L0k0Q0FnSUFBUVJCcklnRWtnSUNBZ0FBQ1FFRUFLQUtnMElDQUFBMEFRUUFReTRDQWdBQkJnTlNFZ0FCcklnSkIyUUJKRFFCQkFDRURBa0JCQUNnQzROT0FnQUFpQkEwQVFRQkNmemNDN05PQWdBQkJBRUtBZ0lTQWdJREFBRGNDNU5PQWdBQkJBQ0FCUVFocVFYQnhRZGlxMWFvRmN5SUVOZ0xnMDRDQUFFRUFRUUEyQXZUVGdJQUFRUUJCQURZQ3hOT0FnQUFMUVFBZ0FqWUN6Tk9BZ0FCQkFFR0ExSVNBQURZQ3lOT0FnQUJCQUVHQTFJU0FBRFlDbU5DQWdBQkJBQ0FFTmdLczBJQ0FBRUVBUVg4MkFxalFnSUFBQTBBZ0EwSEUwSUNBQUdvZ0EwRzQwSUNBQUdvaUJEWUNBQ0FFSUFOQnNOQ0FnQUJxSWdVMkFnQWdBMEc4MElDQUFHb2dCVFlDQUNBRFFjelFnSUFBYWlBRFFjRFFnSUFBYWlJRk5nSUFJQVVnQkRZQ0FDQURRZFRRZ0lBQWFpQURRY2pRZ0lBQWFpSUVOZ0lBSUFRZ0JUWUNBQ0FEUWREUWdJQUFhaUFFTmdJQUlBTkJJR29pQTBHQUFrY05BQXRCZ05TRWdBQkJlRUdBMUlTQUFHdEJEM0ZCQUVHQTFJU0FBRUVJYWtFUGNSc2lBMm9pQkVFRWFpQUNRVWhxSWdVZ0Eyc2lBMEVCY2pZQ0FFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQU0yQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUJCZ05TRWdBQWdCV3BCT0RZQ0JBc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FFSHNBVXNOQUFKQVFRQW9Bb2pRZ0lBQUlnWkJFQ0FBUVJOcVFYQnhJQUJCQzBrYklnSkJBM1lpQkhZaUEwRURjVVVOQUFKQUFrQWdBMEVCY1NBRWNrRUJjeUlGUVFOMElnUkJzTkNBZ0FCcUlnTWdCRUc0MElDQUFHb29BZ0FpQkNnQ0NDSUNSdzBBUVFBZ0JrRitJQVYzY1RZQ2lOQ0FnQUFNQVFzZ0F5QUNOZ0lJSUFJZ0F6WUNEQXNnQkVFSWFpRURJQVFnQlVFRGRDSUZRUU55TmdJRUlBUWdCV29pQkNBRUtBSUVRUUZ5TmdJRURBd0xJQUpCQUNnQ2tOQ0FnQUFpQjAwTkFRSkFJQU5GRFFBQ1FBSkFJQU1nQkhSQkFpQUVkQ0lEUVFBZ0EydHljU0lEUVFBZ0EydHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbW9pQkVFRGRDSURRYkRRZ0lBQWFpSUZJQU5CdU5DQWdBQnFLQUlBSWdNb0FnZ2lBRWNOQUVFQUlBWkJmaUFFZDNFaUJqWUNpTkNBZ0FBTUFRc2dCU0FBTmdJSUlBQWdCVFlDREFzZ0F5QUNRUU55TmdJRUlBTWdCRUVEZENJRWFpQUVJQUpySWdVMkFnQWdBeUFDYWlJQUlBVkJBWEkyQWdRQ1FDQUhSUTBBSUFkQmVIRkJzTkNBZ0FCcUlRSkJBQ2dDbk5DQWdBQWhCQUpBQWtBZ0JrRUJJQWRCQTNaMElnaHhEUUJCQUNBR0lBaHlOZ0tJMElDQUFDQUNJUWdNQVFzZ0FpZ0NDQ0VJQ3lBSUlBUTJBZ3dnQWlBRU5nSUlJQVFnQWpZQ0RDQUVJQWcyQWdnTElBTkJDR29oQTBFQUlBQTJBcHpRZ0lBQVFRQWdCVFlDa05DQWdBQU1EQXRCQUNnQ2pOQ0FnQUFpQ1VVTkFTQUpRUUFnQ1d0eFFYOXFJZ01nQTBFTWRrRVFjU0lEZGlJRVFRVjJRUWh4SWdVZ0EzSWdCQ0FGZGlJRFFRSjJRUVJ4SWdSeUlBTWdCSFlpQTBFQmRrRUNjU0lFY2lBRElBUjJJZ05CQVhaQkFYRWlCSElnQXlBRWRtcEJBblJCdU5LQWdBQnFLQUlBSWdBb0FnUkJlSEVnQW1zaEJDQUFJUVVDUUFOQUFrQWdCU2dDRUNJRERRQWdCVUVVYWlnQ0FDSURSUTBDQ3lBREtBSUVRWGh4SUFKcklnVWdCQ0FGSUFSSklnVWJJUVFnQXlBQUlBVWJJUUFnQXlFRkRBQUxDeUFBS0FJWUlRb0NRQ0FBS0FJTUlnZ2dBRVlOQUNBQUtBSUlJZ05CQUNnQ21OQ0FnQUJKR2lBSUlBTTJBZ2dnQXlBSU5nSU1EQXNMQWtBZ0FFRVVhaUlGS0FJQUlnTU5BQ0FBS0FJUUlnTkZEUU1nQUVFUWFpRUZDd05BSUFVaEN5QURJZ2hCRkdvaUJTZ0NBQ0lERFFBZ0NFRVFhaUVGSUFnb0FoQWlBdzBBQ3lBTFFRQTJBZ0FNQ2d0QmZ5RUNJQUJCdjM5TERRQWdBRUVUYWlJRFFYQnhJUUpCQUNnQ2pOQ0FnQUFpQjBVTkFFRUFJUXNDUUNBQ1FZQUNTUTBBUVI4aEN5QUNRZi8vL3dkTERRQWdBMEVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRUlBUkJnT0FmYWtFUWRrRUVjU0lFZENJRklBVkJnSUFQYWtFUWRrRUNjU0lGZEVFUGRpQURJQVJ5SUFWeWF5SURRUUYwSUFJZ0EwRVZhblpCQVhGeVFSeHFJUXNMUVFBZ0Ftc2hCQUpBQWtBQ1FBSkFJQXRCQW5SQnVOS0FnQUJxS0FJQUlnVU5BRUVBSVFOQkFDRUlEQUVMUVFBaEF5QUNRUUJCR1NBTFFRRjJheUFMUVI5R0czUWhBRUVBSVFnRFFBSkFJQVVvQWdSQmVIRWdBbXNpQmlBRVR3MEFJQVloQkNBRklRZ2dCZzBBUVFBaEJDQUZJUWdnQlNFRERBTUxJQU1nQlVFVWFpZ0NBQ0lHSUFZZ0JTQUFRUjEyUVFSeGFrRVFhaWdDQUNJRlJoc2dBeUFHR3lFRElBQkJBWFFoQUNBRkRRQUxDd0pBSUFNZ0NISU5BRUVBSVFoQkFpQUxkQ0lEUVFBZ0EydHlJQWR4SWdORkRRTWdBMEVBSUFOcmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJVRUZka0VJY1NJQUlBTnlJQVVnQUhZaUEwRUNka0VFY1NJRmNpQURJQVYySWdOQkFYWkJBbkVpQlhJZ0F5QUZkaUlEUVFGMlFRRnhJZ1Z5SUFNZ0JYWnFRUUowUWJqU2dJQUFhaWdDQUNFREN5QURSUTBCQ3dOQUlBTW9BZ1JCZUhFZ0Ftc2lCaUFFU1NFQUFrQWdBeWdDRUNJRkRRQWdBMEVVYWlnQ0FDRUZDeUFHSUFRZ0FCc2hCQ0FESUFnZ0FCc2hDQ0FGSVFNZ0JRMEFDd3NnQ0VVTkFDQUVRUUFvQXBEUWdJQUFJQUpyVHcwQUlBZ29BaGdoQ3dKQUlBZ29BZ3dpQUNBSVJnMEFJQWdvQWdnaUEwRUFLQUtZMElDQUFFa2FJQUFnQXpZQ0NDQURJQUEyQWd3TUNRc0NRQ0FJUVJScUlnVW9BZ0FpQXcwQUlBZ29BaEFpQTBVTkF5QUlRUkJxSVFVTEEwQWdCU0VHSUFNaUFFRVVhaUlGS0FJQUlnTU5BQ0FBUVJCcUlRVWdBQ2dDRUNJRERRQUxJQVpCQURZQ0FBd0lDd0pBUVFBb0FwRFFnSUFBSWdNZ0Fra05BRUVBS0FLYzBJQ0FBQ0VFQWtBQ1FDQURJQUpySWdWQkVFa05BQ0FFSUFKcUlnQWdCVUVCY2pZQ0JFRUFJQVUyQXBEUWdJQUFRUUFnQURZQ25OQ0FnQUFnQkNBRGFpQUZOZ0lBSUFRZ0FrRURjallDQkF3QkN5QUVJQU5CQTNJMkFnUWdCQ0FEYWlJRElBTW9BZ1JCQVhJMkFnUkJBRUVBTmdLYzBJQ0FBRUVBUVFBMkFwRFFnSUFBQ3lBRVFRaHFJUU1NQ2dzQ1FFRUFLQUtVMElDQUFDSUFJQUpORFFCQkFDZ0NvTkNBZ0FBaUF5QUNhaUlFSUFBZ0Ftc2lCVUVCY2pZQ0JFRUFJQVUyQXBUUWdJQUFRUUFnQkRZQ29OQ0FnQUFnQXlBQ1FRTnlOZ0lFSUFOQkNHb2hBd3dLQ3dKQUFrQkJBQ2dDNE5PQWdBQkZEUUJCQUNnQzZOT0FnQUFoQkF3QkMwRUFRbjgzQXV6VGdJQUFRUUJDZ0lDRWdJQ0F3QUEzQXVUVGdJQUFRUUFnQVVFTWFrRndjVUhZcXRXcUJYTTJBdURUZ0lBQVFRQkJBRFlDOU5PQWdBQkJBRUVBTmdMRTA0Q0FBRUdBZ0FRaEJBdEJBQ0VEQWtBZ0JDQUNRY2NBYWlJSGFpSUdRUUFnQkdzaUMzRWlDQ0FDU3cwQVFRQkJNRFlDK05PQWdBQU1DZ3NDUUVFQUtBTEEwNENBQUNJRFJRMEFBa0JCQUNnQ3VOT0FnQUFpQkNBSWFpSUZJQVJORFFBZ0JTQURUUTBCQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdLQzBFQUxRREUwNENBQUVFRWNRMEVBa0FDUUFKQVFRQW9BcURRZ0lBQUlnUkZEUUJCeU5PQWdBQWhBd05BQWtBZ0F5Z0NBQ0lGSUFSTERRQWdCU0FES0FJRWFpQUVTdzBEQ3lBREtBSUlJZ01OQUFzTFFRQVF5NENBZ0FBaUFFRi9SZzBGSUFnaEJnSkFRUUFvQXVUVGdJQUFJZ05CZjJvaUJDQUFjVVVOQUNBSUlBQnJJQVFnQUdwQkFDQURhM0ZxSVFZTElBWWdBazBOQlNBR1FmNy8vLzhIU3cwRkFrQkJBQ2dDd05PQWdBQWlBMFVOQUVFQUtBSzQwNENBQUNJRUlBWnFJZ1VnQkUwTkJpQUZJQU5MRFFZTElBWVF5NENBZ0FBaUF5QUFSdzBCREFjTElBWWdBR3NnQzNFaUJrSCsvLy8vQjBzTkJDQUdFTXVBZ0lBQUlnQWdBeWdDQUNBREtBSUVha1lOQXlBQUlRTUxBa0FnQTBGL1JnMEFJQUpCeUFCcUlBWk5EUUFDUUNBSElBWnJRUUFvQXVqVGdJQUFJZ1JxUVFBZ0JHdHhJZ1JCL3YvLy93ZE5EUUFnQXlFQURBY0xBa0FnQkJETGdJQ0FBRUYvUmcwQUlBUWdCbW9oQmlBRElRQU1Cd3RCQUNBR2F4RExnSUNBQUJvTUJBc2dBeUVBSUFOQmYwY05CUXdEQzBFQUlRZ01Cd3RCQUNFQURBVUxJQUJCZjBjTkFndEJBRUVBS0FMRTA0Q0FBRUVFY2pZQ3hOT0FnQUFMSUFoQi92Ly8vd2RMRFFFZ0NCRExnSUNBQUNFQVFRQVF5NENBZ0FBaEF5QUFRWDlHRFFFZ0EwRi9SZzBCSUFBZ0EwOE5BU0FESUFCcklnWWdBa0U0YWswTkFRdEJBRUVBS0FLNDA0Q0FBQ0FHYWlJRE5nSzQwNENBQUFKQUlBTkJBQ2dDdk5PQWdBQk5EUUJCQUNBRE5nSzgwNENBQUFzQ1FBSkFBa0FDUUVFQUtBS2cwSUNBQUNJRVJRMEFRY2pUZ0lBQUlRTURRQ0FBSUFNb0FnQWlCU0FES0FJRUlnaHFSZzBDSUFNb0FnZ2lBdzBBREFNTEN3SkFBa0JCQUNnQ21OQ0FnQUFpQTBVTkFDQUFJQU5QRFFFTFFRQWdBRFlDbU5DQWdBQUxRUUFoQTBFQUlBWTJBc3pUZ0lBQVFRQWdBRFlDeU5PQWdBQkJBRUYvTmdLbzBJQ0FBRUVBUVFBb0F1RFRnSUFBTmdLczBJQ0FBRUVBUVFBMkF0VFRnSUFBQTBBZ0EwSEUwSUNBQUdvZ0EwRzQwSUNBQUdvaUJEWUNBQ0FFSUFOQnNOQ0FnQUJxSWdVMkFnQWdBMEc4MElDQUFHb2dCVFlDQUNBRFFjelFnSUFBYWlBRFFjRFFnSUFBYWlJRk5nSUFJQVVnQkRZQ0FDQURRZFRRZ0lBQWFpQURRY2pRZ0lBQWFpSUVOZ0lBSUFRZ0JUWUNBQ0FEUWREUWdJQUFhaUFFTmdJQUlBTkJJR29pQTBHQUFrY05BQXNnQUVGNElBQnJRUTl4UVFBZ0FFRUlha0VQY1JzaUEyb2lCQ0FHUVVocUlnVWdBMnNpQTBFQmNqWUNCRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0FDQUZha0U0TmdJRURBSUxJQU10QUF4QkNIRU5BQ0FFSUFWSkRRQWdCQ0FBVHcwQUlBUkJlQ0FFYTBFUGNVRUFJQVJCQ0dwQkQzRWJJZ1ZxSWdCQkFDZ0NsTkNBZ0FBZ0Jtb2lDeUFGYXlJRlFRRnlOZ0lFSUFNZ0NDQUdhallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBVTJBcFRRZ0lBQVFRQWdBRFlDb05DQWdBQWdCQ0FMYWtFNE5nSUVEQUVMQWtBZ0FFRUFLQUtZMElDQUFDSUlUdzBBUVFBZ0FEWUNtTkNBZ0FBZ0FDRUlDeUFBSUFacUlRVkJ5Tk9BZ0FBaEF3SkFBa0FDUUFKQUFrQUNRQUpBQTBBZ0F5Z0NBQ0FGUmcwQklBTW9BZ2dpQXcwQURBSUxDeUFETFFBTVFRaHhSUTBCQzBISTA0Q0FBQ0VEQTBBQ1FDQURLQUlBSWdVZ0JFc05BQ0FGSUFNb0FnUnFJZ1VnQkVzTkF3c2dBeWdDQ0NFRERBQUxDeUFESUFBMkFnQWdBeUFES0FJRUlBWnFOZ0lFSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYmFpSUxJQUpCQTNJMkFnUWdCVUY0SUFWclFROXhRUUFnQlVFSWFrRVBjUnRxSWdZZ0N5QUNhaUlDYXlFREFrQWdCaUFFUncwQVFRQWdBallDb05DQWdBQkJBRUVBS0FLVTBJQ0FBQ0FEYWlJRE5nS1UwSUNBQUNBQ0lBTkJBWEkyQWdRTUF3c0NRQ0FHUVFBb0FwelFnSUFBUncwQVFRQWdBallDbk5DQWdBQkJBRUVBS0FLUTBJQ0FBQ0FEYWlJRE5nS1EwSUNBQUNBQ0lBTkJBWEkyQWdRZ0FpQURhaUFETmdJQURBTUxBa0FnQmlnQ0JDSUVRUU54UVFGSERRQWdCRUY0Y1NFSEFrQUNRQ0FFUWY4QlN3MEFJQVlvQWdnaUJTQUVRUU4ySWdoQkEzUkJzTkNBZ0FCcUlnQkdHZ0pBSUFZb0Fnd2lCQ0FGUncwQVFRQkJBQ2dDaU5DQWdBQkJmaUFJZDNFMkFvalFnSUFBREFJTElBUWdBRVlhSUFRZ0JUWUNDQ0FGSUFRMkFnd01BUXNnQmlnQ0dDRUpBa0FDUUNBR0tBSU1JZ0FnQmtZTkFDQUdLQUlJSWdRZ0NFa2FJQUFnQkRZQ0NDQUVJQUEyQWd3TUFRc0NRQ0FHUVJScUlnUW9BZ0FpQlEwQUlBWkJFR29pQkNnQ0FDSUZEUUJCQUNFQURBRUxBMEFnQkNFSUlBVWlBRUVVYWlJRUtBSUFJZ1VOQUNBQVFSQnFJUVFnQUNnQ0VDSUZEUUFMSUFoQkFEWUNBQXNnQ1VVTkFBSkFBa0FnQmlBR0tBSWNJZ1ZCQW5SQnVOS0FnQUJxSWdRb0FnQkhEUUFnQkNBQU5nSUFJQUFOQVVFQVFRQW9Bb3pRZ0lBQVFYNGdCWGR4TmdLTTBJQ0FBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBWkdHMm9nQURZQ0FDQUFSUTBCQ3lBQUlBazJBaGdDUUNBR0tBSVFJZ1JGRFFBZ0FDQUVOZ0lRSUFRZ0FEWUNHQXNnQmlnQ0ZDSUVSUTBBSUFCQkZHb2dCRFlDQUNBRUlBQTJBaGdMSUFjZ0Eyb2hBeUFHSUFkcUlnWW9BZ1FoQkFzZ0JpQUVRWDV4TmdJRUlBSWdBMm9nQXpZQ0FDQUNJQU5CQVhJMkFnUUNRQ0FEUWY4QlN3MEFJQU5CZUhGQnNOQ0FnQUJxSVFRQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBRFFRTjJkQ0lEY1EwQVFRQWdCU0FEY2pZQ2lOQ0FnQUFnQkNFRERBRUxJQVFvQWdnaEF3c2dBeUFDTmdJTUlBUWdBallDQ0NBQ0lBUTJBZ3dnQWlBRE5nSUlEQU1MUVI4aEJBSkFJQU5CLy8vL0Iwc05BQ0FEUVFoMklnUWdCRUdBL2o5cVFSQjJRUWh4SWdSMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnQWdBRUdBZ0E5cVFSQjJRUUp4SWdCMFFROTJJQVFnQlhJZ0FISnJJZ1JCQVhRZ0F5QUVRUlZxZGtFQmNYSkJIR29oQkFzZ0FpQUVOZ0ljSUFKQ0FEY0NFQ0FFUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlBRUVCSUFSMElnaHhEUUFnQlNBQ05nSUFRUUFnQUNBSWNqWUNqTkNBZ0FBZ0FpQUZOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01Bd3NnQTBFQVFSa2dCRUVCZG1zZ0JFRWZSaHQwSVFRZ0JTZ0NBQ0VBQTBBZ0FDSUZLQUlFUVhoeElBTkdEUUlnQkVFZGRpRUFJQVJCQVhRaEJDQUZJQUJCQkhGcVFSQnFJZ2dvQWdBaUFBMEFDeUFJSUFJMkFnQWdBaUFGTmdJWUlBSWdBallDRENBQ0lBSTJBZ2dNQWdzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQ3lBR1FVaHFJZ2dnQTJzaUEwRUJjallDQkNBQUlBaHFRVGcyQWdRZ0JDQUZRVGNnQld0QkQzRkJBQ0FGUVVscVFROXhHMnBCUVdvaUNDQUlJQVJCRUdwSkd5SUlRU00yQWdSQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQXMyQXFEUWdJQUFJQWhCRUdwQkFDa0MwTk9BZ0FBM0FnQWdDRUVBS1FMSTA0Q0FBRGNDQ0VFQUlBaEJDR28yQXREVGdJQUFRUUFnQmpZQ3pOT0FnQUJCQUNBQU5nTEkwNENBQUVFQVFRQTJBdFRUZ0lBQUlBaEJKR29oQXdOQUlBTkJCellDQUNBRFFRUnFJZ01nQlVrTkFBc2dDQ0FFUmcwRElBZ2dDQ2dDQkVGK2NUWUNCQ0FJSUFnZ0JHc2lBRFlDQUNBRUlBQkJBWEkyQWdRQ1FDQUFRZjhCU3cwQUlBQkJlSEZCc05DQWdBQnFJUU1DUUFKQVFRQW9Bb2pRZ0lBQUlnVkJBU0FBUVFOMmRDSUFjUTBBUVFBZ0JTQUFjallDaU5DQWdBQWdBeUVGREFFTElBTW9BZ2doQlFzZ0JTQUVOZ0lNSUFNZ0JEWUNDQ0FFSUFNMkFnd2dCQ0FGTmdJSURBUUxRUjhoQXdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdNZ0EwR0EvajlxUVJCMlFRaHhJZ04wSWdVZ0JVR0E0QjlxUVJCMlFRUnhJZ1YwSWdnZ0NFR0FnQTlxUVJCMlFRSnhJZ2gwUVE5MklBTWdCWElnQ0hKcklnTkJBWFFnQUNBRFFSVnFka0VCY1hKQkhHb2hBd3NnQkNBRE5nSWNJQVJDQURjQ0VDQURRUUowUWJqU2dJQUFhaUVGQWtCQkFDZ0NqTkNBZ0FBaUNFRUJJQU4wSWdaeERRQWdCU0FFTmdJQVFRQWdDQ0FHY2pZQ2pOQ0FnQUFnQkNBRk5nSVlJQVFnQkRZQ0NDQUVJQVEyQWd3TUJBc2dBRUVBUVJrZ0EwRUJkbXNnQTBFZlJodDBJUU1nQlNnQ0FDRUlBMEFnQ0NJRktBSUVRWGh4SUFCR0RRTWdBMEVkZGlFSUlBTkJBWFFoQXlBRklBaEJCSEZxUVJCcUlnWW9BZ0FpQ0EwQUN5QUdJQVEyQWdBZ0JDQUZOZ0lZSUFRZ0JEWUNEQ0FFSUFRMkFnZ01Bd3NnQlNnQ0NDSURJQUkyQWd3Z0JTQUNOZ0lJSUFKQkFEWUNHQ0FDSUFVMkFnd2dBaUFETmdJSUN5QUxRUWhxSVFNTUJRc2dCU2dDQ0NJRElBUTJBZ3dnQlNBRU5nSUlJQVJCQURZQ0dDQUVJQVUyQWd3Z0JDQUROZ0lJQzBFQUtBS1UwSUNBQUNJRElBSk5EUUJCQUNnQ29OQ0FnQUFpQkNBQ2FpSUZJQU1nQW1zaUEwRUJjallDQkVFQUlBTTJBcFRRZ0lBQVFRQWdCVFlDb05DQWdBQWdCQ0FDUVFOeU5nSUVJQVJCQ0dvaEF3d0RDMEVBSVFOQkFFRXdOZ0w0MDRDQUFBd0NDd0pBSUF0RkRRQUNRQUpBSUFnZ0NDZ0NIQ0lGUVFKMFFialNnSUFBYWlJREtBSUFSdzBBSUFNZ0FEWUNBQ0FBRFFGQkFDQUhRWDRnQlhkeElnYzJBb3pRZ0lBQURBSUxJQXRCRUVFVUlBc29BaEFnQ0VZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQ3pZQ0dBSkFJQWdvQWhBaUEwVU5BQ0FBSUFNMkFoQWdBeUFBTmdJWUN5QUlRUlJxS0FJQUlnTkZEUUFnQUVFVWFpQUROZ0lBSUFNZ0FEWUNHQXNDUUFKQUlBUkJEMHNOQUNBSUlBUWdBbW9pQTBFRGNqWUNCQ0FJSUFOcUlnTWdBeWdDQkVFQmNqWUNCQXdCQ3lBSUlBSnFJZ0FnQkVFQmNqWUNCQ0FJSUFKQkEzSTJBZ1FnQUNBRWFpQUVOZ0lBQWtBZ0JFSC9BVXNOQUNBRVFYaHhRYkRRZ0lBQWFpRURBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdCRUVEZG5RaUJIRU5BRUVBSUFVZ0JISTJBb2pRZ0lBQUlBTWhCQXdCQ3lBREtBSUlJUVFMSUFRZ0FEWUNEQ0FESUFBMkFnZ2dBQ0FETmdJTUlBQWdCRFlDQ0F3QkMwRWZJUU1DUUNBRVFmLy8vd2RMRFFBZ0JFRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lDSUFKQmdJQVBha0VRZGtFQ2NTSUNkRUVQZGlBRElBVnlJQUp5YXlJRFFRRjBJQVFnQTBFVmFuWkJBWEZ5UVJ4cUlRTUxJQUFnQXpZQ0hDQUFRZ0EzQWhBZ0EwRUNkRUc0MG9DQUFHb2hCUUpBSUFkQkFTQURkQ0lDY1EwQUlBVWdBRFlDQUVFQUlBY2dBbkkyQW96UWdJQUFJQUFnQlRZQ0dDQUFJQUEyQWdnZ0FDQUFOZ0lNREFFTElBUkJBRUVaSUFOQkFYWnJJQU5CSDBZYmRDRURJQVVvQWdBaEFnSkFBMEFnQWlJRktBSUVRWGh4SUFSR0RRRWdBMEVkZGlFQ0lBTkJBWFFoQXlBRklBSkJCSEZxUVJCcUlnWW9BZ0FpQWcwQUN5QUdJQUEyQWdBZ0FDQUZOZ0lZSUFBZ0FEWUNEQ0FBSUFBMkFnZ01BUXNnQlNnQ0NDSURJQUEyQWd3Z0JTQUFOZ0lJSUFCQkFEWUNHQ0FBSUFVMkFnd2dBQ0FETmdJSUN5QUlRUWhxSVFNTUFRc0NRQ0FLUlEwQUFrQUNRQ0FBSUFBb0Fod2lCVUVDZEVHNDBvQ0FBR29pQXlnQ0FFY05BQ0FESUFnMkFnQWdDQTBCUVFBZ0NVRitJQVYzY1RZQ2pOQ0FnQUFNQWdzZ0NrRVFRUlFnQ2lnQ0VDQUFSaHRxSUFnMkFnQWdDRVVOQVFzZ0NDQUtOZ0lZQWtBZ0FDZ0NFQ0lEUlEwQUlBZ2dBellDRUNBRElBZzJBaGdMSUFCQkZHb29BZ0FpQTBVTkFDQUlRUlJxSUFNMkFnQWdBeUFJTmdJWUN3SkFBa0FnQkVFUFN3MEFJQUFnQkNBQ2FpSURRUU55TmdJRUlBQWdBMm9pQXlBREtBSUVRUUZ5TmdJRURBRUxJQUFnQW1vaUJTQUVRUUZ5TmdJRUlBQWdBa0VEY2pZQ0JDQUZJQVJxSUFRMkFnQUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQXdKQUFrQkJBU0FIUVFOMmRDSUlJQVp4RFFCQkFDQUlJQVp5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQU0yQWd3Z0FpQUROZ0lJSUFNZ0FqWUNEQ0FESUFnMkFnZ0xRUUFnQlRZQ25OQ0FnQUJCQUNBRU5nS1EwSUNBQUFzZ0FFRUlhaUVEQ3lBQlFSQnFKSUNBZ0lBQUlBTUxDZ0FnQUJESmdJQ0FBQXZpRFFFSGZ3SkFJQUJGRFFBZ0FFRjRhaUlCSUFCQmZHb29BZ0FpQWtGNGNTSUFhaUVEQWtBZ0FrRUJjUTBBSUFKQkEzRkZEUUVnQVNBQktBSUFJZ0pySWdGQkFDZ0NtTkNBZ0FBaUJFa05BU0FDSUFCcUlRQUNRQ0FCUVFBb0FwelFnSUFBUmcwQUFrQWdBa0gvQVVzTkFDQUJLQUlJSWdRZ0FrRURkaUlGUVFOMFFiRFFnSUFBYWlJR1Job0NRQ0FCS0FJTUlnSWdCRWNOQUVFQVFRQW9Bb2pRZ0lBQVFYNGdCWGR4TmdLSTBJQ0FBQXdEQ3lBQ0lBWkdHaUFDSUFRMkFnZ2dCQ0FDTmdJTURBSUxJQUVvQWhnaEJ3SkFBa0FnQVNnQ0RDSUdJQUZHRFFBZ0FTZ0NDQ0lDSUFSSkdpQUdJQUkyQWdnZ0FpQUdOZ0lNREFFTEFrQWdBVUVVYWlJQ0tBSUFJZ1FOQUNBQlFSQnFJZ0lvQWdBaUJBMEFRUUFoQmd3QkN3TkFJQUloQlNBRUlnWkJGR29pQWlnQ0FDSUVEUUFnQmtFUWFpRUNJQVlvQWhBaUJBMEFDeUFGUVFBMkFnQUxJQWRGRFFFQ1FBSkFJQUVnQVNnQ0hDSUVRUUowUWJqU2dJQUFhaUlDS0FJQVJ3MEFJQUlnQmpZQ0FDQUdEUUZCQUVFQUtBS00wSUNBQUVGK0lBUjNjVFlDak5DQWdBQU1Bd3NnQjBFUVFSUWdCeWdDRUNBQlJodHFJQVkyQWdBZ0JrVU5BZ3NnQmlBSE5nSVlBa0FnQVNnQ0VDSUNSUTBBSUFZZ0FqWUNFQ0FDSUFZMkFoZ0xJQUVvQWhRaUFrVU5BU0FHUVJScUlBSTJBZ0FnQWlBR05nSVlEQUVMSUFNb0FnUWlBa0VEY1VFRFJ3MEFJQU1nQWtGK2NUWUNCRUVBSUFBMkFwRFFnSUFBSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRUEN5QUJJQU5QRFFBZ0F5Z0NCQ0lDUVFGeFJRMEFBa0FDUUNBQ1FRSnhEUUFDUUNBRFFRQW9BcURRZ0lBQVJ3MEFRUUFnQVRZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBQWFpSUFOZ0tVMElDQUFDQUJJQUJCQVhJMkFnUWdBVUVBS0FLYzBJQ0FBRWNOQTBFQVFRQTJBcERRZ0lBQVFRQkJBRFlDbk5DQWdBQVBDd0pBSUFOQkFDZ0NuTkNBZ0FCSERRQkJBQ0FCTmdLYzBJQ0FBRUVBUVFBb0FwRFFnSUFBSUFCcUlnQTJBcERRZ0lBQUlBRWdBRUVCY2pZQ0JDQUJJQUJxSUFBMkFnQVBDeUFDUVhoeElBQnFJUUFDUUFKQUlBSkIvd0ZMRFFBZ0F5Z0NDQ0lFSUFKQkEzWWlCVUVEZEVHdzBJQ0FBR29pQmtZYUFrQWdBeWdDRENJQ0lBUkhEUUJCQUVFQUtBS0kwSUNBQUVGK0lBVjNjVFlDaU5DQWdBQU1BZ3NnQWlBR1Job2dBaUFFTmdJSUlBUWdBallDREF3QkN5QURLQUlZSVFjQ1FBSkFJQU1vQWd3aUJpQURSZzBBSUFNb0FnZ2lBa0VBS0FLWTBJQ0FBRWthSUFZZ0FqWUNDQ0FDSUFZMkFnd01BUXNDUUNBRFFSUnFJZ0lvQWdBaUJBMEFJQU5CRUdvaUFpZ0NBQ0lFRFFCQkFDRUdEQUVMQTBBZ0FpRUZJQVFpQmtFVWFpSUNLQUlBSWdRTkFDQUdRUkJxSVFJZ0JpZ0NFQ0lFRFFBTElBVkJBRFlDQUFzZ0IwVU5BQUpBQWtBZ0F5QURLQUljSWdSQkFuUkJ1TktBZ0FCcUlnSW9BZ0JIRFFBZ0FpQUdOZ0lBSUFZTkFVRUFRUUFvQW96UWdJQUFRWDRnQkhkeE5nS00wSUNBQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQU5HRzJvZ0JqWUNBQ0FHUlEwQkN5QUdJQWMyQWhnQ1FDQURLQUlRSWdKRkRRQWdCaUFDTmdJUUlBSWdCallDR0FzZ0F5Z0NGQ0lDUlEwQUlBWkJGR29nQWpZQ0FDQUNJQVkyQWhnTElBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUWdBVUVBS0FLYzBJQ0FBRWNOQVVFQUlBQTJBcERRZ0lBQUR3c2dBeUFDUVg1eE5nSUVJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FMQWtBZ0FFSC9BVXNOQUNBQVFYaHhRYkRRZ0lBQWFpRUNBa0FDUUVFQUtBS0kwSUNBQUNJRVFRRWdBRUVEZG5RaUFIRU5BRUVBSUFRZ0FISTJBb2pRZ0lBQUlBSWhBQXdCQ3lBQ0tBSUlJUUFMSUFBZ0FUWUNEQ0FDSUFFMkFnZ2dBU0FDTmdJTUlBRWdBRFlDQ0E4TFFSOGhBZ0pBSUFCQi8vLy9CMHNOQUNBQVFRaDJJZ0lnQWtHQS9qOXFRUkIyUVFoeElnSjBJZ1FnQkVHQTRCOXFRUkIyUVFSeElnUjBJZ1lnQmtHQWdBOXFRUkIyUVFKeElnWjBRUTkySUFJZ0JISWdCbkpySWdKQkFYUWdBQ0FDUVJWcWRrRUJjWEpCSEdvaEFnc2dBU0FDTmdJY0lBRkNBRGNDRUNBQ1FRSjBRYmpTZ0lBQWFpRUVBa0FDUUVFQUtBS00wSUNBQUNJR1FRRWdBblFpQTNFTkFDQUVJQUUyQWdCQkFDQUdJQU55TmdLTTBJQ0FBQ0FCSUFRMkFoZ2dBU0FCTmdJSUlBRWdBVFlDREF3QkN5QUFRUUJCR1NBQ1FRRjJheUFDUVI5R0czUWhBaUFFS0FJQUlRWUNRQU5BSUFZaUJDZ0NCRUY0Y1NBQVJnMEJJQUpCSFhZaEJpQUNRUUYwSVFJZ0JDQUdRUVJ4YWtFUWFpSURLQUlBSWdZTkFBc2dBeUFCTmdJQUlBRWdCRFlDR0NBQklBRTJBZ3dnQVNBQk5nSUlEQUVMSUFRb0FnZ2lBQ0FCTmdJTUlBUWdBVFlDQ0NBQlFRQTJBaGdnQVNBRU5nSU1JQUVnQURZQ0NBdEJBRUVBS0FLbzBJQ0FBRUYvYWlJQlFYOGdBUnMyQXFqUWdJQUFDd3NFQUFBQUMwNEFBa0FnQUEwQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJmMHdOQUFKQUlBQkJFSFpBQUNJQVFYOUhEUUJCQUVFd05nTDQwNENBQUVGL0R3c2dBRUVRZEE4TEVNcUFnSUFBQUF2eUFnSURmd0YrQWtBZ0FrVU5BQ0FBSUFFNkFBQWdBaUFBYWlJRFFYOXFJQUU2QUFBZ0FrRURTUTBBSUFBZ0FUb0FBaUFBSUFFNkFBRWdBMEY5YWlBQk9nQUFJQU5CZm1vZ0FUb0FBQ0FDUVFkSkRRQWdBQ0FCT2dBRElBTkJmR29nQVRvQUFDQUNRUWxKRFFBZ0FFRUFJQUJyUVFOeElnUnFJZ01nQVVIL0FYRkJnWUtFQ0d3aUFUWUNBQ0FESUFJZ0JHdEJmSEVpQkdvaUFrRjhhaUFCTmdJQUlBUkJDVWtOQUNBRElBRTJBZ2dnQXlBQk5nSUVJQUpCZUdvZ0FUWUNBQ0FDUVhScUlBRTJBZ0FnQkVFWlNRMEFJQU1nQVRZQ0dDQURJQUUyQWhRZ0F5QUJOZ0lRSUFNZ0FUWUNEQ0FDUVhCcUlBRTJBZ0FnQWtGc2FpQUJOZ0lBSUFKQmFHb2dBVFlDQUNBQ1FXUnFJQUUyQWdBZ0JDQURRUVJ4UVJoeUlnVnJJZ0pCSUVrTkFDQUJyVUtCZ0lDQUVINGhCaUFESUFWcUlRRURRQ0FCSUFZM0F4Z2dBU0FHTndNUUlBRWdCamNEQ0NBQklBWTNBd0FnQVVFZ2FpRUJJQUpCWUdvaUFrRWZTdzBBQ3dzZ0FBc0xqa2dCQUVHQUNBdUdTQUVBQUFBQ0FBQUFBd0FBQUFBQUFBQUFBQUFBQkFBQUFBVUFBQUFBQUFBQUFBQUFBQVlBQUFBSEFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnTUNBZ0lDQWdBQUFnSUFBZ0lBQWdJQ0FnSUNBZ0lDQWdBRUFBQUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FBQUFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBSUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUlBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQnNiM05sWldWd0xXRnNhWFpsQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUFCQVFFQkFRQUFBUUVBQVFFQUFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFHVmpkR2x2Ym1WdWRDMXNaVzVuZEdodmJuSnZlSGt0WTI5dWJtVmpkR2x2YmdBQUFBQUFBQUFBQUFBQUFBQUFBSEpoYm5ObVpYSXRaVzVqYjJScGJtZHdaM0poWkdVTkNnMEtEUXBUVFEwS0RRcFVWRkF2UTBVdlZGTlFMd0FBQUFBQUFBQUFBQUFBQUFFQ0FBRURBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUJBZ0FCQXdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQkFRVUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQVFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBQUJBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQXdRQUFBUUVCQVFFQkFRRUJBUUVCUVFFQkFRRUJBUUVCQVFFQkFBRUFBWUhCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFnQUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQWdBQUFBQUNBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QUFBQUFBQUFNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRTVQVlU1RFJVVkRTMDlWVkU1RlExUkZWRVZEVWtsQ1JVeFZVMGhGVkVWQlJGTkZRVkpEU0ZKSFJVTlVTVlpKVkZsTVJVNUVRVkpXUlU5VVNVWlpVRlJKVDA1VFEwaFRSVUZaVTFSQlZFTklSMFZQVWtSSlVrVkRWRTlTVkZKRFNGQkJVa0ZOUlZSRlVsVlNRMFZDVTBOU1NVSkZRVkpFVDFkT1FVTkZTVTVFVGt0RFMxVkNVME5TU1VKRlNGUlVVQzlCUkZSUUx3PT0nXG4iLCAiLy8gQHRzLWNoZWNrXG5cbid1c2Ugc3RyaWN0J1xuXG4vKiBnbG9iYWwgV2ViQXNzZW1ibHkgKi9cblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IG5ldCA9IHJlcXVpcmUoJ25ldCcpXG5jb25zdCBodHRwID0gcmVxdWlyZSgnaHR0cCcpXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IHRpbWVycyA9IHJlcXVpcmUoJy4vdGltZXJzJylcbmNvbnN0IFJlcXVlc3QgPSByZXF1aXJlKCcuL2NvcmUvcmVxdWVzdCcpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvcixcbiAgSGVhZGVyc1RpbWVvdXRFcnJvcixcbiAgSGVhZGVyc092ZXJmbG93RXJyb3IsXG4gIFNvY2tldEVycm9yLFxuICBJbmZvcm1hdGlvbmFsRXJyb3IsXG4gIEJvZHlUaW1lb3V0RXJyb3IsXG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcixcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuY29uc3Qge1xuICBrVXJsLFxuICBrUmVzZXQsXG4gIGtTZXJ2ZXJOYW1lLFxuICBrQ2xpZW50LFxuICBrQnVzeSxcbiAga1BhcnNlcixcbiAga0Nvbm5lY3QsXG4gIGtCbG9ja2luZyxcbiAga1Jlc3VtaW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrV3JpdGluZyxcbiAga1F1ZXVlLFxuICBrQ29ubmVjdGVkLFxuICBrQ29ubmVjdGluZyxcbiAga05lZWREcmFpbixcbiAga05vUmVmLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQsXG4gIGtIb3N0SGVhZGVyLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1BpcGVsaW5pbmcsXG4gIGtTb2NrZXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWUsXG4gIGtNYXhIZWFkZXJzU2l6ZSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICBrSGVhZGVyc1RpbWVvdXQsXG4gIGtCb2R5VGltZW91dCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtDb25uZWN0b3IsXG4gIGtNYXhSZWRpcmVjdGlvbnMsXG4gIGtNYXhSZXF1ZXN0cyxcbiAga0NvdW50ZXIsXG4gIGtDbG9zZSxcbiAga0Rlc3Ryb3ksXG4gIGtEaXNwYXRjaCxcbiAga0ludGVyY2VwdG9ycyxcbiAga0xvY2FsQWRkcmVzcyxcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga0hUVFBDb25uVmVyc2lvbixcbiAgLy8gSFRUUDJcbiAga0hvc3QsXG4gIGtIVFRQMlNlc3Npb24sXG4gIGtIVFRQMlNlc3Npb25TdGF0ZSxcbiAga0hUVFAyQnVpbGRSZXF1ZXN0LFxuICBrSFRUUDJDb3B5SGVhZGVycyxcbiAga0hUVFAxQnVpbGRSZXF1ZXN0XG59ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnaHR0cDInKX0gKi9cbmxldCBodHRwMlxudHJ5IHtcbiAgaHR0cDIgPSByZXF1aXJlKCdodHRwMicpXG59IGNhdGNoIHtcbiAgLy8gQHRzLWlnbm9yZVxuICBodHRwMiA9IHsgY29uc3RhbnRzOiB7fSB9XG59XG5cbmNvbnN0IHtcbiAgY29uc3RhbnRzOiB7XG4gICAgSFRUUDJfSEVBREVSX0FVVEhPUklUWSxcbiAgICBIVFRQMl9IRUFERVJfTUVUSE9ELFxuICAgIEhUVFAyX0hFQURFUl9QQVRILFxuICAgIEhUVFAyX0hFQURFUl9TQ0hFTUUsXG4gICAgSFRUUDJfSEVBREVSX0NPTlRFTlRfTEVOR1RILFxuICAgIEhUVFAyX0hFQURFUl9FWFBFQ1QsXG4gICAgSFRUUDJfSEVBREVSX1NUQVRVU1xuICB9XG59ID0gaHR0cDJcblxuLy8gRXhwZXJpbWVudGFsXG5sZXQgaDJFeHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXVxuXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgna0Nsb3NlZFJlc29sdmUnKVxuXG5jb25zdCBjaGFubmVscyA9IHt9XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5zZW5kSGVhZGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OnNlbmRIZWFkZXJzJylcbiAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdCA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmJlZm9yZUNvbm5lY3QnKVxuICBjaGFubmVscy5jb25uZWN0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0RXJyb3InKVxuICBjaGFubmVscy5jb25uZWN0ZWQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpjb25uZWN0ZWQnKVxufSBjYXRjaCB7XG4gIGNoYW5uZWxzLnNlbmRIZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5iZWZvcmVDb25uZWN0ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5jb25uZWN0RXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmNvbm5lY3RlZCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbn1cblxuLyoqXG4gKiBAdHlwZSB7aW1wb3J0KCcuLi90eXBlcy9jbGllbnQnKS5kZWZhdWx0fVxuICovXG5jbGFzcyBDbGllbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIC8qKlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ3xVUkx9IHVybFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vdHlwZXMvY2xpZW50JykuQ2xpZW50Lk9wdGlvbnN9IG9wdGlvbnNcbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIHtcbiAgICBpbnRlcmNlcHRvcnMsXG4gICAgbWF4SGVhZGVyU2l6ZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBzb2NrZXRUaW1lb3V0LFxuICAgIHJlcXVlc3RUaW1lb3V0LFxuICAgIGNvbm5lY3RUaW1lb3V0LFxuICAgIGJvZHlUaW1lb3V0LFxuICAgIGlkbGVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZSxcbiAgICBrZWVwQWxpdmVUaW1lb3V0LFxuICAgIG1heEtlZXBBbGl2ZVRpbWVvdXQsXG4gICAga2VlcEFsaXZlTWF4VGltZW91dCxcbiAgICBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICAgIHNvY2tldFBhdGgsXG4gICAgcGlwZWxpbmluZyxcbiAgICB0bHMsXG4gICAgc3RyaWN0Q29udGVudExlbmd0aCxcbiAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICBtYXhSZWRpcmVjdGlvbnMsXG4gICAgY29ubmVjdCxcbiAgICBtYXhSZXF1ZXN0c1BlckNsaWVudCxcbiAgICBsb2NhbEFkZHJlc3MsXG4gICAgbWF4UmVzcG9uc2VTaXplLFxuICAgIGF1dG9TZWxlY3RGYW1pbHksXG4gICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0LFxuICAgIC8vIGgyXG4gICAgYWxsb3dIMixcbiAgICBtYXhDb25jdXJyZW50U3RyZWFtc1xuICB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAoa2VlcEFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQga2VlcEFsaXZlLCB1c2UgcGlwZWxpbmluZz0wIGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgc29ja2V0VGltZW91dCwgdXNlIGhlYWRlcnNUaW1lb3V0ICYgYm9keVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3RUaW1lb3V0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgcmVxdWVzdFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChpZGxlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGlkbGVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlVGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4S2VlcEFsaXZlVGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIG1heEtlZXBBbGl2ZVRpbWVvdXQsIHVzZSBrZWVwQWxpdmVNYXhUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChtYXhIZWFkZXJTaXplICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShtYXhIZWFkZXJTaXplKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1heEhlYWRlclNpemUnKVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRQYXRoICE9IG51bGwgJiYgdHlwZW9mIHNvY2tldFBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgc29ja2V0UGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3RUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoY29ubmVjdFRpbWVvdXQpIHx8IGNvbm5lY3RUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb25uZWN0VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0KSB8fCBrZWVwQWxpdmVUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZU1heFRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVNYXhUaW1lb3V0KSB8fCBrZWVwQWxpdmVNYXhUaW1lb3V0IDw9IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlTWF4VGltZW91dCcpXG4gICAgfVxuXG4gICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgIT0gbnVsbCAmJiAhTnVtYmVyLmlzRmluaXRlKGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCcpXG4gICAgfVxuXG4gICAgaWYgKGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnNUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZWRpcmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKG1heFJlcXVlc3RzUGVyQ2xpZW50ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlcXVlc3RzUGVyQ2xpZW50KSB8fCBtYXhSZXF1ZXN0c1BlckNsaWVudCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlcXVlc3RzUGVyQ2xpZW50IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChsb2NhbEFkZHJlc3MgIT0gbnVsbCAmJiAodHlwZW9mIGxvY2FsQWRkcmVzcyAhPT0gJ3N0cmluZycgfHwgbmV0LmlzSVAobG9jYWxBZGRyZXNzKSA9PT0gMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbG9jYWxBZGRyZXNzIG11c3QgYmUgdmFsaWQgc3RyaW5nIElQIGFkZHJlc3MnKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXNwb25zZVNpemUgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVzcG9uc2VTaXplKSB8fCBtYXhSZXNwb25zZVNpemUgPCAtMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVzcG9uc2VTaXplIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCAhPSBudWxsICYmXG4gICAgICAoIU51bWJlci5pc0ludGVnZXIoYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0KSB8fCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgPCAtMSlcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIC8vIGgyXG4gICAgaWYgKGFsbG93SDIgIT0gbnVsbCAmJiB0eXBlb2YgYWxsb3dIMiAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2FsbG93SDIgbXVzdCBiZSBhIHZhbGlkIGJvb2xlYW4gdmFsdWUnKVxuICAgIH1cblxuICAgIGlmIChtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsICYmICh0eXBlb2YgbWF4Q29uY3VycmVudFN0cmVhbXMgIT09ICdudW1iZXInIHx8IG1heENvbmN1cnJlbnRTdHJlYW1zIDwgMSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q29uY3VycmVudFN0cmVhbXMgbXVzdCBiZSBhIHBvc3NpdGl2ZSBpbnRlZ2VyLCBncmVhdGVyIHRoYW4gMCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBpbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3JzLkNsaWVudCAmJiBBcnJheS5pc0FycmF5KGludGVyY2VwdG9ycy5DbGllbnQpXG4gICAgICA/IGludGVyY2VwdG9ycy5DbGllbnRcbiAgICAgIDogW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG4gICAgdGhpc1trVXJsXSA9IHV0aWwucGFyc2VPcmlnaW4odXJsKVxuICAgIHRoaXNba0Nvbm5lY3Rvcl0gPSBjb25uZWN0XG4gICAgdGhpc1trU29ja2V0XSA9IG51bGxcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHBpcGVsaW5pbmcgIT0gbnVsbCA/IHBpcGVsaW5pbmcgOiAxXG4gICAgdGhpc1trTWF4SGVhZGVyc1NpemVdID0gbWF4SGVhZGVyU2l6ZSB8fCBodHRwLm1heEhlYWRlclNpemVcbiAgICB0aGlzW2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF0gPSBrZWVwQWxpdmVUaW1lb3V0ID09IG51bGwgPyA0ZTMgOiBrZWVwQWxpdmVUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlTWF4VGltZW91dF0gPSBrZWVwQWxpdmVNYXhUaW1lb3V0ID09IG51bGwgPyA2MDBlMyA6IGtlZXBBbGl2ZU1heFRpbWVvdXRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSA9IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQgPT0gbnVsbCA/IDFlMyA6IGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGRcbiAgICB0aGlzW2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgdGhpc1trU2VydmVyTmFtZV0gPSBudWxsXG4gICAgdGhpc1trTG9jYWxBZGRyZXNzXSA9IGxvY2FsQWRkcmVzcyAhPSBudWxsID8gbG9jYWxBZGRyZXNzIDogbnVsbFxuICAgIHRoaXNba1Jlc3VtaW5nXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trTmVlZERyYWluXSA9IDAgLy8gMCwgaWRsZSwgMSwgc2NoZWR1bGVkLCAyIHJlc3VtaW5nXG4gICAgdGhpc1trSG9zdEhlYWRlcl0gPSBgaG9zdDogJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9XFxyXFxuYFxuICAgIHRoaXNba0JvZHlUaW1lb3V0XSA9IGJvZHlUaW1lb3V0ICE9IG51bGwgPyBib2R5VGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trSGVhZGVyc1RpbWVvdXRdID0gaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCA/IGhlYWRlcnNUaW1lb3V0IDogMzAwZTNcbiAgICB0aGlzW2tTdHJpY3RDb250ZW50TGVuZ3RoXSA9IHN0cmljdENvbnRlbnRMZW5ndGggPT0gbnVsbCA/IHRydWUgOiBzdHJpY3RDb250ZW50TGVuZ3RoXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba01heFJlcXVlc3RzXSA9IG1heFJlcXVlc3RzUGVyQ2xpZW50XG4gICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgdGhpc1trTWF4UmVzcG9uc2VTaXplXSA9IG1heFJlc3BvbnNlU2l6ZSA+IC0xID8gbWF4UmVzcG9uc2VTaXplIDogLTFcbiAgICB0aGlzW2tIVFRQQ29ublZlcnNpb25dID0gJ2gxJ1xuXG4gICAgLy8gSFRUUC8yXG4gICAgdGhpc1trSFRUUDJTZXNzaW9uXSA9IG51bGxcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25TdGF0ZV0gPSAhYWxsb3dIMlxuICAgICAgPyBudWxsXG4gICAgICA6IHtcbiAgICAgICAgLy8gc3RyZWFtczogbnVsbCwgLy8gRml4ZWQgcXVldWUgb2Ygc3RyZWFtcyAtIEZvciBmdXR1cmUgc3VwcG9ydCBvZiBgcHVzaGBcbiAgICAgICAgICBvcGVuU3RyZWFtczogMCwgLy8gS2VlcCB0cmFjayBvZiB0aGVtIHRvIGRlY2lkZSB3ZXRoZXIgb3Igbm90IHVucmVmIHRoZSBzZXNzaW9uXG4gICAgICAgICAgbWF4Q29uY3VycmVudFN0cmVhbXM6IG1heENvbmN1cnJlbnRTdHJlYW1zICE9IG51bGwgPyBtYXhDb25jdXJyZW50U3RyZWFtcyA6IDEwMCAvLyBNYXggcGVlckNvbmN1cnJlbnRTdHJlYW1zIGZvciBhIE5vZGUgaDIgc2VydmVyXG4gICAgICAgIH1cbiAgICB0aGlzW2tIb3N0XSA9IGAke3RoaXNba1VybF0uaG9zdG5hbWV9JHt0aGlzW2tVcmxdLnBvcnQgPyBgOiR7dGhpc1trVXJsXS5wb3J0fWAgOiAnJ31gXG5cbiAgICAvLyBrUXVldWUgaXMgYnVpbHQgdXAgb2YgMyBzZWN0aW9ucyBzZXBhcmF0ZWQgYnlcbiAgICAvLyB0aGUga1J1bm5pbmdJZHggYW5kIGtQZW5kaW5nSWR4IGluZGljZXMuXG4gICAgLy8gfCAgIGNvbXBsZXRlICAgfCAgIHJ1bm5pbmcgICB8ICAgcGVuZGluZyAgIHxcbiAgICAvLyAgICAgICAgICAgICAgICBeIGtSdW5uaW5nSWR4IF4ga1BlbmRpbmdJZHggXiBrUXVldWUubGVuZ3RoXG4gICAgLy8ga1J1bm5pbmdJZHggcG9pbnRzIHRvIHRoZSBmaXJzdCBydW5uaW5nIGVsZW1lbnQuXG4gICAgLy8ga1BlbmRpbmdJZHggcG9pbnRzIHRvIHRoZSBmaXJzdCBwZW5kaW5nIGVsZW1lbnQuXG4gICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgZmFzdCBxdWV1ZSB3aXRoIGFuIGFtb3J0aXplZFxuICAgIC8vIHRpbWUgb2YgTygxKS5cblxuICAgIHRoaXNba1F1ZXVlXSA9IFtdXG4gICAgdGhpc1trUnVubmluZ0lkeF0gPSAwXG4gICAgdGhpc1trUGVuZGluZ0lkeF0gPSAwXG4gIH1cblxuICBnZXQgcGlwZWxpbmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BpcGVsaW5pbmddXG4gIH1cblxuICBzZXQgcGlwZWxpbmluZyAodmFsdWUpIHtcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHZhbHVlXG4gICAgcmVzdW1lKHRoaXMsIHRydWUpXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tQZW5kaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tQZW5kaW5nSWR4XSAtIHRoaXNba1J1bm5pbmdJZHhdXG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1F1ZXVlXS5sZW5ndGggLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuICEhdGhpc1trU29ja2V0XSAmJiAhdGhpc1trQ29ubmVjdGluZ10gJiYgIXRoaXNba1NvY2tldF0uZGVzdHJveWVkXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgY29uc3Qgc29ja2V0ID0gdGhpc1trU29ja2V0XVxuICAgIHJldHVybiAoXG4gICAgICAoc29ja2V0ICYmIChzb2NrZXRba1Jlc2V0XSB8fCBzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrQmxvY2tpbmddKSkgfHxcbiAgICAgICh0aGlzW2tTaXplXSA+PSAodGhpc1trUGlwZWxpbmluZ10gfHwgMSkpIHx8XG4gICAgICB0aGlzW2tQZW5kaW5nXSA+IDBcbiAgICApXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmU6IG9ubHkgdXNlZCBmb3IgdGVzdCAqL1xuICBba0Nvbm5lY3RdIChjYikge1xuICAgIGNvbm5lY3QodGhpcylcbiAgICB0aGlzLm9uY2UoJ2Nvbm5lY3QnLCBjYilcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3Qgb3JpZ2luID0gb3B0cy5vcmlnaW4gfHwgdGhpc1trVXJsXS5vcmlnaW5cblxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzW2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInXG4gICAgICA/IFJlcXVlc3Rba0hUVFAyQnVpbGRSZXF1ZXN0XShvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gICAgICA6IFJlcXVlc3Rba0hUVFAxQnVpbGRSZXF1ZXN0XShvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICB0aGlzW2tRdWV1ZV0ucHVzaChyZXF1ZXN0KVxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10pIHtcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSBlbHNlIGlmICh1dGlsLmJvZHlMZW5ndGgocmVxdWVzdC5ib2R5KSA9PSBudWxsICYmIHV0aWwuaXNJdGVyYWJsZShyZXF1ZXN0LmJvZHkpKSB7XG4gICAgICAvLyBXYWl0IGEgdGljayBpbiBjYXNlIHN0cmVhbS9pdGVyYXRvciBpcyBlbmRlZCBpbiB0aGUgc2FtZSB0aWNrLlxuICAgICAgdGhpc1trUmVzdW1pbmddID0gMVxuICAgICAgcHJvY2Vzcy5uZXh0VGljayhyZXN1bWUsIHRoaXMpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VtZSh0aGlzLCB0cnVlKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tSZXN1bWluZ10gJiYgdGhpc1trTmVlZERyYWluXSAhPT0gMiAmJiB0aGlzW2tCdXN5XSkge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IDJcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXSA8IDJcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICAvLyBUT0RPOiBmb3IgSDIgd2UgbmVlZCB0byBncmFjZWZ1bGx5IGZsdXNoIHRoZSByZW1haW5pbmcgZW5xdWV1ZWRcbiAgICAvLyByZXF1ZXN0IGFuZCBjbG9zZSBlYWNoIHN0cmVhbS5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGlmICghdGhpc1trU2l6ZV0pIHtcbiAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzW2tRdWV1ZV0uc3BsaWNlKHRoaXNba1BlbmRpbmdJZHhdKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgICAgZXJyb3JSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cblxuICAgICAgY29uc3QgY2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzW2tDbG9zZWRSZXNvbHZlXSkge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IFNob3VsZCB3ZSBlcnJvciBoZXJlIHdpdGggQ2xpZW50RGVzdHJveWVkRXJyb3I/XG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0oKVxuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIHJlc29sdmUoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trSFRUUDJTZXNzaW9uXSAhPSBudWxsKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzW2tIVFRQMlNlc3Npb25dLCBlcnIpXG4gICAgICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gICAgICAgIHRoaXNba0hUVFAyU2Vzc2lvblN0YXRlXSA9IG51bGxcbiAgICAgIH1cblxuICAgICAgaWYgKCF0aGlzW2tTb2NrZXRdKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0ub24oJ2Nsb3NlJywgY2FsbGJhY2spLCBlcnIpXG4gICAgICB9XG5cbiAgICAgIHJlc3VtZSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25IdHRwMlNlc3Npb25FcnJvciAoZXJyKSB7XG4gIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gIHRoaXNba1NvY2tldF1ba0Vycm9yXSA9IGVyclxuXG4gIG9uRXJyb3IodGhpc1trQ2xpZW50XSwgZXJyKVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyRnJhbWVFcnJvciAodHlwZSwgY29kZSwgaWQpIHtcbiAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcImZyYW1lRXJyb3JcIiByZWNlaXZlZCAtIHR5cGUgJHt0eXBlfSwgY29kZSAke2NvZGV9YClcblxuICBpZiAoaWQgPT09IDApIHtcbiAgICB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gPSBlcnJcbiAgICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVuZCAoKSB7XG4gIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJykpXG4gIHV0aWwuZGVzdHJveSh0aGlzW2tTb2NrZXRdLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJykpXG59XG5cbmZ1bmN0aW9uIG9uSFRUUDJHb0F3YXkgKGNvZGUpIHtcbiAgY29uc3QgY2xpZW50ID0gdGhpc1trQ2xpZW50XVxuICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiR09BV0FZXCIgZnJhbWUgcmVjZWl2ZWQgd2l0aCBjb2RlICR7Y29kZX1gKVxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gIGNsaWVudFtrSFRUUDJTZXNzaW9uXSA9IG51bGxcblxuICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgIGFzc2VydCh0aGlzW2tQZW5kaW5nXSA9PT0gMClcblxuICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsXG4gICAgY2xpZW50W2tVcmxdLFxuICAgIFtjbGllbnRdLFxuICAgIGVyclxuICApXG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuY29uc3QgY29uc3RhbnRzID0gcmVxdWlyZSgnLi9sbGh0dHAvY29uc3RhbnRzJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3InKVxuY29uc3QgRU1QVFlfQlVGID0gQnVmZmVyLmFsbG9jKDApXG5cbmFzeW5jIGZ1bmN0aW9uIGxhenlsbGh0dHAgKCkge1xuICBjb25zdCBsbGh0dHBXYXNtRGF0YSA9IHByb2Nlc3MuZW52LkpFU1RfV09SS0VSX0lEID8gcmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwLXdhc20uanMnKSA6IHVuZGVmaW5lZFxuXG4gIGxldCBtb2RcbiAgdHJ5IHtcbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKEJ1ZmZlci5mcm9tKHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMnKSwgJ2Jhc2U2NCcpKVxuICB9IGNhdGNoIChlKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cblxuICAgIC8vIFdlIGNvdWxkIGNoZWNrIGlmIHRoZSBlcnJvciB3YXMgY2F1c2VkIGJ5IHRoZSBzaW1kIG9wdGlvbiBub3RcbiAgICAvLyBiZWluZyBlbmFibGVkLCBidXQgdGhlIG9jY3VycmluZyBvZiB0aGlzIG90aGVyIGVycm9yXG4gICAgLy8gKiBodHRwczovL2dpdGh1Yi5jb20vZW1zY3JpcHRlbi1jb3JlL2Vtc2NyaXB0ZW4vaXNzdWVzLzExNDk1XG4gICAgLy8gZ290IG1lIHRvIHJlbW92ZSB0aGF0IGNoZWNrIHRvIGF2b2lkIGJyZWFraW5nIE5vZGUgMTIuXG4gICAgbW9kID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShCdWZmZXIuZnJvbShsbGh0dHBXYXNtRGF0YSB8fCByZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpLCAnYmFzZTY0JykpXG4gIH1cblxuICByZXR1cm4gYXdhaXQgV2ViQXNzZW1ibHkuaW5zdGFudGlhdGUobW9kLCB7XG4gICAgZW52OiB7XG4gICAgICAvKiBlc2xpbnQtZGlzYWJsZSBjYW1lbGNhc2UgKi9cblxuICAgICAgd2FzbV9vbl91cmw6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgICAgIHJldHVybiAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9zdGF0dXM6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25TdGF0dXMobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9tZXNzYWdlX2JlZ2luOiAocCkgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uTWVzc2FnZUJlZ2luKCkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX2ZpZWxkOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyRmllbGQobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJfdmFsdWU6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJWYWx1ZShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcnNfY29tcGxldGU6IChwLCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlcnNDb21wbGV0ZShzdGF0dXNDb2RlLCBCb29sZWFuKHVwZ3JhZGUpLCBCb29sZWFuKHNob3VsZEtlZXBBbGl2ZSkpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2JvZHk6IChwLCBhdCwgbGVuKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgY29uc3Qgc3RhcnQgPSBhdCAtIGN1cnJlbnRCdWZmZXJQdHIgKyBjdXJyZW50QnVmZmVyUmVmLmJ5dGVPZmZzZXRcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25Cb2R5KG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZTogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpIHx8IDBcbiAgICAgIH1cblxuICAgICAgLyogZXNsaW50LWVuYWJsZSBjYW1lbGNhc2UgKi9cbiAgICB9XG4gIH0pXG59XG5cbmxldCBsbGh0dHBJbnN0YW5jZSA9IG51bGxcbmxldCBsbGh0dHBQcm9taXNlID0gbGF6eWxsaHR0cCgpXG5sbGh0dHBQcm9taXNlLmNhdGNoKClcblxubGV0IGN1cnJlbnRQYXJzZXIgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbmxldCBjdXJyZW50QnVmZmVyU2l6ZSA9IDBcbmxldCBjdXJyZW50QnVmZmVyUHRyID0gbnVsbFxuXG5jb25zdCBUSU1FT1VUX0hFQURFUlMgPSAxXG5jb25zdCBUSU1FT1VUX0JPRFkgPSAyXG5jb25zdCBUSU1FT1VUX0lETEUgPSAzXG5cbmNsYXNzIFBhcnNlciB7XG4gIGNvbnN0cnVjdG9yIChjbGllbnQsIHNvY2tldCwgeyBleHBvcnRzIH0pIHtcbiAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKGNsaWVudFtrTWF4SGVhZGVyc1NpemVdKSAmJiBjbGllbnRba01heEhlYWRlcnNTaXplXSA+IDApXG5cbiAgICB0aGlzLmxsaHR0cCA9IGV4cG9ydHNcbiAgICB0aGlzLnB0ciA9IHRoaXMubGxodHRwLmxsaHR0cF9hbGxvYyhjb25zdGFudHMuVFlQRS5SRVNQT05TRSlcbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudFxuICAgIHRoaXMuc29ja2V0ID0gc29ja2V0XG4gICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudGltZW91dFZhbHVlID0gbnVsbFxuICAgIHRoaXMudGltZW91dFR5cGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy51cGdyYWRlID0gZmFsc2VcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG4gICAgdGhpcy5oZWFkZXJzTWF4U2l6ZSA9IGNsaWVudFtrTWF4SGVhZGVyc1NpemVdXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSBmYWxzZVxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLnJlc3VtZSA9IHRoaXMucmVzdW1lLmJpbmQodGhpcylcblxuICAgIHRoaXMuYnl0ZXNSZWFkID0gMFxuXG4gICAgdGhpcy5rZWVwQWxpdmUgPSAnJ1xuICAgIHRoaXMuY29udGVudExlbmd0aCA9ICcnXG4gICAgdGhpcy5jb25uZWN0aW9uID0gJydcbiAgICB0aGlzLm1heFJlc3BvbnNlU2l6ZSA9IGNsaWVudFtrTWF4UmVzcG9uc2VTaXplXVxuICB9XG5cbiAgc2V0VGltZW91dCAodmFsdWUsIHR5cGUpIHtcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gdHlwZVxuICAgIGlmICh2YWx1ZSAhPT0gdGhpcy50aW1lb3V0VmFsdWUpIHtcbiAgICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVycy5zZXRUaW1lb3V0KG9uUGFyc2VyVGltZW91dCwgdmFsdWUsIHRoaXMpXG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQudW5yZWYpIHtcbiAgICAgICAgICB0aGlzLnRpbWVvdXQudW5yZWYoKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgICB9XG4gICAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IHZhbHVlXG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlc3VtZSAoKSB7XG4gICAgaWYgKHRoaXMuc29ja2V0LmRlc3Ryb3llZCB8fCAhdGhpcy5wYXVzZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLnB0ciAhPSBudWxsKVxuICAgIGFzc2VydChjdXJyZW50UGFyc2VyID09IG51bGwpXG5cbiAgICB0aGlzLmxsaHR0cC5sbGh0dHBfcmVzdW1lKHRoaXMucHRyKVxuXG4gICAgYXNzZXJ0KHRoaXMudGltZW91dFR5cGUgPT09IFRJTUVPVVRfQk9EWSlcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5leGVjdXRlKHRoaXMuc29ja2V0LnJlYWQoKSB8fCBFTVBUWV9CVUYpIC8vIEZsdXNoIHBhcnNlci5cbiAgICB0aGlzLnJlYWRNb3JlKClcbiAgfVxuXG4gIHJlYWRNb3JlICgpIHtcbiAgICB3aGlsZSAoIXRoaXMucGF1c2VkICYmIHRoaXMucHRyKSB7XG4gICAgICBjb25zdCBjaHVuayA9IHRoaXMuc29ja2V0LnJlYWQoKVxuICAgICAgaWYgKGNodW5rID09PSBudWxsKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICB0aGlzLmV4ZWN1dGUoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgZXhlY3V0ZSAoZGF0YSkge1xuICAgIGFzc2VydCh0aGlzLnB0ciAhPSBudWxsKVxuICAgIGFzc2VydChjdXJyZW50UGFyc2VyID09IG51bGwpXG4gICAgYXNzZXJ0KCF0aGlzLnBhdXNlZClcblxuICAgIGNvbnN0IHsgc29ja2V0LCBsbGh0dHAgfSA9IHRoaXNcblxuICAgIGlmIChkYXRhLmxlbmd0aCA+IGN1cnJlbnRCdWZmZXJTaXplKSB7XG4gICAgICBpZiAoY3VycmVudEJ1ZmZlclB0cikge1xuICAgICAgICBsbGh0dHAuZnJlZShjdXJyZW50QnVmZmVyUHRyKVxuICAgICAgfVxuICAgICAgY3VycmVudEJ1ZmZlclNpemUgPSBNYXRoLmNlaWwoZGF0YS5sZW5ndGggLyA0MDk2KSAqIDQwOTZcbiAgICAgIGN1cnJlbnRCdWZmZXJQdHIgPSBsbGh0dHAubWFsbG9jKGN1cnJlbnRCdWZmZXJTaXplKVxuICAgIH1cblxuICAgIG5ldyBVaW50OEFycmF5KGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBjdXJyZW50QnVmZmVyUHRyLCBjdXJyZW50QnVmZmVyU2l6ZSkuc2V0KGRhdGEpXG5cbiAgICAvLyBDYWxsIGBleGVjdXRlYCBvbiB0aGUgd2FzbSBwYXJzZXIuXG4gICAgLy8gV2UgcGFzcyB0aGUgYGxsaHR0cF9wYXJzZXJgIHBvaW50ZXIgYWRkcmVzcywgdGhlIHBvaW50ZXIgYWRkcmVzcyBvZiBidWZmZXIgdmlldyBkYXRhLFxuICAgIC8vIGFuZCBmaW5hbGx5IHRoZSBsZW5ndGggb2YgYnl0ZXMgdG8gcGFyc2UuXG4gICAgLy8gVGhlIHJldHVybiB2YWx1ZSBpcyBhbiBlcnJvciBjb2RlIG9yIGBjb25zdGFudHMuRVJST1IuT0tgLlxuICAgIHRyeSB7XG4gICAgICBsZXQgcmV0XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGN1cnJlbnRCdWZmZXJSZWYgPSBkYXRhXG4gICAgICAgIGN1cnJlbnRQYXJzZXIgPSB0aGlzXG4gICAgICAgIHJldCA9IGxsaHR0cC5sbGh0dHBfZXhlY3V0ZSh0aGlzLnB0ciwgY3VycmVudEJ1ZmZlclB0ciwgZGF0YS5sZW5ndGgpXG4gICAgICAgIC8qIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhdGNoICovXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgICAgICB0aHJvdyBlcnJcbiAgICAgIH0gZmluYWxseSB7XG4gICAgICAgIGN1cnJlbnRQYXJzZXIgPSBudWxsXG4gICAgICAgIGN1cnJlbnRCdWZmZXJSZWYgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IG9mZnNldCA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3Bvcyh0aGlzLnB0cikgLSBjdXJyZW50QnVmZmVyUHRyXG5cbiAgICAgIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRURfVVBHUkFERSkge1xuICAgICAgICB0aGlzLm9uVXBncmFkZShkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRCkge1xuICAgICAgICB0aGlzLnBhdXNlZCA9IHRydWVcbiAgICAgICAgc29ja2V0LnVuc2hpZnQoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfSBlbHNlIGlmIChyZXQgIT09IGNvbnN0YW50cy5FUlJPUi5PSykge1xuICAgICAgICBjb25zdCBwdHIgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9yZWFzb24odGhpcy5wdHIpXG4gICAgICAgIGxldCBtZXNzYWdlID0gJydcbiAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgICAgICBpZiAocHRyKSB7XG4gICAgICAgICAgY29uc3QgbGVuID0gbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIHB0cikuaW5kZXhPZigwKVxuICAgICAgICAgIG1lc3NhZ2UgPVxuICAgICAgICAgICAgJ1Jlc3BvbnNlIGRvZXMgbm90IG1hdGNoIHRoZSBIVFRQLzEuMSBwcm90b2NvbCAoJyArXG4gICAgICAgICAgICBCdWZmZXIuZnJvbShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyLCBsZW4pLnRvU3RyaW5nKCkgK1xuICAgICAgICAgICAgJyknXG4gICAgICAgIH1cbiAgICAgICAgdGhyb3cgbmV3IEhUVFBQYXJzZXJFcnJvcihtZXNzYWdlLCBjb25zdGFudHMuRVJST1JbcmV0XSwgZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIGFzc2VydCh0aGlzLnB0ciAhPSBudWxsKVxuICAgIGFzc2VydChjdXJyZW50UGFyc2VyID09IG51bGwpXG5cbiAgICB0aGlzLmxsaHR0cC5sbGh0dHBfZnJlZSh0aGlzLnB0cilcbiAgICB0aGlzLnB0ciA9IG51bGxcblxuICAgIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB9XG5cbiAgb25TdGF0dXMgKGJ1Zikge1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGJ1Zi50b1N0cmluZygpXG4gIH1cblxuICBvbk1lc3NhZ2VCZWdpbiAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRmllbGQgKGJ1Zikge1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDApIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIG9uSGVhZGVyVmFsdWUgKGJ1Zikge1xuICAgIGxldCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAxKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgICBsZW4gKz0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGhpcy5oZWFkZXJzW2xlbiAtIDJdXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDEwICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJykge1xuICAgICAgdGhpcy5rZWVwQWxpdmUgKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9IGVsc2UgaWYgKGtleS5sZW5ndGggPT09IDEwICYmIGtleS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkgPT09ICdjb25uZWN0aW9uJykge1xuICAgICAgdGhpcy5jb25uZWN0aW9uICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSB7XG4gICAgICB0aGlzLmNvbnRlbnRMZW5ndGggKz0gYnVmLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrSGVhZGVyKGJ1Zi5sZW5ndGgpXG4gIH1cblxuICB0cmFja0hlYWRlciAobGVuKSB7XG4gICAgdGhpcy5oZWFkZXJzU2l6ZSArPSBsZW5cbiAgICBpZiAodGhpcy5oZWFkZXJzU2l6ZSA+PSB0aGlzLmhlYWRlcnNNYXhTaXplKSB7XG4gICAgICB1dGlsLmRlc3Ryb3kodGhpcy5zb2NrZXQsIG5ldyBIZWFkZXJzT3ZlcmZsb3dFcnJvcigpKVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoaGVhZCkge1xuICAgIGNvbnN0IHsgdXBncmFkZSwgY2xpZW50LCBzb2NrZXQsIGhlYWRlcnMsIHN0YXR1c0NvZGUgfSA9IHRoaXNcblxuICAgIGFzc2VydCh1cGdyYWRlKVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQoIXNvY2tldC5kZXN0cm95ZWQpXG4gICAgYXNzZXJ0KHNvY2tldCA9PT0gY2xpZW50W2tTb2NrZXRdKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG4gICAgYXNzZXJ0KHJlcXVlc3QudXBncmFkZSB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzVGV4dCA9ICcnXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSBudWxsXG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgc29ja2V0LnVuc2hpZnQoaGVhZClcblxuICAgIHNvY2tldFtrUGFyc2VyXS5kZXN0cm95KClcbiAgICBzb2NrZXRba1BhcnNlcl0gPSBudWxsXG5cbiAgICBzb2NrZXRba0NsaWVudF0gPSBudWxsXG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG4gICAgc29ja2V0XG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcigncmVhZGFibGUnLCBvblNvY2tldFJlYWRhYmxlKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvblNvY2tldEVuZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCd1cGdyYWRlJykpXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgZXJyKVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH1cblxuICBvbkhlYWRlcnNDb21wbGV0ZSAoc3RhdHVzQ29kZSwgdXBncmFkZSwgc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzVGV4dCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydCghdGhpcy51cGdyYWRlKVxuICAgIGFzc2VydCh0aGlzLnN0YXR1c0NvZGUgPCAyMDApXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMTAwKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCByZXNwb25zZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIC8qIHRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHNlcnZlciBpcyBtaXNiZWhhdmluZyAqL1xuICAgIGlmICh1cGdyYWRlICYmICFyZXF1ZXN0LnVwZ3JhZGUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBhc3NlcnQuc3RyaWN0RXF1YWwodGhpcy50aW1lb3V0VHlwZSwgVElNRU9VVF9IRUFERVJTKVxuXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gKFxuICAgICAgc2hvdWxkS2VlcEFsaXZlIHx8XG4gICAgICAvLyBPdmVycmlkZSBsbGh0dHAgdmFsdWUgd2hpY2ggZG9lcyBub3QgYWxsb3cga2VlcEFsaXZlIGZvciBIRUFELlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgJiYgIXNvY2tldFtrUmVzZXRdICYmIHRoaXMuY29ubmVjdGlvbi50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZScpXG4gICAgKVxuXG4gICAgaWYgKHRoaXMuc3RhdHVzQ29kZSA+PSAyMDApIHtcbiAgICAgIGNvbnN0IGJvZHlUaW1lb3V0ID0gcmVxdWVzdC5ib2R5VGltZW91dCAhPSBudWxsXG4gICAgICAgID8gcmVxdWVzdC5ib2R5VGltZW91dFxuICAgICAgICA6IGNsaWVudFtrQm9keVRpbWVvdXRdXG4gICAgICB0aGlzLnNldFRpbWVvdXQoYm9keVRpbWVvdXQsIFRJTUVPVVRfQk9EWSlcbiAgICB9IGVsc2UgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAxKVxuICAgICAgdGhpcy51cGdyYWRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIDJcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLmhlYWRlcnMubGVuZ3RoICUgMiA9PT0gMClcbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuICAgIHRoaXMuaGVhZGVyc1NpemUgPSAwXG5cbiAgICBpZiAodGhpcy5zaG91bGRLZWVwQWxpdmUgJiYgY2xpZW50W2tQaXBlbGluaW5nXSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlVGltZW91dCA9IHRoaXMua2VlcEFsaXZlID8gdXRpbC5wYXJzZUtlZXBBbGl2ZVRpbWVvdXQodGhpcy5rZWVwQWxpdmUpIDogbnVsbFxuXG4gICAgICBpZiAoa2VlcEFsaXZlVGltZW91dCAhPSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHRpbWVvdXQgPSBNYXRoLm1pbihcbiAgICAgICAgICBrZWVwQWxpdmVUaW1lb3V0IC0gY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXSxcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZU1heFRpbWVvdXRdXG4gICAgICAgIClcbiAgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkge1xuICAgICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IHRpbWVvdXRcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdID0gY2xpZW50W2tLZWVwQWxpdmVEZWZhdWx0VGltZW91dF1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gU3RvcCBtb3JlIHJlcXVlc3RzIGZyb20gYmVpbmcgZGlzcGF0Y2hlZC5cbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IHBhdXNlID0gcmVxdWVzdC5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgdGhpcy5yZXN1bWUsIHN0YXR1c1RleHQpID09PSBmYWxzZVxuXG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVybiAxXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gICAgICByZXN1bWUoY2xpZW50KVxuICAgIH1cblxuICAgIHJldHVybiBwYXVzZSA/IGNvbnN0YW50cy5FUlJPUi5QQVVTRUQgOiAwXG4gIH1cblxuICBvbkJvZHkgKGJ1Zikge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIHN0YXR1c0NvZGUsIG1heFJlc3BvbnNlU2l6ZSB9ID0gdGhpc1xuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRoaXMudGltZW91dFR5cGUsIFRJTUVPVVRfQk9EWSlcbiAgICBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA+PSAyMDApXG5cbiAgICBpZiAobWF4UmVzcG9uc2VTaXplID4gLTEgJiYgdGhpcy5ieXRlc1JlYWQgKyBidWYubGVuZ3RoID4gbWF4UmVzcG9uc2VTaXplKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcigpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgKz0gYnVmLmxlbmd0aFxuXG4gICAgaWYgKHJlcXVlc3Qub25EYXRhKGJ1ZikgPT09IGZhbHNlKSB7XG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH1cbiAgfVxuXG4gIG9uTWVzc2FnZUNvbXBsZXRlICgpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCB1cGdyYWRlLCBoZWFkZXJzLCBjb250ZW50TGVuZ3RoLCBieXRlc1JlYWQsIHNob3VsZEtlZXBBbGl2ZSB9ID0gdGhpc1xuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQgJiYgKCFzdGF0dXNDb2RlIHx8IHNob3VsZEtlZXBBbGl2ZSkpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydChzdGF0dXNDb2RlID49IDEwMClcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuYnl0ZXNSZWFkID0gMFxuICAgIHRoaXMuY29udGVudExlbmd0aCA9ICcnXG4gICAgdGhpcy5rZWVwQWxpdmUgPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgYmUgaGFuZGxlZCBieSBsbGh0dHA/ICovXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29udGVudExlbmd0aCAmJiBieXRlc1JlYWQgIT09IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Db21wbGV0ZShoZWFkZXJzKVxuXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGlmIChzb2NrZXRba1dyaXRpbmddKSB7XG4gICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY2xpZW50W2tSdW5uaW5nXSwgMClcbiAgICAgIC8vIFJlc3BvbnNlIGNvbXBsZXRlZCBiZWZvcmUgcmVxdWVzdC5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoIXNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChzb2NrZXRba1Jlc2V0XSAmJiBjbGllbnRba1J1bm5pbmddID09PSAwKSB7XG4gICAgICAvLyBEZXN0cm95IHNvY2tldCBvbmNlIGFsbCByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGF0IHRoZSB0YWlsIG9mIHRoZSBwaXBlbGluZSBpcyB0aGUgb25lXG4gICAgICAvLyB0aGF0IHJlcXVlc3RlZCByZXNldCBhbmQgbm8gZnVydGhlciByZXF1ZXN0cyBzaG91bGRcbiAgICAgIC8vIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlbi5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSA9PT0gMSkge1xuICAgICAgLy8gV2UgbXVzdCB3YWl0IGEgZnVsbCBldmVudCBsb29wIGN5Y2xlIHRvIHJldXNlIHRoaXMgc29ja2V0IHRvIG1ha2Ugc3VyZVxuICAgICAgLy8gdGhhdCBub24tc3BlYyBjb21wbGlhbnQgc2VydmVycyBhcmUgbm90IGNsb3NpbmcgdGhlIGNvbm5lY3Rpb24gZXZlbiBpZiB0aGV5XG4gICAgICAvLyBzYWlkIHRoZXkgd29uJ3QuXG4gICAgICBzZXRJbW1lZGlhdGUocmVzdW1lLCBjbGllbnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VtZShjbGllbnQpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyVGltZW91dCAocGFyc2VyKSB7XG4gIGNvbnN0IHsgc29ja2V0LCB0aW1lb3V0VHlwZSwgY2xpZW50IH0gPSBwYXJzZXJcblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgIGlmICghc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXQud3JpdGFibGVOZWVkRHJhaW4gfHwgY2xpZW50W2tSdW5uaW5nXSA+IDEpIHtcbiAgICAgIGFzc2VydCghcGFyc2VyLnBhdXNlZCwgJ2Nhbm5vdCBiZSBwYXVzZWQgd2hpbGUgd2FpdGluZyBmb3IgaGVhZGVycycpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSGVhZGVyc1RpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKSB7XG4gICAgaWYgKCFwYXJzZXIucGF1c2VkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgQm9keVRpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9JRExFKSB7XG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDAgJiYgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdKVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NvY2tldCBpZGxlIHRpbWVvdXQnKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldFJlYWRhYmxlICgpIHtcbiAgY29uc3QgeyBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuICBpZiAocGFyc2VyKSB7XG4gICAgcGFyc2VyLnJlYWRNb3JlKClcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnIpIHtcbiAgY29uc3QgeyBba0NsaWVudF06IGNsaWVudCwgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcblxuICBhc3NlcnQoZXJyLmNvZGUgIT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJylcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dICE9PSAnaDInKSB7XG4gICAgLy8gT24gTWFjIE9TLCB3ZSBnZXQgYW4gRUNPTk5SRVNFVCBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBib2R5IHRvIGJlIGZvcndhcmRlZFxuICAgIC8vIHRvIHRoZSB1c2VyLlxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmb3IgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICB0aGlzW2tFcnJvcl0gPSBlcnJcblxuICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbn1cblxuZnVuY3Rpb24gb25FcnJvciAoY2xpZW50LCBlcnIpIHtcbiAgaWYgKFxuICAgIGNsaWVudFtrUnVubmluZ10gPT09IDAgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgJiZcbiAgICBlcnIuY29kZSAhPT0gJ1VORF9FUlJfU09DS0VUJ1xuICApIHtcbiAgICAvLyBFcnJvciBpcyBub3QgY2F1c2VkIGJ5IHJ1bm5pbmcgcmVxdWVzdCBhbmQgbm90IGEgcmVjb3ZlcmFibGVcbiAgICAvLyBzb2NrZXQgZXJyb3IuXG5cbiAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nSWR4XSA9PT0gY2xpZW50W2tSdW5uaW5nSWR4XSlcblxuICAgIGNvbnN0IHJlcXVlc3RzID0gY2xpZW50W2tRdWV1ZV0uc3BsaWNlKGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuICAgIGFzc2VydChjbGllbnRba1NpemVdID09PSAwKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0RW5kICgpIHtcbiAgY29uc3QgeyBba1BhcnNlcl06IHBhcnNlciwgW2tDbGllbnRdOiBjbGllbnQgfSA9IHRoaXNcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dICE9PSAnaDInKSB7XG4gICAgaWYgKHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmYXIgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH1cblxuICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzKSkpXG59XG5cbmZ1bmN0aW9uIG9uU29ja2V0Q2xvc2UgKCkge1xuICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50LCBba1BhcnNlcl06IHBhcnNlciB9ID0gdGhpc1xuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMScgJiYgcGFyc2VyKSB7XG4gICAgaWYgKCF0aGlzW2tFcnJvcl0gJiYgcGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICB9XG5cbiAgICB0aGlzW2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgIHRoaXNba1BhcnNlcl0gPSBudWxsXG4gIH1cblxuICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKCdjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG5cbiAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuXG4gIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG5cbiAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycpIHtcbiAgICAvLyBGYWlsIGhlYWQgb2YgcGlwZWxpbmUuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG5cbiAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdCAoY2xpZW50KSB7XG4gIGFzc2VydCghY2xpZW50W2tDb25uZWN0aW5nXSlcbiAgYXNzZXJ0KCFjbGllbnRba1NvY2tldF0pXG5cbiAgbGV0IHsgaG9zdCwgaG9zdG5hbWUsIHByb3RvY29sLCBwb3J0IH0gPSBjbGllbnRba1VybF1cblxuICAvLyBSZXNvbHZlIGlwdjZcbiAgaWYgKGhvc3RuYW1lWzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0bmFtZS5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIGNvbnN0IGlwID0gaG9zdG5hbWUuc3Vic3RyaW5nKDEsIGlkeClcblxuICAgIGFzc2VydChuZXQuaXNJUChpcCkpXG4gICAgaG9zdG5hbWUgPSBpcFxuICB9XG5cbiAgY2xpZW50W2tDb25uZWN0aW5nXSA9IHRydWVcblxuICBpZiAoY2hhbm5lbHMuYmVmb3JlQ29ubmVjdC5oYXNTdWJzY3JpYmVycykge1xuICAgIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QucHVibGlzaCh7XG4gICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgIH0sXG4gICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHNvY2tldCA9IGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNsaWVudFtrQ29ubmVjdG9yXSh7XG4gICAgICAgIGhvc3QsXG4gICAgICAgIGhvc3RuYW1lLFxuICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgcG9ydCxcbiAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgIH0sIChlcnIsIHNvY2tldCkgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXNvbHZlKHNvY2tldClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9KVxuXG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQub24oJ2Vycm9yJywgKCkgPT4ge30pLCBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgYXNzZXJ0KHNvY2tldClcblxuICAgIGNvbnN0IGlzSDIgPSBzb2NrZXQuYWxwblByb3RvY29sID09PSAnaDInXG4gICAgaWYgKGlzSDIpIHtcbiAgICAgIGlmICghaDJFeHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgICAgaDJFeHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ0gyIHN1cHBvcnQgaXMgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICAgIGNvZGU6ICdVTkRJQ0ktSDInXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHNlc3Npb24gPSBodHRwMi5jb25uZWN0KGNsaWVudFtrVXJsXSwge1xuICAgICAgICBjcmVhdGVDb25uZWN0aW9uOiAoKSA9PiBzb2NrZXQsXG4gICAgICAgIHBlZXJNYXhDb25jdXJyZW50U3RyZWFtczogY2xpZW50W2tIVFRQMlNlc3Npb25TdGF0ZV0ubWF4Q29uY3VycmVudFN0cmVhbXNcbiAgICAgIH0pXG5cbiAgICAgIGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9ICdoMidcbiAgICAgIHNlc3Npb25ba0NsaWVudF0gPSBjbGllbnRcbiAgICAgIHNlc3Npb25ba1NvY2tldF0gPSBzb2NrZXRcbiAgICAgIHNlc3Npb24ub24oJ2Vycm9yJywgb25IdHRwMlNlc3Npb25FcnJvcilcbiAgICAgIHNlc3Npb24ub24oJ2ZyYW1lRXJyb3InLCBvbkh0dHAyRnJhbWVFcnJvcilcbiAgICAgIHNlc3Npb24ub24oJ2VuZCcsIG9uSHR0cDJTZXNzaW9uRW5kKVxuICAgICAgc2Vzc2lvbi5vbignZ29hd2F5Jywgb25IVFRQMkdvQXdheSlcbiAgICAgIHNlc3Npb24ub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuXG4gICAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gICAgICBzb2NrZXRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghbGxodHRwSW5zdGFuY2UpIHtcbiAgICAgICAgbGxodHRwSW5zdGFuY2UgPSBhd2FpdCBsbGh0dHBQcm9taXNlXG4gICAgICAgIGxsaHR0cFByb21pc2UgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIHNvY2tldFtrTm9SZWZdID0gZmFsc2VcbiAgICAgIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuICAgICAgc29ja2V0W2tSZXNldF0gPSBmYWxzZVxuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgc29ja2V0W2tQYXJzZXJdID0gbmV3IFBhcnNlcihjbGllbnQsIHNvY2tldCwgbGxodHRwSW5zdGFuY2UpXG4gICAgfVxuXG4gICAgc29ja2V0W2tDb3VudGVyXSA9IDBcbiAgICBzb2NrZXRba01heFJlcXVlc3RzXSA9IGNsaWVudFtrTWF4UmVxdWVzdHNdXG4gICAgc29ja2V0W2tDbGllbnRdID0gY2xpZW50XG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICBzb2NrZXRcbiAgICAgIC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuICAgICAgLm9uKCdyZWFkYWJsZScsIG9uU29ja2V0UmVhZGFibGUpXG4gICAgICAub24oJ2VuZCcsIG9uU29ja2V0RW5kKVxuICAgICAgLm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBzb2NrZXRcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0ZWQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RlZC5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBzb2NrZXRcbiAgICAgIH0pXG4gICAgfVxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNsaWVudFtrQ29ubmVjdGluZ10gPSBmYWxzZVxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RFcnJvci5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdEVycm9yLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIGVycm9yOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGVyci5jb2RlID09PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuICAgICAgd2hpbGUgKGNsaWVudFtrUGVuZGluZ10gPiAwICYmIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dLnNlcnZlcm5hbWUgPT09IGNsaWVudFtrU2VydmVyTmFtZV0pIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF0rK11cbiAgICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvbkVycm9yKGNsaWVudCwgZXJyKVxuICAgIH1cblxuICAgIGNsaWVudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG4gIH1cblxuICByZXN1bWUoY2xpZW50KVxufVxuXG5mdW5jdGlvbiBlbWl0RHJhaW4gKGNsaWVudCkge1xuICBjbGllbnRba05lZWREcmFpbl0gPSAwXG4gIGNsaWVudC5lbWl0KCdkcmFpbicsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG59XG5cbmZ1bmN0aW9uIHJlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIGlmIChjbGllbnRba1Jlc3VtaW5nXSA9PT0gMikge1xuICAgIHJldHVyblxuICB9XG5cbiAgY2xpZW50W2tSZXN1bWluZ10gPSAyXG5cbiAgX3Jlc3VtZShjbGllbnQsIHN5bmMpXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMFxuXG4gIGlmIChjbGllbnRba1J1bm5pbmdJZHhdID4gMjU2KSB7XG4gICAgY2xpZW50W2tRdWV1ZV0uc3BsaWNlKDAsIGNsaWVudFtrUnVubmluZ0lkeF0pXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSAtPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gICAgY2xpZW50W2tSdW5uaW5nSWR4XSA9IDBcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzdW1lIChjbGllbnQsIHN5bmMpIHtcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDbG9zZWRSZXNvbHZlXSAmJiAhY2xpZW50W2tTaXplXSkge1xuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICBjbGllbnRba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgICBpZiAoc29ja2V0ICYmICFzb2NrZXQuZGVzdHJveWVkICYmIHNvY2tldC5hbHBuUHJvdG9jb2wgIT09ICdoMicpIHtcbiAgICAgIGlmIChjbGllbnRba1NpemVdID09PSAwKSB7XG4gICAgICAgIGlmICghc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnVucmVmKSB7XG4gICAgICAgICAgc29ja2V0LnVucmVmKClcbiAgICAgICAgICBzb2NrZXRba05vUmVmXSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzb2NrZXRba05vUmVmXSAmJiBzb2NrZXQucmVmKSB7XG4gICAgICAgIHNvY2tldC5yZWYoKVxuICAgICAgICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGlmIChjbGllbnRba1NpemVdID09PSAwKSB7XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSURMRSkge1xuICAgICAgICAgIHNvY2tldFtrUGFyc2VyXS5zZXRUaW1lb3V0KGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSwgVElNRU9VVF9JRExFKVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHNvY2tldFtrUGFyc2VyXS5zdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgICAgICAgIGNvbnN0IGhlYWRlcnNUaW1lb3V0ID0gcmVxdWVzdC5oZWFkZXJzVGltZW91dCAhPSBudWxsXG4gICAgICAgICAgICA/IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXRcbiAgICAgICAgICAgIDogY2xpZW50W2tIZWFkZXJzVGltZW91dF1cbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChoZWFkZXJzVGltZW91dCwgVElNRU9VVF9IRUFERVJTKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQnVzeV0pIHtcbiAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDJcbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrTmVlZERyYWluXSA9PT0gMikge1xuICAgICAgaWYgKHN5bmMpIHtcbiAgICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMVxuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGVtaXREcmFpbiwgY2xpZW50KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdERyYWluKGNsaWVudClcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUGVuZGluZ10gPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID49IChjbGllbnRba1BpcGVsaW5pbmddIHx8IDEpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV1cblxuICAgIGlmIChjbGllbnRba1VybF0ucHJvdG9jb2wgPT09ICdodHRwczonICYmIGNsaWVudFtrU2VydmVyTmFtZV0gIT09IHJlcXVlc3Quc2VydmVybmFtZSkge1xuICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBjbGllbnRba1NlcnZlck5hbWVdID0gcmVxdWVzdC5zZXJ2ZXJuYW1lXG5cbiAgICAgIGlmIChzb2NrZXQgJiYgc29ja2V0LnNlcnZlcm5hbWUgIT09IHJlcXVlc3Quc2VydmVybmFtZSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdzZXJ2ZXJuYW1lIGNoYW5nZWQnKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQ29ubmVjdGluZ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghc29ja2V0ICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0pIHtcbiAgICAgIGNvbm5lY3QoY2xpZW50KVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQgfHwgc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXRba1Jlc2V0XSB8fCBzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmICFyZXF1ZXN0LmlkZW1wb3RlbnQpIHtcbiAgICAgIC8vIE5vbi1pZGVtcG90ZW50IHJlcXVlc3QgY2Fubm90IGJlIHJldHJpZWQuXG4gICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykpIHtcbiAgICAgIC8vIERvbid0IGRpc3BhdGNoIGFuIHVwZ3JhZGUgdW50aWwgYWxsIHByZWNlZGluZyByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgIC8vIEEgbWlzYmVoYXZpbmcgc2VydmVyIG1pZ2h0IHVwZ3JhZGUgdGhlIGNvbm5lY3Rpb24gYmVmb3JlIGFsbCBwaXBlbGluZWRcbiAgICAgIC8vIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiB1dGlsLmJvZHlMZW5ndGgocmVxdWVzdC5ib2R5KSAhPT0gMCAmJlxuICAgICAgKHV0aWwuaXNTdHJlYW0ocmVxdWVzdC5ib2R5KSB8fCB1dGlsLmlzQXN5bmNJdGVyYWJsZShyZXF1ZXN0LmJvZHkpKSkge1xuICAgICAgLy8gUmVxdWVzdCB3aXRoIHN0cmVhbSBvciBpdGVyYXRvciBib2R5IGNhbiBlcnJvciB3aGlsZSBvdGhlciByZXF1ZXN0c1xuICAgICAgLy8gYXJlIGluZmxpZ2h0IGFuZCBpbmRpcmVjdGx5IGVycm9yIHRob3NlIGFzIHdlbGwuXG4gICAgICAvLyBFbnN1cmUgdGhpcyBkb2Vzbid0IGhhcHBlbiBieSB3YWl0aW5nIGZvciBpbmZsaWdodFxuICAgICAgLy8gdG8gY29tcGxldGUgYmVmb3JlIGRpc3BhdGNoaW5nLlxuXG4gICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHJldHJpZWQuXG4gICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAvLyBjb3VsZCBjYXVzZSBmYWlsdXJlLlxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0LmFib3J0ZWQgJiYgd3JpdGUoY2xpZW50LCByZXF1ZXN0KSkge1xuICAgICAgY2xpZW50W2tQZW5kaW5nSWR4XSsrXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1BlbmRpbmdJZHhdLCAxKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZSAoY2xpZW50LCByZXF1ZXN0KSB7XG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICB3cml0ZUgyKGNsaWVudCwgY2xpZW50W2tIVFRQMlNlc3Npb25dLCByZXF1ZXN0KVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBib2R5LCBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGhlYWRlcnMsIGJsb2NraW5nLCByZXNldCB9ID0gcmVxdWVzdFxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGNvbnN0IGJvZHlMZW5ndGggPSB1dGlsLmJvZHlMZW5ndGgoYm9keSlcblxuICBsZXQgY29udGVudExlbmd0aCA9IGJvZHlMZW5ndGhcblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwICYmICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBudWxsICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gY29udGVudExlbmd0aCkge1xuICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoKGVycikgPT4ge1xuICAgICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyIHx8IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ2Fib3J0ZWQnKSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAobWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL2lzc3Vlcy8yNThcbiAgICAvLyBDbG9zZSBhZnRlciBhIEhFQUQgcmVxdWVzdCB0byBpbnRlcm9wIHdpdGggbWlzYmVoYXZpbmcgc2VydmVyc1xuICAgIC8vIHRoYXQgbWF5IHNlbmQgYSBib2R5IGluIHRoZSByZXNwb25zZS5cblxuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKHVwZ3JhZGUgfHwgbWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAvLyBPbiBDT05ORUNUIG9yIHVwZ3JhZGUsIGJsb2NrIHBpcGVsaW5lIGZyb20gZGlzcGF0Y2hpbmcgZnVydGhlclxuICAgIC8vIHJlcXVlc3RzIG9uIHRoaXMgY29ubmVjdGlvbi5cblxuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKHJlc2V0ICE9IG51bGwpIHtcbiAgICBzb2NrZXRba1Jlc2V0XSA9IHJlc2V0XG4gIH1cblxuICBpZiAoY2xpZW50W2tNYXhSZXF1ZXN0c10gJiYgc29ja2V0W2tDb3VudGVyXSsrID49IGNsaWVudFtrTWF4UmVxdWVzdHNdKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gIH1cblxuICBpZiAoYmxvY2tpbmcpIHtcbiAgICBzb2NrZXRba0Jsb2NraW5nXSA9IHRydWVcbiAgfVxuXG4gIGxldCBoZWFkZXIgPSBgJHttZXRob2R9ICR7cGF0aH0gSFRUUC8xLjFcXHJcXG5gXG5cbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJykge1xuICAgIGhlYWRlciArPSBgaG9zdDogJHtob3N0fVxcclxcbmBcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gY2xpZW50W2tIb3N0SGVhZGVyXVxuICB9XG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICBoZWFkZXIgKz0gYGNvbm5lY3Rpb246IHVwZ3JhZGVcXHJcXG51cGdyYWRlOiAke3VwZ3JhZGV9XFxyXFxuYFxuICB9IGVsc2UgaWYgKGNsaWVudFtrUGlwZWxpbmluZ10gJiYgIXNvY2tldFtrUmVzZXRdKSB7XG4gICAgaGVhZGVyICs9ICdjb25uZWN0aW9uOiBrZWVwLWFsaXZlXFxyXFxuJ1xuICB9IGVsc2Uge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjogY2xvc2VcXHJcXG4nXG4gIH1cblxuICBpZiAoaGVhZGVycykge1xuICAgIGhlYWRlciArPSBoZWFkZXJzXG4gIH1cblxuICBpZiAoY2hhbm5lbHMuc2VuZEhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zZW5kSGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdCwgaGVhZGVyczogaGVhZGVyLCBzb2NrZXQgfSlcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgaWYgKCFib2R5IHx8IGJvZHlMZW5ndGggPT09IDApIHtcbiAgICBpZiAoY29udGVudExlbmd0aCA9PT0gMCkge1xuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogMFxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gbnVsbCwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5ieXRlTGVuZ3RoLCAnYnVmZmVyIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICAgIHNvY2tldC5jb3JrKClcbiAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgc29ja2V0LndyaXRlKGJvZHkpXG4gICAgc29ja2V0LnVuY29yaygpXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc0Jsb2JMaWtlKGJvZHkpKSB7XG4gICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgd3JpdGVJdGVyYWJsZSh7IGJvZHk6IGJvZHkuc3RyZWFtKCksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHdyaXRlQmxvYih7IGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gICAgfVxuICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICB3cml0ZVN0cmVhbSh7IGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gIH0gZWxzZSBpZiAodXRpbC5pc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgd3JpdGVJdGVyYWJsZSh7IGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pXG4gIH0gZWxzZSB7XG4gICAgYXNzZXJ0KGZhbHNlKVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gd3JpdGVIMiAoY2xpZW50LCBzZXNzaW9uLCByZXF1ZXN0KSB7XG4gIGNvbnN0IHsgYm9keSwgbWV0aG9kLCBwYXRoLCBob3N0LCB1cGdyYWRlLCBleHBlY3RDb250aW51ZSwgc2lnbmFsLCBoZWFkZXJzOiByZXFIZWFkZXJzIH0gPSByZXF1ZXN0XG5cbiAgbGV0IGhlYWRlcnNcbiAgaWYgKHR5cGVvZiByZXFIZWFkZXJzID09PSAnc3RyaW5nJykgaGVhZGVycyA9IFJlcXVlc3Rba0hUVFAyQ29weUhlYWRlcnNdKHJlcUhlYWRlcnMudHJpbSgpKVxuICBlbHNlIGhlYWRlcnMgPSByZXFIZWFkZXJzXG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgRXJyb3IoJ1VwZ3JhZGUgbm90IHN1cHBvcnRlZCBmb3IgSDInKSlcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gVE9ETyhIVFRQLzIpOiBTaG91bGQgd2UgY2FsbCBvbkNvbm5lY3QgaW1tZWRpYXRlbHkgb3Igb24gc3RyZWFtIHJlYWR5IGV2ZW50P1xuICAgIHJlcXVlc3Qub25Db25uZWN0KChlcnIpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQgfHwgcmVxdWVzdC5jb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVyciB8fCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgIH0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdub2RlOmh0dHAyJykuQ2xpZW50SHR0cDJTdHJlYW19ICovXG4gIGxldCBzdHJlYW1cbiAgY29uc3QgaDJTdGF0ZSA9IGNsaWVudFtrSFRUUDJTZXNzaW9uU3RhdGVdXG5cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQVVUSE9SSVRZXSA9IGhvc3QgfHwgY2xpZW50W2tIb3N0XVxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9NRVRIT0RdID0gbWV0aG9kXG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgc2Vzc2lvbi5yZWYoKVxuICAgIC8vIHdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc3RyZWFtcyBhcmUgcGVuZGluZywgZmlyc3QgcmVxdWVzdFxuICAgIC8vIHdpbGwgY3JlYXRlIGEgbmV3IHN0cmVhbS4gV2UgdHJpZ2dlciBhIHJlcXVlc3QgdG8gY3JlYXRlIHRoZSBzdHJlYW0gYW5kIHdhaXQgdW50aWxcbiAgICAvLyBgcmVhZHlgIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgIC8vIFdlIGRpc2FibGVkIGVuZFN0cmVhbSB0byBhbGxvdyB0aGUgdXNlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBmYWxzZSwgc2lnbmFsIH0pXG5cbiAgICBpZiAoc3RyZWFtLmlkICYmICFzdHJlYW0ucGVuZGluZykge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbmNlKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgICArK2gyU3RhdGUub3BlblN0cmVhbXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgc3RyZWFtLm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgaDJTdGF0ZS5vcGVuU3RyZWFtcyAtPSAxXG4gICAgICAvLyBUT0RPKEhUVFAvMik6IHVucmVmIG9ubHkgaWYgY3VycmVudCBzdHJlYW1zIGNvdW50IGlzIDBcbiAgICAgIGlmIChoMlN0YXRlLm9wZW5TdHJlYW1zID09PSAwKSBzZXNzaW9uLnVucmVmKClcbiAgICB9KVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3NTQwI3NlY3Rpb24tOC4zXG4gIC8vIDpwYXRoIGFuZCA6c2NoZW1lIGhlYWRlcnMgbXVzdCBiZSBvbWl0ZWQgd2hlbiBzZW5kaW5nIENPTk5FQ1RcblxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9QQVRIXSA9IHBhdGhcbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfU0NIRU1FXSA9ICdodHRwcydcblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4xXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuNVxuXG4gIC8vIFNlbmRpbmcgYSBwYXlsb2FkIGJvZHkgb24gYSByZXF1ZXN0IHRoYXQgZG9lcyBub3RcbiAgLy8gZXhwZWN0IGl0IGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZVxuICAvLyBzZXJ2ZXJzIGFuZCBjb3JydXB0IGNvbm5lY3Rpb24gc3RhdGUuIERvIG5vdFxuICAvLyByZS11c2UgdGhlIGNvbm5lY3Rpb24gZm9yIGZ1cnRoZXIgcmVxdWVzdHMuXG5cbiAgY29uc3QgZXhwZWN0c1BheWxvYWQgPSAoXG4gICAgbWV0aG9kID09PSAnUFVUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BPU1QnIHx8XG4gICAgbWV0aG9kID09PSAnUEFUQ0gnXG4gIClcblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBsZXQgY29udGVudExlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoID0gcmVxdWVzdC5jb250ZW50TGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gMCB8fCAhZXhwZWN0c1BheWxvYWQpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBOT1Qgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmaWVsZCB3aGVuXG4gICAgLy8gdGhlIHJlcXVlc3QgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGEgcGF5bG9hZCBib2R5IGFuZCB0aGUgbWV0aG9kXG4gICAgLy8gc2VtYW50aWNzIGRvIG5vdCBhbnRpY2lwYXRlIHN1Y2ggYSBib2R5LlxuXG4gICAgY29udGVudExlbmd0aCA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDQ2XG4gIC8vIEEgdXNlciBhZ2VudCBtYXkgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIDAgdmFsdWUsIHRoaXMgc2hvdWxkIGJlIGFsbG93ZWQuXG4gIGlmIChzaG91bGRTZW5kQ29udGVudExlbmd0aChtZXRob2QpICYmIGNvbnRlbnRMZW5ndGggPiAwICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPSBudWxsICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gY29udGVudExlbmd0aCkge1xuICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBhc3NlcnQoYm9keSwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEhdID0gYCR7Y29udGVudExlbmd0aH1gXG4gIH1cblxuICBzZXNzaW9uLnJlZigpXG5cbiAgY29uc3Qgc2hvdWxkRW5kU3RyZWFtID0gbWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJ1xuICBpZiAoZXhwZWN0Q29udGludWUpIHtcbiAgICBoZWFkZXJzW0hUVFAyX0hFQURFUl9FWFBFQ1RdID0gJzEwMC1jb250aW51ZSdcbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywgeyBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSwgc2lnbmFsIH0pXG5cbiAgICBzdHJlYW0ub25jZSgnY29udGludWUnLCB3cml0ZUJvZHlIMilcbiAgfSBlbHNlIHtcbiAgICBzdHJlYW0gPSBzZXNzaW9uLnJlcXVlc3QoaGVhZGVycywge1xuICAgICAgZW5kU3RyZWFtOiBzaG91bGRFbmRTdHJlYW0sXG4gICAgICBzaWduYWxcbiAgICB9KVxuICAgIHdyaXRlQm9keUgyKClcbiAgfVxuXG4gIC8vIEluY3JlbWVudCBjb3VudGVyIGFzIHdlIGhhdmUgbmV3IHNldmVyYWwgc3RyZWFtcyBvcGVuXG4gICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuXG4gIHN0cmVhbS5vbmNlKCdyZXNwb25zZScsIGhlYWRlcnMgPT4ge1xuICAgIGNvbnN0IHsgW0hUVFAyX0hFQURFUl9TVEFUVVNdOiBzdGF0dXNDb2RlLCAuLi5yZWFsSGVhZGVycyB9ID0gaGVhZGVyc1xuXG4gICAgaWYgKHJlcXVlc3Qub25IZWFkZXJzKE51bWJlcihzdGF0dXNDb2RlKSwgcmVhbEhlYWRlcnMsIHN0cmVhbS5yZXN1bWUuYmluZChzdHJlYW0pLCAnJykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZW5kJywgKCkgPT4ge1xuICAgIHJlcXVlc3Qub25Db21wbGV0ZShbXSlcbiAgfSlcblxuICBzdHJlYW0ub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICBpZiAocmVxdWVzdC5vbkRhdGEoY2h1bmspID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGgyU3RhdGUub3BlblN0cmVhbXMgLT0gMVxuICAgIC8vIFRPRE8oSFRUUC8yKTogdW5yZWYgb25seSBpZiBjdXJyZW50IHN0cmVhbXMgY291bnQgaXMgMFxuICAgIGlmIChoMlN0YXRlLm9wZW5TdHJlYW1zID09PSAwKSB7XG4gICAgICBzZXNzaW9uLnVucmVmKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChjbGllbnRba0hUVFAyU2Vzc2lvbl0gJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXS5kZXN0cm95ZWQgJiYgIXRoaXMuY2xvc2VkICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgaDJTdGF0ZS5zdHJlYW1zIC09IDFcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2ZyYW1lRXJyb3InLCAodHlwZSwgY29kZSkgPT4ge1xuICAgIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuXG4gICAgaWYgKGNsaWVudFtrSFRUUDJTZXNzaW9uXSAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dLmRlc3Ryb3llZCAmJiAhdGhpcy5jbG9zZWQgJiYgIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICBoMlN0YXRlLnN0cmVhbXMgLT0gMVxuICAgICAgdXRpbC5kZXN0cm95KHN0cmVhbSwgZXJyKVxuICAgIH1cbiAgfSlcblxuICAvLyBzdHJlYW0ub24oJ2Fib3J0ZWQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IGFib3J0ZWRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRpbWVvdXRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3B1c2gnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvciBwdXNoXG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCd0cmFpbGVycycsIGhlYWRlcnMgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCB0cmFpbGVyc1xuICAvLyB9KVxuXG4gIHJldHVybiB0cnVlXG5cbiAgZnVuY3Rpb24gd3JpdGVCb2R5SDIgKCkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5ieXRlTGVuZ3RoLCAnYnVmZmVyIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgIHN0cmVhbS5jb3JrKClcbiAgICAgIHN0cmVhbS53cml0ZShib2R5KVxuICAgICAgc3RyZWFtLnVuY29yaygpXG4gICAgICBzdHJlYW0uZW5kKClcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChib2R5KVxuICAgICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3cml0ZUl0ZXJhYmxlKHtcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgICAgYm9keTogYm9keS5zdHJlYW0oKSxcbiAgICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgICBoZWFkZXI6ICcnXG4gICAgICAgIH0pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB3cml0ZUJsb2Ioe1xuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgIGhlYWRlcjogJycsXG4gICAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIHdyaXRlU3RyZWFtKHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF0sXG4gICAgICAgIGgyc3RyZWFtOiBzdHJlYW0sXG4gICAgICAgIGhlYWRlcjogJydcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoe1xuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICBoZWFkZXI6ICcnLFxuICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICBzb2NrZXQ6IGNsaWVudFtrU29ja2V0XVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbSAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnc3RyZWFtIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIC8vIEZvciBIVFRQLzIsIGlzIGVub3VnaCB0byBwaXBlIHRoZSBzdHJlYW1cbiAgICBjb25zdCBwaXBlID0gcGlwZWxpbmUoXG4gICAgICBib2R5LFxuICAgICAgaDJzdHJlYW0sXG4gICAgICAoZXJyKSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICAgIHV0aWwuZGVzdHJveShoMnN0cmVhbSwgZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApXG5cbiAgICBwaXBlLm9uKCdkYXRhJywgb25QaXBlRGF0YSlcbiAgICBwaXBlLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICAgIHBpcGUucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvblBpcGVEYXRhKVxuICAgICAgdXRpbC5kZXN0cm95KHBpcGUpXG4gICAgfSlcblxuICAgIGZ1bmN0aW9uIG9uUGlwZURhdGEgKGNodW5rKSB7XG4gICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pXG5cbiAgY29uc3Qgb25EYXRhID0gZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspICYmIHRoaXMucGF1c2UpIHtcbiAgICAgICAgdGhpcy5wYXVzZSgpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3kodGhpcywgZXJyKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkRyYWluID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJvZHkucmVzdW1lKSB7XG4gICAgICBib2R5LnJlc3VtZSgpXG4gICAgfVxuICB9XG4gIGNvbnN0IG9uQWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKGZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IG9uRmluaXNoZWQoZXJyKSlcbiAgfVxuICBjb25zdCBvbkZpbmlzaGVkID0gZnVuY3Rpb24gKGVycikge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZmluaXNoZWQgPSB0cnVlXG5cbiAgICBhc3NlcnQoc29ja2V0LmRlc3Ryb3llZCB8fCAoc29ja2V0W2tXcml0aW5nXSAmJiBjbGllbnRba1J1bm5pbmddIDw9IDEpKVxuXG4gICAgc29ja2V0XG4gICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgICAub2ZmKCdlcnJvcicsIG9uRmluaXNoZWQpXG5cbiAgICBib2R5XG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2RhdGEnLCBvbkRhdGEpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2VuZCcsIG9uRmluaXNoZWQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Vycm9yJywgb25GaW5pc2hlZClcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignY2xvc2UnLCBvbkFib3J0KVxuXG4gICAgaWYgKCFlcnIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHdyaXRlci5lbmQoKVxuICAgICAgfSBjYXRjaCAoZXIpIHtcbiAgICAgICAgZXJyID0gZXJcbiAgICAgIH1cbiAgICB9XG5cbiAgICB3cml0ZXIuZGVzdHJveShlcnIpXG5cbiAgICBpZiAoZXJyICYmIChlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycgfHwgZXJyLm1lc3NhZ2UgIT09ICdyZXNldCcpKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH0gZWxzZSB7XG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSlcbiAgICB9XG4gIH1cblxuICBib2R5XG4gICAgLm9uKCdkYXRhJywgb25EYXRhKVxuICAgIC5vbignZW5kJywgb25GaW5pc2hlZClcbiAgICAub24oJ2Vycm9yJywgb25GaW5pc2hlZClcbiAgICAub24oJ2Nsb3NlJywgb25BYm9ydClcblxuICBpZiAoYm9keS5yZXN1bWUpIHtcbiAgICBib2R5LnJlc3VtZSgpXG4gIH1cblxuICBzb2NrZXRcbiAgICAub24oJ2RyYWluJywgb25EcmFpbilcbiAgICAub24oJ2Vycm9yJywgb25GaW5pc2hlZClcbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVCbG9iICh7IGgyc3RyZWFtLCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LnNpemUsICdibG9iIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICBjb25zdCBpc0gyID0gY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBjb250ZW50TGVuZ3RoICE9PSBib2R5LnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGJvZHkuYXJyYXlCdWZmZXIoKSlcblxuICAgIGlmIChpc0gyKSB7XG4gICAgICBoMnN0cmVhbS5jb3JrKClcbiAgICAgIGgyc3RyZWFtLndyaXRlKGJ1ZmZlcilcbiAgICAgIGgyc3RyZWFtLnVuY29yaygpXG4gICAgfSBlbHNlIHtcbiAgICAgIHNvY2tldC5jb3JrKClcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIpXG4gICAgICBzb2NrZXQudW5jb3JrKClcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYnVmZmVyKVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB1dGlsLmRlc3Ryb3koaXNIMiA/IGgyc3RyZWFtIDogc29ja2V0LCBlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVJdGVyYWJsZSAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnaXRlcmF0b3IgYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBsZXQgY2FsbGJhY2sgPSBudWxsXG4gIGZ1bmN0aW9uIG9uRHJhaW4gKCkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICBjYigpXG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd2FpdEZvckRyYWluID0gKCkgPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGFzc2VydChjYWxsYmFjayA9PT0gbnVsbClcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgcmVqZWN0KHNvY2tldFtrRXJyb3JdKVxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayA9IHJlc29sdmVcbiAgICB9XG4gIH0pXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJykge1xuICAgIGgyc3RyZWFtXG4gICAgICAub24oJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlcyA9IGgyc3RyZWFtLndyaXRlKGNodW5rKVxuICAgICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG4gICAgICAgIGlmICghcmVzKSB7XG4gICAgICAgICAgYXdhaXQgd2FpdEZvckRyYWluKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaDJzdHJlYW0uZGVzdHJveShlcnIpXG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgICBoMnN0cmVhbS5lbmQoKVxuICAgICAgaDJzdHJlYW1cbiAgICAgICAgLm9mZignY2xvc2UnLCBvbkRyYWluKVxuICAgICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgfVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBzb2NrZXRcbiAgICAub24oJ2Nsb3NlJywgb25EcmFpbilcbiAgICAub24oJ2RyYWluJywgb25EcmFpbilcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgQXN5bmNXcml0ZXIoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuICB0cnkge1xuICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgIH1cblxuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmVuZCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdyaXRlci5kZXN0cm95KGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5jbGFzcyBBc3luY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yICh7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyIH0pIHtcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSBjb250ZW50TGVuZ3RoXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLmJ5dGVzV3JpdHRlbiA9IDBcbiAgICB0aGlzLmV4cGVjdHNQYXlsb2FkID0gZXhwZWN0c1BheWxvYWRcbiAgICB0aGlzLmhlYWRlciA9IGhlYWRlclxuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IHRydWVcbiAgfVxuXG4gIHdyaXRlIChjaHVuaykge1xuICAgIGNvbnN0IHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9ID0gdGhpc1xuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBjb25zdCBsZW4gPSBCdWZmZXIuYnl0ZUxlbmd0aChjaHVuaylcbiAgICBpZiAoIWxlbikge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBXZSBzaG91bGQgZGVmZXIgd3JpdGluZyBjaHVua3MuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICsgbGVuID4gY29udGVudExlbmd0aCkge1xuICAgICAgaWYgKGNsaWVudFtrU3RyaWN0Q29udGVudExlbmd0aF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpXG4gICAgICB9XG5cbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgIH1cblxuICAgIHNvY2tldC5jb3JrKClcblxuICAgIGlmIChieXRlc1dyaXR0ZW4gPT09IDApIHtcbiAgICAgIGlmICghZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9dHJhbnNmZXItZW5jb2Rpbmc6IGNodW5rZWRcXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6ICR7Y29udGVudExlbmd0aH1cXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKGBcXHJcXG4ke2xlbi50b1N0cmluZygxNil9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gKz0gbGVuXG5cbiAgICBjb25zdCByZXQgPSBzb2NrZXQud3JpdGUoY2h1bmspXG5cbiAgICBzb2NrZXQudW5jb3JrKClcblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcblxuICAgIGlmICghcmV0KSB7XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQgJiYgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGVuZCAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgYnl0ZXNXcml0dGVuLCBleHBlY3RzUGF5bG9hZCwgaGVhZGVyLCByZXF1ZXN0IH0gPSB0aGlzXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoZXhwZWN0c1BheWxvYWQpIHtcbiAgICAgICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgICAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIHNlbmQgYSBDb250ZW50LUxlbmd0aCBpbiBhIHJlcXVlc3QgbWVzc2FnZSB3aGVuXG4gICAgICAgIC8vIG5vIFRyYW5zZmVyLUVuY29kaW5nIGlzIHNlbnQgYW5kIHRoZSByZXF1ZXN0IG1ldGhvZCBkZWZpbmVzIGEgbWVhbmluZ1xuICAgICAgICAvLyBmb3IgYW4gZW5jbG9zZWQgcGF5bG9hZCBib2R5LlxuXG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9XFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjb250ZW50TGVuZ3RoID09PSBudWxsKSB7XG4gICAgICBzb2NrZXQud3JpdGUoJ1xcclxcbjBcXHJcXG5cXHJcXG4nLCAnbGF0aW4xJylcbiAgICB9XG5cbiAgICBpZiAoY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiBieXRlc1dyaXR0ZW4gIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjbGllbnQgfSA9IHRoaXNcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSBmYWxzZVxuXG4gICAgaWYgKGVycikge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPD0gMSwgJ3BpcGVsaW5lIHNob3VsZCBvbmx5IGNvbnRhaW4gdGhpcyByZXF1ZXN0JylcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZXJyb3JSZXF1ZXN0IChjbGllbnQsIHJlcXVlc3QsIGVycikge1xuICB0cnkge1xuICAgIHJlcXVlc3Qub25FcnJvcihlcnIpXG4gICAgYXNzZXJ0KHJlcXVlc3QuYWJvcnRlZClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgY2xpZW50LmVtaXQoJ2Vycm9yJywgZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQ2xpZW50XG4iLCAiLyogZXNsaW50LWRpc2FibGUgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbi8vIEV4dHJhY3RlZCBmcm9tIG5vZGUvbGliL2ludGVybmFsL2ZpeGVkX3F1ZXVlLmpzXG5cbi8vIEN1cnJlbnRseSBvcHRpbWFsIHF1ZXVlIHNpemUsIHRlc3RlZCBvbiBWOCA2LjAgLSA2LjYuIE11c3QgYmUgcG93ZXIgb2YgdHdvLlxuY29uc3Qga1NpemUgPSAyMDQ4O1xuY29uc3Qga01hc2sgPSBrU2l6ZSAtIDE7XG5cbi8vIFRoZSBGaXhlZFF1ZXVlIGlzIGltcGxlbWVudGVkIGFzIGEgc2luZ2x5LWxpbmtlZCBsaXN0IG9mIGZpeGVkLXNpemVcbi8vIGNpcmN1bGFyIGJ1ZmZlcnMuIEl0IGxvb2tzIHNvbWV0aGluZyBsaWtlIHRoaXM6XG4vL1xuLy8gIGhlYWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFpbFxuLy8gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8XG4vLyAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgPC0tLS0tXFwgICAgICAgKy0tLS0tLS0tLS0tKyA8LS0tLS0tXFwgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICBcXC0tLS0tIHwgICBuZXh0ICAgIHwgICAgICAgICBcXC0tLS0tLS0gfCAgIG5leHQgICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBPciwgaWYgdGhlcmUgaXMgb25seSBvbmUgY2lyY3VsYXIgYnVmZmVyLCBpdCBsb29rcyBzb21ldGhpbmdcbi8vIGxpa2UgZWl0aGVyIG9mIHRoZXNlOlxuLy9cbi8vICBoZWFkICAgdGFpbCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgICB0YWlsXG4vLyAgICB8ICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgIHxcbi8vICAgIHYgICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdiAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbbnVsbF0gICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtudWxsXSAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICAgICAgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICBbZW1wdHldICB8IDwtLSB0b3AgICAgICAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gQWRkaW5nIGEgdmFsdWUgbWVhbnMgbW92aW5nIGB0b3BgIGZvcndhcmQgYnkgb25lLCByZW1vdmluZyBtZWFuc1xuLy8gbW92aW5nIGBib3R0b21gIGZvcndhcmQgYnkgb25lLiBBZnRlciByZWFjaGluZyB0aGUgZW5kLCB0aGUgcXVldWVcbi8vIHdyYXBzIGFyb3VuZC5cbi8vXG4vLyBXaGVuIGB0b3AgPT09IGJvdHRvbWAgdGhlIGN1cnJlbnQgcXVldWUgaXMgZW1wdHkgYW5kIHdoZW5cbi8vIGB0b3AgKyAxID09PSBib3R0b21gIGl0J3MgZnVsbC4gVGhpcyB3YXN0ZXMgYSBzaW5nbGUgc3BhY2Ugb2Ygc3RvcmFnZVxuLy8gYnV0IGFsbG93cyBtdWNoIHF1aWNrZXIgY2hlY2tzLlxuXG5jbGFzcyBGaXhlZENpcmN1bGFyQnVmZmVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5ib3R0b20gPSAwO1xuICAgIHRoaXMudG9wID0gMDtcbiAgICB0aGlzLmxpc3QgPSBuZXcgQXJyYXkoa1NpemUpO1xuICAgIHRoaXMubmV4dCA9IG51bGw7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLnRvcCA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBpc0Z1bGwoKSB7XG4gICAgcmV0dXJuICgodGhpcy50b3AgKyAxKSAmIGtNYXNrKSA9PT0gdGhpcy5ib3R0b207XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICB0aGlzLmxpc3RbdGhpcy50b3BdID0gZGF0YTtcbiAgICB0aGlzLnRvcCA9ICh0aGlzLnRvcCArIDEpICYga01hc2s7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCBuZXh0SXRlbSA9IHRoaXMubGlzdFt0aGlzLmJvdHRvbV07XG4gICAgaWYgKG5leHRJdGVtID09PSB1bmRlZmluZWQpXG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB0aGlzLmxpc3RbdGhpcy5ib3R0b21dID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYm90dG9tID0gKHRoaXMuYm90dG9tICsgMSkgJiBrTWFzaztcbiAgICByZXR1cm4gbmV4dEl0ZW07XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBGaXhlZFF1ZXVlIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oZWFkID0gdGhpcy50YWlsID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMuaGVhZC5pc0VtcHR5KCk7XG4gIH1cblxuICBwdXNoKGRhdGEpIHtcbiAgICBpZiAodGhpcy5oZWFkLmlzRnVsbCgpKSB7XG4gICAgICAvLyBIZWFkIGlzIGZ1bGw6IENyZWF0ZXMgYSBuZXcgcXVldWUsIHNldHMgdGhlIG9sZCBxdWV1ZSdzIGAubmV4dGAgdG8gaXQsXG4gICAgICAvLyBhbmQgc2V0cyBpdCBhcyB0aGUgbmV3IG1haW4gcXVldWUuXG4gICAgICB0aGlzLmhlYWQgPSB0aGlzLmhlYWQubmV4dCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gICAgfVxuICAgIHRoaXMuaGVhZC5wdXNoKGRhdGEpO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgdGFpbCA9IHRoaXMudGFpbDtcbiAgICBjb25zdCBuZXh0ID0gdGFpbC5zaGlmdCgpO1xuICAgIGlmICh0YWlsLmlzRW1wdHkoKSAmJiB0YWlsLm5leHQgIT09IG51bGwpIHtcbiAgICAgIC8vIElmIHRoZXJlIGlzIGFub3RoZXIgcXVldWUsIGl0IGZvcm1zIHRoZSBuZXcgdGFpbC5cbiAgICAgIHRoaXMudGFpbCA9IHRhaWwubmV4dDtcbiAgICB9XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn07XG4iLCAiY29uc3QgeyBrRnJlZSwga0Nvbm5lY3RlZCwga1BlbmRpbmcsIGtRdWV1ZWQsIGtSdW5uaW5nLCBrU2l6ZSB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3Qga1Bvb2wgPSBTeW1ib2woJ3Bvb2wnKVxuXG5jbGFzcyBQb29sU3RhdHMge1xuICBjb25zdHJ1Y3RvciAocG9vbCkge1xuICAgIHRoaXNba1Bvb2xdID0gcG9vbFxuICB9XG5cbiAgZ2V0IGNvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tDb25uZWN0ZWRdXG4gIH1cblxuICBnZXQgZnJlZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tGcmVlXVxuICB9XG5cbiAgZ2V0IHBlbmRpbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUGVuZGluZ11cbiAgfVxuXG4gIGdldCBxdWV1ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUXVldWVkXVxuICB9XG5cbiAgZ2V0IHJ1bm5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUnVubmluZ11cbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1NpemVdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sU3RhdHNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCBGaXhlZFF1ZXVlID0gcmVxdWlyZSgnLi9ub2RlL2ZpeGVkLXF1ZXVlJylcbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUsIGtSdW5uaW5nLCBrUGVuZGluZywga1F1ZXVlZCwga0J1c3ksIGtGcmVlLCBrVXJsLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IFBvb2xTdGF0cyA9IHJlcXVpcmUoJy4vcG9vbC1zdGF0cycpXG5cbmNvbnN0IGtDbGllbnRzID0gU3ltYm9sKCdjbGllbnRzJylcbmNvbnN0IGtOZWVkRHJhaW4gPSBTeW1ib2woJ25lZWREcmFpbicpXG5jb25zdCBrUXVldWUgPSBTeW1ib2woJ3F1ZXVlJylcbmNvbnN0IGtDbG9zZWRSZXNvbHZlID0gU3ltYm9sKCdjbG9zZWQgcmVzb2x2ZScpXG5jb25zdCBrT25EcmFpbiA9IFN5bWJvbCgnb25EcmFpbicpXG5jb25zdCBrT25Db25uZWN0ID0gU3ltYm9sKCdvbkNvbm5lY3QnKVxuY29uc3Qga09uRGlzY29ubmVjdCA9IFN5bWJvbCgnb25EaXNjb25uZWN0JylcbmNvbnN0IGtPbkNvbm5lY3Rpb25FcnJvciA9IFN5bWJvbCgnb25Db25uZWN0aW9uRXJyb3InKVxuY29uc3Qga0dldERpc3BhdGNoZXIgPSBTeW1ib2woJ2dldCBkaXNwYXRjaGVyJylcbmNvbnN0IGtBZGRDbGllbnQgPSBTeW1ib2woJ2FkZCBjbGllbnQnKVxuY29uc3Qga1JlbW92ZUNsaWVudCA9IFN5bWJvbCgncmVtb3ZlIGNsaWVudCcpXG5jb25zdCBrU3RhdHMgPSBTeW1ib2woJ3N0YXRzJylcblxuY2xhc3MgUG9vbEJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBuZXcgRml4ZWRRdWV1ZSgpXG4gICAgdGhpc1trQ2xpZW50c10gPSBbXVxuICAgIHRoaXNba1F1ZXVlZF0gPSAwXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSBmdW5jdGlvbiBvbkRyYWluIChvcmlnaW4sIHRhcmdldHMpIHtcbiAgICAgIGNvbnN0IHF1ZXVlID0gcG9vbFtrUXVldWVdXG5cbiAgICAgIGxldCBuZWVkRHJhaW4gPSBmYWxzZVxuXG4gICAgICB3aGlsZSAoIW5lZWREcmFpbikge1xuICAgICAgICBjb25zdCBpdGVtID0gcXVldWUuc2hpZnQoKVxuICAgICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIHBvb2xba1F1ZXVlZF0tLVxuICAgICAgICBuZWVkRHJhaW4gPSAhdGhpcy5kaXNwYXRjaChpdGVtLm9wdHMsIGl0ZW0uaGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpc1trTmVlZERyYWluXSA9IG5lZWREcmFpblxuXG4gICAgICBpZiAoIXRoaXNba05lZWREcmFpbl0gJiYgcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBwb29sW2tOZWVkRHJhaW5dID0gZmFsc2VcbiAgICAgICAgcG9vbC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgICAgfVxuXG4gICAgICBpZiAocG9vbFtrQ2xvc2VkUmVzb2x2ZV0gJiYgcXVldWUuaXNFbXB0eSgpKSB7XG4gICAgICAgIFByb21pc2VcbiAgICAgICAgICAuYWxsKHBvb2xba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgICAgICAgLnRoZW4ocG9vbFtrQ2xvc2VkUmVzb2x2ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnZGlzY29ubmVjdCcsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW3Bvb2wsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdHNdID0gbmV3IFBvb2xTdGF0cyh0aGlzKVxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBnZXQgW2tDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrRnJlZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSAmJiAhY2xpZW50W2tOZWVkRHJhaW5dKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba1BlbmRpbmddICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1BlbmRpbmddOiBwZW5kaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBwZW5kaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgeyBba1J1bm5pbmddOiBydW5uaW5nIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBydW5uaW5nXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBba1NpemVdICgpIHtcbiAgICBsZXQgcmV0ID0gdGhpc1trUXVldWVkXVxuICAgIGZvciAoY29uc3QgeyBba1NpemVdOiBzaXplIH0gb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIHJldCArPSBzaXplXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIGdldCBzdGF0cyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1N0YXRzXVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGlmICh0aGlzW2tRdWV1ZV0uaXNFbXB0eSgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gcmVzb2x2ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXNba1F1ZXVlXS5zaGlmdCgpXG4gICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGl0ZW0uaGFuZGxlci5vbkVycm9yKGVycilcbiAgICB9XG5cbiAgICByZXR1cm4gUHJvbWlzZS5hbGwodGhpc1trQ2xpZW50c10ubWFwKGMgPT4gYy5kZXN0cm95KGVycikpKVxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trUXVldWVdLnB1c2goeyBvcHRzLCBoYW5kbGVyIH0pXG4gICAgICB0aGlzW2tRdWV1ZWRdKytcbiAgICB9IGVsc2UgaWYgKCFkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpKSB7XG4gICAgICBkaXNwYXRjaGVyW2tOZWVkRHJhaW5dID0gdHJ1ZVxuICAgICAgdGhpc1trTmVlZERyYWluXSA9ICF0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG4gICAgfVxuXG4gICAgcmV0dXJuICF0aGlzW2tOZWVkRHJhaW5dXG4gIH1cblxuICBba0FkZENsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudFxuICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgLm9uKCdjb25uZWN0JywgdGhpc1trT25Db25uZWN0XSlcbiAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgIHRoaXNba0NsaWVudHNdLnB1c2goY2xpZW50KVxuXG4gICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgICAgIHRoaXNba09uRHJhaW5dKGNsaWVudFtrVXJsXSwgW3RoaXMsIGNsaWVudF0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFtrUmVtb3ZlQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50LmNsb3NlKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXNba0NsaWVudHNdLmluZGV4T2YoY2xpZW50KVxuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpc1trTmVlZERyYWluXSA9IHRoaXNba0NsaWVudHNdLnNvbWUoZGlzcGF0Y2hlciA9PiAoXG4gICAgICAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSAmJlxuICAgICAgZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrUmVtb3ZlQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0Nvbm5lY3Rpb25zID0gU3ltYm9sKCdjb25uZWN0aW9ucycpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgY29ubmVjdGlvbnMsXG4gICAgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LFxuICAgIGNvbm5lY3QsXG4gICAgY29ubmVjdFRpbWVvdXQsXG4gICAgdGxzLFxuICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgIHNvY2tldFBhdGgsXG4gICAgYXV0b1NlbGVjdEZhbWlseSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQsXG4gICAgYWxsb3dIMixcbiAgICAuLi5vcHRpb25zXG4gIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmIChjb25uZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3Rpb25zKSB8fCBjb25uZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbnMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKHV0aWwubm9kZUhhc0F1dG9TZWxlY3RGYW1pbHkgJiYgYXV0b1NlbGVjdEZhbWlseSA/IHsgYXV0b1NlbGVjdEZhbWlseSwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IH0gOiB1bmRlZmluZWQpLFxuICAgICAgICAuLi5jb25uZWN0XG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG5cbiAgICB0aGlzLm9uKCdjb25uZWN0aW9uRXJyb3InLCAob3JpZ2luLCB0YXJnZXRzLCBlcnJvcikgPT4ge1xuICAgICAgLy8gSWYgYSBjb25uZWN0aW9uIGVycm9yIG9jY3Vycywgd2UgcmVtb3ZlIHRoZSBjbGllbnQgZnJvbSB0aGUgcG9vbCxcbiAgICAgIC8vIGFuZCBlbWl0IGEgY29ubmVjdGlvbkVycm9yIGV2ZW50LiBUaGV5IHdpbGwgbm90IGJlIHJlLXVzZWQuXG4gICAgICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMzg5NVxuICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAvLyBEbyBub3QgdXNlIGtSZW1vdmVDbGllbnQgaGVyZSwgYXMgaXQgd2lsbCBjbG9zZSB0aGUgY2xpZW50LFxuICAgICAgICAvLyBidXQgdGhlIGNsaWVudCBjYW5ub3QgYmUgY2xvc2VkIGluIHRoaXMgc3RhdGUuXG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXNba0NsaWVudHNdLmluZGV4T2YodGFyZ2V0KVxuICAgICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgW2tHZXREaXNwYXRjaGVyXSAoKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tDbGllbnRzXS5maW5kKGRpc3BhdGNoZXIgPT4gIWRpc3BhdGNoZXJba05lZWREcmFpbl0pXG5cbiAgICBpZiAoZGlzcGF0Y2hlcikge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG5cbiAgICBpZiAoIXRoaXNba0Nvbm5lY3Rpb25zXSB8fCB0aGlzW2tDbGllbnRzXS5sZW5ndGggPCB0aGlzW2tDb25uZWN0aW9uc10pIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSh0aGlzW2tVcmxdLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgIHRoaXNba0FkZENsaWVudF0oZGlzcGF0Y2hlcilcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtSZW1vdmVDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgcGFyc2VPcmlnaW4gfSA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG5mdW5jdGlvbiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IgKGEsIGIpIHtcbiAgaWYgKGIgPT09IDApIHJldHVybiBhXG4gIHJldHVybiBnZXRHcmVhdGVzdENvbW1vbkRpdmlzb3IoYiwgYSAlIGIpXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycyAmJiBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2wpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLkJhbGFuY2VkUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgZm9yIChjb25zdCB1cHN0cmVhbSBvZiB1cHN0cmVhbXMpIHtcbiAgICAgIHRoaXMuYWRkVXBzdHJlYW0odXBzdHJlYW0pXG4gICAgfVxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgfVxuXG4gIGFkZFVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSkpIHtcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuICAgIGNvbnN0IHBvb2wgPSB0aGlzW2tGYWN0b3J5XSh1cHN0cmVhbU9yaWdpbiwgT2JqZWN0LmFzc2lnbih7fSwgdGhpc1trT3B0aW9uc10pKVxuXG4gICAgdGhpc1trQWRkQ2xpZW50XShwb29sKVxuICAgIHBvb2wub24oJ2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5taW4odGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSwgcG9vbFtrV2VpZ2h0XSArIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Nvbm5lY3Rpb25FcnJvcicsICgpID0+IHtcbiAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICB9KVxuXG4gICAgcG9vbC5vbignZGlzY29ubmVjdCcsICguLi5hcmdzKSA9PiB7XG4gICAgICBjb25zdCBlcnIgPSBhcmdzWzJdXG4gICAgICBpZiAoZXJyICYmIGVyci5jb2RlID09PSAnVU5EX0VSUl9TT0NLRVQnKSB7XG4gICAgICAgIC8vIGRlY3JlYXNlIHRoZSB3ZWlnaHQgb2YgdGhlIHBvb2wuXG4gICAgICAgIHBvb2xba1dlaWdodF0gPSBNYXRoLm1heCgxLCBwb29sW2tXZWlnaHRdIC0gdGhpc1trRXJyb3JQZW5hbHR5XSlcbiAgICAgICAgdGhpcy5fdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMoKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgY2xpZW50W2tXZWlnaHRdID0gdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXVxuICAgIH1cblxuICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBfdXBkYXRlQmFsYW5jZWRQb29sU3RhdHMgKCkge1xuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSB0aGlzW2tDbGllbnRzXS5tYXAocCA9PiBwW2tXZWlnaHRdKS5yZWR1Y2UoZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yLCAwKVxuICB9XG5cbiAgcmVtb3ZlVXBzdHJlYW0gKHVwc3RyZWFtKSB7XG4gICAgY29uc3QgdXBzdHJlYW1PcmlnaW4gPSBwYXJzZU9yaWdpbih1cHN0cmVhbSkub3JpZ2luXG5cbiAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c10uZmluZCgocG9vbCkgPT4gKFxuICAgICAgcG9vbFtrVXJsXS5vcmlnaW4gPT09IHVwc3RyZWFtT3JpZ2luICYmXG4gICAgICBwb29sLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgcG9vbC5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKHBvb2wpIHtcbiAgICAgIHRoaXNba1JlbW92ZUNsaWVudF0ocG9vbClcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgZ2V0IHVwc3RyZWFtcyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdXG4gICAgICAuZmlsdGVyKGRpc3BhdGNoZXIgPT4gZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiYgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWUpXG4gICAgICAubWFwKChwKSA9PiBwW2tVcmxdLm9yaWdpbilcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIC8vIFdlIHZhbGlkYXRlIHRoYXQgcG9vbHMgaXMgZ3JlYXRlciB0aGFuIDAsXG4gICAgLy8gb3RoZXJ3aXNlIHdlIHdvdWxkIGhhdmUgdG8gd2FpdCB1bnRpbCBhbiB1cHN0cmVhbVxuICAgIC8vIGlzIGFkZGVkLCB3aGljaCBtaWdodCBuZXZlciBoYXBwZW4uXG4gICAgaWYgKHRoaXNba0NsaWVudHNdLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhyb3cgbmV3IEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+IChcbiAgICAgICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dICYmXG4gICAgICBkaXNwYXRjaGVyLmNsb3NlZCAhPT0gdHJ1ZSAmJlxuICAgICAgZGlzcGF0Y2hlci5kZXN0cm95ZWQgIT09IHRydWVcbiAgICApKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBhbGxDbGllbnRzQnVzeSA9IHRoaXNba0NsaWVudHNdLm1hcChwb29sID0+IHBvb2xba05lZWREcmFpbl0pLnJlZHVjZSgoYSwgYikgPT4gYSAmJiBiLCB0cnVlKVxuXG4gICAgaWYgKGFsbENsaWVudHNCdXN5KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgY291bnRlciA9IDBcblxuICAgIGxldCBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0NsaWVudHNdLmZpbmRJbmRleChwb29sID0+ICFwb29sW2tOZWVkRHJhaW5dKVxuXG4gICAgd2hpbGUgKGNvdW50ZXIrKyA8IHRoaXNba0NsaWVudHNdLmxlbmd0aCkge1xuICAgICAgdGhpc1trSW5kZXhdID0gKHRoaXNba0luZGV4XSArIDEpICUgdGhpc1trQ2xpZW50c10ubGVuZ3RoXG4gICAgICBjb25zdCBwb29sID0gdGhpc1trQ2xpZW50c11bdGhpc1trSW5kZXhdXVxuXG4gICAgICAvLyBmaW5kIHBvb2wgaW5kZXggd2l0aCB0aGUgbGFyZ2VzdCB3ZWlnaHRcbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdICYmICFwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIG1heFdlaWdodEluZGV4ID0gdGhpc1trSW5kZXhdXG4gICAgICB9XG5cbiAgICAgIC8vIGRlY3JlYXNlIHRoZSBjdXJyZW50IHdlaWdodCBldmVyeSBgdGhpc1trQ2xpZW50c10ubGVuZ3RoYC5cbiAgICAgIGlmICh0aGlzW2tJbmRleF0gPT09IDApIHtcbiAgICAgICAgLy8gU2V0IHRoZSBjdXJyZW50IHdlaWdodCB0byB0aGUgbmV4dCBsb3dlciB3ZWlnaHQuXG4gICAgICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ3VycmVudFdlaWdodF0gLSB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdXG5cbiAgICAgICAgaWYgKHRoaXNba0N1cnJlbnRXZWlnaHRdIDw9IDApIHtcbiAgICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKHBvb2xba1dlaWdodF0gPj0gdGhpc1trQ3VycmVudFdlaWdodF0gJiYgKCFwb29sW2tOZWVkRHJhaW5dKSkge1xuICAgICAgICByZXR1cm4gcG9vbFxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdW2tXZWlnaHRdXG4gICAgdGhpc1trSW5kZXhdID0gbWF4V2VpZ2h0SW5kZXhcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c11bbWF4V2VpZ2h0SW5kZXhdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBCYWxhbmNlZFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuLyogaXN0YW5idWwgaWdub3JlIGZpbGU6IG9ubHkgZm9yIE5vZGUgMTIgKi9cblxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY2xhc3MgQ29tcGF0V2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlW2tDb25uZWN0ZWRdID09PSAwICYmIHRoaXMudmFsdWVba1NpemVdID09PSAwXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgQ29tcGF0RmluYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKGZpbmFsaXplcikge1xuICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxpemVyXG4gIH1cblxuICByZWdpc3RlciAoZGlzcGF0Y2hlciwga2V5KSB7XG4gICAgaWYgKGRpc3BhdGNoZXIub24pIHtcbiAgICAgIGRpc3BhdGNoZXIub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgIGlmIChkaXNwYXRjaGVyW2tDb25uZWN0ZWRdID09PSAwICYmIGRpc3BhdGNoZXJba1NpemVdID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5maW5hbGl6ZXIoa2V5KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gRklYTUU6IHJlbW92ZSB3b3JrYXJvdW5kIHdoZW4gdGhlIE5vZGUgYnVnIGlzIGZpeGVkXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfVjhfQ09WRVJBR0UpIHtcbiAgICByZXR1cm4ge1xuICAgICAgV2Vha1JlZjogQ29tcGF0V2Vha1JlZixcbiAgICAgIEZpbmFsaXphdGlvblJlZ2lzdHJ5OiBDb21wYXRGaW5hbGl6ZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHtcbiAgICBXZWFrUmVmOiBnbG9iYWwuV2Vha1JlZiB8fCBDb21wYXRXZWFrUmVmLFxuICAgIEZpbmFsaXphdGlvblJlZ2lzdHJ5OiBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgfHwgQ29tcGF0RmluYWxpemVyXG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IGtDbGllbnRzLCBrUnVubmluZywga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3InKVxuY29uc3QgeyBXZWFrUmVmLCBGaW5hbGl6YXRpb25SZWdpc3RyeSB9ID0gcmVxdWlyZSgnLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuXG5jb25zdCBrT25Db25uZWN0ID0gU3ltYm9sKCdvbkNvbm5lY3QnKVxuY29uc3Qga09uRGlzY29ubmVjdCA9IFN5bWJvbCgnb25EaXNjb25uZWN0JylcbmNvbnN0IGtPbkNvbm5lY3Rpb25FcnJvciA9IFN5bWJvbCgnb25Db25uZWN0aW9uRXJyb3InKVxuY29uc3Qga01heFJlZGlyZWN0aW9ucyA9IFN5bWJvbCgnbWF4UmVkaXJlY3Rpb25zJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcbmNvbnN0IGtGaW5hbGl6ZXIgPSBTeW1ib2woJ2ZpbmFsaXplcicpXG5jb25zdCBrT3B0aW9ucyA9IFN5bWJvbCgnb3B0aW9ucycpXG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG9wdHMgJiYgb3B0cy5jb25uZWN0aW9ucyA9PT0gMVxuICAgID8gbmV3IENsaWVudChvcmlnaW4sIG9wdHMpXG4gICAgOiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIEFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAoeyBmYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnksIG1heFJlZGlyZWN0aW9ucyA9IDAsIGNvbm5lY3QsIC4uLm9wdGlvbnMgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKHR5cGVvZiBmYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ZhY3RvcnkgbXVzdCBiZSBhIGZ1bmN0aW9uLicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAoIU51bWJlci5pc0ludGVnZXIobWF4UmVkaXJlY3Rpb25zKSB8fCBtYXhSZWRpcmVjdGlvbnMgPCAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IHsgLi4uY29ubmVjdCB9XG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzICYmIG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0IH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuICAgIHRoaXNba0NsaWVudHNdID0gbmV3IE1hcCgpXG4gICAgdGhpc1trRmluYWxpemVyXSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovIGtleSA9PiB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQoa2V5KVxuICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhpc1trQ2xpZW50c10uZGVsZXRlKGtleSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uc3QgYWdlbnQgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdKVxuICAgIH1cblxuICAgIHRoaXNba09uRGlzY29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIGFnZW50LmVtaXQoJ2Nvbm5lY3Rpb25FcnJvcicsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICBsZXQgcmV0ID0gMFxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICByZXQgKz0gY2xpZW50W2tSdW5uaW5nXVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGxldCBrZXlcbiAgICBpZiAob3B0cy5vcmlnaW4gJiYgKHR5cGVvZiBvcHRzLm9yaWdpbiA9PT0gJ3N0cmluZycgfHwgb3B0cy5vcmlnaW4gaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgICBrZXkgPSBTdHJpbmcob3B0cy5vcmlnaW4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5vcmlnaW4gbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmcgb3IgVVJMLicpXG4gICAgfVxuXG4gICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcblxuICAgIGxldCBkaXNwYXRjaGVyID0gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3B0cy5vcmlnaW4sIHRoaXNba09wdGlvbnNdKVxuICAgICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAgIC5vbignY29ubmVjdCcsIHRoaXNba09uQ29ubmVjdF0pXG4gICAgICAgIC5vbignZGlzY29ubmVjdCcsIHRoaXNba09uRGlzY29ubmVjdF0pXG4gICAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgICB0aGlzW2tDbGllbnRzXS5zZXQoa2V5LCBuZXcgV2Vha1JlZihkaXNwYXRjaGVyKSlcbiAgICAgIHRoaXNba0ZpbmFsaXplcl0ucmVnaXN0ZXIoZGlzcGF0Y2hlciwga2V5KVxuICAgIH1cblxuICAgIHJldHVybiBkaXNwYXRjaGVyLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgY29uc3QgY2xvc2VQcm9taXNlcyA9IFtdXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIGNsb3NlUHJvbWlzZXMucHVzaChjbGllbnQuY2xvc2UoKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChjbG9zZVByb21pc2VzKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgY29uc3QgZGVzdHJveVByb21pc2VzID0gW11cbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgZGVzdHJveVByb21pc2VzLnB1c2goY2xpZW50LmRlc3Ryb3koZXJyKSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudFxuIiwgIi8vIFBvcnRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvOTA3XG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciwgTm90U3VwcG9ydGVkRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVhZGFibGVTdHJlYW1Gcm9tLCB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxubGV0IEJsb2JcblxuY29uc3Qga0NvbnN1bWUgPSBTeW1ib2woJ2tDb25zdW1lJylcbmNvbnN0IGtSZWFkaW5nID0gU3ltYm9sKCdrUmVhZGluZycpXG5jb25zdCBrQm9keSA9IFN5bWJvbCgna0JvZHknKVxuY29uc3Qga0Fib3J0ID0gU3ltYm9sKCdhYm9ydCcpXG5jb25zdCBrQ29udGVudFR5cGUgPSBTeW1ib2woJ2tDb250ZW50VHlwZScpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEJvZHlSZWFkYWJsZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHtcbiAgICByZXN1bWUsXG4gICAgYWJvcnQsXG4gICAgY29udGVudFR5cGUgPSAnJyxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKHRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAvLyBOb2RlIDwgMTZcbiAgICAgIHJldHVybiB0aGlzXG4gICAgfVxuXG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgZW1pdCAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJykge1xuICAgICAgLy8gTm9kZSA8IDE2LjdcbiAgICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSB0cnVlXG4gICAgfSBlbHNlIGlmIChldiA9PT0gJ2Vycm9yJykge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmVycm9yRW1pdHRlZCA9IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmVtaXQoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBvbiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIGFkZExpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9uKGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb2ZmIChldiwgLi4uYXJncykge1xuICAgIGNvbnN0IHJldCA9IHN1cGVyLm9mZihldiwgLi4uYXJncylcbiAgICBpZiAoZXYgPT09ICdkYXRhJyB8fCBldiA9PT0gJ3JlYWRhYmxlJykge1xuICAgICAgdGhpc1trUmVhZGluZ10gPSAoXG4gICAgICAgIHRoaXMubGlzdGVuZXJDb3VudCgnZGF0YScpID4gMCB8fFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ3JlYWRhYmxlJykgPiAwXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiByZXRcbiAgfVxuXG4gIHJlbW92ZUxpc3RlbmVyIChldiwgLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLm9mZihldiwgLi4uYXJncylcbiAgfVxuXG4gIHB1c2ggKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0NvbnN1bWVdICYmIGNodW5rICE9PSBudWxsICYmIHRoaXMucmVhZGFibGVMZW5ndGggPT09IDApIHtcbiAgICAgIGNvbnN1bWVQdXNoKHRoaXNba0NvbnN1bWVdLCBjaHVuaylcbiAgICAgIHJldHVybiB0aGlzW2tSZWFkaW5nXSA/IHN1cGVyLnB1c2goY2h1bmspIDogdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIucHVzaChjaHVuaylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS10ZXh0XG4gIGFzeW5jIHRleHQgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICd0ZXh0JylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1qc29uXG4gIGFzeW5jIGpzb24gKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdqc29uJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ibG9iXG4gIGFzeW5jIGJsb2IgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdibG9iJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1hcnJheWJ1ZmZlclxuICBhc3luYyBhcnJheUJ1ZmZlciAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1mb3JtZGF0YVxuICBhc3luYyBmb3JtRGF0YSAoKSB7XG4gICAgLy8gVE9ETzogSW1wbGVtZW50LlxuICAgIHRocm93IG5ldyBOb3RTdXBwb3J0ZWRFcnJvcigpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keXVzZWRcbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICByZXR1cm4gdXRpbC5pc0Rpc3R1cmJlZCh0aGlzKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHlcbiAgZ2V0IGJvZHkgKCkge1xuICAgIGlmICghdGhpc1trQm9keV0pIHtcbiAgICAgIHRoaXNba0JvZHldID0gUmVhZGFibGVTdHJlYW1Gcm9tKHRoaXMpXG4gICAgICBpZiAodGhpc1trQ29uc3VtZV0pIHtcbiAgICAgICAgLy8gVE9ETzogSXMgdGhpcyB0aGUgYmVzdCB3YXkgdG8gZm9yY2UgYSBsb2NrP1xuICAgICAgICB0aGlzW2tCb2R5XS5nZXRSZWFkZXIoKSAvLyBFbnN1cmUgc3RyZWFtIGlzIGxvY2tlZC5cbiAgICAgICAgYXNzZXJ0KHRoaXNba0JvZHldLmxvY2tlZClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0JvZHldXG4gIH1cblxuICBkdW1wIChvcHRzKSB7XG4gICAgbGV0IGxpbWl0ID0gb3B0cyAmJiBOdW1iZXIuaXNGaW5pdGUob3B0cy5saW1pdCkgPyBvcHRzLmxpbWl0IDogMjYyMTQ0XG4gICAgY29uc3Qgc2lnbmFsID0gb3B0cyAmJiBvcHRzLnNpZ25hbFxuXG4gICAgaWYgKHNpZ25hbCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzaWduYWwgIT09ICdvYmplY3QnIHx8ICEoJ2Fib3J0ZWQnIGluIHNpZ25hbCkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEFib3J0U2lnbmFsJylcbiAgICAgICAgfVxuICAgICAgICB1dGlsLnRocm93SWZBYm9ydGVkKHNpZ25hbClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsb3NlZCkge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKVxuICAgIH1cblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25zdCBzaWduYWxMaXN0ZW5lckNsZWFudXAgPSBzaWduYWxcbiAgICAgICAgPyB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95KClcbiAgICAgICAgfSlcbiAgICAgICAgOiBub29wXG5cbiAgICAgIHRoaXNcbiAgICAgICAgLm9uKCdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBzaWduYWxMaXN0ZW5lckNsZWFudXAoKVxuICAgICAgICAgIGlmIChzaWduYWwgJiYgc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlamVjdChzaWduYWwucmVhc29uIHx8IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJyksIHsgbmFtZTogJ0Fib3J0RXJyb3InIH0pKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAub24oJ2Vycm9yJywgbm9vcClcbiAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKGNodW5rKSB7XG4gICAgICAgICAgbGltaXQgLT0gY2h1bmsubGVuZ3RoXG4gICAgICAgICAgaWYgKGxpbWl0IDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAucmVzdW1lKClcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWxvY2tlZFxuZnVuY3Rpb24gaXNMb2NrZWQgKHNlbGYpIHtcbiAgLy8gQ29uc3VtZSBpcyBhbiBpbXBsaWNpdCBsb2NrLlxuICByZXR1cm4gKHNlbGZba0JvZHldICYmIHNlbGZba0JvZHldLmxvY2tlZCA9PT0gdHJ1ZSkgfHwgc2VsZltrQ29uc3VtZV1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktdW51c2FibGVcbmZ1bmN0aW9uIGlzVW51c2FibGUgKHNlbGYpIHtcbiAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQoc2VsZikgfHwgaXNMb2NrZWQoc2VsZilcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29uc3VtZSAoc3RyZWFtLCB0eXBlKSB7XG4gIGlmIChpc1VudXNhYmxlKHN0cmVhbSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gIH1cblxuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBzdHJlYW1ba0NvbnN1bWVdID0ge1xuICAgICAgdHlwZSxcbiAgICAgIHN0cmVhbSxcbiAgICAgIHJlc29sdmUsXG4gICAgICByZWplY3QsXG4gICAgICBsZW5ndGg6IDAsXG4gICAgICBib2R5OiBbXVxuICAgIH1cblxuICAgIHN0cmVhbVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzW2tDb25zdW1lXS5ib2R5ICE9PSBudWxsKSB7XG4gICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHByb2Nlc3MubmV4dFRpY2soY29uc3VtZVN0YXJ0LCBzdHJlYW1ba0NvbnN1bWVdKVxuICB9KVxufVxuXG5mdW5jdGlvbiBjb25zdW1lU3RhcnQgKGNvbnN1bWUpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgeyBfcmVhZGFibGVTdGF0ZTogc3RhdGUgfSA9IGNvbnN1bWUuc3RyZWFtXG5cbiAgZm9yIChjb25zdCBjaHVuayBvZiBzdGF0ZS5idWZmZXIpIHtcbiAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgfVxuXG4gIGlmIChzdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnN0cmVhbS5vbignZW5kJywgZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3VtZUVuZCh0aGlzW2tDb25zdW1lXSlcbiAgICB9KVxuICB9XG5cbiAgY29uc3VtZS5zdHJlYW0ucmVzdW1lKClcblxuICB3aGlsZSAoY29uc3VtZS5zdHJlYW0ucmVhZCgpICE9IG51bGwpIHtcbiAgICAvLyBMb29wXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoQnVmZmVyLmNvbmNhdChib2R5KSkpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYXJyYXlCdWZmZXInKSB7XG4gICAgICBjb25zdCBkc3QgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG5cbiAgICAgIGxldCBwb3MgPSAwXG4gICAgICBmb3IgKGNvbnN0IGJ1ZiBvZiBib2R5KSB7XG4gICAgICAgIGRzdC5zZXQoYnVmLCBwb3MpXG4gICAgICAgIHBvcyArPSBidWYuYnl0ZUxlbmd0aFxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKGRzdC5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIGlmICghQmxvYikge1xuICAgICAgICBCbG9iID0gcmVxdWlyZSgnYnVmZmVyJykuQmxvYlxuICAgICAgfVxuICAgICAgcmVzb2x2ZShuZXcgQmxvYihib2R5LCB7IHR5cGU6IHN0cmVhbVtrQ29udGVudFR5cGVdIH0pKVxuICAgIH1cblxuICAgIGNvbnN1bWVGaW5pc2goY29uc3VtZSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVQdXNoIChjb25zdW1lLCBjaHVuaykge1xuICBjb25zdW1lLmxlbmd0aCArPSBjaHVuay5sZW5ndGhcbiAgY29uc3VtZS5ib2R5LnB1c2goY2h1bmspXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVGaW5pc2ggKGNvbnN1bWUsIGVycikge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoZXJyKSB7XG4gICAgY29uc3VtZS5yZWplY3QoZXJyKVxuICB9IGVsc2Uge1xuICAgIGNvbnN1bWUucmVzb2x2ZSgpXG4gIH1cblxuICBjb25zdW1lLnR5cGUgPSBudWxsXG4gIGNvbnN1bWUuc3RyZWFtID0gbnVsbFxuICBjb25zdW1lLnJlc29sdmUgPSBudWxsXG4gIGNvbnN1bWUucmVqZWN0ID0gbnVsbFxuICBjb25zdW1lLmxlbmd0aCA9IDBcbiAgY29uc3VtZS5ib2R5ID0gbnVsbFxufVxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7XG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyB0b1VTVlN0cmluZyB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrICh7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9KSB7XG4gIGFzc2VydChib2R5KVxuXG4gIGxldCBjaHVua3MgPSBbXVxuICBsZXQgbGltaXQgPSAwXG5cbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgY2h1bmtzLnB1c2goY2h1bmspXG4gICAgbGltaXQgKz0gY2h1bmsubGVuZ3RoXG4gICAgaWYgKGxpbWl0ID4gMTI4ICogMTAyNCkge1xuICAgICAgY2h1bmtzID0gbnVsbFxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA0IHx8ICFjb250ZW50VHlwZSB8fCAhY2h1bmtzKSB7XG4gICAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ2FwcGxpY2F0aW9uL2pzb24nKSkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UodG9VU1ZTdHJpbmcoQnVmZmVyLmNvbmNhdChjaHVua3MpKSlcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY29udGVudFR5cGUuc3RhcnRzV2l0aCgndGV4dC8nKSkge1xuICAgICAgY29uc3QgcGF5bG9hZCA9IHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSlcbiAgICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycywgcGF5bG9hZCkpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIFByb2Nlc3MgaW4gYSBmYWxsYmFjayBpZiBlcnJvclxuICB9XG5cbiAgcHJvY2Vzcy5uZXh0VGljayhjYWxsYmFjaywgbmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKGBSZXNwb25zZSBzdGF0dXMgY29kZSAke3N0YXR1c0NvZGV9JHtzdGF0dXNNZXNzYWdlID8gYDogJHtzdGF0dXNNZXNzYWdlfWAgOiAnJ31gLCBzdGF0dXNDb2RlLCBoZWFkZXJzKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9XG4iLCAiY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IGtMaXN0ZW5lciA9IFN5bWJvbCgna0xpc3RlbmVyJylcbmNvbnN0IGtTaWduYWwgPSBTeW1ib2woJ2tTaWduYWwnKVxuXG5mdW5jdGlvbiBhYm9ydCAoc2VsZikge1xuICBpZiAoc2VsZi5hYm9ydCkge1xuICAgIHNlbGYuYWJvcnQoKVxuICB9IGVsc2Uge1xuICAgIHNlbGYub25FcnJvcihuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFkZFNpZ25hbCAoc2VsZiwgc2lnbmFsKSB7XG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcblxuICBpZiAoIXNpZ25hbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgYWJvcnQoc2VsZilcbiAgICByZXR1cm5cbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBzaWduYWxcbiAgc2VsZltrTGlzdGVuZXJdID0gKCkgPT4ge1xuICAgIGFib3J0KHNlbGYpXG4gIH1cblxuICBhZGRBYm9ydExpc3RlbmVyKHNlbGZba1NpZ25hbF0sIHNlbGZba0xpc3RlbmVyXSlcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU2lnbmFsIChzZWxmKSB7XG4gIGlmICghc2VsZltrU2lnbmFsXSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKCdyZW1vdmVFdmVudExpc3RlbmVyJyBpbiBzZWxmW2tTaWduYWxdKSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfSBlbHNlIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIHNlbGZba0xpc3RlbmVyXSlcbiAgfVxuXG4gIHNlbGZba1NpZ25hbF0gPSBudWxsXG4gIHNlbGZba0xpc3RlbmVyXSA9IG51bGxcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGFkZFNpZ25hbCxcbiAgcmVtb3ZlU2lnbmFsXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlYWRhYmxlID0gcmVxdWlyZSgnLi9yZWFkYWJsZScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBSZXF1ZXN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yLCBoaWdoV2F0ZXJNYXJrIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAoaGlnaFdhdGVyTWFyayAmJiAodHlwZW9mIGhpZ2hXYXRlck1hcmsgIT09ICdudW1iZXInIHx8IGhpZ2hXYXRlck1hcmsgPCAwKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGlnaFdhdGVyTWFyaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9SRVFVRVNUJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLnRyYWlsZXJzID0ge31cbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yXG4gICAgdGhpcy5oaWdoV2F0ZXJNYXJrID0gaGlnaFdhdGVyTWFya1xuXG4gICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgIGJvZHkub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBhYm9ydCwgY29udGV4dCwgcmVzcG9uc2VIZWFkZXJzLCBoaWdoV2F0ZXJNYXJrIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gcGFyc2VkSGVhZGVyc1snY29udGVudC10eXBlJ11cbiAgICBjb25zdCBib2R5ID0gbmV3IFJlYWRhYmxlKHsgcmVzdW1lLCBhYm9ydCwgY29udGVudFR5cGUsIGhpZ2hXYXRlck1hcmsgfSlcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSBib2R5XG4gICAgaWYgKGNhbGxiYWNrICE9PSBudWxsKSB7XG4gICAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICAgIHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIG51bGwsIHtcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgdHJhaWxlcnM6IHRoaXMudHJhaWxlcnMsXG4gICAgICAgICAgb3BhcXVlLFxuICAgICAgICAgIGJvZHksXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG5cbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAvLyBUT0RPOiBEb2VzIHRoaXMgbmVlZCBxdWV1ZU1pY3JvdGFzaz9cbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgLy8gRW5zdXJlIGFsbCBxdWV1ZWQgaGFuZGxlcnMgYXJlIGludm9rZWQgYmVmb3JlIGRlc3Ryb3lpbmcgcmVzLlxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcmVxdWVzdFxubW9kdWxlLmV4cG9ydHMuUmVxdWVzdEhhbmRsZXIgPSBSZXF1ZXN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGZpbmlzaGVkLCBQYXNzVGhyb3VnaCB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBTdHJlYW1IYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBmYWN0b3J5LCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZmFjdG9yeScpXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgICAgfVxuXG4gICAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25JbmZvIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgc3VwZXIoJ1VORElDSV9TVFJFQU0nKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuZmFjdG9yeSA9IGZhY3RvcnlcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLnJlcyA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLnRyYWlsZXJzID0gbnVsbFxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgfHwgZmFsc2VcblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICBib2R5Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IHsgZmFjdG9yeSwgb3BhcXVlLCBjb250ZXh0LCBjYWxsYmFjaywgcmVzcG9uc2VIZWFkZXJzIH0gPSB0aGlzXG5cbiAgICBjb25zdCBoZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLmZhY3RvcnkgPSBudWxsXG5cbiAgICBsZXQgcmVzXG5cbiAgICBpZiAodGhpcy50aHJvd09uRXJyb3IgJiYgc3RhdHVzQ29kZSA+PSA0MDApIHtcbiAgICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlZEhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgICByZXMgPSBuZXcgUGFzc1Rocm91Z2goKVxuXG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrLCBudWxsLFxuICAgICAgICB7IGNhbGxiYWNrLCBib2R5OiByZXMsIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH1cbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGZhY3RvcnkgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlcyA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGZhY3RvcnksIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuXG4gICAgICBpZiAoXG4gICAgICAgICFyZXMgfHxcbiAgICAgICAgdHlwZW9mIHJlcy53cml0ZSAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgcmVzLmVuZCAhPT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgICB0eXBlb2YgcmVzLm9uICE9PSAnZnVuY3Rpb24nXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKCdleHBlY3RlZCBXcml0YWJsZScpXG4gICAgICB9XG5cbiAgICAgIC8vIFRPRE86IEF2b2lkIGZpbmlzaGVkLiBJdCByZWdpc3RlcnMgYW4gdW5uZWNlc3NhcnkgYW1vdW50IG9mIGxpc3RlbmVycy5cbiAgICAgIGZpbmlzaGVkKHJlcywgeyByZWFkYWJsZTogZmFsc2UgfSwgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IGNhbGxiYWNrLCByZXMsIG9wYXF1ZSwgdHJhaWxlcnMsIGFib3J0IH0gPSB0aGlzXG5cbiAgICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICAgIGlmIChlcnIgfHwgIXJlcy5yZWFkYWJsZSkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIgfHwgbnVsbCwgeyBvcGFxdWUsIHRyYWlsZXJzIH0pXG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGFib3J0KClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICByZXMub24oJ2RyYWluJywgcmVzdW1lKVxuXG4gICAgdGhpcy5yZXMgPSByZXNcblxuICAgIGNvbnN0IG5lZWREcmFpbiA9IHJlcy53cml0YWJsZU5lZWREcmFpbiAhPT0gdW5kZWZpbmVkXG4gICAgICA/IHJlcy53cml0YWJsZU5lZWREcmFpblxuICAgICAgOiByZXMuX3dyaXRhYmxlU3RhdGUgJiYgcmVzLl93cml0YWJsZVN0YXRlLm5lZWREcmFpblxuXG4gICAgcmV0dXJuIG5lZWREcmFpbiAhPT0gdHJ1ZVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZXR1cm4gcmVzID8gcmVzLndyaXRlKGNodW5rKSA6IHRydWVcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKCFyZXMpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudHJhaWxlcnMgPSB1dGlsLnBhcnNlSGVhZGVycyh0cmFpbGVycylcblxuICAgIHJlcy5lbmQoKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBvcGFxdWUsIGJvZHkgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgaWYgKHJlcykge1xuICAgICAgdGhpcy5yZXMgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgfSBlbHNlIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGJvZHkpIHtcbiAgICAgIHRoaXMuYm9keSA9IG51bGxcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHN0cmVhbSAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgc3RyZWFtLmNhbGwodGhpcywgb3B0cywgZmFjdG9yeSwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFN0cmVhbUhhbmRsZXIob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJlYW1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBSZWFkYWJsZSxcbiAgRHVwbGV4LFxuICBQYXNzVGhyb3VnaFxufSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB7IGFkZFNpZ25hbCwgcmVtb3ZlU2lnbmFsIH0gPSByZXF1aXJlKCcuL2Fib3J0LXNpZ25hbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG5jb25zdCBrUmVzdW1lID0gU3ltYm9sKCdyZXN1bWUnKVxuXG5jbGFzcyBQaXBlbGluZVJlcXVlc3QgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG5cbiAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIGNvbnN0IHsgW2tSZXN1bWVdOiByZXN1bWUgfSA9IHRoaXNcblxuICAgIGlmIChyZXN1bWUpIHtcbiAgICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gICAgICByZXN1bWUoKVxuICAgIH1cbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fcmVhZCgpXG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmVSZXNwb25zZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHJlc3VtZSkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcbiAgICB0aGlzW2tSZXN1bWVdID0gcmVzdW1lXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgdGhpc1trUmVzdW1lXSgpXG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhhbmRsZXInKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9QSVBFTElORScpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG5cbiAgICB0aGlzLnJlcSA9IG5ldyBQaXBlbGluZVJlcXVlc3QoKS5vbignZXJyb3InLCB1dGlsLm5vcClcblxuICAgIHRoaXMucmV0ID0gbmV3IER1cGxleCh7XG4gICAgICByZWFkYWJsZU9iamVjdE1vZGU6IG9wdHMub2JqZWN0TW9kZSxcbiAgICAgIGF1dG9EZXN0cm95OiB0cnVlLFxuICAgICAgcmVhZDogKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoYm9keSAmJiBib2R5LnJlc3VtZSkge1xuICAgICAgICAgIGJvZHkucmVzdW1lKClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIHdyaXRlOiAoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAgIGlmIChyZXEucHVzaChjaHVuaywgZW5jb2RpbmcpIHx8IHJlcS5fcmVhZGFibGVTdGF0ZS5kZXN0cm95ZWQpIHtcbiAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVxW2tSZXN1bWVdID0gY2FsbGJhY2tcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGRlc3Ryb3k6IChlcnIsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgYm9keSwgcmVxLCByZXMsIHJldCwgYWJvcnQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIWVyciAmJiAhcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYWJvcnQgJiYgZXJyKSB7XG4gICAgICAgICAgYWJvcnQoKVxuICAgICAgICB9XG5cbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG5cbiAgICAgICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgfVxuICAgIH0pLm9uKCdwcmVmaW5pc2gnLCAoKSA9PiB7XG4gICAgICBjb25zdCB7IHJlcSB9ID0gdGhpc1xuXG4gICAgICAvLyBOb2RlIDwgMTUgZG9lcyBub3QgY2FsbCBfZmluYWwgaW4gc2FtZSB0aWNrLlxuICAgICAgcmVxLnB1c2gobnVsbClcbiAgICB9KVxuXG4gICAgdGhpcy5yZXMgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGNvbnN0IHsgcmV0LCByZXMgfSA9IHRoaXNcblxuICAgIGFzc2VydCghcmVzLCAncGlwZWxpbmUgY2Fubm90IGJlIHJldHJpZWQnKVxuXG4gICAgaWYgKHJldC5kZXN0cm95ZWQpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSkge1xuICAgIGNvbnN0IHsgb3BhcXVlLCBoYW5kbGVyLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5yZXMgPSBuZXcgUGlwZWxpbmVSZXNwb25zZShyZXN1bWUpXG5cbiAgICBsZXQgYm9keVxuICAgIHRyeSB7XG4gICAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgYm9keSA9IHRoaXMucnVuSW5Bc3luY1Njb3BlKGhhbmRsZXIsIG51bGwsIHtcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgaGVhZGVycyxcbiAgICAgICAgb3BhcXVlLFxuICAgICAgICBib2R5OiB0aGlzLnJlcyxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMucmVzLm9uKCdlcnJvcicsIHV0aWwubm9wKVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgaWYgKCFib2R5IHx8IHR5cGVvZiBib2R5Lm9uICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZFJldHVyblZhbHVlRXJyb3IoJ2V4cGVjdGVkIFJlYWRhYmxlJylcbiAgICB9XG5cbiAgICBib2R5XG4gICAgICAub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQsIGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5wdXNoKGNodW5rKSAmJiBib2R5LnBhdXNlKSB7XG4gICAgICAgICAgYm9keS5wYXVzZSgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICByZXQucHVzaChudWxsKVxuICAgICAgfSlcbiAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kZWQpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmV0dXJuIHJlcy5wdXNoKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJlcy5wdXNoKG51bGwpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gcGlwZWxpbmUgKG9wdHMsIGhhbmRsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCBwaXBlbGluZUhhbmRsZXIgPSBuZXcgUGlwZWxpbmVIYW5kbGVyKG9wdHMsIGhhbmRsZXIpXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIGJvZHk6IHBpcGVsaW5lSGFuZGxlci5yZXEgfSwgcGlwZWxpbmVIYW5kbGVyKVxuICAgIHJldHVybiBwaXBlbGluZUhhbmRsZXIucmV0XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHJldHVybiBuZXcgUGFzc1Rocm91Z2goKS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBpcGVsaW5lXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICghdGhpcy5jYWxsYmFjaykge1xuICAgICAgdGhyb3cgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHN0YXR1c0NvZGUsIDEwMSlcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB1cGdyYWRlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuXG5jbGFzcyBDb25uZWN0SGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgb3BhcXVlLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBzdXBlcignVU5ESUNJX0NPTk5FQ1QnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIGNvbm5lY3QnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcblxuICAgIGxldCBoZWFkZXJzID0gcmF3SGVhZGVyc1xuICAgIC8vIEluZGljYXRlcyBpcyBhbiBIVFRQMlNlc3Npb25cbiAgICBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIH1cblxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBzdGF0dXNDb2RlLFxuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbm5lY3QgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGNvbm5lY3QuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29ubmVjdEhhbmRsZXIgPSBuZXcgQ29ubmVjdEhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7IC4uLm9wdHMsIG1ldGhvZDogJ0NPTk5FQ1QnIH0sIGNvbm5lY3RIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cyAmJiBvcHRzLm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25uZWN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSByZXF1aXJlKCcuL2FwaS1yZXF1ZXN0Jylcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IHJlcXVpcmUoJy4vYXBpLXN0cmVhbScpXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IHJlcXVpcmUoJy4vYXBpLXBpcGVsaW5lJylcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSByZXF1aXJlKCcuL2FwaS11cGdyYWRlJylcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSByZXF1aXJlKCcuL2FwaS1jb25uZWN0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQWdlbnQ6IFN5bWJvbCgnYWdlbnQnKSxcbiAga09wdGlvbnM6IFN5bWJvbCgnb3B0aW9ucycpLFxuICBrRmFjdG9yeTogU3ltYm9sKCdmYWN0b3J5JyksXG4gIGtEaXNwYXRjaGVzOiBTeW1ib2woJ2Rpc3BhdGNoZXMnKSxcbiAga0Rpc3BhdGNoS2V5OiBTeW1ib2woJ2Rpc3BhdGNoIGtleScpLFxuICBrRGVmYXVsdEhlYWRlcnM6IFN5bWJvbCgnZGVmYXVsdCBoZWFkZXJzJyksXG4gIGtEZWZhdWx0VHJhaWxlcnM6IFN5bWJvbCgnZGVmYXVsdCB0cmFpbGVycycpLFxuICBrQ29udGVudExlbmd0aDogU3ltYm9sKCdjb250ZW50IGxlbmd0aCcpLFxuICBrTW9ja0FnZW50OiBTeW1ib2woJ21vY2sgYWdlbnQnKSxcbiAga01vY2tBZ2VudFNldDogU3ltYm9sKCdtb2NrIGFnZW50IHNldCcpLFxuICBrTW9ja0FnZW50R2V0OiBTeW1ib2woJ21vY2sgYWdlbnQgZ2V0JyksXG4gIGtNb2NrRGlzcGF0Y2g6IFN5bWJvbCgnbW9jayBkaXNwYXRjaCcpLFxuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga09yaWdpbmFsQ2xvc2U6IFN5bWJvbCgnb3JpZ2luYWwgYWdlbnQgY2xvc2UnKSxcbiAga09yaWdpbjogU3ltYm9sKCdvcmlnaW4nKSxcbiAga0lzTW9ja0FjdGl2ZTogU3ltYm9sKCdpcyBtb2NrIGFjdGl2ZScpLFxuICBrTmV0Q29ubmVjdDogU3ltYm9sKCduZXQgY29ubmVjdCcpLFxuICBrR2V0TmV0Q29ubmVjdDogU3ltYm9sKCdnZXQgbmV0IGNvbm5lY3QnKSxcbiAga0Nvbm5lY3RlZDogU3ltYm9sKCdjb25uZWN0ZWQnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1vY2tOb3RNYXRjaGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vbW9jay1lcnJvcnMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtPcmlnaW4sXG4gIGtHZXROZXRDb25uZWN0XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBidWlsZFVSTCwgbm9wIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3Qge1xuICB0eXBlczoge1xuICAgIGlzUHJvbWlzZVxuICB9XG59ID0gcmVxdWlyZSgndXRpbCcpXG5cbmZ1bmN0aW9uIG1hdGNoVmFsdWUgKG1hdGNoLCB2YWx1ZSkge1xuICBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBtYXRjaCA9PT0gdmFsdWVcbiAgfVxuICBpZiAobWF0Y2ggaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICByZXR1cm4gbWF0Y2gudGVzdCh2YWx1ZSlcbiAgfVxuICBpZiAodHlwZW9mIG1hdGNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIG1hdGNoKHZhbHVlKSA9PT0gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBsb3dlckNhc2VFbnRyaWVzIChoZWFkZXJzKSB7XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMoaGVhZGVycykubWFwKChbaGVhZGVyTmFtZSwgaGVhZGVyVmFsdWVdKSA9PiB7XG4gICAgICByZXR1cm4gW2hlYWRlck5hbWUudG9Mb2NhbGVMb3dlckNhc2UoKSwgaGVhZGVyVmFsdWVdXG4gICAgfSlcbiAgKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi9pbmRleCcpLkhlYWRlcnN8c3RyaW5nW118UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICovXG5mdW5jdGlvbiBnZXRIZWFkZXJCeU5hbWUgKGhlYWRlcnMsIGtleSkge1xuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKGhlYWRlcnNbaV0udG9Mb2NhbGVMb3dlckNhc2UoKSA9PT0ga2V5LnRvTG9jYWxlTG93ZXJDYXNlKCkpIHtcbiAgICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZFxuICB9IGVsc2UgaWYgKHR5cGVvZiBoZWFkZXJzLmdldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBoZWFkZXJzLmdldChrZXkpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycylba2V5LnRvTG9jYWxlTG93ZXJDYXNlKCldXG4gIH1cbn1cblxuLyoqIEBwYXJhbSB7c3RyaW5nW119IGhlYWRlcnMgKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVyc0Zyb21BcnJheSAoaGVhZGVycykgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICBjb25zdCBjbG9uZSA9IGhlYWRlcnMuc2xpY2UoKVxuICBjb25zdCBlbnRyaWVzID0gW11cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGNsb25lLmxlbmd0aDsgaW5kZXggKz0gMikge1xuICAgIGVudHJpZXMucHVzaChbY2xvbmVbaW5kZXhdLCBjbG9uZVtpbmRleCArIDFdXSlcbiAgfVxuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKGVudHJpZXMpXG59XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVycyAobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKSB7XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgeyAvLyBmZXRjaCBIZWFkZXJzTGlzdFxuICAgICAgaGVhZGVycyA9IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShoZWFkZXJzKVxuICAgIH1cbiAgICByZXR1cm4gbW9ja0Rpc3BhdGNoLmhlYWRlcnMoaGVhZGVycyA/IGxvd2VyQ2FzZUVudHJpZXMoaGVhZGVycykgOiB7fSlcbiAgfVxuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHR5cGVvZiBoZWFkZXJzICE9PSAnb2JqZWN0JyB8fCB0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGNvbnN0IFttYXRjaEhlYWRlck5hbWUsIG1hdGNoSGVhZGVyVmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKG1vY2tEaXNwYXRjaC5oZWFkZXJzKSkge1xuICAgIGNvbnN0IGhlYWRlclZhbHVlID0gZ2V0SGVhZGVyQnlOYW1lKGhlYWRlcnMsIG1hdGNoSGVhZGVyTmFtZSlcblxuICAgIGlmICghbWF0Y2hWYWx1ZShtYXRjaEhlYWRlclZhbHVlLCBoZWFkZXJWYWx1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBzYWZlVXJsIChwYXRoKSB7XG4gIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcGF0aFNlZ21lbnRzID0gcGF0aC5zcGxpdCgnPycpXG5cbiAgaWYgKHBhdGhTZWdtZW50cy5sZW5ndGggIT09IDIpIHtcbiAgICByZXR1cm4gcGF0aFxuICB9XG5cbiAgY29uc3QgcXAgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHBhdGhTZWdtZW50cy5wb3AoKSlcbiAgcXAuc29ydCgpXG4gIHJldHVybiBbLi4ucGF0aFNlZ21lbnRzLCBxcC50b1N0cmluZygpXS5qb2luKCc/Jylcbn1cblxuZnVuY3Rpb24gbWF0Y2hLZXkgKG1vY2tEaXNwYXRjaCwgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMgfSkge1xuICBjb25zdCBwYXRoTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5wYXRoLCBwYXRoKVxuICBjb25zdCBtZXRob2RNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLm1ldGhvZCwgbWV0aG9kKVxuICBjb25zdCBib2R5TWF0Y2ggPSB0eXBlb2YgbW9ja0Rpc3BhdGNoLmJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2guYm9keSwgYm9keSkgOiB0cnVlXG4gIGNvbnN0IGhlYWRlcnNNYXRjaCA9IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpXG4gIHJldHVybiBwYXRoTWF0Y2ggJiYgbWV0aG9kTWF0Y2ggJiYgYm9keU1hdGNoICYmIGhlYWRlcnNNYXRjaFxufVxuXG5mdW5jdGlvbiBnZXRSZXNwb25zZURhdGEgKGRhdGEpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihkYXRhKSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAodHlwZW9mIGRhdGEgPT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGRhdGEpXG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGdldE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBiYXNlUGF0aCA9IGtleS5xdWVyeSA/IGJ1aWxkVVJMKGtleS5wYXRoLCBrZXkucXVlcnkpIDoga2V5LnBhdGhcbiAgY29uc3QgcmVzb2x2ZWRQYXRoID0gdHlwZW9mIGJhc2VQYXRoID09PSAnc3RyaW5nJyA/IHNhZmVVcmwoYmFzZVBhdGgpIDogYmFzZVBhdGhcblxuICAvLyBNYXRjaCBwYXRoXG4gIGxldCBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgY29uc3VtZWQgfSkgPT4gIWNvbnN1bWVkKS5maWx0ZXIoKHsgcGF0aCB9KSA9PiBtYXRjaFZhbHVlKHNhZmVVcmwocGF0aCksIHJlc29sdmVkUGF0aCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggbWV0aG9kXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgbWV0aG9kIH0pID0+IG1hdGNoVmFsdWUobWV0aG9kLCBrZXkubWV0aG9kKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgbWV0aG9kICcke2tleS5tZXRob2R9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBib2R5XG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKHsgYm9keSB9KSA9PiB0eXBlb2YgYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKGJvZHksIGtleS5ib2R5KSA6IHRydWUpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIGJvZHkgJyR7a2V5LmJvZHl9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBoZWFkZXJzXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKG1vY2tEaXNwYXRjaCkgPT4gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwga2V5LmhlYWRlcnMpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBoZWFkZXJzICcke3R5cGVvZiBrZXkuaGVhZGVycyA9PT0gJ29iamVjdCcgPyBKU09OLnN0cmluZ2lmeShrZXkuaGVhZGVycykgOiBrZXkuaGVhZGVyc30nYClcbiAgfVxuXG4gIHJldHVybiBtYXRjaGVkTW9ja0Rpc3BhdGNoZXNbMF1cbn1cblxuZnVuY3Rpb24gYWRkTW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5LCBkYXRhKSB7XG4gIGNvbnN0IGJhc2VEYXRhID0geyB0aW1lc0ludm9rZWQ6IDAsIHRpbWVzOiAxLCBwZXJzaXN0OiBmYWxzZSwgY29uc3VtZWQ6IGZhbHNlIH1cbiAgY29uc3QgcmVwbHlEYXRhID0gdHlwZW9mIGRhdGEgPT09ICdmdW5jdGlvbicgPyB7IGNhbGxiYWNrOiBkYXRhIH0gOiB7IC4uLmRhdGEgfVxuICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSB7IC4uLmJhc2VEYXRhLCAuLi5rZXksIHBlbmRpbmc6IHRydWUsIGRhdGE6IHsgZXJyb3I6IG51bGwsIC4uLnJlcGx5RGF0YSB9IH1cbiAgbW9ja0Rpc3BhdGNoZXMucHVzaChuZXdNb2NrRGlzcGF0Y2gpXG4gIHJldHVybiBuZXdNb2NrRGlzcGF0Y2hcbn1cblxuZnVuY3Rpb24gZGVsZXRlTW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGluZGV4ID0gbW9ja0Rpc3BhdGNoZXMuZmluZEluZGV4KGRpc3BhdGNoID0+IHtcbiAgICBpZiAoIWRpc3BhdGNoLmNvbnN1bWVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIG1hdGNoS2V5KGRpc3BhdGNoLCBrZXkpXG4gIH0pXG4gIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICBtb2NrRGlzcGF0Y2hlcy5zcGxpY2UoaW5kZXgsIDEpXG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRLZXkgKG9wdHMpIHtcbiAgY29uc3QgeyBwYXRoLCBtZXRob2QsIGJvZHksIGhlYWRlcnMsIHF1ZXJ5IH0gPSBvcHRzXG4gIHJldHVybiB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVLZXlWYWx1ZXMgKGRhdGEpIHtcbiAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKGRhdGEpLnJlZHVjZSgoa2V5VmFsdWVQYWlycywgW2tleSwgdmFsdWVdKSA9PiBbXG4gICAgLi4ua2V5VmFsdWVQYWlycyxcbiAgICBCdWZmZXIuZnJvbShgJHtrZXl9YCksXG4gICAgQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoeCA9PiBCdWZmZXIuZnJvbShgJHt4fWApKSA6IEJ1ZmZlci5mcm9tKGAke3ZhbHVlfWApXG4gIF0sIFtdKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9TdGF0dXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNDb2RlXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXR1c1RleHQgKHN0YXR1c0NvZGUpIHtcbiAgcmV0dXJuIFNUQVRVU19DT0RFU1tzdGF0dXNDb2RlXSB8fCAndW5rbm93bidcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UgKGJvZHkpIHtcbiAgY29uc3QgYnVmZmVycyA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgZGF0YSBvZiBib2R5KSB7XG4gICAgYnVmZmVycy5wdXNoKGRhdGEpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmZmVycykudG9TdHJpbmcoJ3V0ZjgnKVxufVxuXG4vKipcbiAqIE1vY2sgZGlzcGF0Y2ggZnVuY3Rpb24gdXNlZCB0byBzaW11bGF0ZSB1bmRpY2kgZGlzcGF0Y2hlc1xuICovXG5mdW5jdGlvbiBtb2NrRGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgLy8gR2V0IG1vY2sgZGlzcGF0Y2ggZnJvbSBidWlsdCBrZXlcbiAgY29uc3Qga2V5ID0gYnVpbGRLZXkob3B0cylcbiAgY29uc3QgbW9ja0Rpc3BhdGNoID0gZ2V0TW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCBrZXkpXG5cbiAgbW9ja0Rpc3BhdGNoLnRpbWVzSW52b2tlZCsrXG5cbiAgLy8gSGVyZSdzIHdoZXJlIHdlIHJlc29sdmUgYSBjYWxsYmFjayBpZiBhIGNhbGxiYWNrIGlzIHByZXNlbnQgZm9yIHRoZSBkaXNwYXRjaCBkYXRhLlxuICBpZiAobW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2spIHtcbiAgICBtb2NrRGlzcGF0Y2guZGF0YSA9IHsgLi4ubW9ja0Rpc3BhdGNoLmRhdGEsIC4uLm1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKG9wdHMpIH1cbiAgfVxuXG4gIC8vIFBhcnNlIG1vY2tEaXNwYXRjaCBkYXRhXG4gIGNvbnN0IHsgZGF0YTogeyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycywgZXJyb3IgfSwgZGVsYXksIHBlcnNpc3QgfSA9IG1vY2tEaXNwYXRjaFxuICBjb25zdCB7IHRpbWVzSW52b2tlZCwgdGltZXMgfSA9IG1vY2tEaXNwYXRjaFxuXG4gIC8vIElmIGl0J3MgdXNlZCB1cCBhbmQgbm90IHBlcnNpc3RlbnQsIG1hcmsgYXMgY29uc3VtZWRcbiAgbW9ja0Rpc3BhdGNoLmNvbnN1bWVkID0gIXBlcnNpc3QgJiYgdGltZXNJbnZva2VkID49IHRpbWVzXG4gIG1vY2tEaXNwYXRjaC5wZW5kaW5nID0gdGltZXNJbnZva2VkIDwgdGltZXNcblxuICAvLyBJZiBzcGVjaWZpZWQsIHRyaWdnZXIgZGlzcGF0Y2ggZXJyb3JcbiAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCBrZXkpXG4gICAgaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBIYW5kbGUgdGhlIHJlcXVlc3Qgd2l0aCBhIGRlbGF5IGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZVJlcGx5KHRoaXNba0Rpc3BhdGNoZXNdKVxuICAgIH0sIGRlbGF5KVxuICB9IGVsc2Uge1xuICAgIGhhbmRsZVJlcGx5KHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmVwbHkgKG1vY2tEaXNwYXRjaGVzLCBfZGF0YSA9IGRhdGEpIHtcbiAgICAvLyBmZXRjaCdzIEhlYWRlcnNMaXN0IGlzIGEgMUQgc3RyaW5nIGFycmF5XG4gICAgY29uc3Qgb3B0c0hlYWRlcnMgPSBBcnJheS5pc0FycmF5KG9wdHMuaGVhZGVycylcbiAgICAgID8gYnVpbGRIZWFkZXJzRnJvbUFycmF5KG9wdHMuaGVhZGVycylcbiAgICAgIDogb3B0cy5oZWFkZXJzXG4gICAgY29uc3QgYm9keSA9IHR5cGVvZiBfZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBfZGF0YSh7IC4uLm9wdHMsIGhlYWRlcnM6IG9wdHNIZWFkZXJzIH0pXG4gICAgICA6IF9kYXRhXG5cbiAgICAvLyB1dGlsLnR5cGVzLmlzUHJvbWlzZSBpcyBsaWtlbHkgbmVlZGVkIGZvciBqZXN0LlxuICAgIGlmIChpc1Byb21pc2UoYm9keSkpIHtcbiAgICAgIC8vIElmIGhhbmRsZVJlcGx5IGlzIGFzeW5jaHJvbm91cywgdGhyb3dpbmcgYW4gZXJyb3JcbiAgICAgIC8vIGluIHRoZSBjYWxsYmFjayB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSwgcmF0aGVyIHRoYW5cbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdGhyb3cgdGhlIGVycm9yLCB3aGljaCBicmVha3Mgc29tZSB0ZXN0cy5cbiAgICAgIC8vIFJhdGhlciwgd2Ugd2FpdCBmb3IgdGhlIGNhbGxiYWNrIHRvIHJlc29sdmUgaWYgaXQgaXMgYVxuICAgICAgLy8gcHJvbWlzZSwgYW5kIHRoZW4gcmUtcnVuIGhhbmRsZVJlcGx5IHdpdGggdGhlIG5ldyBib2R5LlxuICAgICAgYm9keS50aGVuKChuZXdEYXRhKSA9PiBoYW5kbGVSZXBseShtb2NrRGlzcGF0Y2hlcywgbmV3RGF0YSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoYm9keSlcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBnZW5lcmF0ZUtleVZhbHVlcyhoZWFkZXJzKVxuICAgIGNvbnN0IHJlc3BvbnNlVHJhaWxlcnMgPSBnZW5lcmF0ZUtleVZhbHVlcyh0cmFpbGVycylcblxuICAgIGhhbmRsZXIuYWJvcnQgPSBub3BcbiAgICBoYW5kbGVyLm9uSGVhZGVycyhzdGF0dXNDb2RlLCByZXNwb25zZUhlYWRlcnMsIHJlc3VtZSwgZ2V0U3RhdHVzVGV4dChzdGF0dXNDb2RlKSlcbiAgICBoYW5kbGVyLm9uRGF0YShCdWZmZXIuZnJvbShyZXNwb25zZURhdGEpKVxuICAgIGhhbmRsZXIub25Db21wbGV0ZShyZXNwb25zZVRyYWlsZXJzKVxuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaChtb2NrRGlzcGF0Y2hlcywga2V5KVxuICB9XG5cbiAgZnVuY3Rpb24gcmVzdW1lICgpIHt9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrRGlzcGF0Y2ggKCkge1xuICBjb25zdCBhZ2VudCA9IHRoaXNba01vY2tBZ2VudF1cbiAgY29uc3Qgb3JpZ2luID0gdGhpc1trT3JpZ2luXVxuICBjb25zdCBvcmlnaW5hbERpc3BhdGNoID0gdGhpc1trT3JpZ2luYWxEaXNwYXRjaF1cblxuICByZXR1cm4gZnVuY3Rpb24gZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoYWdlbnQuaXNNb2NrQWN0aXZlKSB7XG4gICAgICB0cnkge1xuICAgICAgICBtb2NrRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yIGluc3RhbmNlb2YgTW9ja05vdE1hdGNoZWRFcnJvcikge1xuICAgICAgICAgIGNvbnN0IG5ldENvbm5lY3QgPSBhZ2VudFtrR2V0TmV0Q29ubmVjdF0oKVxuICAgICAgICAgIGlmIChuZXRDb25uZWN0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgZGlzYWJsZWQpYClcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoZWNrTmV0Q29ubmVjdChuZXRDb25uZWN0LCBvcmlnaW4pKSB7XG4gICAgICAgICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYCR7ZXJyb3IubWVzc2FnZX06IHN1YnNlcXVlbnQgcmVxdWVzdCB0byBvcmlnaW4gJHtvcmlnaW59IHdhcyBub3QgYWxsb3dlZCAobmV0LmNvbm5lY3QgaXMgbm90IGVuYWJsZWQgZm9yIHRoaXMgb3JpZ2luKWApXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRocm93IGVycm9yXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNoZWNrTmV0Q29ubmVjdCAobmV0Q29ubmVjdCwgb3JpZ2luKSB7XG4gIGNvbnN0IHVybCA9IG5ldyBVUkwob3JpZ2luKVxuICBpZiAobmV0Q29ubmVjdCA9PT0gdHJ1ZSkge1xuICAgIHJldHVybiB0cnVlXG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShuZXRDb25uZWN0KSAmJiBuZXRDb25uZWN0LnNvbWUoKG1hdGNoZXIpID0+IG1hdGNoVmFsdWUobWF0Y2hlciwgdXJsLmhvc3QpKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja09wdGlvbnMgKG9wdHMpIHtcbiAgaWYgKG9wdHMpIHtcbiAgICBjb25zdCB7IGFnZW50LCAuLi5tb2NrT3B0aW9ucyB9ID0gb3B0c1xuICAgIHJldHVybiBtb2NrT3B0aW9uc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSZXNwb25zZURhdGEsXG4gIGdldE1vY2tEaXNwYXRjaCxcbiAgYWRkTW9ja0Rpc3BhdGNoLFxuICBkZWxldGVNb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkS2V5LFxuICBnZW5lcmF0ZUtleVZhbHVlcyxcbiAgbWF0Y2hWYWx1ZSxcbiAgZ2V0UmVzcG9uc2UsXG4gIGdldFN0YXR1c1RleHQsXG4gIG1vY2tEaXNwYXRjaCxcbiAgYnVpbGRNb2NrRGlzcGF0Y2gsXG4gIGNoZWNrTmV0Q29ubmVjdCxcbiAgYnVpbGRNb2NrT3B0aW9ucyxcbiAgZ2V0SGVhZGVyQnlOYW1lXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZ2V0UmVzcG9uc2VEYXRhLCBidWlsZEtleSwgYWRkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga0Rpc3BhdGNoS2V5LFxuICBrRGVmYXVsdEhlYWRlcnMsXG4gIGtEZWZhdWx0VHJhaWxlcnMsXG4gIGtDb250ZW50TGVuZ3RoLFxuICBrTW9ja0Rpc3BhdGNoXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuLyoqXG4gKiBEZWZpbmVzIHRoZSBzY29wZSBBUEkgZm9yIGFuIGludGVyY2VwdG9yIHJlcGx5XG4gKi9cbmNsYXNzIE1vY2tTY29wZSB7XG4gIGNvbnN0cnVjdG9yIChtb2NrRGlzcGF0Y2gpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdID0gbW9ja0Rpc3BhdGNoXG4gIH1cblxuICAvKipcbiAgICogRGVsYXkgYSByZXBseSBieSBhIHNldCBhbW91bnQgaW4gbXMuXG4gICAqL1xuICBkZWxheSAod2FpdEluTXMpIHtcbiAgICBpZiAodHlwZW9mIHdhaXRJbk1zICE9PSAnbnVtYmVyJyB8fCAhTnVtYmVyLmlzSW50ZWdlcih3YWl0SW5NcykgfHwgd2FpdEluTXMgPD0gMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd3YWl0SW5NcyBtdXN0IGJlIGEgdmFsaWQgaW50ZWdlciA+IDAnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tEaXNwYXRjaF0uZGVsYXkgPSB3YWl0SW5Nc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogRm9yIGEgZGVmaW5lZCByZXBseSwgbmV2ZXIgbWFyayBhcyBjb25zdW1lZC5cbiAgICovXG4gIHBlcnNpc3QgKCkge1xuICAgIHRoaXNba01vY2tEaXNwYXRjaF0ucGVyc2lzdCA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IG9uZSB0byBkZWZpbmUgYSByZXBseSBmb3IgYSBzZXQgYW1vdW50IG9mIG1hdGNoaW5nIHJlcXVlc3RzLlxuICAgKi9cbiAgdGltZXMgKHJlcGVhdFRpbWVzKSB7XG4gICAgaWYgKHR5cGVvZiByZXBlYXRUaW1lcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIocmVwZWF0VGltZXMpIHx8IHJlcGVhdFRpbWVzIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwZWF0VGltZXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnRpbWVzID0gcmVwZWF0VGltZXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbi8qKlxuICogRGVmaW5lcyBhbiBpbnRlcmNlcHRvciBmb3IgYSBNb2NrXG4gKi9cbmNsYXNzIE1vY2tJbnRlcmNlcHRvciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBtb2NrRGlzcGF0Y2hlcykge1xuICAgIGlmICh0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5wYXRoID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLnBhdGggbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gJ0dFVCdcbiAgICB9XG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMjQ1XG4gICAgLy8gQXMgcGVyIFJGQyAzOTg2LCBjbGllbnRzIGFyZSBub3Qgc3VwcG9zZWQgdG8gc2VuZCBVUklcbiAgICAvLyBmcmFnbWVudHMgdG8gc2VydmVycyB3aGVuIHRoZXkgcmV0cmlldmUgYSBkb2N1bWVudCxcbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmIChvcHRzLnF1ZXJ5KSB7XG4gICAgICAgIG9wdHMucGF0aCA9IGJ1aWxkVVJMKG9wdHMucGF0aCwgb3B0cy5xdWVyeSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE1hdGNoZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi9tYWluL2xpYi9mZXRjaC9pbmRleC5qcyNMMTgxMVxuICAgICAgICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG9wdHMucGF0aCwgJ2RhdGE6Ly8nKVxuICAgICAgICBvcHRzLnBhdGggPSBwYXJzZWRVUkwucGF0aG5hbWUgKyBwYXJzZWRVUkwuc2VhcmNoXG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9IG9wdHMubWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICB9XG5cbiAgICB0aGlzW2tEaXNwYXRjaEtleV0gPSBidWlsZEtleShvcHRzKVxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gbW9ja0Rpc3BhdGNoZXNcbiAgICB0aGlzW2tEZWZhdWx0SGVhZGVyc10gPSB7fVxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB7fVxuICAgIHRoaXNba0NvbnRlbnRMZW5ndGhdID0gZmFsc2VcbiAgfVxuXG4gIGNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YSAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zID0ge30pIHtcbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoZGF0YSlcbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdGhpc1trQ29udGVudExlbmd0aF0gPyB7ICdjb250ZW50LWxlbmd0aCc6IHJlc3BvbnNlRGF0YS5sZW5ndGggfSA6IHt9XG4gICAgY29uc3QgaGVhZGVycyA9IHsgLi4udGhpc1trRGVmYXVsdEhlYWRlcnNdLCAuLi5jb250ZW50TGVuZ3RoLCAuLi5yZXNwb25zZU9wdGlvbnMuaGVhZGVycyB9XG4gICAgY29uc3QgdHJhaWxlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRUcmFpbGVyc10sIC4uLnJlc3BvbnNlT3B0aW9ucy50cmFpbGVycyB9XG5cbiAgICByZXR1cm4geyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycyB9XG4gIH1cblxuICB2YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyAoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBzdGF0dXNDb2RlID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzdGF0dXNDb2RlIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZGF0YSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIHJlc3BvbnNlT3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVzcG9uc2VPcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCByZXBseS5cbiAgICovXG4gIHJlcGx5IChyZXBseURhdGEpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlEYXRhID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBXZSdsbCBmaXJzdCB3cmFwIHRoZSBwcm92aWRlZCBjYWxsYmFjayBpbiBhbm90aGVyIGZ1bmN0aW9uLFxuICAgICAgLy8gdGhpcyBmdW5jdGlvbiB3aWxsIHByb3Blcmx5IHJlc29sdmUgdGhlIGRhdGEgZnJvbSB0aGUgY2FsbGJhY2tcbiAgICAgIC8vIHdoZW4gaW52b2tlZC5cbiAgICAgIGNvbnN0IHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrID0gKG9wdHMpID0+IHtcbiAgICAgICAgLy8gT3VyIHJlcGx5IG9wdGlvbnMgY2FsbGJhY2sgY29udGFpbnMgdGhlIHBhcmFtZXRlciBmb3Igc3RhdHVzQ29kZSwgZGF0YSBhbmQgb3B0aW9ucy5cbiAgICAgICAgY29uc3QgcmVzb2x2ZWREYXRhID0gcmVwbHlEYXRhKG9wdHMpXG5cbiAgICAgICAgLy8gQ2hlY2sgaWYgaXQgaXMgaW4gdGhlIHJpZ2h0IGZvcm1hdFxuICAgICAgICBpZiAodHlwZW9mIHJlc29sdmVkRGF0YSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGx5IG9wdGlvbnMgY2FsbGJhY2sgbXVzdCByZXR1cm4gYW4gb2JqZWN0JylcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fSB9ID0gcmVzb2x2ZWREYXRhXG4gICAgICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICAvLyBTaW5jZSB0aGUgdmFsdWVzIGNhbiBiZSBvYnRhaW5lZCBpbW1lZGlhdGVseSB3ZSByZXR1cm4gdGhlbVxuICAgICAgICAvLyBmcm9tIHRoaXMgaGlnaGVyIG9yZGVyIGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSByZXNvbHZlZCBsYXRlci5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAuLi50aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gQWRkIHVzdWFsIGRpc3BhdGNoIGRhdGEsIGJ1dCB0aGlzIHRpbWUgc2V0IHRoZSBkYXRhIHBhcmFtZXRlciB0byBmdW5jdGlvbiB0aGF0IHdpbGwgZXZlbnR1YWxseSBwcm92aWRlIGRhdGEuXG4gICAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2spXG4gICAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gICAgfVxuXG4gICAgLy8gV2UgY2FuIGhhdmUgZWl0aGVyIG9uZSBvciB0aHJlZSBwYXJhbWV0ZXJzLCBpZiB3ZSBnZXQgaGVyZSxcbiAgICAvLyB3ZSBzaG91bGQgaGF2ZSAxLTMgcGFyYW1ldGVycy4gU28gd2Ugc3ByZWFkIHRoZSBhcmd1bWVudHMgb2ZcbiAgICAvLyB0aGlzIGZ1bmN0aW9uIHRvIG9idGFpbiB0aGUgcGFyYW1ldGVycywgc2luY2UgcmVwbHlEYXRhIHdpbGwgYWx3YXlzXG4gICAgLy8ganVzdCBiZSB0aGUgc3RhdHVzQ29kZS5cbiAgICBjb25zdCBbc3RhdHVzQ29kZSwgZGF0YSA9ICcnLCByZXNwb25zZU9wdGlvbnMgPSB7fV0gPSBbLi4uYXJndW1lbnRzXVxuICAgIHRoaXMudmFsaWRhdGVSZXBseVBhcmFtZXRlcnMoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuXG4gICAgLy8gU2VuZCBpbi1hbHJlYWR5IHByb3ZpZGVkIGRhdGEgbGlrZSB1c3VhbFxuICAgIGNvbnN0IGRpc3BhdGNoRGF0YSA9IHRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgZGlzcGF0Y2hEYXRhKVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBNb2NrIGFuIHVuZGljaSByZXF1ZXN0IHdpdGggYSBkZWZpbmVkIGVycm9yLlxuICAgKi9cbiAgcmVwbHlXaXRoRXJyb3IgKGVycm9yKSB7XG4gICAgaWYgKHR5cGVvZiBlcnJvciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZXJyb3IgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG5cbiAgICBjb25zdCBuZXdNb2NrRGlzcGF0Y2ggPSBhZGRNb2NrRGlzcGF0Y2godGhpc1trRGlzcGF0Y2hlc10sIHRoaXNba0Rpc3BhdGNoS2V5XSwgeyBlcnJvciB9KVxuICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZGVmYXVsdCByZXBseSBoZWFkZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlIZWFkZXJzIChoZWFkZXJzKSB7XG4gICAgaWYgKHR5cGVvZiBoZWFkZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0gaGVhZGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgdHJhaWxlcnMgb24gdGhlIGludGVyY2VwdG9yIGZvciBzdWJzZXF1ZW50IHJlcGxpZXNcbiAgICovXG4gIGRlZmF1bHRSZXBseVRyYWlsZXJzICh0cmFpbGVycykge1xuICAgIGlmICh0eXBlb2YgdHJhaWxlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3RyYWlsZXJzIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHRyYWlsZXJzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgcmVwbHkgY29udGVudCBsZW5ndGggaGVhZGVyIGZvciByZXBsaWVzIG9uIHRoZSBpbnRlcmNlcHRvclxuICAgKi9cbiAgcmVwbHlDb250ZW50TGVuZ3RoICgpIHtcbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IHRydWVcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzLk1vY2tJbnRlcmNlcHRvciA9IE1vY2tJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuTW9ja1Njb3BlID0gTW9ja1Njb3BlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4uL2NsaWVudCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tDbGllbnQgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgQ2xpZW50IHRvIGluZmx1ZW5jZSB0aGUgbW9ja0Rpc3BhdGNoZXMuXG4gKi9cbmNsYXNzIE1vY2tDbGllbnQgZXh0ZW5kcyBDbGllbnQge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQ2xpZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcHJvbWlzaWZ5IH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuLi9wb29sJylcbmNvbnN0IHsgYnVpbGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrQ2xvc2UsXG4gIGtPcmlnaW5hbENsb3NlLFxuICBrT3JpZ2luLFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga0Nvbm5lY3RlZFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgTW9ja0ludGVyY2VwdG9yIH0gPSByZXF1aXJlKCcuL21vY2staW50ZXJjZXB0b3InKVxuY29uc3QgU3ltYm9scyA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbi8qKlxuICogTW9ja1Bvb2wgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgUG9vbCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrUG9vbCBleHRlbmRzIFBvb2wge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgQ29uc29sZSB9ID0gcmVxdWlyZSgnY29uc29sZScpXG5cbi8qKlxuICogR2V0cyB0aGUgb3V0cHV0IG9mIGBjb25zb2xlLnRhYmxlKFx1MjAyNilgIGFzIGEgc3RyaW5nLlxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBkaXNhYmxlQ29sb3JzIH0gPSB7fSkge1xuICAgIHRoaXMudHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybSh7XG4gICAgICB0cmFuc2Zvcm0gKGNodW5rLCBfZW5jLCBjYikge1xuICAgICAgICBjYihudWxsLCBjaHVuaylcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5sb2dnZXIgPSBuZXcgQ29uc29sZSh7XG4gICAgICBzdGRvdXQ6IHRoaXMudHJhbnNmb3JtLFxuICAgICAgaW5zcGVjdE9wdGlvbnM6IHtcbiAgICAgICAgY29sb3JzOiAhZGlzYWJsZUNvbG9ycyAmJiAhcHJvY2Vzcy5lbnYuQ0lcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZm9ybWF0IChwZW5kaW5nSW50ZXJjZXB0b3JzKSB7XG4gICAgY29uc3Qgd2l0aFByZXR0eUhlYWRlcnMgPSBwZW5kaW5nSW50ZXJjZXB0b3JzLm1hcChcbiAgICAgICh7IG1ldGhvZCwgcGF0aCwgZGF0YTogeyBzdGF0dXNDb2RlIH0sIHBlcnNpc3QsIHRpbWVzLCB0aW1lc0ludm9rZWQsIG9yaWdpbiB9KSA9PiAoe1xuICAgICAgICBNZXRob2Q6IG1ldGhvZCxcbiAgICAgICAgT3JpZ2luOiBvcmlnaW4sXG4gICAgICAgIFBhdGg6IHBhdGgsXG4gICAgICAgICdTdGF0dXMgY29kZSc6IHN0YXR1c0NvZGUsXG4gICAgICAgIFBlcnNpc3RlbnQ6IHBlcnNpc3QgPyAnXHUyNzA1JyA6ICdcdTI3NEMnLFxuICAgICAgICBJbnZvY2F0aW9uczogdGltZXNJbnZva2VkLFxuICAgICAgICBSZW1haW5pbmc6IHBlcnNpc3QgPyBJbmZpbml0eSA6IHRpbWVzIC0gdGltZXNJbnZva2VkXG4gICAgICB9KSlcblxuICAgIHRoaXMubG9nZ2VyLnRhYmxlKHdpdGhQcmV0dHlIZWFkZXJzKVxuICAgIHJldHVybiB0aGlzLnRyYW5zZm9ybS5yZWFkKCkudG9TdHJpbmcoKVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NsaWVudHMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4uL2FnZW50JylcbmNvbnN0IHtcbiAga0FnZW50LFxuICBrTW9ja0FnZW50U2V0LFxuICBrTW9ja0FnZW50R2V0LFxuICBrRGlzcGF0Y2hlcyxcbiAga0lzTW9ja0FjdGl2ZSxcbiAga05ldENvbm5lY3QsXG4gIGtHZXROZXRDb25uZWN0LFxuICBrT3B0aW9ucyxcbiAga0ZhY3Rvcnlcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbW9jay1wb29sJylcbmNvbnN0IHsgbWF0Y2hWYWx1ZSwgYnVpbGRNb2NrT3B0aW9ucyB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFVuZGljaUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlcicpXG5jb25zdCBQbHVyYWxpemVyID0gcmVxdWlyZSgnLi9wbHVyYWxpemVyJylcbmNvbnN0IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIgPSByZXF1aXJlKCcuL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlcicpXG5cbmNsYXNzIEZha2VXZWFrUmVmIHtcbiAgY29uc3RydWN0b3IgKHZhbHVlKSB7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlXG4gIH1cblxuICBkZXJlZiAoKSB7XG4gICAgcmV0dXJuIHRoaXMudmFsdWVcbiAgfVxufVxuXG5jbGFzcyBNb2NrQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuXG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSB0cnVlXG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcblxuICAgIC8vIEluc3RhbnRpYXRlIEFnZW50IGFuZCBlbmNhcHN1bGF0ZVxuICAgIGlmICgob3B0cyAmJiBvcHRzLmFnZW50ICYmIHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG4gICAgY29uc3QgYWdlbnQgPSBvcHRzICYmIG9wdHMuYWdlbnQgPyBvcHRzLmFnZW50IDogbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gYWdlbnRcblxuICAgIHRoaXNba0NsaWVudHNdID0gYWdlbnRba0NsaWVudHNdXG4gICAgdGhpc1trT3B0aW9uc10gPSBidWlsZE1vY2tPcHRpb25zKG9wdHMpXG4gIH1cblxuICBnZXQgKG9yaWdpbikge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trTW9ja0FnZW50R2V0XShvcmlnaW4pXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICB9XG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gQ2FsbCBNb2NrQWdlbnQuZ2V0IHRvIHBlcmZvcm0gYWRkaXRpb25hbCBzZXR1cCBiZWZvcmUgZGlzcGF0Y2hpbmcgYXMgbm9ybWFsXG4gICAgdGhpcy5nZXQob3B0cy5vcmlnaW4pXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgY2xvc2UgKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5jbG9zZSgpXG4gICAgdGhpc1trQ2xpZW50c10uY2xlYXIoKVxuICB9XG5cbiAgZGVhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IGZhbHNlXG4gIH1cblxuICBhY3RpdmF0ZSAoKSB7XG4gICAgdGhpc1trSXNNb2NrQWN0aXZlXSA9IHRydWVcbiAgfVxuXG4gIGVuYWJsZU5ldENvbm5lY3QgKG1hdGNoZXIpIHtcbiAgICBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiBtYXRjaGVyID09PSAnZnVuY3Rpb24nIHx8IG1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHRoaXNba05ldENvbm5lY3RdKSkge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XS5wdXNoKG1hdGNoZXIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IFttYXRjaGVyXVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIG1hdGNoZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aGlzW2tOZXRDb25uZWN0XSA9IHRydWVcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdVbnN1cHBvcnRlZCBtYXRjaGVyLiBNdXN0IGJlIG9uZSBvZiBTdHJpbmd8RnVuY3Rpb258UmVnRXhwLicpXG4gICAgfVxuICB9XG5cbiAgZGlzYWJsZU5ldENvbm5lY3QgKCkge1xuICAgIHRoaXNba05ldENvbm5lY3RdID0gZmFsc2VcbiAgfVxuXG4gIC8vIFRoaXMgaXMgcmVxdWlyZWQgdG8gYnlwYXNzIGlzc3VlcyBjYXVzZWQgYnkgdXNpbmcgZ2xvYmFsIHN5bWJvbHMgLSBzZWU6XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNDQ3XG4gIGdldCBpc01vY2tBY3RpdmUgKCkge1xuICAgIHJldHVybiB0aGlzW2tJc01vY2tBY3RpdmVdXG4gIH1cblxuICBba01vY2tBZ2VudFNldF0gKG9yaWdpbiwgZGlzcGF0Y2hlcikge1xuICAgIHRoaXNba0NsaWVudHNdLnNldChvcmlnaW4sIG5ldyBGYWtlV2Vha1JlZihkaXNwYXRjaGVyKSlcbiAgfVxuXG4gIFtrRmFjdG9yeV0gKG9yaWdpbikge1xuICAgIGNvbnN0IG1vY2tPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGFnZW50OiB0aGlzIH0sIHRoaXNba09wdGlvbnNdKVxuICAgIHJldHVybiB0aGlzW2tPcHRpb25zXSAmJiB0aGlzW2tPcHRpb25zXS5jb25uZWN0aW9ucyA9PT0gMVxuICAgICAgPyBuZXcgTW9ja0NsaWVudChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICAgICAgOiBuZXcgTW9ja1Bvb2wob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgfVxuXG4gIFtrTW9ja0FnZW50R2V0XSAob3JpZ2luKSB7XG4gICAgLy8gRmlyc3QgY2hlY2sgaWYgd2UgY2FuIGltbWVkaWF0ZWx5IGZpbmQgaXRcbiAgICBjb25zdCByZWYgPSB0aGlzW2tDbGllbnRzXS5nZXQob3JpZ2luKVxuICAgIGlmIChyZWYpIHtcbiAgICAgIHJldHVybiByZWYuZGVyZWYoKVxuICAgIH1cblxuICAgIC8vIElmIHRoZSBvcmlnaW4gaXMgbm90IGEgc3RyaW5nIGNyZWF0ZSBhIGR1bW15IHBhcmVudCBwb29sIGFuZCByZXR1cm4gdG8gdXNlclxuICAgIGlmICh0eXBlb2Ygb3JpZ2luICE9PSAnc3RyaW5nJykge1xuICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKCdodHRwOi8vbG9jYWxob3N0Ojk5OTknKVxuICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgIH1cblxuICAgIC8vIElmIHdlIG1hdGNoLCBjcmVhdGUgYSBwb29sIGFuZCBhc3NpZ24gdGhlIHNhbWUgZGlzcGF0Y2hlc1xuICAgIGZvciAoY29uc3QgW2tleU1hdGNoZXIsIG5vbkV4cGxpY2l0UmVmXSBvZiBBcnJheS5mcm9tKHRoaXNba0NsaWVudHNdKSkge1xuICAgICAgY29uc3Qgbm9uRXhwbGljaXREaXNwYXRjaGVyID0gbm9uRXhwbGljaXRSZWYuZGVyZWYoKVxuICAgICAgaWYgKG5vbkV4cGxpY2l0RGlzcGF0Y2hlciAmJiB0eXBlb2Yga2V5TWF0Y2hlciAhPT0gJ3N0cmluZycgJiYgbWF0Y2hWYWx1ZShrZXlNYXRjaGVyLCBvcmlnaW4pKSB7XG4gICAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XShvcmlnaW4pXG4gICAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgICBkaXNwYXRjaGVyW2tEaXNwYXRjaGVzXSA9IG5vbkV4cGxpY2l0RGlzcGF0Y2hlcltrRGlzcGF0Y2hlc11cbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBba0dldE5ldENvbm5lY3RdICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmV0Q29ubmVjdF1cbiAgfVxuXG4gIHBlbmRpbmdJbnRlcmNlcHRvcnMgKCkge1xuICAgIGNvbnN0IG1vY2tBZ2VudENsaWVudHMgPSB0aGlzW2tDbGllbnRzXVxuXG4gICAgcmV0dXJuIEFycmF5LmZyb20obW9ja0FnZW50Q2xpZW50cy5lbnRyaWVzKCkpXG4gICAgICAuZmxhdE1hcCgoW29yaWdpbiwgc2NvcGVdKSA9PiBzY29wZS5kZXJlZigpW2tEaXNwYXRjaGVzXS5tYXAoZGlzcGF0Y2ggPT4gKHsgLi4uZGlzcGF0Y2gsIG9yaWdpbiB9KSkpXG4gICAgICAuZmlsdGVyKCh7IHBlbmRpbmcgfSkgPT4gcGVuZGluZylcbiAgfVxuXG4gIGFzc2VydE5vUGVuZGluZ0ludGVyY2VwdG9ycyAoeyBwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyID0gbmV3IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIoKSB9ID0ge30pIHtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nSW50ZXJjZXB0b3JzKClcblxuICAgIGlmIChwZW5kaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGx1cmFsaXplciA9IG5ldyBQbHVyYWxpemVyKCdpbnRlcmNlcHRvcicsICdpbnRlcmNlcHRvcnMnKS5wbHVyYWxpemUocGVuZGluZy5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgVW5kaWNpRXJyb3IoYFxuJHtwbHVyYWxpemVyLmNvdW50fSAke3BsdXJhbGl6ZXIubm91bn0gJHtwbHVyYWxpemVyLmlzfSBwZW5kaW5nOlxuXG4ke3BlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIuZm9ybWF0KHBlbmRpbmcpfVxuYC50cmltKCkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQWdlbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrUHJveHksIGtDbG9zZSwga0Rlc3Ryb3ksIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCd1cmwnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2FnZW50JylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9jb3JlL2Nvbm5lY3QnKVxuXG5jb25zdCBrQWdlbnQgPSBTeW1ib2woJ3Byb3h5IGFnZW50JylcbmNvbnN0IGtDbGllbnQgPSBTeW1ib2woJ3Byb3h5IGNsaWVudCcpXG5jb25zdCBrUHJveHlIZWFkZXJzID0gU3ltYm9sKCdwcm94eSBoZWFkZXJzJylcbmNvbnN0IGtSZXF1ZXN0VGxzID0gU3ltYm9sKCdyZXF1ZXN0IHRscyBzZXR0aW5ncycpXG5jb25zdCBrUHJveHlUbHMgPSBTeW1ib2woJ3Byb3h5IHRscyBzZXR0aW5ncycpXG5jb25zdCBrQ29ubmVjdEVuZHBvaW50ID0gU3ltYm9sKCdjb25uZWN0IGVuZHBvaW50IGZ1bmN0aW9uJylcblxuZnVuY3Rpb24gZGVmYXVsdFByb3RvY29sUG9ydCAocHJvdG9jb2wpIHtcbiAgcmV0dXJuIHByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwXG59XG5cbmZ1bmN0aW9uIGJ1aWxkUHJveHlPcHRpb25zIChvcHRzKSB7XG4gIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICB9XG5cbiAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdXJpOiBvcHRzLnVyaSxcbiAgICBwcm90b2NvbDogb3B0cy5wcm90b2NvbCB8fCAnaHR0cHMnXG4gIH1cbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBQcm94eUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHN1cGVyKG9wdHMpXG4gICAgdGhpc1trUHJveHldID0gYnVpbGRQcm94eU9wdGlvbnMob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cblxuICAgIGlmICh0eXBlb2Ygb3B0cyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMgPSB7IHVyaTogb3B0cyB9XG4gICAgfVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLnVyaSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eSBvcHRzLnVyaSBpcyBtYW5kYXRvcnknKVxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xpZW50RmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5IH0gPSBvcHRzXG5cbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba1JlcXVlc3RUbHNdID0gb3B0cy5yZXF1ZXN0VGxzXG4gICAgdGhpc1trUHJveHlUbHNdID0gb3B0cy5wcm94eVRsc1xuICAgIHRoaXNba1Byb3h5SGVhZGVyc10gPSBvcHRzLmhlYWRlcnMgfHwge31cblxuICAgIGNvbnN0IHJlc29sdmVkVXJsID0gbmV3IFVSTChvcHRzLnVyaSlcbiAgICBjb25zdCB7IG9yaWdpbiwgcG9ydCwgaG9zdCwgdXNlcm5hbWUsIHBhc3N3b3JkIH0gPSByZXNvbHZlZFVybFxuXG4gICAgaWYgKG9wdHMuYXV0aCAmJiBvcHRzLnRva2VuKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMuYXV0aCBjYW5ub3QgYmUgdXNlZCBpbiBjb21iaW5hdGlvbiB3aXRoIG9wdHMudG9rZW4nKVxuICAgIH0gZWxzZSBpZiAob3B0cy5hdXRoKSB7XG4gICAgICAvKiBAZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2Ygb3B0cy50b2tlbiAqL1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7b3B0cy5hdXRofWBcbiAgICB9IGVsc2UgaWYgKG9wdHMudG9rZW4pIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IG9wdHMudG9rZW5cbiAgICB9IGVsc2UgaWYgKHVzZXJuYW1lICYmIHBhc3N3b3JkKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtCdWZmZXIuZnJvbShgJHtkZWNvZGVVUklDb21wb25lbnQodXNlcm5hbWUpfToke2RlY29kZVVSSUNvbXBvbmVudChwYXNzd29yZCl9YCkudG9TdHJpbmcoJ2Jhc2U2NCcpfWBcbiAgICB9XG5cbiAgICBjb25zdCBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnByb3h5VGxzIH0pXG4gICAgdGhpc1trQ29ubmVjdEVuZHBvaW50XSA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5yZXF1ZXN0VGxzIH0pXG4gICAgdGhpc1trQ2xpZW50XSA9IGNsaWVudEZhY3RvcnkocmVzb2x2ZWRVcmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRIb3N0ID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkSG9zdCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRIb3N0LFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwMCkge1xuICAgICAgICAgICAgc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHsgaG9zdCB9ID0gbmV3IFVSTChvcHRzLm9yaWdpbilcbiAgICBjb25zdCBoZWFkZXJzID0gYnVpbGRIZWFkZXJzKG9wdHMuaGVhZGVycylcbiAgICB0aHJvd0lmUHJveHlBdXRoSXNTZW50KGhlYWRlcnMpXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgIC4uLmhlYWRlcnMsXG4gICAgICAgICAgaG9zdFxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgaGFuZGxlclxuICAgIClcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLCAiY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3QgeyBrUmV0cnlIYW5kbGVyRGVmYXVsdFJldHJ5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBSZXF1ZXN0UmV0cnlFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBpc0Rpc3R1cmJlZCwgcGFyc2VIZWFkZXJzLCBwYXJzZVJhbmdlSGVhZGVyIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5mdW5jdGlvbiBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyIChyZXRyeUFmdGVyKSB7XG4gIGNvbnN0IGN1cnJlbnQgPSBEYXRlLm5vdygpXG4gIGNvbnN0IGRpZmYgPSBuZXcgRGF0ZShyZXRyeUFmdGVyKS5nZXRUaW1lKCkgLSBjdXJyZW50XG5cbiAgcmV0dXJuIGRpZmZcbn1cblxuY2xhc3MgUmV0cnlIYW5kbGVyIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGhhbmRsZXJzKSB7XG4gICAgY29uc3QgeyByZXRyeU9wdGlvbnMsIC4uLmRpc3BhdGNoT3B0cyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIC8vIFJldHJ5IHNjb3BlZFxuICAgICAgcmV0cnk6IHJldHJ5Rm4sXG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIG1pblRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgLy8gUmVzcG9uc2Ugc2NvcGVkXG4gICAgICBtZXRob2RzLFxuICAgICAgZXJyb3JDb2RlcyxcbiAgICAgIHJldHJ5QWZ0ZXIsXG4gICAgICBzdGF0dXNDb2Rlc1xuICAgIH0gPSByZXRyeU9wdGlvbnMgPz8ge31cblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBoYW5kbGVycy5kaXNwYXRjaFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJzLmhhbmRsZXJcbiAgICB0aGlzLm9wdHMgPSBkaXNwYXRjaE9wdHNcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXRyeU9wdHMgPSB7XG4gICAgICByZXRyeTogcmV0cnlGbiA/PyBSZXRyeUhhbmRsZXJba1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeV0sXG4gICAgICByZXRyeUFmdGVyOiByZXRyeUFmdGVyID8/IHRydWUsXG4gICAgICBtYXhUaW1lb3V0OiBtYXhUaW1lb3V0ID8/IDMwICogMTAwMCwgLy8gMzBzLFxuICAgICAgdGltZW91dDogbWluVGltZW91dCA/PyA1MDAsIC8vIC41c1xuICAgICAgdGltZW91dEZhY3RvcjogdGltZW91dEZhY3RvciA/PyAyLFxuICAgICAgbWF4UmV0cmllczogbWF4UmV0cmllcyA/PyA1LFxuICAgICAgLy8gV2hhdCBlcnJvcnMgd2Ugc2hvdWxkIHJldHJ5XG4gICAgICBtZXRob2RzOiBtZXRob2RzID8/IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQVVQnLCAnREVMRVRFJywgJ1RSQUNFJ10sXG4gICAgICAvLyBJbmRpY2F0ZXMgd2hpY2ggZXJyb3JzIHRvIHJldHJ5XG4gICAgICBzdGF0dXNDb2Rlczogc3RhdHVzQ29kZXMgPz8gWzUwMCwgNTAyLCA1MDMsIDUwNCwgNDI5XSxcbiAgICAgIC8vIExpc3Qgb2YgZXJyb3JzIHRvIHJldHJ5XG4gICAgICBlcnJvckNvZGVzOiBlcnJvckNvZGVzID8/IFtcbiAgICAgICAgJ0VDT05OUkVTRVQnLFxuICAgICAgICAnRUNPTk5SRUZVU0VEJyxcbiAgICAgICAgJ0VOT1RGT1VORCcsXG4gICAgICAgICdFTkVURE9XTicsXG4gICAgICAgICdFTkVUVU5SRUFDSCcsXG4gICAgICAgICdFSE9TVERPV04nLFxuICAgICAgICAnRUhPU1RVTlJFQUNIJyxcbiAgICAgICAgJ0VQSVBFJ1xuICAgICAgXVxuICAgIH1cblxuICAgIHRoaXMucmV0cnlDb3VudCA9IDBcbiAgICB0aGlzLnN0YXJ0ID0gMFxuICAgIHRoaXMuZW5kID0gbnVsbFxuICAgIHRoaXMuZXRhZyA9IG51bGxcbiAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgIC8vIEhhbmRsZSBwb3NzaWJsZSBvbkNvbm5lY3QgZHVwbGljYXRpb25cbiAgICB0aGlzLmhhbmRsZXIub25Db25uZWN0KHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG4gICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICB0aGlzLmFib3J0KHJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25SZXF1ZXN0U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQoKVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vblVwZ3JhZGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudChjaHVuaylcbiAgfVxuXG4gIHN0YXRpYyBba1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeV0gKGVyciwgeyBzdGF0ZSwgb3B0cyB9LCBjYikge1xuICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgY29kZSwgaGVhZGVycyB9ID0gZXJyXG4gICAgY29uc3QgeyBtZXRob2QsIHJldHJ5T3B0aW9ucyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICB0aW1lb3V0LFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICBzdGF0dXNDb2RlcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICBtZXRob2RzXG4gICAgfSA9IHJldHJ5T3B0aW9uc1xuICAgIGxldCB7IGNvdW50ZXIsIGN1cnJlbnRUaW1lb3V0IH0gPSBzdGF0ZVxuXG4gICAgY3VycmVudFRpbWVvdXQgPVxuICAgICAgY3VycmVudFRpbWVvdXQgIT0gbnVsbCAmJiBjdXJyZW50VGltZW91dCA+IDAgPyBjdXJyZW50VGltZW91dCA6IHRpbWVvdXRcblxuICAgIC8vIEFueSBjb2RlIHRoYXQgaXMgbm90IGEgVW5kaWNpJ3Mgb3JpZ2luYXRlZCBhbmQgYWxsb3dlZCB0byByZXRyeVxuICAgIGlmIChcbiAgICAgIGNvZGUgJiZcbiAgICAgIGNvZGUgIT09ICdVTkRfRVJSX1JFUV9SRVRSWScgJiZcbiAgICAgIGNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCcgJiZcbiAgICAgICFlcnJvckNvZGVzLmluY2x1ZGVzKGNvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBtZXRob2QgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBtZXRob2QgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKEFycmF5LmlzQXJyYXkobWV0aG9kcykgJiYgIW1ldGhvZHMuaW5jbHVkZXMobWV0aG9kKSkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2Ygc3RhdHVzIGNvZGUgYXJlIHByb3ZpZGVkIGFuZCB0aGUgY3VycmVudCBzdGF0dXMgY29kZSBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoXG4gICAgICBzdGF0dXNDb2RlICE9IG51bGwgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoc3RhdHVzQ29kZXMpICYmXG4gICAgICAhc3RhdHVzQ29kZXMuaW5jbHVkZXMoc3RhdHVzQ29kZSlcbiAgICApIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIHdlIHJlYWNoZWQgdGhlIG1heCBudW1iZXIgb2YgcmV0cmllc1xuICAgIGlmIChjb3VudGVyID4gbWF4UmV0cmllcykge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHJldHJ5QWZ0ZXJIZWFkZXIgPSBoZWFkZXJzICE9IG51bGwgJiYgaGVhZGVyc1sncmV0cnktYWZ0ZXInXVxuICAgIGlmIChyZXRyeUFmdGVySGVhZGVyKSB7XG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gTnVtYmVyKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gaXNOYU4ocmV0cnlBZnRlckhlYWRlcilcbiAgICAgICAgPyBjYWxjdWxhdGVSZXRyeUFmdGVySGVhZGVyKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgIDogcmV0cnlBZnRlckhlYWRlciAqIDFlMyAvLyBSZXRyeS1BZnRlciBpcyBpbiBzZWNvbmRzXG4gICAgfVxuXG4gICAgY29uc3QgcmV0cnlUaW1lb3V0ID1cbiAgICAgIHJldHJ5QWZ0ZXJIZWFkZXIgPiAwXG4gICAgICAgID8gTWF0aC5taW4ocmV0cnlBZnRlckhlYWRlciwgbWF4VGltZW91dClcbiAgICAgICAgOiBNYXRoLm1pbihjdXJyZW50VGltZW91dCAqIHRpbWVvdXRGYWN0b3IgKiogY291bnRlciwgbWF4VGltZW91dClcblxuICAgIHN0YXRlLmN1cnJlbnRUaW1lb3V0ID0gcmV0cnlUaW1lb3V0XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IGNiKG51bGwpLCByZXRyeVRpbWVvdXQpXG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBwYXJzZUhlYWRlcnMocmF3SGVhZGVycylcblxuICAgIHRoaXMucmV0cnlDb3VudCArPSAxXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA+PSAzMDApIHtcbiAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignUmVxdWVzdCBmYWlsZWQnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgIH0pXG4gICAgICApXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICAvLyBDaGVja3BvaW50IGZvciByZXN1bWUgZnJvbSB3aGVyZSB3ZSBsZWZ0IGl0XG4gICAgaWYgKHRoaXMucmVzdW1lICE9IG51bGwpIHtcbiAgICAgIHRoaXMucmVzdW1lID0gbnVsbFxuXG4gICAgICBpZiAoc3RhdHVzQ29kZSAhPT0gMjA2KSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRlbnRSYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuICAgICAgLy8gSWYgbm8gY29udGVudCByYW5nZVxuICAgICAgaWYgKCFjb250ZW50UmFuZ2UpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0NvbnRlbnQtUmFuZ2UgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIC8vIExldCdzIHN0YXJ0IHdpdGggYSB3ZWFrIGV0YWcgY2hlY2tcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcgIT09IGhlYWRlcnMuZXRhZykge1xuICAgICAgICB0aGlzLmFib3J0KFxuICAgICAgICAgIG5ldyBSZXF1ZXN0UmV0cnlFcnJvcignRVRhZyBtaXNtYXRjaCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSB9ID0gY29udGVudFJhbmdlXG5cbiAgICAgIGFzc2VydCh0aGlzLnN0YXJ0ID09PSBzdGFydCwgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnKVxuICAgICAgYXNzZXJ0KHRoaXMuZW5kID09IG51bGwgfHwgdGhpcy5lbmQgPT09IGVuZCwgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnKVxuXG4gICAgICB0aGlzLnJlc3VtZSA9IHJlc3VtZVxuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNikge1xuICAgICAgICAvLyBGaXJzdCB0aW1lIHdlIHJlY2VpdmUgMjA2XG4gICAgICAgIGNvbnN0IHJhbmdlID0gcGFyc2VSYW5nZUhlYWRlcihoZWFkZXJzWydjb250ZW50LXJhbmdlJ10pXG5cbiAgICAgICAgaWYgKHJhbmdlID09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICAgICAgcmVzdW1lLFxuICAgICAgICAgICAgc3RhdHVzTWVzc2FnZVxuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IHJhbmdlXG5cbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHN0YXJ0ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXJ0KSAmJiB0aGlzLnN0YXJ0ICE9PSBzdGFydCxcbiAgICAgICAgICAnY29udGVudC1yYW5nZSBtaXNtYXRjaCdcbiAgICAgICAgKVxuICAgICAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHN0YXJ0KSlcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIGVuZCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShlbmQpICYmIHRoaXMuZW5kICE9PSBlbmQsXG4gICAgICAgICAgJ2ludmFsaWQgY29udGVudC1sZW5ndGgnXG4gICAgICAgIClcblxuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnRcbiAgICAgICAgdGhpcy5lbmQgPSBlbmRcbiAgICAgIH1cblxuICAgICAgLy8gV2UgbWFrZSBvdXIgYmVzdCB0byBjaGVja3BvaW50IHRoZSBib2R5IGZvciBmdXJ0aGVyIHJhbmdlIGhlYWRlcnNcbiAgICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG4gICAgICAgIHRoaXMuZW5kID0gY29udGVudExlbmd0aCAhPSBudWxsID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpIDogbnVsbFxuICAgICAgfVxuXG4gICAgICBhc3NlcnQoTnVtYmVyLmlzRmluaXRlKHRoaXMuc3RhcnQpKVxuICAgICAgYXNzZXJ0KFxuICAgICAgICB0aGlzLmVuZCA9PSBudWxsIHx8IE51bWJlci5pc0Zpbml0ZSh0aGlzLmVuZCksXG4gICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgKVxuXG4gICAgICB0aGlzLnJlc3VtZSA9IHJlc3VtZVxuICAgICAgdGhpcy5ldGFnID0gaGVhZGVycy5ldGFnICE9IG51bGwgPyBoZWFkZXJzLmV0YWcgOiBudWxsXG5cbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICByZXN1bWUsXG4gICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICB9KVxuXG4gICAgdGhpcy5hYm9ydChlcnIpXG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICB0aGlzLnN0YXJ0ICs9IGNodW5rLmxlbmd0aFxuXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlIChyYXdUcmFpbGVycykge1xuICAgIHRoaXMucmV0cnlDb3VudCA9IDBcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUocmF3VHJhaWxlcnMpXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkIHx8IGlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KSkge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5T3B0cy5yZXRyeShcbiAgICAgIGVycixcbiAgICAgIHtcbiAgICAgICAgc3RhdGU6IHsgY291bnRlcjogdGhpcy5yZXRyeUNvdW50KyssIGN1cnJlbnRUaW1lb3V0OiB0aGlzLnJldHJ5QWZ0ZXIgfSxcbiAgICAgICAgb3B0czogeyByZXRyeU9wdGlvbnM6IHRoaXMucmV0cnlPcHRzLCAuLi50aGlzLm9wdHMgfVxuICAgICAgfSxcbiAgICAgIG9uUmV0cnkuYmluZCh0aGlzKVxuICAgIClcblxuICAgIGZ1bmN0aW9uIG9uUmV0cnkgKGVycikge1xuICAgICAgaWYgKGVyciAhPSBudWxsIHx8IHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuc3RhcnQgIT09IDApIHtcbiAgICAgICAgdGhpcy5vcHRzID0ge1xuICAgICAgICAgIC4uLnRoaXMub3B0cyxcbiAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAuLi50aGlzLm9wdHMuaGVhZGVycyxcbiAgICAgICAgICAgIHJhbmdlOiBgYnl0ZXM9JHt0aGlzLnN0YXJ0fS0ke3RoaXMuZW5kID8/ICcnfWBcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaCh0aGlzLm9wdHMsIHRoaXMpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uRXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJldHJ5SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBXZSBpbmNsdWRlIGEgdmVyc2lvbiBudW1iZXIgZm9yIHRoZSBEaXNwYXRjaGVyIEFQSS4gSW4gY2FzZSBvZiBicmVha2luZyBjaGFuZ2VzLFxuLy8gdGhpcyB2ZXJzaW9uIG51bWJlciBtdXN0IGJlIGluY3JlYXNlZCB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxEaXNwYXRjaGVyID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbERpc3BhdGNoZXIuMScpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5cbmlmIChnZXRHbG9iYWxEaXNwYXRjaGVyKCkgPT09IHVuZGVmaW5lZCkge1xuICBzZXRHbG9iYWxEaXNwYXRjaGVyKG5ldyBBZ2VudCgpKVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxEaXNwYXRjaGVyIChhZ2VudCkge1xuICBpZiAoIWFnZW50IHx8IHR5cGVvZiBhZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxEaXNwYXRjaGVyLCB7XG4gICAgdmFsdWU6IGFnZW50LFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRGlzcGF0Y2hlciAoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzW2dsb2JhbERpc3BhdGNoZXJdXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRHbG9iYWxEaXNwYXRjaGVyLFxuICBnZXRHbG9iYWxEaXNwYXRjaGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbm5lY3QoLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uRXJyb3IoLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25VcGdyYWRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkhlYWRlcnMgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyguLi5hcmdzKVxuICB9XG5cbiAgb25EYXRhICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoLi4uYXJncylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUoLi4uYXJncylcbiAgfVxuXG4gIG9uQm9keVNlbnQgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoLi4uYXJncylcbiAgfVxufVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBrR3VhcmQgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIG1ha2VJdGVyYXRvcixcbiAgaXNWYWxpZEhlYWRlck5hbWUsXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3Qga0hlYWRlcnNNYXAgPSBTeW1ib2woJ2hlYWRlcnMgbWFwJylcbmNvbnN0IGtIZWFkZXJzU29ydGVkTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCBzb3J0ZWQnKVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSAoY29kZSkge1xuICByZXR1cm4gY29kZSA9PT0gMHgwMGEgfHwgY29kZSA9PT0gMHgwMGQgfHwgY29kZSA9PT0gMHgwMDkgfHwgY29kZSA9PT0gMHgwMjBcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci12YWx1ZS1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gIFRvIG5vcm1hbGl6ZSBhIGJ5dGUgc2VxdWVuY2UgcG90ZW50aWFsVmFsdWUsIHJlbW92ZVxuICAvLyAgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBieXRlcyBmcm9tXG4gIC8vICBwb3RlbnRpYWxWYWx1ZS5cbiAgbGV0IGkgPSAwOyBsZXQgaiA9IHBvdGVudGlhbFZhbHVlLmxlbmd0aFxuXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChqIC0gMSkpKSAtLWpcbiAgd2hpbGUgKGogPiBpICYmIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZShwb3RlbnRpYWxWYWx1ZS5jaGFyQ29kZUF0KGkpKSkgKytpXG5cbiAgcmV0dXJuIGkgPT09IDAgJiYgaiA9PT0gcG90ZW50aWFsVmFsdWUubGVuZ3RoID8gcG90ZW50aWFsVmFsdWUgOiBwb3RlbnRpYWxWYWx1ZS5zdWJzdHJpbmcoaSwgailcbn1cblxuZnVuY3Rpb24gZmlsbCAoaGVhZGVycywgb2JqZWN0KSB7XG4gIC8vIFRvIGZpbGwgYSBIZWFkZXJzIG9iamVjdCBoZWFkZXJzIHdpdGggYSBnaXZlbiBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgc2VxdWVuY2UsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIG9iamVjdDpcbiAgLy8gTm90ZTogd2ViaWRsIGNvbnZlcnNpb24gdG8gYXJyYXkgaGFzIGFscmVhZHkgYmVlbiBkb25lLlxuICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IG9iamVjdFtpXVxuICAgICAgLy8gMS4gSWYgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICAgICAgbWVzc2FnZTogYGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQgJHtoZWFkZXIubGVuZ3RofS5gXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFwcGVuZCAoaGVhZGVyXHUyMDE5cyBmaXJzdCBpdGVtLCBoZWFkZXJcdTIwMTlzIHNlY29uZCBpdGVtKSB0byBoZWFkZXJzLlxuICAgICAgYXBwZW5kSGVhZGVyKGhlYWRlcnMsIGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICAvLyBOb3RlOiBudWxsIHNob3VsZCB0aHJvd1xuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBvYmplY3QgaXMgYSByZWNvcmQsIHRoZW4gZm9yIGVhY2gga2V5IFx1MjE5MiB2YWx1ZSBpbiBvYmplY3QsXG4gICAgLy8gICAgYXBwZW5kIChrZXksIHZhbHVlKSB0byBoZWFkZXJzXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBrZXlzW2ldLCBvYmplY3Rba2V5c1tpXV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXJzLWFwcGVuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRIZWFkZXIgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIC8vIDEuIE5vcm1hbGl6ZSB2YWx1ZS5cbiAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gIC8vICAgIGhlYWRlciB2YWx1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMuYXBwZW5kJyxcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgIH0pXG4gIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIDQuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gIGlmIChoZWFkZXJzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgfSBlbHNlIGlmIChoZWFkZXJzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiOlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDYuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG5cbiAgLy8gNy4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIHJldHVybiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKG5hbWUsIHZhbHVlKVxuXG4gIC8vIDguIElmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSBoZWFkZXJzXG59XG5cbmNsYXNzIEhlYWRlcnNMaXN0IHtcbiAgLyoqIEB0eXBlIHtbc3RyaW5nLCBzdHJpbmddW118bnVsbH0gKi9cbiAgY29va2llcyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoaW5pdCkge1xuICAgIGlmIChpbml0IGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0W2tIZWFkZXJzTWFwXSlcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gaW5pdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHRoaXMuY29va2llcyA9IGluaXQuY29va2llcyA9PT0gbnVsbCA/IG51bGwgOiBbLi4uaW5pdC5jb29raWVzXVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdClcbiAgICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbGlzdC1jb250YWluc1xuICBjb250YWlucyAobmFtZSkge1xuICAgIC8vIEEgaGVhZGVyIGxpc3QgbGlzdCBjb250YWlucyBhIGhlYWRlciBuYW1lIG5hbWUgaWYgbGlzdFxuICAgIC8vIGNvbnRhaW5zIGEgaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyBtYXRjaCBmb3IgbmFtZS5cbiAgICBuYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uaGFzKG5hbWUpXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpc1trSGVhZGVyc01hcF0uY2xlYXIoKVxuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IG5hbWUgdG8gdGhlIGZpcnN0IHN1Y2hcbiAgICAvLyAgICBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChsb3dlcmNhc2VOYW1lKVxuXG4gICAgLy8gMi4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSBsb3dlcmNhc2VOYW1lID09PSAnY29va2llJyA/ICc7ICcgOiAnLCAnXG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwge1xuICAgICAgICBuYW1lOiBleGlzdHMubmFtZSxcbiAgICAgICAgdmFsdWU6IGAke2V4aXN0cy52YWx1ZX0ke2RlbGltaXRlcn0ke3ZhbHVlfWBcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gICAgfVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID8/PSBbXVxuICAgICAgdGhpcy5jb29raWVzLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICBjb25zdCBsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAobG93ZXJjYXNlTmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICB0aGlzLmNvb2tpZXMgPSBbdmFsdWVdXG4gICAgfVxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCB0aGUgdmFsdWUgb2ZcbiAgICAvLyAgICB0aGUgZmlyc3Qgc3VjaCBoZWFkZXIgdG8gdmFsdWUgYW5kIHJlbW92ZSB0aGVcbiAgICAvLyAgICBvdGhlcnMuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBhcHBlbmQgaGVhZGVyIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKG5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gbnVsbFxuICAgIH1cblxuICAgIHRoaXNba0hlYWRlcnNNYXBdLmRlbGV0ZShuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3QtZ2V0XG4gIGdldCAobmFtZSkge1xuICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc01hcF0uZ2V0KG5hbWUudG9Mb3dlckNhc2UoKSlcblxuICAgIC8vIDEuIElmIGxpc3QgZG9lcyBub3QgY29udGFpbiBuYW1lLCB0aGVuIHJldHVybiBudWxsLlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIGxpc3Qgd2hvc2UgbmFtZVxuICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLFxuICAgIC8vICAgIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgMHgyQyAweDIwLCBpbiBvcmRlci5cbiAgICByZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/IG51bGwgOiB2YWx1ZS52YWx1ZVxuICB9XG5cbiAgKiBbU3ltYm9sLml0ZXJhdG9yXSAoKSB7XG4gICAgLy8gdXNlIHRoZSBsb3dlcmNhc2VkIG5hbWVcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB7IHZhbHVlIH1dIG9mIHRoaXNba0hlYWRlcnNNYXBdKSB7XG4gICAgICB5aWVsZCBbbmFtZSwgdmFsdWVdXG4gICAgfVxuICB9XG5cbiAgZ2V0IGVudHJpZXMgKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKHRoaXNba0hlYWRlcnNNYXBdLnNpemUpIHtcbiAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXNba0hlYWRlcnNNYXBdLnZhbHVlcygpKSB7XG4gICAgICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlcnMtY2xhc3NcbmNsYXNzIEhlYWRlcnMge1xuICBjb25zdHJ1Y3RvciAoaW5pdCA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChpbml0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpc1trSGVhZGVyc0xpc3RdID0gbmV3IEhlYWRlcnNMaXN0KClcblxuICAgIC8vIFRoZSBuZXcgSGVhZGVycyhpbml0KSBjb25zdHJ1Y3RvciBzdGVwcyBhcmU6XG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgZ3VhcmQgdG8gXCJub25lXCIuXG4gICAgdGhpc1trR3VhcmRdID0gJ25vbmUnXG5cbiAgICAvLyAyLiBJZiBpbml0IGlzIGdpdmVuLCB0aGVuIGZpbGwgdGhpcyB3aXRoIGluaXQuXG4gICAgaWYgKGluaXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KGluaXQpXG4gICAgICBmaWxsKHRoaXMsIGluaXQpXG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWFwcGVuZFxuICBhcHBlbmQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLmFwcGVuZCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgcmV0dXJuIGFwcGVuZEhlYWRlcih0aGlzLCBuYW1lLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1kZWxldGVcbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmRlbGV0ZScgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5kZWxldGUnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAgIC8vICAgIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIDQuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgbmFtZVxuICAgIC8vICAgIGlzIG5vdCBhIG5vLUNPUlMtc2FmZWxpc3RlZCByZXF1ZXN0LWhlYWRlciBuYW1lLCBhbmRcbiAgICAvLyAgICBuYW1lIGlzIG5vdCBhIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpc1xuICAgIC8vICAgIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBuYW1lLCB0aGVuXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIGlmICghdGhpc1trSGVhZGVyc0xpc3RdLmNvbnRhaW5zKG5hbWUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyA3LiBEZWxldGUgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIC8vIDguIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoaXMuXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdLmRlbGV0ZShuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmdldCcsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGhlYWRlclxuICAgIC8vICAgIGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5nZXQobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1oYXNcbiAgaGFzIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5oYXMnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBuYW1lO1xuICAgIC8vICAgIG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdLmNvbnRhaW5zKG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtc2V0XG4gIHNldCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0hlYWRlcnMuc2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSlcbiAgICB2YWx1ZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcodmFsdWUpXG5cbiAgICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gICAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAgIC8vIDIuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUgb3IgdmFsdWUgaXMgbm90IGFcbiAgICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLnNldCcsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciB2YWx1ZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIgYW5kXG4gICAgLy8gICAgbmFtZS92YWx1ZSBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW1tdXRhYmxlJylcbiAgICB9IGVsc2UgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ3JlcXVlc3Qtbm8tY29ycycpIHtcbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyA3LiBTZXQgKG5hbWUsIHZhbHVlKSBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdLnNldChuYW1lLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRzZXRjb29raWVcbiAgZ2V0U2V0Q29va2llICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgU2V0LUNvb2tpZWAsIHRoZW4gcmV0dXJuIFx1MDBBQiBcdTAwQkIuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGhlYWRlcnMgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3Qgd2hvc2UgbmFtZSBpc1xuICAgIC8vICAgIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBgU2V0LUNvb2tpZWAsIGluIG9yZGVyLlxuXG4gICAgY29uc3QgbGlzdCA9IHRoaXNba0hlYWRlcnNMaXN0XS5jb29raWVzXG5cbiAgICBpZiAobGlzdCkge1xuICAgICAgcmV0dXJuIFsuLi5saXN0XVxuICAgIH1cblxuICAgIHJldHVybiBbXVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICBnZXQgW2tIZWFkZXJzU29ydGVkTWFwXSAoKSB7XG4gICAgaWYgKHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF0pIHtcbiAgICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYW4gZW1wdHkgbGlzdCBvZiBoZWFkZXJzIHdpdGggdGhlIGtleSBiZWluZyB0aGUgbmFtZVxuICAgIC8vICAgIGFuZCB2YWx1ZSB0aGUgdmFsdWUuXG4gICAgY29uc3QgaGVhZGVycyA9IFtdXG5cbiAgICAvLyAyLiBMZXQgbmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0IGhlYWRlciBuYW1lcyB0byBhIHNvcnRlZC1sb3dlcmNhc2VcbiAgICAvLyAgICBzZXQgd2l0aCBhbGwgdGhlIG5hbWVzIG9mIHRoZSBoZWFkZXJzIGluIGxpc3QuXG4gICAgY29uc3QgbmFtZXMgPSBbLi4udGhpc1trSGVhZGVyc0xpc3RdXS5zb3J0KChhLCBiKSA9PiBhWzBdIDwgYlswXSA/IC0xIDogMSlcbiAgICBjb25zdCBjb29raWVzID0gdGhpc1trSGVhZGVyc0xpc3RdLmNvb2tpZXNcblxuICAgIC8vIDMuIEZvciBlYWNoIG5hbWUgb2YgbmFtZXM6XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lcy5sZW5ndGg7ICsraSkge1xuICAgICAgY29uc3QgW25hbWUsIHZhbHVlXSA9IG5hbWVzW2ldXG4gICAgICAvLyAxLiBJZiBuYW1lIGlzIGBzZXQtY29va2llYCwgdGhlbjpcbiAgICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgLy8gMS4gTGV0IHZhbHVlcyBiZSBhIGxpc3Qgb2YgYWxsIHZhbHVlcyBvZiBoZWFkZXJzIGluIGxpc3Qgd2hvc2UgbmFtZVxuICAgICAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSwgaW4gb3JkZXIuXG5cbiAgICAgICAgLy8gMi4gRm9yIGVhY2ggdmFsdWUgb2YgdmFsdWVzOlxuICAgICAgICAvLyAxLiBBcHBlbmQgKG5hbWUsIHZhbHVlKSB0byBoZWFkZXJzLlxuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGNvb2tpZXMubGVuZ3RoOyArK2opIHtcbiAgICAgICAgICBoZWFkZXJzLnB1c2goW25hbWUsIGNvb2tpZXNbal1dKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2U6XG5cbiAgICAgICAgLy8gMS4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBuYW1lIGZyb20gbGlzdC5cblxuICAgICAgICAvLyAyLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgICBhc3NlcnQodmFsdWUgIT09IG51bGwpXG5cbiAgICAgICAgLy8gMy4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVycy5cbiAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXSA9IGhlYWRlcnNcblxuICAgIC8vIDQuIFJldHVybiBoZWFkZXJzLlxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trSGVhZGVyc1NvcnRlZE1hcF1cbiAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IoKCkgPT4gdmFsdWUsICdIZWFkZXJzJyxcbiAgICAgICAgJ2tleScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAna2V5J1xuICAgIClcbiAgfVxuXG4gIHZhbHVlcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICd2YWx1ZScpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IFsuLi50aGlzW2tIZWFkZXJzU29ydGVkTWFwXS52YWx1ZXMoKV0sXG4gICAgICAnSGVhZGVycycsXG4gICAgICAndmFsdWUnXG4gICAgKVxuICB9XG5cbiAgZW50cmllcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICdrZXkrdmFsdWUnKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEhlYWRlcnMpID0+IHZvaWR9IGNhbGxiYWNrRm5cbiAgICogQHBhcmFtIHt1bmtub3dufSB0aGlzQXJnXG4gICAqL1xuICBmb3JFYWNoIChjYWxsYmFja0ZuLCB0aGlzQXJnID0gZ2xvYmFsVGhpcykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnSGVhZGVycyc6IHBhcmFtZXRlciAxIGlzIG5vdCBvZiB0eXBlICdGdW5jdGlvbicuXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiB0aGlzKSB7XG4gICAgICBjYWxsYmFja0ZuLmFwcGx5KHRoaXNBcmcsIFt2YWx1ZSwga2V5LCB0aGlzXSlcbiAgICB9XG4gIH1cblxuICBbU3ltYm9sLmZvcignbm9kZWpzLnV0aWwuaW5zcGVjdC5jdXN0b20nKV0gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdXG4gIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXSA9IEhlYWRlcnMucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoSGVhZGVycy5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldFNldENvb2tpZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdmFsdWVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlbnRyaWVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBmb3JFYWNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLml0ZXJhdG9yXTogeyBlbnVtZXJhYmxlOiBmYWxzZSB9LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnSGVhZGVycycsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIFt1dGlsLmluc3BlY3QuY3VzdG9tXToge1xuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH1cbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKFZbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nXShWKVxuICAgIH1cblxuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J10oVilcbiAgfVxuXG4gIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgfSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZpbGwsXG4gIEhlYWRlcnMsXG4gIEhlYWRlcnNMaXN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSGVhZGVycywgSGVhZGVyc0xpc3QsIGZpbGwgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSB1dGlsXG5jb25zdCB7XG4gIGlzVmFsaWRSZWFzb25QaHJhc2UsXG4gIGlzQ2FuY2VsbGVkLFxuICBpc0Fib3J0ZWQsXG4gIGlzQmxvYkxpa2UsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXNFcnJvckxpa2UsXG4gIGlzb21vcnBoaWNFbmNvZGVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICByZWRpcmVjdFN0YXR1c1NldCxcbiAgbnVsbEJvZHlTdGF0dXMsXG4gIERPTUV4Y2VwdGlvblxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbSB8fCByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVE9ET1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyBUaGUgc3RhdGljIGVycm9yKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhXG4gICAgLy8gUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyBuZXR3b3JrIGVycm9yLCBcImltbXV0YWJsZVwiLCBhbmQgdGhpc1x1MjAxOXNcbiAgICAvLyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXNwb25zZS1qc29uXG4gIHN0YXRpYyBqc29uIChkYXRhLCBpbml0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UuanNvbicgfSlcblxuICAgIGlmIChpbml0ICE9PSBudWxsKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2VJbml0KGluaXQpXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IGJ5dGVzIHRoZSByZXN1bHQgb2YgcnVubmluZyBzZXJpYWxpemUgYSBKYXZhU2NyaXB0IHZhbHVlIHRvIEpTT04gYnl0ZXMgb24gZGF0YS5cbiAgICBjb25zdCBieXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZShcbiAgICAgIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyhkYXRhKVxuICAgIClcblxuICAgIC8vIDIuIExldCBib2R5IGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBieXRlcy5cbiAgICBjb25zdCBib2R5ID0gZXh0cmFjdEJvZHkoYnl0ZXMpXG5cbiAgICAvLyAzLiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsXG4gICAgLy8gICAgXCJyZXNwb25zZVwiLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVsZXZhbnRSZWFsbSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdyZXNwb25zZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDQuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlT2JqZWN0LCBpbml0LCBhbmQgKGJvZHksIFwiYXBwbGljYXRpb24vanNvblwiKS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UocmVzcG9uc2VPYmplY3QsIGluaXQsIHsgYm9keTogYm9keVswXSwgdHlwZTogJ2FwcGxpY2F0aW9uL2pzb24nIH0pXG5cbiAgICAvLyA1LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBDcmVhdGVzIGEgcmVkaXJlY3QgUmVzcG9uc2UgdGhhdCByZWRpcmVjdHMgdG8gdXJsIHdpdGggc3RhdHVzIHN0YXR1cy5cbiAgc3RhdGljIHJlZGlyZWN0ICh1cmwsIHN0YXR1cyA9IDMwMikge1xuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVzcG9uc2UucmVkaXJlY3QnIH0pXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCBnZXRHbG9iYWxPcmlnaW4oKSlcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IFR5cGVFcnJvcignRmFpbGVkIHRvIHBhcnNlIFVSTCBmcm9tICcgKyB1cmwpLCB7XG4gICAgICAgIGNhdXNlOiBlcnJcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgc3RhdHVzIGNvZGUgJyArIHN0YXR1cylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cblxuICAgIC8vIDUuIFNldCByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyB0byBzdGF0dXMuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5zdGF0dXMgPSBzdGF0dXNcblxuICAgIC8vIDYuIExldCB2YWx1ZSBiZSBwYXJzZWRVUkwsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICBjb25zdCB2YWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoVVJMU2VyaWFsaXplcihwYXJzZWRVUkwpKVxuXG4gICAgLy8gNy4gQXBwZW5kIGBMb2NhdGlvbmAvdmFsdWUgdG8gcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdLmhlYWRlcnNMaXN0LmFwcGVuZCgnbG9jYXRpb24nLCB2YWx1ZSlcblxuICAgIC8vIDguIFJldHVybiByZXNwb25zZU9iamVjdC5cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2VcbiAgY29uc3RydWN0b3IgKGJvZHkgPSBudWxsLCBpbml0ID0ge30pIHtcbiAgICBpZiAoYm9keSAhPT0gbnVsbCkge1xuICAgICAgYm9keSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0KGJvZHkpXG4gICAgfVxuXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuXG4gICAgLy8gVE9ET1xuICAgIHRoaXNba1JlYWxtXSA9IHsgc2V0dGluZ3NPYmplY3Q6IHt9IH1cblxuICAgIC8vIDEuIFNldCB0aGlzXHUyMDE5cyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHRoaXNba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMuIExldCBib2R5V2l0aFR5cGUgYmUgbnVsbC5cbiAgICBsZXQgYm9keVdpdGhUeXBlID0gbnVsbFxuXG4gICAgLy8gNC4gSWYgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgYm9keVdpdGhUeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBib2R5LlxuICAgIGlmIChib2R5ICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCB0eXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBib2R5V2l0aFR5cGUgPSB7IGJvZHk6IGV4dHJhY3RlZEJvZHksIHR5cGUgfVxuICAgIH1cblxuICAgIC8vIDUuIFBlcmZvcm0gaW5pdGlhbGl6ZSBhIHJlc3BvbnNlIGdpdmVuIHRoaXMsIGluaXQsIGFuZCBib2R5V2l0aFR5cGUuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHRoaXMsIGluaXQsIGJvZHlXaXRoVHlwZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHR5cGUsIGUuZy4sIFwiY29yc1wiLlxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgdHlwZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgdHlwZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnR5cGVcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIFVSTCwgaWYgaXQgaGFzIG9uZTsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgY29uc3QgdXJsTGlzdCA9IHRoaXNba1N0YXRlXS51cmxMaXN0XG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXNwb25zZVx1MjAxOXMgVVJMIGlzIG51bGw7IG90aGVyd2lzZSB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMLFxuICAgIC8vIHNlcmlhbGl6ZWQgd2l0aCBleGNsdWRlIGZyYWdtZW50IHNldCB0byB0cnVlLlxuICAgIGNvbnN0IHVybCA9IHVybExpc3RbdXJsTGlzdC5sZW5ndGggLSAxXSA/PyBudWxsXG5cbiAgICBpZiAodXJsID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih1cmwsIHRydWUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2Ugd2FzIG9idGFpbmVkIHRocm91Z2ggYSByZWRpcmVjdC5cbiAgZ2V0IHJlZGlyZWN0ZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0ZWQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgVVJMXG4gICAgLy8gbGlzdCBoYXMgbW9yZSB0aGFuIG9uZSBpdGVtOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS51cmxMaXN0Lmxlbmd0aCA+IDFcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgZ2V0IHN0YXR1cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuIG9rIHN0YXR1cy5cbiAgZ2V0IG9rICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBvayBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW5cbiAgICAvLyBvayBzdGF0dXM7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1cyA+PSAyMDAgJiYgdGhpc1trU3RhdGVdLnN0YXR1cyA8PSAyOTlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlLlxuICBnZXQgc3RhdHVzVGV4dCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgc3RhdHVzVGV4dCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzXG4gICAgLy8gbWVzc2FnZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlcnMgYXMgSGVhZGVycy5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gISF0aGlzW2tTdGF0ZV0uYm9keSAmJiB1dGlsLmlzRGlzdHVyYmVkKHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXNwb25zZS5cbiAgY2xvbmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCAodGhpcy5ib2R5ICYmIHRoaXMuYm9keS5sb2NrZWQpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlLmNsb25lJyxcbiAgICAgICAgbWVzc2FnZTogJ0JvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVzcG9uc2UuXG4gICAgY29uc3QgY2xvbmVkUmVzcG9uc2UgPSBjbG9uZVJlc3BvbnNlKHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlblxuICAgIC8vIGNsb25lZFJlc3BvbnNlLCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVzcG9uc2VcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSBjbG9uZWRSZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trSGVhZGVyc11ba1JlYWxtXVxuXG4gICAgcmV0dXJuIGNsb25lZFJlc3BvbnNlT2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZVx1MjAxOXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZVx1MjAxOXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkocmVzcG9uc2UuYm9keSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiBuZXdSZXNwb25zZS5cbiAgcmV0dXJuIG5ld1Jlc3BvbnNlXG59XG5cbmZ1bmN0aW9uIG1ha2VSZXNwb25zZSAoaW5pdCkge1xuICByZXR1cm4ge1xuICAgIGFib3J0ZWQ6IGZhbHNlLFxuICAgIHJhbmdlUmVxdWVzdGVkOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd1Bhc3NlZDogZmFsc2UsXG4gICAgcmVxdWVzdEluY2x1ZGVzQ3JlZGVudGlhbHM6IGZhbHNlLFxuICAgIHR5cGU6ICdkZWZhdWx0JyxcbiAgICBzdGF0dXM6IDIwMCxcbiAgICB0aW1pbmdJbmZvOiBudWxsLFxuICAgIGNhY2hlU3RhdGU6ICcnLFxuICAgIHN0YXR1c1RleHQ6ICcnLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCA/IFsuLi5pbml0LnVybExpc3RdIDogW11cbiAgfVxufVxuXG5mdW5jdGlvbiBtYWtlTmV0d29ya0Vycm9yIChyZWFzb24pIHtcbiAgY29uc3QgaXNFcnJvciA9IGlzRXJyb3JMaWtlKHJlYXNvbilcbiAgcmV0dXJuIG1ha2VSZXNwb25zZSh7XG4gICAgdHlwZTogJ2Vycm9yJyxcbiAgICBzdGF0dXM6IDAsXG4gICAgZXJyb3I6IGlzRXJyb3JcbiAgICAgID8gcmVhc29uXG4gICAgICA6IG5ldyBFcnJvcihyZWFzb24gPyBTdHJpbmcocmVhc29uKSA6IHJlYXNvbiksXG4gICAgYWJvcnRlZDogcmVhc29uICYmIHJlYXNvbi5uYW1lID09PSAnQWJvcnRFcnJvcidcbiAgfSlcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZVx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAnICsgcmVzcG9uc2Uuc3RhdHVzXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdDb250ZW50LVR5cGUnKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSlcbiAgICB9XG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUmVhZGFibGVTdHJlYW0gPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZWFkYWJsZVN0cmVhbVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YSA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEZvcm1EYXRhXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFVSTFNlYXJjaFBhcmFtc1xuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jdHlwZWRlZmRlZi14bWxodHRwcmVxdWVzdGJvZHlpbml0XG53ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbiAgfVxuXG4gIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoViwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNBcnJheUJ1ZmZlcihWKSB8fCB0eXBlcy5pc1R5cGVkQXJyYXkoVikgfHwgdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgfVxuXG4gIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkZvcm1EYXRhKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXQgPSBmdW5jdGlvbiAoVikge1xuICBpZiAoViBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtKFYpXG4gIH1cblxuICAvLyBOb3RlOiB0aGUgc3BlYyBkb2Vzbid0IGluY2x1ZGUgYXN5bmMgaXRlcmFibGVzLFxuICAvLyB0aGlzIGlzIGFuIHVuZGljaSBleHRlbnNpb24uXG4gIGlmIChWPy5bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgcmV0dXJuIFZcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5YTUxIdHRwUmVxdWVzdEJvZHlJbml0KFYpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3N0YXR1cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDIwMFxuICB9LFxuICB7XG4gICAga2V5OiAnc3RhdHVzVGV4dCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1ha2VOZXR3b3JrRXJyb3IsXG4gIG1ha2VSZXNwb25zZSxcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgUmVzcG9uc2UsXG4gIGNsb25lUmVzcG9uc2Vcbn1cbiIsICIvKiBnbG9iYWxzIEFib3J0Q29udHJvbGxlciAqL1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBleHRyYWN0Qm9keSwgbWl4aW5Cb2R5LCBjbG9uZUJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7IEhlYWRlcnMsIGZpbGw6IGZpbGxIZWFkZXJzLCBIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgRmluYWxpemF0aW9uUmVnaXN0cnkgfSA9IHJlcXVpcmUoJy4uL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYnKSgpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgc2FtZU9yaWdpbixcbiAgbm9ybWFsaXplTWV0aG9kLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBub3JtYWxpemVNZXRob2RSZWNvcmRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHJlZmVycmVyUG9saWN5LFxuICByZXF1ZXN0UmVkaXJlY3QsXG4gIHJlcXVlc3RNb2RlLFxuICByZXF1ZXN0Q3JlZGVudGlhbHMsXG4gIHJlcXVlc3RDYWNoZSxcbiAgcmVxdWVzdER1cGxleFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gdXRpbFxuY29uc3QgeyBrSGVhZGVycywga1NpZ25hbCwga1N0YXRlLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QsIGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBnZXRNYXhMaXN0ZW5lcnMsIHNldE1heExpc3RlbmVycywgZ2V0RXZlbnRMaXN0ZW5lcnMsIGRlZmF1bHRNYXhMaXN0ZW5lcnMgfSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmxldCBUcmFuc2Zvcm1TdHJlYW0gPSBnbG9iYWxUaGlzLlRyYW5zZm9ybVN0cmVhbVxuXG5jb25zdCBrQWJvcnRDb250cm9sbGVyID0gU3ltYm9sKCdhYm9ydENvbnRyb2xsZXInKVxuXG5jb25zdCByZXF1ZXN0RmluYWxpemVyID0gbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KCh7IHNpZ25hbCwgYWJvcnQgfSkgPT4ge1xuICBzaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWNsYXNzXG5jbGFzcyBSZXF1ZXN0IHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0XG4gIGNvbnN0cnVjdG9yIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gICAgaWYgKGlucHV0ID09PSBrQ29uc3RydWN0KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnUmVxdWVzdCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIGlucHV0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8oaW5wdXQpXG4gICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbml0KGluaXQpXG5cbiAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS93ZWJhcHBhcGlzLmh0bWwjZW52aXJvbm1lbnQtc2V0dGluZ3Mtb2JqZWN0XG4gICAgdGhpc1trUmVhbG1dID0ge1xuICAgICAgc2V0dGluZ3NPYmplY3Q6IHtcbiAgICAgICAgYmFzZVVybDogZ2V0R2xvYmFsT3JpZ2luKCksXG4gICAgICAgIGdldCBvcmlnaW4gKCkge1xuICAgICAgICAgIHJldHVybiB0aGlzLmJhc2VVcmw/Lm9yaWdpblxuICAgICAgICB9LFxuICAgICAgICBwb2xpY3lDb250YWluZXI6IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEuIExldCByZXF1ZXN0IGJlIG51bGwuXG4gICAgbGV0IHJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tNb2RlIGJlIG51bGwuXG4gICAgbGV0IGZhbGxiYWNrTW9kZSA9IG51bGxcblxuICAgIC8vIDMuIExldCBiYXNlVVJMIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVcmwgPSB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QuYmFzZVVybFxuXG4gICAgLy8gNC4gTGV0IHNpZ25hbCBiZSBudWxsLlxuICAgIGxldCBzaWduYWwgPSBudWxsXG5cbiAgICAvLyA1LiBJZiBpbnB1dCBpcyBhIHN0cmluZywgdGhlbjpcbiAgICBpZiAodHlwZW9mIGlucHV0ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gMS4gTGV0IHBhcnNlZFVSTCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgaW5wdXQgd2l0aCBiYXNlVVJMLlxuICAgICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBsZXQgcGFyc2VkVVJMXG4gICAgICB0cnkge1xuICAgICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKGlucHV0LCBiYXNlVXJsKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBVUkwgZnJvbSAnICsgaW5wdXQsIHsgY2F1c2U6IGVyciB9KVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBwYXJzZWRVUkwgaW5jbHVkZXMgY3JlZGVudGlhbHMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAocGFyc2VkVVJMLnVzZXJuYW1lIHx8IHBhcnNlZFVSTC5wYXNzd29yZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdSZXF1ZXN0IGNhbm5vdCBiZSBjb25zdHJ1Y3RlZCBmcm9tIGEgVVJMIHRoYXQgaW5jbHVkZXMgY3JlZGVudGlhbHM6ICcgK1xuICAgICAgICAgICAgaW5wdXRcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdob3NlIFVSTCBpcyBwYXJzZWRVUkwuXG4gICAgICByZXF1ZXN0ID0gbWFrZVJlcXVlc3QoeyB1cmxMaXN0OiBbcGFyc2VkVVJMXSB9KVxuXG4gICAgICAvLyA1LiBTZXQgZmFsbGJhY2tNb2RlIHRvIFwiY29yc1wiLlxuICAgICAgZmFsbGJhY2tNb2RlID0gJ2NvcnMnXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDYuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNy4gQXNzZXJ0OiBpbnB1dCBpcyBhIFJlcXVlc3Qgb2JqZWN0LlxuICAgICAgYXNzZXJ0KGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdClcblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3QgdG8gaW5wdXRcdTIwMTlzIHJlcXVlc3QuXG4gICAgICByZXF1ZXN0ID0gaW5wdXRba1N0YXRlXVxuXG4gICAgICAvLyA5LiBTZXQgc2lnbmFsIHRvIGlucHV0XHUyMDE5cyBzaWduYWwuXG4gICAgICBzaWduYWwgPSBpbnB1dFtrU2lnbmFsXVxuICAgIH1cblxuICAgIC8vIDcuIExldCBvcmlnaW4gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBvcmlnaW4uXG4gICAgY29uc3Qgb3JpZ2luID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0Lm9yaWdpblxuXG4gICAgLy8gOC4gTGV0IHdpbmRvdyBiZSBcImNsaWVudFwiLlxuICAgIGxldCB3aW5kb3cgPSAnY2xpZW50J1xuXG4gICAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCBhbmQgaXRzIG9yaWdpblxuICAgIC8vIGlzIHNhbWUgb3JpZ2luIHdpdGggb3JpZ2luLCB0aGVuIHNldCB3aW5kb3cgdG8gcmVxdWVzdFx1MjAxOXMgd2luZG93LlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3Qud2luZG93Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vudmlyb25tZW50U2V0dGluZ3NPYmplY3QnICYmXG4gICAgICBzYW1lT3JpZ2luKHJlcXVlc3Qud2luZG93LCBvcmlnaW4pXG4gICAgKSB7XG4gICAgICB3aW5kb3cgPSByZXF1ZXN0LndpbmRvd1xuICAgIH1cblxuICAgIC8vIDEwLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGluaXQud2luZG93ICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCd3aW5kb3cnIG9wdGlvbiAnJHt3aW5kb3d9JyBtdXN0IGJlIG51bGxgKVxuICAgIH1cblxuICAgIC8vIDExLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cywgdGhlbiBzZXQgd2luZG93IHRvIFwibm8td2luZG93XCIuXG4gICAgaWYgKCd3aW5kb3cnIGluIGluaXQpIHtcbiAgICAgIHdpbmRvdyA9ICduby13aW5kb3cnXG4gICAgfVxuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHtcbiAgICAgIC8vIFVSTCByZXF1ZXN0XHUyMDE5cyBVUkwuXG4gICAgICAvLyB1bmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogdGhpcyBpcyBzZXQgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gcmVxdWVzdCdzIHVybExpc3QgaW4gbWFrZVJlcXVlc3RcbiAgICAgIC8vIG1ldGhvZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QuXG4gICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgLy8gaGVhZGVyIGxpc3QgQSBjb3B5IG9mIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IGhlYWRlcnNMaXN0IGlzIGNsb25lZCBpbiBtYWtlUmVxdWVzdFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlcXVlc3QuaGVhZGVyc0xpc3QsXG4gICAgICAvLyB1bnNhZmUtcmVxdWVzdCBmbGFnIFNldC5cbiAgICAgIHVuc2FmZVJlcXVlc3Q6IHJlcXVlc3QudW5zYWZlUmVxdWVzdCxcbiAgICAgIC8vIGNsaWVudCBUaGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgICBjbGllbnQ6IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdCxcbiAgICAgIC8vIHdpbmRvdyB3aW5kb3cuXG4gICAgICB3aW5kb3csXG4gICAgICAvLyBwcmlvcml0eSByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eS5cbiAgICAgIHByaW9yaXR5OiByZXF1ZXN0LnByaW9yaXR5LFxuICAgICAgLy8gb3JpZ2luIHJlcXVlc3RcdTIwMTlzIG9yaWdpbi4gVGhlIHByb3BhZ2F0aW9uIG9mIHRoZSBvcmlnaW4gaXMgb25seSBzaWduaWZpY2FudCBmb3IgbmF2aWdhdGlvbiByZXF1ZXN0c1xuICAgICAgLy8gYmVpbmcgaGFuZGxlZCBieSBhIHNlcnZpY2Ugd29ya2VyLiBJbiB0aGlzIHNjZW5hcmlvIGEgcmVxdWVzdCBjYW4gaGF2ZSBhbiBvcmlnaW4gdGhhdCBpcyBkaWZmZXJlbnRcbiAgICAgIC8vIGZyb20gdGhlIGN1cnJlbnQgY2xpZW50LlxuICAgICAgb3JpZ2luOiByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIC8vIHJlZmVycmVyIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgICAgcmVmZXJyZXI6IHJlcXVlc3QucmVmZXJyZXIsXG4gICAgICAvLyByZWZlcnJlciBwb2xpY3kgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICAgICAgcmVmZXJyZXJQb2xpY3k6IHJlcXVlc3QucmVmZXJyZXJQb2xpY3ksXG4gICAgICAvLyBtb2RlIHJlcXVlc3RcdTIwMTlzIG1vZGUuXG4gICAgICBtb2RlOiByZXF1ZXN0Lm1vZGUsXG4gICAgICAvLyBjcmVkZW50aWFscyBtb2RlIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUuXG4gICAgICBjcmVkZW50aWFsczogcmVxdWVzdC5jcmVkZW50aWFscyxcbiAgICAgIC8vIGNhY2hlIG1vZGUgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZS5cbiAgICAgIGNhY2hlOiByZXF1ZXN0LmNhY2hlLFxuICAgICAgLy8gcmVkaXJlY3QgbW9kZSByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlLlxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3QucmVkaXJlY3QsXG4gICAgICAvLyBpbnRlZ3JpdHkgbWV0YWRhdGEgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhLlxuICAgICAgaW50ZWdyaXR5OiByZXF1ZXN0LmludGVncml0eSxcbiAgICAgIC8vIGtlZXBhbGl2ZSByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgICBrZWVwYWxpdmU6IHJlcXVlc3Qua2VlcGFsaXZlLFxuICAgICAgLy8gcmVsb2FkLW5hdmlnYXRpb24gZmxhZyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVsb2FkTmF2aWdhdGlvbjogcmVxdWVzdC5yZWxvYWROYXZpZ2F0aW9uLFxuICAgICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdFx1MjAxOXMgaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICBoaXN0b3J5TmF2aWdhdGlvbjogcmVxdWVzdC5oaXN0b3J5TmF2aWdhdGlvbixcbiAgICAgIC8vIFVSTCBsaXN0IEEgY2xvbmUgb2YgcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gICAgICB1cmxMaXN0OiBbLi4ucmVxdWVzdC51cmxMaXN0XVxuICAgIH0pXG5cbiAgICBjb25zdCBpbml0SGFzS2V5ID0gT2JqZWN0LmtleXMoaW5pdCkubGVuZ3RoICE9PSAwXG5cbiAgICAvLyAxMy4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHNldCBpdCB0byBcInNhbWUtb3JpZ2luXCIuXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICAgIHJlcXVlc3QubW9kZSA9ICdzYW1lLW9yaWdpbidcbiAgICAgIH1cblxuICAgICAgLy8gMi4gVW5zZXQgcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbiA9IGZhbHNlXG5cbiAgICAgIC8vIDMuIFVuc2V0IHJlcXVlc3RcdTIwMTlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgcmVxdWVzdC5oaXN0b3J5TmF2aWdhdGlvbiA9IGZhbHNlXG5cbiAgICAgIC8vIDQuIFNldCByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gdG8gXCJjbGllbnRcIi5cbiAgICAgIHJlcXVlc3Qub3JpZ2luID0gJ2NsaWVudCdcblxuICAgICAgLy8gNS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwiY2xpZW50XCJcbiAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuXG4gICAgICAvLyA2LiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gJydcblxuICAgICAgLy8gNy4gU2V0IHJlcXVlc3RcdTIwMTlzIFVSTCB0byByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIHJlcXVlc3QudXJsID0gcmVxdWVzdC51cmxMaXN0W3JlcXVlc3QudXJsTGlzdC5sZW5ndGggLSAxXVxuXG4gICAgICAvLyA4LiBTZXQgcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QgdG8gXHUwMEFCIHJlcXVlc3RcdTIwMTlzIFVSTCBcdTAwQkIuXG4gICAgICByZXF1ZXN0LnVybExpc3QgPSBbcmVxdWVzdC51cmxdXG4gICAgfVxuXG4gICAgLy8gMTQuIElmIGluaXRbXCJyZWZlcnJlclwiXSBleGlzdHMsIHRoZW46XG4gICAgaWYgKGluaXQucmVmZXJyZXIgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlZmVycmVyIGJlIGluaXRbXCJyZWZlcnJlclwiXS5cbiAgICAgIGNvbnN0IHJlZmVycmVyID0gaW5pdC5yZWZlcnJlclxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlciBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcIm5vLXJlZmVycmVyXCIuXG4gICAgICBpZiAocmVmZXJyZXIgPT09ICcnKSB7XG4gICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnbm8tcmVmZXJyZXInXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAxLiBMZXQgcGFyc2VkUmVmZXJyZXIgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHJlZmVycmVyIHdpdGhcbiAgICAgICAgLy8gYmFzZVVSTC5cbiAgICAgICAgLy8gMi4gSWYgcGFyc2VkUmVmZXJyZXIgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgbGV0IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcGFyc2VkUmVmZXJyZXIgPSBuZXcgVVJMKHJlZmVycmVyLCBiYXNlVXJsKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBSZWZlcnJlciBcIiR7cmVmZXJyZXJ9XCIgaXMgbm90IGEgdmFsaWQgVVJMLmAsIHsgY2F1c2U6IGVyciB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gSWYgb25lIG9mIHRoZSBmb2xsb3dpbmcgaXMgdHJ1ZVxuICAgICAgICAvLyAtIHBhcnNlZFJlZmVycmVyXHUyMDE5cyBzY2hlbWUgaXMgXCJhYm91dFwiIGFuZCBwYXRoIGlzIHRoZSBzdHJpbmcgXCJjbGllbnRcIlxuICAgICAgICAvLyAtIHBhcnNlZFJlZmVycmVyXHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggb3JpZ2luXG4gICAgICAgIC8vIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIFwiY2xpZW50XCIuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAocGFyc2VkUmVmZXJyZXIucHJvdG9jb2wgPT09ICdhYm91dDonICYmIHBhcnNlZFJlZmVycmVyLmhvc3RuYW1lID09PSAnY2xpZW50JykgfHxcbiAgICAgICAgICAob3JpZ2luICYmICFzYW1lT3JpZ2luKHBhcnNlZFJlZmVycmVyLCB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QuYmFzZVVybCkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSAnY2xpZW50J1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIDQuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHRvIHBhcnNlZFJlZmVycmVyLlxuICAgICAgICAgIHJlcXVlc3QucmVmZXJyZXIgPSBwYXJzZWRSZWZlcnJlclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMTUuIElmIGluaXRbXCJyZWZlcnJlclBvbGljeVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZmVycmVyUG9saWN5ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSBpbml0LnJlZmVycmVyUG9saWN5XG4gICAgfVxuXG4gICAgLy8gMTYuIExldCBtb2RlIGJlIGluaXRbXCJtb2RlXCJdIGlmIGl0IGV4aXN0cywgYW5kIGZhbGxiYWNrTW9kZSBvdGhlcndpc2UuXG4gICAgbGV0IG1vZGVcbiAgICBpZiAoaW5pdC5tb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIG1vZGUgPSBpbml0Lm1vZGVcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kZSA9IGZhbGxiYWNrTW9kZVxuICAgIH1cblxuICAgIC8vIDE3LiBJZiBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAobW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgcmVxdWVzdCBtb2RlIG5hdmlnYXRlLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMTguIElmIG1vZGUgaXMgbm9uLW51bGwsIHNldCByZXF1ZXN0XHUyMDE5cyBtb2RlIHRvIG1vZGUuXG4gICAgaWYgKG1vZGUgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5tb2RlID0gbW9kZVxuICAgIH1cblxuICAgIC8vIDE5LiBJZiBpbml0W1wiY3JlZGVudGlhbHNcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlXG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQuY3JlZGVudGlhbHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jcmVkZW50aWFscyA9IGluaXQuY3JlZGVudGlhbHNcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgaW5pdFtcImNhY2hlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5jYWNoZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNhY2hlID0gaW5pdC5jYWNoZVxuICAgIH1cblxuICAgIC8vIDIxLiBJZiByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiBhbmQgcmVxdWVzdFx1MjAxOXMgbW9kZSBpc1xuICAgIC8vIG5vdCBcInNhbWUtb3JpZ2luXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHJlcXVlc3QuY2FjaGUgPT09ICdvbmx5LWlmLWNhY2hlZCcgJiYgcmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIidvbmx5LWlmLWNhY2hlZCcgY2FuIGJlIHNldCBvbmx5IHdpdGggJ3NhbWUtb3JpZ2luJyBtb2RlXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyAyMi4gSWYgaW5pdFtcInJlZGlyZWN0XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWRpcmVjdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZGlyZWN0ID0gaW5pdC5yZWRpcmVjdFxuICAgIH1cblxuICAgIC8vIDIzLiBJZiBpbml0W1wiaW50ZWdyaXR5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIHRvIGl0LlxuICAgIGlmIChpbml0LmludGVncml0eSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LmludGVncml0eSA9IFN0cmluZyhpbml0LmludGVncml0eSlcbiAgICB9XG5cbiAgICAvLyAyNC4gSWYgaW5pdFtcImtlZXBhbGl2ZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSB0byBpdC5cbiAgICBpZiAoaW5pdC5rZWVwYWxpdmUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5rZWVwYWxpdmUgPSBCb29sZWFuKGluaXQua2VlcGFsaXZlKVxuICAgIH1cblxuICAgIC8vIDI1LiBJZiBpbml0W1wibWV0aG9kXCJdIGV4aXN0cywgdGhlbjpcbiAgICBpZiAoaW5pdC5tZXRob2QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IG1ldGhvZCBiZSBpbml0W1wibWV0aG9kXCJdLlxuICAgICAgbGV0IG1ldGhvZCA9IGluaXQubWV0aG9kXG5cbiAgICAgIC8vIDIuIElmIG1ldGhvZCBpcyBub3QgYSBtZXRob2Qgb3IgbWV0aG9kIGlzIGEgZm9yYmlkZGVuIG1ldGhvZCwgdGhlblxuICAgICAgLy8gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoIWlzVmFsaWRIVFRQVG9rZW4obWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHttZXRob2R9JyBpcyBub3QgYSB2YWxpZCBIVFRQIG1ldGhvZC5gKVxuICAgICAgfVxuXG4gICAgICBpZiAoZm9yYmlkZGVuTWV0aG9kc1NldC5oYXMobWV0aG9kLnRvVXBwZXJDYXNlKCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCcke21ldGhvZH0nIEhUVFAgbWV0aG9kIGlzIHVuc3VwcG9ydGVkLmApXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIE5vcm1hbGl6ZSBtZXRob2QuXG4gICAgICBtZXRob2QgPSBub3JtYWxpemVNZXRob2RSZWNvcmRbbWV0aG9kXSA/PyBub3JtYWxpemVNZXRob2QobWV0aG9kKVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIG1ldGhvZC5cbiAgICAgIHJlcXVlc3QubWV0aG9kID0gbWV0aG9kXG4gICAgfVxuXG4gICAgLy8gMjYuIElmIGluaXRbXCJzaWduYWxcIl0gZXhpc3RzLCB0aGVuIHNldCBzaWduYWwgdG8gaXQuXG4gICAgaWYgKGluaXQuc2lnbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHNpZ25hbCA9IGluaXQuc2lnbmFsXG4gICAgfVxuXG4gICAgLy8gMjcuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0IHRvIHJlcXVlc3QuXG4gICAgdGhpc1trU3RhdGVdID0gcmVxdWVzdFxuXG4gICAgLy8gMjguIFNldCB0aGlzXHUyMDE5cyBzaWduYWwgdG8gYSBuZXcgQWJvcnRTaWduYWwgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbS5cbiAgICAvLyBUT0RPOiBjb3VsZCB0aGlzIGJlIHNpbXBsaWZpZWQgd2l0aCBBYm9ydFNpZ25hbC5hbnlcbiAgICAvLyAoaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNkb20tYWJvcnRzaWduYWwtYW55KVxuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgdGhpc1trU2lnbmFsXSA9IGFjLnNpZ25hbFxuICAgIHRoaXNba1NpZ25hbF1ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMjkuIElmIHNpZ25hbCBpcyBub3QgbnVsbCwgdGhlbiBtYWtlIHRoaXNcdTIwMTlzIHNpZ25hbCBmb2xsb3cgc2lnbmFsLlxuICAgIGlmIChzaWduYWwgIT0gbnVsbCkge1xuICAgICAgaWYgKFxuICAgICAgICAhc2lnbmFsIHx8XG4gICAgICAgIHR5cGVvZiBzaWduYWwuYWJvcnRlZCAhPT0gJ2Jvb2xlYW4nIHx8XG4gICAgICAgIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJGYWlsZWQgdG8gY29uc3RydWN0ICdSZXF1ZXN0JzogbWVtYmVyIHNpZ25hbCBpcyBub3Qgb2YgdHlwZSBBYm9ydFNpZ25hbC5cIlxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgICAgICBhYy5hYm9ydChzaWduYWwucmVhc29uKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gS2VlcCBhIHN0cm9uZyByZWYgdG8gYWMgd2hpbGUgcmVxdWVzdCBvYmplY3RcbiAgICAgICAgLy8gaXMgYWxpdmUuIFRoaXMgaXMgbmVlZGVkIHRvIHByZXZlbnQgQWJvcnRDb250cm9sbGVyXG4gICAgICAgIC8vIGZyb20gYmVpbmcgcHJlbWF0dXJlbHkgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4gICAgICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE5MjYuXG4gICAgICAgIHRoaXNba0Fib3J0Q29udHJvbGxlcl0gPSBhY1xuXG4gICAgICAgIGNvbnN0IGFjUmVmID0gbmV3IFdlYWtSZWYoYWMpXG4gICAgICAgIGNvbnN0IGFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGNvbnN0IGFjID0gYWNSZWYuZGVyZWYoKVxuICAgICAgICAgIGlmIChhYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBhYy5hYm9ydCh0aGlzLnJlYXNvbilcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBUaGlyZC1wYXJ0eSBBYm9ydENvbnRyb2xsZXJzIG1heSBub3Qgd29yayB3aXRoIHRoZXNlLlxuICAgICAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvMTkxMCNpc3N1ZWNvbW1lbnQtMTQ2NDQ5NTYxOS5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBJZiB0aGUgbWF4IGFtb3VudCBvZiBsaXN0ZW5lcnMgaXMgZXF1YWwgdG8gdGhlIGRlZmF1bHQsIGluY3JlYXNlIGl0XG4gICAgICAgICAgLy8gVGhpcyBpcyBvbmx5IGF2YWlsYWJsZSBpbiBub2RlID49IHYxOS45LjBcbiAgICAgICAgICBpZiAodHlwZW9mIGdldE1heExpc3RlbmVycyA9PT0gJ2Z1bmN0aW9uJyAmJiBnZXRNYXhMaXN0ZW5lcnMoc2lnbmFsKSA9PT0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDEwMCwgc2lnbmFsKVxuICAgICAgICAgIH0gZWxzZSBpZiAoZ2V0RXZlbnRMaXN0ZW5lcnMoc2lnbmFsLCAnYWJvcnQnKS5sZW5ndGggPj0gZGVmYXVsdE1heExpc3RlbmVycykge1xuICAgICAgICAgICAgc2V0TWF4TGlzdGVuZXJzKDEwMCwgc2lnbmFsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsIGFib3J0KVxuICAgICAgICByZXF1ZXN0RmluYWxpemVyLnJlZ2lzdGVyKGFjLCB7IHNpZ25hbCwgYWJvcnQgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMC4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmQgaXNcbiAgICAvLyBcInJlcXVlc3RcIi5cbiAgICB0aGlzW2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3JlcXVlc3QnXG4gICAgdGhpc1trSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuXG4gICAgLy8gMzEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCIsIHRoZW46XG4gICAgaWYgKG1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2QsXG4gICAgICAvLyB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKCFjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQuaGFzKHJlcXVlc3QubWV0aG9kKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIGAnJHtyZXF1ZXN0Lm1ldGhvZH0gaXMgdW5zdXBwb3J0ZWQgaW4gbm8tY29ycyBtb2RlLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgdG8gXCJyZXF1ZXN0LW5vLWNvcnNcIi5cbiAgICAgIHRoaXNba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVxdWVzdC1uby1jb3JzJ1xuICAgIH1cblxuICAgIC8vIDMyLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLyoqIEB0eXBlIHtIZWFkZXJzTGlzdH0gKi9cbiAgICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XVxuICAgICAgLy8gMS4gTGV0IGhlYWRlcnMgYmUgYSBjb3B5IG9mIHRoaXNcdTIwMTlzIGhlYWRlcnMgYW5kIGl0cyBhc3NvY2lhdGVkIGhlYWRlclxuICAgICAgLy8gbGlzdC5cbiAgICAgIC8vIDIuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBzZXQgaGVhZGVycyB0byBpbml0W1wiaGVhZGVyc1wiXS5cbiAgICAgIGNvbnN0IGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgIT09IHVuZGVmaW5lZCA/IGluaXQuaGVhZGVycyA6IG5ldyBIZWFkZXJzTGlzdChoZWFkZXJzTGlzdClcblxuICAgICAgLy8gMy4gRW1wdHkgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICBoZWFkZXJzTGlzdC5jbGVhcigpXG5cbiAgICAgIC8vIDQuIElmIGhlYWRlcnMgaXMgYSBIZWFkZXJzIG9iamVjdCwgdGhlbiBmb3IgZWFjaCBoZWFkZXIgaW4gaXRzIGhlYWRlclxuICAgICAgLy8gbGlzdCwgYXBwZW5kIGhlYWRlclx1MjAxOXMgbmFtZS9oZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsXSBvZiBoZWFkZXJzKSB7XG4gICAgICAgICAgaGVhZGVyc0xpc3QuYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICB9XG4gICAgICAgIC8vIE5vdGU6IENvcHkgdGhlIGBzZXQtY29va2llYCBtZXRhLWRhdGEuXG4gICAgICAgIGhlYWRlcnNMaXN0LmNvb2tpZXMgPSBoZWFkZXJzLmNvb2tpZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIDUuIE90aGVyd2lzZSwgZmlsbCB0aGlzXHUyMDE5cyBoZWFkZXJzIHdpdGggaGVhZGVycy5cbiAgICAgICAgZmlsbEhlYWRlcnModGhpc1trSGVhZGVyc10sIGhlYWRlcnMpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzMuIExldCBpbnB1dEJvZHkgYmUgaW5wdXRcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgaWYgaW5wdXQgaXMgYSBSZXF1ZXN0XG4gICAgLy8gb2JqZWN0OyBvdGhlcndpc2UgbnVsbC5cbiAgICBjb25zdCBpbnB1dEJvZHkgPSBpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QgPyBpbnB1dFtrU3RhdGVdLmJvZHkgOiBudWxsXG5cbiAgICAvLyAzNC4gSWYgZWl0aGVyIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwgb3IgaW5wdXRCb2R5IGlzXG4gICAgLy8gbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYEdFVGAgb3IgYEhFQURgLCB0aGVuIHRocm93IGFcbiAgICAvLyBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgKGluaXQuYm9keSAhPSBudWxsIHx8IGlucHV0Qm9keSAhPSBudWxsKSAmJlxuICAgICAgKHJlcXVlc3QubWV0aG9kID09PSAnR0VUJyB8fCByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdCB3aXRoIEdFVC9IRUFEIG1ldGhvZCBjYW5ub3QgaGF2ZSBib2R5LicpXG4gICAgfVxuXG4gICAgLy8gMzUuIExldCBpbml0Qm9keSBiZSBudWxsLlxuICAgIGxldCBpbml0Qm9keSA9IG51bGxcblxuICAgIC8vIDM2LiBJZiBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuOlxuICAgIGlmIChpbml0LmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gTGV0IENvbnRlbnQtVHlwZSBiZSBudWxsLlxuICAgICAgLy8gMi4gU2V0IGluaXRCb2R5IGFuZCBDb250ZW50LVR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nXG4gICAgICAvLyBpbml0W1wiYm9keVwiXSwgd2l0aCBrZWVwYWxpdmUgc2V0IHRvIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICAgIGNvbnN0IFtleHRyYWN0ZWRCb2R5LCBjb250ZW50VHlwZV0gPSBleHRyYWN0Qm9keShcbiAgICAgICAgaW5pdC5ib2R5LFxuICAgICAgICByZXF1ZXN0LmtlZXBhbGl2ZVxuICAgICAgKVxuICAgICAgaW5pdEJvZHkgPSBleHRyYWN0ZWRCb2R5XG5cbiAgICAgIC8vIDMsIElmIENvbnRlbnQtVHlwZSBpcyBub24tbnVsbCBhbmQgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgaGVhZGVyIGxpc3QgZG9lc1xuICAgICAgLy8gbm90IGNvbnRhaW4gYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIGBDb250ZW50LVR5cGVgL0NvbnRlbnQtVHlwZSB0b1xuICAgICAgLy8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChjb250ZW50VHlwZSAmJiAhdGhpc1trSGVhZGVyc11ba0hlYWRlcnNMaXN0XS5jb250YWlucygnY29udGVudC10eXBlJykpIHtcbiAgICAgICAgdGhpc1trSGVhZGVyc10uYXBwZW5kKCdjb250ZW50LXR5cGUnLCBjb250ZW50VHlwZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzNy4gTGV0IGlucHV0T3JJbml0Qm9keSBiZSBpbml0Qm9keSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlXG4gICAgLy8gaW5wdXRCb2R5LlxuICAgIGNvbnN0IGlucHV0T3JJbml0Qm9keSA9IGluaXRCb2R5ID8/IGlucHV0Qm9keVxuXG4gICAgLy8gMzguIElmIGlucHV0T3JJbml0Qm9keSBpcyBub24tbnVsbCBhbmQgaW5wdXRPckluaXRCb2R5XHUyMDE5cyBzb3VyY2UgaXNcbiAgICAvLyBudWxsLCB0aGVuOlxuICAgIGlmIChpbnB1dE9ySW5pdEJvZHkgIT0gbnVsbCAmJiBpbnB1dE9ySW5pdEJvZHkuc291cmNlID09IG51bGwpIHtcbiAgICAgIC8vIDEuIElmIGluaXRCb2R5IGlzIG5vbi1udWxsIGFuZCBpbml0W1wiZHVwbGV4XCJdIGRvZXMgbm90IGV4aXN0LFxuICAgICAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChpbml0Qm9keSAhPSBudWxsICYmIGluaXQuZHVwbGV4ID09IG51bGwpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVxdWVzdEluaXQ6IGR1cGxleCBvcHRpb24gaXMgcmVxdWlyZWQgd2hlbiBzZW5kaW5nIGEgYm9keS4nKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIG5laXRoZXIgXCJzYW1lLW9yaWdpblwiIG5vciBcImNvcnNcIixcbiAgICAgIC8vIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tb2RlICE9PSAnc2FtZS1vcmlnaW4nICYmIHJlcXVlc3QubW9kZSAhPT0gJ2NvcnMnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgJ0lmIHJlcXVlc3QgaXMgbWFkZSBmcm9tIFJlYWRhYmxlU3RyZWFtLCBtb2RlIHNob3VsZCBiZSBcInNhbWUtb3JpZ2luXCIgb3IgXCJjb3JzXCInXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMy4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHVzZS1DT1JTLXByZWZsaWdodCBmbGFnLlxuICAgICAgcmVxdWVzdC51c2VDT1JTUHJlZmxpZ2h0RmxhZyA9IHRydWVcbiAgICB9XG5cbiAgICAvLyAzOS4gTGV0IGZpbmFsQm9keSBiZSBpbnB1dE9ySW5pdEJvZHkuXG4gICAgbGV0IGZpbmFsQm9keSA9IGlucHV0T3JJbml0Qm9keVxuXG4gICAgLy8gNDAuIElmIGluaXRCb2R5IGlzIG51bGwgYW5kIGlucHV0Qm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5pdEJvZHkgPT0gbnVsbCAmJiBpbnB1dEJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMS4gSWYgaW5wdXQgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAodXRpbC5pc0Rpc3R1cmJlZChpbnB1dEJvZHkuc3RyZWFtKSB8fCBpbnB1dEJvZHkuc3RyZWFtLmxvY2tlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdDYW5ub3QgY29uc3RydWN0IGEgUmVxdWVzdCB3aXRoIGEgUmVxdWVzdCBvYmplY3QgdGhhdCBoYXMgYWxyZWFkeSBiZWVuIHVzZWQuJ1xuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCBmaW5hbEJvZHkgdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIHByb3h5IGZvciBpbnB1dEJvZHkuXG4gICAgICBpZiAoIVRyYW5zZm9ybVN0cmVhbSkge1xuICAgICAgICBUcmFuc2Zvcm1TdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuVHJhbnNmb3JtU3RyZWFtXG4gICAgICB9XG5cbiAgICAgIC8vIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtLWNyZWF0ZS1hLXByb3h5XG4gICAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oKVxuICAgICAgaW5wdXRCb2R5LnN0cmVhbS5waXBlVGhyb3VnaChpZGVudGl0eVRyYW5zZm9ybSlcbiAgICAgIGZpbmFsQm9keSA9IHtcbiAgICAgICAgc291cmNlOiBpbnB1dEJvZHkuc291cmNlLFxuICAgICAgICBsZW5ndGg6IGlucHV0Qm9keS5sZW5ndGgsXG4gICAgICAgIHN0cmVhbTogaWRlbnRpdHlUcmFuc2Zvcm0ucmVhZGFibGVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0MS4gU2V0IHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gZmluYWxCb2R5LlxuICAgIHRoaXNba1N0YXRlXS5ib2R5ID0gZmluYWxCb2R5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIEhUVFAgbWV0aG9kLCB3aGljaCBpcyBcIkdFVFwiIGJ5IGRlZmF1bHQuXG4gIGdldCBtZXRob2QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbWV0aG9kIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1ldGhvZFxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgVVJMIG9mIHJlcXVlc3QgYXMgYSBzdHJpbmcuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tTdGF0ZV0udXJsKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIEhlYWRlcnMgb2JqZWN0IGNvbnNpc3Rpbmcgb2YgdGhlIGhlYWRlcnMgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIE5vdGUgdGhhdCBoZWFkZXJzIGFkZGVkIGluIHRoZSBuZXR3b3JrIGxheWVyIGJ5IHRoZSB1c2VyIGFnZW50IHdpbGwgbm90XG4gIC8vIGJlIGFjY291bnRlZCBmb3IgaW4gdGhpcyBvYmplY3QsIGUuZy4sIHRoZSBcIkhvc3RcIiBoZWFkZXIuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGhlYWRlcnMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc11cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGtpbmQgb2YgcmVzb3VyY2UgcmVxdWVzdGVkIGJ5IHJlcXVlc3QsIGUuZy4sIFwiZG9jdW1lbnRcIlxuICAvLyBvciBcInNjcmlwdFwiLlxuICBnZXQgZGVzdGluYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgZGVzdGluYXRpb24gZ2V0dGVyIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24uXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5kZXN0aW5hdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgb2YgcmVxdWVzdC4gSXRzIHZhbHVlIGNhbiBiZSBhIHNhbWUtb3JpZ2luIFVSTCBpZlxuICAvLyBleHBsaWNpdGx5IHNldCBpbiBpbml0LCB0aGUgZW1wdHkgc3RyaW5nIHRvIGluZGljYXRlIG5vIHJlZmVycmVyLCBhbmRcbiAgLy8gXCJhYm91dDpjbGllbnRcIiB3aGVuIGRlZmF1bHRpbmcgdG8gdGhlIGdsb2JhbFx1MjAxOXMgZGVmYXVsdC4gVGhpcyBpcyB1c2VkXG4gIC8vIGR1cmluZyBmZXRjaGluZyB0byBkZXRlcm1pbmUgdGhlIHZhbHVlIG9mIHRoZSBgUmVmZXJlcmAgaGVhZGVyIG9mIHRoZVxuICAvLyByZXF1ZXN0IGJlaW5nIG1hZGUuXG4gIGdldCByZWZlcnJlciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgdGhlbiByZXR1cm4gdGhlXG4gICAgLy8gZW1wdHkgc3RyaW5nLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICduby1yZWZlcnJlcicpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIFwiY2xpZW50XCIsIHRoZW4gcmV0dXJuXG4gICAgLy8gXCJhYm91dDpjbGllbnRcIi5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnY2xpZW50Jykge1xuICAgICAgcmV0dXJuICdhYm91dDpjbGllbnQnXG4gICAgfVxuXG4gICAgLy8gUmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXIudG9TdHJpbmcoKVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVmZXJyZXIgcG9saWN5IGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBUaGlzIGlzIHVzZWQgZHVyaW5nIGZldGNoaW5nIHRvIGNvbXB1dGUgdGhlIHZhbHVlIG9mIHRoZSByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlci5cbiAgZ2V0IHJlZmVycmVyUG9saWN5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZmVycmVyUG9saWN5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nXG4gIC8vIHdoZXRoZXIgdGhlIHJlcXVlc3Qgd2lsbCB1c2UgQ09SUywgb3Igd2lsbCBiZSByZXN0cmljdGVkIHRvIHNhbWUtb3JpZ2luXG4gIC8vIFVSTHMuXG4gIGdldCBtb2RlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1vZGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm1vZGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNyZWRlbnRpYWxzIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgd2hldGhlciBjcmVkZW50aWFscyB3aWxsIGJlIHNlbnQgd2l0aCB0aGVcbiAgLy8gcmVxdWVzdCBhbHdheXMsIG5ldmVyLCBvciBvbmx5IHdoZW4gc2VudCB0byBhIHNhbWUtb3JpZ2luIFVSTC5cbiAgZ2V0IGNyZWRlbnRpYWxzICgpIHtcbiAgICAvLyBUaGUgY3JlZGVudGlhbHMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNyZWRlbnRpYWxzXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjYWNoZSBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyB0aGUgcmVxdWVzdCB3aWxsXG4gIC8vIGludGVyYWN0IHdpdGggdGhlIGJyb3dzZXJcdTIwMTlzIGNhY2hlIHdoZW4gZmV0Y2hpbmcuXG4gIGdldCBjYWNoZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBjYWNoZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY2FjaGVcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZGlyZWN0IG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHJlZGlyZWN0cyBmb3IgdGhlXG4gIC8vIHJlcXVlc3Qgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBmZXRjaGluZy4gQSByZXF1ZXN0XG4gIC8vIHdpbGwgZm9sbG93IHJlZGlyZWN0cyBieSBkZWZhdWx0LlxuICBnZXQgcmVkaXJlY3QgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZGlyZWN0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlcXVlc3RcdTIwMTlzIHN1YnJlc291cmNlIGludGVncml0eSBtZXRhZGF0YSwgd2hpY2ggaXMgYVxuICAvLyBjcnlwdG9ncmFwaGljIGhhc2ggb2YgdGhlIHJlc291cmNlIGJlaW5nIGZldGNoZWQuIEl0cyB2YWx1ZVxuICAvLyBjb25zaXN0cyBvZiBtdWx0aXBsZSBoYXNoZXMgc2VwYXJhdGVkIGJ5IHdoaXRlc3BhY2UuIFtTUkldXG4gIGdldCBpbnRlZ3JpdHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaW50ZWdyaXR5IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGludGVncml0eVxuICAgIC8vIG1ldGFkYXRhLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uaW50ZWdyaXR5XG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgY2FuIG91dGxpdmUgdGhlXG4gIC8vIGdsb2JhbCBpbiB3aGljaCBpdCB3YXMgY3JlYXRlZC5cbiAgZ2V0IGtlZXBhbGl2ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBrZWVwYWxpdmUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ua2VlcGFsaXZlXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgcmVsb2FkXG4gIC8vIG5hdmlnYXRpb24uXG4gIGdldCBpc1JlbG9hZE5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNSZWxvYWROYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXNcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyByZWxvYWQtbmF2aWdhdGlvbiBmbGFnIGlzIHNldDsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVsb2FkTmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIGhpc3RvcnlcbiAgLy8gbmF2aWdhdGlvbiAoYS5rLmEuIGJhY2stZm93YXJkIG5hdmlnYXRpb24pLlxuICBnZXQgaXNIaXN0b3J5TmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc0hpc3RvcnlOYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXNcbiAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyBpcyBzZXQ7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmhpc3RvcnlOYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBzaWduYWwgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGFuIEFib3J0U2lnbmFsXG4gIC8vIG9iamVjdCBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCwgYW5kIGl0c1xuICAvLyBhYm9ydCBldmVudCBoYW5kbGVyLlxuICBnZXQgc2lnbmFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHNpZ25hbCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBzaWduYWwuXG4gICAgcmV0dXJuIHRoaXNba1NpZ25hbF1cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuICEhdGhpc1trU3RhdGVdLmJvZHkgJiYgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pXG4gIH1cblxuICBnZXQgZHVwbGV4ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuICdoYWxmJ1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlcXVlc3QuXG4gIGNsb25lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAodGhpcy5ib2R5VXNlZCB8fCB0aGlzLmJvZHk/LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBjbG9uZWRSZXF1ZXN0IGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXF1ZXN0LlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3QgPSBjbG9uZVJlcXVlc3QodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gTGV0IGNsb25lZFJlcXVlc3RPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlcXVlc3Qgb2JqZWN0LFxuICAgIC8vIGdpdmVuIGNsb25lZFJlcXVlc3QsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KGtDb25zdHJ1Y3QpXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrU3RhdGVdID0gY2xvbmVkUmVxdWVzdFxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gY2xvbmVkUmVxdWVzdC5oZWFkZXJzTGlzdFxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba0hlYWRlcnNdW2tSZWFsbV1cblxuICAgIC8vIDQuIE1ha2UgY2xvbmVkUmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsIGZvbGxvdyB0aGlzXHUyMDE5cyBzaWduYWwuXG4gICAgY29uc3QgYWMgPSBuZXcgQWJvcnRDb250cm9sbGVyKClcbiAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgYWMuYWJvcnQodGhpcy5zaWduYWwucmVhc29uKVxuICAgIH0gZWxzZSB7XG4gICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoXG4gICAgICAgIHRoaXMuc2lnbmFsLFxuICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgYWMuYWJvcnQodGhpcy5zaWduYWwucmVhc29uKVxuICAgICAgICB9XG4gICAgICApXG4gICAgfVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1NpZ25hbF0gPSBhYy5zaWduYWxcblxuICAgIC8vIDQuIFJldHVybiBjbG9uZWRSZXF1ZXN0T2JqZWN0LlxuICAgIHJldHVybiBjbG9uZWRSZXF1ZXN0T2JqZWN0XG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlcXVlc3QpXG5cbmZ1bmN0aW9uIG1ha2VSZXF1ZXN0IChpbml0KSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0c1xuICBjb25zdCByZXF1ZXN0ID0ge1xuICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgbG9jYWxVUkxzT25seTogZmFsc2UsXG4gICAgdW5zYWZlUmVxdWVzdDogZmFsc2UsXG4gICAgYm9keTogbnVsbCxcbiAgICBjbGllbnQ6IG51bGwsXG4gICAgcmVzZXJ2ZWRDbGllbnQ6IG51bGwsXG4gICAgcmVwbGFjZXNDbGllbnRJZDogJycsXG4gICAgd2luZG93OiAnY2xpZW50JyxcbiAgICBrZWVwYWxpdmU6IGZhbHNlLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnYWxsJyxcbiAgICBpbml0aWF0b3I6ICcnLFxuICAgIGRlc3RpbmF0aW9uOiAnJyxcbiAgICBwcmlvcml0eTogbnVsbCxcbiAgICBvcmlnaW46ICdjbGllbnQnLFxuICAgIHBvbGljeUNvbnRhaW5lcjogJ2NsaWVudCcsXG4gICAgcmVmZXJyZXI6ICdjbGllbnQnLFxuICAgIHJlZmVycmVyUG9saWN5OiAnJyxcbiAgICBtb2RlOiAnbm8tY29ycycsXG4gICAgdXNlQ09SU1ByZWZsaWdodEZsYWc6IGZhbHNlLFxuICAgIGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nLFxuICAgIHVzZUNyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICBjYWNoZTogJ2RlZmF1bHQnLFxuICAgIHJlZGlyZWN0OiAnZm9sbG93JyxcbiAgICBpbnRlZ3JpdHk6ICcnLFxuICAgIGNyeXB0b0dyYXBoaWNzTm9uY2VNZXRhZGF0YTogJycsXG4gICAgcGFyc2VyTWV0YWRhdGE6ICcnLFxuICAgIHJlbG9hZE5hdmlnYXRpb246IGZhbHNlLFxuICAgIGhpc3RvcnlOYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICB1c2VyQWN0aXZhdGlvbjogZmFsc2UsXG4gICAgdGFpbnRlZE9yaWdpbjogZmFsc2UsXG4gICAgcmVkaXJlY3RDb3VudDogMCxcbiAgICByZXNwb25zZVRhaW50aW5nOiAnYmFzaWMnLFxuICAgIHByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uOiBmYWxzZSxcbiAgICBkb25lOiBmYWxzZSxcbiAgICB0aW1pbmdBbGxvd0ZhaWxlZDogZmFsc2UsXG4gICAgLi4uaW5pdCxcbiAgICBoZWFkZXJzTGlzdDogaW5pdC5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdC5oZWFkZXJzTGlzdClcbiAgICAgIDogbmV3IEhlYWRlcnNMaXN0KClcbiAgfVxuICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFswXVxuICByZXR1cm4gcmVxdWVzdFxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlcXVlc3QgKHJlcXVlc3QpIHtcbiAgLy8gVG8gY2xvbmUgYSByZXF1ZXN0IHJlcXVlc3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBMZXQgbmV3UmVxdWVzdCBiZSBhIGNvcHkgb2YgcmVxdWVzdCwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgLi4ucmVxdWVzdCwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHNldCBuZXdSZXF1ZXN0XHUyMDE5cyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXF1ZXN0XHUyMDE5cyBib2R5LlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXF1ZXN0LmJvZHkgPSBjbG9uZUJvZHkocmVxdWVzdC5ib2R5KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIG5ld1JlcXVlc3QuXG4gIHJldHVybiBuZXdSZXF1ZXN0XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlcXVlc3QucHJvdG90eXBlLCB7XG4gIG1ldGhvZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNpZ25hbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZHVwbGV4OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZXN0aW5hdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzSGlzdG9yeU5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGlzUmVsb2FkTmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2VlcGFsaXZlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbnRlZ3JpdHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNhY2hlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjcmVkZW50aWFsczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYXR0cmlidXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlclBvbGljeToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1vZGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXF1ZXN0JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIFJlcXVlc3RcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RpbmZvXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG4gIH1cblxuICBpZiAoViBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdChWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxufVxuXG53ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoXG4gIEFib3J0U2lnbmFsXG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdtZXRob2QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdFxuICB9LFxuICB7XG4gICAga2V5OiAnYm9keScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdFxuICAgIClcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXJQb2xpY3knLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY3lcbiAgICBhbGxvd2VkVmFsdWVzOiByZWZlcnJlclBvbGljeVxuICB9LFxuICB7XG4gICAga2V5OiAnbW9kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1tb2RlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdE1vZGVcbiAgfSxcbiAge1xuICAgIGtleTogJ2NyZWRlbnRpYWxzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNyZWRlbnRpYWxzXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENyZWRlbnRpYWxzXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYWNoZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjYWNoZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDYWNoZVxuICB9LFxuICB7XG4gICAga2V5OiAncmVkaXJlY3QnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0cmVkaXJlY3RcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0UmVkaXJlY3RcbiAgfSxcbiAge1xuICAgIGtleTogJ2ludGVncml0eScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2tlZXBhbGl2ZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdzaWduYWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgKHNpZ25hbCkgPT4gd2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwoXG4gICAgICAgIHNpZ25hbCxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH1cbiAgICAgIClcbiAgICApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd3aW5kb3cnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkdXBsZXgnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3REdXBsZXhcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7IFJlcXVlc3QsIG1ha2VSZXF1ZXN0IH1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFJlc3BvbnNlLFxuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBtYWtlUmVzcG9uc2Vcbn0gPSByZXF1aXJlKCcuL3Jlc3BvbnNlJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgbWFrZVJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vcmVxdWVzdCcpXG5jb25zdCB6bGliID0gcmVxdWlyZSgnemxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga1N0YXRlLCBrSGVhZGVycywga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBzYWZlbHlFeHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0LFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IEVFID0gcmVxdWlyZSgnZXZlbnRzJylcbmNvbnN0IHsgUmVhZGFibGUsIHBpcGVsaW5lIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyLCBpc0Vycm9yZWQsIGlzUmVhZGFibGUsIG5vZGVNYWpvciwgbm9kZU1pbm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IFRyYW5zZm9ybVN0cmVhbSB9ID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBTVEFUVVNfQ09ERVMgfSA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2J1ZmZlcicpLnJlc29sdmVPYmplY3RVUkx9ICovXG5sZXQgcmVzb2x2ZU9iamVjdFVSTFxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5jbGFzcyBGZXRjaCBleHRlbmRzIEVFIHtcbiAgY29uc3RydWN0b3IgKGRpc3BhdGNoZXIpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLmRpc3BhdGNoZXIgPSBkaXNwYXRjaGVyXG4gICAgdGhpcy5jb25uZWN0aW9uID0gbnVsbFxuICAgIHRoaXMuZHVtcCA9IGZhbHNlXG4gICAgdGhpcy5zdGF0ZSA9ICdvbmdvaW5nJ1xuICAgIC8vIDIgdGVybWluYXRlZCBsaXN0ZW5lcnMgZ2V0IGFkZGVkIHBlciByZXF1ZXN0LFxuICAgIC8vIGJ1dCBvbmx5IDEgZ2V0cyByZW1vdmVkLiBJZiB0aGVyZSBhcmUgMjAgcmVkaXJlY3RzLFxuICAgIC8vIDIxIGxpc3RlbmVycyB3aWxsIGJlIGFkZGVkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTcxMVxuICAgIC8vIFRPRE8gKGZpeCk6IEZpbmQgYW5kIGZpeCByb290IGNhdXNlIGZvciBsZWFrZWQgbGlzdGVuZXIuXG4gICAgdGhpcy5zZXRNYXhMaXN0ZW5lcnMoMjEpXG4gIH1cblxuICB0ZXJtaW5hdGUgKHJlYXNvbikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAndGVybWluYXRlZCdcbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3kocmVhc29uKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIHJlYXNvbilcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1jb250cm9sbGVyLWFib3J0XG4gIGFib3J0IChlcnJvcikge1xuICAgIGlmICh0aGlzLnN0YXRlICE9PSAnb25nb2luZycpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDEuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzdGF0ZSB0byBcImFib3J0ZWRcIi5cbiAgICB0aGlzLnN0YXRlID0gJ2Fib3J0ZWQnXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tFcnJvciBiZSBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgLy8gMy4gU2V0IGVycm9yIHRvIGZhbGxiYWNrRXJyb3IgaWYgaXQgaXMgbm90IGdpdmVuLlxuICAgIGlmICghZXJyb3IpIHtcbiAgICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGVycm9yKS5cbiAgICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgY2F0Y2ggaXQsIGFuZCBsZXRcbiAgICAvLyAgICBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShmYWxsYmFja0Vycm9yKS5cblxuICAgIC8vIDUuIFNldCBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiB0byBzZXJpYWxpemVkRXJyb3IuXG4gICAgdGhpcy5zZXJpYWxpemVkQWJvcnRSZWFzb24gPSBlcnJvclxuXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KGVycm9yKVxuICAgIHRoaXMuZW1pdCgndGVybWluYXRlZCcsIGVycm9yKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaC1tZXRob2RcbmZ1bmN0aW9uIGZldGNoIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnbG9iYWxUaGlzLmZldGNoJyB9KVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHAgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDIuIExldCByZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgdGhlIGluaXRpYWwgdmFsdWUgb2ZcbiAgLy8gUmVxdWVzdCBhcyBjb25zdHJ1Y3RvciB3aXRoIGlucHV0IGFuZCBpbml0IGFzIGFyZ3VtZW50cy4gSWYgdGhpcyB0aHJvd3NcbiAgLy8gYW4gZXhjZXB0aW9uLCByZWplY3QgcCB3aXRoIGl0IGFuZCByZXR1cm4gcC5cbiAgbGV0IHJlcXVlc3RPYmplY3RcblxuICB0cnkge1xuICAgIHJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChpbnB1dCwgaW5pdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIHAucmVqZWN0KGUpXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gMy4gTGV0IHJlcXVlc3QgYmUgcmVxdWVzdE9iamVjdFx1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDQuIElmIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgaWYgKHJlcXVlc3RPYmplY3Quc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAvLyAxLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgbnVsbCwgYW5kXG4gICAgLy8gICAgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCBudWxsLCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG5cbiAgICAvLyAyLiBSZXR1cm4gcC5cbiAgICByZXR1cm4gcC5wcm9taXNlXG4gIH1cblxuICAvLyA1LiBMZXQgZ2xvYmFsT2JqZWN0IGJlIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgY29uc3QgZ2xvYmFsT2JqZWN0ID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgLy8gNi4gSWYgZ2xvYmFsT2JqZWN0IGlzIGEgU2VydmljZVdvcmtlckdsb2JhbFNjb3BlIG9iamVjdCwgdGhlbiBzZXRcbiAgLy8gcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gIGlmIChnbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnU2VydmljZVdvcmtlckdsb2JhbFNjb3BlJykge1xuICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgfVxuXG4gIC8vIDcuIExldCByZXNwb25zZU9iamVjdCBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2VPYmplY3QgPSBudWxsXG5cbiAgLy8gOC4gTGV0IHJlbGV2YW50UmVhbG0gYmUgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gIGNvbnN0IHJlbGV2YW50UmVhbG0gPSBudWxsXG5cbiAgLy8gOS4gTGV0IGxvY2FsbHlBYm9ydGVkIGJlIGZhbHNlLlxuICBsZXQgbG9jYWxseUFib3J0ZWQgPSBmYWxzZVxuXG4gIC8vIDEwLiBMZXQgY29udHJvbGxlciBiZSBudWxsLlxuICBsZXQgY29udHJvbGxlciA9IG51bGxcblxuICAvLyAxMS4gQWRkIHRoZSBmb2xsb3dpbmcgYWJvcnQgc3RlcHMgdG8gcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsOlxuICBhZGRBYm9ydExpc3RlbmVyKFxuICAgIHJlcXVlc3RPYmplY3Quc2lnbmFsLFxuICAgICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBsb2NhbGx5QWJvcnRlZCB0byB0cnVlLlxuICAgICAgbG9jYWxseUFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIEFzc2VydDogY29udHJvbGxlciBpcyBub24tbnVsbC5cbiAgICAgIGFzc2VydChjb250cm9sbGVyICE9IG51bGwpXG5cbiAgICAgIC8vIDMuIEFib3J0IGNvbnRyb2xsZXIgd2l0aCByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0IHJlYXNvbi5cbiAgICAgIGNvbnRyb2xsZXIuYWJvcnQocmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgICAvLyA0LiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsXG4gICAgICAvLyAgICBhbmQgcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCByZXF1ZXN0T2JqZWN0LnNpZ25hbC5yZWFzb24pXG4gICAgfVxuICApXG5cbiAgLy8gMTIuIExldCBoYW5kbGVGZXRjaERvbmUgZ2l2ZW4gcmVzcG9uc2UgcmVzcG9uc2UgYmUgdG8gZmluYWxpemUgYW5kXG4gIC8vIHJlcG9ydCB0aW1pbmcgd2l0aCByZXNwb25zZSwgZ2xvYmFsT2JqZWN0LCBhbmQgXCJmZXRjaFwiLlxuICBjb25zdCBoYW5kbGVGZXRjaERvbmUgPSAocmVzcG9uc2UpID0+XG4gICAgZmluYWxpemVBbmRSZXBvcnRUaW1pbmcocmVzcG9uc2UsICdmZXRjaCcpXG5cbiAgLy8gMTMuIFNldCBjb250cm9sbGVyIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBmZXRjaCBnaXZlbiByZXF1ZXN0LFxuICAvLyB3aXRoIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBzZXQgdG8gaGFuZGxlRmV0Y2hEb25lLCBhbmQgcHJvY2Vzc1Jlc3BvbnNlXG4gIC8vIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN1YnN0ZXBzOlxuXG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgIC8vIDEuIElmIGxvY2FsbHlBYm9ydGVkIGlzIHRydWUsIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAobG9jYWxseUFib3J0ZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDIuIElmIHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcgaXMgc2V0LCB0aGVuOlxuICAgIGlmIChyZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgICAvLyAxLiBMZXQgZGVzZXJpYWxpemVkRXJyb3IgYmUgdGhlIHJlc3VsdCBvZiBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWRcbiAgICAgIC8vICAgIGFib3J0IHJlYXNvbiBnaXZlbiBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmRcbiAgICAgIC8vICAgIHJlbGV2YW50UmVhbG0uXG5cbiAgICAgIC8vIDIuIEFib3J0IHRoZSBmZXRjaCgpIGNhbGwgd2l0aCBwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgYW5kXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZWRFcnJvci5cblxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb24pXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAzLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmVqZWN0IHAgd2l0aCBhIFR5cGVFcnJvclxuICAgIC8vIGFuZCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAgIHAucmVqZWN0KFxuICAgICAgICBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ2ZldGNoIGZhaWxlZCcpLCB7IGNhdXNlOiByZXNwb25zZS5lcnJvciB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gNC4gU2V0IHJlc3BvbnNlT2JqZWN0IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCByZWxldmFudFJlYWxtLlxuICAgIHJlc3BvbnNlT2JqZWN0ID0gbmV3IFJlc3BvbnNlKClcbiAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBSZXNvbHZlIHAgd2l0aCByZXNwb25zZU9iamVjdC5cbiAgICBwLnJlc29sdmUocmVzcG9uc2VPYmplY3QpXG4gIH1cblxuICBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5OiBoYW5kbGVGZXRjaERvbmUsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlLFxuICAgIGRpc3BhdGNoZXI6IGluaXQuZGlzcGF0Y2hlciA/PyBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNlXHUyMDE5cyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFsXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTCxcbiAgICBpbml0aWF0b3JUeXBlLFxuICAgIGdsb2JhbFRoaXMsXG4gICAgY2FjaGVTdGF0ZVxuICApXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9yZXNvdXJjZS10aW1pbmcvI2Rmbi1tYXJrLXJlc291cmNlLXRpbWluZ1xuZnVuY3Rpb24gbWFya1Jlc291cmNlVGltaW5nICh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSkge1xuICBpZiAobm9kZU1ham9yID4gMTggfHwgKG5vZGVNYWpvciA9PT0gMTggJiYgbm9kZU1pbm9yID49IDIpKSB7XG4gICAgcGVyZm9ybWFuY2UubWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLmhyZWYsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gTm90ZTogQWJvcnRTaWduYWwucmVhc29uIHdhcyBhZGRlZCBpbiBub2RlIHYxNy4yLjBcbiAgLy8gd2hpY2ggd291bGQgZ2l2ZSB1cyBhbiB1bmRlZmluZWQgZXJyb3IgdG8gcmVqZWN0IHdpdGguXG4gIC8vIFJlbW92ZSB0aGlzIG9uY2Ugbm9kZSB2MTYgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC5cbiAgaWYgKCFlcnJvcikge1xuICAgIGVycm9yID0gbmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpXG4gIH1cblxuICAvLyAxLiBSZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBwLnJlamVjdChlcnJvcilcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBjYW5jZWwgcmVxdWVzdFx1MjAxOXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwgJiYgaXNSZWFkYWJsZShyZXF1ZXN0LmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXF1ZXN0LmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZU9iamVjdCBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlT2JqZWN0ID09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSByZXNwb25zZU9iamVjdFx1MjAxOXMgcmVzcG9uc2UuXG4gIGNvbnN0IHJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXVxuXG4gIC8vIDUuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vdCBudWxsIGFuZCBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciByZXNwb25zZVx1MjAxOXNcbiAgLy8gYm9keSB3aXRoIGVycm9yLlxuICBpZiAocmVzcG9uc2UuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVzcG9uc2UuYm9keT8uc3RyZWFtKSkge1xuICAgIHJlc3BvbnNlLmJvZHkuc3RyZWFtLmNhbmNlbChlcnJvcikuY2F0Y2goKGVycikgPT4ge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnRVJSX0lOVkFMSURfU1RBVEUnKSB7XG4gICAgICAgIC8vIE5vZGUgYnVnP1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoaW5nXG5mdW5jdGlvbiBmZXRjaGluZyAoe1xuICByZXF1ZXN0LFxuICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgcHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHksXG4gIHByb2Nlc3NSZXNwb25zZSxcbiAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgdXNlUGFyYWxsZWxRdWV1ZSA9IGZhbHNlLFxuICBkaXNwYXRjaGVyIC8vIHVuZGljaVxufSkge1xuICAvLyAxLiBMZXQgdGFza0Rlc3RpbmF0aW9uIGJlIG51bGwuXG4gIGxldCB0YXNrRGVzdGluYXRpb24gPSBudWxsXG5cbiAgLy8gMi4gTGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IGJlIGZhbHNlLlxuICBsZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPSBmYWxzZVxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdC5cbiAgICB0YXNrRGVzdGluYXRpb24gPSByZXF1ZXN0LmNsaWVudC5nbG9iYWxPYmplY3RcblxuICAgIC8vIDIuIFNldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGNyb3NzLW9yaWdpblxuICAgIC8vIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgPVxuICAgICAgcmVxdWVzdC5jbGllbnQuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHlcbiAgfVxuXG4gIC8vIDQuIElmIHVzZVBhcmFsbGVsUXVldWUgaXMgdHJ1ZSwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBMZXQgdGltaW5nSW5mbyBiZSBhIG5ldyBmZXRjaCB0aW1pbmcgaW5mbyB3aG9zZSBzdGFydCB0aW1lIGFuZFxuICAvLyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgYXJlIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlblxuICAvLyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgY3VycmVuVGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW5UaW1lXG4gIH0pXG5cbiAgLy8gNi4gTGV0IGZldGNoUGFyYW1zIGJlIGEgbmV3IGZldGNoIHBhcmFtcyB3aG9zZVxuICAvLyByZXF1ZXN0IGlzIHJlcXVlc3QsXG4gIC8vIHRpbWluZyBpbmZvIGlzIHRpbWluZ0luZm8sXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBib2R5IGNodW5rIGxlbmd0aCBpcyBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgLy8gcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGlzIHByb2Nlc3NSZXNwb25zZSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAvLyB0YXNrIGRlc3RpbmF0aW9uIGlzIHRhc2tEZXN0aW5hdGlvbixcbiAgLy8gYW5kIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5IGlzIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBmZXRjaFBhcmFtcyA9IHtcbiAgICBjb250cm9sbGVyOiBuZXcgRmV0Y2goZGlzcGF0Y2hlciksXG4gICAgcmVxdWVzdCxcbiAgICB0aW1pbmdJbmZvLFxuICAgIHByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoLFxuICAgIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBwcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHksXG4gICAgdGFza0Rlc3RpbmF0aW9uLFxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgYm9keSB0b1xuICAvLyAgICByZXF1ZXN0XHUyMDE5cyBib2R5IGFzIGEgYm9keS5cbiAgLy8gTk9URTogU2luY2UgZmV0Y2hpbmcgaXMgb25seSBjYWxsZWQgZnJvbSBmZXRjaCwgYm9keSBzaG91bGQgYWxyZWFkeSBiZVxuICAvLyBleHRyYWN0ZWQuXG4gIGFzc2VydCghcmVxdWVzdC5ib2R5IHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pXG5cbiAgLy8gOC4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwiY2xpZW50XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHdpbmRvdyB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyBjbGllbnQsIGlmIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgZ2xvYmFsIG9iamVjdCBpcyBhIFdpbmRvdyBvYmplY3Q7IG90aGVyd2lzZVxuICAvLyBcIm5vLXdpbmRvd1wiLlxuICBpZiAocmVxdWVzdC53aW5kb3cgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qud2luZG93ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50Py5nbG9iYWxPYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnV2luZG93J1xuICAgICAgICA/IHJlcXVlc3QuY2xpZW50XG4gICAgICAgIDogJ25vLXdpbmRvdydcbiAgfVxuXG4gIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gY2xpZW50XHUyMDE5cyBvcmlnaW4uXG4gIGlmIChyZXF1ZXN0Lm9yaWdpbiA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBUT0RPOiBXaGF0IGlmIHJlcXVlc3QuY2xpZW50IGlzIG51bGw/XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudD8ub3JpZ2luXG4gIH1cblxuICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIGlzIFwiY2xpZW50XCIsIHRoZW46XG4gIGlmIChyZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeVxuICAgIC8vIGNvbnRhaW5lciB0byBhIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lci4gW0hUTUxdXG4gICAgaWYgKHJlcXVlc3QuY2xpZW50ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gY2xvbmVQb2xpY3lDb250YWluZXIoXG4gICAgICAgIHJlcXVlc3QuY2xpZW50LnBvbGljeUNvbnRhaW5lclxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAyLiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyIHRvIGEgbmV3IHBvbGljeVxuICAgICAgLy8gY29udGFpbmVyLlxuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICB9XG4gIH1cblxuICAvLyAxMi4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0YCwgdGhlbjpcbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQnKSkge1xuICAgIC8vIDEuIExldCB2YWx1ZSBiZSBgKi8qYC5cbiAgICBjb25zdCB2YWx1ZSA9ICcqLyonXG5cbiAgICAvLyAyLiBBIHVzZXIgYWdlbnQgc2hvdWxkIHNldCB2YWx1ZSB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50LCBpZlxuICAgIC8vIGFueSwgc3dpdGNoaW5nIG9uIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uOlxuICAgIC8vIFwiZG9jdW1lbnRcIlxuICAgIC8vIFwiZnJhbWVcIlxuICAgIC8vIFwiaWZyYW1lXCJcbiAgICAvLyBgdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksKi8qO3E9MC44YFxuICAgIC8vIFwiaW1hZ2VcIlxuICAgIC8vIGBpbWFnZS9wbmcsaW1hZ2Uvc3ZnK3htbCxpbWFnZS8qO3E9MC44LCovKjtxPTAuNWBcbiAgICAvLyBcInN0eWxlXCJcbiAgICAvLyBgdGV4dC9jc3MsKi8qO3E9MC4xYFxuICAgIC8vIFRPRE9cblxuICAgIC8vIDMuIEFwcGVuZCBgQWNjZXB0YC92YWx1ZSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0JywgdmFsdWUpXG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQWNjZXB0LUxhbmd1YWdlYCwgdGhlblxuICAvLyB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBBY2NlcHQtTGFuZ3VhZ2VgL2FuIGFwcHJvcHJpYXRlIHZhbHVlIHRvXG4gIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1sYW5ndWFnZScpKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1sYW5ndWFnZScsICcqJylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSBpcyBudWxsLCB0aGVuIHVzZSByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgYW5kXG4gIC8vIGRlc3RpbmF0aW9uIGFwcHJvcHJpYXRlbHkgaW4gc2V0dGluZyByZXF1ZXN0XHUyMDE5cyBwcmlvcml0eSB0byBhXG4gIC8vIHVzZXItYWdlbnQtZGVmaW5lZCBvYmplY3QuXG4gIGlmIChyZXF1ZXN0LnByaW9yaXR5ID09PSBudWxsKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTUuIElmIHJlcXVlc3QgaXMgYSBzdWJyZXNvdXJjZSByZXF1ZXN0LCB0aGVuOlxuICBpZiAoc3VicmVzb3VyY2VTZXQuaGFzKHJlcXVlc3QuZGVzdGluYXRpb24pKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gMTYuIFJ1biBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICBtYWluRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgLmNhdGNoKGVyciA9PiB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnIpXG4gICAgfSlcblxuICAvLyAxNy4gUmV0dXJuIGZldGNoUGFyYW0ncyBjb250cm9sbGVyXG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1haW4tZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIG1haW5GZXRjaCAoZmV0Y2hQYXJhbXMsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgbG9jYWwtVVJMcy1vbmx5IGZsYWcgaXMgc2V0IGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTCBpc1xuICAvLyBub3QgbG9jYWwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QubG9jYWxVUkxzT25seSAmJiAhdXJsSXNMb2NhbChyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2xvY2FsIFVSTHMgb25seScpXG4gIH1cblxuICAvLyA0LiBSdW4gcmVwb3J0IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5IHZpb2xhdGlvbnMgZm9yIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA1LiBVcGdyYWRlIHJlcXVlc3QgdG8gYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIGlmIGFwcHJvcHJpYXRlLlxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwocmVxdWVzdClcblxuICAvLyA2LiBJZiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBhIGJhZCBwb3J0LCBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdFxuICAvLyBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQsIG9yIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudFxuICAvLyBTZWN1cml0eSBQb2xpY3kgcmV0dXJucyBibG9ja2VkLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0QmFkUG9ydChyZXF1ZXN0KSA9PT0gJ2Jsb2NrZWQnKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdiYWQgcG9ydCcpXG4gIH1cbiAgLy8gVE9ETzogc2hvdWxkIGZldGNoaW5nIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50P1xuICAvLyBUT0RPOiBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5P1xuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciBwb2xpY3kgdG8gcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lclx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICBpZiAocmVxdWVzdC5yZWZlcnJlclBvbGljeSA9PT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcmVxdWVzdC5wb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIG5vdCBcIm5vLXJlZmVycmVyXCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHRvIHRoZSByZXN1bHQgb2YgaW52b2tpbmcgZGV0ZXJtaW5lIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciAhPT0gJ25vLXJlZmVycmVyJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXIgPSBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyKHJlcXVlc3QpXG4gIH1cblxuICAvLyA5LiBTZXQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSB0byBcImh0dHBzXCIgaWYgYWxsIG9mIHRoZSBmb2xsb3dpbmdcbiAgLy8gY29uZGl0aW9ucyBhcmUgdHJ1ZTpcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiXG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgaXMgYSBkb21haW5cbiAgLy8gLSBNYXRjaGluZyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBwZXIgS25vd24gSFNUUyBIb3N0IERvbWFpbiBOYW1lXG4gIC8vICAgTWF0Y2hpbmcgcmVzdWx0cyBpbiBlaXRoZXIgYSBzdXBlcmRvbWFpbiBtYXRjaCB3aXRoIGFuIGFzc2VydGVkXG4gIC8vICAgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlIG9yIGEgY29uZ3J1ZW50IG1hdGNoICh3aXRoIG9yIHdpdGhvdXQgYW5cbiAgLy8gICBhc3NlcnRlZCBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUpLiBbSFNUU11cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZWN1cnNpdmUgaXMgZmFsc2UsIHRoZW4gcnVuIHRoZSByZW1haW5pbmcgc3RlcHMgaW4gcGFyYWxsZWwuXG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gIC8vIHRoZSBzdGVwcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQ6XG4gIGlmIChyZXNwb25zZSA9PT0gbnVsbCkge1xuICAgIHJlc3BvbnNlID0gYXdhaXQgKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICBpZiAoXG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBzYW1lIG9yaWdpbiB3aXRoIHJlcXVlc3RcdTIwMTlzIG9yaWdpbixcbiAgICAgICAgLy8gICBhbmQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJiYXNpY1wiXG4gICAgICAgIChzYW1lT3JpZ2luKGN1cnJlbnRVUkwsIHJlcXVlc3QudXJsKSAmJiByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHx8XG4gICAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJkYXRhXCJcbiAgICAgICAgKGN1cnJlbnRVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpIHx8XG4gICAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5hdmlnYXRlXCIgb3IgXCJ3ZWJzb2NrZXRcIlxuICAgICAgICAocmVxdWVzdC5tb2RlID09PSAnbmF2aWdhdGUnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpXG4gICAgICApIHtcbiAgICAgICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiYmFzaWNcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2Jhc2ljJ1xuXG4gICAgICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJzYW1lLW9yaWdpblwiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnc2FtZS1vcmlnaW4nKSB7XG4gICAgICAgIC8vIDEuIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdyZXF1ZXN0IG1vZGUgY2Fubm90IGJlIFwic2FtZS1vcmlnaW5cIicpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuby1jb3JzXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICduby1jb3JzJykge1xuICAgICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIG5vdCBcImZvbGxvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgICAgICAgLy8gZXJyb3IuXG4gICAgICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnZm9sbG93Jykge1xuICAgICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKFxuICAgICAgICAgICAgJ3JlZGlyZWN0IG1vZGUgY2Fubm90IGJlIFwiZm9sbG93XCIgZm9yIFwibm8tY29yc1wiIHJlcXVlc3QnXG4gICAgICAgICAgKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwib3BhcXVlXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdvcGFxdWUnXG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWVcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgICAgIC8vIFJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpXG4gICAgICB9XG5cbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdXNlLUNPUlMtcHJlZmxpZ2h0IGZsYWcgaXMgc2V0XG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVuc2FmZS1yZXF1ZXN0IGZsYWcgaXMgc2V0IGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gICAgICAvLyAgIG5vdCBhIENPUlMtc2FmZWxpc3RlZCBtZXRob2Qgb3IgQ09SUy11bnNhZmUgcmVxdWVzdC1oZWFkZXIgbmFtZXMgd2l0aFxuICAgICAgLy8gICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBpcyBub3QgZW1wdHlcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIC8vICAgIDIuIExldCBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoXG4gICAgICAvLyAgICBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgdHJ1ZS5cbiAgICAgIC8vICAgIDMuIElmIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIGNsZWFyIGNhY2hlXG4gICAgICAvLyAgICBlbnRyaWVzIHVzaW5nIHJlcXVlc3QuXG4gICAgICAvLyAgICA0LiBSZXR1cm4gY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZS5cbiAgICAgIC8vIFRPRE9cblxuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnY29ycydcblxuICAgICAgLy8gICAgMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIGF3YWl0IGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICB9KSgpXG4gIH1cblxuICAvLyAxMi4gSWYgcmVjdXJzaXZlIGlzIHRydWUsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICBpZiAocmVjdXJzaXZlKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlXG4gIH1cblxuICAvLyAxMy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWRcbiAgLy8gcmVzcG9uc2UsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDAgJiYgIXJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UpIHtcbiAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiwgdGhlbjpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIC8vIDEuIExldCBoZWFkZXJOYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAvLyBnaXZlbiBgQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnNgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlIGlzIG5vdCBcImluY2x1ZGVcIiBhbmQgaGVhZGVyTmFtZXNcbiAgICAgIC8vIGNvbnRhaW5zIGAqYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvXG4gICAgICAvLyBhbGwgdW5pcXVlIGhlYWRlciBuYW1lcyBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAvLyBUT0RPXG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIGhlYWRlck5hbWVzIGlzIG5vdCBudWxsIG9yIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgICAvLyByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG8gaGVhZGVyTmFtZXMuXG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gU2V0IHJlc3BvbnNlIHRvIHRoZSBmb2xsb3dpbmcgZmlsdGVyZWQgcmVzcG9uc2Ugd2l0aCByZXNwb25zZSBhcyBpdHNcbiAgICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdiYXNpYycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2NvcnMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ29wYXF1ZScpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyAxNC4gTGV0IGludGVybmFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvcixcbiAgLy8gYW5kIHJlc3BvbnNlXHUyMDE5cyBpbnRlcm5hbCByZXNwb25zZSBvdGhlcndpc2UuXG4gIGxldCBpbnRlcm5hbFJlc3BvbnNlID1cbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDAgPyByZXNwb25zZSA6IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcblxuICAvLyAxNS4gSWYgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHksIHRoZW4gc2V0IGl0IHRvIGEgY2xvbmUgb2ZcbiAgLy8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIGlmIChpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0LnB1c2goLi4ucmVxdWVzdC51cmxMaXN0KVxuICB9XG5cbiAgLy8gMTYuIElmIHJlcXVlc3RcdTIwMTlzIHRpbWluZyBhbGxvdyBmYWlsZWQgZmxhZyBpcyB1bnNldCwgdGhlbiBzZXRcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnLlxuICBpZiAoIXJlcXVlc3QudGltaW5nQWxsb3dGYWlsZWQpIHtcbiAgICByZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDE3LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBhbnkgb2YgdGhlIGZvbGxvd2luZyByZXR1cm5zXG4gIC8vIGJsb2NrZWRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gaXRzIE1JTUUgdHlwZVxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gbm9zbmlmZlxuICAvLyBUT0RPXG5cbiAgLy8gMTguIElmIHJlc3BvbnNlXHUyMDE5cyB0eXBlIGlzIFwib3BhcXVlXCIsIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAyMDYsXG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnIGlzIHNldCwgYW5kIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2UgYW5kIGludGVybmFsUmVzcG9uc2VcbiAgLy8gdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ29wYXF1ZScgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2ICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5yYW5nZVJlcXVlc3RlZCAmJlxuICAgICFyZXF1ZXN0LmhlYWRlcnMuY29udGFpbnMoJ3JhbmdlJylcbiAgKSB7XG4gICAgcmVzcG9uc2UgPSBpbnRlcm5hbFJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcigpXG4gIH1cblxuICAvLyAxOS4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAvLyBgSEVBRGAgb3IgYENPTk5FQ1RgLCBvciBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLFxuICAvLyBzZXQgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keSB0byBudWxsIGFuZCBkaXNyZWdhcmQgYW55IGVucXVldWluZyB0b3dhcmRcbiAgLy8gaXQgKGlmIGFueSkuXG4gIGlmIChcbiAgICByZXNwb25zZS5zdGF0dXMgIT09IDAgJiZcbiAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyB8fFxuICAgICAgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJyB8fFxuICAgICAgbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMpKVxuICApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLmJvZHkgPSBudWxsXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kdW1wID0gdHJ1ZVxuICB9XG5cbiAgLy8gMjAuIElmIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgaWYgKHJlcXVlc3QuaW50ZWdyaXR5KSB7XG4gICAgLy8gMS4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zXG4gICAgLy8gYW5kIGEgbmV0d29yayBlcnJvci5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKHJlYXNvbikgPT5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCBtYWtlTmV0d29ya0Vycm9yKHJlYXNvbikpXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcIm9wYXF1ZVwiLCBvciByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLFxuICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgICAgcHJvY2Vzc0JvZHlFcnJvcihyZXNwb25zZS5lcnJvcilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keSBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keSA9IChieXRlcykgPT4ge1xuICAgICAgLy8gMS4gSWYgYnl0ZXMgZG8gbm90IG1hdGNoIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSxcbiAgICAgIC8vIHRoZW4gcnVuIHByb2Nlc3NCb2R5RXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLiBbU1JJXVxuICAgICAgaWYgKCFieXRlc01hdGNoKGJ5dGVzLCByZXF1ZXN0LmludGVncml0eSkpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcignaW50ZWdyaXR5IG1pc21hdGNoJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBieXRlcyBhcyBhIGJvZHkuXG4gICAgICByZXNwb25zZS5ib2R5ID0gc2FmZWx5RXh0cmFjdEJvZHkoYnl0ZXMpWzBdXG5cbiAgICAgIC8vIDMuIFJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH1cblxuICAgIC8vIDQuIEZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHkgYW5kIHByb2Nlc3NCb2R5RXJyb3IuXG4gICAgYXdhaXQgZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgfSBlbHNlIHtcbiAgICAvLyAyMS4gT3RoZXJ3aXNlLCBydW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2NoZW1lLWZldGNoXG4vLyBnaXZlbiBhIGZldGNoIHBhcmFtcyBmZXRjaFBhcmFtc1xuZnVuY3Rpb24gc2NoZW1lRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIE5vdGU6IHNpbmNlIHRoZSBjb25uZWN0aW9uIGlzIGRlc3Ryb3llZCBvbiByZWRpcmVjdCwgd2hpY2ggc2V0cyBmZXRjaFBhcmFtcyB0byBhXG4gIC8vIGNhbmNlbGxlZCBzdGF0ZSwgd2UgZG8gbm90IHdhbnQgdGhpcyBjb25kaXRpb24gdG8gdHJpZ2dlciAqdW5sZXNzKiB0aGVyZSBoYXZlIGJlZW5cbiAgLy8gbm8gcmVkaXJlY3RzLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3NzZcbiAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSAmJiBmZXRjaFBhcmFtcy5yZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcykpXG4gIH1cblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgeyByZXF1ZXN0IH0gPSBmZXRjaFBhcmFtc1xuXG4gIGNvbnN0IHsgcHJvdG9jb2w6IHNjaGVtZSB9ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAzLiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBhbmQgcnVuIHRoZSBhc3NvY2lhdGVkIHN0ZXBzOlxuICBzd2l0Y2ggKHNjaGVtZSkge1xuICAgIGNhc2UgJ2Fib3V0Oic6IHtcbiAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBwYXRoIGlzIHRoZSBzdHJpbmcgXCJibGFua1wiLCB0aGVuIHJldHVybiBhIG5ldyByZXNwb25zZVxuICAgICAgLy8gd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXMgXHUwMEFCIChgQ29udGVudC1UeXBlYCwgYHRleHQvaHRtbDtjaGFyc2V0PXV0Zi04YCkgXHUwMEJCLFxuICAgICAgLy8gYW5kIGJvZHkgaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UgYXMgYSBib2R5LlxuXG4gICAgICAvLyBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2Fib3V0IHNjaGVtZSBpcyBub3Qgc3VwcG9ydGVkJykpXG4gICAgfVxuICAgIGNhc2UgJ2Jsb2I6Jzoge1xuICAgICAgaWYgKCFyZXNvbHZlT2JqZWN0VVJMKSB7XG4gICAgICAgIHJlc29sdmVPYmplY3RVUkwgPSByZXF1aXJlKCdidWZmZXInKS5yZXNvbHZlT2JqZWN0VVJMXG4gICAgICB9XG5cbiAgICAgIC8vIDEuIExldCBibG9iVVJMRW50cnkgYmUgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGJsb2IgVVJMIGVudHJ5LlxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5ID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3dlYi1wbGF0Zm9ybS10ZXN0cy93cHQvYmxvYi83YjBlYmFjY2M2MmI1NjZhMTk2NTM5NmU1YmU3YmIyYmMwNmY4NDFmL0ZpbGVBUEkvdXJsL3Jlc291cmNlcy9mZXRjaC10ZXN0cy5qcyNMNTItTDU2XG4gICAgICAvLyBCdWZmZXIucmVzb2x2ZU9iamVjdFVSTCBkb2VzIG5vdCBpZ25vcmUgVVJMIHF1ZXJpZXMuXG4gICAgICBpZiAoYmxvYlVSTEVudHJ5LnNlYXJjaC5sZW5ndGggIT09IDApIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdOZXR3b3JrRXJyb3Igd2hlbiBhdHRlbXB0aW5nIHRvIGZldGNoIHJlc291cmNlLicpKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBibG9iVVJMRW50cnlPYmplY3QgPSByZXNvbHZlT2JqZWN0VVJMKGJsb2JVUkxFbnRyeS50b1N0cmluZygpKVxuXG4gICAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgbm90IGBHRVRgLCBibG9iVVJMRW50cnkgaXMgbnVsbCwgb3IgYmxvYlVSTEVudHJ5XHUyMDE5c1xuICAgICAgLy8gICAgb2JqZWN0IGlzIG5vdCBhIEJsb2Igb2JqZWN0LCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAocmVxdWVzdC5tZXRob2QgIT09ICdHRVQnIHx8ICFpc0Jsb2JMaWtlKGJsb2JVUkxFbnRyeU9iamVjdCkpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdpbnZhbGlkIG1ldGhvZCcpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBMZXQgYm9keVdpdGhUeXBlIGJlIHRoZSByZXN1bHQgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgYmxvYlVSTEVudHJ5XHUyMDE5cyBvYmplY3QuXG4gICAgICBjb25zdCBib2R5V2l0aFR5cGUgPSBzYWZlbHlFeHRyYWN0Qm9keShibG9iVVJMRW50cnlPYmplY3QpXG5cbiAgICAgIC8vIDQuIExldCBib2R5IGJlIGJvZHlXaXRoVHlwZVx1MjAxOXMgYm9keS5cbiAgICAgIGNvbnN0IGJvZHkgPSBib2R5V2l0aFR5cGVbMF1cblxuICAgICAgLy8gNS4gTGV0IGxlbmd0aCBiZSBib2R5XHUyMDE5cyBsZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgIGNvbnN0IGxlbmd0aCA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Ym9keS5sZW5ndGh9YClcblxuICAgICAgLy8gNi4gTGV0IHR5cGUgYmUgYm9keVdpdGhUeXBlXHUyMDE5cyB0eXBlIGlmIGl0IGlzIG5vbi1udWxsOyBvdGhlcndpc2UgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gICAgICBjb25zdCB0eXBlID0gYm9keVdpdGhUeXBlWzFdID8/ICcnXG5cbiAgICAgIC8vIDcuIFJldHVybiBhIG5ldyByZXNwb25zZSB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpc1xuICAgICAgLy8gICAgXHUwMEFCIChgQ29udGVudC1MZW5ndGhgLCBsZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIFx1MDBCQiwgYW5kIGJvZHkgaXMgYm9keS5cbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtbGVuZ3RoJywgeyBuYW1lOiAnQ29udGVudC1MZW5ndGgnLCB2YWx1ZTogbGVuZ3RoIH1dLFxuICAgICAgICAgIFsnY29udGVudC10eXBlJywgeyBuYW1lOiAnQ29udGVudC1UeXBlJywgdmFsdWU6IHR5cGUgfV1cbiAgICAgICAgXVxuICAgICAgfSlcblxuICAgICAgcmVzcG9uc2UuYm9keSA9IGJvZHlcblxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICB9XG4gICAgY2FzZSAnZGF0YTonOiB7XG4gICAgICAvLyAxLiBMZXQgZGF0YVVSTFN0cnVjdCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlXG4gICAgICAvLyAgICBkYXRhOiBVUkwgcHJvY2Vzc29yIG9uIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgICBjb25zdCBkYXRhVVJMU3RydWN0ID0gZGF0YVVSTFByb2Nlc3NvcihjdXJyZW50VVJMKVxuXG4gICAgICAvLyAyLiBJZiBkYXRhVVJMU3RydWN0IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGFcbiAgICAgIC8vICAgIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAoZGF0YVVSTFN0cnVjdCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignZmFpbGVkIHRvIGZldGNoIHRoZSBkYXRhIFVSTCcpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBMZXQgbWltZVR5cGUgYmUgZGF0YVVSTFN0cnVjdFx1MjAxOXMgTUlNRSB0eXBlLCBzZXJpYWxpemVkLlxuICAgICAgY29uc3QgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUoZGF0YVVSTFN0cnVjdC5taW1lVHlwZSlcblxuICAgICAgLy8gNC4gUmV0dXJuIGEgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCxcbiAgICAgIC8vICAgIGhlYWRlciBsaXN0IGlzIFx1MDBBQiAoYENvbnRlbnQtVHlwZWAsIG1pbWVUeXBlKSBcdTAwQkIsXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN0XHUyMDE5cyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicpIHtcbiAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IHRvIFx1MDBBQiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3RbMF0gXHUwMEJCLlxuICAgIHJlc3BvbnNlLnVybExpc3QgPSBbZmV0Y2hQYXJhbXMucmVxdWVzdC51cmxMaXN0WzBdXVxuXG4gICAgLy8gMi4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmdcbiAgICAvLyBpbmZvIGZvciBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gICAgcmVzcG9uc2UudGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgICAgc3RhcnRUaW1lOiBmZXRjaFBhcmFtcy50aW1pbmdJbmZvLnN0YXJ0VGltZVxuICAgIH0pXG4gIH1cblxuICAvLyAyLiBMZXQgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IGJlIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gIGNvbnN0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSA9ICgpID0+IHtcbiAgICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgICAvLyBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2VcbiAgICAvLyBlbmQtb2YtYm9keSBnaXZlbiByZXNwb25zZSB3aXRoIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgIT0gbnVsbCkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KHJlc3BvbnNlKSlcbiAgICB9XG4gIH1cblxuICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBpcyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2tcbiAgLy8gdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGdpdmVuIHJlc3BvbnNlLCB3aXRoIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpKVxuICB9XG5cbiAgLy8gNC4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgfSBlbHNlIHtcbiAgLy8gNS4gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gTGV0IHRyYW5zZm9ybVN0cmVhbSBiZSBhIG5ldyBhIFRyYW5zZm9ybVN0cmVhbS5cblxuICAgIC8vIDIuIExldCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gd2hpY2gsIGdpdmVuIGNodW5rLFxuICAgIC8vIGVucXVldWVzIGNodW5rIGluIHRyYW5zZm9ybVN0cmVhbS5cbiAgICBjb25zdCBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSA9IChjaHVuaywgY29udHJvbGxlcikgPT4ge1xuICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGNodW5rKVxuICAgIH1cblxuICAgIC8vIDMuIFNldCB1cCB0cmFuc2Zvcm1TdHJlYW0gd2l0aCB0cmFuc2Zvcm1BbGdvcml0aG0gc2V0IHRvIGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtXG4gICAgLy8gYW5kIGZsdXNoQWxnb3JpdGhtIHNldCB0byBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkuXG4gICAgY29uc3QgdHJhbnNmb3JtU3RyZWFtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSh7XG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHRyYW5zZm9ybTogaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0sXG4gICAgICBmbHVzaDogcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5XG4gICAgfSwge1xuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfSwge1xuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfSlcblxuICAgIC8vIDQuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGUgcmVzdWx0IG9mIHBpcGluZyByZXNwb25zZVx1MjAxOXMgYm9keSB0aHJvdWdoIHRyYW5zZm9ybVN0cmVhbS5cbiAgICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW06IHJlc3BvbnNlLmJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKHRyYW5zZm9ybVN0cmVhbSkgfVxuICB9XG5cbiAgLy8gNi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkgIT0gbnVsbCkge1xuICAgIC8vIDEuIExldCBwcm9jZXNzQm9keSBnaXZlbiBudWxsT3JCeXRlcyBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgICAvLyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgbnVsbE9yQnl0ZXMuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHkgPSAobnVsbE9yQnl0ZXMpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBudWxsT3JCeXRlcylcblxuICAgIC8vIDIuIExldCBwcm9jZXNzQm9keUVycm9yIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzXG4gICAgLy8gcmVzcG9uc2UgY29uc3VtZSBib2R5IGdpdmVuIHJlc3BvbnNlIGFuZCBmYWlsdXJlLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZmFpbHVyZSkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHkocmVzcG9uc2UsIGZhaWx1cmUpXG5cbiAgICAvLyAzLiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc0JvZHlcbiAgICAvLyBnaXZlbiBudWxsLCB3aXRoIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIGlmIChyZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHByb2Nlc3NCb2R5KG51bGwpKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyA0LiBPdGhlcndpc2UsIGZ1bGx5IHJlYWQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IsXG4gICAgICAvLyBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgICByZXR1cm4gZnVsbHlSZWFkQm9keShyZXNwb25zZS5ib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcilcbiAgICB9XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IGFjdHVhbFJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA1LiBJZiByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcImFsbFwiLCB0aGVuOlxuICBpZiAocmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9PT0gJ2FsbCcpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICAvLyAxLiBJZiBtYWtlQ09SU1ByZWZsaWdodCBpcyB0cnVlIGFuZCBvbmUgb2YgdGhlc2UgY29uZGl0aW9ucyBpcyB0cnVlOlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXMgXCJmb2xsb3dcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgICAvLyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycpIHtcbiAgICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgcmVzcG9uc2UgYW5kIGFjdHVhbFJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgIC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICBhY3R1YWxSZXNwb25zZSA9IHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goZmV0Y2hQYXJhbXMpXG5cbiAgICAvLyA0LiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgYSBDT1JTIGNoZWNrXG4gICAgLy8gZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgICBjb3JzQ2hlY2socmVxdWVzdCwgcmVzcG9uc2UpID09PSAnZmFpbHVyZSdcbiAgICApIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdjb3JzIGZhaWx1cmUnKVxuICAgIH1cblxuICAgIC8vIDUuIElmIHRoZSBUQU8gY2hlY2sgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyB0aW1pbmcgYWxsb3cgZmFpbGVkIGZsYWcuXG4gICAgaWYgKFRBT0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICByZXF1ZXN0LnRpbWluZ0FsbG93RmFpbGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIElmIGVpdGhlciByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBvciByZXNwb25zZVx1MjAxOXMgdHlwZVxuICAvLyBpcyBcIm9wYXF1ZVwiLCBhbmQgdGhlIGNyb3NzLW9yaWdpbiByZXNvdXJjZSBwb2xpY3kgY2hlY2sgd2l0aFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4sIHJlcXVlc3RcdTIwMTlzIGNsaWVudCwgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24sXG4gIC8vIGFuZCBhY3R1YWxSZXNwb25zZSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLnR5cGUgPT09ICdvcGFxdWUnKSAmJlxuICAgIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayhcbiAgICAgIHJlcXVlc3Qub3JpZ2luLFxuICAgICAgcmVxdWVzdC5jbGllbnQsXG4gICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uLFxuICAgICAgYWN0dWFsUmVzcG9uc2VcbiAgICApID09PSAnYmxvY2tlZCdcbiAgKSB7XG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ2Jsb2NrZWQnKVxuICB9XG5cbiAgLy8gOC4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbjpcbiAgaWYgKHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgLy8gMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vdCBudWxsLFxuICAgIC8vIGFuZCB0aGUgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB1c2VyIGFnZW50cyBtYXksIGFuZCBhcmUgZXZlblxuICAgIC8vIGVuY291cmFnZWQgdG8sIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjg4XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gICAgfVxuXG4gICAgLy8gMi4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGU6XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ3VuZXhwZWN0ZWQgcmVkaXJlY3QnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ21hbnVhbCcpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byBhbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWxcbiAgICAgIC8vIHJlc3BvbnNlIGlzIGFjdHVhbFJlc3BvbnNlLlxuICAgICAgLy8gTk9URShzcGVjKTogT24gdGhlIHdlYiB0aGlzIHdvdWxkIHJldHVybiBhbiBgb3BhcXVlcmVkaXJlY3RgIHJlc3BvbnNlLFxuICAgICAgLy8gYnV0IHRoYXQgZG9lc24ndCBtYWtlIHNlbnNlIHNlcnZlciBzaWRlLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xMTkzLlxuICAgICAgcmVzcG9uc2UgPSBhY3R1YWxSZXNwb25zZVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycpIHtcbiAgICAgIC8vIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1yZWRpcmVjdCBmZXRjaCBnaXZlblxuICAgICAgLy8gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgICAgcmVzcG9uc2UgPSBhd2FpdCBodHRwUmVkaXJlY3RGZXRjaChmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cblxuICAvLyA5LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTAuIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXJlZGlyZWN0LWZldGNoXG5mdW5jdGlvbiBodHRwUmVkaXJlY3RGZXRjaCAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBhY3R1YWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgbm90IGEgZmlsdGVyZWQgcmVzcG9uc2UsXG4gIC8vIGFuZCByZXNwb25zZVx1MjAxOXMgaW50ZXJuYWwgcmVzcG9uc2Ugb3RoZXJ3aXNlLlxuICBjb25zdCBhY3R1YWxSZXNwb25zZSA9IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcbiAgICA/IHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2VcbiAgICA6IHJlc3BvbnNlXG5cbiAgLy8gMy4gTGV0IGxvY2F0aW9uVVJMIGJlIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBsb2NhdGlvbiBVUkwgZ2l2ZW4gcmVxdWVzdFx1MjAxOXMgY3VycmVudFxuICAvLyBVUkxcdTIwMTlzIGZyYWdtZW50LlxuICBsZXQgbG9jYXRpb25VUkxcblxuICB0cnkge1xuICAgIGxvY2F0aW9uVVJMID0gcmVzcG9uc2VMb2NhdGlvblVSTChcbiAgICAgIGFjdHVhbFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkuaGFzaFxuICAgIClcblxuICAgIC8vIDQuIElmIGxvY2F0aW9uVVJMIGlzIG51bGwsIHRoZW4gcmV0dXJuIHJlc3BvbnNlLlxuICAgIGlmIChsb2NhdGlvblVSTCA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDUuIElmIGxvY2F0aW9uVVJMIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgfVxuXG4gIC8vIDYuIElmIGxvY2F0aW9uVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgLy8gZXJyb3IuXG4gIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUobG9jYXRpb25VUkwpKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdVUkwgc2NoZW1lIG11c3QgYmUgYSBIVFRQKFMpIHNjaGVtZScpKVxuICB9XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgY291bnQgaXMgMjAsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMjApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3JlZGlyZWN0IGNvdW50IGV4Y2VlZGVkJykpXG4gIH1cblxuICAvLyA4LiBJbmNyZWFzZSByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBjb3VudCBieSAxLlxuICByZXF1ZXN0LnJlZGlyZWN0Q291bnQgKz0gMVxuXG4gIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJjb3JzXCIsIGxvY2F0aW9uVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCBhbmRcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIGxvY2F0aW9uVVJMXHUyMDE5cyBvcmlnaW4sIHRoZW4gcmV0dXJuXG4gIC8vICBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXF1ZXN0Lm1vZGUgPT09ICdjb3JzJyAmJlxuICAgIChsb2NhdGlvblVSTC51c2VybmFtZSB8fCBsb2NhdGlvblVSTC5wYXNzd29yZCkgJiZcbiAgICAhc2FtZU9yaWdpbihyZXF1ZXN0LCBsb2NhdGlvblVSTClcbiAgKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdjcm9zcyBvcmlnaW4gbm90IGFsbG93ZWQgZm9yIHJlcXVlc3QgbW9kZSBcImNvcnNcIicpKVxuICB9XG5cbiAgLy8gMTAuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIGFuZCBsb2NhdGlvblVSTCBpbmNsdWRlc1xuICAvLyBjcmVkZW50aWFscywgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcihcbiAgICAgICdVUkwgY2Fubm90IGNvbnRhaW4gY3JlZGVudGlhbHMgZm9yIHJlcXVlc3QgbW9kZSBcImNvcnNcIidcbiAgICApKVxuICB9XG5cbiAgLy8gMTEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICBhY3R1YWxSZXNwb25zZS5zdGF0dXMgIT09IDMwMyAmJlxuICAgIHJlcXVlc3QuYm9keSAhPSBudWxsICYmXG4gICAgcmVxdWVzdC5ib2R5LnNvdXJjZSA9PSBudWxsXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcigpKVxuICB9XG5cbiAgLy8gMTIuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgLy8gLSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDMwMSBvciAzMDIgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgUE9TVGBcbiAgLy8gLSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDMwMyBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5vdCBgR0VUYCBvciBgSEVBRGBcbiAgaWYgKFxuICAgIChbMzAxLCAzMDJdLmluY2x1ZGVzKGFjdHVhbFJlc3BvbnNlLnN0YXR1cykgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdQT1NUJykgfHxcbiAgICAoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzID09PSAzMDMgJiZcbiAgICAgICFHRVRfT1JfSEVBRC5pbmNsdWRlcyhyZXF1ZXN0Lm1ldGhvZCkpXG4gICkge1xuICAgIC8vIHRoZW46XG4gICAgLy8gMS4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBgR0VUYCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keSB0byBudWxsLlxuICAgIHJlcXVlc3QubWV0aG9kID0gJ0dFVCdcbiAgICByZXF1ZXN0LmJvZHkgPSBudWxsXG5cbiAgICAvLyAyLiBGb3IgZWFjaCBoZWFkZXJOYW1lIG9mIHJlcXVlc3QtYm9keS1oZWFkZXIgbmFtZSwgZGVsZXRlIGhlYWRlck5hbWUgZnJvbVxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGZvciAoY29uc3QgaGVhZGVyTmFtZSBvZiByZXF1ZXN0Qm9keUhlYWRlcikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoaGVhZGVyTmFtZSlcbiAgICB9XG4gIH1cblxuICAvLyAxMy4gSWYgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTFx1MjAxOXNcbiAgLy8gICAgIG9yaWdpbiwgdGhlbiBmb3IgZWFjaCBoZWFkZXJOYW1lIG9mIENPUlMgbm9uLXdpbGRjYXJkIHJlcXVlc3QtaGVhZGVyIG5hbWUsXG4gIC8vICAgICBkZWxldGUgaGVhZGVyTmFtZSBmcm9tIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIXNhbWVPcmlnaW4ocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCksIGxvY2F0aW9uVVJMKSkge1xuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb3JzLW5vbi13aWxkY2FyZC1yZXF1ZXN0LWhlYWRlci1uYW1lXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2F1dGhvcml6YXRpb24nKVxuXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2F1dGhlbnRpY2F0aW9uLWVudHJpZXNcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgncHJveHktYXV0aG9yaXphdGlvbicsIHRydWUpXG5cbiAgICAvLyBcIkNvb2tpZVwiIGFuZCBcIkhvc3RcIiBhcmUgZm9yYmlkZGVuIHJlcXVlc3QtaGVhZGVycywgd2hpY2ggdW5kaWNpIGRvZXNuJ3QgaW1wbGVtZW50LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdjb29raWUnKVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcbiAgfVxuXG4gIC8vIDE0LiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIHRoZSBmaXJzdCByZXR1cm5cbiAgLy8gdmFsdWUgb2Ygc2FmZWx5IGV4dHJhY3RpbmcgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlLlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICBhc3NlcnQocmVxdWVzdC5ib2R5LnNvdXJjZSAhPSBudWxsKVxuICAgIHJlcXVlc3QuYm9keSA9IHNhZmVseUV4dHJhY3RCb2R5KHJlcXVlc3QuYm9keS5zb3VyY2UpWzBdXG4gIH1cblxuICAvLyAxNS4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDE2LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgcmVkaXJlY3QgZW5kIHRpbWUgYW5kIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSB0byB0aGVcbiAgLy8gY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5LlxuICB0aW1pbmdJbmZvLnJlZGlyZWN0RW5kVGltZSA9IHRpbWluZ0luZm8ucG9zdFJlZGlyZWN0U3RhcnRUaW1lID1cbiAgICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShmZXRjaFBhcmFtcy5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcblxuICAvLyAxNy4gSWYgdGltaW5nSW5mb1x1MjAxOXMgcmVkaXJlY3Qgc3RhcnQgdGltZSBpcyAwLCB0aGVuIHNldCB0aW1pbmdJbmZvXHUyMDE5c1xuICAvLyAgcmVkaXJlY3Qgc3RhcnQgdGltZSB0byB0aW1pbmdJbmZvXHUyMDE5cyBzdGFydCB0aW1lLlxuICBpZiAodGltaW5nSW5mby5yZWRpcmVjdFN0YXJ0VGltZSA9PT0gMCkge1xuICAgIHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPSB0aW1pbmdJbmZvLnN0YXJ0VGltZVxuICB9XG5cbiAgLy8gMTguIEFwcGVuZCBsb2NhdGlvblVSTCB0byByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgcmVxdWVzdC51cmxMaXN0LnB1c2gobG9jYXRpb25VUkwpXG5cbiAgLy8gMTkuIEludm9rZSBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IG9uIHJlZGlyZWN0IG9uIHJlcXVlc3QgYW5kXG4gIC8vIGFjdHVhbFJlc3BvbnNlLlxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0KHJlcXVlc3QsIGFjdHVhbFJlc3BvbnNlKVxuXG4gIC8vIDIwLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHRydWUuXG4gIHJldHVybiBtYWluRmV0Y2goZmV0Y2hQYXJhbXMsIHRydWUpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLW5ldHdvcmstb3ItY2FjaGUtZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoIChcbiAgZmV0Y2hQYXJhbXMsXG4gIGlzQXV0aGVudGljYXRpb25GZXRjaCA9IGZhbHNlLFxuICBpc05ld0Nvbm5lY3Rpb25GZXRjaCA9IGZhbHNlXG4pIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IGh0dHBGZXRjaFBhcmFtcyBiZSBudWxsLlxuICBsZXQgaHR0cEZldGNoUGFyYW1zID0gbnVsbFxuXG4gIC8vIDMuIExldCBodHRwUmVxdWVzdCBiZSBudWxsLlxuICBsZXQgaHR0cFJlcXVlc3QgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyA1LiBMZXQgc3RvcmVkUmVzcG9uc2UgYmUgbnVsbC5cbiAgLy8gVE9ETzogY2FjaGVcblxuICAvLyA2LiBMZXQgaHR0cENhY2hlIGJlIG51bGwuXG4gIGNvbnN0IGh0dHBDYWNoZSA9IG51bGxcblxuICAvLyA3LiBMZXQgdGhlIHJldmFsaWRhdGluZ0ZsYWcgYmUgdW5zZXQuXG4gIGNvbnN0IHJldmFsaWRhdGluZ0ZsYWcgPSBmYWxzZVxuXG4gIC8vIDguIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiBhbmQgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpc1xuICAvLyAgICBcImVycm9yXCIsIHRoZW4gc2V0IGh0dHBGZXRjaFBhcmFtcyB0byBmZXRjaFBhcmFtcyBhbmQgaHR0cFJlcXVlc3QgdG9cbiAgLy8gICAgcmVxdWVzdC5cbiAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnbm8td2luZG93JyAmJiByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgaHR0cEZldGNoUGFyYW1zID0gZmV0Y2hQYXJhbXNcbiAgICBodHRwUmVxdWVzdCA9IHJlcXVlc3RcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBTZXQgaHR0cFJlcXVlc3QgdG8gYSBjbG9uZSBvZiByZXF1ZXN0LlxuICAgIGh0dHBSZXF1ZXN0ID0gbWFrZVJlcXVlc3QocmVxdWVzdClcblxuICAgIC8vIDIuIFNldCBodHRwRmV0Y2hQYXJhbXMgdG8gYSBjb3B5IG9mIGZldGNoUGFyYW1zLlxuICAgIGh0dHBGZXRjaFBhcmFtcyA9IHsgLi4uZmV0Y2hQYXJhbXMgfVxuXG4gICAgLy8gMy4gU2V0IGh0dHBGZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdCB0byBodHRwUmVxdWVzdC5cbiAgICBodHRwRmV0Y2hQYXJhbXMucmVxdWVzdCA9IGh0dHBSZXF1ZXN0XG4gIH1cblxuICAvLyAgICAzLiBMZXQgaW5jbHVkZUNyZWRlbnRpYWxzIGJlIHRydWUgaWYgb25lIG9mXG4gIGNvbnN0IGluY2x1ZGVDcmVkZW50aWFscyA9XG4gICAgcmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ2luY2x1ZGUnIHx8XG4gICAgKHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdzYW1lLW9yaWdpbicgJiZcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJylcblxuICAvLyAgICA0LiBMZXQgY29udGVudExlbmd0aCBiZSBodHRwUmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgbGVuZ3RoLCBpZiBodHRwUmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgYm9keSBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBodHRwUmVxdWVzdC5ib2R5ID8gaHR0cFJlcXVlc3QuYm9keS5sZW5ndGggOiBudWxsXG5cbiAgLy8gICAgNS4gTGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBiZSBudWxsLlxuICBsZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gbnVsbFxuXG4gIC8vICAgIDYuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgIG9yXG4gIC8vICAgIGBQVVRgLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gYDBgLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuYm9keSA9PSBudWxsICYmXG4gICAgWydQT1NUJywgJ1BVVCddLmluY2x1ZGVzKGh0dHBSZXF1ZXN0Lm1ldGhvZClcbiAgKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gJzAnXG4gIH1cblxuICAvLyAgICA3LiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsLCB0aGVuIHNldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG9cbiAgLy8gICAgY29udGVudExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlID0gaXNvbW9ycGhpY0VuY29kZShgJHtjb250ZW50TGVuZ3RofWApXG4gIH1cblxuICAvLyAgICA4LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBDb250ZW50LUxlbmd0aGAvY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgaWYgKGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSAhPSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LWxlbmd0aCcsIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSlcbiAgfVxuXG4gIC8vICAgIDkuIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmQgKGBDb250ZW50LUxlbmd0aGAsXG4gIC8vICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSkgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDEwLiBJZiBjb250ZW50TGVuZ3RoIGlzIG5vbi1udWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIGlzIHRydWUsXG4gIC8vICAgIHRoZW46XG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgaHR0cFJlcXVlc3Qua2VlcGFsaXZlKSB7XG4gICAgLy8gTk9URToga2VlcGFsaXZlIGlzIGEgbm9vcCBvdXRzaWRlIG9mIGJyb3dzZXIgY29udGV4dC5cbiAgfVxuXG4gIC8vICAgIDExLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgYSBVUkwsIHRoZW4gYXBwZW5kXG4gIC8vICAgIGBSZWZlcmVyYC9odHRwUmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZCxcbiAgLy8gICAgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdyZWZlcmVyJywgaXNvbW9ycGhpY0VuY29kZShodHRwUmVxdWVzdC5yZWZlcnJlci5ocmVmKSlcbiAgfVxuXG4gIC8vICAgIDEyLiBBcHBlbmQgYSByZXF1ZXN0IGBPcmlnaW5gIGhlYWRlciBmb3IgaHR0cFJlcXVlc3QuXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTMuIEFwcGVuZCB0aGUgRmV0Y2ggbWV0YWRhdGEgaGVhZGVycyBmb3IgaHR0cFJlcXVlc3QuIFtGRVRDSC1NRVRBREFUQV1cbiAgYXBwZW5kRmV0Y2hNZXRhZGF0YShodHRwUmVxdWVzdClcblxuICAvLyAgICAxNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFVzZXItQWdlbnRgLCB0aGVuXG4gIC8vICAgIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYFVzZXItQWdlbnRgL2RlZmF1bHQgYFVzZXItQWdlbnRgIHZhbHVlIHRvXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygndXNlci1hZ2VudCcpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCd1c2VyLWFnZW50JywgdHlwZW9mIGVzYnVpbGREZXRlY3Rpb24gPT09ICd1bmRlZmluZWQnID8gJ3VuZGljaScgOiAnbm9kZScpXG4gIH1cblxuICAvLyAgICAxNS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJkZWZhdWx0XCIgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdCBjb250YWlucyBgSWYtTW9kaWZpZWQtU2luY2VgLCBgSWYtTm9uZS1NYXRjaGAsXG4gIC8vICAgIGBJZi1Vbm1vZGlmaWVkLVNpbmNlYCwgYElmLU1hdGNoYCwgb3IgYElmLVJhbmdlYCwgdGhlbiBzZXRcbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdkZWZhdWx0JyAmJlxuICAgIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtbW9kaWZpZWQtc2luY2UnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW5vbmUtbWF0Y2gnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLXVubW9kaWZpZWQtc2luY2UnKSB8fFxuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1yYW5nZScpKVxuICApIHtcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vICAgIDE2LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm5vLWNhY2hlXCIsIGh0dHBSZXF1ZXN0XHUyMDE5cyBwcmV2ZW50XG4gIC8vICAgIG5vLWNhY2hlIGNhY2hlLWNvbnRyb2wgaGVhZGVyIG1vZGlmaWNhdGlvbiBmbGFnIGlzIHVuc2V0LCBhbmRcbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYENhY2hlLUNvbnRyb2xgLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ2FjaGUtQ29udHJvbGAvYG1heC1hZ2U9MGAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoXG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPT09ICduby1jYWNoZScgJiZcbiAgICAhaHR0cFJlcXVlc3QucHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb24gJiZcbiAgICAhaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2NhY2hlLWNvbnRyb2wnKVxuICApIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbWF4LWFnZT0wJylcbiAgfVxuXG4gIC8vICAgIDE3LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgb3IgXCJyZWxvYWRcIiwgdGhlbjpcbiAgaWYgKGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tc3RvcmUnIHx8IGh0dHBSZXF1ZXN0LmNhY2hlID09PSAncmVsb2FkJykge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBQcmFnbWFgLCB0aGVuIGFwcGVuZFxuICAgIC8vIGBQcmFnbWFgL2Buby1jYWNoZWAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ByYWdtYScpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3ByYWdtYScsICduby1jYWNoZScpXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYENhY2hlLUNvbnRyb2xgLFxuICAgIC8vIHRoZW4gYXBwZW5kIGBDYWNoZS1Db250cm9sYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJykpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY2FjaGUtY29udHJvbCcsICduby1jYWNoZScpXG4gICAgfVxuICB9XG5cbiAgLy8gICAgMTguIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgUmFuZ2VgLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQWNjZXB0LUVuY29kaW5nYC9gaWRlbnRpdHlgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScpKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnaWRlbnRpdHknKVxuICB9XG5cbiAgLy8gICAgMTkuIE1vZGlmeSBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgcGVyIEhUVFAuIERvIG5vdCBhcHBlbmQgYSBnaXZlblxuICAvLyAgICBoZWFkZXIgaWYgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIHRoYXQgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAvLyAgICBUT0RPOiBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjg1I2lzc3VlY29tbWVudC04OTY1NjAxMjlcbiAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWVuY29kaW5nJykpIHtcbiAgICBpZiAodXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdEN1cnJlbnRVUkwoaHR0cFJlcXVlc3QpKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnYnIsIGd6aXAsIGRlZmxhdGUnKVxuICAgIH0gZWxzZSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdC1lbmNvZGluZycsICdnemlwLCBkZWZsYXRlJylcbiAgICB9XG4gIH1cblxuICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ2hvc3QnKVxuXG4gIC8vICAgIDIwLiBJZiBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKGluY2x1ZGVDcmVkZW50aWFscykge1xuICAgIC8vIDEuIElmIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkIHRvIGJsb2NrIGNvb2tpZXMgZm9yIGh0dHBSZXF1ZXN0XG4gICAgLy8gKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbjpcbiAgICAvLyBUT0RPOiBjcmVkZW50aWFsc1xuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBdXRob3JpemF0aW9uYCwgdGhlbjpcbiAgICAvLyBUT0RPOiBjcmVkZW50aWFsc1xuICB9XG5cbiAgLy8gICAgMjEuIElmIHRoZXJlXHUyMDE5cyBhIHByb3h5LWF1dGhlbnRpY2F0aW9uIGVudHJ5LCB1c2UgaXQgYXMgYXBwcm9wcmlhdGUuXG4gIC8vICAgIFRPRE86IHByb3h5LWF1dGhlbnRpY2F0aW9uXG5cbiAgLy8gICAgMjIuIFNldCBodHRwQ2FjaGUgdG8gdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgSFRUUCBjYWNoZVxuICAvLyAgICBwYXJ0aXRpb24sIGdpdmVuIGh0dHBSZXF1ZXN0LlxuICAvLyAgICBUT0RPOiBjYWNoZVxuXG4gIC8vICAgIDIzLiBJZiBodHRwQ2FjaGUgaXMgbnVsbCwgdGhlbiBzZXQgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG9cbiAgLy8gICAgXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICBodHRwUmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vICAgIDI0LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBuZWl0aGVyIFwibm8tc3RvcmVcIiBub3IgXCJyZWxvYWRcIixcbiAgLy8gICAgdGhlbjpcbiAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICduby1zdG9yZScgJiYgaHR0cFJlcXVlc3QubW9kZSAhPT0gJ3JlbG9hZCcpIHtcbiAgICAvLyBUT0RPOiBjYWNoZVxuICB9XG5cbiAgLy8gOS4gSWYgYWJvcnRlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiLCB0aGVuIHJldHVybiBhXG4gICAgLy8gbmV0d29yayBlcnJvci5cbiAgICBpZiAoaHR0cFJlcXVlc3QubW9kZSA9PT0gJ29ubHktaWYtY2FjaGVkJykge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ29ubHkgaWYgY2FjaGVkJylcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgZm9yd2FyZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmsgZmV0Y2hcbiAgICAvLyBnaXZlbiBodHRwRmV0Y2hQYXJhbXMsIGluY2x1ZGVDcmVkZW50aWFscywgYW5kIGlzTmV3Q29ubmVjdGlvbkZldGNoLlxuICAgIGNvbnN0IGZvcndhcmRSZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrRmV0Y2goXG4gICAgICBodHRwRmV0Y2hQYXJhbXMsXG4gICAgICBpbmNsdWRlQ3JlZGVudGlhbHMsXG4gICAgICBpc05ld0Nvbm5lY3Rpb25GZXRjaFxuICAgIClcblxuICAgIC8vIDMuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgdW5zYWZlIGFuZCBmb3J3YXJkUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpc1xuICAgIC8vIGluIHRoZSByYW5nZSAyMDAgdG8gMzk5LCBpbmNsdXNpdmUsIGludmFsaWRhdGUgYXBwcm9wcmlhdGUgc3RvcmVkXG4gICAgLy8gcmVzcG9uc2VzIGluIGh0dHBDYWNoZSwgYXMgcGVyIHRoZSBcIkludmFsaWRhdGlvblwiIGNoYXB0ZXIgb2YgSFRUUFxuICAgIC8vIENhY2hpbmcsIGFuZCBzZXQgc3RvcmVkUmVzcG9uc2UgdG8gbnVsbC4gW0hUVFAtQ0FDSElOR11cbiAgICBpZiAoXG4gICAgICAhc2FmZU1ldGhvZHNTZXQuaGFzKGh0dHBSZXF1ZXN0Lm1ldGhvZCkgJiZcbiAgICAgIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPj0gMjAwICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzIDw9IDM5OVxuICAgICkge1xuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG5cbiAgICAvLyA0LiBJZiB0aGUgcmV2YWxpZGF0aW5nRmxhZyBpcyBzZXQgYW5kIGZvcndhcmRSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDMwNCxcbiAgICAvLyB0aGVuOlxuICAgIGlmIChyZXZhbGlkYXRpbmdGbGFnICYmIGZvcndhcmRSZXNwb25zZS5zdGF0dXMgPT09IDMwNCkge1xuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG5cbiAgICAvLyA1LiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICAgIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2UgdG8gZm9yd2FyZFJlc3BvbnNlLlxuICAgICAgcmVzcG9uc2UgPSBmb3J3YXJkUmVzcG9uc2VcblxuICAgICAgLy8gMi4gU3RvcmUgaHR0cFJlcXVlc3QgYW5kIGZvcndhcmRSZXNwb25zZSBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGVcbiAgICAgIC8vIFwiU3RvcmluZyBSZXNwb25zZXMgaW4gQ2FjaGVzXCIgY2hhcHRlciBvZiBIVFRQIENhY2hpbmcuIFtIVFRQLUNBQ0hJTkddXG4gICAgICAvLyBUT0RPOiBjYWNoZVxuICAgIH1cbiAgfVxuXG4gIC8vIDExLiBTZXQgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IHRvIGEgY2xvbmUgb2YgaHR0cFJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICByZXNwb25zZS51cmxMaXN0ID0gWy4uLmh0dHBSZXF1ZXN0LnVybExpc3RdXG5cbiAgLy8gMTIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZVx1MjAxOXNcbiAgLy8gcmFuZ2UtcmVxdWVzdGVkIGZsYWcuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIHJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTMuIFNldCByZXNwb25zZVx1MjAxOXMgcmVxdWVzdC1pbmNsdWRlcy1jcmVkZW50aWFscyB0byBpbmNsdWRlQ3JlZGVudGlhbHMuXG4gIHJlc3BvbnNlLnJlcXVlc3RJbmNsdWRlc0NyZWRlbnRpYWxzID0gaW5jbHVkZUNyZWRlbnRpYWxzXG5cbiAgLy8gMTQuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDAxLCBodHRwUmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgbm90XG4gIC8vIFwiY29yc1wiLCBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSwgYW5kIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudFxuICAvLyBzZXR0aW5ncyBvYmplY3QsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxNS4gSWYgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MDcsIHRoZW46XG4gIGlmIChyZXNwb25zZS5zdGF0dXMgPT09IDQwNykge1xuICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcIm5vLXdpbmRvd1wiLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnbm8td2luZG93Jykge1xuICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoKVxuICAgIH1cblxuICAgIC8vIDIuID8/P1xuXG4gICAgLy8gMy4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKVxuICAgIH1cblxuICAgIC8vIDQuIFByb21wdCB0aGUgZW5kIHVzZXIgYXMgYXBwcm9wcmlhdGUgaW4gcmVxdWVzdFx1MjAxOXMgd2luZG93IGFuZCBzdG9yZVxuICAgIC8vIHRoZSByZXN1bHQgYXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeS4gW0hUVFAtQVVUSF1cbiAgICAvLyBUT0RPOiBJbnZva2Ugc29tZSBraW5kIG9mIGNhbGxiYWNrP1xuXG4gICAgLy8gNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW5cbiAgICAvLyBmZXRjaFBhcmFtcy5cbiAgICAvLyBUT0RPXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3Byb3h5IGF1dGhlbnRpY2F0aW9uIHJlcXVpcmVkJylcbiAgfVxuXG4gIC8vIDE2LiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICBpZiAoXG4gICAgLy8gcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyA0MjFcbiAgICByZXNwb25zZS5zdGF0dXMgPT09IDQyMSAmJlxuICAgIC8vIGlzTmV3Q29ubmVjdGlvbkZldGNoIGlzIGZhbHNlXG4gICAgIWlzTmV3Q29ubmVjdGlvbkZldGNoICYmXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBudWxsLCBvciByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbm9uLW51bGxcbiAgICAocmVxdWVzdC5ib2R5ID09IG51bGwgfHwgcmVxdWVzdC5ib2R5LnNvdXJjZSAhPSBudWxsKVxuICApIHtcbiAgICAvLyB0aGVuOlxuXG4gICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlXG4gICAgLy8gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMsIGlzQXV0aGVudGljYXRpb25GZXRjaCwgYW5kIHRydWUuXG5cbiAgICAvLyBUT0RPIChzcGVjKTogVGhlIHNwZWMgZG9lc24ndCBzcGVjaWZ5IHRoaXMgYnV0IHdlIG5lZWQgdG8gY2FuY2VsXG4gICAgLy8gdGhlIGFjdGl2ZSByZXNwb25zZSBiZWZvcmUgd2UgY2FuIHN0YXJ0IGEgbmV3IG9uZS5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjkzXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgcmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya09yQ2FjaGVGZXRjaChcbiAgICAgIGZldGNoUGFyYW1zLFxuICAgICAgaXNBdXRoZW50aWNhdGlvbkZldGNoLFxuICAgICAgdHJ1ZVxuICAgIClcbiAgfVxuXG4gIC8vIDE3LiBJZiBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggaXMgdHJ1ZSwgdGhlbiBjcmVhdGUgYW4gYXV0aGVudGljYXRpb24gZW50cnlcbiAgaWYgKGlzQXV0aGVudGljYXRpb25GZXRjaCkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE4LiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya0ZldGNoIChcbiAgZmV0Y2hQYXJhbXMsXG4gIGluY2x1ZGVDcmVkZW50aWFscyA9IGZhbHNlLFxuICBmb3JjZU5ld0Nvbm5lY3Rpb24gPSBmYWxzZVxuKSB7XG4gIGFzc2VydCghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uIHx8IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95ZWQpXG5cbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uID0ge1xuICAgIGFib3J0OiBudWxsLFxuICAgIGRlc3Ryb3llZDogZmFsc2UsXG4gICAgZGVzdHJveSAoZXJyKSB7XG4gICAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuICAgICAgICB0aGlzLmFib3J0Py4oZXJyID8/IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA0LiBMZXQgaHR0cENhY2hlIGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGUgcGFydGl0aW9uLFxuICAvLyBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPOiBjYWNoZVxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNS4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gXCJuby1zdG9yZVwiLlxuICBpZiAoaHR0cENhY2hlID09IG51bGwpIHtcbiAgICByZXF1ZXN0LmNhY2hlID0gJ25vLXN0b3JlJ1xuICB9XG5cbiAgLy8gNi4gTGV0IG5ldHdvcmtQYXJ0aXRpb25LZXkgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgbmV0d29ya1xuICAvLyBwYXJ0aXRpb24ga2V5IGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE9cblxuICAvLyA3LiBMZXQgbmV3Q29ubmVjdGlvbiBiZSBcInllc1wiIGlmIGZvcmNlTmV3Q29ubmVjdGlvbiBpcyB0cnVlOyBvdGhlcndpc2VcbiAgLy8gXCJub1wiLlxuICBjb25zdCBuZXdDb25uZWN0aW9uID0gZm9yY2VOZXdDb25uZWN0aW9uID8gJ3llcycgOiAnbm8nIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW51c2VkLXZhcnNcblxuICAvLyA4LiBTd2l0Y2ggb24gcmVxdWVzdFx1MjAxOXMgbW9kZTpcbiAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIFdlYlNvY2tldCBjb25uZWN0aW9uLFxuICAgIC8vIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgIC8vIFRPRE9cbiAgfSBlbHNlIHtcbiAgICAvLyBMZXQgY29ubmVjdGlvbiBiZSB0aGUgcmVzdWx0IG9mIG9idGFpbmluZyBhIGNvbm5lY3Rpb24sIGdpdmVuXG4gICAgLy8gbmV0d29ya1BhcnRpdGlvbktleSwgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIG9yaWdpbixcbiAgICAvLyBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBmb3JjZU5ld0Nvbm5lY3Rpb24uXG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gOS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIElmIGNvbm5lY3Rpb24gaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgIDIuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlbiBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHdpdGggY29ubmVjdGlvblx1MjAxOXNcbiAgLy8gICAgdGltaW5nIGluZm8sIHRpbWluZ0luZm9cdTIwMTlzIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSwgYW5kIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyAgICBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cblxuICAvLyAgICAzLiBJZiBjb25uZWN0aW9uIGlzIG5vdCBhbiBIVFRQLzIgY29ubmVjdGlvbiwgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCxcbiAgLy8gICAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLCB0aGVuIGFwcGVuZCAoYFRyYW5zZmVyLUVuY29kaW5nYCxcbiAgLy8gICAgYGNodW5rZWRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICA0LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXF1ZXN0IHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gICAgY2FwYWJpbGl0eS5cblxuICAvLyAgICA1LiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBtYWtpbmcgYW4gSFRUUCByZXF1ZXN0IG92ZXIgY29ubmVjdGlvblxuICAvLyAgICB1c2luZyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBjYXZlYXRzOlxuXG4gIC8vICAgICAgICAtIEZvbGxvdyB0aGUgcmVsZXZhbnQgcmVxdWlyZW1lbnRzIGZyb20gSFRUUC4gW0hUVFBdIFtIVFRQLVNFTUFOVElDU11cbiAgLy8gICAgICAgIFtIVFRQLUNPTkRdIFtIVFRQLUNBQ0hJTkddIFtIVFRQLUFVVEhdXG5cbiAgLy8gICAgICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZSBpcyBudWxsLFxuICAvLyAgICAgICAgdGhlbiB0aGUgdXNlciBhZ2VudCBtYXkgaGF2ZSBhIGJ1ZmZlciBvZiB1cCB0byA2NCBraWJpYnl0ZXMgYW5kIHN0b3JlXG4gIC8vICAgICAgICBhIHBhcnQgb2YgcmVxdWVzdFx1MjAxOXMgYm9keSBpbiB0aGF0IGJ1ZmZlci4gSWYgdGhlIHVzZXIgYWdlbnQgcmVhZHMgZnJvbVxuICAvLyAgICAgICAgcmVxdWVzdFx1MjAxOXMgYm9keSBiZXlvbmQgdGhhdCBidWZmZXJcdTIwMTlzIHNpemUgYW5kIHRoZSB1c2VyIGFnZW50IG5lZWRzIHRvXG4gIC8vICAgICAgICByZXNlbmQgcmVxdWVzdCwgdGhlbiBpbnN0ZWFkIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgICAgIC0gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgICAgICBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSxcbiAgLy8gICAgICAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSB1c2VyIGFnZW50XHUyMDE5cyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZVxuICAvLyAgICAgICAgb2YgdGhlIHJlc3BvbnNlIChlLmcuLCBmcmFtZSBoZWFkZXIgYnl0ZXMgZm9yIEhUVFAvMiBvciByZXNwb25zZSBzdGF0dXNcbiAgLy8gICAgICAgIGxpbmUgZm9yIEhUVFAvMS54KS5cblxuICAvLyAgICAgICAgLSBXYWl0IHVudGlsIGFsbCB0aGUgaGVhZGVycyBhcmUgdHJhbnNtaXR0ZWQuXG5cbiAgLy8gICAgICAgIC0gQW55IHJlc3BvbnNlcyB3aG9zZSBzdGF0dXMgaXMgaW4gdGhlIHJhbmdlIDEwMCB0byAxOTksIGluY2x1c2l2ZSxcbiAgLy8gICAgICAgIGFuZCBpcyBub3QgMTAxLCBhcmUgdG8gYmUgaWdub3JlZCwgZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2Ygc2V0dGluZ1xuICAvLyAgICAgICAgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIGFib3ZlLlxuXG4gIC8vICAgIC0gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFRyYW5zZmVyLUVuY29kaW5nYC9gY2h1bmtlZGAgYW5kXG4gIC8vICAgIHJlc3BvbnNlIGlzIHRyYW5zZmVycmVkIHZpYSBIVFRQLzEuMCBvciBvbGRlciwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vICAgIGVycm9yLlxuXG4gIC8vICAgIC0gSWYgdGhlIEhUVFAgcmVxdWVzdCByZXN1bHRzIGluIGEgVExTIGNsaWVudCBjZXJ0aWZpY2F0ZSBkaWFsb2csIHRoZW46XG5cbiAgLy8gICAgICAgIDEuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QsIG1ha2UgdGhlXG4gIC8vICAgICAgICBkaWFsb2cgYXZhaWxhYmxlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cblxuICAvLyAgICAgICAgMi4gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vIFRvIHRyYW5zbWl0IHJlcXVlc3RcdTIwMTlzIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuICBsZXQgcmVxdWVzdEJvZHkgPSBudWxsXG4gIC8vIDEuIElmIGJvZHkgaXMgbnVsbCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpc1xuICAvLyBub24tbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdFxuICAvLyBlbmQtb2YtYm9keSBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChyZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KCkpXG4gIH0gZWxzZSBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJvZHkgaXMgbm9uLW51bGw6XG5cbiAgICAvLyAgICAxLiBMZXQgcHJvY2Vzc0JvZHlDaHVuayBnaXZlbiBieXRlcyBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUNodW5rID0gYXN5bmMgZnVuY3Rpb24gKiAoYnl0ZXMpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOiB0cmFuc21pdCBieXRlcy5cbiAgICAgIHlpZWxkIGJ5dGVzXG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW5cbiAgICAgIC8vIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgYm9keSBnaXZlbiBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGg/LihieXRlcy5ieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDIuIExldCBwcm9jZXNzRW5kT2ZCb2R5IGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXMgbm9uLW51bGwsXG4gICAgICAvLyB0aGVuIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBnaXZlbiBlIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAoZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBlIGlzIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbiwgdGhlbiBhYm9ydCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChlLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmFib3J0KClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSW5jcmVtZW50YWxseSByZWFkIHJlcXVlc3RcdTIwMTlzIGJvZHkgZ2l2ZW4gcHJvY2Vzc0JvZHlDaHVuaywgcHJvY2Vzc0VuZE9mQm9keSxcbiAgICAvLyBwcm9jZXNzQm9keUVycm9yLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gICAgcmVxdWVzdEJvZHkgPSAoYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IGJ5dGVzIG9mIHJlcXVlc3QuYm9keS5zdHJlYW0pIHtcbiAgICAgICAgICB5aWVsZCAqIHByb2Nlc3NCb2R5Q2h1bmsoYnl0ZXMpXG4gICAgICAgIH1cbiAgICAgICAgcHJvY2Vzc0VuZE9mQm9keSgpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlFcnJvcihlcnIpXG4gICAgICB9XG4gICAgfSkoKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBzb2NrZXQgaXMgb25seSBwcm92aWRlZCBmb3Igd2Vic29ja2V0c1xuICAgIGNvbnN0IHsgYm9keSwgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0gPSBhd2FpdCBkaXNwYXRjaCh7IGJvZHk6IHJlcXVlc3RCb2R5IH0pXG5cbiAgICBpZiAoc29ja2V0KSB7XG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBpdGVyYXRvciA9IGJvZHlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCA9ICgpID0+IGl0ZXJhdG9yLm5leHQoKVxuXG4gICAgICByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QgfSlcbiAgICB9XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIDEwLiBJZiBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChlcnIubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAvLyAxLiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG5cbiAgICAgIC8vIDIuIFJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zLCBlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoZXJyKVxuICB9XG5cbiAgLy8gMTEuIExldCBwdWxsQWxnb3JpdGhtIGJlIGFuIGFjdGlvbiB0aGF0IHJlc3VtZXMgdGhlIG9uZ29pbmcgZmV0Y2hcbiAgLy8gaWYgaXQgaXMgc3VzcGVuZGVkLlxuICBjb25zdCBwdWxsQWxnb3JpdGhtID0gKCkgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lKClcbiAgfVxuXG4gIC8vIDEyLiBMZXQgY2FuY2VsQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFib3J0cyBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gY29udHJvbGxlciB3aXRoIHJlYXNvbiwgZ2l2ZW4gcmVhc29uLlxuICBjb25zdCBjYW5jZWxBbGdvcml0aG0gPSAocmVhc29uKSA9PiB7XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydChyZWFzb24pXG4gIH1cblxuICAvLyAxMy4gTGV0IGhpZ2hXYXRlck1hcmsgYmUgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4gbnVtYmVyLCBjaG9zZW4gYnlcbiAgLy8gdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNC4gTGV0IHNpemVBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWNjZXB0cyBhIGNodW5rIG9iamVjdFxuICAvLyBhbmQgcmV0dXJucyBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiwgbm9uLWluZmluaXRlIG51bWJlciwgY2hvc2VuIGJ5IHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIExldCBzdHJlYW0gYmUgYSBuZXcgUmVhZGFibGVTdHJlYW0uXG4gIC8vIDE2LiBTZXQgdXAgc3RyZWFtIHdpdGggcHVsbEFsZ29yaXRobSBzZXQgdG8gcHVsbEFsZ29yaXRobSxcbiAgLy8gY2FuY2VsQWxnb3JpdGhtIHNldCB0byBjYW5jZWxBbGdvcml0aG0sIGhpZ2hXYXRlck1hcmsgc2V0IHRvXG4gIC8vIGhpZ2hXYXRlck1hcmssIGFuZCBzaXplQWxnb3JpdGhtIHNldCB0byBzaXplQWxnb3JpdGhtLlxuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGNvbnN0IHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoY29udHJvbGxlcikge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIgPSBjb250cm9sbGVyXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBhd2FpdCBwdWxsQWxnb3JpdGhtKGNvbnRyb2xsZXIpXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgY2FuY2VsQWxnb3JpdGhtKHJlYXNvbilcbiAgICAgIH1cbiAgICB9LFxuICAgIHtcbiAgICAgIGhpZ2hXYXRlck1hcms6IDAsXG4gICAgICBzaXplICgpIHtcbiAgICAgICAgcmV0dXJuIDFcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICAvLyAxNy4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBhIG5ldyBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0uXG4gIHJlc3BvbnNlLmJvZHkgPSB7IHN0cmVhbSB9XG5cbiAgLy8gICAgMi4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpc1xuICAvLyAgICBub3QgXCJuby1zdG9yZVwiLCB0aGVuIHVwZGF0ZSByZXNwb25zZSBpbiBodHRwQ2FjaGUgZm9yIHJlcXVlc3QuXG4gIC8vICAgIFRPRE9cblxuICAvLyAgICAzLiBJZiBpbmNsdWRlQ3JlZGVudGlhbHMgaXMgdHJ1ZSBhbmQgdGhlIHVzZXIgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWRcbiAgLy8gICAgdG8gYmxvY2sgY29va2llcyBmb3IgcmVxdWVzdCAoc2VlIHNlY3Rpb24gNyBvZiBbQ09PS0lFU10pLCB0aGVuIHJ1biB0aGVcbiAgLy8gICAgXCJzZXQtY29va2llLXN0cmluZ1wiIHBhcnNpbmcgYWxnb3JpdGhtIChzZWUgc2VjdGlvbiA1LjIgb2YgW0NPT0tJRVNdKSBvblxuICAvLyAgICB0aGUgdmFsdWUgb2YgZWFjaCBoZWFkZXIgd2hvc2UgbmFtZSBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgLy8gICAgYFNldC1Db29raWVgIGluIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCwgaWYgYW55LCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gIC8vICAgIFRPRE9cblxuICAvLyAxOC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgLy8gVE9ET1xuXG4gIC8vIDE5LiBSdW4gdGhlc2Ugc3RlcHMgaW4gcGFyYWxsZWw6XG5cbiAgLy8gICAgMS4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZDpcbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vbigndGVybWluYXRlZCcsIG9uQWJvcnRlZClcbiAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXN1bWUgPSBhc3luYyAoKSA9PiB7XG4gICAgLy8gMS4gV2hpbGUgdHJ1ZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAvLyAxLTMuIFNlZSBvbkRhdGEuLi5cblxuICAgICAgLy8gNC4gU2V0IGJ5dGVzIHRvIHRoZSByZXN1bHQgb2YgaGFuZGxpbmcgY29udGVudCBjb2RpbmdzIGdpdmVuXG4gICAgICAvLyBjb2RpbmdzIGFuZCBieXRlcy5cbiAgICAgIGxldCBieXRlc1xuICAgICAgbGV0IGlzRmFpbHVyZVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5uZXh0KClcblxuICAgICAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cblxuICAgICAgICBieXRlcyA9IGRvbmUgPyB1bmRlZmluZWQgOiB2YWx1ZVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkICYmICF0aW1pbmdJbmZvLmVuY29kZWRCb2R5U2l6ZSkge1xuICAgICAgICAgIC8vIHpsaWIgZG9lc24ndCBsaWtlIGVtcHR5IHN0cmVhbXMuXG4gICAgICAgICAgYnl0ZXMgPSB1bmRlZmluZWRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBieXRlcyA9IGVyclxuXG4gICAgICAgICAgLy8gZXJyIG1heSBiZSBwcm9wYWdhdGVkIGZyb20gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHJlYWRhYmxlc3RyZWFtLmNhbmNlbCxcbiAgICAgICAgICAvLyB3aGljaCBtaWdodCBub3QgYmUgYW4gZXJyb3IuIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDA5XG4gICAgICAgICAgaXNGYWlsdXJlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChieXRlcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgdGhlIGJ5dGVzIHRyYW5zbWlzc2lvbiBmb3IgcmVzcG9uc2VcdTIwMTlzIG1lc3NhZ2VcbiAgICAgICAgLy8gYm9keSBpcyBkb25lIG5vcm1hbGx5IGFuZCBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gY2xvc2VcbiAgICAgICAgLy8gc3RyZWFtLCBmaW5hbGl6ZSByZXNwb25zZSBmb3IgZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLCBhbmRcbiAgICAgICAgLy8gYWJvcnQgdGhlc2UgaW4tcGFyYWxsZWwgc3RlcHMuXG4gICAgICAgIHJlYWRhYmxlU3RyZWFtQ2xvc2UoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyKVxuXG4gICAgICAgIGZpbmFsaXplUmVzcG9uc2UoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJbmNyZWFzZSB0aW1pbmdJbmZvXHUyMDE5cyBkZWNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgdGltaW5nSW5mby5kZWNvZGVkQm9keVNpemUgKz0gYnl0ZXM/LmJ5dGVMZW5ndGggPz8gMFxuXG4gICAgICAvLyA2LiBJZiBieXRlcyBpcyBmYWlsdXJlLCB0aGVuIHRlcm1pbmF0ZSBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlci5cbiAgICAgIGlmIChpc0ZhaWx1cmUpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoYnl0ZXMpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA3LiBFbnF1ZXVlIGEgVWludDhBcnJheSB3cmFwcGluZyBhbiBBcnJheUJ1ZmZlciBjb250YWluaW5nIGJ5dGVzXG4gICAgICAvLyBpbnRvIHN0cmVhbS5cbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGJ5dGVzKSlcblxuICAgICAgLy8gOC4gSWYgc3RyZWFtIGlzIGVycm9yZWQsIHRoZW4gdGVybWluYXRlIHRoZSBvbmdvaW5nIGZldGNoLlxuICAgICAgaWYgKGlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDkuIElmIHN0cmVhbSBkb2Vzblx1MjAxOXQgbmVlZCBtb3JlIGRhdGEgYXNrIHRoZSB1c2VyIGFnZW50IHRvIHN1c3BlbmRcbiAgICAgIC8vIHRoZSBvbmdvaW5nIGZldGNoLlxuICAgICAgaWYgKCFmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZGVzaXJlZFNpemUpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gICAgMi4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgZnVuY3Rpb24gb25BYm9ydGVkIChyZWFzb24pIHtcbiAgICAvLyAyLiBJZiBmZXRjaFBhcmFtcyBpcyBhYm9ydGVkLCB0aGVuOlxuICAgIGlmIChpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZy5cbiAgICAgIHJlc3BvbnNlLmFib3J0ZWQgPSB0cnVlXG5cbiAgICAgIC8vIDIuIElmIHN0cmVhbSBpcyByZWFkYWJsZSwgdGhlbiBlcnJvciBzdHJlYW0gd2l0aCB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyAgICBkZXNlcmlhbGl6ZSBhIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5c1xuICAgICAgLy8gICAgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kIGFuXG4gICAgICAvLyAgICBpbXBsZW1lbnRhdGlvbi1kZWZpbmVkIHJlYWxtLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IoXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5zZXJpYWxpemVkQWJvcnRSZWFzb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHN0cmVhbSBpcyByZWFkYWJsZSwgZXJyb3Igc3RyZWFtIHdpdGggYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihuZXcgVHlwZUVycm9yKCd0ZXJtaW5hdGVkJywge1xuICAgICAgICAgIGNhdXNlOiBpc0Vycm9yTGlrZShyZWFzb24pID8gcmVhc29uIDogdW5kZWZpbmVkXG4gICAgICAgIH0pKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAvLyA1LiBPdGhlcndpc2UsIHRoZSB1c2VyIGFnZW50IHNob3VsZCBjbG9zZSBjb25uZWN0aW9uIHVubGVzcyBpdCB3b3VsZCBiZSBiYWQgZm9yIHBlcmZvcm1hbmNlIHRvIGRvIHNvLlxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcbiAgfVxuXG4gIC8vIDIwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxuXG4gIGFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoICh7IGJvZHkgfSkge1xuICAgIGNvbnN0IHVybCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgLyoqIEB0eXBlIHtpbXBvcnQoJy4uLy4uJykuQWdlbnR9ICovXG4gICAgY29uc3QgYWdlbnQgPSBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXJcblxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiBhZ2VudC5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgcGF0aDogdXJsLnBhdGhuYW1lICsgdXJsLnNlYXJjaCxcbiAgICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgICBib2R5OiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmRpc3BhdGNoZXIuaXNNb2NrQWN0aXZlID8gcmVxdWVzdC5ib2R5ICYmIChyZXF1ZXN0LmJvZHkuc291cmNlIHx8IHJlcXVlc3QuYm9keS5zdHJlYW0pIDogYm9keSxcbiAgICAgICAgaGVhZGVyczogcmVxdWVzdC5oZWFkZXJzTGlzdC5lbnRyaWVzLFxuICAgICAgICBtYXhSZWRpcmVjdGlvbnM6IDAsXG4gICAgICAgIHVwZ3JhZGU6IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcgPyAnd2Vic29ja2V0JyA6IHVuZGVmaW5lZFxuICAgICAgfSxcbiAgICAgIHtcbiAgICAgICAgYm9keTogbnVsbCxcbiAgICAgICAgYWJvcnQ6IG51bGwsXG5cbiAgICAgICAgb25Db25uZWN0IChhYm9ydCkge1xuICAgICAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgY29ubmVjdGlvbiBoZXJlP1xuICAgICAgICAgIGNvbnN0IHsgY29ubmVjdGlvbiB9ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlclxuXG4gICAgICAgICAgaWYgKGNvbm5lY3Rpb24uZGVzdHJveWVkKSB7XG4gICAgICAgICAgICBhYm9ydChuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBhYm9ydClcbiAgICAgICAgICAgIHRoaXMuYWJvcnQgPSBjb25uZWN0aW9uLmFib3J0ID0gYWJvcnRcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG5cbiAgICAgICAgb25IZWFkZXJzIChzdGF0dXMsIGhlYWRlcnNMaXN0LCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzIDwgMjAwKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBsZXQgY29kaW5ncyA9IFtdXG4gICAgICAgICAgbGV0IGxvY2F0aW9uID0gJydcblxuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG5cbiAgICAgICAgICAvLyBGb3IgSDIsIHRoZSBoZWFkZXJzIGFyZSBhIHBsYWluIEpTIG9iamVjdFxuICAgICAgICAgIC8vIFdlIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbSBhbmQgaXRlcmF0ZSBhY2NvcmRpbmdseVxuICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNMaXN0KSkge1xuICAgICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXJzTGlzdFtuICsgMF0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNMaXN0W24gKyAxXS50b1N0cmluZygnbGF0aW4xJylcbiAgICAgICAgICAgICAgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1lbmNvZGluZycpIHtcbiAgICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTMuMS4yLjFcbiAgICAgICAgICAgICAgICAvLyBcIkFsbCBjb250ZW50LWNvZGluZyB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuLi5cIlxuICAgICAgICAgICAgICAgIGNvZGluZ3MgPSB2YWwudG9Mb3dlckNhc2UoKS5zcGxpdCgnLCcpLm1hcCgoeCkgPT4geC50cmltKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnNMaXN0KVxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtrZXldXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKS5yZXZlcnNlKClcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgICAgICAgICAgIGxvY2F0aW9uID0gdmFsXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keSA9IG5ldyBSZWFkYWJsZSh7IHJlYWQ6IHJlc3VtZSB9KVxuXG4gICAgICAgICAgY29uc3QgZGVjb2RlcnMgPSBbXVxuXG4gICAgICAgICAgY29uc3Qgd2lsbEZvbGxvdyA9IHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnICYmXG4gICAgICAgICAgICBsb2NhdGlvbiAmJlxuICAgICAgICAgICAgcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cylcblxuICAgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvSGVhZGVycy9Db250ZW50LUVuY29kaW5nXG4gICAgICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdDT05ORUNUJyAmJiAhbnVsbEJvZHlTdGF0dXMuaW5jbHVkZXMoc3RhdHVzKSAmJiAhd2lsbEZvbGxvdykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBjb2Rpbmcgb2YgY29kaW5ncykge1xuICAgICAgICAgICAgICAvLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMi5odG1sI3NlY3Rpb24tNy4yXG4gICAgICAgICAgICAgIGlmIChjb2RpbmcgPT09ICd4LWd6aXAnIHx8IGNvZGluZyA9PT0gJ2d6aXAnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUd1bnppcCh7XG4gICAgICAgICAgICAgICAgICAvLyBCZSBsZXNzIHN0cmljdCB3aGVuIGRlY29kaW5nIGNvbXByZXNzZWQgcmVzcG9uc2VzLCBzaW5jZSBzb21ldGltZXNcbiAgICAgICAgICAgICAgICAgIC8vIHNlcnZlcnMgc2VuZCBzbGlnaHRseSBpbnZhbGlkIHJlc3BvbnNlcyB0aGF0IGFyZSBzdGlsbCBhY2NlcHRlZFxuICAgICAgICAgICAgICAgICAgLy8gYnkgY29tbW9uIGJyb3dzZXJzLlxuICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHVzaW5nIFpfU1lOQ19GTFVTSCBpcyB3aGF0IGNVUkwgZG9lcy5cbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0gsXG4gICAgICAgICAgICAgICAgICBmaW5pc2hGbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNIXG4gICAgICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29kaW5nID09PSAnZGVmbGF0ZScpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlSW5mbGF0ZSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2JyJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKCkpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXNvbHZlKHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQsXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgYm9keTogZGVjb2RlcnMubGVuZ3RoXG4gICAgICAgICAgICAgID8gcGlwZWxpbmUodGhpcy5ib2R5LCAuLi5kZWNvZGVycywgKCkgPT4geyB9KVxuICAgICAgICAgICAgICA6IHRoaXMuYm9keS5vbignZXJyb3InLCAoKSA9PiB7fSlcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfSxcblxuICAgICAgICBvbkRhdGEgKGNodW5rKSB7XG4gICAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZHVtcCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gSWYgb25lIG9yIG1vcmUgYnl0ZXMgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIGZyb20gcmVzcG9uc2VcdTIwMTlzXG4gICAgICAgICAgLy8gbWVzc2FnZSBib2R5LCB0aGVuOlxuXG4gICAgICAgICAgLy8gIDEuIExldCBieXRlcyBiZSB0aGUgdHJhbnNtaXR0ZWQgYnl0ZXMuXG4gICAgICAgICAgY29uc3QgYnl0ZXMgPSBjaHVua1xuXG4gICAgICAgICAgLy8gIDIuIExldCBjb2RpbmdzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgICAgICAvLyAgZ2l2ZW4gYENvbnRlbnQtRW5jb2RpbmdgIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAgICAgLy8gIFNlZSBwdWxsQWxnb3JpdGhtLlxuXG4gICAgICAgICAgLy8gIDMuIEluY3JlYXNlIHRpbWluZ0luZm9cdTIwMTlzIGVuY29kZWQgYm9keSBzaXplIGJ5IGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICAgICAgdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUgKz0gYnl0ZXMuYnl0ZUxlbmd0aFxuXG4gICAgICAgICAgLy8gIDQuIFNlZSBwdWxsQWxnb3JpdGhtLi4uXG5cbiAgICAgICAgICByZXR1cm4gdGhpcy5ib2R5LnB1c2goYnl0ZXMpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25Db21wbGV0ZSAoKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub2ZmKCd0ZXJtaW5hdGVkJywgdGhpcy5hYm9ydClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmVuZGVkID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5ib2R5LnB1c2gobnVsbClcbiAgICAgICAgfSxcblxuICAgICAgICBvbkVycm9yIChlcnJvcikge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5ib2R5Py5kZXN0cm95KGVycm9yKVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyb3IpXG5cbiAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25VcGdyYWRlIChzdGF0dXMsIGhlYWRlcnNMaXN0LCBzb2NrZXQpIHtcbiAgICAgICAgICBpZiAoc3RhdHVzICE9PSAxMDEpIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG5cbiAgICAgICAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnNMaXN0Lmxlbmd0aDsgbiArPSAyKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBoZWFkZXJzTGlzdFtuICsgMF0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG5cbiAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBTVEFUVVNfQ09ERVNbc3RhdHVzXSxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0OiBoZWFkZXJzW2tIZWFkZXJzTGlzdF0sXG4gICAgICAgICAgICBzb2NrZXRcbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGZldGNoLFxuICBGZXRjaCxcbiAgZmV0Y2hpbmcsXG4gIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrU3RhdGU6IFN5bWJvbCgnRmlsZVJlYWRlciBzdGF0ZScpLFxuICBrUmVzdWx0OiBTeW1ib2woJ0ZpbGVSZWFkZXIgcmVzdWx0JyksXG4gIGtFcnJvcjogU3ltYm9sKCdGaWxlUmVhZGVyIGVycm9yJyksXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkOiBTeW1ib2woJ0ZpbGVSZWFkZXIgbGFzdCBwcm9ncmVzcyBldmVudCBmaXJlZCB0aW1lc3RhbXAnKSxcbiAga0V2ZW50czogU3ltYm9sKCdGaWxlUmVhZGVyIGV2ZW50cycpLFxuICBrQWJvcnRlZDogU3ltYm9sKCdGaWxlUmVhZGVyIGFib3J0ZWQnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcblxuY29uc3Qga1N0YXRlID0gU3ltYm9sKCdQcm9ncmVzc0V2ZW50IHN0YXRlJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8veGhyLnNwZWMud2hhdHdnLm9yZy8jcHJvZ3Jlc3NldmVudFxuICovXG5jbGFzcyBQcm9ncmVzc0V2ZW50IGV4dGVuZHMgRXZlbnQge1xuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IGV2ZW50SW5pdERpY3QubGVuZ3RoQ29tcHV0YWJsZSxcbiAgICAgIGxvYWRlZDogZXZlbnRJbml0RGljdC5sb2FkZWQsXG4gICAgICB0b3RhbDogZXZlbnRJbml0RGljdC50b3RhbFxuICAgIH1cbiAgfVxuXG4gIGdldCBsZW5ndGhDb21wdXRhYmxlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sZW5ndGhDb21wdXRhYmxlXG4gIH1cblxuICBnZXQgbG9hZGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sb2FkZWRcbiAgfVxuXG4gIGdldCB0b3RhbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udG90YWxcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5Qcm9ncmVzc0V2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ2xlbmd0aENvbXB1dGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsb2FkZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAndG90YWwnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWVuY29kaW5nLWdldFxuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSBsYWJlbFxuICovXG5mdW5jdGlvbiBnZXRFbmNvZGluZyAobGFiZWwpIHtcbiAgaWYgKCFsYWJlbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGxhYmVsLlxuICAvLyAyLiBJZiBsYWJlbCBpcyBhbiBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBhbnkgb2YgdGhlXG4gIC8vICAgIGxhYmVscyBsaXN0ZWQgaW4gdGhlIHRhYmxlIGJlbG93LCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgY29ycmVzcG9uZGluZyBlbmNvZGluZzsgb3RoZXJ3aXNlIHJldHVybiBmYWlsdXJlLlxuICBzd2l0Y2ggKGxhYmVsLnRyaW0oKS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgY2FzZSAndW5pY29kZS0xLTEtdXRmLTgnOlxuICAgIGNhc2UgJ3VuaWNvZGUxMXV0ZjgnOlxuICAgIGNhc2UgJ3VuaWNvZGUyMHV0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICd1dGY4JzpcbiAgICBjYXNlICd4LXVuaWNvZGUyMHV0ZjgnOlxuICAgICAgcmV0dXJuICdVVEYtOCdcbiAgICBjYXNlICc4NjYnOlxuICAgIGNhc2UgJ2NwODY2JzpcbiAgICBjYXNlICdjc2libTg2Nic6XG4gICAgY2FzZSAnaWJtODY2JzpcbiAgICAgIHJldHVybiAnSUJNODY2J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4yJzpcbiAgICBjYXNlICdpc28tODg1OS0yJzpcbiAgICBjYXNlICdpc28taXItMTAxJzpcbiAgICBjYXNlICdpc284ODU5LTInOlxuICAgIGNhc2UgJ2lzbzg4NTkyJzpcbiAgICBjYXNlICdpc29fODg1OS0yJzpcbiAgICBjYXNlICdpc29fODg1OS0yOjE5ODcnOlxuICAgIGNhc2UgJ2wyJzpcbiAgICBjYXNlICdsYXRpbjInOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0yJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW4zJzpcbiAgICBjYXNlICdpc28tODg1OS0zJzpcbiAgICBjYXNlICdpc28taXItMTA5JzpcbiAgICBjYXNlICdpc284ODU5LTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkzJzpcbiAgICBjYXNlICdpc29fODg1OS0zJzpcbiAgICBjYXNlICdpc29fODg1OS0zOjE5ODgnOlxuICAgIGNhc2UgJ2wzJzpcbiAgICBjYXNlICdsYXRpbjMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0zJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW40JzpcbiAgICBjYXNlICdpc28tODg1OS00JzpcbiAgICBjYXNlICdpc28taXItMTEwJzpcbiAgICBjYXNlICdpc284ODU5LTQnOlxuICAgIGNhc2UgJ2lzbzg4NTk0JzpcbiAgICBjYXNlICdpc29fODg1OS00JzpcbiAgICBjYXNlICdpc29fODg1OS00OjE5ODgnOlxuICAgIGNhc2UgJ2w0JzpcbiAgICBjYXNlICdsYXRpbjQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS00J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5jeXJpbGxpYyc6XG4gICAgY2FzZSAnY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTUnOlxuICAgIGNhc2UgJ2lzby1pci0xNDQnOlxuICAgIGNhc2UgJ2lzbzg4NTktNSc6XG4gICAgY2FzZSAnaXNvODg1OTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTU6MTk4OCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTUnXG4gICAgY2FzZSAnYXJhYmljJzpcbiAgICBjYXNlICdhc21vLTcwOCc6XG4gICAgY2FzZSAnY3Npc284ODU5NmUnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZpJzpcbiAgICBjYXNlICdjc2lzb2xhdGluYXJhYmljJzpcbiAgICBjYXNlICdlY21hLTExNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNic6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1lJzpcbiAgICBjYXNlICdpc28tODg1OS02LWknOlxuICAgIGNhc2UgJ2lzby1pci0xMjcnOlxuICAgIGNhc2UgJ2lzbzg4NTktNic6XG4gICAgY2FzZSAnaXNvODg1OTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTYnOlxuICAgIGNhc2UgJ2lzb184ODU5LTY6MTk4Nyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTYnXG4gICAgY2FzZSAnY3Npc29sYXRpbmdyZWVrJzpcbiAgICBjYXNlICdlY21hLTExOCc6XG4gICAgY2FzZSAnZWxvdF85MjgnOlxuICAgIGNhc2UgJ2dyZWVrJzpcbiAgICBjYXNlICdncmVlazgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTcnOlxuICAgIGNhc2UgJ2lzby1pci0xMjYnOlxuICAgIGNhc2UgJ2lzbzg4NTktNyc6XG4gICAgY2FzZSAnaXNvODg1OTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTcnOlxuICAgIGNhc2UgJ2lzb184ODU5LTc6MTk4Nyc6XG4gICAgY2FzZSAnc3VuX2V1X2dyZWVrJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNydcbiAgICBjYXNlICdjc2lzbzg4NTk4ZSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmhlYnJldyc6XG4gICAgY2FzZSAnaGVicmV3JzpcbiAgICBjYXNlICdpc28tODg1OS04JzpcbiAgICBjYXNlICdpc28tODg1OS04LWUnOlxuICAgIGNhc2UgJ2lzby1pci0xMzgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOCc6XG4gICAgY2FzZSAnaXNvODg1OTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTgnOlxuICAgIGNhc2UgJ2lzb184ODU5LTg6MTk4OCc6XG4gICAgY2FzZSAndmlzdWFsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOCdcbiAgICBjYXNlICdjc2lzbzg4NTk4aSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1pJzpcbiAgICBjYXNlICdsb2dpY2FsJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktOC1JJ1xuICAgIGNhc2UgJ2NzaXNvbGF0aW42JzpcbiAgICBjYXNlICdpc28tODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvLWlyLTE1Nyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMCc6XG4gICAgY2FzZSAnaXNvODg1OTEwJzpcbiAgICBjYXNlICdsNic6XG4gICAgY2FzZSAnbGF0aW42JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTAnXG4gICAgY2FzZSAnaXNvLTg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTMnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEzJ1xuICAgIGNhc2UgJ2lzby04ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5LTE0JzpcbiAgICBjYXNlICdpc284ODU5MTQnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNCdcbiAgICBjYXNlICdjc2lzb2xhdGluOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTUnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMTUnOlxuICAgIGNhc2UgJ2w5JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTUnXG4gICAgY2FzZSAnaXNvLTg4NTktMTYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNidcbiAgICBjYXNlICdjc2tvaThyJzpcbiAgICBjYXNlICdrb2knOlxuICAgIGNhc2UgJ2tvaTgnOlxuICAgIGNhc2UgJ2tvaTgtcic6XG4gICAgY2FzZSAna29pOF9yJzpcbiAgICAgIHJldHVybiAnS09JOC1SJ1xuICAgIGNhc2UgJ2tvaTgtcnUnOlxuICAgIGNhc2UgJ2tvaTgtdSc6XG4gICAgICByZXR1cm4gJ0tPSTgtVSdcbiAgICBjYXNlICdjc21hY2ludG9zaCc6XG4gICAgY2FzZSAnbWFjJzpcbiAgICBjYXNlICdtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ3gtbWFjLXJvbWFuJzpcbiAgICAgIHJldHVybiAnbWFjaW50b3NoJ1xuICAgIGNhc2UgJ2lzby04ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5LTExJzpcbiAgICBjYXNlICdpc284ODU5MTEnOlxuICAgIGNhc2UgJ3Rpcy02MjAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtODc0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy04NzQnXG4gICAgY2FzZSAnY3AxMjUwJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTAnOlxuICAgIGNhc2UgJ3gtY3AxMjUwJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUwJ1xuICAgIGNhc2UgJ2NwMTI1MSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUxJzpcbiAgICBjYXNlICd4LWNwMTI1MSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MSdcbiAgICBjYXNlICdhbnNpX3gzLjQtMTk2OCc6XG4gICAgY2FzZSAnYXNjaWknOlxuICAgIGNhc2UgJ2NwMTI1Mic6XG4gICAgY2FzZSAnY3A4MTknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW4xJzpcbiAgICBjYXNlICdpYm04MTknOlxuICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgIGNhc2UgJ2lzby1pci0xMDAnOlxuICAgIGNhc2UgJ2lzbzg4NTktMSc6XG4gICAgY2FzZSAnaXNvODg1OTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgY2FzZSAnbDEnOlxuICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgY2FzZSAndXMtYXNjaWknOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Mic6XG4gICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTInXG4gICAgY2FzZSAnY3AxMjUzJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTMnOlxuICAgIGNhc2UgJ3gtY3AxMjUzJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUzJ1xuICAgIGNhc2UgJ2NwMTI1NCc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTknOlxuICAgIGNhc2UgJ2lzby1pci0xNDgnOlxuICAgIGNhc2UgJ2lzbzg4NTktOSc6XG4gICAgY2FzZSAnaXNvODg1OTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTknOlxuICAgIGNhc2UgJ2lzb184ODU5LTk6MTk4OSc6XG4gICAgY2FzZSAnbDUnOlxuICAgIGNhc2UgJ2xhdGluNSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU0JzpcbiAgICBjYXNlICd4LWNwMTI1NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NCdcbiAgICBjYXNlICdjcDEyNTUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NSc6XG4gICAgY2FzZSAneC1jcDEyNTUnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTUnXG4gICAgY2FzZSAnY3AxMjU2JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTYnOlxuICAgIGNhc2UgJ3gtY3AxMjU2JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU2J1xuICAgIGNhc2UgJ2NwMTI1Nyc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU3JzpcbiAgICBjYXNlICd4LWNwMTI1Nyc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NydcbiAgICBjYXNlICdjcDEyNTgnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1OCc6XG4gICAgY2FzZSAneC1jcDEyNTgnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTgnXG4gICAgY2FzZSAneC1tYWMtY3lyaWxsaWMnOlxuICAgIGNhc2UgJ3gtbWFjLXVrcmFpbmlhbic6XG4gICAgICByZXR1cm4gJ3gtbWFjLWN5cmlsbGljJ1xuICAgIGNhc2UgJ2NoaW5lc2UnOlxuICAgIGNhc2UgJ2NzZ2IyMzEyJzpcbiAgICBjYXNlICdjc2lzbzU4Z2IyMzEyODAnOlxuICAgIGNhc2UgJ2diMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMic6XG4gICAgY2FzZSAnZ2JfMjMxMi04MCc6XG4gICAgY2FzZSAnZ2JrJzpcbiAgICBjYXNlICdpc28taXItNTgnOlxuICAgIGNhc2UgJ3gtZ2JrJzpcbiAgICAgIHJldHVybiAnR0JLJ1xuICAgIGNhc2UgJ2diMTgwMzAnOlxuICAgICAgcmV0dXJuICdnYjE4MDMwJ1xuICAgIGNhc2UgJ2JpZzUnOlxuICAgIGNhc2UgJ2JpZzUtaGtzY3MnOlxuICAgIGNhc2UgJ2NuLWJpZzUnOlxuICAgIGNhc2UgJ2NzYmlnNSc6XG4gICAgY2FzZSAneC14LWJpZzUnOlxuICAgICAgcmV0dXJuICdCaWc1J1xuICAgIGNhc2UgJ2NzZXVjcGtkZm10amFwYW5lc2UnOlxuICAgIGNhc2UgJ2V1Yy1qcCc6XG4gICAgY2FzZSAneC1ldWMtanAnOlxuICAgICAgcmV0dXJuICdFVUMtSlAnXG4gICAgY2FzZSAnY3Npc28yMDIyanAnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWpwJzpcbiAgICAgIHJldHVybiAnSVNPLTIwMjItSlAnXG4gICAgY2FzZSAnY3NzaGlmdGppcyc6XG4gICAgY2FzZSAnbXM5MzInOlxuICAgIGNhc2UgJ21zX2thbmppJzpcbiAgICBjYXNlICdzaGlmdC1qaXMnOlxuICAgIGNhc2UgJ3NoaWZ0X2ppcyc6XG4gICAgY2FzZSAnc2ppcyc6XG4gICAgY2FzZSAnd2luZG93cy0zMWonOlxuICAgIGNhc2UgJ3gtc2ppcyc6XG4gICAgICByZXR1cm4gJ1NoaWZ0X0pJUydcbiAgICBjYXNlICdjc2V1Y2tyJzpcbiAgICBjYXNlICdjc2tzYzU2MDExOTg3JzpcbiAgICBjYXNlICdldWMta3InOlxuICAgIGNhc2UgJ2lzby1pci0xNDknOlxuICAgIGNhc2UgJ2tvcmVhbic6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODcnOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg5JzpcbiAgICBjYXNlICdrc2M1NjAxJzpcbiAgICBjYXNlICdrc2NfNTYwMSc6XG4gICAgY2FzZSAnd2luZG93cy05NDknOlxuICAgICAgcmV0dXJuICdFVUMtS1InXG4gICAgY2FzZSAnY3Npc28yMDIya3InOlxuICAgIGNhc2UgJ2h6LWdiLTIzMTInOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbi1leHQnOlxuICAgIGNhc2UgJ2lzby0yMDIyLWtyJzpcbiAgICBjYXNlICdyZXBsYWNlbWVudCc6XG4gICAgICByZXR1cm4gJ3JlcGxhY2VtZW50J1xuICAgIGNhc2UgJ3VuaWNvZGVmZmZlJzpcbiAgICBjYXNlICd1dGYtMTZiZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICAgIGNhc2UgJ2NzdW5pY29kZSc6XG4gICAgY2FzZSAnaXNvLTEwNjQ2LXVjcy0yJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndW5pY29kZSc6XG4gICAgY2FzZSAndW5pY29kZWZlZmYnOlxuICAgIGNhc2UgJ3V0Zi0xNic6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgICBjYXNlICd4LXVzZXItZGVmaW5lZCc6XG4gICAgICByZXR1cm4gJ3gtdXNlci1kZWZpbmVkJ1xuICAgIGRlZmF1bHQ6IHJldHVybiAnZmFpbHVyZSdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0RW5jb2Rpbmdcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0Fib3J0ZWQsXG4gIGtMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgUHJvZ3Jlc3NFdmVudCB9ID0gcmVxdWlyZSgnLi9wcm9ncmVzc2V2ZW50JylcbmNvbnN0IHsgZ2V0RW5jb2RpbmcgfSA9IHJlcXVpcmUoJy4vZW5jb2RpbmcnKVxuY29uc3QgeyBET01FeGNlcHRpb24gfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2NvbnN0YW50cycpXG5jb25zdCB7IHNlcmlhbGl6ZUFNaW1lVHlwZSwgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgU3RyaW5nRGVjb2RlciB9ID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKVxuY29uc3QgeyBidG9hIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRPcGVyYXRpb25cbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSBmclxuICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiByZWFkT3BlcmF0aW9uIChmciwgYmxvYiwgdHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBcImxvYWRpbmdcIiwgdGhyb3cgYW4gSW52YWxpZFN0YXRlRXJyb3JcbiAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICBpZiAoZnJba1N0YXRlXSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBzdGF0ZScsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gIH1cblxuICAvLyAyLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwibG9hZGluZ1wiLlxuICBmcltrU3RhdGVdID0gJ2xvYWRpbmcnXG5cbiAgLy8gMy4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gbnVsbC5cbiAgZnJba1Jlc3VsdF0gPSBudWxsXG5cbiAgLy8gNC4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBudWxsLlxuICBmcltrRXJyb3JdID0gbnVsbFxuXG4gIC8vIDUuIExldCBzdHJlYW0gYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGdldCBzdHJlYW0gb24gYmxvYi5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbX0gKi9cbiAgY29uc3Qgc3RyZWFtID0gYmxvYi5zdHJlYW0oKVxuXG4gIC8vIDYuIExldCByZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGEgcmVhZGVyIGZyb20gc3RyZWFtLlxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAvLyA3LiBMZXQgYnl0ZXMgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5W119ICovXG4gIGNvbnN0IGJ5dGVzID0gW11cblxuICAvLyA4LiBMZXQgY2h1bmtQcm9taXNlIGJlIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhIGNodW5rIGZyb21cbiAgLy8gICAgc3RyZWFtIHdpdGggcmVhZGVyLlxuICBsZXQgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuXG4gIC8vIDkuIExldCBpc0ZpcnN0Q2h1bmsgYmUgdHJ1ZS5cbiAgbGV0IGlzRmlyc3RDaHVuayA9IHRydWVcblxuICAvLyAxMC4gSW4gcGFyYWxsZWwsIHdoaWxlIHRydWU6XG4gIC8vIE5vdGU6IFwiSW4gcGFyYWxsZWxcIiBqdXN0IG1lYW5zIG5vbi1ibG9ja2luZ1xuICAvLyBOb3RlIDI6IHJlYWRPcGVyYXRpb24gaXRzZWxmIGNhbm5vdCBiZSBhc3luYyBhcyBkb3VibGVcbiAgLy8gcmVhZGluZyB0aGUgYm9keSB3b3VsZCB0aGVuIHJlamVjdCB0aGUgcHJvbWlzZSwgaW5zdGVhZFxuICAvLyBvZiB0aHJvd2luZyBhbiBlcnJvci5cbiAgOyhhc3luYyAoKSA9PiB7XG4gICAgd2hpbGUgKCFmcltrQWJvcnRlZF0pIHtcbiAgICAgIC8vIDEuIFdhaXQgZm9yIGNodW5rUHJvbWlzZSB0byBiZSBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBjaHVua1Byb21pc2VcblxuICAgICAgICAvLyAyLiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkLCBhbmQgaXNGaXJzdENodW5rIGlzXG4gICAgICAgIC8vICAgIHRydWUsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkXG4gICAgICAgIC8vICAgIGxvYWRzdGFydCBhdCBmci5cbiAgICAgICAgaWYgKGlzRmlyc3RDaHVuayAmJiAhZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2Fkc3RhcnQnLCBmcilcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gU2V0IGlzRmlyc3RDaHVuayB0byBmYWxzZS5cbiAgICAgICAgaXNGaXJzdENodW5rID0gZmFsc2VcblxuICAgICAgICAvLyA0LiBJZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW4gb2JqZWN0IHdob3NlXG4gICAgICAgIC8vICAgIGRvbmUgcHJvcGVydHkgaXMgZmFsc2UgYW5kIHdob3NlIHZhbHVlIHByb3BlcnR5IGlzXG4gICAgICAgIC8vICAgIGEgVWludDhBcnJheSBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcbiAgICAgICAgaWYgKCFkb25lICYmIHR5cGVzLmlzVWludDhBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICAvLyAxLiBMZXQgYnMgYmUgdGhlIGJ5dGUgc2VxdWVuY2UgcmVwcmVzZW50ZWQgYnkgdGhlXG4gICAgICAgICAgLy8gICAgVWludDhBcnJheSBvYmplY3QuXG5cbiAgICAgICAgICAvLyAyLiBBcHBlbmQgYnMgdG8gYnl0ZXMuXG4gICAgICAgICAgYnl0ZXMucHVzaCh2YWx1ZSlcblxuICAgICAgICAgIC8vIDMuIElmIHJvdWdobHkgNTBtcyBoYXZlIHBhc3NlZCBzaW5jZSB0aGVzZSBzdGVwc1xuICAgICAgICAgIC8vICAgIHdlcmUgbGFzdCBpbnZva2VkLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhXG4gICAgICAgICAgLy8gICAgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGF0IGZyLlxuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIChcbiAgICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgICAgICAgRGF0ZS5ub3coKSAtIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA+PSA1MFxuICAgICAgICAgICAgKSAmJlxuICAgICAgICAgICAgIWZyW2tBYm9ydGVkXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID0gRGF0ZS5ub3coKVxuICAgICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ3Byb2dyZXNzJywgZnIpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuIFNldCBjaHVua1Byb21pc2UgdG8gdGhlIHJlc3VsdCBvZiByZWFkaW5nIGFcbiAgICAgICAgICAvLyAgICBjaHVuayBmcm9tIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgICAgICAgICBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG4gICAgICAgIH0gZWxzZSBpZiAoZG9uZSkge1xuICAgICAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuXG4gICAgICAgICAgLy8gICAgb2JqZWN0IHdob3NlIGRvbmUgcHJvcGVydHkgaXMgdHJ1ZSwgcXVldWUgYSB0YXNrXG4gICAgICAgICAgLy8gICAgdG8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAgIC8vIDIuIExldCByZXN1bHQgYmUgdGhlIHJlc3VsdCBvZiBwYWNrYWdlIGRhdGEgZ2l2ZW5cbiAgICAgICAgICAgIC8vICAgIGJ5dGVzLCB0eXBlLCBibG9iXHUyMDE5cyB0eXBlLCBhbmQgZW5jb2RpbmdOYW1lLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gcGFja2FnZURhdGEoYnl0ZXMsIHR5cGUsIGJsb2IudHlwZSwgZW5jb2RpbmdOYW1lKVxuXG4gICAgICAgICAgICAgIC8vIDQuIEVsc2U6XG5cbiAgICAgICAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyByZXN1bHQgdG8gcmVzdWx0LlxuICAgICAgICAgICAgICBmcltrUmVzdWx0XSA9IHJlc3VsdFxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgbG9hZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZCcsIGZyKVxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgLy8gMy4gSWYgcGFja2FnZSBkYXRhIHRocmV3IGFuIGV4Y2VwdGlvbiBlcnJvcjpcblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIDUuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNi4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgcmVqZWN0ZWQgd2l0aCBhblxuICAgICAgICAvLyAgICBlcnJvciBlcnJvciwgcXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nXG4gICAgICAgIC8vICAgIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJkb25lXCIuXG4gICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgLy8gMi4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICBmcltrRXJyb3JdID0gZXJyb3JcblxuICAgICAgICAgIC8vIDMuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuXG4gICAgICAgICAgLy8gNC4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgZnIuXG4gICAgICAgICAgaWYgKGZyW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9KSgpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZmlyZS1hLXByb2dyZXNzLWV2ZW50XG4gKiBAc2VlIGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ldmVudC1maXJlXG4gKiBAcGFyYW0ge3N0cmluZ30gZSBUaGUgbmFtZSBvZiB0aGUgZXZlbnRcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyfSByZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmlyZUFQcm9ncmVzc0V2ZW50IChlLCByZWFkZXIpIHtcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgZG9lcyBub3QgYnViYmxlLiBlLmJ1YmJsZXMgbXVzdCBiZSBmYWxzZVxuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBpcyBOT1QgY2FuY2VsYWJsZS4gZS5jYW5jZWxhYmxlIG11c3QgYmUgZmFsc2VcbiAgY29uc3QgZXZlbnQgPSBuZXcgUHJvZ3Jlc3NFdmVudChlLCB7XG4gICAgYnViYmxlczogZmFsc2UsXG4gICAgY2FuY2VsYWJsZTogZmFsc2VcbiAgfSlcblxuICByZWFkZXIuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNibG9iLXBhY2thZ2UtZGF0YVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBtaW1lVHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcGFja2FnZURhdGEgKGJ5dGVzLCB0eXBlLCBtaW1lVHlwZSwgZW5jb2RpbmdOYW1lKSB7XG4gIC8vIDEuIEEgQmxvYiBoYXMgYW4gYXNzb2NpYXRlZCBwYWNrYWdlIGRhdGEgYWxnb3JpdGhtLCBnaXZlblxuICAvLyAgICBieXRlcywgYSB0eXBlLCBhIG9wdGlvbmFsIG1pbWVUeXBlLCBhbmQgYSBvcHRpb25hbFxuICAvLyAgICBlbmNvZGluZ05hbWUsIHdoaWNoIHN3aXRjaGVzIG9uIHR5cGUgYW5kIHJ1bnMgdGhlXG4gIC8vICAgIGFzc29jaWF0ZWQgc3RlcHM6XG5cbiAgc3dpdGNoICh0eXBlKSB7XG4gICAgY2FzZSAnRGF0YVVSTCc6IHtcbiAgICAgIC8vIDEuIFJldHVybiBieXRlcyBhcyBhIERhdGFVUkwgW1JGQzIzOTddIHN1YmplY3QgdG9cbiAgICAgIC8vICAgIHRoZSBjb25zaWRlcmF0aW9ucyBiZWxvdzpcbiAgICAgIC8vICAqIFVzZSBtaW1lVHlwZSBhcyBwYXJ0IG9mIHRoZSBEYXRhIFVSTCBpZiBpdCBpc1xuICAgICAgLy8gICAgYXZhaWxhYmxlIGluIGtlZXBpbmcgd2l0aCB0aGUgRGF0YSBVUkxcbiAgICAgIC8vICAgIHNwZWNpZmljYXRpb24gW1JGQzIzOTddLlxuICAgICAgLy8gICogSWYgbWltZVR5cGUgaXMgbm90IGF2YWlsYWJsZSByZXR1cm4gYSBEYXRhIFVSTFxuICAgICAgLy8gICAgd2l0aG91dCBhIG1lZGlhLXR5cGUuIFtSRkMyMzk3XS5cblxuICAgICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmMyMzk3I3NlY3Rpb24tM1xuICAgICAgLy8gZGF0YXVybCAgICA6PSBcImRhdGE6XCIgWyBtZWRpYXR5cGUgXSBbIFwiO2Jhc2U2NFwiIF0gXCIsXCIgZGF0YVxuICAgICAgLy8gbWVkaWF0eXBlICA6PSBbIHR5cGUgXCIvXCIgc3VidHlwZSBdICooIFwiO1wiIHBhcmFtZXRlciApXG4gICAgICAvLyBkYXRhICAgICAgIDo9ICp1cmxjaGFyXG4gICAgICAvLyBwYXJhbWV0ZXIgIDo9IGF0dHJpYnV0ZSBcIj1cIiB2YWx1ZVxuICAgICAgbGV0IGRhdGFVUkwgPSAnZGF0YTonXG5cbiAgICAgIGNvbnN0IHBhcnNlZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpXG5cbiAgICAgIGlmIChwYXJzZWQgIT09ICdmYWlsdXJlJykge1xuICAgICAgICBkYXRhVVJMICs9IHNlcmlhbGl6ZUFNaW1lVHlwZShwYXJzZWQpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gJztiYXNlNjQsJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIud3JpdGUoY2h1bmspKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci5lbmQoKSlcblxuICAgICAgcmV0dXJuIGRhdGFVUkxcbiAgICB9XG4gICAgY2FzZSAnVGV4dCc6IHtcbiAgICAgIC8vIDEuIExldCBlbmNvZGluZyBiZSBmYWlsdXJlXG4gICAgICBsZXQgZW5jb2RpbmcgPSAnZmFpbHVyZSdcblxuICAgICAgLy8gMi4gSWYgdGhlIGVuY29kaW5nTmFtZSBpcyBwcmVzZW50LCBzZXQgZW5jb2RpbmcgdG8gdGhlXG4gICAgICAvLyAgICByZXN1bHQgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIGVuY29kaW5nTmFtZS5cbiAgICAgIGlmIChlbmNvZGluZ05hbWUpIHtcbiAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyhlbmNvZGluZ05hbWUpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIGFuZCBtaW1lVHlwZSBpcyBwcmVzZW50OlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScgJiYgbWltZVR5cGUpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzZSBhIE1JTUUgdHlwZVxuICAgICAgICAvLyAgICBnaXZlbiBtaW1lVHlwZS5cbiAgICAgICAgY29uc3QgdHlwZSA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgICAgICAgLy8gMi4gSWYgdHlwZSBpcyBub3QgZmFpbHVyZSwgc2V0IGVuY29kaW5nIHRvIHRoZSByZXN1bHRcbiAgICAgICAgLy8gICAgb2YgZ2V0dGluZyBhbiBlbmNvZGluZyBmcm9tIHR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbXCJjaGFyc2V0XCJdLlxuICAgICAgICBpZiAodHlwZSAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgZW5jb2RpbmcgPSBnZXRFbmNvZGluZyh0eXBlLnBhcmFtZXRlcnMuZ2V0KCdjaGFyc2V0JykpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gNC4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgdGhlbiBzZXQgZW5jb2RpbmcgdG8gVVRGLTguXG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJykge1xuICAgICAgICBlbmNvZGluZyA9ICdVVEYtOCdcbiAgICAgIH1cblxuICAgICAgLy8gNS4gRGVjb2RlIGJ5dGVzIHVzaW5nIGZhbGxiYWNrIGVuY29kaW5nIGVuY29kaW5nLCBhbmRcbiAgICAgIC8vICAgIHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgcmV0dXJuIGRlY29kZShieXRlcywgZW5jb2RpbmcpXG4gICAgfVxuICAgIGNhc2UgJ0FycmF5QnVmZmVyJzoge1xuICAgICAgLy8gUmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcy5cbiAgICAgIGNvbnN0IHNlcXVlbmNlID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoYnl0ZXMpXG5cbiAgICAgIHJldHVybiBzZXF1ZW5jZS5idWZmZXJcbiAgICB9XG4gICAgY2FzZSAnQmluYXJ5U3RyaW5nJzoge1xuICAgICAgLy8gUmV0dXJuIGJ5dGVzIGFzIGEgYmluYXJ5IHN0cmluZywgaW4gd2hpY2ggZXZlcnkgYnl0ZVxuICAgICAgLy8gIGlzIHJlcHJlc2VudGVkIGJ5IGEgY29kZSB1bml0IG9mIGVxdWFsIHZhbHVlIFswLi4yNTVdLlxuICAgICAgbGV0IGJpbmFyeVN0cmluZyA9ICcnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci53cml0ZShjaHVuaylcbiAgICAgIH1cblxuICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIuZW5kKClcblxuICAgICAgcmV0dXJuIGJpbmFyeVN0cmluZ1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2RlY29kZVxuICogQHBhcmFtIHtVaW50OEFycmF5W119IGlvUXVldWVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlbmNvZGluZ1xuICovXG5mdW5jdGlvbiBkZWNvZGUgKGlvUXVldWUsIGVuY29kaW5nKSB7XG4gIGNvbnN0IGJ5dGVzID0gY29tYmluZUJ5dGVTZXF1ZW5jZXMoaW9RdWV1ZSlcblxuICAvLyAxLiBMZXQgQk9NRW5jb2RpbmcgYmUgdGhlIHJlc3VsdCBvZiBCT00gc25pZmZpbmcgaW9RdWV1ZS5cbiAgY29uc3QgQk9NRW5jb2RpbmcgPSBCT01TbmlmZmluZyhieXRlcylcblxuICBsZXQgc2xpY2UgPSAwXG5cbiAgLy8gMi4gSWYgQk9NRW5jb2RpbmcgaXMgbm9uLW51bGw6XG4gIGlmIChCT01FbmNvZGluZyAhPT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCBlbmNvZGluZyB0byBCT01FbmNvZGluZy5cbiAgICBlbmNvZGluZyA9IEJPTUVuY29kaW5nXG5cbiAgICAvLyAyLiBSZWFkIHRocmVlIGJ5dGVzIGZyb20gaW9RdWV1ZSwgaWYgQk9NRW5jb2RpbmcgaXNcbiAgICAvLyAgICBVVEYtODsgb3RoZXJ3aXNlIHJlYWQgdHdvIGJ5dGVzLlxuICAgIC8vICAgIChEbyBub3RoaW5nIHdpdGggdGhvc2UgYnl0ZXMuKVxuICAgIHNsaWNlID0gQk9NRW5jb2RpbmcgPT09ICdVVEYtOCcgPyAzIDogMlxuICB9XG5cbiAgLy8gMy4gUHJvY2VzcyBhIHF1ZXVlIHdpdGggYW4gaW5zdGFuY2Ugb2YgZW5jb2RpbmdcdTIwMTlzXG4gIC8vICAgIGRlY29kZXIsIGlvUXVldWUsIG91dHB1dCwgYW5kIFwicmVwbGFjZW1lbnRcIi5cblxuICAvLyA0LiBSZXR1cm4gb3V0cHV0LlxuXG4gIGNvbnN0IHNsaWNlZCA9IGJ5dGVzLnNsaWNlKHNsaWNlKVxuICByZXR1cm4gbmV3IFRleHREZWNvZGVyKGVuY29kaW5nKS5kZWNvZGUoc2xpY2VkKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2JvbS1zbmlmZlxuICogQHBhcmFtIHtVaW50OEFycmF5fSBpb1F1ZXVlXG4gKi9cbmZ1bmN0aW9uIEJPTVNuaWZmaW5nIChpb1F1ZXVlKSB7XG4gIC8vIDEuIExldCBCT00gYmUgdGhlIHJlc3VsdCBvZiBwZWVraW5nIDMgYnl0ZXMgZnJvbSBpb1F1ZXVlLFxuICAvLyAgICBjb252ZXJ0ZWQgdG8gYSBieXRlIHNlcXVlbmNlLlxuICBjb25zdCBbYSwgYiwgY10gPSBpb1F1ZXVlXG5cbiAgLy8gMi4gRm9yIGVhY2ggb2YgdGhlIHJvd3MgaW4gdGhlIHRhYmxlIGJlbG93LCBzdGFydGluZyB3aXRoXG4gIC8vICAgIHRoZSBmaXJzdCBvbmUgYW5kIGdvaW5nIGRvd24sIGlmIEJPTSBzdGFydHMgd2l0aCB0aGVcbiAgLy8gICAgYnl0ZXMgZ2l2ZW4gaW4gdGhlIGZpcnN0IGNvbHVtbiwgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGVuY29kaW5nIGdpdmVuIGluIHRoZSBjZWxsIGluIHRoZSBzZWNvbmQgY29sdW1uIG9mIHRoYXRcbiAgLy8gICAgcm93LiBPdGhlcndpc2UsIHJldHVybiBudWxsLlxuICBpZiAoYSA9PT0gMHhFRiAmJiBiID09PSAweEJCICYmIGMgPT09IDB4QkYpIHtcbiAgICByZXR1cm4gJ1VURi04J1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkUgJiYgYiA9PT0gMHhGRikge1xuICAgIHJldHVybiAnVVRGLTE2QkUnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRiAmJiBiID09PSAweEZFKSB7XG4gICAgcmV0dXJuICdVVEYtMTZMRSdcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbi8qKlxuICogQHBhcmFtIHtVaW50OEFycmF5W119IHNlcXVlbmNlc1xuICovXG5mdW5jdGlvbiBjb21iaW5lQnl0ZVNlcXVlbmNlcyAoc2VxdWVuY2VzKSB7XG4gIGNvbnN0IHNpemUgPSBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgcmV0dXJuIGEgKyBiLmJ5dGVMZW5ndGhcbiAgfSwgMClcblxuICBsZXQgb2Zmc2V0ID0gMFxuXG4gIHJldHVybiBzZXF1ZW5jZXMucmVkdWNlKChhLCBiKSA9PiB7XG4gICAgYS5zZXQoYiwgb2Zmc2V0KVxuICAgIG9mZnNldCArPSBiLmJ5dGVMZW5ndGhcbiAgICByZXR1cm4gYVxuICB9LCBuZXcgVWludDhBcnJheShzaXplKSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRPcGVyYXRpb24sXG4gIGZpcmVBUHJvZ3Jlc3NFdmVudFxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrRXZlbnRzLFxuICBrQWJvcnRlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgRmlsZVJlYWRlciBleHRlbmRzIEV2ZW50VGFyZ2V0IHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1N0YXRlXSA9ICdlbXB0eSdcbiAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIHRoaXNba0Vycm9yXSA9IG51bGxcbiAgICB0aGlzW2tFdmVudHNdID0ge1xuICAgICAgbG9hZGVuZDogbnVsbCxcbiAgICAgIGVycm9yOiBudWxsLFxuICAgICAgYWJvcnQ6IG51bGwsXG4gICAgICBsb2FkOiBudWxsLFxuICAgICAgcHJvZ3Jlc3M6IG51bGwsXG4gICAgICBsb2Fkc3RhcnQ6IG51bGxcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0FycmF5QnVmZmVyXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNBcnJheUJ1ZmZlciAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcicgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0FycmF5QnVmZmVyKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEFycmF5QnVmZmVyLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0FycmF5QnVmZmVyJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNCaW5hcnlTdHJpbmdcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0JpbmFyeVN0cmluZyAoYmxvYikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRmlsZVJlYWRlci5yZWFkQXNCaW5hcnlTdHJpbmcnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNCaW5hcnlTdHJpbmcoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQmluYXJ5U3RyaW5nLlxuICAgIHJlYWRPcGVyYXRpb24odGhpcywgYmxvYiwgJ0JpbmFyeVN0cmluZycpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzRGF0YVRleHRcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ1xuICAgKi9cbiAgcmVhZEFzVGV4dCAoYmxvYiwgZW5jb2RpbmcgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzVGV4dCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGVuY29kaW5nID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGVuY29kaW5nKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzRGF0YVVSTCcgfSlcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGVcdTIwMTlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDb25zdHJ1Y3Q6IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpLmtDb25zdHJ1Y3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGlzVmFsaWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtZXF1YWxzXG4gKiBAcGFyYW0ge1VSTH0gQVxuICogQHBhcmFtIHtVUkx9IEJcbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gZXhjbHVkZUZyYWdtZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsRXF1YWxzIChBLCBCLCBleGNsdWRlRnJhZ21lbnQgPSBmYWxzZSkge1xuICBjb25zdCBzZXJpYWxpemVkQSA9IFVSTFNlcmlhbGl6ZXIoQSwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIGNvbnN0IHNlcmlhbGl6ZWRCID0gVVJMU2VyaWFsaXplcihCLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgcmV0dXJuIHNlcmlhbGl6ZWRBID09PSBzZXJpYWxpemVkQlxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2Nocm9taXVtL2Jsb2IvNjk0ZDIwZDEzNGNiNTUzZDhkODllNTUwMGI5MTQ4MDEyYjFiYTI5OS9jb250ZW50L2Jyb3dzZXIvY2FjaGVfc3RvcmFnZS9jYWNoZV9zdG9yYWdlX2NhY2hlLmNjI0wyNjAtTDI2MlxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICovXG5mdW5jdGlvbiBmaWVsZFZhbHVlcyAoaGVhZGVyKSB7XG4gIGFzc2VydChoZWFkZXIgIT09IG51bGwpXG5cbiAgY29uc3QgdmFsdWVzID0gW11cblxuICBmb3IgKGxldCB2YWx1ZSBvZiBoZWFkZXIuc3BsaXQoJywnKSkge1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgICBpZiAoIXZhbHVlLmxlbmd0aCkge1xuICAgICAgY29udGludWVcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZSh2YWx1ZSkpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdmFsdWVzLnB1c2godmFsdWUpXG4gIH1cblxuICByZXR1cm4gdmFsdWVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1cmxFcXVhbHMsXG4gIGZpZWxkVmFsdWVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBmaWVsZFZhbHVlczogZ2V0RmllbGRWYWx1ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzRGlzdHVyYmVkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9zeW1ib2xzJylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgdXJsSXNIdHRwSHR0cHNTY2hlbWUsIGNyZWF0ZURlZmVycmVkUHJvbWlzZSwgcmVhZEFsbEJ5dGVzIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLWNhY2hlLWJhdGNoLW9wZXJhdGlvblxuICogQHR5cGVkZWYge09iamVjdH0gQ2FjaGVCYXRjaE9wZXJhdGlvblxuICogQHByb3BlcnR5IHsnZGVsZXRlJyB8ICdwdXQnfSB0eXBlXG4gKiBAcHJvcGVydHkge2FueX0gcmVxdWVzdFxuICogQHByb3BlcnR5IHthbnl9IHJlc3BvbnNlXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICovXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlcXVlc3QtcmVzcG9uc2UtbGlzdFxuICogQHR5cGVkZWYge1thbnksIGFueV1bXX0gcmVxdWVzdFJlc3BvbnNlTGlzdFxuICovXG5cbmNsYXNzIENhY2hlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAgICogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgY29uc3RydWN0b3IgKCkge1xuICAgIGlmIChhcmd1bWVudHNbMF0gIT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHdlYmlkbC5pbGxlZ2FsQ29uc3RydWN0b3IoKVxuICAgIH1cblxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5tYXRjaCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgY29uc3QgcCA9IGF3YWl0IHRoaXMubWF0Y2hBbGwocmVxdWVzdCwgb3B0aW9ucylcblxuICAgIGlmIChwLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgcmV0dXJuIHBbMF1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoQWxsIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZShyZXNwb25zZS5ib2R5Py5zb3VyY2UgPz8gbnVsbClcbiAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZU9iamVjdFtrU3RhdGVdLmJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSByZXNwb25zZVxuICAgICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5ID0gYm9keVxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXNwb25zZS5oZWFkZXJzTGlzdFxuICAgICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuXG4gICAgICByZXNwb25zZUxpc3QucHVzaChyZXNwb25zZU9iamVjdClcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIHJldHVybiBPYmplY3QuZnJlZXplKHJlc3BvbnNlTGlzdClcbiAgfVxuXG4gIGFzeW5jIGFkZCAocmVxdWVzdCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGQnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbcmVxdWVzdF1cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVzcG9uc2VBcnJheVByb21pc2UgPSB0aGlzLmFkZEFsbChyZXF1ZXN0cylcblxuICAgIC8vIDMuXG4gICAgcmV0dXJuIGF3YWl0IHJlc3BvbnNlQXJyYXlQcm9taXNlXG4gIH1cblxuICBhc3luYyBhZGRBbGwgKHJlcXVlc3RzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcgfSlcblxuICAgIHJlcXVlc3RzID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddKHJlcXVlc3RzKVxuXG4gICAgLy8gMS5cbiAgICBjb25zdCByZXNwb25zZVByb21pc2VzID0gW11cblxuICAgIC8vIDIuXG4gICAgY29uc3QgcmVxdWVzdExpc3QgPSBbXVxuXG4gICAgLy8gMy5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMy4xXG4gICAgICBjb25zdCByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIC8vIDMuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkgfHwgci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lIHdoZW4gbWV0aG9kIGlzIG5vdCBHRVQuJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgLyoqIEB0eXBlIHtSZXR1cm5UeXBlPHR5cGVvZiBmZXRjaGluZz5bXX0gKi9cbiAgICBjb25zdCBmZXRjaENvbnRyb2xsZXJzID0gW11cblxuICAgIC8vIDUuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICAvLyA1LjFcbiAgICAgIGNvbnN0IHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG5cbiAgICAgIC8vIDUuMlxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBkaXNwYXRjaGVyOiBnZXRHbG9iYWxEaXNwYXRjaGVyKCksXG4gICAgICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgICAgICAvLyAxLlxuICAgICAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2IHx8IHJlc3BvbnNlLnN0YXR1cyA8IDIwMCB8fCByZXNwb25zZS5zdGF0dXMgPiAyOTkpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3Qod2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnUmVjZWl2ZWQgYW4gaW52YWxpZCBzdGF0dXMgY29kZSBvciB0aGUgcmVxdWVzdCBmYWlsZWQuJ1xuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7IC8vIDIuXG4gICAgICAgICAgICAvLyAyLjFcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgICAgICAgIC8vIDIuMlxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgICAgICAgIC8vIDIuMi4xXG4gICAgICAgICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLmFkZEFsbCcsXG4gICAgICAgICAgICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgICAgICAgIH0pKVxuXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBjb250cm9sbGVyIG9mIGZldGNoQ29udHJvbGxlcnMpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdChuZXcgRE9NRXhjZXB0aW9uKCdhYm9ydGVkJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDIuXG4gICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgICAgIH1cbiAgICAgIH0pKVxuXG4gICAgICAvLyA1LjhcbiAgICAgIHJlc3BvbnNlUHJvbWlzZXMucHVzaChyZXNwb25zZVByb21pc2UucHJvbWlzZSlcbiAgICB9XG5cbiAgICAvLyA2LlxuICAgIGNvbnN0IHAgPSBQcm9taXNlLmFsbChyZXNwb25zZVByb21pc2VzKVxuXG4gICAgLy8gNy5cbiAgICBjb25zdCByZXNwb25zZXMgPSBhd2FpdCBwXG5cbiAgICAvLyA3LjFcbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDcuMlxuICAgIGxldCBpbmRleCA9IDBcblxuICAgIC8vIDcuM1xuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA3LjMuMVxuICAgICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgICB0eXBlOiAncHV0JywgLy8gNy4zLjJcbiAgICAgICAgcmVxdWVzdDogcmVxdWVzdExpc3RbaW5kZXhdLCAvLyA3LjMuM1xuICAgICAgICByZXNwb25zZSAvLyA3LjMuNFxuICAgICAgfVxuXG4gICAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKSAvLyA3LjMuNVxuXG4gICAgICBpbmRleCsrIC8vIDcuMy42XG4gICAgfVxuXG4gICAgLy8gNy41XG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDcuNi4xXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcblxuICAgIC8vIDcuNi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDcuNi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNy42LjMuMVxuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA3LjYuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA3LjdcbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIHB1dCAocmVxdWVzdCwgcmVzcG9uc2UpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnQ2FjaGUucHV0JyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgcmVzcG9uc2UgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZShyZXNwb25zZSlcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgYW4gaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VUJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIGNvbnN0IGlubmVyUmVzcG9uc2UgPSByZXNwb25zZVtrU3RhdGVdXG5cbiAgICAvLyA2LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLnN0YXR1cyA9PT0gMjA2KSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgIG1lc3NhZ2U6ICdHb3QgMjA2IHN0YXR1cydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNy5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpKSB7XG4gICAgICAvLyA3LjEuXG4gICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICAgIC8vIDcuMi5cbiAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAvLyA3LjIuMVxuICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnUmVzcG9uc2UgYm9keSBpcyBsb2NrZWQgb3IgZGlzdHVyYmVkJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA5LlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZShpbm5lclJlc3BvbnNlKVxuXG4gICAgLy8gMTAuXG4gICAgY29uc3QgYm9keVJlYWRQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDExLlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgICAgLy8gMTEuMVxuICAgICAgY29uc3Qgc3RyZWFtID0gaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbVxuXG4gICAgICAvLyAxMS4yXG4gICAgICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKClcblxuICAgICAgLy8gMTEuM1xuICAgICAgcmVhZEFsbEJ5dGVzKHJlYWRlcikudGhlbihib2R5UmVhZFByb21pc2UucmVzb2x2ZSwgYm9keVJlYWRQcm9taXNlLnJlamVjdClcbiAgICB9IGVsc2Uge1xuICAgICAgYm9keVJlYWRQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgIH1cblxuICAgIC8vIDEyLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLy8gMTMuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdwdXQnLCAvLyAxNC5cbiAgICAgIHJlcXVlc3Q6IGlubmVyUmVxdWVzdCwgLy8gMTUuXG4gICAgICByZXNwb25zZTogY2xvbmVkUmVzcG9uc2UgLy8gMTYuXG4gICAgfVxuXG4gICAgLy8gMTcuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIC8vIDE5LlxuICAgIGNvbnN0IGJ5dGVzID0gYXdhaXQgYm9keVJlYWRQcm9taXNlLnByb21pc2VcblxuICAgIGlmIChjbG9uZWRSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIGNsb25lZFJlc3BvbnNlLmJvZHkuc291cmNlID0gYnl0ZXNcbiAgICB9XG5cbiAgICAvLyAxOS4xXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDE5LjIuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyAxOS4yLjJcbiAgICB0cnkge1xuICAgICAgdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgLy8gMTkuMi4zXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gMTkuMi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoKVxuICAgICAgfSBlbHNlIHsgLy8gMTkuMi4zLjJcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgZGVsZXRlIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuZGVsZXRlJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvKipcbiAgICAgKiBAdHlwZSB7UmVxdWVzdH1cbiAgICAgKi9cbiAgICBsZXQgciA9IG51bGxcblxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJylcblxuICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAnZGVsZXRlJyxcbiAgICAgIHJlcXVlc3Q6IHIsXG4gICAgICBvcHRpb25zXG4gICAgfVxuXG4gICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbilcblxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICB0cnkge1xuICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUoISFyZXF1ZXN0UmVzcG9uc2VzPy5sZW5ndGgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlLWtleXNcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHJldHVybnMge3JlYWRvbmx5IFJlcXVlc3RbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKHJlcXVlc3QgPSB1bmRlZmluZWQsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoJ2h0dHBzOi8vYScpXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IHJlcXVlc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICAgICAgcmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgICAgIHJlcXVlc3RPYmplY3Rba1JlYWxtXSA9IHJlcXVlc3QuY2xpZW50XG5cbiAgICAgICAgLy8gNS40LjIuMVxuICAgICAgICByZXF1ZXN0TGlzdC5wdXNoKHJlcXVlc3RPYmplY3QpXG4gICAgICB9XG5cbiAgICAgIC8vIDUuNC4zXG4gICAgICBwcm9taXNlLnJlc29sdmUoT2JqZWN0LmZyZWV6ZShyZXF1ZXN0TGlzdCkpXG4gICAgfSlcblxuICAgIHJldHVybiBwcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNiYXRjaC1jYWNoZS1vcGVyYXRpb25zLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gb3BlcmF0aW9uc1xuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNiYXRjaENhY2hlT3BlcmF0aW9ucyAob3BlcmF0aW9ucykge1xuICAgIC8vIDEuXG4gICAgY29uc3QgY2FjaGUgPSB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIC8vIDIuXG4gICAgY29uc3QgYmFja3VwQ2FjaGUgPSBbLi4uY2FjaGVdXG5cbiAgICAvLyAzLlxuICAgIGNvbnN0IGFkZGVkSXRlbXMgPSBbXVxuXG4gICAgLy8gNC4xXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICB0cnkge1xuICAgICAgLy8gNC4yXG4gICAgICBmb3IgKGNvbnN0IG9wZXJhdGlvbiBvZiBvcGVyYXRpb25zKSB7XG4gICAgICAgIC8vIDQuMi4xXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSAhPT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnR5cGUgIT09ICdwdXQnKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdvcGVyYXRpb24gdHlwZSBkb2VzIG5vdCBtYXRjaCBcImRlbGV0ZVwiIG9yIFwicHV0XCInXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4yXG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScgJiYgb3BlcmF0aW9uLnJlc3BvbnNlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ2RlbGV0ZSBvcGVyYXRpb24gc2hvdWxkIG5vdCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi4zXG4gICAgICAgIGlmICh0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucywgYWRkZWRJdGVtcykubGVuZ3RoKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignPz8/JywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi40XG4gICAgICAgIGxldCByZXF1ZXN0UmVzcG9uc2VzXG5cbiAgICAgICAgLy8gNC4yLjVcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJykge1xuICAgICAgICAgIC8vIDQuMi41LjFcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMpXG5cbiAgICAgICAgICAvLyBUT0RPOiB0aGUgc3BlYyBpcyB3cm9uZywgdGhpcyBpcyBuZWVkZWQgdG8gcGFzcyBXUFRzXG4gICAgICAgICAgaWYgKHJlcXVlc3RSZXNwb25zZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNS4yXG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjUuMi4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ3B1dCcpIHsgLy8gNC4yLjZcbiAgICAgICAgICAvLyA0LjIuNi4xXG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5yZXNwb25zZSA9PSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdwdXQgb3BlcmF0aW9uIHNob3VsZCBoYXZlIGFuIGFzc29jaWF0ZWQgcmVzcG9uc2UnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjJcbiAgICAgICAgICBjb25zdCByID0gb3BlcmF0aW9uLnJlcXVlc3RcblxuICAgICAgICAgIC8vIDQuMi42LjNcbiAgICAgICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnZXhwZWN0ZWQgaHR0cCBvciBodHRwcyBzY2hlbWUnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjRcbiAgICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdub3QgZ2V0IG1ldGhvZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ub3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdvcHRpb25zIG11c3Qgbm90IGJlIGRlZmluZWQnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjZcbiAgICAgICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdClcblxuICAgICAgICAgIC8vIDQuMi42LjdcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNi43LjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuOFxuICAgICAgICAgIGNhY2hlLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuXG4gICAgICAgICAgLy8gNC4yLjYuMTBcbiAgICAgICAgICBhZGRlZEl0ZW1zLnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjdcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgIH1cblxuICAgICAgLy8gNC4zXG4gICAgICByZXR1cm4gcmVzdWx0TGlzdFxuICAgIH0gY2F0Y2ggKGUpIHsgLy8gNS5cbiAgICAgIC8vIDUuMVxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0Lmxlbmd0aCA9IDBcblxuICAgICAgLy8gNS4yXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBiYWNrdXBDYWNoZVxuXG4gICAgICAvLyA1LjNcbiAgICAgIHRocm93IGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcXVlcnktY2FjaGVcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcGFyYW0ge3JlcXVlc3RSZXNwb25zZUxpc3R9IHRhcmdldFN0b3JhZ2VcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjcXVlcnlDYWNoZSAocmVxdWVzdFF1ZXJ5LCBvcHRpb25zLCB0YXJnZXRTdG9yYWdlKSB7XG4gICAgLyoqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSAqL1xuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgY29uc3Qgc3RvcmFnZSA9IHRhcmdldFN0b3JhZ2UgPz8gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiBzdG9yYWdlKSB7XG4gICAgICBjb25zdCBbY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2VdID0gcmVxdWVzdFJlc3BvbnNlXG4gICAgICBpZiAodGhpcy4jcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtKHJlcXVlc3RRdWVyeSwgY2FjaGVkUmVxdWVzdCwgY2FjaGVkUmVzcG9uc2UsIG9wdGlvbnMpKSB7XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNyZXF1ZXN0LW1hdGNoZXMtY2FjaGVkLWl0ZW0tYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RcbiAgICogQHBhcmFtIHthbnkgfCBudWxsfSByZXNwb25zZVxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9ucyB8IHVuZGVmaW5lZH0gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gICNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0gKHJlcXVlc3RRdWVyeSwgcmVxdWVzdCwgcmVzcG9uc2UgPSBudWxsLCBvcHRpb25zKSB7XG4gICAgLy8gaWYgKG9wdGlvbnM/Lmlnbm9yZU1ldGhvZCA9PT0gZmFsc2UgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdHRVQnKSB7XG4gICAgLy8gICByZXR1cm4gZmFsc2VcbiAgICAvLyB9XG5cbiAgICBjb25zdCBxdWVyeVVSTCA9IG5ldyBVUkwocmVxdWVzdFF1ZXJ5LnVybClcblxuICAgIGNvbnN0IGNhY2hlZFVSTCA9IG5ldyBVUkwocmVxdWVzdC51cmwpXG5cbiAgICBpZiAob3B0aW9ucz8uaWdub3JlU2VhcmNoKSB7XG4gICAgICBjYWNoZWRVUkwuc2VhcmNoID0gJydcblxuICAgICAgcXVlcnlVUkwuc2VhcmNoID0gJydcbiAgICB9XG5cbiAgICBpZiAoIXVybEVxdWFscyhxdWVyeVVSTCwgY2FjaGVkVVJMLCB0cnVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgcmVzcG9uc2UgPT0gbnVsbCB8fFxuICAgICAgb3B0aW9ucz8uaWdub3JlVmFyeSB8fFxuICAgICAgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JylcbiAgICApIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgcmVxdWVzdFZhbHVlID0gcmVxdWVzdC5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcbiAgICAgIGNvbnN0IHF1ZXJ5VmFsdWUgPSByZXF1ZXN0UXVlcnkuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG5cbiAgICAgIC8vIElmIG9uZSBoYXMgdGhlIGhlYWRlciBhbmQgdGhlIG90aGVyIGRvZXNuJ3QsIG9yIG9uZSBoYXNcbiAgICAgIC8vIGEgZGlmZmVyZW50IHZhbHVlIHRoYW4gdGhlIG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICAgIGlmIChyZXF1ZXN0VmFsdWUgIT09IHF1ZXJ5VmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG1hdGNoQWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFkZEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHV0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbmNvbnN0IGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzID0gW1xuICB7XG4gICAga2V5OiAnaWdub3JlU2VhcmNoJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlTWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnaWdub3JlVmFyeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKGNhY2hlUXVlcnlPcHRpb25Db252ZXJ0ZXJzKVxuXG53ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5jYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyxcbiAge1xuICAgIGtleTogJ2NhY2hlTmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFJlc3BvbnNlKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8UmVxdWVzdEluZm8+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvXG4pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IENhY2hlIH0gPSByZXF1aXJlKCcuL2NhY2hlJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBDYWNoZVN0b3JhZ2Uge1xuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZGZuLXJlbGV2YW50LW5hbWUtdG8tY2FjaGUtbWFwXG4gICAqIEB0eXBlIHtNYXA8c3RyaW5nLCBpbXBvcnQoJy4vY2FjaGUnKS5yZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2NhY2hlcyA9IG5ldyBNYXAoKVxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSBrQ29uc3RydWN0KSB7XG4gICAgICB3ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yKClcbiAgICB9XG4gIH1cblxuICBhc3luYyBtYXRjaCAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2UubWF0Y2gnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBpZiAob3B0aW9ucy5jYWNoZU5hbWUgIT0gbnVsbCkge1xuICAgICAgLy8gMS4xLjEuMVxuICAgICAgaWYgKHRoaXMuI2NhY2hlcy5oYXMob3B0aW9ucy5jYWNoZU5hbWUpKSB7XG4gICAgICAgIC8vIDEuMS4xLjEuMVxuICAgICAgICBjb25zdCBjYWNoZUxpc3QgPSB0aGlzLiNjYWNoZXMuZ2V0KG9wdGlvbnMuY2FjaGVOYW1lKVxuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG4gICAgICB9XG4gICAgfSBlbHNlIHsgLy8gMi5cbiAgICAgIC8vIDIuMlxuICAgICAgZm9yIChjb25zdCBjYWNoZUxpc3Qgb2YgdGhpcy4jY2FjaGVzLnZhbHVlcygpKSB7XG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICAvLyAyLjIuMS4yXG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcblxuICAgICAgICBpZiAocmVzcG9uc2UgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtaGFzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBoYXMgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLmhhcycgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjEuMVxuICAgIC8vIDIuMlxuICAgIHJldHVybiB0aGlzLiNjYWNoZXMuaGFzKGNhY2hlTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGVzdG9yYWdlLW9wZW5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxDYWNoZT59XG4gICAqL1xuICBhc3luYyBvcGVuIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5vcGVuJyB9KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSlcblxuICAgIC8vIDIuMVxuICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKGNhY2hlTmFtZSkpIHtcbiAgICAgIC8vIGF3YWl0IGNhY2hlcy5vcGVuKCd2MScpICE9PSBhd2FpdCBjYWNoZXMub3BlbigndjEnKVxuXG4gICAgICAvLyAyLjEuMVxuICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLiNjYWNoZXMuZ2V0KGNhY2hlTmFtZSlcblxuICAgICAgLy8gMi4xLjEuMVxuICAgICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgICB9XG5cbiAgICAvLyAyLjJcbiAgICBjb25zdCBjYWNoZSA9IFtdXG5cbiAgICAvLyAyLjNcbiAgICB0aGlzLiNjYWNoZXMuc2V0KGNhY2hlTmFtZSwgY2FjaGUpXG5cbiAgICAvLyAyLjRcbiAgICByZXR1cm4gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBkZWxldGUgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLmRlbGV0ZScgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmRlbGV0ZShjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1rZXlzXG4gICAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAgICovXG4gIGFzeW5jIGtleXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIC8vIDIuMVxuICAgIGNvbnN0IGtleXMgPSB0aGlzLiNjYWNoZXMua2V5cygpXG5cbiAgICAvLyAyLjJcbiAgICByZXR1cm4gWy4uLmtleXNdXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGVTdG9yYWdlLnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2FjaGVTdG9yYWdlJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWF0Y2g6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVTdG9yYWdlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1hdHRyaWJ1dGUtdmFsdWUtc2l6ZVxuY29uc3QgbWF4QXR0cmlidXRlVmFsdWVTaXplID0gMTAyNFxuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tbmFtZS12YWx1ZS1wYWlyLXNpemVcbmNvbnN0IG1heE5hbWVWYWx1ZVBhaXJTaXplID0gNDA5NlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgbWF4QXR0cmlidXRlVmFsdWVTaXplLFxuICBtYXhOYW1lVmFsdWVQYWlyU2l6ZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ1RMRXhjbHVkaW5nSHRhYiAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgKGNvZGUgPj0gMHgwMCB8fCBjb2RlIDw9IDB4MDgpIHx8XG4gICAgICAoY29kZSA+PSAweDBBIHx8IGNvZGUgPD0gMHgxRikgfHxcbiAgICAgIGNvZGUgPT09IDB4N0ZcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBDSEFSICAgICAgICAgICA9IDxhbnkgVVMtQVNDSUkgY2hhcmFjdGVyIChvY3RldHMgMCAtIDEyNyk+XG4gdG9rZW4gICAgICAgICAgPSAxKjxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBzZXBhcmF0b3JzPlxuIHNlcGFyYXRvcnMgICAgID0gXCIoXCIgfCBcIilcIiB8IFwiPFwiIHwgXCI+XCIgfCBcIkBcIlxuICAgICAgICAgICAgICAgIHwgXCIsXCIgfCBcIjtcIiB8IFwiOlwiIHwgXCJcXFwiIHwgPFwiPlxuICAgICAgICAgICAgICAgIHwgXCIvXCIgfCBcIltcIiB8IFwiXVwiIHwgXCI/XCIgfCBcIj1cIlxuICAgICAgICAgICAgICAgIHwgXCJ7XCIgfCBcIn1cIiB8IFNQIHwgSFRcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTmFtZSAobmFtZSkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgbmFtZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlIDw9IDB4MjAgfHwgY29kZSA+IDB4N0YpIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnPCcgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfSdcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgbmFtZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuIGNvb2tpZS12YWx1ZSAgICAgID0gKmNvb2tpZS1vY3RldCAvICggRFFVT1RFICpjb29raWUtb2N0ZXQgRFFVT1RFIClcbiBjb29raWUtb2N0ZXQgICAgICA9ICV4MjEgLyAleDIzLTJCIC8gJXgyRC0zQSAvICV4M0MtNUIgLyAleDVELTdFXG4gICAgICAgICAgICAgICAgICAgICAgIDsgVVMtQVNDSUkgY2hhcmFjdGVycyBleGNsdWRpbmcgQ1RMcyxcbiAgICAgICAgICAgICAgICAgICAgICAgOyB3aGl0ZXNwYWNlIERRVU9URSwgY29tbWEsIHNlbWljb2xvbixcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhbmQgYmFja3NsYXNoXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVWYWx1ZSAodmFsdWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHZhbHVlKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKVxuICAgICAgY29kZSA9PT0gMHgyMiB8fFxuICAgICAgY29kZSA9PT0gMHgyQyB8fFxuICAgICAgY29kZSA9PT0gMHgzQiB8fFxuICAgICAgY29kZSA9PT0gMHg1QyB8fFxuICAgICAgY29kZSA+IDB4N0UgLy8gbm9uLWFzY2lpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaGVhZGVyIHZhbHVlJylcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBwYXRoLXZhbHVlICAgICAgICA9IDxhbnkgQ0hBUiBleGNlcHQgQ1RMcyBvciBcIjtcIj5cbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXRoXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llUGF0aCAocGF0aCkge1xuICBmb3IgKGNvbnN0IGNoYXIgb2YgcGF0aCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChjb2RlIDwgMHgyMSB8fCBjaGFyID09PSAnOycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMSNzZWN0aW9uLTcuMS4xLjFcbiAqIEBwYXJhbSB7bnVtYmVyfERhdGV9IGRhdGVcbiAgSU1GLWZpeGRhdGUgID0gZGF5LW5hbWUgXCIsXCIgU1AgZGF0ZTEgU1AgdGltZS1vZi1kYXkgU1AgR01UXG4gIDsgZml4ZWQgbGVuZ3RoL3pvbmUvY2FwaXRhbGl6YXRpb24gc3Vic2V0IG9mIHRoZSBmb3JtYXRcbiAgOyBzZWUgU2VjdGlvbiAzLjMgb2YgW1JGQzUzMjJdXG5cbiAgZGF5LW5hbWUgICAgID0gJXg0RC42Ri42RSA7IFwiTW9uXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC43NS42NSA7IFwiVHVlXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1Ny42NS42NCA7IFwiV2VkXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1NC42OC43NSA7IFwiVGh1XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni43Mi42OSA7IFwiRnJpXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42MS43NCA7IFwiU2F0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My43NS42RSA7IFwiU3VuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIGRhdGUxICAgICAgICA9IGRheSBTUCBtb250aCBTUCB5ZWFyXG4gICAgICAgICAgICAgICAgICA7IGUuZy4sIDAyIEp1biAxOTgyXG5cbiAgZGF5ICAgICAgICAgID0gMkRJR0lUXG4gIG1vbnRoICAgICAgICA9ICV4NEEuNjEuNkUgOyBcIkphblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNjUuNjIgOyBcIkZlYlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzIgOyBcIk1hclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzAuNzIgOyBcIkFwclwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEQuNjEuNzkgOyBcIk1heVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkUgOyBcIkp1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEEuNzUuNkMgOyBcIkp1bFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDEuNzUuNjcgOyBcIkF1Z1wiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjUuNzAgOyBcIlNlcFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEYuNjMuNzQgOyBcIk9jdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NEUuNkYuNzYgOyBcIk5vdlwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDQuNjUuNjMgOyBcIkRlY1wiLCBjYXNlLXNlbnNpdGl2ZVxuICB5ZWFyICAgICAgICAgPSA0RElHSVRcblxuICBHTVQgICAgICAgICAgPSAleDQ3LjRELjU0IDsgXCJHTVRcIiwgY2FzZS1zZW5zaXRpdmVcblxuICB0aW1lLW9mLWRheSAgPSBob3VyIFwiOlwiIG1pbnV0ZSBcIjpcIiBzZWNvbmRcbiAgICAgICAgICAgICAgOyAwMDowMDowMCAtIDIzOjU5OjYwIChsZWFwIHNlY29uZClcblxuICBob3VyICAgICAgICAgPSAyRElHSVRcbiAgbWludXRlICAgICAgID0gMkRJR0lUXG4gIHNlY29uZCAgICAgICA9IDJESUdJVFxuICovXG5mdW5jdGlvbiB0b0lNRkRhdGUgKGRhdGUpIHtcbiAgaWYgKHR5cGVvZiBkYXRlID09PSAnbnVtYmVyJykge1xuICAgIGRhdGUgPSBuZXcgRGF0ZShkYXRlKVxuICB9XG5cbiAgY29uc3QgZGF5cyA9IFtcbiAgICAnU3VuJywgJ01vbicsICdUdWUnLCAnV2VkJyxcbiAgICAnVGh1JywgJ0ZyaScsICdTYXQnXG4gIF1cblxuICBjb25zdCBtb250aHMgPSBbXG4gICAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgICAnSnVsJywgJ0F1ZycsICdTZXAnLCAnT2N0JywgJ05vdicsICdEZWMnXG4gIF1cblxuICBjb25zdCBkYXlOYW1lID0gZGF5c1tkYXRlLmdldFVUQ0RheSgpXVxuICBjb25zdCBkYXkgPSBkYXRlLmdldFVUQ0RhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3QgbW9udGggPSBtb250aHNbZGF0ZS5nZXRVVENNb250aCgpXVxuICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRVVENGdWxsWWVhcigpXG4gIGNvbnN0IGhvdXIgPSBkYXRlLmdldFVUQ0hvdXJzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1pbnV0ZSA9IGRhdGUuZ2V0VVRDTWludXRlcygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBzZWNvbmQgPSBkYXRlLmdldFVUQ1NlY29uZHMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcblxuICByZXR1cm4gYCR7ZGF5TmFtZX0sICR7ZGF5fSAke21vbnRofSAke3llYXJ9ICR7aG91cn06JHttaW51dGV9OiR7c2Vjb25kfSBHTVRgXG59XG5cbi8qKlxuIG1heC1hZ2UtYXYgICAgICAgID0gXCJNYXgtQWdlPVwiIG5vbi16ZXJvLWRpZ2l0ICpESUdJVFxuICAgICAgICAgICAgICAgICAgICAgICA7IEluIHByYWN0aWNlLCBib3RoIGV4cGlyZXMtYXYgYW5kIG1heC1hZ2UtYXZcbiAgICAgICAgICAgICAgICAgICAgICAgOyBhcmUgbGltaXRlZCB0byBkYXRlcyByZXByZXNlbnRhYmxlIGJ5IHRoZVxuICAgICAgICAgICAgICAgICAgICAgICA7IHVzZXIgYWdlbnQuXG4gKiBAcGFyYW0ge251bWJlcn0gbWF4QWdlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llTWF4QWdlIChtYXhBZ2UpIHtcbiAgaWYgKG1heEFnZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG1heC1hZ2UnKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjI2NSNzZWN0aW9uLTQuMS4xXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9pbmRleCcpLkNvb2tpZX0gY29va2llXG4gKi9cbmZ1bmN0aW9uIHN0cmluZ2lmeSAoY29va2llKSB7XG4gIGlmIChjb29raWUubmFtZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgdmFsaWRhdGVDb29raWVOYW1lKGNvb2tpZS5uYW1lKVxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlKGNvb2tpZS52YWx1ZSlcblxuICBjb25zdCBvdXQgPSBbYCR7Y29va2llLm5hbWV9PSR7Y29va2llLnZhbHVlfWBdXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtY29va2llLXByZWZpeGVzLTAwI3NlY3Rpb24tMy4xXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMlxuICBpZiAoY29va2llLm5hbWUuc3RhcnRzV2l0aCgnX19TZWN1cmUtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fSG9zdC0nKSkge1xuICAgIGNvb2tpZS5zZWN1cmUgPSB0cnVlXG4gICAgY29va2llLmRvbWFpbiA9IG51bGxcbiAgICBjb29raWUucGF0aCA9ICcvJ1xuICB9XG5cbiAgaWYgKGNvb2tpZS5zZWN1cmUpIHtcbiAgICBvdXQucHVzaCgnU2VjdXJlJylcbiAgfVxuXG4gIGlmIChjb29raWUuaHR0cE9ubHkpIHtcbiAgICBvdXQucHVzaCgnSHR0cE9ubHknKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBjb29raWUubWF4QWdlID09PSAnbnVtYmVyJykge1xuICAgIHZhbGlkYXRlQ29va2llTWF4QWdlKGNvb2tpZS5tYXhBZ2UpXG4gICAgb3V0LnB1c2goYE1heC1BZ2U9JHtjb29raWUubWF4QWdlfWApXG4gIH1cblxuICBpZiAoY29va2llLmRvbWFpbikge1xuICAgIHZhbGlkYXRlQ29va2llRG9tYWluKGNvb2tpZS5kb21haW4pXG4gICAgb3V0LnB1c2goYERvbWFpbj0ke2Nvb2tpZS5kb21haW59YClcbiAgfVxuXG4gIGlmIChjb29raWUucGF0aCkge1xuICAgIHZhbGlkYXRlQ29va2llUGF0aChjb29raWUucGF0aClcbiAgICBvdXQucHVzaChgUGF0aD0ke2Nvb2tpZS5wYXRofWApXG4gIH1cblxuICBpZiAoY29va2llLmV4cGlyZXMgJiYgY29va2llLmV4cGlyZXMudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICBvdXQucHVzaChgRXhwaXJlcz0ke3RvSU1GRGF0ZShjb29raWUuZXhwaXJlcyl9YClcbiAgfVxuXG4gIGlmIChjb29raWUuc2FtZVNpdGUpIHtcbiAgICBvdXQucHVzaChgU2FtZVNpdGU9JHtjb29raWUuc2FtZVNpdGV9YClcbiAgfVxuXG4gIGZvciAoY29uc3QgcGFydCBvZiBjb29raWUudW5wYXJzZWQpIHtcbiAgICBpZiAoIXBhcnQuaW5jbHVkZXMoJz0nKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHVucGFyc2VkJylcbiAgICB9XG5cbiAgICBjb25zdCBba2V5LCAuLi52YWx1ZV0gPSBwYXJ0LnNwbGl0KCc9JylcblxuICAgIG91dC5wdXNoKGAke2tleS50cmltKCl9PSR7dmFsdWUuam9pbignPScpfWApXG4gIH1cblxuICByZXR1cm4gb3V0LmpvaW4oJzsgJylcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ1RMRXhjbHVkaW5nSHRhYixcbiAgdmFsaWRhdGVDb29raWVOYW1lLFxuICB2YWxpZGF0ZUNvb2tpZVBhdGgsXG4gIHZhbGlkYXRlQ29va2llVmFsdWUsXG4gIHRvSU1GRGF0ZSxcbiAgc3RyaW5naWZ5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbWF4TmFtZVZhbHVlUGFpclNpemUsIG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBpc0NUTEV4Y2x1ZGluZ0h0YWIgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbi8qKlxuICogQGRlc2NyaXB0aW9uIFBhcnNlcyB0aGUgZmllbGQtdmFsdWUgYXR0cmlidXRlcyBvZiBhIHNldC1jb29raWUgaGVhZGVyIHN0cmluZy5cbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNFxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICogQHJldHVybnMgaWYgdGhlIGhlYWRlciBpcyBpbnZhbGlkLCBudWxsIHdpbGwgYmUgcmV0dXJuZWRcbiAqL1xuZnVuY3Rpb24gcGFyc2VTZXRDb29raWUgKGhlYWRlcikge1xuICAvLyAxLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDAwLTA4IC8gJXgwQS0xRiAvICV4N0ZcbiAgLy8gICAgY2hhcmFjdGVyIChDVEwgY2hhcmFjdGVycyBleGNsdWRpbmcgSFRBQik6IEFib3J0IHRoZXNlIHN0ZXBzIGFuZFxuICAvLyAgICBpZ25vcmUgdGhlIHNldC1jb29raWUtc3RyaW5nIGVudGlyZWx5LlxuICBpZiAoaXNDVExFeGNsdWRpbmdIdGFiKGhlYWRlcikpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgbGV0IG5hbWVWYWx1ZVBhaXIgPSAnJ1xuICBsZXQgdW5wYXJzZWRBdHRyaWJ1dGVzID0gJydcbiAgbGV0IG5hbWUgPSAnJ1xuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDIuIElmIHRoZSBzZXQtY29va2llLXN0cmluZyBjb250YWlucyBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXI6XG4gIGlmIChoZWFkZXIuaW5jbHVkZXMoJzsnKSkge1xuICAgIC8vIDEuIFRoZSBuYW1lLXZhbHVlLXBhaXIgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLFxuICAgIC8vICAgIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgY29uc2lzdCBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSBzZXQtY29va2llLXN0cmluZ1xuICAgIC8vICAgIChpbmNsdWRpbmcgdGhlICV4M0IgKFwiO1wiKSBpbiBxdWVzdGlvbikuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIG5hbWVWYWx1ZVBhaXIgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCgnOycsIGhlYWRlciwgcG9zaXRpb24pXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gaGVhZGVyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIFRoZSBuYW1lLXZhbHVlLXBhaXIgc3RyaW5nIGNvbnNpc3RzIG9mIGFsbCB0aGUgY2hhcmFjdGVyc1xuICAgIC8vICAgIGNvbnRhaW5lZCBpbiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcsIGFuZCB0aGUgdW5wYXJzZWQtXG4gICAgLy8gICAgYXR0cmlidXRlcyBpcyB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIG5hbWVWYWx1ZVBhaXIgPSBoZWFkZXJcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBuYW1lLXZhbHVlLXBhaXIgc3RyaW5nIGxhY2tzIGEgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgdGhlblxuICAvLyAgICB0aGUgbmFtZSBzdHJpbmcgaXMgZW1wdHksIGFuZCB0aGUgdmFsdWUgc3RyaW5nIGlzIHRoZSB2YWx1ZSBvZlxuICAvLyAgICBuYW1lLXZhbHVlLXBhaXIuXG4gIGlmICghbmFtZVZhbHVlUGFpci5pbmNsdWRlcygnPScpKSB7XG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyXG4gIH0gZWxzZSB7XG4gICAgLy8gICAgT3RoZXJ3aXNlLCB0aGUgbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dFxuICAgIC8vICAgIG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNEIChcIj1cIikgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseVxuICAgIC8vICAgIGVtcHR5KSB2YWx1ZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGZpcnN0XG4gICAgLy8gICAgJXgzRCAoXCI9XCIpIGNoYXJhY3Rlci5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuICAgIG5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIG5hbWVWYWx1ZVBhaXIsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgICB2YWx1ZSA9IG5hbWVWYWx1ZVBhaXIuc2xpY2UocG9zaXRpb24ucG9zaXRpb24gKyAxKVxuICB9XG5cbiAgLy8gNC4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIG5hbWVcbiAgLy8gICAgc3RyaW5nIGFuZCB0aGUgdmFsdWUgc3RyaW5nLlxuICBuYW1lID0gbmFtZS50cmltKClcbiAgdmFsdWUgPSB2YWx1ZS50cmltKClcblxuICAvLyA1LiBJZiB0aGUgc3VtIG9mIHRoZSBsZW5ndGhzIG9mIHRoZSBuYW1lIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZ1xuICAvLyAgICBpcyBtb3JlIHRoYW4gNDA5NiBvY3RldHMsIGFib3J0IHRoZXNlIHN0ZXBzIGFuZCBpZ25vcmUgdGhlIHNldC1cbiAgLy8gICAgY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKG5hbWUubGVuZ3RoICsgdmFsdWUubGVuZ3RoID4gbWF4TmFtZVZhbHVlUGFpclNpemUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gNi4gVGhlIGNvb2tpZS1uYW1lIGlzIHRoZSBuYW1lIHN0cmluZywgYW5kIHRoZSBjb29raWUtdmFsdWUgaXMgdGhlXG4gIC8vICAgIHZhbHVlIHN0cmluZy5cbiAgcmV0dXJuIHtcbiAgICBuYW1lLCB2YWx1ZSwgLi4ucGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzKVxuICB9XG59XG5cbi8qKlxuICogUGFyc2VzIHRoZSByZW1haW5pbmcgYXR0cmlidXRlcyBvZiBhIHNldC1jb29raWUgaGVhZGVyXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSB1bnBhcnNlZEF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7W09iamVjdC48c3RyaW5nLCB1bmtub3duPl09e319IGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAqL1xuZnVuY3Rpb24gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXMgKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdCA9IHt9KSB7XG4gIC8vIDEuIElmIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHN0cmluZyBpcyBlbXB0eSwgc2tpcCB0aGUgcmVzdCBvZlxuICAvLyAgICB0aGVzZSBzdGVwcy5cbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gY29va2llQXR0cmlidXRlTGlzdFxuICB9XG5cbiAgLy8gMi4gRGlzY2FyZCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzICh3aGljaFxuICAvLyAgICB3aWxsIGJlIGEgJXgzQiAoXCI7XCIpIGNoYXJhY3RlcikuXG4gIGFzc2VydCh1bnBhcnNlZEF0dHJpYnV0ZXNbMF0gPT09ICc7JylcbiAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gdW5wYXJzZWRBdHRyaWJ1dGVzLnNsaWNlKDEpXG5cbiAgbGV0IGNvb2tpZUF2ID0gJydcblxuICAvLyAzLiBJZiB0aGUgcmVtYWluaW5nIHVucGFyc2VkLWF0dHJpYnV0ZXMgY29udGFpbnMgYSAleDNCIChcIjtcIilcbiAgLy8gICAgY2hhcmFjdGVyOlxuICBpZiAodW5wYXJzZWRBdHRyaWJ1dGVzLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBDb25zdW1lIHRoZSBjaGFyYWN0ZXJzIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzQiAoXCI7XCIpIGNoYXJhY3Rlci5cbiAgICBjb29raWVBdiA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJzsnLFxuICAgICAgdW5wYXJzZWRBdHRyaWJ1dGVzLFxuICAgICAgeyBwb3NpdGlvbjogMCB9XG4gICAgKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZShjb29raWVBdi5sZW5ndGgpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgcmVtYWluZGVyIG9mIHRoZSB1bnBhcnNlZC1hdHRyaWJ1dGVzLlxuICAgIGNvb2tpZUF2ID0gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gICAgdW5wYXJzZWRBdHRyaWJ1dGVzID0gJydcbiAgfVxuXG4gIC8vIExldCB0aGUgY29va2llLWF2IHN0cmluZyBiZSB0aGUgY2hhcmFjdGVycyBjb25zdW1lZCBpbiB0aGlzIHN0ZXAuXG5cbiAgbGV0IGF0dHJpYnV0ZU5hbWUgPSAnJ1xuICBsZXQgYXR0cmlidXRlVmFsdWUgPSAnJ1xuXG4gIC8vIDQuIElmIHRoZSBjb29raWUtYXYgc3RyaW5nIGNvbnRhaW5zIGEgJXgzRCAoXCI9XCIpIGNoYXJhY3RlcjpcbiAgaWYgKGNvb2tpZUF2LmluY2x1ZGVzKCc9JykpIHtcbiAgICAvLyAxLiBUaGUgKHBvc3NpYmx5IGVtcHR5KSBhdHRyaWJ1dGUtbmFtZSBzdHJpbmcgY29uc2lzdHMgb2YgdGhlXG4gICAgLy8gICAgY2hhcmFjdGVycyB1cCB0bywgYnV0IG5vdCBpbmNsdWRpbmcsIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIsIGFuZCB0aGUgKHBvc3NpYmx5IGVtcHR5KSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nXG4gICAgLy8gICAgY29uc2lzdHMgb2YgdGhlIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGZpcnN0ICV4M0QgKFwiPVwiKVxuICAgIC8vICAgIGNoYXJhY3Rlci5cbiAgICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gICAgYXR0cmlidXRlTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgJz0nLFxuICAgICAgY29va2llQXYsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgICBhdHRyaWJ1dGVWYWx1ZSA9IGNvb2tpZUF2LnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBlbnRpcmUgY29va2llLWF2XG4gICAgLy8gICAgc3RyaW5nLCBhbmQgdGhlIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmcgaXMgZW1wdHkuXG4gICAgYXR0cmlidXRlTmFtZSA9IGNvb2tpZUF2XG4gIH1cblxuICAvLyA1LiBSZW1vdmUgYW55IGxlYWRpbmcgb3IgdHJhaWxpbmcgV1NQIGNoYXJhY3RlcnMgZnJvbSB0aGUgYXR0cmlidXRlLVxuICAvLyAgICBuYW1lIHN0cmluZyBhbmQgdGhlIGF0dHJpYnV0ZS12YWx1ZSBzdHJpbmcuXG4gIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGVOYW1lLnRyaW0oKVxuICBhdHRyaWJ1dGVWYWx1ZSA9IGF0dHJpYnV0ZVZhbHVlLnRyaW0oKVxuXG4gIC8vIDYuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbG9uZ2VyIHRoYW4gMTAyNCBvY3RldHMsIGlnbm9yZSB0aGVcbiAgLy8gICAgY29va2llLWF2IHN0cmluZyBhbmQgcmV0dXJuIHRvIFN0ZXAgMSBvZiB0aGlzIGFsZ29yaXRobS5cbiAgaWYgKGF0dHJpYnV0ZVZhbHVlLmxlbmd0aCA+IG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSkge1xuICAgIHJldHVybiBwYXJzZVVucGFyc2VkQXR0cmlidXRlcyh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QpXG4gIH1cblxuICAvLyA3LiBQcm9jZXNzIHRoZSBhdHRyaWJ1dGUtbmFtZSBhbmQgYXR0cmlidXRlLXZhbHVlIGFjY29yZGluZyB0byB0aGVcbiAgLy8gICAgcmVxdWlyZW1lbnRzIGluIHRoZSBmb2xsb3dpbmcgc3Vic2VjdGlvbnMuICAoTm90aWNlIHRoYXRcbiAgLy8gICAgYXR0cmlidXRlcyB3aXRoIHVucmVjb2duaXplZCBhdHRyaWJ1dGUtbmFtZXMgYXJlIGlnbm9yZWQuKVxuICBjb25zdCBhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID0gYXR0cmlidXRlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4xXG4gIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nXG4gIC8vIFwiRXhwaXJlc1wiLCB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuICBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ2V4cGlyZXMnKSB7XG4gICAgLy8gMS4gTGV0IHRoZSBleHBpcnktdGltZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgdGhlIGF0dHJpYnV0ZS12YWx1ZVxuICAgIC8vICAgIGFzIGNvb2tpZS1kYXRlIChzZWUgU2VjdGlvbiA1LjEuMSkuXG4gICAgY29uc3QgZXhwaXJ5VGltZSA9IG5ldyBEYXRlKGF0dHJpYnV0ZVZhbHVlKVxuXG4gICAgLy8gMi4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBmYWlsZWQgdG8gcGFyc2UgYXMgYSBjb29raWUgZGF0ZSwgaWdub3JlXG4gICAgLy8gICAgdGhlIGNvb2tpZS1hdi5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QuZXhwaXJlcyA9IGV4cGlyeVRpbWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnbWF4LWFnZScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjJcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIk1heC1cbiAgICAvLyBBZ2VcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIElmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgYSBESUdJVCBvciBhXG4gICAgLy8gICAgXCItXCIgY2hhcmFjdGVyLCBpZ25vcmUgdGhlIGNvb2tpZS1hdi5cbiAgICBjb25zdCBjaGFyQ29kZSA9IGF0dHJpYnV0ZVZhbHVlLmNoYXJDb2RlQXQoMClcblxuICAgIGlmICgoY2hhckNvZGUgPCA0OCB8fCBjaGFyQ29kZSA+IDU3KSAmJiBhdHRyaWJ1dGVWYWx1ZVswXSAhPT0gJy0nKSB7XG4gICAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoZSByZW1haW5kZXIgb2YgYXR0cmlidXRlLXZhbHVlIGNvbnRhaW5zIGEgbm9uLURJR0lUXG4gICAgLy8gICAgY2hhcmFjdGVyLCBpZ25vcmUgdGhlIGNvb2tpZS1hdi5cbiAgICBpZiAoIS9eXFxkKyQvLnRlc3QoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICAgIH1cblxuICAgIC8vIDMuIExldCBkZWx0YS1zZWNvbmRzIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUgY29udmVydGVkIHRvIGFuIGludGVnZXIuXG4gICAgY29uc3QgZGVsdGFTZWNvbmRzID0gTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKVxuXG4gICAgLy8gNC4gTGV0IGNvb2tpZS1hZ2UtbGltaXQgYmUgdGhlIG1heGltdW0gYWdlIG9mIHRoZSBjb29raWUgKHdoaWNoXG4gICAgLy8gICAgU0hPVUxEIGJlIDQwMCBkYXlzIG9yIGxlc3MsIHNlZSBTZWN0aW9uIDQuMS4yLjIpLlxuXG4gICAgLy8gNS4gU2V0IGRlbHRhLXNlY29uZHMgdG8gdGhlIHNtYWxsZXIgb2YgaXRzIHByZXNlbnQgdmFsdWUgYW5kIGNvb2tpZS1cbiAgICAvLyAgICBhZ2UtbGltaXQuXG4gICAgLy8gZGVsdGFTZWNvbmRzID0gTWF0aC5taW4oZGVsdGFTZWNvbmRzICogMTAwMCwgbWF4RXhwaXJlc01zKVxuXG4gICAgLy8gNi4gSWYgZGVsdGEtc2Vjb25kcyBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gemVybyAoMCksIGxldCBleHBpcnktXG4gICAgLy8gICAgdGltZSBiZSB0aGUgZWFybGllc3QgcmVwcmVzZW50YWJsZSBkYXRlIGFuZCB0aW1lLiAgT3RoZXJ3aXNlLCBsZXRcbiAgICAvLyAgICB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSBwbHVzIGRlbHRhLXNlY29uZHNcbiAgICAvLyAgICBzZWNvbmRzLlxuICAgIC8vIGNvbnN0IGV4cGlyeVRpbWUgPSBkZWx0YVNlY29uZHMgPD0gMCA/IERhdGUubm93KCkgOiBEYXRlLm5vdygpICsgZGVsdGFTZWNvbmRzXG5cbiAgICAvLyA3LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIE1heC1BZ2UgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBleHBpcnktdGltZS5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0Lm1heEFnZSA9IGRlbHRhU2Vjb25kc1xuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdkb21haW4nKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4zXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJEb21haW5cIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gTGV0IGNvb2tpZS1kb21haW4gYmUgdGhlIGF0dHJpYnV0ZS12YWx1ZS5cbiAgICBsZXQgY29va2llRG9tYWluID0gYXR0cmlidXRlVmFsdWVcblxuICAgIC8vIDIuIElmIGNvb2tpZS1kb21haW4gc3RhcnRzIHdpdGggJXgyRSAoXCIuXCIpLCBsZXQgY29va2llLWRvbWFpbiBiZVxuICAgIC8vICAgIGNvb2tpZS1kb21haW4gd2l0aG91dCBpdHMgbGVhZGluZyAleDJFIChcIi5cIikuXG4gICAgaWYgKGNvb2tpZURvbWFpblswXSA9PT0gJy4nKSB7XG4gICAgICBjb29raWVEb21haW4gPSBjb29raWVEb21haW4uc2xpY2UoMSlcbiAgICB9XG5cbiAgICAvLyAzLiBDb252ZXJ0IHRoZSBjb29raWUtZG9tYWluIHRvIGxvd2VyIGNhc2UuXG4gICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDQuIEFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdCB3aXRoIGFuXG4gICAgLy8gICAgYXR0cmlidXRlLW5hbWUgb2YgRG9tYWluIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLWRvbWFpbi5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmRvbWFpbiA9IGNvb2tpZURvbWFpblxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdwYXRoJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuNFxuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiUGF0aFwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGVtcHR5IG9yIGlmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlXG4gICAgLy8gICAgYXR0cmlidXRlLXZhbHVlIGlzIG5vdCAleDJGIChcIi9cIik6XG4gICAgbGV0IGNvb2tpZVBhdGggPSAnJ1xuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPT09IDAgfHwgYXR0cmlidXRlVmFsdWVbMF0gIT09ICcvJykge1xuICAgICAgLy8gMS4gTGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBkZWZhdWx0LXBhdGguXG4gICAgICBjb29raWVQYXRoID0gJy8nXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIE90aGVyd2lzZTpcblxuICAgICAgLy8gMS4gTGV0IGNvb2tpZS1wYXRoIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgICBjb29raWVQYXRoID0gYXR0cmlidXRlVmFsdWVcbiAgICB9XG5cbiAgICAvLyAyLiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFBhdGggYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZiBjb29raWUtcGF0aC5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnBhdGggPSBjb29raWVQYXRoXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ3NlY3VyZScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjVcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlNlY3VyZVwiLFxuICAgIC8vIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0XG4gICAgLy8gd2l0aCBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBTZWN1cmUgYW5kIGFuIGVtcHR5IGF0dHJpYnV0ZS12YWx1ZS5cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2VjdXJlID0gdHJ1ZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdodHRwb25seScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjZcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAgIC8vIFwiSHR0cE9ubHlcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBhcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtXG4gICAgLy8gYXR0cmlidXRlLWxpc3Qgd2l0aCBhbiBhdHRyaWJ1dGUtbmFtZSBvZiBIdHRwT25seSBhbmQgYW4gZW1wdHlcbiAgICAvLyBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0Lmh0dHBPbmx5ID0gdHJ1ZVxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzYW1lc2l0ZScpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjdcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAgIC8vIFwiU2FtZVNpdGVcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93czpcblxuICAgIC8vIDEuIExldCBlbmZvcmNlbWVudCBiZSBcIkRlZmF1bHRcIi5cbiAgICBsZXQgZW5mb3JjZW1lbnQgPSAnRGVmYXVsdCdcblxuICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlID0gYXR0cmlidXRlVmFsdWUudG9Mb3dlckNhc2UoKVxuICAgIC8vIDIuIElmIGNvb2tpZS1hdidzIGF0dHJpYnV0ZS12YWx1ZSBpcyBhIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gICAgLy8gICAgXCJOb25lXCIsIHNldCBlbmZvcmNlbWVudCB0byBcIk5vbmVcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ25vbmUnKSkge1xuICAgICAgZW5mb3JjZW1lbnQgPSAnTm9uZSdcbiAgICB9XG5cbiAgICAvLyAzLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiU3RyaWN0XCIsIHNldCBlbmZvcmNlbWVudCB0byBcIlN0cmljdFwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnc3RyaWN0JykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ1N0cmljdCdcbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiTGF4XCIsIHNldCBlbmZvcmNlbWVudCB0byBcIkxheFwiLlxuICAgIGlmIChhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZS5pbmNsdWRlcygnbGF4JykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ0xheCdcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIFwiU2FtZVNpdGVcIiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mXG4gICAgLy8gICAgZW5mb3JjZW1lbnQuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5zYW1lU2l0ZSA9IGVuZm9yY2VtZW50XG4gIH0gZWxzZSB7XG4gICAgY29va2llQXR0cmlidXRlTGlzdC51bnBhcnNlZCA/Pz0gW11cblxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQucHVzaChgJHthdHRyaWJ1dGVOYW1lfT0ke2F0dHJpYnV0ZVZhbHVlfWApXG4gIH1cblxuICAvLyA4LiBSZXR1cm4gdG8gU3RlcCAxIG9mIHRoaXMgYWxnb3JpdGhtLlxuICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFyc2VTZXRDb29raWUsXG4gIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgcGFyc2VTZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vcGFyc2UnKVxuY29uc3QgeyBzdHJpbmdpZnkgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5cbi8qKlxuICogQHR5cGVkZWYge09iamVjdH0gQ29va2llXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbmFtZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IHZhbHVlXG4gKiBAcHJvcGVydHkge0RhdGV8bnVtYmVyfHVuZGVmaW5lZH0gZXhwaXJlc1xuICogQHByb3BlcnR5IHtudW1iZXJ8dW5kZWZpbmVkfSBtYXhBZ2VcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfHVuZGVmaW5lZH0gZG9tYWluXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IHBhdGhcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IHNlY3VyZVxuICogQHByb3BlcnR5IHtib29sZWFufHVuZGVmaW5lZH0gaHR0cE9ubHlcbiAqIEBwcm9wZXJ0eSB7J1N0cmljdCd8J0xheCd8J05vbmUnfSBzYW1lU2l0ZVxuICogQHByb3BlcnR5IHtzdHJpbmdbXX0gdW5wYXJzZWRcbiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGdldENvb2tpZXMgKGhlYWRlcnMpIHtcbiAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ2dldENvb2tpZXMnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29uc3QgY29va2llID0gaGVhZGVycy5nZXQoJ2Nvb2tpZScpXG4gIGNvbnN0IG91dCA9IHt9XG5cbiAgaWYgKCFjb29raWUpIHtcbiAgICByZXR1cm4gb3V0XG4gIH1cblxuICBmb3IgKGNvbnN0IHBpZWNlIG9mIGNvb2tpZS5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgW25hbWUsIC4uLnZhbHVlXSA9IHBpZWNlLnNwbGl0KCc9JylcblxuICAgIG91dFtuYW1lLnRyaW0oKV0gPSB2YWx1ZS5qb2luKCc9JylcbiAgfVxuXG4gIHJldHVybiBvdXRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3sgcGF0aD86IHN0cmluZywgZG9tYWluPzogc3RyaW5nIH18dW5kZWZpbmVkfSBhdHRyaWJ1dGVzXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gZGVsZXRlQ29va2llIChoZWFkZXJzLCBuYW1lLCBhdHRyaWJ1dGVzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdkZWxldGVDb29raWUnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhuYW1lKVxuICBhdHRyaWJ1dGVzID0gd2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyhhdHRyaWJ1dGVzKVxuXG4gIC8vIE1hdGNoZXMgYmVoYXZpb3Igb2ZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm9fc3RkL2Jsb2IvNjM4MjdiMTYzMzBiODI0ODlhMDQ2MTQwMjdjMzNiNzkwNGUwOGJlNS9odHRwL2Nvb2tpZS50cyNMMjc4XG4gIHNldENvb2tpZShoZWFkZXJzLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZTogJycsXG4gICAgZXhwaXJlczogbmV3IERhdGUoMCksXG4gICAgLi4uYXR0cmlidXRlc1xuICB9KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge0Nvb2tpZVtdfVxuICovXG5mdW5jdGlvbiBnZXRTZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRTZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZXMgPSBoZWFkZXJzLmdldFNldENvb2tpZSgpXG5cbiAgaWYgKCFjb29raWVzKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKHBhaXIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHBhcmFtIHtDb29raWV9IGNvb2tpZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHNldENvb2tpZSAoaGVhZGVycywgY29va2llKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdzZXRDb29raWUnIH0pXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29va2llID0gd2ViaWRsLmNvbnZlcnRlcnMuQ29va2llKGNvb2tpZSlcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoY29va2llKVxuXG4gIGlmIChzdHIpIHtcbiAgICBoZWFkZXJzLmFwcGVuZCgnU2V0LUNvb2tpZScsIHN0cmluZ2lmeShjb29raWUpKVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdkb21haW4nLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5Db29raWUgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBrZXk6ICduYW1lJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAndmFsdWUnXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcigodmFsdWUpID0+IHtcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10odmFsdWUpXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSlcbiAgICB9KSxcbiAgICBrZXk6ICdleHBpcmVzJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSksXG4gICAga2V5OiAnbWF4QWdlJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAncGF0aCcsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ib29sZWFuKSxcbiAgICBrZXk6ICdzZWN1cmUnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnaHR0cE9ubHknLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAga2V5OiAnc2FtZVNpdGUnLFxuICAgIGFsbG93ZWRWYWx1ZXM6IFsnU3RyaWN0JywgJ0xheCcsICdOb25lJ11cbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAndW5wYXJzZWQnLFxuICAgIGRlZmF1bHRWYWx1ZTogW11cbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldENvb2tpZXMsXG4gIGRlbGV0ZUNvb2tpZSxcbiAgZ2V0U2V0Q29va2llcyxcbiAgc2V0Q29va2llXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIFRoaXMgaXMgYSBHbG9iYWxseSBVbmlxdWUgSWRlbnRpZmllciB1bmlxdWUgdXNlZFxuLy8gdG8gdmFsaWRhdGUgdGhhdCB0aGUgZW5kcG9pbnQgYWNjZXB0cyB3ZWJzb2NrZXRcbi8vIGNvbm5lY3Rpb25zLlxuLy8gU2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM2NDU1Lmh0bWwjc2VjdGlvbi0xLjNcbmNvbnN0IHVpZCA9ICcyNThFQUZBNS1FOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTEnXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbmNvbnN0IHN0YXRlcyA9IHtcbiAgQ09OTkVDVElORzogMCxcbiAgT1BFTjogMSxcbiAgQ0xPU0lORzogMixcbiAgQ0xPU0VEOiAzXG59XG5cbmNvbnN0IG9wY29kZXMgPSB7XG4gIENPTlRJTlVBVElPTjogMHgwLFxuICBURVhUOiAweDEsXG4gIEJJTkFSWTogMHgyLFxuICBDTE9TRTogMHg4LFxuICBQSU5HOiAweDksXG4gIFBPTkc6IDB4QVxufVxuXG5jb25zdCBtYXhVbnNpZ25lZDE2Qml0ID0gMiAqKiAxNiAtIDEgLy8gNjU1MzVcblxuY29uc3QgcGFyc2VyU3RhdGVzID0ge1xuICBJTkZPOiAwLFxuICBQQVlMT0FETEVOR1RIXzE2OiAyLFxuICBQQVlMT0FETEVOR1RIXzY0OiAzLFxuICBSRUFEX0RBVEE6IDRcbn1cblxuY29uc3QgZW1wdHlCdWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrV2ViU29ja2V0VVJMOiBTeW1ib2woJ3VybCcpLFxuICBrUmVhZHlTdGF0ZTogU3ltYm9sKCdyZWFkeSBzdGF0ZScpLFxuICBrQ29udHJvbGxlcjogU3ltYm9sKCdjb250cm9sbGVyJyksXG4gIGtSZXNwb25zZTogU3ltYm9sKCdyZXNwb25zZScpLFxuICBrQmluYXJ5VHlwZTogU3ltYm9sKCdiaW5hcnkgdHlwZScpLFxuICBrU2VudENsb3NlOiBTeW1ib2woJ3NlbnQgY2xvc2UnKSxcbiAga1JlY2VpdmVkQ2xvc2U6IFN5bWJvbCgncmVjZWl2ZWQgY2xvc2UnKSxcbiAga0J5dGVQYXJzZXI6IFN5bWJvbCgnYnl0ZSBwYXJzZXInKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgTWVzc2FnZVBvcnQgfSA9IHJlcXVpcmUoJ3dvcmtlcl90aHJlYWRzJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NvbW1zLmh0bWwjbWVzc2FnZWV2ZW50XG4gKi9cbmNsYXNzIE1lc3NhZ2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnTWVzc2FnZUV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlRXZlbnRJbml0KGV2ZW50SW5pdERpY3QpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IGRhdGEgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZGF0YVxuICB9XG5cbiAgZ2V0IG9yaWdpbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5vcmlnaW5cbiAgfVxuXG4gIGdldCBsYXN0RXZlbnRJZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5sYXN0RXZlbnRJZFxuICB9XG5cbiAgZ2V0IHNvdXJjZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5zb3VyY2VcbiAgfVxuXG4gIGdldCBwb3J0cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgaWYgKCFPYmplY3QuaXNGcm96ZW4odGhpcy4jZXZlbnRJbml0LnBvcnRzKSkge1xuICAgICAgT2JqZWN0LmZyZWV6ZSh0aGlzLiNldmVudEluaXQucG9ydHMpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5wb3J0c1xuICB9XG5cbiAgaW5pdE1lc3NhZ2VFdmVudCAoXG4gICAgdHlwZSxcbiAgICBidWJibGVzID0gZmFsc2UsXG4gICAgY2FuY2VsYWJsZSA9IGZhbHNlLFxuICAgIGRhdGEgPSBudWxsLFxuICAgIG9yaWdpbiA9ICcnLFxuICAgIGxhc3RFdmVudElkID0gJycsXG4gICAgc291cmNlID0gbnVsbCxcbiAgICBwb3J0cyA9IFtdXG4gICkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdNZXNzYWdlRXZlbnQuaW5pdE1lc3NhZ2VFdmVudCcgfSlcblxuICAgIHJldHVybiBuZXcgTWVzc2FnZUV2ZW50KHR5cGUsIHtcbiAgICAgIGJ1YmJsZXMsIGNhbmNlbGFibGUsIGRhdGEsIG9yaWdpbiwgbGFzdEV2ZW50SWQsIHNvdXJjZSwgcG9ydHNcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyN0aGUtY2xvc2VldmVudC1pbnRlcmZhY2VcbiAqL1xuY2xhc3MgQ2xvc2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2xvc2VFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQoZXZlbnRJbml0RGljdClcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzLiNldmVudEluaXQgPSBldmVudEluaXREaWN0XG4gIH1cblxuICBnZXQgd2FzQ2xlYW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lndhc0NsZWFuXG4gIH1cblxuICBnZXQgY29kZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuY29kZVxuICB9XG5cbiAgZ2V0IHJlYXNvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucmVhc29uXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1lcnJvcmV2ZW50LWludGVyZmFjZVxuY2xhc3MgRXJyb3JFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Vycm9yRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdHlwZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyh0eXBlKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5FcnJvckV2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IG1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm1lc3NhZ2VcbiAgfVxuXG4gIGdldCBmaWxlbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZmlsZW5hbWVcbiAgfVxuXG4gIGdldCBsaW5lbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmxpbmVub1xuICB9XG5cbiAgZ2V0IGNvbG5vICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2xub1xuICB9XG5cbiAgZ2V0IGVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5lcnJvclxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ01lc3NhZ2VFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIGRhdGE6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9yaWdpbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGFzdEV2ZW50SWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNvdXJjZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcG9ydHM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGluaXRNZXNzYWdlRXZlbnQ6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENsb3NlRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDbG9zZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgcmVhc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjb2RlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB3YXNDbGVhbjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXJyb3JFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Vycm9yRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtZXNzYWdlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBmaWxlbmFtZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGluZW5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjb2xubzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihNZXNzYWdlUG9ydClcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydFxuKVxuXG5jb25zdCBldmVudEluaXQgPSBbXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ2RhdGEnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55LFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAnb3JpZ2luJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsYXN0RXZlbnRJZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnc291cmNlJyxcbiAgICAvLyBOb2RlIGRvZXNuJ3QgaW1wbGVtZW50IFdpbmRvd1Byb3h5IG9yIFNlcnZpY2VXb3JrZXIsIHNvIHRoZSBvbmx5XG4gICAgLy8gdmFsaWQgdmFsdWUgZm9yIHNvdXJjZSBpcyBhIE1lc3NhZ2VQb3J0LlxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0KSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGtleTogJ3BvcnRzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxNZXNzYWdlUG9ydD4nXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQ2xvc2VFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ3dhc0NsZWFuJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29kZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlYXNvbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5FcnJvckV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnbWVzc2FnZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnZmlsZW5hbWUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2xpbmVubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogMFxuICB9LFxuICB7XG4gICAga2V5OiAnY29sbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2Vycm9yJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTWVzc2FnZUV2ZW50LFxuICBDbG9zZUV2ZW50LFxuICBFcnJvckV2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgTWVzc2FnZUV2ZW50LCBFcnJvckV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNFc3RhYmxpc2hlZCAod3MpIHtcbiAgLy8gSWYgdGhlIHNlcnZlcidzIHJlc3BvbnNlIGlzIHZhbGlkYXRlZCBhcyBwcm92aWRlZCBmb3IgYWJvdmUsIGl0IGlzXG4gIC8vIHNhaWQgdGhhdCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIEVzdGFibGlzaGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgaW4gdGhlIE9QRU4gc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5PUEVOXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NpbmcgKHdzKSB7XG4gIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NJTkdcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHtFdmVudEluaXQgfCB1bmRlZmluZWR9IGV2ZW50SW5pdERpY3RcbiAqL1xuZnVuY3Rpb24gZmlyZUV2ZW50IChlLCB0YXJnZXQsIGV2ZW50Q29uc3RydWN0b3IgPSBFdmVudCwgZXZlbnRJbml0RGljdCkge1xuICAvLyAxLiBJZiBldmVudENvbnN0cnVjdG9yIGlzIG5vdCBnaXZlbiwgdGhlbiBsZXQgZXZlbnRDb25zdHJ1Y3RvciBiZSBFdmVudC5cblxuICAvLyAyLiBMZXQgZXZlbnQgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBldmVudCBnaXZlbiBldmVudENvbnN0cnVjdG9yLFxuICAvLyAgICBpbiB0aGUgcmVsZXZhbnQgcmVhbG0gb2YgdGFyZ2V0LlxuICAvLyAzLiBJbml0aWFsaXplIGV2ZW50XHUyMDE5cyB0eXBlIGF0dHJpYnV0ZSB0byBlLlxuICBjb25zdCBldmVudCA9IG5ldyBldmVudENvbnN0cnVjdG9yKGUsIGV2ZW50SW5pdERpY3QpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbmV3LWNhcFxuXG4gIC8vIDQuIEluaXRpYWxpemUgYW55IG90aGVyIElETCBhdHRyaWJ1dGVzIG9mIGV2ZW50IGFzIGRlc2NyaWJlZCBpbiB0aGVcbiAgLy8gICAgaW52b2NhdGlvbiBvZiB0aGlzIGFsZ29yaXRobS5cblxuICAvLyA1LiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBkaXNwYXRjaGluZyBldmVudCBhdCB0YXJnZXQsIHdpdGggbGVnYWN5IHRhcmdldFxuICAvLyAgICBvdmVycmlkZSBmbGFnIHNldCBpZiBzZXQuXG4gIHRhcmdldC5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIE9wY29kZVxuICogQHBhcmFtIHtCdWZmZXJ9IGRhdGEgYXBwbGljYXRpb24gZGF0YVxuICovXG5mdW5jdGlvbiB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgKHdzLCB0eXBlLCBkYXRhKSB7XG4gIC8vIDEuIElmIHJlYWR5IHN0YXRlIGlzIG5vdCBPUEVOICgxKSwgdGhlbiByZXR1cm4uXG4gIGlmICh3c1trUmVhZHlTdGF0ZV0gIT09IHN0YXRlcy5PUEVOKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBMZXQgZGF0YUZvckV2ZW50IGJlIGRldGVybWluZWQgYnkgc3dpdGNoaW5nIG9uIHR5cGUgYW5kIGJpbmFyeSB0eXBlOlxuICBsZXQgZGF0YUZvckV2ZW50XG5cbiAgaWYgKHR5cGUgPT09IG9wY29kZXMuVEVYVCkge1xuICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgVGV4dFxuICAgIC8vICAgICAgYSBuZXcgRE9NU3RyaW5nIGNvbnRhaW5pbmcgZGF0YVxuICAgIHRyeSB7XG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUoZGF0YSlcbiAgICB9IGNhdGNoIHtcbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgaW52YWxpZCBVVEYtOCBpbiB0ZXh0IGZyYW1lLicpXG4gICAgICByZXR1cm5cbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZSA9PT0gb3Bjb2Rlcy5CSU5BUlkpIHtcbiAgICBpZiAod3Nba0JpbmFyeVR5cGVdID09PSAnYmxvYicpIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImJsb2JcIlxuICAgICAgLy8gICAgICBhIG5ldyBCbG9iIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgICBvYmplY3QsIHRoYXQgcmVwcmVzZW50cyBkYXRhIGFzIGl0cyByYXcgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IEJsb2IoW2RhdGFdKVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJhcnJheWJ1ZmZlclwiXG4gICAgICAvLyAgICAgIGEgbmV3IEFycmF5QnVmZmVyIG9iamVjdCwgY3JlYXRlZCBpbiB0aGUgcmVsZXZhbnQgUmVhbG0gb2YgdGhlXG4gICAgICAvLyAgICAgIFdlYlNvY2tldCBvYmplY3QsIHdob3NlIGNvbnRlbnRzIGFyZSBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgVWludDhBcnJheShkYXRhKS5idWZmZXJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdFx1MjAxOXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIE1lc3NhZ2VFdmVudCwge1xuICAgIG9yaWdpbjogd3Nba1dlYlNvY2tldFVSTF0ub3JpZ2luLFxuICAgIGRhdGE6IGRhdGFGb3JFdmVudFxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1XG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjYxNlxuICogQHNlZSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD0zOTg0MDdcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm90b2NvbFxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3VicHJvdG9jb2wgKHByb3RvY29sKSB7XG4gIC8vIElmIHByZXNlbnQsIHRoaXMgdmFsdWUgaW5kaWNhdGVzIG9uZVxuICAvLyBvciBtb3JlIGNvbW1hLXNlcGFyYXRlZCBzdWJwcm90b2NvbCB0aGUgY2xpZW50IHdpc2hlcyB0byBzcGVhayxcbiAgLy8gb3JkZXJlZCBieSBwcmVmZXJlbmNlLiAgVGhlIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhpcyB2YWx1ZVxuICAvLyBNVVNUIGJlIG5vbi1lbXB0eSBzdHJpbmdzIHdpdGggY2hhcmFjdGVycyBpbiB0aGUgcmFuZ2UgVSswMDIxIHRvXG4gIC8vIFUrMDA3RSBub3QgaW5jbHVkaW5nIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGFzIGRlZmluZWQgaW5cbiAgLy8gW1JGQzI2MTZdIGFuZCBNVVNUIGFsbCBiZSB1bmlxdWUgc3RyaW5ncy5cbiAgaWYgKHByb3RvY29sLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBjaGFyIG9mIHByb3RvY29sKSB7XG4gICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHxcbiAgICAgIGNvZGUgPiAweDdFIHx8XG4gICAgICBjaGFyID09PSAnKCcgfHxcbiAgICAgIGNoYXIgPT09ICcpJyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnPicgfHxcbiAgICAgIGNoYXIgPT09ICdAJyB8fFxuICAgICAgY2hhciA9PT0gJywnIHx8XG4gICAgICBjaGFyID09PSAnOycgfHxcbiAgICAgIGNoYXIgPT09ICc6JyB8fFxuICAgICAgY2hhciA9PT0gJ1xcXFwnIHx8XG4gICAgICBjaGFyID09PSAnXCInIHx8XG4gICAgICBjaGFyID09PSAnLycgfHxcbiAgICAgIGNoYXIgPT09ICdbJyB8fFxuICAgICAgY2hhciA9PT0gJ10nIHx8XG4gICAgICBjaGFyID09PSAnPycgfHxcbiAgICAgIGNoYXIgPT09ICc9JyB8fFxuICAgICAgY2hhciA9PT0gJ3snIHx8XG4gICAgICBjaGFyID09PSAnfScgfHxcbiAgICAgIGNvZGUgPT09IDMyIHx8IC8vIFNQXG4gICAgICBjb2RlID09PSA5IC8vIEhUXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy00XG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkU3RhdHVzQ29kZSAoY29kZSkge1xuICBpZiAoY29kZSA+PSAxMDAwICYmIGNvZGUgPCAxMDE1KSB7XG4gICAgcmV0dXJuIChcbiAgICAgIGNvZGUgIT09IDEwMDQgJiYgLy8gcmVzZXJ2ZWRcbiAgICAgIGNvZGUgIT09IDEwMDUgJiYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgICBjb2RlICE9PSAxMDA2IC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgIClcbiAgfVxuXG4gIHJldHVybiBjb2RlID49IDMwMDAgJiYgY29kZSA8PSA0OTk5XG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAqL1xuZnVuY3Rpb24gZmFpbFdlYnNvY2tldENvbm5lY3Rpb24gKHdzLCByZWFzb24pIHtcbiAgY29uc3QgeyBba0NvbnRyb2xsZXJdOiBjb250cm9sbGVyLCBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgY29udHJvbGxlci5hYm9ydCgpXG5cbiAgaWYgKHJlc3BvbnNlPy5zb2NrZXQgJiYgIXJlc3BvbnNlLnNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICByZXNwb25zZS5zb2NrZXQuZGVzdHJveSgpXG4gIH1cblxuICBpZiAocmVhc29uKSB7XG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCBFcnJvckV2ZW50LCB7XG4gICAgICBlcnJvcjogbmV3IEVycm9yKHJlYXNvbilcbiAgICB9KVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzQ2xvc2VkLFxuICBmaXJlRXZlbnQsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHVpZCwgc3RhdGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2Vcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBmaXJlRXZlbnQsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaGVhZGVycycpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IGtIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuY2hhbm5lbHMub3BlbiA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0Om9wZW4nKVxuY2hhbm5lbHMuY2xvc2UgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpjbG9zZScpXG5jaGFubmVscy5zb2NrZXRFcnJvciA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnNvY2tldF9lcnJvcicpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG59IGNhdGNoIHtcblxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC13ZWJzb2NrZXQtZXN0YWJsaXNoXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcHJvdG9jb2xzXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0geyhyZXNwb25zZTogYW55KSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIHdzLCBvbkVzdGFibGlzaCwgb3B0aW9ucykge1xuICAvLyAxLiBMZXQgcmVxdWVzdFVSTCBiZSBhIGNvcHkgb2YgdXJsLCB3aXRoIGl0cyBzY2hlbWUgc2V0IHRvIFwiaHR0cFwiLCBpZiB1cmxcdTIwMTlzXG4gIC8vICAgIHNjaGVtZSBpcyBcIndzXCIsIGFuZCB0byBcImh0dHBzXCIgb3RoZXJ3aXNlLlxuICBjb25zdCByZXF1ZXN0VVJMID0gdXJsXG5cbiAgcmVxdWVzdFVSTC5wcm90b2NvbCA9IHVybC5wcm90b2NvbCA9PT0gJ3dzOicgPyAnaHR0cDonIDogJ2h0dHBzOidcblxuICAvLyAyLiBMZXQgcmVxdWVzdCBiZSBhIG5ldyByZXF1ZXN0LCB3aG9zZSBVUkwgaXMgcmVxdWVzdFVSTCwgY2xpZW50IGlzIGNsaWVudCxcbiAgLy8gICAgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJub25lXCIsIHJlZmVycmVyIGlzIFwibm8tcmVmZXJyZXJcIiwgbW9kZSBpc1xuICAvLyAgICBcIndlYnNvY2tldFwiLCBjcmVkZW50aWFscyBtb2RlIGlzIFwiaW5jbHVkZVwiLCBjYWNoZSBtb2RlIGlzIFwibm8tc3RvcmVcIiAsXG4gIC8vICAgIGFuZCByZWRpcmVjdCBtb2RlIGlzIFwiZXJyb3JcIi5cbiAgY29uc3QgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHtcbiAgICB1cmxMaXN0OiBbcmVxdWVzdFVSTF0sXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVtrSGVhZGVyc0xpc3RdXG5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0ID0gaGVhZGVyc0xpc3RcbiAgfVxuXG4gIC8vIDMuIEFwcGVuZCAoYFVwZ3JhZGVgLCBgd2Vic29ja2V0YCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDQuIEFwcGVuZCAoYENvbm5lY3Rpb25gLCBgVXBncmFkZWApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyBOb3RlOiBib3RoIG9mIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHVuZGljaSBjdXJyZW50bHkuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2Jsb2IvNjhjMjY5YzQxNDRjNDQ2ZjNmMTIyMDk1MTMzOGRhZWY0YTZiNWVjNC9saWIvY2xpZW50LmpzI0wxMzk3XG5cbiAgLy8gNS4gTGV0IGtleVZhbHVlIGJlIGEgbm9uY2UgY29uc2lzdGluZyBvZiBhIHJhbmRvbWx5IHNlbGVjdGVkXG4gIC8vICAgIDE2LWJ5dGUgdmFsdWUgdGhhdCBoYXMgYmVlbiBmb3JnaXZpbmctYmFzZTY0LWVuY29kZWQgYW5kXG4gIC8vICAgIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgY29uc3Qga2V5VmFsdWUgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoMTYpLnRvU3RyaW5nKCdiYXNlNjQnKVxuXG4gIC8vIDYuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtS2V5YCwga2V5VmFsdWUpIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1rZXknLCBrZXlWYWx1ZSlcblxuICAvLyA3LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LVZlcnNpb25gLCBgMTNgKSB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtdmVyc2lvbicsICcxMycpXG5cbiAgLy8gOC4gRm9yIGVhY2ggcHJvdG9jb2wgaW4gcHJvdG9jb2xzLCBjb21iaW5lXG4gIC8vICAgIChgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAsIHByb3RvY29sKSBpbiByZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gICAgbGlzdC5cbiAgZm9yIChjb25zdCBwcm90b2NvbCBvZiBwcm90b2NvbHMpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHByb3RvY29sKVxuICB9XG5cbiAgLy8gOS4gTGV0IHBlcm1lc3NhZ2VEZWZsYXRlIGJlIGEgdXNlci1hZ2VudCBkZWZpbmVkXG4gIC8vICAgIFwicGVybWVzc2FnZS1kZWZsYXRlXCIgZXh0ZW5zaW9uIGhlYWRlciB2YWx1ZS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21vemlsbGEvZ2Vja28tZGV2L2Jsb2IvY2U3ODIzNGY1ZTY1M2E1ZDM5MTY4MTNmZjk5MGYwNTM1MTAyMjdiYy9uZXR3ZXJrL3Byb3RvY29sL3dlYnNvY2tldC9XZWJTb2NrZXRDaGFubmVsLmNwcCNMMjY3M1xuICAvLyBUT0RPOiBlbmFibGUgb25jZSBwZXJtZXNzYWdlLWRlZmxhdGUgaXMgc3VwcG9ydGVkXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJycgLy8gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgMTUnXG5cbiAgLy8gMTAuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9uc2AsIHBlcm1lc3NhZ2VEZWZsYXRlKSB0b1xuICAvLyAgICAgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnLCBwZXJtZXNzYWdlRGVmbGF0ZSlcblxuICAvLyAxMS4gRmV0Y2ggcmVxdWVzdCB3aXRoIHVzZVBhcmFsbGVsUXVldWUgc2V0IHRvIHRydWUsIGFuZFxuICAvLyAgICAgcHJvY2Vzc1Jlc3BvbnNlIGdpdmVuIHJlc3BvbnNlIGJlaW5nIHRoZXNlIHN0ZXBzOlxuICBjb25zdCBjb250cm9sbGVyID0gZmV0Y2hpbmcoe1xuICAgIHJlcXVlc3QsXG4gICAgdXNlUGFyYWxsZWxRdWV1ZTogdHJ1ZSxcbiAgICBkaXNwYXRjaGVyOiBvcHRpb25zLmRpc3BhdGNoZXIgPz8gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpLFxuICAgIHByb2Nlc3NSZXNwb25zZSAocmVzcG9uc2UpIHtcbiAgICAgIC8vIDEuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciBvciBpdHMgc3RhdHVzIGlzIG5vdCAxMDEsXG4gICAgICAvLyAgICBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InIHx8IHJlc3BvbnNlLnN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgbmV0d29yayBlcnJvciBvciBub24tMTAxIHN0YXR1cyBjb2RlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBwcm90b2NvbHMgaXMgbm90IHRoZSBlbXB0eSBsaXN0IGFuZCBleHRyYWN0aW5nIGhlYWRlclxuICAgICAgLy8gICAgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGFuZCByZXNwb25zZVx1MjAxOXNcbiAgICAgIC8vICAgIGhlYWRlciBsaXN0IHJlc3VsdHMgaW4gbnVsbCwgZmFpbHVyZSwgb3IgdGhlIGVtcHR5IGJ5dGVcbiAgICAgIC8vICAgIHNlcXVlbmNlLCB0aGVuIGZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgaWYgKHByb3RvY29scy5sZW5ndGggIT09IDAgJiYgIXJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3QgcmVzcG9uZCB3aXRoIHNlbnQgcHJvdG9jb2xzLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBGb2xsb3cgdGhlIHJlcXVpcmVtZW50cyBzdGF0ZWQgc3RlcCAyIHRvIHN0ZXAgNiwgaW5jbHVzaXZlLFxuICAgICAgLy8gICAgb2YgdGhlIGxhc3Qgc2V0IG9mIHN0ZXBzIGluIHNlY3Rpb24gNC4xIG9mIFRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgIFByb3RvY29sIHRvIHZhbGlkYXRlIHJlc3BvbnNlLiBUaGlzIGVpdGhlciByZXN1bHRzIGluIGZhaWxcbiAgICAgIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBvciB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXNcbiAgICAgIC8vICAgIGVzdGFibGlzaGVkLlxuXG4gICAgICAvLyAyLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYW4gfFVwZ3JhZGV8IGhlYWRlciBmaWVsZCBvciB0aGUgfFVwZ3JhZGV8XG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgY29udGFpbnMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBhbiBBU0NJSSBjYXNlLVxuICAgICAgLy8gICAgaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSB2YWx1ZSBcIndlYnNvY2tldFwiLCB0aGUgY2xpZW50IE1VU1RcbiAgICAgIC8vICAgIF9GYWlsIHRoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbl8uXG4gICAgICBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdVcGdyYWRlJyk/LnRvTG93ZXJDYXNlKCkgIT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IFVwZ3JhZGUgaGVhZGVyIHRvIFwid2Vic29ja2V0XCIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhIHxDb25uZWN0aW9ufCBoZWFkZXIgZmllbGQgb3IgdGhlXG4gICAgICAvLyAgICB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIGRvZXNuJ3QgY29udGFpbiBhIHRva2VuIHRoYXQgaXMgYW5cbiAgICAgIC8vICAgIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIHRoZSB2YWx1ZSBcIlVwZ3JhZGVcIiwgdGhlIGNsaWVudFxuICAgICAgLy8gICAgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnQ29ubmVjdGlvbicpPy50b0xvd2VyQ2FzZSgpICE9PSAndXBncmFkZScpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdTZXJ2ZXIgZGlkIG5vdCBzZXQgQ29ubmVjdGlvbiBoZWFkZXIgdG8gXCJ1cGdyYWRlXCIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIHRoZSByZXNwb25zZSBsYWNrcyBhIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgaGVhZGVyIGZpZWxkIG9yXG4gICAgICAvLyAgICB0aGUgfFNlYy1XZWJTb2NrZXQtQWNjZXB0fCBjb250YWlucyBhIHZhbHVlIG90aGVyIHRoYW4gdGhlXG4gICAgICAvLyAgICBiYXNlNjQtZW5jb2RlZCBTSEEtMSBvZiB0aGUgY29uY2F0ZW5hdGlvbiBvZiB0aGUgfFNlYy1XZWJTb2NrZXQtXG4gICAgICAvLyAgICBLZXl8IChhcyBhIHN0cmluZywgbm90IGJhc2U2NC1kZWNvZGVkKSB3aXRoIHRoZSBzdHJpbmcgXCIyNThFQUZBNS1cbiAgICAgIC8vICAgIEU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMVwiIGJ1dCBpZ25vcmluZyBhbnkgbGVhZGluZyBhbmRcbiAgICAgIC8vICAgIHRyYWlsaW5nIHdoaXRlc3BhY2UsIHRoZSBjbGllbnQgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1dTQWNjZXB0ID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LUFjY2VwdCcpXG4gICAgICBjb25zdCBkaWdlc3QgPSBjcnlwdG8uY3JlYXRlSGFzaCgnc2hhMScpLnVwZGF0ZShrZXlWYWx1ZSArIHVpZCkuZGlnZXN0KCdiYXNlNjQnKVxuICAgICAgaWYgKHNlY1dTQWNjZXB0ICE9PSBkaWdlc3QpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdJbmNvcnJlY3QgaGFzaCByZWNlaXZlZCBpbiBTZWMtV2ViU29ja2V0LUFjY2VwdCBoZWFkZXIuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIHxTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnN8IGhlYWRlclxuICAgICAgLy8gICAgZmllbGQgYW5kIHRoaXMgaGVhZGVyIGZpZWxkIGluZGljYXRlcyB0aGUgdXNlIG9mIGFuIGV4dGVuc2lvblxuICAgICAgLy8gICAgdGhhdCB3YXMgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXNcbiAgICAgIC8vICAgIGluZGljYXRlZCBhbiBleHRlbnNpb24gbm90IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50KSwgdGhlIGNsaWVudFxuICAgICAgLy8gICAgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLiAgKFRoZSBwYXJzaW5nIG9mIHRoaXNcbiAgICAgIC8vICAgIGhlYWRlciBmaWVsZCB0byBkZXRlcm1pbmUgd2hpY2ggZXh0ZW5zaW9ucyBhcmUgcmVxdWVzdGVkIGlzXG4gICAgICAvLyAgICBkaXNjdXNzZWQgaW4gU2VjdGlvbiA5LjEuKVxuICAgICAgY29uc3Qgc2VjRXh0ZW5zaW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnKVxuXG4gICAgICBpZiAoc2VjRXh0ZW5zaW9uICE9PSBudWxsICYmIHNlY0V4dGVuc2lvbiAhPT0gcGVybWVzc2FnZURlZmxhdGUpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBkaWZmZXJlbnQgcGVybWVzc2FnZS1kZWZsYXRlIHRoYW4gdGhlIG9uZSBzZXQuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIElmIHRoZSByZXNwb25zZSBpbmNsdWRlcyBhIHxTZWMtV2ViU29ja2V0LVByb3RvY29sfCBoZWFkZXIgZmllbGRcbiAgICAgIC8vICAgIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhIHN1YnByb3RvY29sIHRoYXQgd2FzXG4gICAgICAvLyAgICBub3QgcHJlc2VudCBpbiB0aGUgY2xpZW50J3MgaGFuZHNoYWtlICh0aGUgc2VydmVyIGhhcyBpbmRpY2F0ZWQgYVxuICAgICAgLy8gICAgc3VicHJvdG9jb2wgbm90IHJlcXVlc3RlZCBieSB0aGUgY2xpZW50KSwgdGhlIGNsaWVudCBNVVNUIF9GYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgY29uc3Qgc2VjUHJvdG9jb2wgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKVxuXG4gICAgICBpZiAoc2VjUHJvdG9jb2wgIT09IG51bGwgJiYgc2VjUHJvdG9jb2wgIT09IHJlcXVlc3QuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJykpIHtcbiAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICAgICAgcmVzcG9uc2Uuc29ja2V0Lm9uKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgICAgIGlmIChjaGFubmVscy5vcGVuLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgIGNoYW5uZWxzLm9wZW4ucHVibGlzaCh7XG4gICAgICAgICAgYWRkcmVzczogcmVzcG9uc2Uuc29ja2V0LmFkZHJlc3MoKSxcbiAgICAgICAgICBwcm90b2NvbDogc2VjUHJvdG9jb2wsXG4gICAgICAgICAgZXh0ZW5zaW9uczogc2VjRXh0ZW5zaW9uXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIG9uRXN0YWJsaXNoKHJlc3BvbnNlKVxuICAgIH1cbiAgfSlcblxuICByZXR1cm4gY29udHJvbGxlclxufVxuXG4vKipcbiAqIEBwYXJhbSB7QnVmZmVyfSBjaHVua1xuICovXG5mdW5jdGlvbiBvblNvY2tldERhdGEgKGNodW5rKSB7XG4gIGlmICghdGhpcy53c1trQnl0ZVBhcnNlcl0ud3JpdGUoY2h1bmspKSB7XG4gICAgdGhpcy5wYXVzZSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS40XG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0Q2xvc2UgKCkge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSAmJiB3c1trUmVjZWl2ZWRDbG9zZV1cblxuICBsZXQgY29kZSA9IDEwMDVcbiAgbGV0IHJlYXNvbiA9ICcnXG5cbiAgY29uc3QgcmVzdWx0ID0gd3Nba0J5dGVQYXJzZXJdLmNsb3NpbmdJbmZvXG5cbiAgaWYgKHJlc3VsdCkge1xuICAgIGNvZGUgPSByZXN1bHQuY29kZSA/PyAxMDA1XG4gICAgcmVhc29uID0gcmVzdWx0LnJlYXNvblxuICB9IGVsc2UgaWYgKCF3c1trU2VudENsb3NlXSkge1xuICAgIC8vIElmIF9UaGUgV2ViU29ja2V0XG4gICAgLy8gQ29ubmVjdGlvbiBpcyBDbG9zZWRfIGFuZCBubyBDbG9zZSBjb250cm9sIGZyYW1lIHdhcyByZWNlaXZlZCBieSB0aGVcbiAgICAvLyBlbmRwb2ludCAoc3VjaCBhcyBjb3VsZCBvY2N1ciBpZiB0aGUgdW5kZXJseWluZyB0cmFuc3BvcnQgY29ubmVjdGlvblxuICAgIC8vIGlzIGxvc3QpLCBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzIGNvbnNpZGVyZWQgdG8gYmVcbiAgICAvLyAxMDA2LlxuICAgIGNvZGUgPSAxMDA2XG4gIH1cblxuICAvLyAxLiBDaGFuZ2UgdGhlIHJlYWR5IHN0YXRlIHRvIENMT1NFRCAoMykuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TRURcblxuICAvLyAyLiBJZiB0aGUgdXNlciBhZ2VudCB3YXMgcmVxdWlyZWQgdG8gZmFpbCB0aGUgV2ViU29ja2V0XG4gIC8vICAgIGNvbm5lY3Rpb24sIG9yIGlmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiB3YXMgY2xvc2VkXG4gIC8vICAgIGFmdGVyIGJlaW5nIGZsYWdnZWQgYXMgZnVsbCwgZmlyZSBhbiBldmVudCBuYW1lZCBlcnJvclxuICAvLyAgICBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDMuIEZpcmUgYW4gZXZlbnQgbmFtZWQgY2xvc2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsXG4gIC8vICAgIHVzaW5nIENsb3NlRXZlbnQsIHdpdGggdGhlIHdhc0NsZWFuIGF0dHJpYnV0ZVxuICAvLyAgICBpbml0aWFsaXplZCB0byB0cnVlIGlmIHRoZSBjb25uZWN0aW9uIGNsb3NlZCBjbGVhbmx5XG4gIC8vICAgIGFuZCBmYWxzZSBvdGhlcndpc2UsIHRoZSBjb2RlIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0b1xuICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2UgY29kZSwgYW5kIHRoZSByZWFzb25cbiAgLy8gICAgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgVVRGLThcbiAgLy8gICAgZGVjb2RlIHdpdGhvdXQgQk9NIHRvIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZVxuICAvLyAgICByZWFzb24uXG4gIGZpcmVFdmVudCgnY2xvc2UnLCB3cywgQ2xvc2VFdmVudCwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb25cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhVbnNpZ25lZDE2Qml0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpXG59IGNhdGNoIHtcblxufVxuXG5jbGFzcyBXZWJzb2NrZXRGcmFtZVNlbmQge1xuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ8dW5kZWZpbmVkfSBkYXRhXG4gICAqL1xuICBjb25zdHJ1Y3RvciAoZGF0YSkge1xuICAgIHRoaXMuZnJhbWVEYXRhID0gZGF0YVxuICAgIHRoaXMubWFza0tleSA9IGNyeXB0by5yYW5kb21CeXRlcyg0KVxuICB9XG5cbiAgY3JlYXRlRnJhbWUgKG9wY29kZSkge1xuICAgIGNvbnN0IGJvZHlMZW5ndGggPSB0aGlzLmZyYW1lRGF0YT8uYnl0ZUxlbmd0aCA/PyAwXG5cbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICBsZXQgcGF5bG9hZExlbmd0aCA9IGJvZHlMZW5ndGggLy8gMC0xMjVcbiAgICBsZXQgb2Zmc2V0ID0gNlxuXG4gICAgaWYgKGJvZHlMZW5ndGggPiBtYXhVbnNpZ25lZDE2Qml0KSB7XG4gICAgICBvZmZzZXQgKz0gOCAvLyBwYXlsb2FkIGxlbmd0aCBpcyBuZXh0IDggYnl0ZXNcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjdcbiAgICB9IGVsc2UgaWYgKGJvZHlMZW5ndGggPiAxMjUpIHtcbiAgICAgIG9mZnNldCArPSAyIC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgMiBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyNlxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShib2R5TGVuZ3RoICsgb2Zmc2V0KVxuXG4gICAgLy8gQ2xlYXIgZmlyc3QgMiBieXRlcywgZXZlcnl0aGluZyBlbHNlIGlzIG92ZXJ3cml0dGVuXG4gICAgYnVmZmVyWzBdID0gYnVmZmVyWzFdID0gMFxuICAgIGJ1ZmZlclswXSB8PSAweDgwIC8vIEZJTlxuICAgIGJ1ZmZlclswXSA9IChidWZmZXJbMF0gJiAweEYwKSArIG9wY29kZSAvLyBvcGNvZGVcblxuICAgIC8qISB3cy4gTUlUIExpY2Vuc2UuIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPiAqL1xuICAgIGJ1ZmZlcltvZmZzZXQgLSA0XSA9IHRoaXMubWFza0tleVswXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAzXSA9IHRoaXMubWFza0tleVsxXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAyXSA9IHRoaXMubWFza0tleVsyXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAxXSA9IHRoaXMubWFza0tleVszXVxuXG4gICAgYnVmZmVyWzFdID0gcGF5bG9hZExlbmd0aFxuXG4gICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoYm9keUxlbmd0aCwgMilcbiAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgLy8gQ2xlYXIgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGhcbiAgICAgIGJ1ZmZlclsyXSA9IGJ1ZmZlclszXSA9IDBcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnRCRShib2R5TGVuZ3RoLCA0LCA2KVxuICAgIH1cblxuICAgIGJ1ZmZlclsxXSB8PSAweDgwIC8vIE1BU0tcblxuICAgIC8vIG1hc2sgYm9keVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgaSsrKSB7XG4gICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSB0aGlzLmZyYW1lRGF0YVtpXSBeIHRoaXMubWFza0tleVtpICUgNF1cbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYnNvY2tldEZyYW1lU2VuZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdyaXRhYmxlIH0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3QgZGlhZ25vc3RpY3NDaGFubmVsID0gcmVxdWlyZSgnZGlhZ25vc3RpY3NfY2hhbm5lbCcpXG5jb25zdCB7IHBhcnNlclN0YXRlcywgb3Bjb2Rlcywgc3RhdGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrUmVhZHlTdGF0ZSwga1NlbnRDbG9zZSwga1Jlc3BvbnNlLCBrUmVjZWl2ZWRDbG9zZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNWYWxpZFN0YXR1c0NvZGUsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8vIFRoaXMgY29kZSB3YXMgaW5mbHVlbmNlZCBieSB3cyByZWxlYXNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UuXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTEgRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+XG4vLyBDb3B5cmlnaHQgKGMpIDIwMTMgQXJub3V0IEthemVtaWVyIGFuZCBjb250cmlidXRvcnNcbi8vIENvcHlyaWdodCAoYykgMjAxNiBMdWlnaSBQaW5jYSBhbmQgY29udHJpYnV0b3JzXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLnBpbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJylcbmNoYW5uZWxzLnBvbmcgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwb25nJylcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcblxuICAjc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICNpbmZvID0ge31cbiAgI2ZyYWdtZW50cyA9IFtdXG5cbiAgY29uc3RydWN0b3IgKHdzKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy53cyA9IHdzXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG5cbiAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHdoZW5ldmVyIGEgbmV3IGNodW5rIGlzIHJlY2VpdmVkLlxuICAgKiBDYWxsYmFjayBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlcmUgYXJlIG5vIG1vcmUgY2h1bmtzIGJ1ZmZlcmluZyxcbiAgICogb3Igbm90IGVub3VnaCBieXRlcyBhcmUgYnVmZmVyZWQgdG8gcGFyc2UuXG4gICAqL1xuICBydW4gKGNhbGxiYWNrKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLklORk8pIHtcbiAgICAgICAgLy8gSWYgdGhlcmUgYXJlbid0IGVub3VnaCBieXRlcyB0byBwYXJzZSB0aGUgcGF5bG9hZCBsZW5ndGgsIGV0Yy5cbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8uZmluID0gKGJ1ZmZlclswXSAmIDB4ODApICE9PSAwXG4gICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID0gYnVmZmVyWzBdICYgMHgwRlxuXG4gICAgICAgIC8vIElmIHdlIHJlY2VpdmUgYSBmcmFnbWVudGVkIG1lc3NhZ2UsIHdlIHVzZSB0aGUgdHlwZSBvZiB0aGUgZmlyc3RcbiAgICAgICAgLy8gZnJhbWUgdG8gcGFyc2UgdGhlIGZ1bGwgbWVzc2FnZSBhcyBiaW5hcnkvdGV4dCwgd2hlbiBpdCdzIHRlcm1pbmF0ZWRcbiAgICAgICAgdGhpcy4jaW5mby5vcmlnaW5hbE9wY29kZSA/Pz0gdGhpcy4jaW5mby5vcGNvZGVcblxuICAgICAgICB0aGlzLiNpbmZvLmZyYWdtZW50ZWQgPSAhdGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQ09OVElOVUFUSU9OXG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiB0aGlzLiNpbmZvLm9wY29kZSAhPT0gb3Bjb2Rlcy5CSU5BUlkgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuVEVYVCkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBheWxvYWRMZW5ndGggPSBidWZmZXJbMV0gJiAweDdGXG5cbiAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPD0gMTI1KSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gcGF5bG9hZExlbmd0aFxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTZcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHBheWxvYWRMZW5ndGggPiAxMjUpIHtcbiAgICAgICAgICAvLyBBIGZyYWdtZW50ZWQgZnJhbWUgY2FuJ3QgYmUgZnJhZ21lbnRlZCBpdHNlbGZcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnRnJhZ21lbnRlZCBmcmFtZSBleGNlZWRlZCAxMjUgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgICAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORyB8fFxuICAgICAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpICYmXG4gICAgICAgICAgcGF5bG9hZExlbmd0aCA+IDEyNVxuICAgICAgICApIHtcbiAgICAgICAgICAvLyBDb250cm9sIGZyYW1lcyBjYW4gaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIDEyNSBieXRlcyBNQVhcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUGF5bG9hZCBsZW5ndGggZm9yIGNvbnRyb2wgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ0xPU0UpIHtcbiAgICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIGNsb3NlIGZyYW1lIHdpdGggYSAxLWJ5dGUgYm9keS4nKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jaW5mby5jbG9zZUluZm8gPSB0aGlzLnBhcnNlQ2xvc2VCb2R5KGZhbHNlLCBib2R5KVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tTZW50Q2xvc2VdKSB7XG4gICAgICAgICAgICAvLyBJZiBhbiBlbmRwb2ludCByZWNlaXZlcyBhIENsb3NlIGZyYW1lIGFuZCBkaWQgbm90IHByZXZpb3VzbHkgc2VuZCBhXG4gICAgICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgICAgIC8vIHNlbmRpbmcgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZSwgdGhlIGVuZHBvaW50IHR5cGljYWxseSBlY2hvcyB0aGVcbiAgICAgICAgICAgIC8vIHN0YXR1cyBjb2RlIGl0IHJlY2VpdmVkLilcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgICAgIGJvZHkud3JpdGVVSW50MTZCRSh0aGlzLiNpbmZvLmNsb3NlSW5mby5jb2RlLCAwKVxuICAgICAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShcbiAgICAgICAgICAgICAgY2xvc2VGcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSxcbiAgICAgICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgICAgIGlmICghZXJyKSB7XG4gICAgICAgICAgICAgICAgICB0aGlzLndzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAgICAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gICAgICAgICAgdGhpcy53c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgICAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICAgICAgdGhpcy5lbmQoKVxuXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUElORykge1xuICAgICAgICAgIC8vIFVwb24gcmVjZWlwdCBvZiBhIFBpbmcgZnJhbWUsIGFuIGVuZHBvaW50IE1VU1Qgc2VuZCBhIFBvbmcgZnJhbWUgaW5cbiAgICAgICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgICAgICAvLyBBIFBvbmcgZnJhbWUgc2VudCBpbiByZXNwb25zZSB0byBhIFBpbmcgZnJhbWUgbXVzdCBoYXZlIGlkZW50aWNhbFxuICAgICAgICAgIC8vIFwiQXBwbGljYXRpb24gZGF0YVwiXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlBPTkcpKVxuXG4gICAgICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgICBjaGFubmVscy5waW5nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNpbmZvLm9wY29kZSA9PT0gb3Bjb2Rlcy5QT05HKSB7XG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIE1BWSBiZSBzZW50IHVuc29saWNpdGVkLiAgVGhpcyBzZXJ2ZXMgYXMgYVxuICAgICAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgICAgIC8vIG5vdCBleHBlY3RlZC5cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIGlmIChjaGFubmVscy5wb25nLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICAgICAgY29udGludWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNikge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gYnVmZmVyLnJlYWRVSW50MTZCRSgwKVxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzY0KSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgOCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoOClcbiAgICAgICAgY29uc3QgdXBwZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDApXG5cbiAgICAgICAgLy8gMl4zMSBpcyB0aGUgbWF4aW5pbXVtIGJ5dGVzIGFuIGFycmF5YnVmZmVyIGNhbiBjb250YWluXG4gICAgICAgIC8vIG9uIDMyLWJpdCBzeXN0ZW1zLiBBbHRob3VnaCwgb24gNjQtYml0IHN5c3RlbXMsIHRoaXMgaXNcbiAgICAgICAgLy8gMl41My0xIGJ5dGVzLlxuICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9KYXZhU2NyaXB0L1JlZmVyZW5jZS9FcnJvcnMvSW52YWxpZF9hcnJheV9sZW5ndGhcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL2NvbW1vbi9nbG9iYWxzLmg7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWU7YnB2PTE7YnB0PTE7bD0xMjc1XG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9vYmplY3RzL2pzLWFycmF5LWJ1ZmZlci5oO2w9MzQ7ZHJjPTE5NDYyMTJhYzAxMDA2NjhmMTRlYjllMjg0M2JkZDg0NmU1MTBhMWVcbiAgICAgICAgaWYgKHVwcGVyID4gMiAqKiAzMSAtIDEpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgcGF5bG9hZCBsZW5ndGggPiAyXjMxIGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsb3dlciA9IGJ1ZmZlci5yZWFkVUludDMyQkUoNClcblxuICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSAodXBwZXIgPDwgOCkgKyBsb3dlclxuICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgIH0gZWxzZSBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5SRUFEX0RBVEEpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpIHtcbiAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBzdGlsbCBtb3JlIGRhdGEgaW4gdGhpcyBjaHVuayB0aGF0IG5lZWRzIHRvIGJlIHJlYWRcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPj0gdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIHNlcnZlciBzZW50IG11bHRpcGxlIGZyYW1lcyBpbiBhIHNpbmdsZSBjaHVua1xuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZSh0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICB0aGlzLiNmcmFnbWVudHMucHVzaChib2R5KVxuXG4gICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIHVuZnJhZ21lbnRlZCwgb3IgYSBmcmFnbWVudGVkIGZyYW1lIHdhcyB0ZXJtaW5hdGVkLFxuICAgICAgICAgIC8vIGEgbWVzc2FnZSB3YXMgcmVjZWl2ZWRcbiAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZnJhZ21lbnRlZCB8fCAodGhpcy4jaW5mby5maW4gJiYgdGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuQ09OVElOVUFUSU9OKSkge1xuICAgICAgICAgICAgY29uc3QgZnVsbE1lc3NhZ2UgPSBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cylcblxuICAgICAgICAgICAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkKHRoaXMud3MsIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUsIGZ1bGxNZXNzYWdlKVxuXG4gICAgICAgICAgICB0aGlzLiNpbmZvID0ge31cbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPSAwXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0ID4gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUYWtlIG4gYnl0ZXMgZnJvbSB0aGUgYnVmZmVyZWQgQnVmZmVyc1xuICAgKiBAcGFyYW0ge251bWJlcn0gblxuICAgKiBAcmV0dXJucyB7QnVmZmVyfG51bGx9XG4gICAqL1xuICBjb25zdW1lIChuKSB7XG4gICAgaWYgKG4gPiB0aGlzLiNieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChvbmx5Q29kZSwgZGF0YSkge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS41XG4gICAgLyoqIEB0eXBlIHtudW1iZXJ8dW5kZWZpbmVkfSAqL1xuICAgIGxldCBjb2RlXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPj0gMikge1xuICAgICAgLy8gX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpc1xuICAgICAgLy8gZGVmaW5lZCBhcyB0aGUgc3RhdHVzIGNvZGUgKFNlY3Rpb24gNy40KSBjb250YWluZWQgaW4gdGhlIGZpcnN0IENsb3NlXG4gICAgICAvLyBjb250cm9sIGZyYW1lIHJlY2VpdmVkIGJ5IHRoZSBhcHBsaWNhdGlvblxuICAgICAgY29kZSA9IGRhdGEucmVhZFVJbnQxNkJFKDApXG4gICAgfVxuXG4gICAgaWYgKG9ubHlDb2RlKSB7XG4gICAgICBpZiAoIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB7IGNvZGUgfVxuICAgIH1cblxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTcuMS42XG4gICAgLyoqIEB0eXBlIHtCdWZmZXJ9ICovXG4gICAgbGV0IHJlYXNvbiA9IGRhdGEuc3ViYXJyYXkoMilcblxuICAgIC8vIFJlbW92ZSBCT01cbiAgICBpZiAocmVhc29uWzBdID09PSAweEVGICYmIHJlYXNvblsxXSA9PT0gMHhCQiAmJiByZWFzb25bMl0gPT09IDB4QkYpIHtcbiAgICAgIHJlYXNvbiA9IHJlYXNvbi5zdWJhcnJheSgzKVxuICAgIH1cblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRTdGF0dXNDb2RlKGNvZGUpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICAvLyBUT0RPOiBvcHRpbWl6ZSB0aGlzXG4gICAgICByZWFzb24gPSBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JywgeyBmYXRhbDogdHJ1ZSB9KS5kZWNvZGUocmVhc29uKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICByZXR1cm4geyBjb2RlLCByZWFzb24gfVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9jb25zdGFudHMnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhVVJMJylcbmNvbnN0IHsgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9nbG9iYWwnKVxuY29uc3QgeyBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLCBzdGF0ZXMsIG9wY29kZXMsIGVtcHR5QnVmZmVyIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtXZWJTb2NrZXRVUkwsXG4gIGtSZWFkeVN0YXRlLFxuICBrQ29udHJvbGxlcixcbiAga0JpbmFyeVR5cGUsXG4gIGtSZXNwb25zZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXJcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBpc0VzdGFibGlzaGVkLCBpc0Nsb3NpbmcsIGlzVmFsaWRTdWJwcm90b2NvbCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGZpcmVFdmVudCB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uJylcbmNvbnN0IHsgV2Vic29ja2V0RnJhbWVTZW5kIH0gPSByZXF1aXJlKCcuL2ZyYW1lJylcbmNvbnN0IHsgQnl0ZVBhcnNlciB9ID0gcmVxdWlyZSgnLi9yZWNlaXZlcicpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIGlzQmxvYkxpa2UgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4uL2dsb2JhbCcpXG5jb25zdCB7IHR5cGVzIH0gPSByZXF1aXJlKCd1dGlsJylcblxubGV0IGV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1kZWZpbml0aW9uXG5jbGFzcyBXZWJTb2NrZXQgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBjbG9zZTogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjYnVmZmVyZWRBbW91bnQgPSAwXG4gICNwcm90b2NvbCA9ICcnXG4gICNleHRlbnNpb25zID0gJydcblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gcHJvdG9jb2xzXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCBwcm90b2NvbHMgPSBbXSkge1xuICAgIHN1cGVyKClcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdXZWJTb2NrZXQgY29uc3RydWN0b3InIH0pXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnV2ViU29ja2V0cyBhcmUgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLVdTJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+IG9yIFdlYlNvY2tldEluaXQnXShwcm90b2NvbHMpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHByb3RvY29scyA9IG9wdGlvbnMucHJvdG9jb2xzXG5cbiAgICAvLyAxLiBMZXQgYmFzZVVSTCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0J3MgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVUkwgPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgLy8gMS4gTGV0IHVybFJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBVUkwgcGFyc2VyIHRvIHVybCB3aXRoIGJhc2VVUkwuXG4gICAgbGV0IHVybFJlY29yZFxuXG4gICAgdHJ5IHtcbiAgICAgIHVybFJlY29yZCA9IG5ldyBVUkwodXJsLCBiYXNlVVJMKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIDMuIElmIHVybFJlY29yZCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oZSwgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBJZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBcIiwgdGhlbiBzZXQgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgdG8gXCJ3c1wiLlxuICAgIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgPT09ICdodHRwOicpIHtcbiAgICAgIHVybFJlY29yZC5wcm90b2NvbCA9ICd3czonXG4gICAgfSBlbHNlIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cHNcIiwgc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NzXCIuXG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3NzOidcbiAgICB9XG5cbiAgICAvLyA2LiBJZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBub3QgXCJ3c1wiIG9yIFwid3NzXCIsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3czonICYmIHVybFJlY29yZC5wcm90b2NvbCAhPT0gJ3dzczonKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICBgRXhwZWN0ZWQgYSB3czogb3Igd3NzOiBwcm90b2NvbCwgZ290ICR7dXJsUmVjb3JkLnByb3RvY29sfWAsXG4gICAgICAgICdTeW50YXhFcnJvcidcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyA3LiBJZiB1cmxSZWNvcmRcdTIwMTlzIGZyYWdtZW50IGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiXG4gICAgLy8gICAgRE9NRXhjZXB0aW9uLlxuICAgIGlmICh1cmxSZWNvcmQuaGFzaCB8fCB1cmxSZWNvcmQuaHJlZi5lbmRzV2l0aCgnIycpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdHb3QgZnJhZ21lbnQnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDguIElmIHByb3RvY29scyBpcyBhIHN0cmluZywgc2V0IHByb3RvY29scyB0byBhIHNlcXVlbmNlIGNvbnNpc3RpbmdcbiAgICAvLyAgICBvZiBqdXN0IHRoYXQgc3RyaW5nLlxuICAgIGlmICh0eXBlb2YgcHJvdG9jb2xzID09PSAnc3RyaW5nJykge1xuICAgICAgcHJvdG9jb2xzID0gW3Byb3RvY29sc11cbiAgICB9XG5cbiAgICAvLyA5LiBJZiBhbnkgb2YgdGhlIHZhbHVlcyBpbiBwcm90b2NvbHMgb2NjdXIgbW9yZSB0aGFuIG9uY2Ugb3Igb3RoZXJ3aXNlXG4gICAgLy8gICAgZmFpbCB0byBtYXRjaCB0aGUgcmVxdWlyZW1lbnRzIGZvciBlbGVtZW50cyB0aGF0IGNvbXByaXNlIHRoZSB2YWx1ZVxuICAgIC8vICAgIG9mIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBmaWVsZHMgYXMgZGVmaW5lZCBieSBUaGUgV2ViU29ja2V0XG4gICAgLy8gICAgcHJvdG9jb2wsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSBuZXcgU2V0KHByb3RvY29scy5tYXAocCA9PiBwLnRvTG93ZXJDYXNlKCkpKS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgdmFsdWUnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIGlmIChwcm90b2NvbHMubGVuZ3RoID4gMCAmJiAhcHJvdG9jb2xzLmV2ZXJ5KHAgPT4gaXNWYWxpZFN1YnByb3RvY29sKHApKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyAxMC4gU2V0IHRoaXMncyB1cmwgdG8gdXJsUmVjb3JkLlxuICAgIHRoaXNba1dlYlNvY2tldFVSTF0gPSBuZXcgVVJMKHVybFJlY29yZC5ocmVmKVxuXG4gICAgLy8gMTEuIExldCBjbGllbnQgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdC5cblxuICAgIC8vIDEyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOlxuXG4gICAgLy8gICAgMS4gRXN0YWJsaXNoIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gZ2l2ZW4gdXJsUmVjb3JkLCBwcm90b2NvbHMsXG4gICAgLy8gICAgICAgYW5kIGNsaWVudC5cbiAgICB0aGlzW2tDb250cm9sbGVyXSA9IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24oXG4gICAgICB1cmxSZWNvcmQsXG4gICAgICBwcm90b2NvbHMsXG4gICAgICB0aGlzLFxuICAgICAgKHJlc3BvbnNlKSA9PiB0aGlzLiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZChyZXNwb25zZSksXG4gICAgICBvcHRpb25zXG4gICAgKVxuXG4gICAgLy8gRWFjaCBXZWJTb2NrZXQgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIHJlYWR5IHN0YXRlLCB3aGljaCBpcyBhXG4gICAgLy8gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24uIEluaXRpYWxseSBpdCBtdXN0XG4gICAgLy8gYmUgQ09OTkVDVElORyAoMCkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ09OTkVDVElOR1xuXG4gICAgLy8gVGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlIG11c3QgaW5pdGlhbGx5IHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuXG4gICAgLy8gVGhlIHByb3RvY29sIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCBiaW5hcnkgdHlwZSwgd2hpY2ggaXMgYVxuICAgIC8vIEJpbmFyeVR5cGUuIEluaXRpYWxseSBpdCBtdXN0IGJlIFwiYmxvYlwiLlxuICAgIHRoaXNba0JpbmFyeVR5cGVdID0gJ2Jsb2InXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlXG4gICAqIEBwYXJhbSB7bnVtYmVyfHVuZGVmaW5lZH0gY29kZVxuICAgKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICAgKi9cbiAgY2xvc2UgKGNvZGUgPSB1bmRlZmluZWQsIHJlYXNvbiA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvZGUgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShjb2RlLCB7IGNsYW1wOiB0cnVlIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWFzb24gPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcocmVhc29uKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNvZGUgaXMgcHJlc2VudCwgYnV0IGlzIG5laXRoZXIgYW4gaW50ZWdlciBlcXVhbCB0byAxMDAwIG5vciBhblxuICAgIC8vICAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDMwMDAgdG8gNDk5OSwgaW5jbHVzaXZlLCB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZEFjY2Vzc0Vycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb2RlICE9PSAxMDAwICYmIChjb2RlIDwgMzAwMCB8fCBjb2RlID4gNDk5OSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignaW52YWxpZCBjb2RlJywgJ0ludmFsaWRBY2Nlc3NFcnJvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlYXNvbkJ5dGVMZW5ndGggPSAwXG5cbiAgICAvLyAyLiBJZiByZWFzb24gaXMgcHJlc2VudCwgdGhlbiBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVhc29uQnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZyByZWFzb24uXG4gICAgICAvLyAyLiBJZiByZWFzb25CeXRlcyBpcyBsb25nZXIgdGhhbiAxMjMgYnl0ZXMsIHRoZW4gdGhyb3cgYVxuICAgICAgLy8gICAgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAgIHJlYXNvbkJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pXG5cbiAgICAgIGlmIChyZWFzb25CeXRlTGVuZ3RoID4gMTIzKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgICAgYFJlYXNvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMjMgYnl0ZXM7IHJlY2VpdmVkICR7cmVhc29uQnl0ZUxlbmd0aH1gLFxuICAgICAgICAgICdTeW50YXhFcnJvcidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIFJ1biB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ0xPU0lORyB8fCB0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NFRCkge1xuICAgICAgLy8gSWYgdGhpcydzIHJlYWR5IHN0YXRlIGlzIENMT1NJTkcgKDIpIG9yIENMT1NFRCAoMylcbiAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh0aGlzKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIG5vdCB5ZXQgZXN0YWJsaXNoZWRcbiAgICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgICAvLyB0byBDTE9TSU5HICgyKS5cbiAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH0gZWxzZSBpZiAoIWlzQ2xvc2luZyh0aGlzKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBiZWVuIHN0YXJ0ZWRcbiAgICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAgIC8vIHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgLy8gLSBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgICAvLyAtIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgICAgLy8gICBXZWJTb2NrZXQgQ2xvc2UgbWVzc2FnZSBtdXN0IGJlIHRoZSBpbnRlZ2VyIGdpdmVuIGJ5IGNvZGUuXG4gICAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gICBwcm92aWRlZCBpbiB0aGUgQ2xvc2UgbWVzc2FnZSBhZnRlciB0aGUgc3RhdHVzIGNvZGUuXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAgIC8vIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAgIC8vIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG5cbiAgICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIH0gZWxzZSBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgICAvLyBwcm92aWRlZCBpbiB0aGUgQ2xvc2UgbWVzc2FnZSBhZnRlciB0aGUgc3RhdHVzIGNvZGUuXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgyICsgcmVhc29uQnl0ZUxlbmd0aClcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgICAgLy8gdGhlIGJvZHkgTUFZIGNvbnRhaW4gVVRGLTgtZW5jb2RlZCBkYXRhIHdpdGggdmFsdWUgL3JlYXNvbi9cbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlKHJlYXNvbiwgMiwgJ3V0Zi04JylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IGVtcHR5QnVmZmVyXG4gICAgICB9XG5cbiAgICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgICBjb25zdCBzb2NrZXQgPSB0aGlzW2tSZXNwb25zZV0uc29ja2V0XG5cbiAgICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSwgKGVycikgPT4ge1xuICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgIHRoaXNba1NlbnRDbG9zZV0gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICAgIC8vIFVwb24gZWl0aGVyIHNlbmRpbmcgb3IgcmVjZWl2aW5nIGEgQ2xvc2UgY29udHJvbCBmcmFtZSwgaXQgaXMgc2FpZFxuICAgICAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vIFNldCB0aGlzJ3MgcmVhZHkgc3RhdGUgdG8gQ0xPU0lORyAoMikuXG4gICAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IFdlYlNvY2tldC5DTE9TSU5HXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1zZW5kXG4gICAqIEBwYXJhbSB7Tm9kZUpTLlR5cGVkQXJyYXl8QXJyYXlCdWZmZXJ8QmxvYnxzdHJpbmd9IGRhdGFcbiAgICovXG4gIHNlbmQgKGRhdGEpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0LnNlbmQnIH0pXG5cbiAgICBkYXRhID0gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0U2VuZERhdGEoZGF0YSlcblxuICAgIC8vIDEuIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDT05ORUNUSU5HLCB0aGVuIHRocm93IGFuXG4gICAgLy8gICAgXCJJbnZhbGlkU3RhdGVFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DT05ORUNUSU5HKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdTZW50IGJlZm9yZSBjb25uZWN0ZWQuJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgICB9XG5cbiAgICAvLyAyLiBSdW4gdGhlIGFwcHJvcHJpYXRlIHNldCBvZiBzdGVwcyBmcm9tIHRoZSBmb2xsb3dpbmcgbGlzdDpcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi02LjFcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi01LjJcblxuICAgIGlmICghaXNFc3RhYmxpc2hlZCh0aGlzKSB8fCBpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgLy8gSWYgZGF0YSBpcyBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudFxuICAgICAgLy8gbXVzdCBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIHRoZSBkYXRhIGFyZ3VtZW50XG4gICAgICAvLyB1c2luZyBhIHRleHQgZnJhbWUgb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLlxuICAgICAgLy8gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsXG4gICAgICAvLyB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYVxuICAgICAgLy8gc3RyaW5nIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2VcbiAgICAgIC8vIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG9cbiAgICAgIC8vIGV4cHJlc3MgdGhlIGFyZ3VtZW50IGFzIFVURi04LlxuXG4gICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQodmFsdWUpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLlRFWFQpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZFxuICAgICAgLy8gdG8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLlxuICAgICAgLy8gVGhlIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIGJ1ZmZlciBkZXNjcmliZWRcbiAgICAgIC8vIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QuIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYW5cbiAgICAgIC8vIEFycmF5QnVmZmVyIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3RcbiAgICAgIC8vIGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIGxlbmd0aCBvZiB0aGVcbiAgICAgIC8vIEFycmF5QnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCB2YWx1ZSA9IEJ1ZmZlci5mcm9tKGRhdGEpXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQodmFsdWUpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG9cbiAgICAgIC8vIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlXG4gICAgICAvLyBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBzZWN0aW9uIG9mIHRoZSBidWZmZXJcbiAgICAgIC8vIGRlc2NyaWJlZCBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0IHRoYXQgZGF0YSByZWZlcmVuY2VzLiBBbnlcbiAgICAgIC8vIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCB0aGlzIGtpbmQgb2YgYXJndW1lbnQgdGhhdCBkb2VzXG4gICAgICAvLyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZVxuICAgICAgLy8gYnkgdGhlIGxlbmd0aCBvZiBkYXRhXHUyMDE5cyBidWZmZXIgaW4gYnl0ZXMuXG5cbiAgICAgIGNvbnN0IGFiID0gQnVmZmVyLmZyb20oZGF0YSwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpXG5cbiAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChhYilcbiAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBhYi5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGFiLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWQgdG9cbiAgICAgIC8vIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZyB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi4gVGhlIGRhdGFcbiAgICAgIC8vIHRvIGJlIHNlbnQgaXMgdGhlIHJhdyBkYXRhIHJlcHJlc2VudGVkIGJ5IHRoZSBCbG9iIG9iamVjdC4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYSBCbG9iIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3dcbiAgICAgIC8vIGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIHNpemVcbiAgICAgIC8vIG9mIHRoZSBCbG9iIG9iamVjdFx1MjAxOXMgcmF3IGRhdGEsIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICBkYXRhLmFycmF5QnVmZmVyKCkudGhlbigoYWIpID0+IHtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShhYilcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gdmFsdWVcbiAgICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBnZXQgcmVhZHlTdGF0ZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgLy8gVGhlIHJlYWR5U3RhdGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHJlYWR5IHN0YXRlLlxuICAgIHJldHVybiB0aGlzW2tSZWFkeVN0YXRlXVxuICB9XG5cbiAgZ2V0IGJ1ZmZlcmVkQW1vdW50ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jYnVmZmVyZWRBbW91bnRcbiAgfVxuXG4gIGdldCB1cmwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpcydzIHVybCwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gVVJMU2VyaWFsaXplcih0aGlzW2tXZWJTb2NrZXRVUkxdKVxuICB9XG5cbiAgZ2V0IGV4dGVuc2lvbnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNleHRlbnNpb25zXG4gIH1cblxuICBnZXQgcHJvdG9jb2wgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNwcm90b2NvbFxuICB9XG5cbiAgZ2V0IG9ub3BlbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5vcGVuXG4gIH1cblxuICBzZXQgb25vcGVuIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMub3Blbikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdvcGVuJywgdGhpcy4jZXZlbnRzLm9wZW4pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm9wZW4gPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdvcGVuJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLmVycm9yKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgdGhpcy4jZXZlbnRzLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5lcnJvciA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25jbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5jbG9zZVxuICB9XG5cbiAgc2V0IG9uY2xvc2UgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5jbG9zZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbG9zZScsIHRoaXMuI2V2ZW50cy5jbG9zZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbG9zZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuY2xvc2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubWVzc2FnZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5tZXNzYWdlXG4gIH1cblxuICBzZXQgb25tZXNzYWdlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMubWVzc2FnZSkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgdGhpcy4jZXZlbnRzLm1lc3NhZ2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBiaW5hcnlUeXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpc1trQmluYXJ5VHlwZV1cbiAgfVxuXG4gIHNldCBiaW5hcnlUeXBlICh0eXBlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHR5cGUgIT09ICdibG9iJyAmJiB0eXBlICE9PSAnYXJyYXlidWZmZXInKSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tCaW5hcnlUeXBlXSA9IHR5cGVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICAgKi9cbiAgI29uQ29ubmVjdGlvbkVzdGFibGlzaGVkIChyZXNwb25zZSkge1xuICAgIC8vIHByb2Nlc3NSZXNwb25zZSBpcyBjYWxsZWQgd2hlbiB0aGUgXCJyZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgaGFzIGJlZW4gcmVjZWl2ZWQgYW5kIGluaXRpYWxpemVkLlwiXG4gICAgLy8gb25jZSB0aGlzIGhhcHBlbnMsIHRoZSBjb25uZWN0aW9uIGlzIG9wZW5cbiAgICB0aGlzW2tSZXNwb25zZV0gPSByZXNwb25zZVxuXG4gICAgY29uc3QgcGFyc2VyID0gbmV3IEJ5dGVQYXJzZXIodGhpcylcbiAgICBwYXJzZXIub24oJ2RyYWluJywgZnVuY3Rpb24gb25QYXJzZXJEcmFpbiAoKSB7XG4gICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LnJlc3VtZSgpXG4gICAgfSlcblxuICAgIHJlc3BvbnNlLnNvY2tldC53cyA9IHRoaXNcbiAgICB0aGlzW2tCeXRlUGFyc2VyXSA9IHBhcnNlclxuXG4gICAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBPUEVOICgxKS5cbiAgICB0aGlzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5PUEVOXG5cbiAgICAvLyAyLiBDaGFuZ2UgdGhlIGV4dGVuc2lvbnMgYXR0cmlidXRlXHUyMDE5cyB2YWx1ZSB0byB0aGUgZXh0ZW5zaW9ucyBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTkuMVxuICAgIGNvbnN0IGV4dGVuc2lvbnMgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycpXG5cbiAgICBpZiAoZXh0ZW5zaW9ucyAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jZXh0ZW5zaW9ucyA9IGV4dGVuc2lvbnNcbiAgICB9XG5cbiAgICAvLyAzLiBDaGFuZ2UgdGhlIHByb3RvY29sIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIHN1YnByb3RvY29sIGluIHVzZSwgaWZcbiAgICAvLyAgICBpdCBpcyBub3QgdGhlIG51bGwgdmFsdWUuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tMS45XG4gICAgY29uc3QgcHJvdG9jb2wgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnKVxuXG4gICAgaWYgKHByb3RvY29sICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiNwcm90b2NvbCA9IHByb3RvY29sXG4gICAgfVxuXG4gICAgLy8gNC4gRmlyZSBhbiBldmVudCBuYW1lZCBvcGVuIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAgIGZpcmVFdmVudCgnb3BlbicsIHRoaXMpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jb25uZWN0aW5nXG5XZWJTb2NrZXQuQ09OTkVDVElORyA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ09OTkVDVElORyA9IHN0YXRlcy5DT05ORUNUSU5HXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LW9wZW5cbldlYlNvY2tldC5PUEVOID0gV2ViU29ja2V0LnByb3RvdHlwZS5PUEVOID0gc3RhdGVzLk9QRU5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2luZ1xuV2ViU29ja2V0LkNMT1NJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNMT1NJTkcgPSBzdGF0ZXMuQ0xPU0lOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZWRcbldlYlNvY2tldC5DTE9TRUQgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNMT1NFRCA9IHN0YXRlcy5DTE9TRURcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV2ViU29ja2V0LnByb3RvdHlwZSwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYnVmZmVyZWRBbW91bnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ub3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25lcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25jbG9zZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYmluYXJ5VHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2VuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXh0ZW5zaW9uczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcHJvdG9jb2w6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdXZWJTb2NrZXQnLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoV2ViU29ja2V0LCB7XG4gIENPTk5FQ1RJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIE9QRU46IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NFRDogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPERPTVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmIFN5bWJvbC5pdGVyYXRvciBpbiBWKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10oVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoVilcbn1cblxuLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBwcm9wc2FsIG1hZGUgaW4gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy93ZWJzb2NrZXRzL2lzc3Vlcy80Mlxud2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3Byb3RvY29scycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLFxuICAgIGNvbnZlcnRlcjogKFYpID0+IFYsXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAnaGVhZGVycycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQpXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10gPSBmdW5jdGlvbiAoVikge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdChWKVxuICB9XG5cbiAgcmV0dXJuIHsgcHJvdG9jb2xzOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXShWKSB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoVikgfHwgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFdlYlNvY2tldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2xpYi9jbGllbnQnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXInKVxuY29uc3QgZXJyb3JzID0gcmVxdWlyZSgnLi9saWIvY29yZS9lcnJvcnMnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vbGliL3Bvb2wnKVxuY29uc3QgQmFsYW5jZWRQb29sID0gcmVxdWlyZSgnLi9saWIvYmFsYW5jZWQtcG9vbCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vbGliL2FnZW50JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2xpYi9jb3JlL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gZXJyb3JzXG5jb25zdCBhcGkgPSByZXF1aXJlKCcuL2xpYi9hcGknKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Nvbm5lY3QnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja0FnZW50ID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLWFnZW50JylcbmNvbnN0IE1vY2tQb29sID0gcmVxdWlyZSgnLi9saWIvbW9jay9tb2NrLXBvb2wnKVxuY29uc3QgbW9ja0Vycm9ycyA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1lcnJvcnMnKVxuY29uc3QgUHJveHlBZ2VudCA9IHJlcXVpcmUoJy4vbGliL3Byb3h5LWFnZW50JylcbmNvbnN0IFJldHJ5SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvUmV0cnlIYW5kbGVyJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciwgc2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi9saWIvZ2xvYmFsJylcbmNvbnN0IERlY29yYXRvckhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL0RlY29yYXRvckhhbmRsZXInKVxuY29uc3QgUmVkaXJlY3RIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXInKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0SW50ZXJjZXB0b3InKVxuXG5sZXQgaGFzQ3J5cHRvXG50cnkge1xuICByZXF1aXJlKCdjcnlwdG8nKVxuICBoYXNDcnlwdG8gPSB0cnVlXG59IGNhdGNoIHtcbiAgaGFzQ3J5cHRvID0gZmFsc2Vcbn1cblxuT2JqZWN0LmFzc2lnbihEaXNwYXRjaGVyLnByb3RvdHlwZSwgYXBpKVxuXG5tb2R1bGUuZXhwb3J0cy5EaXNwYXRjaGVyID0gRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuQ2xpZW50ID0gQ2xpZW50XG5tb2R1bGUuZXhwb3J0cy5Qb29sID0gUG9vbFxubW9kdWxlLmV4cG9ydHMuQmFsYW5jZWRQb29sID0gQmFsYW5jZWRQb29sXG5tb2R1bGUuZXhwb3J0cy5BZ2VudCA9IEFnZW50XG5tb2R1bGUuZXhwb3J0cy5Qcm94eUFnZW50ID0gUHJveHlBZ2VudFxubW9kdWxlLmV4cG9ydHMuUmV0cnlIYW5kbGVyID0gUmV0cnlIYW5kbGVyXG5cbm1vZHVsZS5leHBvcnRzLkRlY29yYXRvckhhbmRsZXIgPSBEZWNvcmF0b3JIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5SZWRpcmVjdEhhbmRsZXIgPSBSZWRpcmVjdEhhbmRsZXJcbm1vZHVsZS5leHBvcnRzLmNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG5cbm1vZHVsZS5leHBvcnRzLmJ1aWxkQ29ubmVjdG9yID0gYnVpbGRDb25uZWN0b3Jcbm1vZHVsZS5leHBvcnRzLmVycm9ycyA9IGVycm9yc1xuXG5mdW5jdGlvbiBtYWtlRGlzcGF0Y2hlciAoZm4pIHtcbiAgcmV0dXJuICh1cmwsIG9wdHMsIGhhbmRsZXIpID0+IHtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGhhbmRsZXIgPSBvcHRzXG4gICAgICBvcHRzID0gbnVsbFxuICAgIH1cblxuICAgIGlmICghdXJsIHx8ICh0eXBlb2YgdXJsICE9PSAnc3RyaW5nJyAmJiB0eXBlb2YgdXJsICE9PSAnb2JqZWN0JyAmJiAhKHVybCBpbnN0YW5jZW9mIFVSTCkpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdXJsJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAhPSBudWxsICYmIHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmIChvcHRzICYmIG9wdHMucGF0aCAhPSBudWxsKSB7XG4gICAgICBpZiAodHlwZW9mIG9wdHMucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMucGF0aCcpXG4gICAgICB9XG5cbiAgICAgIGxldCBwYXRoID0gb3B0cy5wYXRoXG4gICAgICBpZiAoIW9wdHMucGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICAgIH1cblxuICAgICAgdXJsID0gbmV3IFVSTCh1dGlsLnBhcnNlT3JpZ2luKHVybCkub3JpZ2luICsgcGF0aClcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKCFvcHRzKSB7XG4gICAgICAgIG9wdHMgPSB0eXBlb2YgdXJsID09PSAnb2JqZWN0JyA/IHVybCA6IHt9XG4gICAgICB9XG5cbiAgICAgIHVybCA9IHV0aWwucGFyc2VVUkwodXJsKVxuICAgIH1cblxuICAgIGNvbnN0IHsgYWdlbnQsIGRpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyKCkgfSA9IG9wdHNcblxuICAgIGlmIChhZ2VudCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBvcHRzLmFnZW50LiBEaWQgeW91IG1lYW4gb3B0cy5jbGllbnQ/JylcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uY2FsbChkaXNwYXRjaGVyLCB7XG4gICAgICAuLi5vcHRzLFxuICAgICAgb3JpZ2luOiB1cmwub3JpZ2luLFxuICAgICAgcGF0aDogdXJsLnNlYXJjaCA/IGAke3VybC5wYXRobmFtZX0ke3VybC5zZWFyY2h9YCA6IHVybC5wYXRobmFtZSxcbiAgICAgIG1ldGhvZDogb3B0cy5tZXRob2QgfHwgKG9wdHMuYm9keSA/ICdQVVQnIDogJ0dFVCcpXG4gICAgfSwgaGFuZGxlcilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxEaXNwYXRjaGVyID0gc2V0R2xvYmFsRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsRGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXJcblxuaWYgKHV0aWwubm9kZU1ham9yID4gMTYgfHwgKHV0aWwubm9kZU1ham9yID09PSAxNiAmJiB1dGlsLm5vZGVNaW5vciA+PSA4KSkge1xuICBsZXQgZmV0Y2hJbXBsID0gbnVsbFxuICBtb2R1bGUuZXhwb3J0cy5mZXRjaCA9IGFzeW5jIGZ1bmN0aW9uIGZldGNoIChyZXNvdXJjZSkge1xuICAgIGlmICghZmV0Y2hJbXBsKSB7XG4gICAgICBmZXRjaEltcGwgPSByZXF1aXJlKCcuL2xpYi9mZXRjaCcpLmZldGNoXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBmZXRjaEltcGwoLi4uYXJndW1lbnRzKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVyciwgdGhpcylcbiAgICAgIH1cblxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG4gIG1vZHVsZS5leHBvcnRzLkhlYWRlcnMgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9oZWFkZXJzJykuSGVhZGVyc1xuICBtb2R1bGUuZXhwb3J0cy5SZXNwb25zZSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL3Jlc3BvbnNlJykuUmVzcG9uc2VcbiAgbW9kdWxlLmV4cG9ydHMuUmVxdWVzdCA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL3JlcXVlc3QnKS5SZXF1ZXN0XG4gIG1vZHVsZS5leHBvcnRzLkZvcm1EYXRhID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZm9ybWRhdGEnKS5Gb3JtRGF0YVxuICBtb2R1bGUuZXhwb3J0cy5GaWxlID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZmlsZScpLkZpbGVcbiAgbW9kdWxlLmV4cG9ydHMuRmlsZVJlYWRlciA9IHJlcXVpcmUoJy4vbGliL2ZpbGVhcGkvZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJcblxuICBjb25zdCB7IHNldEdsb2JhbE9yaWdpbiwgZ2V0R2xvYmFsT3JpZ2luIH0gPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9nbG9iYWwnKVxuXG4gIG1vZHVsZS5leHBvcnRzLnNldEdsb2JhbE9yaWdpbiA9IHNldEdsb2JhbE9yaWdpblxuICBtb2R1bGUuZXhwb3J0cy5nZXRHbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW5cblxuICBjb25zdCB7IENhY2hlU3RvcmFnZSB9ID0gcmVxdWlyZSgnLi9saWIvY2FjaGUvY2FjaGVzdG9yYWdlJylcbiAgY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL2xpYi9jYWNoZS9zeW1ib2xzJylcblxuICAvLyBDYWNoZSAmIENhY2hlU3RvcmFnZSBhcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggZmV0Y2guIEV2ZW4gaWYgaXQgbWF5IHJ1blxuICAvLyBpbiBhbiBvbGRlciB2ZXJzaW9uIG9mIE5vZGUsIGl0IGRvZXNuJ3QgaGF2ZSBhbnkgdXNlIHdpdGhvdXQgZmV0Y2guXG4gIG1vZHVsZS5leHBvcnRzLmNhY2hlcyA9IG5ldyBDYWNoZVN0b3JhZ2Uoa0NvbnN0cnVjdClcbn1cblxuaWYgKHV0aWwubm9kZU1ham9yID49IDE2KSB7XG4gIGNvbnN0IHsgZGVsZXRlQ29va2llLCBnZXRDb29raWVzLCBnZXRTZXRDb29raWVzLCBzZXRDb29raWUgfSA9IHJlcXVpcmUoJy4vbGliL2Nvb2tpZXMnKVxuXG4gIG1vZHVsZS5leHBvcnRzLmRlbGV0ZUNvb2tpZSA9IGRlbGV0ZUNvb2tpZVxuICBtb2R1bGUuZXhwb3J0cy5nZXRDb29raWVzID0gZ2V0Q29va2llc1xuICBtb2R1bGUuZXhwb3J0cy5nZXRTZXRDb29raWVzID0gZ2V0U2V0Q29va2llc1xuICBtb2R1bGUuZXhwb3J0cy5zZXRDb29raWUgPSBzZXRDb29raWVcblxuICBjb25zdCB7IHBhcnNlTUlNRVR5cGUsIHNlcmlhbGl6ZUFNaW1lVHlwZSB9ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZGF0YVVSTCcpXG5cbiAgbW9kdWxlLmV4cG9ydHMucGFyc2VNSU1FVHlwZSA9IHBhcnNlTUlNRVR5cGVcbiAgbW9kdWxlLmV4cG9ydHMuc2VyaWFsaXplQU1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlXG59XG5cbmlmICh1dGlsLm5vZGVNYWpvciA+PSAxOCAmJiBoYXNDcnlwdG8pIHtcbiAgY29uc3QgeyBXZWJTb2NrZXQgfSA9IHJlcXVpcmUoJy4vbGliL3dlYnNvY2tldC93ZWJzb2NrZXQnKVxuXG4gIG1vZHVsZS5leHBvcnRzLldlYlNvY2tldCA9IFdlYlNvY2tldFxufVxuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gbWFrZURpc3BhdGNoZXIoYXBpLnJlcXVlc3QpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSBtYWtlRGlzcGF0Y2hlcihhcGkuc3RyZWFtKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBtYWtlRGlzcGF0Y2hlcihhcGkucGlwZWxpbmUpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gbWFrZURpc3BhdGNoZXIoYXBpLmNvbm5lY3QpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gbWFrZURpc3BhdGNoZXIoYXBpLnVwZ3JhZGUpXG5cbm1vZHVsZS5leHBvcnRzLk1vY2tDbGllbnQgPSBNb2NrQ2xpZW50XG5tb2R1bGUuZXhwb3J0cy5Nb2NrUG9vbCA9IE1vY2tQb29sXG5tb2R1bGUuZXhwb3J0cy5Nb2NrQWdlbnQgPSBNb2NrQWdlbnRcbm1vZHVsZS5leHBvcnRzLm1vY2tFcnJvcnMgPSBtb2NrRXJyb3JzXG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IE51bGxPYmplY3QgPSBmdW5jdGlvbiBOdWxsT2JqZWN0ICgpIHsgfVxuTnVsbE9iamVjdC5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8qKlxuICogUmVnRXhwIHRvIG1hdGNoICooIFwiO1wiIHBhcmFtZXRlciApIGluIFJGQyA3MjMxIHNlYyAzLjEuMS4xXG4gKlxuICogcGFyYW1ldGVyICAgICA9IHRva2VuIFwiPVwiICggdG9rZW4gLyBxdW90ZWQtc3RyaW5nIClcbiAqIHRva2VuICAgICAgICAgPSAxKnRjaGFyXG4gKiB0Y2hhciAgICAgICAgID0gXCIhXCIgLyBcIiNcIiAvIFwiJFwiIC8gXCIlXCIgLyBcIiZcIiAvIFwiJ1wiIC8gXCIqXCJcbiAqICAgICAgICAgICAgICAgLyBcIitcIiAvIFwiLVwiIC8gXCIuXCIgLyBcIl5cIiAvIFwiX1wiIC8gXCJgXCIgLyBcInxcIiAvIFwiflwiXG4gKiAgICAgICAgICAgICAgIC8gRElHSVQgLyBBTFBIQVxuICogICAgICAgICAgICAgICA7IGFueSBWQ0hBUiwgZXhjZXB0IGRlbGltaXRlcnNcbiAqIHF1b3RlZC1zdHJpbmcgPSBEUVVPVEUgKiggcWR0ZXh0IC8gcXVvdGVkLXBhaXIgKSBEUVVPVEVcbiAqIHFkdGV4dCAgICAgICAgPSBIVEFCIC8gU1AgLyAleDIxIC8gJXgyMy01QiAvICV4NUQtN0UgLyBvYnMtdGV4dFxuICogb2JzLXRleHQgICAgICA9ICV4ODAtRkZcbiAqIHF1b3RlZC1wYWlyICAgPSBcIlxcXCIgKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAqL1xuY29uc3QgcGFyYW1SRSA9IC87ICooWyEjJCUmJyorLl5cXHdgfH4tXSspPShcIig/OltcXHZcXHUwMDIwXFx1MDAyMVxcdTAwMjMtXFx1MDA1YlxcdTAwNWQtXFx1MDA3ZVxcdTAwODAtXFx1MDBmZl18XFxcXFtcXHZcXHUwMDIwLVxcdTAwZmZdKSpcInxbISMkJSYnKisuXlxcd2B8fi1dKykgKi9ndVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCBxdW90ZWQtcGFpciBpbiBSRkMgNzIzMCBzZWMgMy4yLjZcbiAqXG4gKiBxdW90ZWQtcGFpciA9IFwiXFxcIiAoIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICogb2JzLXRleHQgICAgPSAleDgwLUZGXG4gKi9cbmNvbnN0IHF1b3RlZFBhaXJSRSA9IC9cXFxcKFtcXHZcXHUwMDIwLVxcdTAwZmZdKS9ndVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCB0eXBlIGluIFJGQyA3MjMxIHNlYyAzLjEuMS4xXG4gKlxuICogbWVkaWEtdHlwZSA9IHR5cGUgXCIvXCIgc3VidHlwZVxuICogdHlwZSAgICAgICA9IHRva2VuXG4gKiBzdWJ0eXBlICAgID0gdG9rZW5cbiAqL1xuY29uc3QgbWVkaWFUeXBlUkUgPSAvXlshIyQlJicqKy5eXFx3fH4tXStcXC9bISMkJSYnKisuXlxcd3x+LV0rJC91XG5cbi8vIGRlZmF1bHQgQ29udGVudFR5cGUgdG8gcHJldmVudCByZXBlYXRlZCBvYmplY3QgY3JlYXRpb25cbmNvbnN0IGRlZmF1bHRDb250ZW50VHlwZSA9IHsgdHlwZTogJycsIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KCkgfVxuT2JqZWN0LmZyZWV6ZShkZWZhdWx0Q29udGVudFR5cGUucGFyYW1ldGVycylcbk9iamVjdC5mcmVlemUoZGVmYXVsdENvbnRlbnRUeXBlKVxuXG4vKipcbiAqIFBhcnNlIG1lZGlhIHR5cGUgdG8gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfG9iamVjdH0gaGVhZGVyXG4gKiBAcmV0dXJuIHtPYmplY3R9XG4gKiBAcHVibGljXG4gKi9cblxuZnVuY3Rpb24gcGFyc2UgKGhlYWRlcikge1xuICBpZiAodHlwZW9mIGhlYWRlciAhPT0gJ3N0cmluZycpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdhcmd1bWVudCBoZWFkZXIgaXMgcmVxdWlyZWQgYW5kIG11c3QgYmUgYSBzdHJpbmcnKVxuICB9XG5cbiAgbGV0IGluZGV4ID0gaGVhZGVyLmluZGV4T2YoJzsnKVxuICBjb25zdCB0eXBlID0gaW5kZXggIT09IC0xXG4gICAgPyBoZWFkZXIuc2xpY2UoMCwgaW5kZXgpLnRyaW0oKVxuICAgIDogaGVhZGVyLnRyaW0oKVxuXG4gIGlmIChtZWRpYVR5cGVSRS50ZXN0KHR5cGUpID09PSBmYWxzZSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgbWVkaWEgdHlwZScpXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogdHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KClcbiAgfVxuXG4gIC8vIHBhcnNlIHBhcmFtZXRlcnNcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxldCBrZXlcbiAgbGV0IG1hdGNoXG4gIGxldCB2YWx1ZVxuXG4gIHBhcmFtUkUubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAoKG1hdGNoID0gcGFyYW1SRS5leGVjKGhlYWRlcikpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgZm9ybWF0JylcbiAgICB9XG5cbiAgICBpbmRleCArPSBtYXRjaFswXS5sZW5ndGhcbiAgICBrZXkgPSBtYXRjaFsxXS50b0xvd2VyQ2FzZSgpXG4gICAgdmFsdWUgPSBtYXRjaFsyXVxuXG4gICAgaWYgKHZhbHVlWzBdID09PSAnXCInKSB7XG4gICAgICAvLyByZW1vdmUgcXVvdGVzIGFuZCBlc2NhcGVzXG4gICAgICB2YWx1ZSA9IHZhbHVlXG4gICAgICAgIC5zbGljZSgxLCB2YWx1ZS5sZW5ndGggLSAxKVxuXG4gICAgICBxdW90ZWRQYWlyUkUudGVzdCh2YWx1ZSkgJiYgKHZhbHVlID0gdmFsdWUucmVwbGFjZShxdW90ZWRQYWlyUkUsICckMScpKVxuICAgIH1cblxuICAgIHJlc3VsdC5wYXJhbWV0ZXJzW2tleV0gPSB2YWx1ZVxuICB9XG5cbiAgaWYgKGluZGV4ICE9PSBoZWFkZXIubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignaW52YWxpZCBwYXJhbWV0ZXIgZm9ybWF0JylcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuZnVuY3Rpb24gc2FmZVBhcnNlIChoZWFkZXIpIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICB9XG5cbiAgbGV0IGluZGV4ID0gaGVhZGVyLmluZGV4T2YoJzsnKVxuICBjb25zdCB0eXBlID0gaW5kZXggIT09IC0xXG4gICAgPyBoZWFkZXIuc2xpY2UoMCwgaW5kZXgpLnRyaW0oKVxuICAgIDogaGVhZGVyLnRyaW0oKVxuXG4gIGlmIChtZWRpYVR5cGVSRS50ZXN0KHR5cGUpID09PSBmYWxzZSkge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIGNvbnN0IHJlc3VsdCA9IHtcbiAgICB0eXBlOiB0eXBlLnRvTG93ZXJDYXNlKCksXG4gICAgcGFyYW1ldGVyczogbmV3IE51bGxPYmplY3QoKVxuICB9XG5cbiAgLy8gcGFyc2UgcGFyYW1ldGVyc1xuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgbGV0IGtleVxuICBsZXQgbWF0Y2hcbiAgbGV0IHZhbHVlXG5cbiAgcGFyYW1SRS5sYXN0SW5kZXggPSBpbmRleFxuXG4gIHdoaWxlICgobWF0Y2ggPSBwYXJhbVJFLmV4ZWMoaGVhZGVyKSkpIHtcbiAgICBpZiAobWF0Y2guaW5kZXggIT09IGluZGV4KSB7XG4gICAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gICAgfVxuXG4gICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAga2V5ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuICAgIHZhbHVlID0gbWF0Y2hbMl1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc2xpY2UoMSwgdmFsdWUubGVuZ3RoIC0gMSlcblxuICAgICAgcXVvdGVkUGFpclJFLnRlc3QodmFsdWUpICYmICh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocXVvdGVkUGFpclJFLCAnJDEnKSlcbiAgICB9XG5cbiAgICByZXN1bHQucGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IHsgcGFyc2UsIHNhZmVQYXJzZSB9XG5tb2R1bGUuZXhwb3J0cy5wYXJzZSA9IHBhcnNlXG5tb2R1bGUuZXhwb3J0cy5zYWZlUGFyc2UgPSBzYWZlUGFyc2Vcbm1vZHVsZS5leHBvcnRzLmRlZmF1bHRDb250ZW50VHlwZSA9IGRlZmF1bHRDb250ZW50VHlwZVxuIiwgImltcG9ydCB7IENvbW1hbmQsIE9wdGlvbiB9IGZyb20gXCJjb21tYW5kZXJcIjtcbmltcG9ydCBwa2cgZnJvbSBcIi4uL3BhY2thZ2UuanNvblwiIGFzc2VydCB7IHR5cGU6IFwianNvblwiIH07XG5cbmltcG9ydCB7IHJlYWRTZXJ2ZXJJbmZvIH0gZnJvbSBcIi4vcmVhZFNlcnZlckluZm9cIjtcbmltcG9ydCB7IFByb21wdFNvdXJjZSwgcnVuQ29kZXhFeGVjLCBTYWZldHlTdHJhdGVneSB9IGZyb20gXCIuL3J1bkNvZGV4RXhlY1wiO1xuaW1wb3J0IHsgZHJvcFN1ZG8gfSBmcm9tIFwiLi9kcm9wU3Vkb1wiO1xuaW1wb3J0IHsgZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2VzcyB9IGZyb20gXCIuL2NoZWNrQWN0b3JQZXJtaXNzaW9uc1wiO1xuaW1wb3J0IHBhcnNlQXJnc1N0cmluZ1RvQXJndiBmcm9tIFwic3RyaW5nLWFyZ3ZcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7XG4gIGNvbnN0IHByb2dyYW0gPSBuZXcgQ29tbWFuZCgpO1xuXG4gIHByb2dyYW1cbiAgICAubmFtZShcImNvZGV4LWFjdGlvblwiKVxuICAgIC52ZXJzaW9uKHBrZy52ZXJzaW9uKVxuICAgIC5kZXNjcmlwdGlvbihcIk11bHRpdG9vbCB0byBzdXBwb3J0IG9wZW5haS9jb2RleC1hY3Rpb24uXCIpO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlYWQtc2VydmVyLWluZm9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJSZWFkIHNlcnZlciBpbmZvIGZyb20gdGhlIHJlc3BvbnNlcyBBUEkgcHJveHlcIilcbiAgICAuYXJndW1lbnQoXCI8c2VydmVySW5mb0ZpbGU+XCIsIFwiUGF0aCB0byB0aGUgc2VydmVyIGluZm8gZmlsZVwiKVxuICAgIC5hY3Rpb24oYXN5bmMgKHNlcnZlckluZm9GaWxlOiBzdHJpbmcpID0+IHtcbiAgICAgIGF3YWl0IHJlYWRTZXJ2ZXJJbmZvKHNlcnZlckluZm9GaWxlKTtcbiAgICB9KTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkcm9wLXN1ZG9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEcm9wcyBzdWRvIHByaXZpbGVnZXMgZm9yIHRoZSBjb25maWd1cmVkIHVzZXIuXCIpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS11c2VyIDx1c2VyPlwiLCBcIlVzZXIgdG8gbW9kaWZ5XCIpLmRlZmF1bHQoXCJydW5uZXJcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXCItLWdyb3VwIDxncm91cD5cIiwgXCJHcm91cCBncmFudGluZyBzdWRvIHByaXZpbGVnZXNcIikuZGVmYXVsdChcbiAgICAgICAgXCJzdWRvXCJcbiAgICAgIClcbiAgICApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS1yb290LXBoYXNlXCIsIFwiaW50ZXJuYWxcIikuZGVmYXVsdChmYWxzZSkuaGlkZUhlbHAoKSlcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHsgdXNlcjogc3RyaW5nOyBncm91cDogc3RyaW5nOyByb290UGhhc2U6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICBhd2FpdCBkcm9wU3Vkbyh7XG4gICAgICAgICAgdXNlcjogb3B0aW9ucy51c2VyLFxuICAgICAgICAgIGdyb3VwOiBvcHRpb25zLmdyb3VwLFxuICAgICAgICAgIHJvb3RQaGFzZTogb3B0aW9ucy5yb290UGhhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicnVuLWNvZGV4LWV4ZWNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnZva2VzIGBjb2RleCBleGVjYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHNcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLXByb21wdCA8cHJvbXB0PlwiLCBcIlByb21wdCB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tcHJvbXB0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIkZpbGUgY29udGFpbmluZyB0aGUgcHJvbXB0IHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsXG4gICAgICBcIlBhdGggdG8gdGhlIENvZGV4IENMSSBob21lIGRpcmVjdG9yeSAod2hlcmUgY29uZmlnIGZpbGVzIGFyZSBzdG9yZWQpLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tY2QgPERJUkVDVE9SWT5cIiwgXCJXb3JraW5nIGRpcmVjdG9yeSBmb3IgQ29kZXhcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tcHJveHktcG9ydCA8cG9ydD5cIixcbiAgICAgIFwiUG9ydCBvZiB0aGUgUmVzcG9uc2VzIEFQSSBQcm94eVwiLFxuICAgICAgcGFyc2VJbnRTdHJpY3RcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLWV4dHJhLWFyZ3MgPGFyZ3M+XCIsXG4gICAgICBcIkFkZGl0aW9uYWwgYXJncyB0byBwYXNzIHRocm91Z2ggdG8gYGNvZGV4IGV4ZWNgIGFzIEpTT04gYXJyYXkgb3Igc2hlbGwgc3RyaW5nLlwiLFxuICAgICAgcGFyc2VFeHRyYUFyZ3NcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1maWxlIDxGSUxFPlwiLFxuICAgICAgXCJQYXRoIHdoZXJlIHRoZSBmaW5hbCBtZXNzYWdlIGZyb20gYGNvZGV4IGV4ZWNgIHdpbGwgYmUgd3JpdHRlbi5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tb3V0cHV0LXNjaGVtYS1maWxlIDxGSUxFPlwiLFxuICAgICAgXCJQYXRoIHRvIGEgc2NoZW1hIGZpbGUgdG8gcGFzcyB0byBgY29kZXggZXhlYyAtLW91dHB1dC1zY2hlbWFgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1zYWZldHktc3RyYXRlZ3kgPHN0cmF0ZWd5PlwiLFxuICAgICAgXCJTYWZldHkgc3RyYXRlZ3kgdG8gdXNlLiBPbmUgb2YgJ2Ryb3Bfc3VkbycsICdyZWFkX29ubHknLCAndW5wcml2aWxlZ2VkX3VzZXInLCBvciAndW5zYWZlJy5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiVXNlciB0byBydW4gY29kZXggZXhlYyBhcyB3aGVuIHVzaW5nIHRoZSAndW5wcml2aWxlZ2VkX3VzZXInIHNhZmV0eSBzdHJhdGVneS5cIlxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHtcbiAgICAgICAgcHJvbXB0OiBzdHJpbmc7XG4gICAgICAgIHByb21wdEZpbGU6IHN0cmluZztcbiAgICAgICAgY29kZXhIb21lOiBzdHJpbmc7XG4gICAgICAgIGNkOiBzdHJpbmc7XG4gICAgICAgIHByb3h5UG9ydDogbnVtYmVyO1xuICAgICAgICBleHRyYUFyZ3M6IEFycmF5PHN0cmluZz47XG4gICAgICAgIG91dHB1dEZpbGU6IHN0cmluZztcbiAgICAgICAgb3V0cHV0U2NoZW1hRmlsZTogc3RyaW5nO1xuICAgICAgICBzYWZldHlTdHJhdGVneTogc3RyaW5nO1xuICAgICAgICBjb2RleFVzZXI6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHByb21wdCxcbiAgICAgICAgICBwcm9tcHRGaWxlLFxuICAgICAgICAgIGNvZGV4SG9tZSxcbiAgICAgICAgICBjZCxcbiAgICAgICAgICBwcm94eVBvcnQsXG4gICAgICAgICAgZXh0cmFBcmdzLFxuICAgICAgICAgIG91dHB1dEZpbGUsXG4gICAgICAgICAgb3V0cHV0U2NoZW1hRmlsZSxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneSxcbiAgICAgICAgICBjb2RleFVzZXIsXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9tcHQgPSBlbXB0eUFzTnVsbChwcm9tcHQpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUHJvbXB0RmlsZSA9IGVtcHR5QXNOdWxsKHByb21wdEZpbGUpO1xuICAgICAgICBsZXQgcHJvbXB0U291cmNlOiBQcm9tcHRTb3VyY2U7XG4gICAgICAgIGlmIChub3JtYWxpemVkUHJvbXB0ICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9tcHRTb3VyY2UgPSB7IHR5cGU6IFwidGV4dFwiLCBjb250ZW50OiBub3JtYWxpemVkUHJvbXB0IH07XG4gICAgICAgIH0gZWxzZSBpZiAobm9ybWFsaXplZFByb21wdEZpbGUgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21wdFNvdXJjZSA9IHsgdHlwZTogXCJmaWxlXCIsIHBhdGg6IG5vcm1hbGl6ZWRQcm9tcHRGaWxlIH07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgXCJFaXRoZXIgYHByb21wdGAgb3IgYHByb21wdF9maWxlYCBtdXN0IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBDdXN0b20gb3B0aW9uIHByb2Nlc3NpbmcgdG8gY29lcmNlcyB0byBudWxsIGRvZXMgbm90IHdvcmsgd2l0aFxuICAgICAgICAvLyBDb21tYW5kZXIuanMncyByZXF1aXJlZE9wdGlvbiwgc28gd2UgaGF2ZSB0byBwb3N0LXByb2Nlc3MgaGVyZS5cbiAgICAgICAgYXdhaXQgcnVuQ29kZXhFeGVjKHtcbiAgICAgICAgICBwcm9tcHQ6IHByb21wdFNvdXJjZSxcbiAgICAgICAgICBjb2RleEhvbWU6IGVtcHR5QXNOdWxsKGNvZGV4SG9tZSksXG4gICAgICAgICAgY2QsXG4gICAgICAgICAgcHJveHlQb3J0LFxuICAgICAgICAgIGV4dHJhQXJncyxcbiAgICAgICAgICBleHBsaWNpdE91dHB1dEZpbGU6IGVtcHR5QXNOdWxsKG91dHB1dEZpbGUpLFxuICAgICAgICAgIG91dHB1dFNjaGVtYUZpbGU6IGVtcHR5QXNOdWxsKG91dHB1dFNjaGVtYUZpbGUpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5OiB0b1NhZmV0eVN0cmF0ZWd5KHNhZmV0eVN0cmF0ZWd5KSxcbiAgICAgICAgICBjb2RleFVzZXI6IGVtcHR5QXNOdWxsKGNvZGV4VXNlciksXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwiY2hlY2std3JpdGUtYWNjZXNzXCIpXG4gICAgLmRlc2NyaXB0aW9uKFxuICAgICAgXCJDaGVja3MgdGhhdCB0aGUgdHJpZ2dlcmluZyBhY3RvciBoYXMgd3JpdGUgYWNjZXNzIHRvIHRoZSByZXBvc2l0b3J5XCJcbiAgICApXG4gICAgLm9wdGlvbihcbiAgICAgIFwiLS1hbGxvdy1ib3RzIDxib29sZWFuPlwiLFxuICAgICAgXCJBbGxvdyBHaXRIdWIgQXBwIGFuZCBib3QgYWN0b3JzIHRvIGJ5cGFzcyB0aGUgd3JpdGUtYWNjZXNzIGNoZWNrIChkZWZhdWx0OiB0cnVlKS5cIixcbiAgICAgIHBhcnNlQm9vbGVhbixcbiAgICAgIHRydWVcbiAgICApXG4gICAgLmFjdGlvbihhc3luYyAoeyBhbGxvd0JvdHMgfTogeyBhbGxvd0JvdHM6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2Vzcyh7XG4gICAgICAgIGFsbG93Qm90QWN0b3JzOiBhbGxvd0JvdHMsXG4gICAgICB9KTtcbiAgICAgIHN3aXRjaCAocmVzdWx0LnN0YXR1cykge1xuICAgICAgICBjYXNlIFwiYXBwcm92ZWRcIjoge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGBBY3RvciAnJHtyZXN1bHQuYWN0b3J9JyBpcyBwZXJtaXR0ZWQgdG8gY29udGludWUuYCk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6IHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYEFjdG9yICcke3Jlc3VsdC5hY3Rvcn0nIGlzIG5vdCBwZXJtaXR0ZWQgdG8gcnVuIHRoaXMgYWN0aW9uOiAke3Jlc3VsdC5yZWFzb259YDtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuXG4gIHByb2dyYW0ucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRTdHJpY3QodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVnZXI6ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRyYUFyZ3ModmFsdWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU2FmZXR5U3RyYXRlZ3kodmFsdWU6IHN0cmluZyk6IFNhZmV0eVN0cmF0ZWd5IHtcbiAgc3dpdGNoICh2YWx1ZSkge1xuICAgIGNhc2UgXCJkcm9wX3N1ZG9cIjpcbiAgICBjYXNlIFwicmVhZF9vbmx5XCI6XG4gICAgY2FzZSBcInVucHJpdmlsZWdlZF91c2VyXCI6XG4gICAgY2FzZSBcInVuc2FmZVwiOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNhZmV0eSBzdHJhdGVneTogJHt2YWx1ZX0uIE11c3QgYmUgb25lIG9mICdkcm9wX3N1ZG8nLCAncmVhZF9vbmx5JywgJ3VucHJpdmlsZWdlZF91c2VyJywgb3IgJ3Vuc2FmZScuYFxuICAgICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBlbXB0eUFzTnVsbCh2YWx1ZTogc3RyaW5nKTogc3RyaW5nIHwgbnVsbCB7XG4gIHJldHVybiB2YWx1ZS50cmltKCkubGVuZ3RoID09IDAgPyBudWxsIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIHBhcnNlQm9vbGVhbih2YWx1ZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB2YWx1ZS50cmltKCkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKFtcInRydWVcIiwgXCIxXCIsIFwieWVzXCIsIFwieVwiXS5pbmNsdWRlcyhub3JtYWxpemVkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGlmIChbXCJmYWxzZVwiLCBcIjBcIiwgXCJub1wiLCBcIm5cIl0uaW5jbHVkZXMobm9ybWFsaXplZCkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGJvb2xlYW4gdmFsdWU6ICR7dmFsdWV9YCk7XG59XG5cbm1haW4oKTtcbiIsICJpbXBvcnQgY29tbWFuZGVyIGZyb20gJy4vaW5kZXguanMnO1xuXG4vLyB3cmFwcGVyIHRvIHByb3ZpZGUgbmFtZWQgZXhwb3J0cyBmb3IgRVNNLlxuZXhwb3J0IGNvbnN0IHtcbiAgcHJvZ3JhbSxcbiAgY3JlYXRlQ29tbWFuZCxcbiAgY3JlYXRlQXJndW1lbnQsXG4gIGNyZWF0ZU9wdGlvbixcbiAgQ29tbWFuZGVyRXJyb3IsXG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkT3B0aW9uQXJndW1lbnRFcnJvciwgLy8gZGVwcmVjYXRlZCBvbGQgbmFtZVxuICBDb21tYW5kLFxuICBBcmd1bWVudCxcbiAgT3B0aW9uLFxuICBIZWxwLFxufSA9IGNvbW1hbmRlcjtcbiIsICJ7XG4gIFwibmFtZVwiOiBcIkBvcGVuYWkvY29kZXgtYWN0aW9uXCIsXG4gIFwidmVyc2lvblwiOiBcIjAuMC4wXCIsXG4gIFwiZGVzY3JpcHRpb25cIjogXCJHaXRIdWIgQWN0aW9uIHRvIHJ1biBjb2RleCBleGVjIHZpYSB0aGUgQ29kZXggQ0xJIHdpdGggYWNjb21wYW55aW5nIGhlbHBlciBzdGVwc1wiLFxuICBcInByaXZhdGVcIjogdHJ1ZSxcbiAgXCJzY3JpcHRzXCI6IHtcbiAgICBcImJ1aWxkXCI6IFwiZXNidWlsZCBzcmMvbWFpbi50cyAtLXNvdXJjZW1hcD1pbmxpbmUgLS1mb3JtYXQ9Y2pzIC0tYnVuZGxlIC0tcGxhdGZvcm09bm9kZSAtLXRhcmdldD1ub2RlMjAgLS1vdXRkaXI9ZGlzdFwiLFxuICAgIFwiY2hlY2tcIjogXCJ0c2MgLS1ub0VtaXRcIlxuICB9LFxuICBcImRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAYWN0aW9ucy9jb3JlXCI6IFwiXjEuMTEuMVwiLFxuICAgIFwiQG9jdG9raXQvZ3JhcGhxbFwiOiBcIl44LjIuMlwiLFxuICAgIFwiQG9jdG9raXQvcmVzdFwiOiBcIl4yMS4xLjFcIixcbiAgICBcImNvbW1hbmRlclwiOiBcIjE0LjAuMVwiLFxuICAgIFwic3RyaW5nLWFyZ3ZcIjogXCIwLjMuMlwiXG4gIH0sXG4gIFwiZGV2RGVwZW5kZW5jaWVzXCI6IHtcbiAgICBcIkB0eXBlcy9ub2RlXCI6IFwiXjIwLjEyLjdcIixcbiAgICBcImVzYnVpbGRcIjogXCJeMC4yMy4wXCIsXG4gICAgXCJ0eXBlc2NyaXB0XCI6IFwiXjUuNC41XCJcbiAgfSxcbiAgXCJwYWNrYWdlTWFuYWdlclwiOiBcInBucG1AMTAuMTcuMVwiXG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzL3Byb21pc2VzXCI7XG5cbi8qKlxuICogSW4gdGhlb3J5LCB0aGlzIGlzIG5vdCBjYWxsZWQgdW50aWwgYHNlcnZlckluZm9GaWxlYCBpcyBub24tZW1wdHksIGJ1dCB3ZVxuICogd2lsbCBwb2xsIGluIHRoZSByYXJlIGNhc2UgdGhhdCBpdCB3YXMgYSBwYXJ0aWFsIHdyaXRlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMDsgYXR0ZW1wdCA8IDEwMDsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGNvbnRlbnRzID0gYXdhaXQgZnMucmVhZEZpbGUoc2VydmVySW5mb0ZpbGUsIHsgZW5jb2Rpbmc6IFwidXRmOFwiIH0pO1xuICAgICAgY29uc3QgeyBwb3J0IH0gPSBKU09OLnBhcnNlKGNvbnRlbnRzKTtcbiAgICAgIGlmICh0eXBlb2YgcG9ydCAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29yZS5zZXRPdXRwdXQoXCJwb3J0XCIsIHBvcnQudG9TdHJpbmcoKSk7XG4gICAgICByZXR1cm47XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlYWRpbmcgc2VydmVyIGluZm86ICR7ZXJyb3J9YCk7XG4gICAgICBhd2FpdCBzbGVlcCgxMDApO1xuICAgIH1cbiAgfVxuXG4gIHRocm93IEVycm9yKGBGYWlsZWQgdG8gcmVhZCBzZXJ2ZXIgaW5mbyBmcm9tICR7c2VydmVySW5mb0ZpbGV9YCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHNsZWVwKG1zOiBudW1iZXIpOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUsIG1zKSk7XG59XG4iLCAiaW1wb3J0IHsgc3Bhd24gfSBmcm9tIFwiY2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgbWtkdGVtcCwgcmVhZEZpbGUsIHJtIH0gZnJvbSBcImZzL3Byb21pc2VzXCI7XG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgc2V0T3V0cHV0IH0gZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcblxuZXhwb3J0IHR5cGUgUHJvbXB0U291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRleHRcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJmaWxlXCI7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2FmZXR5U3RyYXRlZ3kgPVxuICB8IFwiZHJvcF9zdWRvXCJcbiAgfCBcInJlYWRfb25seVwiXG4gIHwgXCJ1bnByaXZpbGVnZWRfdXNlclwiXG4gIHwgXCJ1bnNhZmVcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJ1bkNvZGV4RXhlYyh7XG4gIHByb21wdCxcbiAgY29kZXhIb21lLFxuICBjZCxcbiAgcHJveHlQb3J0LFxuICBleHRyYUFyZ3MsXG4gIGV4cGxpY2l0T3V0cHV0RmlsZSxcbiAgb3V0cHV0U2NoZW1hRmlsZSxcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIGNvZGV4VXNlcixcbn06IHtcbiAgcHJvbXB0OiBQcm9tcHRTb3VyY2U7XG4gIGNvZGV4SG9tZTogc3RyaW5nIHwgbnVsbDtcbiAgY2Q6IHN0cmluZztcbiAgcHJveHlQb3J0OiBudW1iZXI7XG4gIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgZXhwbGljaXRPdXRwdXRGaWxlOiBzdHJpbmcgfCBudWxsO1xuICBvdXRwdXRTY2hlbWFGaWxlOiBzdHJpbmcgfCBudWxsO1xuICBzYWZldHlTdHJhdGVneTogU2FmZXR5U3RyYXRlZ3k7XG4gIGNvZGV4VXNlcjogc3RyaW5nIHwgbnVsbDtcbn0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgbGV0IGlucHV0OiBzdHJpbmc7XG4gIHN3aXRjaCAocHJvbXB0LnR5cGUpIHtcbiAgICBjYXNlIFwidGV4dFwiOlxuICAgICAgaW5wdXQgPSBwcm9tcHQuY29udGVudDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICBpbnB1dCA9IGF3YWl0IHJlYWRGaWxlKHByb21wdC5wYXRoLCBcInV0ZjhcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGxldCBvdXRwdXRGaWxlOiBPdXRwdXRGaWxlO1xuICBpZiAoZXhwbGljaXRPdXRwdXRGaWxlICE9IG51bGwpIHtcbiAgICBvdXRwdXRGaWxlID0geyB0eXBlOiBcImV4cGxpY2l0XCIsIGZpbGU6IGV4cGxpY2l0T3V0cHV0RmlsZSB9O1xuICB9IGVsc2Uge1xuICAgIG91dHB1dEZpbGUgPSBhd2FpdCBjcmVhdGVUZW1wT3V0cHV0RmlsZSgpO1xuICB9XG5cbiAgY29uc3QgY29tbWFuZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWRfdXNlclwiKSB7XG4gICAgaWYgKGNvZGV4VXNlciA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiY29kZXhVc2VyIG11c3QgYmUgc3BlY2lmaWVkIHdoZW4gdXNpbmcgdGhlICd1bnByaXZpbGVnZWRfdXNlcicgc2FmZXR5IHN0cmF0ZWd5LlwiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbW1hbmQucHVzaChcInN1ZG9cIiwgXCItdVwiLCBjb2RleFVzZXIsIFwiLS1cIik7XG4gIH1cblxuICBjb25zdCBwcm92aWRlckJhc2VVcmwgPSBgaHR0cDovLzEyNy4wLjAuMToke3Byb3h5UG9ydH0vdjFgO1xuICBjb25zdCBwcm92aWRlcklkID0gXCJvcGVuYWktcHJveHlcIjtcbiAgY29uc3QgcHJvdmlkZXJDb25maWcgPSBgbW9kZWxfcHJvdmlkZXJzLiR7cHJvdmlkZXJJZH09eyBuYW1lID0gXCJPcGVuQUkgUHJveHlcIiwgYmFzZV91cmwgPSBcIiR7cHJvdmlkZXJCYXNlVXJsfVwiLCB3aXJlX2FwaSA9IFwicmVzcG9uc2VzXCIgfWA7XG5cbiAgY29tbWFuZC5wdXNoKFxuICAgIFwiY29kZXhcIixcbiAgICBcImV4ZWNcIixcbiAgICBcIi0tc2tpcC1naXQtcmVwby1jaGVja1wiLFxuICAgIFwiLS1jZFwiLFxuICAgIGNkLFxuICAgIFwiLS1jb25maWdcIixcbiAgICBwcm92aWRlckNvbmZpZyxcbiAgICBcIi0tY29uZmlnXCIsXG4gICAgYG1vZGVsX3Byb3ZpZGVyPVwiJHtwcm92aWRlcklkfVwiYCxcbiAgICBcIi0tb3V0cHV0LWxhc3QtbWVzc2FnZVwiLFxuICAgIG91dHB1dEZpbGUuZmlsZVxuICApO1xuXG4gIGlmIChvdXRwdXRTY2hlbWFGaWxlICE9IG51bGwpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLW91dHB1dC1zY2hlbWFcIiwgb3V0cHV0U2NoZW1hRmlsZSk7XG4gIH1cblxuICBjb21tYW5kLnB1c2goLi4uZXh0cmFBcmdzKTtcblxuICAvLyBOb3RlIHRoYXQgaWYgcHJvZmlsZXMgZXhwYW5kIHRvIHN1cHBvcnQgdGhlaXIgb3duIHNhbmRib3ggcG9saWNpZXMsIGFcbiAgLy8gY3VzdG9tIHByb2ZpbGUgY291bGQgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nLlxuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwicmVhZF9vbmx5XCIpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLWNvbmZpZ1wiLCAnc2FuZGJveF9tb2RlPVwicmVhZC1vbmx5XCInKTtcbiAgfVxuXG4gIGNvbnN0IGVudiA9IHsgLi4ucHJvY2Vzcy5lbnYgfTtcbiAgbGV0IGV4dHJhRW52ID0gXCJcIjtcbiAgaWYgKGNvZGV4SG9tZSAhPSBudWxsKSB7XG4gICAgZW52LkNPREVYX0hPTUUgPSBjb2RleEhvbWU7XG4gICAgZXh0cmFFbnYgPSBgQ09ERVhfSE9NRT0ke2NvZGV4SG9tZX0gYDtcbiAgfVxuXG4gIC8vIFNwbGl0IHRoZSBgcHJvZ3JhbWAgZnJvbSB0aGUgYGFyZ3NgIGZvciBgc3Bhd24oKWAuXG4gIGNvbnN0IHByb2dyYW0gPSBjb21tYW5kLnNoaWZ0KCkhO1xuICBjb25zb2xlLmxvZyhcbiAgICBgUnVubmluZzogJHtleHRyYUVudn0ke3Byb2dyYW19ICR7Y29tbWFuZFxuICAgICAgLm1hcCgoYSkgPT4gSlNPTi5zdHJpbmdpZnkoYSkpXG4gICAgICAuam9pbihcIiBcIil9YFxuICApO1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IGNoaWxkID0gc3Bhd24ocHJvZ3JhbSwgY29tbWFuZCwge1xuICAgICAgZW52LFxuICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICB9KTtcbiAgICBjaGlsZC5zdGRpbi53cml0ZShpbnB1dCk7XG4gICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICBjaGlsZC5vbihcImVycm9yXCIsIHJlamVjdCk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIGFzeW5jIChjb2RlKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke3Byb2dyYW19IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBmaW5hbGl6ZUV4ZWN1dGlvbihvdXRwdXRGaWxlKTtcbiAgICAgICAgcmVzb2x2ZSgpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZmluYWxpemVFeGVjdXRpb24ob3V0cHV0RmlsZTogT3V0cHV0RmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICB0cnkge1xuICAgIGNvbnN0IGxhc3RNZXNzYWdlID0gYXdhaXQgcmVhZEZpbGUob3V0cHV0RmlsZS5maWxlLCBcInV0ZjhcIik7XG4gICAgc2V0T3V0cHV0KFwiZmluYWxfbWVzc2FnZVwiLCBsYXN0TWVzc2FnZSk7XG4gIH0gZmluYWxseSB7XG4gICAgYXdhaXQgY2xlYW51cFRlbXBPdXRwdXQob3V0cHV0RmlsZSk7XG4gIH1cbn1cblxudHlwZSBPdXRwdXRGaWxlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImV4cGxpY2l0XCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwidGVtcFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH07XG5cbmFzeW5jIGZ1bmN0aW9uIGNyZWF0ZVRlbXBPdXRwdXRGaWxlKCk6IFByb21pc2U8T3V0cHV0RmlsZT4ge1xuICBjb25zdCBkaXIgPSBhd2FpdCBta2R0ZW1wKFwiY29kZXgtZXhlYy1cIik7XG4gIHJldHVybiB7IHR5cGU6IFwidGVtcFwiLCBmaWxlOiBwYXRoLmpvaW4oZGlyLCBcIm91dHB1dC5tZFwiKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwVGVtcE91dHB1dChvdXRwdXRGaWxlOiBPdXRwdXRGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gIHN3aXRjaCAob3V0cHV0RmlsZS50eXBlKSB7XG4gICAgY2FzZSBcImV4cGxpY2l0XCI6XG4gICAgICAvLyBEbyBub3QgZGVsZXRlIHVzZXItc3BlY2lmaWVkIG91dHB1dCBmaWxlcy5cbiAgICAgIHJldHVybjtcbiAgICBjYXNlIFwidGVtcFwiOiB7XG4gICAgICBjb25zdCB7IGZpbGUgfSA9IG91dHB1dEZpbGU7XG4gICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSk7XG4gICAgICBhd2FpdCBybShkaXIsIHsgcmVjdXJzaXZlOiB0cnVlLCBmb3JjZTogdHJ1ZSB9KTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICBpZ25vcmVGYWlsdXJlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEV4ZWNSZXN1bHQge1xuICBjb2RlOiBudW1iZXI7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wU3Vkb09wdGlvbnMge1xuICB1c2VyOiBzdHJpbmc7XG4gIGdyb3VwOiBzdHJpbmc7XG4gIHJvb3RQaGFzZTogYm9vbGVhbjtcbn1cblxuY29uc3QgTElOVVhfUExBVEZPUk0gPSBcImxpbnV4XCI7XG5jb25zdCBNQUNPU19QTEFURk9STSA9IFwiZGFyd2luXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcm9wU3VkbyhvcHRpb25zOiBEcm9wU3Vkb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtO1xuICBpZiAoIVtMSU5VWF9QTEFURk9STSwgTUFDT1NfUExBVEZPUk1dLmluY2x1ZGVzKHBsYXRmb3JtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcF9zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwbGF0Zm9ybX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHsgcm9vdFBoYXNlIH0gPSBvcHRpb25zO1xuICBpZiAocm9vdFBoYXNlKSB7XG4gICAgYXdhaXQgZHJvcFN1ZG9XaXRoUHJpdmlsZWdlcyhvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBlbnN1cmVQYXNzd29yZGxlc3NTdWRvKCk7XG4gIC8vIGBzdWRvIC1LYCBpbnZhbGlkYXRlcyBjYWNoZWQgY3JlZGVudGlhbHMgYnV0IGV4aXRzIG5vbi16ZXJvIHdoZW4gbm8gdGlja2V0XG4gIC8vIGV4aXN0cyB5ZXQuIElnbm9yZSB0aGF0IGZhaWx1cmUgc28gZnJlc2ggcnVubmVycyBkb24ndCBibG93IHVwLlxuICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLUtcIl0sIHsgaWdub3JlRmFpbHVyZTogdHJ1ZSB9KTtcblxuICBjb25zdCBleGVjQXJncyA9IFsuLi5wcm9jZXNzLmV4ZWNBcmd2XTtcbiAgY29uc3Qgc2NyaXB0UGF0aCA9IHByb2Nlc3MuYXJndlsxXTtcbiAgLy8gUmUtZW50ZXIgdGhpcyBjb21tYW5kIHVuZGVyIHN1ZG8gc28gdGhlIHByaXZpbGVnZS1kcm9wcGluZyB3b3JrIGhhcHBlbnMgaW4gYVxuICAvLyBzaW5nbGUgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGUgaG9zdCBwbGF0Zm9ybS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcbiAgICBcIi1uXCIsXG4gICAgXCJub2RlXCIsXG4gICAgLi4uZXhlY0FyZ3MsXG4gICAgc2NyaXB0UGF0aCxcbiAgICBcImRyb3Atc3Vkb1wiLFxuICAgIFwiLS1yb290LXBoYXNlXCIsXG4gICAgXCItLXVzZXJcIixcbiAgICBvcHRpb25zLnVzZXIsXG4gICAgXCItLWdyb3VwXCIsXG4gICAgb3B0aW9ucy5ncm91cCxcbiAgXSk7XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgc3VkbyB0aWNrZXQgYWdhaW47IGlnbm9yZSBmYWlsdXJlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gIC8vIGFib3ZlIChzb21lIGVudmlyb25tZW50cyByZXR1cm4gYW4gZXJyb3Igd2hlbiBubyB0aW1lc3RhbXAgZXhpc3RzKS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgPT09IFwiZnVuY3Rpb25cIiAmJiBwcm9jZXNzLmdldHVpZCgpICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcC1zdWRvIHJvb3QgcGhhc2UgbXVzdCBydW4gYXMgcm9vdC5cIik7XG4gIH1cblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXG4gIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIGNhc2UgTElOVVhfUExBVEZPUk06IHtcbiAgICAgIGlmIChhd2FpdCBpc1VzZXJJbkdyb3VwKG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJkZWx1c2VyXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkZWx1c2VyXCIsIFtvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXBdKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBVc2VkICdkZWx1c2VyICR7b3B0aW9ucy51c2VyfSAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJncGFzc3dkXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJncGFzc3dkXCIsIFtcIi1kXCIsIG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cF0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFVzZWQgJ2dwYXNzd2QgLWQgJHtvcHRpb25zLnVzZXJ9ICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmVpdGhlciBkZWx1c2VyIG5vciBncGFzc3dkIGF2YWlsYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtvcHRpb25zLnVzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtvcHRpb25zLmdyb3VwfSBncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBNQUNPU19QTEFURk9STToge1xuICAgICAgaWYgKGF3YWl0IGlzVXNlckluR3JvdXAob3B0aW9ucy51c2VyLCBvcHRpb25zLmdyb3VwKSkge1xuICAgICAgICBhd2FpdCBleGVjQ29tbWFuZChcImRzZWRpdGdyb3VwXCIsIFtcbiAgICAgICAgICBcIi1vXCIsXG4gICAgICAgICAgXCJlZGl0XCIsXG4gICAgICAgICAgXCItZFwiLFxuICAgICAgICAgIG9wdGlvbnMudXNlcixcbiAgICAgICAgICBcIi10XCIsXG4gICAgICAgICAgXCJ1c2VyXCIsXG4gICAgICAgICAgb3B0aW9ucy5ncm91cCxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBVc2VkICdkc2VkaXRncm91cCAtbyBlZGl0IC1kICR7b3B0aW9ucy51c2VyfSAtdCB1c2VyICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICApO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAke29wdGlvbnMudXNlcn0gaXMgbm90IGEgbWVtYmVyIG9mIHRoZSAke29wdGlvbnMuZ3JvdXB9IGdyb3VwLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcF9zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwcm9jZXNzLnBsYXRmb3JtfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCByZW1vdmVVc2VyRnJvbVN1ZG9lcnNEKG9wdGlvbnMudXNlcik7XG4gIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzLmQgcmVxdWlyaW5nIGNoYW5nZXMuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzdWRvZXJzTWVzc2FnZSA9IGF3YWl0IHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShcbiAgICBcIi9ldGMvc3Vkb2Vyc1wiLFxuICAgIG9wdGlvbnMudXNlclxuICApO1xuICBpZiAoc3Vkb2Vyc01lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhzdWRvZXJzTWVzc2FnZSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzIHJlcXVpcmluZyBjaGFuZ2VzLmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgY29uc29sZS5sb2coYCR7b3B0aW9ucy51c2VyfSBhbHJlYWR5IGxhY2tzIHN1ZG8gcHJpdmlsZWdlcy5gKTtcbiAgfVxuXG4gIGNvbnN0IGdyb3Vwc0FmdGVyID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItR25cIiwgb3B0aW9ucy51c2VyXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gIH0pO1xuICBjb25zb2xlLmxvZyhcbiAgICBgR3JvdXBzIGZvciAke29wdGlvbnMudXNlcn0gYWZ0ZXIgY2xlYW51cDogJHtncm91cHNBZnRlci5zdGRvdXQudHJpbSgpfWBcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLW5cIiwgXCJ0cnVlXCJdLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZDogcGFzc3dvcmRsZXNzIHN1ZG8gbm90IGF2YWlsYWJsZS5cIik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNVc2VySW5Hcm91cCh1c2VyOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItbkdcIiwgdXNlcl0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gIH0pO1xuICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ3JvdXBzID0gcmVzdWx0LnN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwKTtcbiAgcmV0dXJuIGdyb3Vwcy5pbmNsdWRlcyhncm91cCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRFeGlzdHMoYmluYXJ5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJzaFwiLCBbXCItY1wiLCBgY29tbWFuZCAtdiAke2JpbmFyeX1gXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgaWdub3JlRmFpbHVyZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiByZXN1bHQuY29kZSA9PT0gMDtcbn1cblxuLyoqXG4gKiBTdHJpcHMgbm9uLWNvbW1lbnQgZW50cmllcyBncmFudGluZyBzdWRvIHRvIGB1c2VyYCBhY3Jvc3MgYC9ldGMvc3Vkb2Vycy5kYFxuICogZmlsZXMuXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAgIC0gZW51bWVyYXRlIHJlZ3VsYXIgZmlsZXMgdW5kZXIgYC9ldGMvc3Vkb2Vycy5kYFxuICogICAtIHJlbW92ZSBsaW5lcyB3aG9zZSBmaXJzdCB0b2tlbiBtYXRjaGVzIHRoZSB0YXJnZXQgdXNlciB3aGlsZSBrZWVwaW5nXG4gKiAgICAgY29tbWVudHMvYmxhbmsgbGluZXMgaW50YWN0XG4gKiAgIC0gcmV3cml0ZSBmaWxlcyBpbi1wbGFjZSB3aXRoIG9yaWdpbmFsIG5ld2xpbmUgc3R5bGUgYW5kIHBlcm1pc3Npb25zXG4gKiAgIC0gcmVwb3J0IHdoaWNoIGZpbGVzIHdlcmUgY2hhbmdlZCBzbyBjYWxsZXJzIGNhbiBzdXJmYWNlIHVzZWZ1bCBsb2dzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZVVzZXJGcm9tU3Vkb2Vyc0QodXNlcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gIGNvbnN0IHN1ZG9lcnNEaXIgPSBcIi9ldGMvc3Vkb2Vycy5kXCI7XG4gIGxldCBlbnRyaWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoc3Vkb2Vyc0RpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGVudHJpZXMgPSBkaXJFbnRyaWVzXG4gICAgICAuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0ZpbGUoKSlcbiAgICAgIC5tYXAoKGRpcmVudCkgPT4gcGF0aC5qb2luKHN1ZG9lcnNEaXIsIGRpcmVudC5uYW1lKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnlQYXRoIG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKGVudHJ5UGF0aCwgdXNlcik7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2VzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHVzZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGxldCBzdGF0cztcbiAgbGV0IG9yaWdpbmFsOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBvcmlnaW5hbCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3bGluZSA9IG9yaWdpbmFsLmluY2x1ZGVzKFwiXFxyXFxuXCIpID8gXCJcXHJcXG5cIiA6IFwiXFxuXCI7XG4gIGNvbnN0IGVuZHNXaXRoTmV3bGluZSA9XG4gICAgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXG5cIikgfHwgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXHJcXG5cIik7XG4gIGNvbnN0IHJhd0xpbmVzID0gb3JpZ2luYWwuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKHJhd0xpbmVzLmxlbmd0aCA+IDAgJiYgcmF3TGluZXNbcmF3TGluZXMubGVuZ3RoIC0gMV0gPT09IFwiXCIpIHtcbiAgICByYXdMaW5lcy5wb3AoKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkTGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3TGluZXMpIHtcbiAgICBjb25zdCB0cmltbWVkTGVhZGluZyA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBmaWx0ZXJlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHRva2VucyA9IHRyaW1tZWRMZWFkaW5nLnNwbGl0KC9cXHMrLyk7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gdXNlcikge1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZWJ1aWx0ID0gZmlsdGVyZWRMaW5lcy5qb2luKG5ld2xpbmUpICsgKGVuZHNXaXRoTmV3bGluZSA/IG5ld2xpbmUgOiBcIlwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIHJlYnVpbHQsIFwidXRmOFwiKTtcbiAgICBhd2FpdCBmcy5jaG1vZChmaWxlUGF0aCwgc3RhdHMubW9kZSAmIDBvNzc3KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYFJlbW92ZWQgJHt1c2VyfSBlbnRyeSBmcm9tICR7ZmlsZVBhdGh9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY0NvbW1hbmQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogQXJyYXk8c3RyaW5nPixcbiAgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRpb25zLmNhcHR1cmUgPz8gZmFsc2U7XG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBjYXB0dXJlID8gW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0gOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZG91dCkge1xuICAgIGNoaWxkLnN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZG91dCArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZGVycikge1xuICAgIGNoaWxkLnN0ZGVyci5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZGVyciArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxFeGVjUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBjb25zdCBleGl0Q29kZSA9IGNvZGUgPz8gMDtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhb3B0aW9ucy5pZ25vcmVGYWlsdXJlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9IChleGl0IGNvZGUgJHtleGl0Q29kZX0pYFxuICAgICAgICApO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5jb2RlID0gZXhpdENvZGU7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZG91dCA9IHN0ZG91dDtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgY29kZTogZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIEV4ZWNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9yZXN0XCI7XG5cbmV4cG9ydCB0eXBlIFdyaXRlQWNjZXNzQ2hlY2sgPVxuICB8IHtcbiAgICAgIHN0YXR1czogXCJhcHByb3ZlZFwiO1xuICAgICAgYWN0b3I6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCI7XG4gICAgICBhY3Rvcjogc3RyaW5nO1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgfTtcblxudHlwZSBFbnN1cmVXcml0ZUFjY2Vzc09wdGlvbnMgPSB7XG4gIG9jdG9raXQ/OiBPY3Rva2l0O1xuICB0b2tlbj86IHN0cmluZztcbiAgYWN0b3I/OiBzdHJpbmc7XG4gIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBib3QgYWN0b3JzIHN1Y2ggYXMgZGVwZW5kYWJvdCBhcmUgYWxsb3dlZCB3aXRob3V0XG4gICAqIGNoZWNraW5nIGNvbGxhYm9yYXRvciBwZXJtaXNzaW9ucy4gU2V0IHRvIGZhbHNlIHRvIHJlcXVpcmUgYm90cyB0byBwYXNzIHRoZVxuICAgKiBzYW1lIGNoZWNrcyBhcyBodW1hbiB1c2Vycy5cbiAgICovXG4gIGFsbG93Qm90QWN0b3JzPzogYm9vbGVhbjtcbn07XG5cbi8qKlxuICogQ2hlY2tzIHRoYXQgdGhlIEdpdEh1YiBhY3RvciB3aGljaCB0cmlnZ2VyZWQgdGhlIGN1cnJlbnQgd29ya2Zsb3cgaGFzIHdyaXRlXG4gKiBhY2Nlc3MgdG8gdGhlIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVBY3Rvckhhc1dyaXRlQWNjZXNzKFxuICBvcHRpb25zOiBFbnN1cmVXcml0ZUFjY2Vzc09wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8V3JpdGVBY2Nlc3NDaGVjaz4ge1xuICBjb25zdCBhY3RvciA9IG9wdGlvbnMuYWN0b3IgPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX0FDVE9SO1xuICBjb25zdCByZXBvc2l0b3J5ID0gb3B0aW9ucy5yZXBvc2l0b3J5ID8/IHByb2Nlc3MuZW52LkdJVEhVQl9SRVBPU0lUT1JZO1xuICBjb25zdCBhbGxvd0JvdEFjdG9ycyA9IG9wdGlvbnMuYWxsb3dCb3RBY3RvcnMgPz8gdHJ1ZTtcblxuICBpZiAoIWFjdG9yIHx8IGFjdG9yLnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcjogYWN0b3IgPz8gXCI8dW5rbm93bj5cIixcbiAgICAgIHJlYXNvbjogXCJHSVRIVUJfQUNUT1IgaXMgbm90IHNldDsgY2Fubm90IGRldGVybWluZSB0cmlnZ2VyaW5nIHVzZXIuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGlmICghcmVwb3NpdG9yeSB8fCByZXBvc2l0b3J5LnRyaW0oKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogXCJHSVRIVUJfUkVQT1NJVE9SWSBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRhcmdldCByZXBvc2l0b3J5LlwiLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBbb3duZXIsIHJlcG9dID0gcmVwb3NpdG9yeS5zcGxpdChcIi9cIik7XG4gIGlmICghb3duZXIgfHwgIXJlcG8pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYEdJVEhVQl9SRVBPU0lUT1JZIG11c3QgYmUgaW4gdGhlIGZvcm1hdCAnb3duZXIvcmVwbycsIHJlY2VpdmVkOiAnJHtyZXBvc2l0b3J5fScuYCxcbiAgICB9O1xuICB9XG5cbiAgLy8gR2l0SHViLWJ1aWx0IHdvcmtmbG93cyAoZS5nLiBkZXBlbmRhYm90LCBnaXRodWItYWN0aW9uc1tib3RdKSBkbyBub3QgaGF2ZSBhXG4gIC8vIG1lYW5pbmdmdWwgd3JpdGUgcGVybWlzc2lvbiBjb25jZXB0LiBUaGV5IGltcGxpY2l0bHkgcnVuIHdpdGggdGhlIHRva2VuJ3MgcGVybWlzc2lvbnMuXG4gIGlmIChhbGxvd0JvdEFjdG9ycyAmJiBhY3Rvci5lbmRzV2l0aChcIltib3RdXCIpKSB7XG4gICAgY29yZS5pbmZvKGBBY3RvciAnJHthY3Rvcn0nIGlzIGEgYm90IGFjY291bnQ7IHNraXBwaW5nIGV4cGxpY2l0IHBlcm1pc3Npb24gY2hlY2suYCk7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICBjb25zdCB0b2tlbiA9IG9wdGlvbnMudG9rZW4gPz8gZ2V0VG9rZW5Gcm9tRW52KCk7XG4gIGlmICghdG9rZW4pIHtcbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogXCJBIEdpdEh1YiB0b2tlbiBpcyByZXF1aXJlZCB0byBjaGVjayBwZXJtaXNzaW9ucyAoc2V0IEdJVEhVQl9UT0tFTiBvciBHSF9UT0tFTikuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IG9jdG9raXQgPSBvcHRpb25zLm9jdG9raXQgPz8gbmV3IE9jdG9raXQoeyBhdXRoOiB0b2tlbiB9KTtcblxuICBjb3JlLmluZm8oYENoZWNraW5nIHdyaXRlIGFjY2VzcyBmb3IgYWN0b3IgJyR7YWN0b3J9JyBvbiAke293bmVyfS8ke3JlcG99YCk7XG5cbiAgbGV0IHBlcm1pc3Npb246IHN0cmluZztcbiAgdHJ5IHtcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IG9jdG9raXQucmVwb3MuZ2V0Q29sbGFib3JhdG9yUGVybWlzc2lvbkxldmVsKHtcbiAgICAgIG93bmVyLFxuICAgICAgcmVwbyxcbiAgICAgIHVzZXJuYW1lOiBhY3RvcixcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uID0gcmVzcG9uc2UuZGF0YS5wZXJtaXNzaW9uID8/IFwibm9uZVwiO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChpc05vdEZvdW5kRXJyb3IoZXJyb3IpKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgICAgYWN0b3IsXG4gICAgICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgaXMgbm90IGEgY29sbGFib3JhdG9yIG9uICR7b3duZXJ9LyR7cmVwb307IHdyaXRlIGFjY2VzcyBpcyByZXF1aXJlZC5gLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID1cbiAgICAgIGVycm9yIGluc3RhbmNlb2YgRXJyb3JcbiAgICAgICAgPyBlcnJvci5tZXNzYWdlXG4gICAgICAgIDogXCJGYWlsZWQgdG8gdmVyaWZ5IHBlcm1pc3Npb25zIGZvciBhY3RvciBkdWUgdG8gdW5rbm93biBlcnJvci5cIjtcblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgRmFpbGVkIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyBmb3IgJyR7YWN0b3J9JzogJHttZXNzYWdlfWAsXG4gICAgfTtcbiAgfVxuXG4gIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBoYXMgcGVybWlzc2lvbiBsZXZlbCAnJHtwZXJtaXNzaW9ufScuYCk7XG5cbiAgaWYgKHBlcm1pc3Npb24gPT09IFwiYWRtaW5cIiB8fCBwZXJtaXNzaW9uID09PSBcIndyaXRlXCIgfHwgcGVybWlzc2lvbiA9PT0gXCJtYWludGFpblwiKSB7XG4gICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgIGFjdG9yLFxuICAgIHJlYXNvbjogYEFjdG9yICcke2FjdG9yfScgbXVzdCBoYXZlIHdyaXRlIGFjY2VzcyB0byAke293bmVyfS8ke3JlcG99LiBEZXRlY3RlZCBwZXJtaXNzaW9uOiAnJHtwZXJtaXNzaW9ufScuYCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gZ2V0VG9rZW5Gcm9tRW52KCk6IHN0cmluZyB7XG4gIGNvbnN0IHRva2VuID0gcHJvY2Vzcy5lbnYuR0lUSFVCX1RPS0VOID8/IHByb2Nlc3MuZW52LkdIX1RPS0VOO1xuICByZXR1cm4gdG9rZW4gJiYgdG9rZW4udHJpbSgpLmxlbmd0aCA+IDAgPyB0b2tlbiA6IFwiXCI7XG59XG5cbmZ1bmN0aW9uIGlzTm90Rm91bmRFcnJvcihlcnJvcjogdW5rbm93bik6IGJvb2xlYW4ge1xuICByZXR1cm4gQm9vbGVhbihcbiAgICBlcnJvciAmJiB0eXBlb2YgZXJyb3IgPT09IFwib2JqZWN0XCIgJiYgXCJzdGF0dXNcIiBpbiBlcnJvciAmJiAoZXJyb3IgYXMgeyBzdGF0dXM/OiBudW1iZXIgfSkuc3RhdHVzID09PSA0MDQsXG4gICk7XG59XG4iLCAiZXhwb3J0IGZ1bmN0aW9uIGdldFVzZXJBZ2VudCgpIHtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgPT09IFwib2JqZWN0XCIgJiYgXCJ1c2VyQWdlbnRcIiBpbiBuYXZpZ2F0b3IpIHtcbiAgICByZXR1cm4gbmF2aWdhdG9yLnVzZXJBZ2VudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgcHJvY2VzcyA9PT0gXCJvYmplY3RcIiAmJiBwcm9jZXNzLnZlcnNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBgTm9kZS5qcy8ke3Byb2Nlc3MudmVyc2lvbi5zdWJzdHIoMSl9ICgke3Byb2Nlc3MucGxhdGZvcm19OyAke1xuICAgICAgcHJvY2Vzcy5hcmNoXG4gICAgfSlgO1xuICB9XG5cbiAgcmV0dXJuIFwiPGVudmlyb25tZW50IHVuZGV0ZWN0YWJsZT5cIjtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyKHN0YXRlLCBuYW1lLCBtZXRob2QsIG9wdGlvbnMpIHtcbiAgaWYgKHR5cGVvZiBtZXRob2QgIT09IFwiZnVuY3Rpb25cIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcIm1ldGhvZCBmb3IgYmVmb3JlIGhvb2sgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICB9XG5cbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkobmFtZSkpIHtcbiAgICByZXR1cm4gbmFtZS5yZXZlcnNlKCkucmVkdWNlKChjYWxsYmFjaywgbmFtZSkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUsIG5hbWUsIGNhbGxiYWNrLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH1cblxuICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7XG4gICAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgICAgcmV0dXJuIG1ldGhvZChvcHRpb25zKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RhdGUucmVnaXN0cnlbbmFtZV0ucmVkdWNlKChtZXRob2QsIHJlZ2lzdGVyZWQpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3RlcmVkLmhvb2suYmluZChudWxsLCBtZXRob2QsIG9wdGlvbnMpO1xuICAgIH0sIG1ldGhvZCkoKTtcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiBhZGRIb29rKHN0YXRlLCBraW5kLCBuYW1lLCBob29rKSB7XG4gIGNvbnN0IG9yaWcgPSBob29rO1xuICBpZiAoIXN0YXRlLnJlZ2lzdHJ5W25hbWVdKSB7XG4gICAgc3RhdGUucmVnaXN0cnlbbmFtZV0gPSBbXTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImJlZm9yZVwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihvcmlnLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiYWZ0ZXJcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICBsZXQgcmVzdWx0O1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgICAgIC50aGVuKG1ldGhvZC5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbigocmVzdWx0XykgPT4ge1xuICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdF87XG4gICAgICAgICAgcmV0dXJuIG9yaWcocmVzdWx0LCBvcHRpb25zKTtcbiAgICAgICAgfSlcbiAgICAgICAgLnRoZW4oKCkgPT4ge1xuICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJlcnJvclwiKSB7XG4gICAgaG9vayA9IChtZXRob2QsIG9wdGlvbnMpID0+IHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICAgIHJldHVybiBvcmlnKGVycm9yLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnB1c2goe1xuICAgIGhvb2s6IGhvb2ssXG4gICAgb3JpZzogb3JpZyxcbiAgfSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVIb29rKHN0YXRlLCBuYW1lLCBtZXRob2QpIHtcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IGluZGV4ID0gc3RhdGUucmVnaXN0cnlbbmFtZV1cbiAgICAubWFwKChyZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5vcmlnO1xuICAgIH0pXG4gICAgLmluZGV4T2YobWV0aG9kKTtcblxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUucmVnaXN0cnlbbmFtZV0uc3BsaWNlKGluZGV4LCAxKTtcbn1cbiIsICIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHsgcmVnaXN0ZXIgfSBmcm9tIFwiLi9saWIvcmVnaXN0ZXIuanNcIjtcbmltcG9ydCB7IGFkZEhvb2sgfSBmcm9tIFwiLi9saWIvYWRkLmpzXCI7XG5pbXBvcnQgeyByZW1vdmVIb29rIH0gZnJvbSBcIi4vbGliL3JlbW92ZS5qc1wiO1xuXG4vLyBiaW5kIHdpdGggYXJyYXkgb2YgYXJndW1lbnRzOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjE3OTI5MTNcbmNvbnN0IGJpbmQgPSBGdW5jdGlvbi5iaW5kO1xuY29uc3QgYmluZGFibGUgPSBiaW5kLmJpbmQoYmluZCk7XG5cbmZ1bmN0aW9uIGJpbmRBcGkoaG9vaywgc3RhdGUsIG5hbWUpIHtcbiAgY29uc3QgcmVtb3ZlSG9va1JlZiA9IGJpbmRhYmxlKHJlbW92ZUhvb2ssIG51bGwpLmFwcGx5KFxuICAgIG51bGwsXG4gICAgbmFtZSA/IFtzdGF0ZSwgbmFtZV0gOiBbc3RhdGVdXG4gICk7XG4gIGhvb2suYXBpID0geyByZW1vdmU6IHJlbW92ZUhvb2tSZWYgfTtcbiAgaG9vay5yZW1vdmUgPSByZW1vdmVIb29rUmVmO1xuICBbXCJiZWZvcmVcIiwgXCJlcnJvclwiLCBcImFmdGVyXCIsIFwid3JhcFwiXS5mb3JFYWNoKChraW5kKSA9PiB7XG4gICAgY29uc3QgYXJncyA9IG5hbWUgPyBbc3RhdGUsIGtpbmQsIG5hbWVdIDogW3N0YXRlLCBraW5kXTtcbiAgICBob29rW2tpbmRdID0gaG9vay5hcGlba2luZF0gPSBiaW5kYWJsZShhZGRIb29rLCBudWxsKS5hcHBseShudWxsLCBhcmdzKTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIFNpbmd1bGFyKCkge1xuICBjb25zdCBzaW5ndWxhckhvb2tOYW1lID0gU3ltYm9sKFwiU2luZ3VsYXJcIik7XG4gIGNvbnN0IHNpbmd1bGFySG9va1N0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcbiAgY29uc3Qgc2luZ3VsYXJIb29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIGJpbmRBcGkoc2luZ3VsYXJIb29rLCBzaW5ndWxhckhvb2tTdGF0ZSwgc2luZ3VsYXJIb29rTmFtZSk7XG4gIHJldHVybiBzaW5ndWxhckhvb2s7XG59XG5cbmZ1bmN0aW9uIENvbGxlY3Rpb24oKSB7XG4gIGNvbnN0IHN0YXRlID0ge1xuICAgIHJlZ2lzdHJ5OiB7fSxcbiAgfTtcblxuICBjb25zdCBob29rID0gcmVnaXN0ZXIuYmluZChudWxsLCBzdGF0ZSk7XG4gIGJpbmRBcGkoaG9vaywgc3RhdGUpO1xuXG4gIHJldHVybiBob29rO1xufVxuXG5leHBvcnQgZGVmYXVsdCB7IFNpbmd1bGFyLCBDb2xsZWN0aW9uIH07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciB1c2VyQWdlbnQgPSBgb2N0b2tpdC1lbmRwb2ludC5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbnZhciBERUZBVUxUUyA9IHtcbiAgbWV0aG9kOiBcIkdFVFwiLFxuICBiYXNlVXJsOiBcImh0dHBzOi8vYXBpLmdpdGh1Yi5jb21cIixcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogXCJhcHBsaWNhdGlvbi92bmQuZ2l0aHViLnYzK2pzb25cIixcbiAgICBcInVzZXItYWdlbnRcIjogdXNlckFnZW50XG4gIH0sXG4gIG1lZGlhVHlwZToge1xuICAgIGZvcm1hdDogXCJcIlxuICB9XG59O1xuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9sb3dlcmNhc2Uta2V5cy5qc1xuZnVuY3Rpb24gbG93ZXJjYXNlS2V5cyhvYmplY3QpIHtcbiAgaWYgKCFvYmplY3QpIHtcbiAgICByZXR1cm4ge307XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdCkucmVkdWNlKChuZXdPYmosIGtleSkgPT4ge1xuICAgIG5ld09ialtrZXkudG9Mb3dlckNhc2UoKV0gPSBvYmplY3Rba2V5XTtcbiAgICByZXR1cm4gbmV3T2JqO1xuICB9LCB7fSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbWVyZ2UtZGVlcC5qc1xuZnVuY3Rpb24gbWVyZ2VEZWVwKGRlZmF1bHRzLCBvcHRpb25zKSB7XG4gIGNvbnN0IHJlc3VsdCA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRzKTtcbiAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3Qob3B0aW9uc1trZXldKSkge1xuICAgICAgaWYgKCEoa2V5IGluIGRlZmF1bHRzKSkgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICAgIGVsc2UgcmVzdWx0W2tleV0gPSBtZXJnZURlZXAoZGVmYXVsdHNba2V5XSwgb3B0aW9uc1trZXldKTtcbiAgICB9IGVsc2Uge1xuICAgICAgT2JqZWN0LmFzc2lnbihyZXN1bHQsIHsgW2tleV06IG9wdGlvbnNba2V5XSB9KTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9yZW1vdmUtdW5kZWZpbmVkLXByb3BlcnRpZXMuanNcbmZ1bmN0aW9uIHJlbW92ZVVuZGVmaW5lZFByb3BlcnRpZXMob2JqKSB7XG4gIGZvciAoY29uc3Qga2V5IGluIG9iaikge1xuICAgIGlmIChvYmpba2V5XSA9PT0gdm9pZCAwKSB7XG4gICAgICBkZWxldGUgb2JqW2tleV07XG4gICAgfVxuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9tZXJnZS5qc1xuZnVuY3Rpb24gbWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2Ygcm91dGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICBsZXQgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KFwiIFwiKTtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih1cmwgPyB7IG1ldGhvZCwgdXJsIH0gOiB7IHVybDogbWV0aG9kIH0sIG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIG9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCByb3V0ZSk7XG4gIH1cbiAgb3B0aW9ucy5oZWFkZXJzID0gbG93ZXJjYXNlS2V5cyhvcHRpb25zLmhlYWRlcnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMpO1xuICByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9wdGlvbnMuaGVhZGVycyk7XG4gIGNvbnN0IG1lcmdlZE9wdGlvbnMgPSBtZXJnZURlZXAoZGVmYXVsdHMgfHwge30sIG9wdGlvbnMpO1xuICBpZiAob3B0aW9ucy51cmwgPT09IFwiL2dyYXBocWxcIikge1xuICAgIGlmIChkZWZhdWx0cyAmJiBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3M/Lmxlbmd0aCkge1xuICAgICAgbWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MgPSBkZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MuZmlsdGVyKFxuICAgICAgICAocHJldmlldykgPT4gIW1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzLmluY2x1ZGVzKHByZXZpZXcpXG4gICAgICApLmNvbmNhdChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyk7XG4gICAgfVxuICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gKG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzIHx8IFtdKS5tYXAoKHByZXZpZXcpID0+IHByZXZpZXcucmVwbGFjZSgvLXByZXZpZXcvLCBcIlwiKSk7XG4gIH1cbiAgcmV0dXJuIG1lcmdlZE9wdGlvbnM7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2FkZC1xdWVyeS1wYXJhbWV0ZXJzLmpzXG5mdW5jdGlvbiBhZGRRdWVyeVBhcmFtZXRlcnModXJsLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IHNlcGFyYXRvciA9IC9cXD8vLnRlc3QodXJsKSA/IFwiJlwiIDogXCI/XCI7XG4gIGNvbnN0IG5hbWVzID0gT2JqZWN0LmtleXMocGFyYW1ldGVycyk7XG4gIGlmIChuYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIHJldHVybiB1cmwgKyBzZXBhcmF0b3IgKyBuYW1lcy5tYXAoKG5hbWUpID0+IHtcbiAgICBpZiAobmFtZSA9PT0gXCJxXCIpIHtcbiAgICAgIHJldHVybiBcInE9XCIgKyBwYXJhbWV0ZXJzLnEuc3BsaXQoXCIrXCIpLm1hcChlbmNvZGVVUklDb21wb25lbnQpLmpvaW4oXCIrXCIpO1xuICAgIH1cbiAgICByZXR1cm4gYCR7bmFtZX09JHtlbmNvZGVVUklDb21wb25lbnQocGFyYW1ldGVyc1tuYW1lXSl9YDtcbiAgfSkuam9pbihcIiZcIik7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL2V4dHJhY3QtdXJsLXZhcmlhYmxlLW5hbWVzLmpzXG52YXIgdXJsVmFyaWFibGVSZWdleCA9IC9cXHtbXnt9fV0rXFx9L2c7XG5mdW5jdGlvbiByZW1vdmVOb25DaGFycyh2YXJpYWJsZU5hbWUpIHtcbiAgcmV0dXJuIHZhcmlhYmxlTmFtZS5yZXBsYWNlKC8oPzpeXFxXKyl8KD86KD88IVxcVylcXFcrJCkvZywgXCJcIikuc3BsaXQoLywvKTtcbn1cbmZ1bmN0aW9uIGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCkge1xuICBjb25zdCBtYXRjaGVzID0gdXJsLm1hdGNoKHVybFZhcmlhYmxlUmVnZXgpO1xuICBpZiAoIW1hdGNoZXMpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgcmV0dXJuIG1hdGNoZXMubWFwKHJlbW92ZU5vbkNoYXJzKS5yZWR1Y2UoKGEsIGIpID0+IGEuY29uY2F0KGIpLCBbXSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL29taXQuanNcbmZ1bmN0aW9uIG9taXQob2JqZWN0LCBrZXlzVG9PbWl0KSB7XG4gIGNvbnN0IHJlc3VsdCA9IHsgX19wcm90b19fOiBudWxsIH07XG4gIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG9iamVjdCkpIHtcbiAgICBpZiAoa2V5c1RvT21pdC5pbmRleE9mKGtleSkgPT09IC0xKSB7XG4gICAgICByZXN1bHRba2V5XSA9IG9iamVjdFtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC91cmwtdGVtcGxhdGUuanNcbmZ1bmN0aW9uIGVuY29kZVJlc2VydmVkKHN0cikge1xuICByZXR1cm4gc3RyLnNwbGl0KC8oJVswLTlBLUZhLWZdezJ9KS9nKS5tYXAoZnVuY3Rpb24ocGFydCkge1xuICAgIGlmICghLyVbMC05QS1GYS1mXS8udGVzdChwYXJ0KSkge1xuICAgICAgcGFydCA9IGVuY29kZVVSSShwYXJ0KS5yZXBsYWNlKC8lNUIvZywgXCJbXCIpLnJlcGxhY2UoLyU1RC9nLCBcIl1cIik7XG4gICAgfVxuICAgIHJldHVybiBwYXJ0O1xuICB9KS5qb2luKFwiXCIpO1xufVxuZnVuY3Rpb24gZW5jb2RlVW5yZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24oYykge1xuICAgIHJldHVybiBcIiVcIiArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcbiAgfSk7XG59XG5mdW5jdGlvbiBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGtleSkge1xuICB2YWx1ZSA9IG9wZXJhdG9yID09PSBcIitcIiB8fCBvcGVyYXRvciA9PT0gXCIjXCIgPyBlbmNvZGVSZXNlcnZlZCh2YWx1ZSkgOiBlbmNvZGVVbnJlc2VydmVkKHZhbHVlKTtcbiAgaWYgKGtleSkge1xuICAgIHJldHVybiBlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHZhbHVlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuZnVuY3Rpb24gaXNEZWZpbmVkKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSAhPT0gdm9pZCAwICYmIHZhbHVlICE9PSBudWxsO1xufVxuZnVuY3Rpb24gaXNLZXlPcGVyYXRvcihvcGVyYXRvcikge1xuICByZXR1cm4gb3BlcmF0b3IgPT09IFwiO1wiIHx8IG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCI7XG59XG5mdW5jdGlvbiBnZXRWYWx1ZXMoY29udGV4dCwgb3BlcmF0b3IsIGtleSwgbW9kaWZpZXIpIHtcbiAgdmFyIHZhbHVlID0gY29udGV4dFtrZXldLCByZXN1bHQgPSBbXTtcbiAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgdmFsdWUgIT09IFwiXCIpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICBpZiAobW9kaWZpZXIgJiYgbW9kaWZpZXIgIT09IFwiKlwiKSB7XG4gICAgICAgIHZhbHVlID0gdmFsdWUuc3Vic3RyaW5nKDAsIHBhcnNlSW50KG1vZGlmaWVyLCAxMCkpO1xuICAgICAgfVxuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZSwgaXNLZXlPcGVyYXRvcihvcGVyYXRvcikgPyBrZXkgOiBcIlwiKVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG1vZGlmaWVyID09PSBcIipcIikge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgICAgIGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgT2JqZWN0LmtleXModmFsdWUpLmZvckVhY2goZnVuY3Rpb24oaykge1xuICAgICAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZVtrXSkpIHtcbiAgICAgICAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLCBrKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHRtcCA9IFtdO1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgICAgICB2YWx1ZS5maWx0ZXIoaXNEZWZpbmVkKS5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlMikge1xuICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlMikpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoaykpO1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWVba10udG9TdHJpbmcoKSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVVucmVzZXJ2ZWQoa2V5KSArIFwiPVwiICsgdG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgcmVzdWx0LnB1c2godG1wLmpvaW4oXCIsXCIpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAob3BlcmF0b3IgPT09IFwiO1wiKSB7XG4gICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlKSkge1xuICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIgJiYgKG9wZXJhdG9yID09PSBcIiZcIiB8fCBvcGVyYXRvciA9PT0gXCI/XCIpKSB7XG4gICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIik7XG4gICAgfSBlbHNlIGlmICh2YWx1ZSA9PT0gXCJcIikge1xuICAgICAgcmVzdWx0LnB1c2goXCJcIik7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5mdW5jdGlvbiBwYXJzZVVybCh0ZW1wbGF0ZSkge1xuICByZXR1cm4ge1xuICAgIGV4cGFuZDogZXhwYW5kLmJpbmQobnVsbCwgdGVtcGxhdGUpXG4gIH07XG59XG5mdW5jdGlvbiBleHBhbmQodGVtcGxhdGUsIGNvbnRleHQpIHtcbiAgdmFyIG9wZXJhdG9ycyA9IFtcIitcIiwgXCIjXCIsIFwiLlwiLCBcIi9cIiwgXCI7XCIsIFwiP1wiLCBcIiZcIl07XG4gIHRlbXBsYXRlID0gdGVtcGxhdGUucmVwbGFjZShcbiAgICAvXFx7KFteXFx7XFx9XSspXFx9fChbXlxce1xcfV0rKS9nLFxuICAgIGZ1bmN0aW9uKF8sIGV4cHJlc3Npb24sIGxpdGVyYWwpIHtcbiAgICAgIGlmIChleHByZXNzaW9uKSB7XG4gICAgICAgIGxldCBvcGVyYXRvciA9IFwiXCI7XG4gICAgICAgIGNvbnN0IHZhbHVlcyA9IFtdO1xuICAgICAgICBpZiAob3BlcmF0b3JzLmluZGV4T2YoZXhwcmVzc2lvbi5jaGFyQXQoMCkpICE9PSAtMSkge1xuICAgICAgICAgIG9wZXJhdG9yID0gZXhwcmVzc2lvbi5jaGFyQXQoMCk7XG4gICAgICAgICAgZXhwcmVzc2lvbiA9IGV4cHJlc3Npb24uc3Vic3RyKDEpO1xuICAgICAgICB9XG4gICAgICAgIGV4cHJlc3Npb24uc3BsaXQoLywvZykuZm9yRWFjaChmdW5jdGlvbih2YXJpYWJsZSkge1xuICAgICAgICAgIHZhciB0bXAgPSAvKFteOlxcKl0qKSg/OjooXFxkKyl8KFxcKikpPy8uZXhlYyh2YXJpYWJsZSk7XG4gICAgICAgICAgdmFsdWVzLnB1c2goZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCB0bXBbMV0sIHRtcFsyXSB8fCB0bXBbM10pKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChvcGVyYXRvciAmJiBvcGVyYXRvciAhPT0gXCIrXCIpIHtcbiAgICAgICAgICB2YXIgc2VwYXJhdG9yID0gXCIsXCI7XG4gICAgICAgICAgaWYgKG9wZXJhdG9yID09PSBcIj9cIikge1xuICAgICAgICAgICAgc2VwYXJhdG9yID0gXCImXCI7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcGVyYXRvciAhPT0gXCIjXCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IG9wZXJhdG9yO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gKHZhbHVlcy5sZW5ndGggIT09IDAgPyBvcGVyYXRvciA6IFwiXCIpICsgdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gdmFsdWVzLmpvaW4oXCIsXCIpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZW5jb2RlUmVzZXJ2ZWQobGl0ZXJhbCk7XG4gICAgICB9XG4gICAgfVxuICApO1xuICBpZiAodGVtcGxhdGUgPT09IFwiL1wiKSB7XG4gICAgcmV0dXJuIHRlbXBsYXRlO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiB0ZW1wbGF0ZS5yZXBsYWNlKC9cXC8kLywgXCJcIik7XG4gIH1cbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3BhcnNlLmpzXG5mdW5jdGlvbiBwYXJzZShvcHRpb25zKSB7XG4gIGxldCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZC50b1VwcGVyQ2FzZSgpO1xuICBsZXQgdXJsID0gKG9wdGlvbnMudXJsIHx8IFwiL1wiKS5yZXBsYWNlKC86KFthLXpdXFx3KykvZywgXCJ7JDF9XCIpO1xuICBsZXQgaGVhZGVycyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMuaGVhZGVycyk7XG4gIGxldCBib2R5O1xuICBsZXQgcGFyYW1ldGVycyA9IG9taXQob3B0aW9ucywgW1xuICAgIFwibWV0aG9kXCIsXG4gICAgXCJiYXNlVXJsXCIsXG4gICAgXCJ1cmxcIixcbiAgICBcImhlYWRlcnNcIixcbiAgICBcInJlcXVlc3RcIixcbiAgICBcIm1lZGlhVHlwZVwiXG4gIF0pO1xuICBjb25zdCB1cmxWYXJpYWJsZU5hbWVzID0gZXh0cmFjdFVybFZhcmlhYmxlTmFtZXModXJsKTtcbiAgdXJsID0gcGFyc2VVcmwodXJsKS5leHBhbmQocGFyYW1ldGVycyk7XG4gIGlmICghL15odHRwLy50ZXN0KHVybCkpIHtcbiAgICB1cmwgPSBvcHRpb25zLmJhc2VVcmwgKyB1cmw7XG4gIH1cbiAgY29uc3Qgb21pdHRlZFBhcmFtZXRlcnMgPSBPYmplY3Qua2V5cyhvcHRpb25zKS5maWx0ZXIoKG9wdGlvbikgPT4gdXJsVmFyaWFibGVOYW1lcy5pbmNsdWRlcyhvcHRpb24pKS5jb25jYXQoXCJiYXNlVXJsXCIpO1xuICBjb25zdCByZW1haW5pbmdQYXJhbWV0ZXJzID0gb21pdChwYXJhbWV0ZXJzLCBvbWl0dGVkUGFyYW1ldGVycyk7XG4gIGNvbnN0IGlzQmluYXJ5UmVxdWVzdCA9IC9hcHBsaWNhdGlvblxcL29jdGV0LXN0cmVhbS9pLnRlc3QoaGVhZGVycy5hY2NlcHQpO1xuICBpZiAoIWlzQmluYXJ5UmVxdWVzdCkge1xuICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQpIHtcbiAgICAgIGhlYWRlcnMuYWNjZXB0ID0gaGVhZGVycy5hY2NlcHQuc3BsaXQoLywvKS5tYXAoXG4gICAgICAgIChmb3JtYXQpID0+IGZvcm1hdC5yZXBsYWNlKFxuICAgICAgICAgIC9hcHBsaWNhdGlvblxcL3ZuZChcXC5cXHcrKShcXC52Myk/KFxcLlxcdyspPyhcXCtqc29uKT8kLyxcbiAgICAgICAgICBgYXBwbGljYXRpb24vdm5kJDEkMi4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gXG4gICAgICAgIClcbiAgICAgICkuam9pbihcIixcIik7XG4gICAgfVxuICAgIGlmICh1cmwuZW5kc1dpdGgoXCIvZ3JhcGhxbFwiKSkge1xuICAgICAgaWYgKG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyID0gaGVhZGVycy5hY2NlcHQubWF0Y2goLyg/PCFbXFx3LV0pW1xcdy1dKyg/PS1wcmV2aWV3KS9nKSB8fCBbXTtcbiAgICAgICAgaGVhZGVycy5hY2NlcHQgPSBwcmV2aWV3c0Zyb21BY2NlcHRIZWFkZXIuY29uY2F0KG9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzKS5tYXAoKHByZXZpZXcpID0+IHtcbiAgICAgICAgICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXQgPyBgLiR7b3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0fWAgOiBcIitqc29uXCI7XG4gICAgICAgICAgcmV0dXJuIGBhcHBsaWNhdGlvbi92bmQuZ2l0aHViLiR7cHJldmlld30tcHJldmlldyR7Zm9ybWF0fWA7XG4gICAgICAgIH0pLmpvaW4oXCIsXCIpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoW1wiR0VUXCIsIFwiSEVBRFwiXS5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgdXJsID0gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcmVtYWluaW5nUGFyYW1ldGVycyk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKFwiZGF0YVwiIGluIHJlbWFpbmluZ1BhcmFtZXRlcnMpIHtcbiAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzLmRhdGE7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChPYmplY3Qua2V5cyhyZW1haW5pbmdQYXJhbWV0ZXJzKS5sZW5ndGgpIHtcbiAgICAgICAgYm9keSA9IHJlbWFpbmluZ1BhcmFtZXRlcnM7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICghaGVhZGVyc1tcImNvbnRlbnQtdHlwZVwiXSAmJiB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gPSBcImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9dXRmLThcIjtcbiAgfVxuICBpZiAoW1wiUEFUQ0hcIiwgXCJQVVRcIl0uaW5jbHVkZXMobWV0aG9kKSAmJiB0eXBlb2YgYm9keSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIGJvZHkgPSBcIlwiO1xuICB9XG4gIHJldHVybiBPYmplY3QuYXNzaWduKFxuICAgIHsgbWV0aG9kLCB1cmwsIGhlYWRlcnMgfSxcbiAgICB0eXBlb2YgYm9keSAhPT0gXCJ1bmRlZmluZWRcIiA/IHsgYm9keSB9IDogbnVsbCxcbiAgICBvcHRpb25zLnJlcXVlc3QgPyB7IHJlcXVlc3Q6IG9wdGlvbnMucmVxdWVzdCB9IDogbnVsbFxuICApO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZW5kcG9pbnQtd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gZW5kcG9pbnRXaXRoRGVmYXVsdHMoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSB7XG4gIHJldHVybiBwYXJzZShtZXJnZShkZWZhdWx0cywgcm91dGUsIG9wdGlvbnMpKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGREZWZhdWx0cywgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgREVGQVVMVFMyID0gbWVyZ2Uob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgZW5kcG9pbnQyID0gZW5kcG9pbnRXaXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpO1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihlbmRwb2ludDIsIHtcbiAgICBERUZBVUxUUzogREVGQVVMVFMyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIG1lcmdlOiBtZXJnZS5iaW5kKG51bGwsIERFRkFVTFRTMiksXG4gICAgcGFyc2VcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGVuZHBvaW50ID0gd2l0aERlZmF1bHRzKG51bGwsIERFRkFVTFRTKTtcbmV4cG9ydCB7XG4gIGVuZHBvaW50XG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuaW1wb3J0IHsgZW5kcG9pbnQgfSBmcm9tIFwiQG9jdG9raXQvZW5kcG9pbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCI5LjIuNFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZGVmYXVsdHMuanNcbnZhciBkZWZhdWx0c19kZWZhdWx0ID0ge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LXJlcXVlc3QuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IHNhZmVQYXJzZSB9IGZyb20gXCJmYXN0LWNvbnRlbnQtdHlwZS1wYXJzZVwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvaXMtcGxhaW4tb2JqZWN0LmpzXG5mdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHwgdmFsdWUgPT09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YWx1ZSkgIT09IFwiW29iamVjdCBPYmplY3RdXCIpIHJldHVybiBmYWxzZTtcbiAgY29uc3QgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YodmFsdWUpO1xuICBpZiAocHJvdG8gPT09IG51bGwpIHJldHVybiB0cnVlO1xuICBjb25zdCBDdG9yID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHByb3RvLCBcImNvbnN0cnVjdG9yXCIpICYmIHByb3RvLmNvbnN0cnVjdG9yO1xuICByZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBDdG9yIGluc3RhbmNlb2YgQ3RvciAmJiBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbChDdG9yKSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwodmFsdWUpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvZmV0Y2gtd3JhcHBlci5qc1xuaW1wb3J0IHsgUmVxdWVzdEVycm9yIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3QtZXJyb3JcIjtcbmFzeW5jIGZ1bmN0aW9uIGZldGNoV3JhcHBlcihyZXF1ZXN0T3B0aW9ucykge1xuICBjb25zdCBmZXRjaCA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LmZldGNoIHx8IGdsb2JhbFRoaXMuZmV0Y2g7XG4gIGlmICghZmV0Y2gpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcImZldGNoIGlzIG5vdCBzZXQuIFBsZWFzZSBwYXNzIGEgZmV0Y2ggaW1wbGVtZW50YXRpb24gYXMgbmV3IE9jdG9raXQoeyByZXF1ZXN0OiB7IGZldGNoIH19KS4gTGVhcm4gbW9yZSBhdCBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9vY3Rva2l0LmpzLyNmZXRjaC1taXNzaW5nXCJcbiAgICApO1xuICB9XG4gIGNvbnN0IGxvZyA9IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LmxvZyB8fCBjb25zb2xlO1xuICBjb25zdCBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5wYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgIT09IGZhbHNlO1xuICBjb25zdCBib2R5ID0gaXNQbGFpbk9iamVjdChyZXF1ZXN0T3B0aW9ucy5ib2R5KSB8fCBBcnJheS5pc0FycmF5KHJlcXVlc3RPcHRpb25zLmJvZHkpID8gSlNPTi5zdHJpbmdpZnkocmVxdWVzdE9wdGlvbnMuYm9keSkgOiByZXF1ZXN0T3B0aW9ucy5ib2R5O1xuICBjb25zdCByZXF1ZXN0SGVhZGVycyA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhyZXF1ZXN0T3B0aW9ucy5oZWFkZXJzKS5tYXAoKFtuYW1lLCB2YWx1ZV0pID0+IFtcbiAgICAgIG5hbWUsXG4gICAgICBTdHJpbmcodmFsdWUpXG4gICAgXSlcbiAgKTtcbiAgbGV0IGZldGNoUmVzcG9uc2U7XG4gIHRyeSB7XG4gICAgZmV0Y2hSZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3RPcHRpb25zLnVybCwge1xuICAgICAgbWV0aG9kOiByZXF1ZXN0T3B0aW9ucy5tZXRob2QsXG4gICAgICBib2R5LFxuICAgICAgcmVkaXJlY3Q6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnJlZGlyZWN0LFxuICAgICAgaGVhZGVyczogcmVxdWVzdEhlYWRlcnMsXG4gICAgICBzaWduYWw6IHJlcXVlc3RPcHRpb25zLnJlcXVlc3Q/LnNpZ25hbCxcbiAgICAgIC8vIGR1cGxleCBtdXN0IGJlIHNldCBpZiByZXF1ZXN0LmJvZHkgaXMgUmVhZGFibGVTdHJlYW0gb3IgQXN5bmMgSXRlcmFibGVzLlxuICAgICAgLy8gU2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdGluaXQtZHVwbGV4LlxuICAgICAgLi4ucmVxdWVzdE9wdGlvbnMuYm9keSAmJiB7IGR1cGxleDogXCJoYWxmXCIgfVxuICAgIH0pO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGxldCBtZXNzYWdlID0gXCJVbmtub3duIEVycm9yXCI7XG4gICAgaWYgKGVycm9yIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGlmIChlcnJvci5uYW1lID09PSBcIkFib3J0RXJyb3JcIikge1xuICAgICAgICBlcnJvci5zdGF0dXMgPSA1MDA7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgICAgbWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJUeXBlRXJyb3JcIiAmJiBcImNhdXNlXCIgaW4gZXJyb3IpIHtcbiAgICAgICAgaWYgKGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2UubWVzc2FnZTtcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgZXJyb3IuY2F1c2UgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBtZXNzYWdlID0gZXJyb3IuY2F1c2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdEVycm9yID0gbmV3IFJlcXVlc3RFcnJvcihtZXNzYWdlLCA1MDAsIHtcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gICAgcmVxdWVzdEVycm9yLmNhdXNlID0gZXJyb3I7XG4gICAgdGhyb3cgcmVxdWVzdEVycm9yO1xuICB9XG4gIGNvbnN0IHN0YXR1cyA9IGZldGNoUmVzcG9uc2Uuc3RhdHVzO1xuICBjb25zdCB1cmwgPSBmZXRjaFJlc3BvbnNlLnVybDtcbiAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0ge307XG4gIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIGZldGNoUmVzcG9uc2UuaGVhZGVycykge1xuICAgIHJlc3BvbnNlSGVhZGVyc1trZXldID0gdmFsdWU7XG4gIH1cbiAgY29uc3Qgb2N0b2tpdFJlc3BvbnNlID0ge1xuICAgIHVybCxcbiAgICBzdGF0dXMsXG4gICAgaGVhZGVyczogcmVzcG9uc2VIZWFkZXJzLFxuICAgIGRhdGE6IFwiXCJcbiAgfTtcbiAgaWYgKFwiZGVwcmVjYXRpb25cIiBpbiByZXNwb25zZUhlYWRlcnMpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gcmVzcG9uc2VIZWFkZXJzLmxpbmsgJiYgcmVzcG9uc2VIZWFkZXJzLmxpbmsubWF0Y2goLzwoW148Pl0rKT47IHJlbD1cImRlcHJlY2F0aW9uXCIvKTtcbiAgICBjb25zdCBkZXByZWNhdGlvbkxpbmsgPSBtYXRjaGVzICYmIG1hdGNoZXMucG9wKCk7XG4gICAgbG9nLndhcm4oXG4gICAgICBgW0BvY3Rva2l0L3JlcXVlc3RdIFwiJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cmVxdWVzdE9wdGlvbnMudXJsfVwiIGlzIGRlcHJlY2F0ZWQuIEl0IGlzIHNjaGVkdWxlZCB0byBiZSByZW1vdmVkIG9uICR7cmVzcG9uc2VIZWFkZXJzLnN1bnNldH0ke2RlcHJlY2F0aW9uTGluayA/IGAuIFNlZSAke2RlcHJlY2F0aW9uTGlua31gIDogXCJcIn1gXG4gICAgKTtcbiAgfVxuICBpZiAoc3RhdHVzID09PSAyMDQgfHwgc3RhdHVzID09PSAyMDUpIHtcbiAgICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xuICB9XG4gIGlmIChyZXF1ZXN0T3B0aW9ucy5tZXRob2QgPT09IFwiSEVBRFwiKSB7XG4gICAgaWYgKHN0YXR1cyA8IDQwMCkge1xuICAgICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgICB9XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihmZXRjaFJlc3BvbnNlLnN0YXR1c1RleHQsIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMzA0KSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcihcIk5vdCBtb2RpZmllZFwiLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPj0gNDAwKSB7XG4gICAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSk7XG4gICAgdGhyb3cgbmV3IFJlcXVlc3RFcnJvcih0b0Vycm9yTWVzc2FnZShvY3Rva2l0UmVzcG9uc2UuZGF0YSksIHN0YXR1cywge1xuICAgICAgcmVzcG9uc2U6IG9jdG9raXRSZXNwb25zZSxcbiAgICAgIHJlcXVlc3Q6IHJlcXVlc3RPcHRpb25zXG4gICAgfSk7XG4gIH1cbiAgb2N0b2tpdFJlc3BvbnNlLmRhdGEgPSBwYXJzZVN1Y2Nlc3NSZXNwb25zZUJvZHkgPyBhd2FpdCBnZXRSZXNwb25zZURhdGEoZmV0Y2hSZXNwb25zZSkgOiBmZXRjaFJlc3BvbnNlLmJvZHk7XG4gIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRSZXNwb25zZURhdGEocmVzcG9uc2UpIHtcbiAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzLmdldChcImNvbnRlbnQtdHlwZVwiKTtcbiAgaWYgKCFjb250ZW50VHlwZSkge1xuICAgIHJldHVybiByZXNwb25zZS50ZXh0KCkuY2F0Y2goKCkgPT4gXCJcIik7XG4gIH1cbiAgY29uc3QgbWltZXR5cGUgPSBzYWZlUGFyc2UoY29udGVudFR5cGUpO1xuICBpZiAoaXNKU09OUmVzcG9uc2UobWltZXR5cGUpKSB7XG4gICAgbGV0IHRleHQgPSBcIlwiO1xuICAgIHRyeSB7XG4gICAgICB0ZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpO1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dCk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICByZXR1cm4gdGV4dDtcbiAgICB9XG4gIH0gZWxzZSBpZiAobWltZXR5cGUudHlwZS5zdGFydHNXaXRoKFwidGV4dC9cIikgfHwgbWltZXR5cGUucGFyYW1ldGVycy5jaGFyc2V0Py50b0xvd2VyQ2FzZSgpID09PSBcInV0Zi04XCIpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiByZXNwb25zZS5hcnJheUJ1ZmZlcigpLmNhdGNoKCgpID0+IG5ldyBBcnJheUJ1ZmZlcigwKSk7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzSlNPTlJlc3BvbnNlKG1pbWV0eXBlKSB7XG4gIHJldHVybiBtaW1ldHlwZS50eXBlID09PSBcImFwcGxpY2F0aW9uL2pzb25cIiB8fCBtaW1ldHlwZS50eXBlID09PSBcImFwcGxpY2F0aW9uL3NjaW0ranNvblwiO1xufVxuZnVuY3Rpb24gdG9FcnJvck1lc3NhZ2UoZGF0YSkge1xuICBpZiAodHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gZGF0YTtcbiAgfVxuICBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIFwiVW5rbm93biBlcnJvclwiO1xuICB9XG4gIGlmIChcIm1lc3NhZ2VcIiBpbiBkYXRhKSB7XG4gICAgY29uc3Qgc3VmZml4ID0gXCJkb2N1bWVudGF0aW9uX3VybFwiIGluIGRhdGEgPyBgIC0gJHtkYXRhLmRvY3VtZW50YXRpb25fdXJsfWAgOiBcIlwiO1xuICAgIHJldHVybiBBcnJheS5pc0FycmF5KGRhdGEuZXJyb3JzKSA/IGAke2RhdGEubWVzc2FnZX06ICR7ZGF0YS5lcnJvcnMubWFwKCh2KSA9PiBKU09OLnN0cmluZ2lmeSh2KSkuam9pbihcIiwgXCIpfSR7c3VmZml4fWAgOiBgJHtkYXRhLm1lc3NhZ2V9JHtzdWZmaXh9YDtcbiAgfVxuICByZXR1cm4gYFVua25vd24gZXJyb3I6ICR7SlNPTi5zdHJpbmdpZnkoZGF0YSl9YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhvbGRFbmRwb2ludCwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgZW5kcG9pbnQyID0gb2xkRW5kcG9pbnQuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSBmdW5jdGlvbihyb3V0ZSwgcGFyYW1ldGVycykge1xuICAgIGNvbnN0IGVuZHBvaW50T3B0aW9ucyA9IGVuZHBvaW50Mi5tZXJnZShyb3V0ZSwgcGFyYW1ldGVycyk7XG4gICAgaWYgKCFlbmRwb2ludE9wdGlvbnMucmVxdWVzdCB8fCAhZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QuaG9vaykge1xuICAgICAgcmV0dXJuIGZldGNoV3JhcHBlcihlbmRwb2ludDIucGFyc2UoZW5kcG9pbnRPcHRpb25zKSk7XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3QyID0gKHJvdXRlMiwgcGFyYW1ldGVyczIpID0+IHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoXG4gICAgICAgIGVuZHBvaW50Mi5wYXJzZShlbmRwb2ludDIubWVyZ2Uocm91dGUyLCBwYXJhbWV0ZXJzMikpXG4gICAgICApO1xuICAgIH07XG4gICAgT2JqZWN0LmFzc2lnbihyZXF1ZXN0Miwge1xuICAgICAgZW5kcG9pbnQ6IGVuZHBvaW50MixcbiAgICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gICAgfSk7XG4gICAgcmV0dXJuIGVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2socmVxdWVzdDIsIGVuZHBvaW50T3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgZGVmYXVsdHM6IHdpdGhEZWZhdWx0cy5iaW5kKG51bGwsIGVuZHBvaW50MilcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIHJlcXVlc3QgPSB3aXRoRGVmYXVsdHMoZW5kcG9pbnQsIGRlZmF1bHRzX2RlZmF1bHQpO1xuZXhwb3J0IHtcbiAgcmVxdWVzdFxufTtcbiIsICJjbGFzcyBSZXF1ZXN0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIG5hbWU7XG4gIC8qKlxuICAgKiBodHRwIHN0YXR1cyBjb2RlXG4gICAqL1xuICBzdGF0dXM7XG4gIC8qKlxuICAgKiBSZXF1ZXN0IG9wdGlvbnMgdGhhdCBsZWFkIHRvIHRoZSBlcnJvci5cbiAgICovXG4gIHJlcXVlc3Q7XG4gIC8qKlxuICAgKiBSZXNwb25zZSBvYmplY3QgaWYgYSByZXNwb25zZSB3YXMgcmVjZWl2ZWRcbiAgICovXG4gIHJlc3BvbnNlO1xuICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBvcHRpb25zKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgdGhpcy5uYW1lID0gXCJIdHRwRXJyb3JcIjtcbiAgICB0aGlzLnN0YXR1cyA9IE51bWJlci5wYXJzZUludChzdGF0dXNDb2RlKTtcbiAgICBpZiAoTnVtYmVyLmlzTmFOKHRoaXMuc3RhdHVzKSkge1xuICAgICAgdGhpcy5zdGF0dXMgPSAwO1xuICAgIH1cbiAgICBpZiAoXCJyZXNwb25zZVwiIGluIG9wdGlvbnMpIHtcbiAgICAgIHRoaXMucmVzcG9uc2UgPSBvcHRpb25zLnJlc3BvbnNlO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0Q29weSA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCk7XG4gICAgaWYgKG9wdGlvbnMucmVxdWVzdC5oZWFkZXJzLmF1dGhvcml6YXRpb24pIHtcbiAgICAgIHJlcXVlc3RDb3B5LmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QuaGVhZGVycywge1xuICAgICAgICBhdXRob3JpemF0aW9uOiBvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uLnJlcGxhY2UoXG4gICAgICAgICAgLyg/PCEgKSAuKiQvLFxuICAgICAgICAgIFwiIFtSRURBQ1RFRF1cIlxuICAgICAgICApXG4gICAgICB9KTtcbiAgICB9XG4gICAgcmVxdWVzdENvcHkudXJsID0gcmVxdWVzdENvcHkudXJsLnJlcGxhY2UoL1xcYmNsaWVudF9zZWNyZXQ9XFx3Ky9nLCBcImNsaWVudF9zZWNyZXQ9W1JFREFDVEVEXVwiKS5yZXBsYWNlKC9cXGJhY2Nlc3NfdG9rZW49XFx3Ky9nLCBcImFjY2Vzc190b2tlbj1bUkVEQUNURURdXCIpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3RDb3B5O1xuICB9XG59XG5leHBvcnQge1xuICBSZXF1ZXN0RXJyb3Jcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvdmVyc2lvbi5qc1xudmFyIFZFUlNJT04gPSBcIjAuMC4wLWRldmVsb3BtZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QyIH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbmltcG9ydCB7IHJlcXVlc3QgYXMgUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9lcnJvci5qc1xuZnVuY3Rpb24gX2J1aWxkTWVzc2FnZUZvclJlc3BvbnNlRXJyb3JzKGRhdGEpIHtcbiAgcmV0dXJuIGBSZXF1ZXN0IGZhaWxlZCBkdWUgdG8gZm9sbG93aW5nIHJlc3BvbnNlIGVycm9yczpcbmAgKyBkYXRhLmVycm9ycy5tYXAoKGUpID0+IGAgLSAke2UubWVzc2FnZX1gKS5qb2luKFwiXFxuXCIpO1xufVxudmFyIEdyYXBocWxSZXNwb25zZUVycm9yID0gY2xhc3MgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKHJlcXVlc3QyLCBoZWFkZXJzLCByZXNwb25zZSkge1xuICAgIHN1cGVyKF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhyZXNwb25zZSkpO1xuICAgIHRoaXMucmVxdWVzdCA9IHJlcXVlc3QyO1xuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnM7XG4gICAgdGhpcy5yZXNwb25zZSA9IHJlc3BvbnNlO1xuICAgIHRoaXMuZXJyb3JzID0gcmVzcG9uc2UuZXJyb3JzO1xuICAgIHRoaXMuZGF0YSA9IHJlc3BvbnNlLmRhdGE7XG4gICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCB0aGlzLmNvbnN0cnVjdG9yKTtcbiAgICB9XG4gIH1cbiAgbmFtZSA9IFwiR3JhcGhxbFJlc3BvbnNlRXJyb3JcIjtcbiAgZXJyb3JzO1xuICBkYXRhO1xufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dyYXBocWwuanNcbnZhciBOT05fVkFSSUFCTEVfT1BUSU9OUyA9IFtcbiAgXCJtZXRob2RcIixcbiAgXCJiYXNlVXJsXCIsXG4gIFwidXJsXCIsXG4gIFwiaGVhZGVyc1wiLFxuICBcInJlcXVlc3RcIixcbiAgXCJxdWVyeVwiLFxuICBcIm1lZGlhVHlwZVwiLFxuICBcIm9wZXJhdGlvbk5hbWVcIlxuXTtcbnZhciBGT1JCSURERU5fVkFSSUFCTEVfT1BUSU9OUyA9IFtcInF1ZXJ5XCIsIFwibWV0aG9kXCIsIFwidXJsXCJdO1xudmFyIEdIRVNfVjNfU1VGRklYX1JFR0VYID0gL1xcL2FwaVxcL3YzXFwvPyQvO1xuZnVuY3Rpb24gZ3JhcGhxbChyZXF1ZXN0MiwgcXVlcnksIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIHF1ZXJ5ID09PSBcInN0cmluZ1wiICYmIFwicXVlcnlcIiBpbiBvcHRpb25zKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihgW0BvY3Rva2l0L2dyYXBocWxdIFwicXVlcnlcIiBjYW5ub3QgYmUgdXNlZCBhcyB2YXJpYWJsZSBuYW1lYClcbiAgICAgICk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qga2V5IGluIG9wdGlvbnMpIHtcbiAgICAgIGlmICghRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMuaW5jbHVkZXMoa2V5KSkgY29udGludWU7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcihcbiAgICAgICAgICBgW0BvY3Rva2l0L2dyYXBocWxdIFwiJHtrZXl9XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWBcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgcGFyc2VkT3B0aW9ucyA9IHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiA/IE9iamVjdC5hc3NpZ24oeyBxdWVyeSB9LCBvcHRpb25zKSA6IHF1ZXJ5O1xuICBjb25zdCByZXF1ZXN0T3B0aW9ucyA9IE9iamVjdC5rZXlzKFxuICAgIHBhcnNlZE9wdGlvbnNcbiAgKS5yZWR1Y2UoKHJlc3VsdCwga2V5KSA9PiB7XG4gICAgaWYgKE5PTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgIHJlc3VsdFtrZXldID0gcGFyc2VkT3B0aW9uc1trZXldO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgaWYgKCFyZXN1bHQudmFyaWFibGVzKSB7XG4gICAgICByZXN1bHQudmFyaWFibGVzID0ge307XG4gICAgfVxuICAgIHJlc3VsdC52YXJpYWJsZXNba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LCB7fSk7XG4gIGNvbnN0IGJhc2VVcmwgPSBwYXJzZWRPcHRpb25zLmJhc2VVcmwgfHwgcmVxdWVzdDIuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybDtcbiAgaWYgKEdIRVNfVjNfU1VGRklYX1JFR0VYLnRlc3QoYmFzZVVybCkpIHtcbiAgICByZXF1ZXN0T3B0aW9ucy51cmwgPSBiYXNlVXJsLnJlcGxhY2UoR0hFU19WM19TVUZGSVhfUkVHRVgsIFwiL2FwaS9ncmFwaHFsXCIpO1xuICB9XG4gIHJldHVybiByZXF1ZXN0MihyZXF1ZXN0T3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICBpZiAocmVzcG9uc2UuZGF0YS5lcnJvcnMpIHtcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKHJlc3BvbnNlLmhlYWRlcnMpKSB7XG4gICAgICAgIGhlYWRlcnNba2V5XSA9IHJlc3BvbnNlLmhlYWRlcnNba2V5XTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBHcmFwaHFsUmVzcG9uc2VFcnJvcihcbiAgICAgICAgcmVxdWVzdE9wdGlvbnMsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIHJlc3BvbnNlLmRhdGFcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXNwb25zZS5kYXRhLmRhdGE7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuZnVuY3Rpb24gd2l0aERlZmF1bHRzKHJlcXVlc3QyLCBuZXdEZWZhdWx0cykge1xuICBjb25zdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDIuZGVmYXVsdHMobmV3RGVmYXVsdHMpO1xuICBjb25zdCBuZXdBcGkgPSAocXVlcnksIG9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gZ3JhcGhxbChuZXdSZXF1ZXN0LCBxdWVyeSwgb3B0aW9ucyk7XG4gIH07XG4gIHJldHVybiBPYmplY3QuYXNzaWduKG5ld0FwaSwge1xuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBuZXdSZXF1ZXN0KSxcbiAgICBlbmRwb2ludDogbmV3UmVxdWVzdC5lbmRwb2ludFxuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgZ3JhcGhxbDIgPSB3aXRoRGVmYXVsdHMocmVxdWVzdCwge1xuICBoZWFkZXJzOiB7XG4gICAgXCJ1c2VyLWFnZW50XCI6IGBvY3Rva2l0LWdyYXBocWwuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWBcbiAgfSxcbiAgbWV0aG9kOiBcIlBPU1RcIixcbiAgdXJsOiBcIi9ncmFwaHFsXCJcbn0pO1xuZnVuY3Rpb24gd2l0aEN1c3RvbVJlcXVlc3QoY3VzdG9tUmVxdWVzdCkge1xuICByZXR1cm4gd2l0aERlZmF1bHRzKGN1c3RvbVJlcXVlc3QsIHtcbiAgICBtZXRob2Q6IFwiUE9TVFwiLFxuICAgIHVybDogXCIvZ3JhcGhxbFwiXG4gIH0pO1xufVxuZXhwb3J0IHtcbiAgR3JhcGhxbFJlc3BvbnNlRXJyb3IsXG4gIGdyYXBocWwyIGFzIGdyYXBocWwsXG4gIHdpdGhDdXN0b21SZXF1ZXN0XG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pcy1qd3QuanNcbnZhciBiNjR1cmwgPSBcIig/OlthLXpBLVowLTlfLV0rKVwiO1xudmFyIHNlcCA9IFwiXFxcXC5cIjtcbnZhciBqd3RSRSA9IG5ldyBSZWdFeHAoYF4ke2I2NHVybH0ke3NlcH0ke2I2NHVybH0ke3NlcH0ke2I2NHVybH0kYCk7XG52YXIgaXNKV1QgPSBqd3RSRS50ZXN0LmJpbmQoand0UkUpO1xuXG4vLyBwa2cvZGlzdC1zcmMvYXV0aC5qc1xuYXN5bmMgZnVuY3Rpb24gYXV0aCh0b2tlbikge1xuICBjb25zdCBpc0FwcCA9IGlzSldUKHRva2VuKTtcbiAgY29uc3QgaXNJbnN0YWxsYXRpb24gPSB0b2tlbi5zdGFydHNXaXRoKFwidjEuXCIpIHx8IHRva2VuLnN0YXJ0c1dpdGgoXCJnaHNfXCIpO1xuICBjb25zdCBpc1VzZXJUb1NlcnZlciA9IHRva2VuLnN0YXJ0c1dpdGgoXCJnaHVfXCIpO1xuICBjb25zdCB0b2tlblR5cGUgPSBpc0FwcCA/IFwiYXBwXCIgOiBpc0luc3RhbGxhdGlvbiA/IFwiaW5zdGFsbGF0aW9uXCIgOiBpc1VzZXJUb1NlcnZlciA/IFwidXNlci10by1zZXJ2ZXJcIiA6IFwib2F1dGhcIjtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInRva2VuXCIsXG4gICAgdG9rZW4sXG4gICAgdG9rZW5UeXBlXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWF1dGhvcml6YXRpb24tcHJlZml4LmpzXG5mdW5jdGlvbiB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbikge1xuICBpZiAodG9rZW4uc3BsaXQoL1xcLi8pLmxlbmd0aCA9PT0gMykge1xuICAgIHJldHVybiBgYmVhcmVyICR7dG9rZW59YDtcbiAgfVxuICByZXR1cm4gYHRva2VuICR7dG9rZW59YDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2hvb2suanNcbmFzeW5jIGZ1bmN0aW9uIGhvb2sodG9rZW4sIHJlcXVlc3QsIHJvdXRlLCBwYXJhbWV0ZXJzKSB7XG4gIGNvbnN0IGVuZHBvaW50ID0gcmVxdWVzdC5lbmRwb2ludC5tZXJnZShcbiAgICByb3V0ZSxcbiAgICBwYXJhbWV0ZXJzXG4gICk7XG4gIGVuZHBvaW50LmhlYWRlcnMuYXV0aG9yaXphdGlvbiA9IHdpdGhBdXRob3JpemF0aW9uUHJlZml4KHRva2VuKTtcbiAgcmV0dXJuIHJlcXVlc3QoZW5kcG9pbnQpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBjcmVhdGVUb2tlbkF1dGggPSBmdW5jdGlvbiBjcmVhdGVUb2tlbkF1dGgyKHRva2VuKSB7XG4gIGlmICghdG9rZW4pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gTm8gdG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aFwiKTtcbiAgfVxuICBpZiAodHlwZW9mIHRva2VuICE9PSBcInN0cmluZ1wiKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJbQG9jdG9raXQvYXV0aC10b2tlbl0gVG9rZW4gcGFzc2VkIHRvIGNyZWF0ZVRva2VuQXV0aCBpcyBub3QgYSBzdHJpbmdcIlxuICAgICk7XG4gIH1cbiAgdG9rZW4gPSB0b2tlbi5yZXBsYWNlKC9eKHRva2VufGJlYXJlcikgKy9pLCBcIlwiKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oYXV0aC5iaW5kKG51bGwsIHRva2VuKSwge1xuICAgIGhvb2s6IGhvb2suYmluZChudWxsLCB0b2tlbilcbiAgfSk7XG59O1xuZXhwb3J0IHtcbiAgY3JlYXRlVG9rZW5BdXRoXG59O1xuIiwgImNvbnN0IFZFUlNJT04gPSBcIjYuMS42XCI7XG5leHBvcnQge1xuICBWRVJTSU9OXG59O1xuIiwgImltcG9ydCB7IGdldFVzZXJBZ2VudCB9IGZyb20gXCJ1bml2ZXJzYWwtdXNlci1hZ2VudFwiO1xuaW1wb3J0IEhvb2sgZnJvbSBcImJlZm9yZS1hZnRlci1ob29rXCI7XG5pbXBvcnQgeyByZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L3JlcXVlc3RcIjtcbmltcG9ydCB7IHdpdGhDdXN0b21SZXF1ZXN0IH0gZnJvbSBcIkBvY3Rva2l0L2dyYXBocWxcIjtcbmltcG9ydCB7IGNyZWF0ZVRva2VuQXV0aCB9IGZyb20gXCJAb2N0b2tpdC9hdXRoLXRva2VuXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuY29uc3Qgbm9vcCA9ICgpID0+IHtcbn07XG5jb25zdCBjb25zb2xlV2FybiA9IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xuY29uc3QgY29uc29sZUVycm9yID0gY29uc29sZS5lcnJvci5iaW5kKGNvbnNvbGUpO1xuZnVuY3Rpb24gY3JlYXRlTG9nZ2VyKGxvZ2dlciA9IHt9KSB7XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmRlYnVnICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuZGVidWcgPSBub29wO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmluZm8gIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGxvZ2dlci5pbmZvID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci53YXJuICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIud2FybiA9IGNvbnNvbGVXYXJuO1xuICB9XG4gIGlmICh0eXBlb2YgbG9nZ2VyLmVycm9yICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuZXJyb3IgPSBjb25zb2xlRXJyb3I7XG4gIH1cbiAgcmV0dXJuIGxvZ2dlcjtcbn1cbmNvbnN0IHVzZXJBZ2VudFRyYWlsID0gYG9jdG9raXQtY29yZS5qcy8ke1ZFUlNJT059ICR7Z2V0VXNlckFnZW50KCl9YDtcbmNsYXNzIE9jdG9raXQge1xuICBzdGF0aWMgVkVSU0lPTiA9IFZFUlNJT047XG4gIHN0YXRpYyBkZWZhdWx0cyhkZWZhdWx0cykge1xuICAgIGNvbnN0IE9jdG9raXRXaXRoRGVmYXVsdHMgPSBjbGFzcyBleHRlbmRzIHRoaXMge1xuICAgICAgY29uc3RydWN0b3IoLi4uYXJncykge1xuICAgICAgICBjb25zdCBvcHRpb25zID0gYXJnc1swXSB8fCB7fTtcbiAgICAgICAgaWYgKHR5cGVvZiBkZWZhdWx0cyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgc3VwZXIoZGVmYXVsdHMob3B0aW9ucykpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzdXBlcihcbiAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAge30sXG4gICAgICAgICAgICBkZWZhdWx0cyxcbiAgICAgICAgICAgIG9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zLnVzZXJBZ2VudCAmJiBkZWZhdWx0cy51c2VyQWdlbnQgPyB7XG4gICAgICAgICAgICAgIHVzZXJBZ2VudDogYCR7b3B0aW9ucy51c2VyQWdlbnR9ICR7ZGVmYXVsdHMudXNlckFnZW50fWBcbiAgICAgICAgICAgIH0gOiBudWxsXG4gICAgICAgICAgKVxuICAgICAgICApO1xuICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIE9jdG9raXRXaXRoRGVmYXVsdHM7XG4gIH1cbiAgc3RhdGljIHBsdWdpbnMgPSBbXTtcbiAgLyoqXG4gICAqIEF0dGFjaCBhIHBsdWdpbiAob3IgbWFueSkgdG8geW91ciBPY3Rva2l0IGluc3RhbmNlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBjb25zdCBBUEkgPSBPY3Rva2l0LnBsdWdpbihwbHVnaW4xLCBwbHVnaW4yLCBwbHVnaW4zLCAuLi4pXG4gICAqL1xuICBzdGF0aWMgcGx1Z2luKC4uLm5ld1BsdWdpbnMpIHtcbiAgICBjb25zdCBjdXJyZW50UGx1Z2lucyA9IHRoaXMucGx1Z2lucztcbiAgICBjb25zdCBOZXdPY3Rva2l0ID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIHN0YXRpYyBwbHVnaW5zID0gY3VycmVudFBsdWdpbnMuY29uY2F0KFxuICAgICAgICBuZXdQbHVnaW5zLmZpbHRlcigocGx1Z2luKSA9PiAhY3VycmVudFBsdWdpbnMuaW5jbHVkZXMocGx1Z2luKSlcbiAgICAgICk7XG4gICAgfTtcbiAgICByZXR1cm4gTmV3T2N0b2tpdDtcbiAgfVxuICBjb25zdHJ1Y3RvcihvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBob29rID0gbmV3IEhvb2suQ29sbGVjdGlvbigpO1xuICAgIGNvbnN0IHJlcXVlc3REZWZhdWx0cyA9IHtcbiAgICAgIGJhc2VVcmw6IHJlcXVlc3QuZW5kcG9pbnQuREVGQVVMVFMuYmFzZVVybCxcbiAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgcmVxdWVzdDogT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LCB7XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgaW50ZXJuYWwgdXNhZ2Ugb25seSwgbm8gbmVlZCB0byB0eXBlXG4gICAgICAgIGhvb2s6IGhvb2suYmluZChudWxsLCBcInJlcXVlc3RcIilcbiAgICAgIH0pLFxuICAgICAgbWVkaWFUeXBlOiB7XG4gICAgICAgIHByZXZpZXdzOiBbXSxcbiAgICAgICAgZm9ybWF0OiBcIlwiXG4gICAgICB9XG4gICAgfTtcbiAgICByZXF1ZXN0RGVmYXVsdHMuaGVhZGVyc1tcInVzZXItYWdlbnRcIl0gPSBvcHRpb25zLnVzZXJBZ2VudCA/IGAke29wdGlvbnMudXNlckFnZW50fSAke3VzZXJBZ2VudFRyYWlsfWAgOiB1c2VyQWdlbnRUcmFpbDtcbiAgICBpZiAob3B0aW9ucy5iYXNlVXJsKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMuYmFzZVVybCA9IG9wdGlvbnMuYmFzZVVybDtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMucHJldmlld3MpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5tZWRpYVR5cGUucHJldmlld3MgPSBvcHRpb25zLnByZXZpZXdzO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50aW1lWm9uZSkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ0aW1lLXpvbmVcIl0gPSBvcHRpb25zLnRpbWVab25lO1xuICAgIH1cbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0LmRlZmF1bHRzKHJlcXVlc3REZWZhdWx0cyk7XG4gICAgdGhpcy5ncmFwaHFsID0gd2l0aEN1c3RvbVJlcXVlc3QodGhpcy5yZXF1ZXN0KS5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMubG9nID0gY3JlYXRlTG9nZ2VyKG9wdGlvbnMubG9nKTtcbiAgICB0aGlzLmhvb2sgPSBob29rO1xuICAgIGlmICghb3B0aW9ucy5hdXRoU3RyYXRlZ3kpIHtcbiAgICAgIGlmICghb3B0aW9ucy5hdXRoKSB7XG4gICAgICAgIHRoaXMuYXV0aCA9IGFzeW5jICgpID0+ICh7XG4gICAgICAgICAgdHlwZTogXCJ1bmF1dGhlbnRpY2F0ZWRcIlxuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGF1dGggPSBjcmVhdGVUb2tlbkF1dGgob3B0aW9ucy5hdXRoKTtcbiAgICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB7IGF1dGhTdHJhdGVneSwgLi4ub3RoZXJPcHRpb25zIH0gPSBvcHRpb25zO1xuICAgICAgY29uc3QgYXV0aCA9IGF1dGhTdHJhdGVneShcbiAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICB7XG4gICAgICAgICAgICByZXF1ZXN0OiB0aGlzLnJlcXVlc3QsXG4gICAgICAgICAgICBsb2c6IHRoaXMubG9nLFxuICAgICAgICAgICAgLy8gd2UgcGFzcyB0aGUgY3VycmVudCBvY3Rva2l0IGluc3RhbmNlIGFzIHdlbGwgYXMgaXRzIGNvbnN0cnVjdG9yIG9wdGlvbnNcbiAgICAgICAgICAgIC8vIHRvIGFsbG93IGZvciBhdXRoZW50aWNhdGlvbiBzdHJhdGVnaWVzIHRoYXQgcmV0dXJuIGEgbmV3IG9jdG9raXQgaW5zdGFuY2VcbiAgICAgICAgICAgIC8vIHRoYXQgc2hhcmVzIHRoZSBzYW1lIGludGVybmFsIHN0YXRlIGFzIHRoZSBjdXJyZW50IG9uZS4gVGhlIG9yaWdpbmFsXG4gICAgICAgICAgICAvLyByZXF1aXJlbWVudCBmb3IgdGhpcyB3YXMgdGhlIFwiZXZlbnQtb2N0b2tpdFwiIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5XG4gICAgICAgICAgICAvLyBvZiBodHRwczovL2dpdGh1Yi5jb20vcHJvYm90L29jdG9raXQtYXV0aC1wcm9ib3QuXG4gICAgICAgICAgICBvY3Rva2l0OiB0aGlzLFxuICAgICAgICAgICAgb2N0b2tpdE9wdGlvbnM6IG90aGVyT3B0aW9uc1xuICAgICAgICAgIH0sXG4gICAgICAgICAgb3B0aW9ucy5hdXRoXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgICBob29rLndyYXAoXCJyZXF1ZXN0XCIsIGF1dGguaG9vayk7XG4gICAgICB0aGlzLmF1dGggPSBhdXRoO1xuICAgIH1cbiAgICBjb25zdCBjbGFzc0NvbnN0cnVjdG9yID0gdGhpcy5jb25zdHJ1Y3RvcjtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNsYXNzQ29uc3RydWN0b3IucGx1Z2lucy5sZW5ndGg7ICsraSkge1xuICAgICAgT2JqZWN0LmFzc2lnbih0aGlzLCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnNbaV0odGhpcywgb3B0aW9ucykpO1xuICAgIH1cbiAgfVxuICAvLyBhc3NpZ25lZCBkdXJpbmcgY29uc3RydWN0b3JcbiAgcmVxdWVzdDtcbiAgZ3JhcGhxbDtcbiAgbG9nO1xuICBob29rO1xuICAvLyBUT0RPOiB0eXBlIGBvY3Rva2l0LmF1dGhgIGJhc2VkIG9uIHBhc3NlZCBvcHRpb25zLmF1dGhTdHJhdGVneVxuICBhdXRoO1xufVxuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI1LjMuMVwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuZnVuY3Rpb24gcmVxdWVzdExvZyhvY3Rva2l0KSB7XG4gIG9jdG9raXQuaG9vay53cmFwKFwicmVxdWVzdFwiLCAocmVxdWVzdCwgb3B0aW9ucykgPT4ge1xuICAgIG9jdG9raXQubG9nLmRlYnVnKFwicmVxdWVzdFwiLCBvcHRpb25zKTtcbiAgICBjb25zdCBzdGFydCA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQucGFyc2Uob3B0aW9ucyk7XG4gICAgY29uc3QgcGF0aCA9IHJlcXVlc3RPcHRpb25zLnVybC5yZXBsYWNlKG9wdGlvbnMuYmFzZVVybCwgXCJcIik7XG4gICAgcmV0dXJuIHJlcXVlc3Qob3B0aW9ucykudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IHJlc3BvbnNlLmhlYWRlcnNbXCJ4LWdpdGh1Yi1yZXF1ZXN0LWlkXCJdO1xuICAgICAgb2N0b2tpdC5sb2cuaW5mbyhcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtyZXNwb25zZS5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RJZCA9IGVycm9yLnJlc3BvbnNlPy5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXSB8fCBcIlVOS05PV05cIjtcbiAgICAgIG9jdG9raXQubG9nLmVycm9yKFxuICAgICAgICBgJHtyZXF1ZXN0T3B0aW9ucy5tZXRob2R9ICR7cGF0aH0gLSAke2Vycm9yLnN0YXR1c30gd2l0aCBpZCAke3JlcXVlc3RJZH0gaW4gJHtEYXRlLm5vdygpIC0gc3RhcnR9bXNgXG4gICAgICApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfSk7XG4gIH0pO1xufVxucmVxdWVzdExvZy5WRVJTSU9OID0gVkVSU0lPTjtcbmV4cG9ydCB7XG4gIHJlcXVlc3RMb2dcbn07XG4iLCAiLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvbm9ybWFsaXplLXBhZ2luYXRlZC1saXN0LXJlc3BvbnNlLmpzXG5mdW5jdGlvbiBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpIHtcbiAgaWYgKCFyZXNwb25zZS5kYXRhKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnJlc3BvbnNlLFxuICAgICAgZGF0YTogW11cbiAgICB9O1xuICB9XG4gIGNvbnN0IHJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uID0gXCJ0b3RhbF9jb3VudFwiIGluIHJlc3BvbnNlLmRhdGEgJiYgIShcInVybFwiIGluIHJlc3BvbnNlLmRhdGEpO1xuICBpZiAoIXJlc3BvbnNlTmVlZHNOb3JtYWxpemF0aW9uKSByZXR1cm4gcmVzcG9uc2U7XG4gIGNvbnN0IGluY29tcGxldGVSZXN1bHRzID0gcmVzcG9uc2UuZGF0YS5pbmNvbXBsZXRlX3Jlc3VsdHM7XG4gIGNvbnN0IHJlcG9zaXRvcnlTZWxlY3Rpb24gPSByZXNwb25zZS5kYXRhLnJlcG9zaXRvcnlfc2VsZWN0aW9uO1xuICBjb25zdCB0b3RhbENvdW50ID0gcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudDtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBkZWxldGUgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGNvbnN0IG5hbWVzcGFjZUtleSA9IE9iamVjdC5rZXlzKHJlc3BvbnNlLmRhdGEpWzBdO1xuICBjb25zdCBkYXRhID0gcmVzcG9uc2UuZGF0YVtuYW1lc3BhY2VLZXldO1xuICByZXNwb25zZS5kYXRhID0gZGF0YTtcbiAgaWYgKHR5cGVvZiBpbmNvbXBsZXRlUmVzdWx0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzID0gaW5jb21wbGV0ZVJlc3VsdHM7XG4gIH1cbiAgaWYgKHR5cGVvZiByZXBvc2l0b3J5U2VsZWN0aW9uICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbiA9IHJlcG9zaXRvcnlTZWxlY3Rpb247XG4gIH1cbiAgcmVzcG9uc2UuZGF0YS50b3RhbF9jb3VudCA9IHRvdGFsQ291bnQ7XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2l0ZXJhdG9yLmpzXG5mdW5jdGlvbiBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBvcHRpb25zID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZS5lbmRwb2ludChwYXJhbWV0ZXJzKSA6IG9jdG9raXQucmVxdWVzdC5lbmRwb2ludChyb3V0ZSwgcGFyYW1ldGVycyk7XG4gIGNvbnN0IHJlcXVlc3RNZXRob2QgPSB0eXBlb2Ygcm91dGUgPT09IFwiZnVuY3Rpb25cIiA/IHJvdXRlIDogb2N0b2tpdC5yZXF1ZXN0O1xuICBjb25zdCBtZXRob2QgPSBvcHRpb25zLm1ldGhvZDtcbiAgY29uc3QgaGVhZGVycyA9IG9wdGlvbnMuaGVhZGVycztcbiAgbGV0IHVybCA9IG9wdGlvbnMudXJsO1xuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl06ICgpID0+ICh7XG4gICAgICBhc3luYyBuZXh0KCkge1xuICAgICAgICBpZiAoIXVybCkgcmV0dXJuIHsgZG9uZTogdHJ1ZSB9O1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgcmVxdWVzdE1ldGhvZCh7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0pO1xuICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRSZXNwb25zZSA9IG5vcm1hbGl6ZVBhZ2luYXRlZExpc3RSZXNwb25zZShyZXNwb25zZSk7XG4gICAgICAgICAgdXJsID0gKChub3JtYWxpemVkUmVzcG9uc2UuaGVhZGVycy5saW5rIHx8IFwiXCIpLm1hdGNoKFxuICAgICAgICAgICAgLzwoW148Pl0rKT47XFxzKnJlbD1cIm5leHRcIi9cbiAgICAgICAgICApIHx8IFtdKVsxXTtcbiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbm9ybWFsaXplZFJlc3BvbnNlIH07XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgaWYgKGVycm9yLnN0YXR1cyAhPT0gNDA5KSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICB1cmwgPSBcIlwiO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB2YWx1ZToge1xuICAgICAgICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgICAgICAgaGVhZGVyczoge30sXG4gICAgICAgICAgICAgIGRhdGE6IFtdXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH07XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYWdpbmF0ZS5qc1xuZnVuY3Rpb24gcGFnaW5hdGUob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMsIG1hcEZuKSB7XG4gIGlmICh0eXBlb2YgcGFyYW1ldGVycyA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbWFwRm4gPSBwYXJhbWV0ZXJzO1xuICAgIHBhcmFtZXRlcnMgPSB2b2lkIDA7XG4gIH1cbiAgcmV0dXJuIGdhdGhlcihcbiAgICBvY3Rva2l0LFxuICAgIFtdLFxuICAgIGl0ZXJhdG9yKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzKVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSxcbiAgICBtYXBGblxuICApO1xufVxuZnVuY3Rpb24gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pIHtcbiAgcmV0dXJuIGl0ZXJhdG9yMi5uZXh0KCkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgaWYgKHJlc3VsdC5kb25lKSB7XG4gICAgICByZXR1cm4gcmVzdWx0cztcbiAgICB9XG4gICAgbGV0IGVhcmx5RXhpdCA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIGRvbmUoKSB7XG4gICAgICBlYXJseUV4aXQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bHRzID0gcmVzdWx0cy5jb25jYXQoXG4gICAgICBtYXBGbiA/IG1hcEZuKHJlc3VsdC52YWx1ZSwgZG9uZSkgOiByZXN1bHQudmFsdWUuZGF0YVxuICAgICk7XG4gICAgaWYgKGVhcmx5RXhpdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIHJldHVybiBnYXRoZXIob2N0b2tpdCwgcmVzdWx0cywgaXRlcmF0b3IyLCBtYXBGbik7XG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvY29tcG9zZS1wYWdpbmF0ZS5qc1xudmFyIGNvbXBvc2VQYWdpbmF0ZVJlc3QgPSBPYmplY3QuYXNzaWduKHBhZ2luYXRlLCB7XG4gIGl0ZXJhdG9yXG59KTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2dlbmVyYXRlZC9wYWdpbmF0aW5nLWVuZHBvaW50cy5qc1xudmFyIHBhZ2luYXRpbmdFbmRwb2ludHMgPSBbXG4gIFwiR0VUIC9hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9hcHAvaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvYXNzaWdubWVudHMve2Fzc2lnbm1lbnRfaWR9L2FjY2VwdGVkX2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zXCIsXG4gIFwiR0VUIC9jbGFzc3Jvb21zL3tjbGFzc3Jvb21faWR9L2Fzc2lnbm1lbnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvZXZlbnRzXCIsXG4gIFwiR0VUIC9naXN0c1wiLFxuICBcIkdFVCAvZ2lzdHMvcHVibGljXCIsXG4gIFwiR0VUIC9naXN0cy9zdGFycmVkXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIixcbiAgXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2lzc3Vlc1wiLFxuICBcIkdFVCAvbGljZW5zZXNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIixcbiAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgXCJHRVQgL25ldHdvcmtzL3tvd25lcn0ve3JlcG99L2V2ZW50c1wiLFxuICBcIkdFVCAvbm90aWZpY2F0aW9uc1wiLFxuICBcIkdFVCAvb3JnYW5pemF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L3J1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC91c2FnZVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2V2ZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9mYWlsZWRfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zaWdodHMvYXBpL3JvdXRlLXN0YXRzL3thY3Rvcl90eXBlfS97YWN0b3JfaWR9XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9zdWJqZWN0LXN0YXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS91c2VyLXN0YXRzL3t1c2VyX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfS90ZWFtc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvbWV0cmljc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtL3t0ZWFtX3NsdWd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vdGVhbXNcIixcbiAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9qb2JzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aXZpdHlcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L2NoZWNrLXN1aXRlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRyaWJ1dG9yc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy9hcHBzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2ZpbGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzL2JyYW5jaGVzL3ticmFuY2h9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2xvY2F0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhcmdhemVyc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaWJlcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIixcbiAgXCJHRVQgL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL2NvZGVcIixcbiAgXCJHRVQgL3NlYXJjaC9jb21taXRzXCIsXG4gIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvbGFiZWxzXCIsXG4gIFwiR0VUIC9zZWFyY2gvcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdG9waWNzXCIsXG4gIFwiR0VUIC9zZWFyY2gvdXNlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L21lbWJlcnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3JlcG9zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC91c2VyL2VtYWlsc1wiLFxuICBcIkdFVCAvdXNlci9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvaXNzdWVzXCIsXG4gIFwiR0VUIC91c2VyL2tleXNcIixcbiAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gIFwiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3NcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvdXNlci9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NcIixcbiAgXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXIvc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvdGVhbXNcIixcbiAgXCJHRVQgL3VzZXJzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvb3Jncy97b3JnfVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3Vic2NyaXB0aW9uc1wiXG5dO1xuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbmZ1bmN0aW9uIGlzUGFnaW5hdGluZ0VuZHBvaW50KGFyZykge1xuICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgIHJldHVybiBwYWdpbmF0aW5nRW5kcG9pbnRzLmluY2x1ZGVzKGFyZyk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuZnVuY3Rpb24gcGFnaW5hdGVSZXN0KG9jdG9raXQpIHtcbiAgcmV0dXJuIHtcbiAgICBwYWdpbmF0ZTogT2JqZWN0LmFzc2lnbihwYWdpbmF0ZS5iaW5kKG51bGwsIG9jdG9raXQpLCB7XG4gICAgICBpdGVyYXRvcjogaXRlcmF0b3IuYmluZChudWxsLCBvY3Rva2l0KVxuICAgIH0pXG4gIH07XG59XG5wYWdpbmF0ZVJlc3QuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICBjb21wb3NlUGFnaW5hdGVSZXN0LFxuICBpc1BhZ2luYXRpbmdFbmRwb2ludCxcbiAgcGFnaW5hdGVSZXN0LFxuICBwYWdpbmF0aW5nRW5kcG9pbnRzXG59O1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxMy41LjBcIjtcbiIsICJpbXBvcnQgdHlwZSB7IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmNvbnN0IEVuZHBvaW50czogRW5kcG9pbnRzRGVmYXVsdHNBbmREZWNvcmF0aW9ucyA9IHtcbiAgYWN0aW9uczoge1xuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZEN1c3RvbUxhYmVsc1RvU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgYWRkUmVwb0FjY2Vzc1RvU2VsZkhvc3RlZFJ1bm5lckdyb3VwSW5Pcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFwcHJvdmVXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92ZVwiLFxuICAgIF0sXG4gICAgY2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2NhbmNlbFwiLFxuICAgIF0sXG4gICAgY3JlYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1wiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPcmdWYXJpYWJsZTogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9yZWdpc3RyYXRpb24tdG9rZW5cIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlZ2lzdHJhdGlvblRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCJdLFxuICAgIGNyZWF0ZVJlbW92ZVRva2VuRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvcmVtb3ZlLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvVmFyaWFibGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvdmFyaWFibGVzXCJdLFxuICAgIGNyZWF0ZVdvcmtmbG93RGlzcGF0Y2g6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNwYXRjaGVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBY3Rpb25zQ2FjaGVCeUlkOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXMve2NhY2hlX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlLZXk6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc3s/a2V5LHJlZn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFydGlmYWN0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlT3JnVmFyaWFibGU6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVNlbGZIb3N0ZWRSdW5uZXJGcm9tUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlV29ya2Zsb3dSdW46IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlU2VsZWN0ZWRSZXBvc2l0b3J5R2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2Rpc2FibGVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJ0aWZhY3Q6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0cy97YXJ0aWZhY3RfaWR9L3thcmNoaXZlX2Zvcm1hdH1cIixcbiAgICBdLFxuICAgIGRvd25sb2FkSm9iTG9nc0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5BdHRlbXB0TG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2xvZ3NcIixcbiAgICBdLFxuICAgIGRvd25sb2FkV29ya2Zsb3dSdW5Mb2dzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2xvZ3NcIixcbiAgICBdLFxuICAgIGVuYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZW5hYmxlV29ya2Zsb3c6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L2VuYWJsZVwiLFxuICAgIF0sXG4gICAgZm9yY2VDYW5jZWxXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZm9yY2UtY2FuY2VsXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0Zvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9nZW5lcmF0ZS1qaXRjb25maWdcIixcbiAgICBdLFxuICAgIGdlbmVyYXRlUnVubmVySml0Y29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVMaXN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGUvdXNhZ2VcIl0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VCeVJlcG9Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvY2FjaGUvdXNhZ2UtYnktcmVwb3NpdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlVXNhZ2VGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QXJ0aWZhY3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfVwiXSxcbiAgICBnZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFB1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFNlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudFZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzR2l0aHViT3duZWRJbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL2dpdGh1Yi1vd25lZFwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0xpbWl0c0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy9saW1pdHNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNNYWNoaW5lU3BlY3NGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbWFjaGluZS1zaXplc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc1BhcnRuZXJJbWFnZXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvaW1hZ2VzL3BhcnRuZXJcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQbGF0Zm9ybXNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvcGxhdGZvcm1zXCIsXG4gICAgXSxcbiAgICBnZXRKb2JGb3JXb3JrZmxvd1J1bjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnVmFyaWFibGU6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UGVuZGluZ0RlcGxveW1lbnRzRm9yUnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIGdldFJlcG9QZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhY3Rpb25zXCIsIFwiZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeVwiXSB9LFxuICAgIF0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9WYXJpYWJsZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgZ2V0UmV2aWV3c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcHByb3ZhbHNcIixcbiAgICBdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIl0sXG4gICAgZ2V0U2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH1cIl0sXG4gICAgZ2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9XCJdLFxuICAgIGdldFdvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvd1J1blVzYWdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dVc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vdGltaW5nXCIsXG4gICAgXSxcbiAgICBsaXN0QXJ0aWZhY3RzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2FydGlmYWN0c1wiXSxcbiAgICBsaXN0RW52aXJvbm1lbnRTZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gICAgXSxcbiAgICBsaXN0RW52aXJvbm1lbnRWYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgbGlzdEdpdGh1Ykhvc3RlZFJ1bm5lcnNJbkdyb3VwRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vaG9zdGVkLXJ1bm5lcnNcIixcbiAgICBdLFxuICAgIGxpc3RIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVyc1wiXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RKb2JzRm9yV29ya2Zsb3dSdW5BdHRlbXB0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICAgIF0sXG4gICAgbGlzdExhYmVsc0ZvclNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzXCJdLFxuICAgIGxpc3RPcmdWYXJpYWJsZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblNlY3JldHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi1zZWNyZXRzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb09yZ2FuaXphdGlvblZhcmlhYmxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb3JnYW5pemF0aW9uLXZhcmlhYmxlc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1ZhcmlhYmxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBsaXN0UmVwb1dvcmtmbG93czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93c1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL2Rvd25sb2Fkc1wiXSxcbiAgICBsaXN0UnVubmVyQXBwbGljYXRpb25zRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFNlbGZIb3N0ZWRSdW5uZXJzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzXCJdLFxuICAgIGxpc3RXb3JrZmxvd1J1bkFydGlmYWN0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hcnRpZmFjdHNcIixcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgICBdLFxuICAgIGxpc3RXb3JrZmxvd1J1bnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiXSxcbiAgICByZVJ1bkpvYkZvcldvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9yZXJ1blwiLFxuICAgIF0sXG4gICAgcmVSdW5Xb3JrZmxvdzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3JlcnVuXCJdLFxuICAgIHJlUnVuV29ya2Zsb3dGYWlsZWRKb2JzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1bi1mYWlsZWQtam9ic1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQWxsQ3VzdG9tTGFiZWxzRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUN1c3RvbUxhYmVsRnJvbVNlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXZpZXdDdXN0b21HYXRlc0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVcIixcbiAgICBdLFxuICAgIHJldmlld1BlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcGVuZGluZ19kZXBsb3ltZW50c1wiLFxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0QWxsb3dlZEFjdGlvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21MYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yUmVwbzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHNldEN1c3RvbU9pZGNTdWJDbGFpbUZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgc2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zaXRvcmllc0VuYWJsZWRHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0V29ya2Zsb3dBY2Nlc3NUb1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL2FjY2Vzc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlRW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIHVwZGF0ZU9yZ1ZhcmlhYmxlOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIl0sXG4gICAgdXBkYXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICB9LFxuICBhY3Rpdml0eToge1xuICAgIGNoZWNrUmVwb0lzU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZVJlcG9TdWJzY3JpcHRpb246IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGRlbGV0ZVRocmVhZFN1YnNjcmlwdGlvbjogW1xuICAgICAgXCJERUxFVEUgL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfS9zdWJzY3JpcHRpb25cIixcbiAgICBdLFxuICAgIGdldEZlZWRzOiBbXCJHRVQgL2ZlZWRzXCJdLFxuICAgIGdldFJlcG9TdWJzY3JpcHRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3Vic2NyaXB0aW9uXCJdLFxuICAgIGdldFRocmVhZDogW1wiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgZ2V0VGhyZWFkU3Vic2NyaXB0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBsaXN0RXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIl0sXG4gICAgbGlzdE5vdGlmaWNhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIGxpc3RPcmdFdmVudHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFdmVudHM6IFtcIkdFVCAvZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JSZXBvTmV0d29yazogW1wiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFB1YmxpY0V2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHMvcHVibGljXCJdLFxuICAgIGxpc3RQdWJsaWNPcmdFdmVudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkRXZlbnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlY2VpdmVkX2V2ZW50c1wiXSxcbiAgICBsaXN0UmVjZWl2ZWRQdWJsaWNFdmVudHNGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHMvcHVibGljXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb0V2ZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIl0sXG4gICAgbGlzdFJlcG9Ob3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NTdGFycmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N0YXJyZWRcIl0sXG4gICAgbGlzdFJlcG9zV2F0Y2hlZEJ5VXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFN0YXJnYXplcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIl0sXG4gICAgbGlzdFdhdGNoZWRSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3Vic2NyaXB0aW9uc1wiXSxcbiAgICBsaXN0V2F0Y2hlcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCJdLFxuICAgIG1hcmtOb3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1JlcG9Ob3RpZmljYXRpb25zQXNSZWFkOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L25vdGlmaWNhdGlvbnNcIl0sXG4gICAgbWFya1RocmVhZEFzRG9uZTogW1wiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgbWFya1RocmVhZEFzUmVhZDogW1wiUEFUQ0ggL25vdGlmaWNhdGlvbnMvdGhyZWFkcy97dGhyZWFkX2lkfVwiXSxcbiAgICBzZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBzZXRUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiUFVUIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBzdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1bnN0YXJSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zdGFycmVkL3tvd25lcn0ve3JlcG99XCJdLFxuICB9LFxuICBhcHBzOiB7XG4gICAgYWRkUmVwb1RvSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwiYWRkUmVwb1RvSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNoZWNrVG9rZW46IFtcIlBPU1QgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICBjcmVhdGVGcm9tTWFuaWZlc3Q6IFtcIlBPU1QgL2FwcC1tYW5pZmVzdHMve2NvZGV9L2NvbnZlcnNpb25zXCJdLFxuICAgIGNyZWF0ZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXG4gICAgICBcIlBPU1QgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L2FjY2Vzc190b2tlbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dGhvcml6YXRpb246IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L2dyYW50XCJdLFxuICAgIGRlbGV0ZUluc3RhbGxhdGlvbjogW1wiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfVwiXSxcbiAgICBkZWxldGVUb2tlbjogW1wiREVMRVRFIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC9hcHBcIl0sXG4gICAgZ2V0QnlTbHVnOiBbXCJHRVQgL2FwcHMve2FwcF9zbHVnfVwiXSxcbiAgICBnZXRJbnN0YWxsYXRpb246IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZ2V0T3JnSW5zdGFsbGF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFJlcG9JbnN0YWxsYXRpb246IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50OiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9hY2NvdW50cy97YWNjb3VudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFN1YnNjcmlwdGlvblBsYW5Gb3JBY2NvdW50U3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9hY2NvdW50cy97YWNjb3VudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFVzZXJJbnN0YWxsYXRpb246IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9pbnN0YWxsYXRpb25cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiR0VUIC9hcHAvaG9vay9jb25maWdcIl0sXG4gICAgZ2V0V2ViaG9va0RlbGl2ZXJ5OiBbXCJHRVQgL2FwcC9ob29rL2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCJdLFxuICAgIGxpc3RBY2NvdW50c0ZvclBsYW5TdHViYmVkOiBbXG4gICAgICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0SW5zdGFsbGF0aW9uUmVxdWVzdHNGb3JBdXRoZW50aWNhdGVkQXBwOiBbXG4gICAgICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnM6IFtcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEluc3RhbGxhdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdFBsYW5zOiBbXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvcGxhbnNcIl0sXG4gICAgbGlzdFBsYW5zU3R1YmJlZDogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnNcIl0sXG4gICAgbGlzdFJlcG9zQWNjZXNzaWJsZVRvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL2luc3RhbGxhdGlvbi9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiXSxcbiAgICBsaXN0U3Vic2NyaXB0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvbWFya2V0cGxhY2VfcHVyY2hhc2VzL3N0dWJiZWRcIixcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH0vYXR0ZW1wdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJhcHBzXCIsIFwicmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0Zyb21JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXNldFRva2VuOiBbXCJQQVRDSCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIHJldm9rZUluc3RhbGxhdGlvbkFjY2Vzc1Rva2VuOiBbXCJERUxFVEUgL2luc3RhbGxhdGlvbi90b2tlblwiXSxcbiAgICBzY29wZVRva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW4vc2NvcGVkXCJdLFxuICAgIHN1c3BlbmRJbnN0YWxsYXRpb246IFtcIlBVVCAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vc3VzcGVuZGVkXCJdLFxuICAgIHVuc3VzcGVuZEluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiLFxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvckFwcDogW1wiUEFUQ0ggL2FwcC9ob29rL2NvbmZpZ1wiXSxcbiAgfSxcbiAgYmlsbGluZzoge1xuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCJdLFxuICAgIGdldEdpdGh1YkFjdGlvbnNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJCaWxsaW5nVXNhZ2VSZXBvcnRPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdhbml6YXRpb25zL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvdXNhZ2VcIixcbiAgICBdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIl0sXG4gICAgZ2V0R2l0aHViUGFja2FnZXNCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9wYWNrYWdlc1wiLFxuICAgIF0sXG4gICAgZ2V0U2hhcmVkU3RvcmFnZUJpbGxpbmdPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc2V0dGluZ3MvYmlsbGluZy9zaGFyZWQtc3RvcmFnZVwiLFxuICAgIF0sXG4gIH0sXG4gIGNoZWNrczoge1xuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVuc1wiXSxcbiAgICBjcmVhdGVTdWl0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzXCJdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICAgIGdldFN1aXRlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9XCJdLFxuICAgIGxpc3RBbm5vdGF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vYW5ub3RhdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1ydW5zXCJdLFxuICAgIGxpc3RGb3JTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlcy97Y2hlY2tfc3VpdGVfaWR9L2NoZWNrLXJ1bnNcIixcbiAgICBdLFxuICAgIGxpc3RTdWl0ZXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIl0sXG4gICAgcmVyZXF1ZXN0UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICByZXJlcXVlc3RTdWl0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9yZXJlcXVlc3RcIixcbiAgICBdLFxuICAgIHNldFN1aXRlc1ByZWZlcmVuY2VzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMvcHJlZmVyZW5jZXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnMve2NoZWNrX3J1bl9pZH1cIl0sXG4gIH0sXG4gIGNvZGVTY2FubmluZzoge1xuICAgIGNvbW1pdEF1dG9maXg6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeC9jb21taXRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXhcIixcbiAgICBdLFxuICAgIGNyZWF0ZVZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbmFseXNpczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYW5hbHlzZXMve2FuYWx5c2lzX2lkfXs/Y29uZmlybV9kZWxldGV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVDb2RlcWxEYXRhYmFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL2RhdGFiYXNlcy97bGFuZ3VhZ2V9XCIsXG4gICAgXSxcbiAgICBnZXRBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgYWxlcnRfaWQ6IFwiYWxlcnRfbnVtYmVyXCIgfSB9LFxuICAgIF0sXG4gICAgZ2V0QW5hbHlzaXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH1cIixcbiAgICBdLFxuICAgIGdldEF1dG9maXg6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBnZXRDb2RlcWxEYXRhYmFzZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL2RhdGFiYXNlcy97bGFuZ3VhZ2V9XCIsXG4gICAgXSxcbiAgICBnZXREZWZhdWx0U2V0dXA6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCJdLFxuICAgIGdldFNhcmlmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvc2FyaWZzL3tzYXJpZl9pZH1cIl0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlcy97Y29kZXFsX3ZhcmlhbnRfYW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRWYXJpYW50QW5hbHlzaXNSZXBvVGFzazogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfS9yZXBvcy97cmVwb19vd25lcn0ve3JlcG9fbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydEluc3RhbmNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJjb2RlU2Nhbm5pbmdcIiwgXCJsaXN0QWxlcnRJbnN0YW5jZXNcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RDb2RlcWxEYXRhYmFzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZWNlbnRBbmFseXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzXCJdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGVmYXVsdFNldHVwOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2RlZmF1bHQtc2V0dXBcIixcbiAgICBdLFxuICAgIHVwbG9hZFNhcmlmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmc1wiXSxcbiAgfSxcbiAgY29kZVNlY3VyaXR5OiB7XG4gICAgYXR0YWNoQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2F0dGFjaFwiLFxuICAgIF0sXG4gICAgYXR0YWNoRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2F0dGFjaFwiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29uZmlndXJhdGlvbjogW1wiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiREVMRVRFIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRldGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMvZGV0YWNoXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbkZvclJlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNlY3VyaXR5LWNvbmZpZ3VyYXRpb25cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIl0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXREZWZhdWx0Q29uZmlndXJhdGlvbnNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMvZGVmYXVsdHNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0UmVwb3NpdG9yaWVzRm9yRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBnZXRTaW5nbGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0Q29uZmlndXJhdGlvbkFzRGVmYXVsdDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vZGVmYXVsdHNcIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHRGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIlBVVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVFbnRlcnByaXNlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgY29kZXNPZkNvbmR1Y3Q6IHtcbiAgICBnZXRBbGxDb2Rlc09mQ29uZHVjdDogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0XCJdLFxuICAgIGdldENvbmR1Y3RDb2RlOiBbXCJHRVQgL2NvZGVzX29mX2NvbmR1Y3Qve2tleX1cIl0sXG4gIH0sXG4gIGNvZGVzcGFjZXM6IHtcbiAgICBhZGRSZXBvc2l0b3J5Rm9yU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yRGV2Y29udGFpbmVyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9wZXJtaXNzaW9uc19jaGVja1wiLFxuICAgIF0sXG4gICAgY29kZXNwYWNlTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUFVUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUHJGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZGVsZXRlRnJvbU9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnU2VjcmV0OiBbXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZGVsZXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGV4cG9ydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L2V4cG9ydHNcIixcbiAgICBdLFxuICAgIGdldENvZGVzcGFjZXNGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBnZXRFeHBvcnREZXRhaWxzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzL3tleHBvcnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiXSxcbiAgICBnZXRPcmdTZWNyZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRQdWJsaWNLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3REZXZjb250YWluZXJzSW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL2RldmNvbnRhaW5lcnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2NvZGVzcGFjZXNcIl0sXG4gICAgbGlzdEluT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZFBhcmFtZXRlcnM6IHsgb3JnX2lkOiBcIm9yZ1wiIH0gfSxcbiAgICBdLFxuICAgIGxpc3RJblJlcG9zaXRvcnlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWNyZXRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcHJlRmxpZ2h0V2l0aFJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbmV3XCIsXG4gICAgXSxcbiAgICBwdWJsaXNoRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vcHVibGlzaFwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICByZXBvTWFjaGluZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvbWFjaGluZXNcIixcbiAgICBdLFxuICAgIHNldFJlcG9zaXRvcmllc0ZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RhcnRcIl0sXG4gICAgc3RvcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9zdG9wXCJdLFxuICAgIHN0b3BJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiLFxuICAgIF0sXG4gICAgdXBkYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBBVENIIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfVwiXSxcbiAgfSxcbiAgY29waWxvdDoge1xuICAgIGFkZENvcGlsb3RTZWF0c0ZvclRlYW1zOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlbGVjdGVkX3RlYW1zXCIsXG4gICAgXSxcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JVc2VyczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiLFxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVGVhbXM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgY2FuY2VsQ29waWxvdFNlYXRBc3NpZ25tZW50Rm9yVXNlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF91c2Vyc1wiLFxuICAgIF0sXG4gICAgY29waWxvdE1ldHJpY3NGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L21ldHJpY3NcIl0sXG4gICAgY29waWxvdE1ldHJpY3NGb3JUZWFtOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIl0sXG4gICAgZ2V0Q29waWxvdE9yZ2FuaXphdGlvbkRldGFpbHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmdcIl0sXG4gICAgZ2V0Q29waWxvdFNlYXREZXRhaWxzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvcGlsb3RcIixcbiAgICBdLFxuICAgIGxpc3RDb3BpbG90U2VhdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC91c2FnZVwiXSxcbiAgICB1c2FnZU1ldHJpY3NGb3JUZWFtOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCJdLFxuICB9LFxuICBkZXBlbmRhYm90OiB7XG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UmVwb1B1YmxpY0tleTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdEFsZXJ0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHNcIl0sXG4gICAgbGlzdE9yZ1NlY3JldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9TZWNyZXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0c1wiXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWxlY3RlZFJlcG9Gcm9tT3JnU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGRlcGVuZGVuY3lHcmFwaDoge1xuICAgIGNyZWF0ZVJlcG9zaXRvcnlTbmFwc2hvdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRlbmN5LWdyYXBoL3NuYXBzaG90c1wiLFxuICAgIF0sXG4gICAgZGlmZlJhbmdlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGV4cG9ydFNib206IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zYm9tXCJdLFxuICB9LFxuICBlbW9qaXM6IHsgZ2V0OiBbXCJHRVQgL2Vtb2ppc1wiXSB9LFxuICBnaXN0czoge1xuICAgIGNoZWNrSXNTdGFycmVkOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvZ2lzdHNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1wiUE9TVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGZvcms6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRSZXZpc2lvbjogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0ve3NoYX1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9naXN0c1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21taXRzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ2lzdHNcIl0sXG4gICAgbGlzdEZvcmtzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9mb3Jrc1wiXSxcbiAgICBsaXN0UHVibGljOiBbXCJHRVQgL2dpc3RzL3B1YmxpY1wiXSxcbiAgICBsaXN0U3RhcnJlZDogW1wiR0VUIC9naXN0cy9zdGFycmVkXCJdLFxuICAgIHN0YXI6IFtcIlBVVCAvZ2lzdHMve2dpc3RfaWR9L3N0YXJcIl0sXG4gICAgdW5zdGFyOiBbXCJERUxFVEUgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgfSxcbiAgZ2l0OiB7XG4gICAgY3JlYXRlQmxvYjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHNcIl0sXG4gICAgY3JlYXRlUmVmOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmc1wiXSxcbiAgICBjcmVhdGVUYWc6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90YWdzXCJdLFxuICAgIGNyZWF0ZVRyZWU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC90cmVlc1wiXSxcbiAgICBkZWxldGVSZWY6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnMve3JlZn1cIl0sXG4gICAgZ2V0QmxvYjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvYmxvYnMve2ZpbGVfc2hhfVwiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2NvbW1pdHMve2NvbW1pdF9zaGF9XCJdLFxuICAgIGdldFJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmL3tyZWZ9XCJdLFxuICAgIGdldFRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFncy97dGFnX3NoYX1cIl0sXG4gICAgZ2V0VHJlZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXMve3RyZWVfc2hhfVwiXSxcbiAgICBsaXN0TWF0Y2hpbmdSZWZzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9tYXRjaGluZy1yZWZzL3tyZWZ9XCJdLFxuICAgIHVwZGF0ZVJlZjogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICB9LFxuICBnaXRpZ25vcmU6IHtcbiAgICBnZXRBbGxUZW1wbGF0ZXM6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlc1wiXSxcbiAgICBnZXRUZW1wbGF0ZTogW1wiR0VUIC9naXRpZ25vcmUvdGVtcGxhdGVzL3tuYW1lfVwiXSxcbiAgfSxcbiAgaG9zdGVkQ29tcHV0ZToge1xuICAgIGNyZWF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gcm9tT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLWNvbmZpZ3VyYXRpb25zL3tuZXR3b3JrX2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXROZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya1NldHRpbmdzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9uZXR3b3JrLXNldHRpbmdzL3tuZXR3b3JrX3NldHRpbmdzX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdE5ldHdvcmtDb25maWd1cmF0aW9uc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlTmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGludGVyYWN0aW9uczoge1xuICAgIGdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIGdldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcImdldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICByZW1vdmVSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yUmVwbzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJyZW1vdmVSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBVVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgc2V0UmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJQVVQgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvclJlcG86IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwic2V0UmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICB9LFxuICBpc3N1ZXM6IHtcbiAgICBhZGRBc3NpZ25lZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlc1wiLFxuICAgIF0sXG4gICAgYWRkTGFiZWxzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCJdLFxuICAgIGFkZFN1Yklzc3VlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlcy97YXNzaWduZWV9XCJdLFxuICAgIGNoZWNrVXNlckNhbkJlQXNzaWduZWRUb0lzc3VlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2Fzc2lnbmVlcy97YXNzaWduZWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBjcmVhdGVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlTGFiZWw6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBjcmVhdGVNaWxlc3RvbmU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgZGVsZXRlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUxhYmVsOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgZGVsZXRlTWlsZXN0b25lOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn1cIl0sXG4gICAgZ2V0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGdldEV2ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9ldmVudHMve2V2ZW50X2lkfVwiXSxcbiAgICBnZXRMYWJlbDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGdldE1pbGVzdG9uZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiXSxcbiAgICBsaXN0OiBbXCJHRVQgL2lzc3Vlc1wiXSxcbiAgICBsaXN0QXNzaWduZWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Fzc2lnbmVlc1wiXSxcbiAgICBsaXN0Q29tbWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RFdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCJdLFxuICAgIGxpc3RFdmVudHNGb3JUaW1lbGluZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS90aW1lbGluZVwiLFxuICAgIF0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZXNcIl0sXG4gICAgbGlzdEZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCJdLFxuICAgIGxpc3RMYWJlbHNGb3JNaWxlc3RvbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiXSxcbiAgICBsaXN0TGFiZWxzT25Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGxpc3RNaWxlc3RvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXNcIl0sXG4gICAgbGlzdFN1Yklzc3VlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gICAgXSxcbiAgICBsb2NrOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHJlbW92ZUFsbExhYmVsczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFzc2lnbmVlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIHJlbW92ZUxhYmVsOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVscy97bmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVN1Yklzc3VlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3N1Yl9pc3N1ZVwiLFxuICAgIF0sXG4gICAgcmVwcmlvcml0aXplU3ViSXNzdWU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzL3ByaW9yaXR5XCIsXG4gICAgXSxcbiAgICBzZXRMYWJlbHM6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICB1bmxvY2s6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xvY2tcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUNvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIHVwZGF0ZUxhYmVsOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICB1cGRhdGVNaWxlc3RvbmU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgfSxcbiAgbGljZW5zZXM6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbGljZW5zZXMve2xpY2Vuc2V9XCJdLFxuICAgIGdldEFsbENvbW1vbmx5VXNlZDogW1wiR0VUIC9saWNlbnNlc1wiXSxcbiAgICBnZXRGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xpY2Vuc2VcIl0sXG4gIH0sXG4gIG1hcmtkb3duOiB7XG4gICAgcmVuZGVyOiBbXCJQT1NUIC9tYXJrZG93blwiXSxcbiAgICByZW5kZXJSYXc6IFtcbiAgICAgIFwiUE9TVCAvbWFya2Rvd24vcmF3XCIsXG4gICAgICB7IGhlYWRlcnM6IHsgXCJjb250ZW50LXR5cGVcIjogXCJ0ZXh0L3BsYWluOyBjaGFyc2V0PXV0Zi04XCIgfSB9LFxuICAgIF0sXG4gIH0sXG4gIG1ldGE6IHtcbiAgICBnZXQ6IFtcIkdFVCAvbWV0YVwiXSxcbiAgICBnZXRBbGxWZXJzaW9uczogW1wiR0VUIC92ZXJzaW9uc1wiXSxcbiAgICBnZXRPY3RvY2F0OiBbXCJHRVQgL29jdG9jYXRcIl0sXG4gICAgZ2V0WmVuOiBbXCJHRVQgL3plblwiXSxcbiAgICByb290OiBbXCJHRVQgL1wiXSxcbiAgfSxcbiAgbWlncmF0aW9uczoge1xuICAgIGRlbGV0ZUFyY2hpdmVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkZWxldGVBcmNoaXZlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGRvd25sb2FkQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBnZXRBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0U3RhdHVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGdldFN0YXR1c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH1cIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RSZXBvc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wibWlncmF0aW9uc1wiLCBcImxpc3RSZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzdGFydEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgc3RhcnRGb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiXSxcbiAgICB1bmxvY2tSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gICAgdW5sb2NrUmVwb0Zvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvcy97cmVwb19uYW1lfS9sb2NrXCIsXG4gICAgXSxcbiAgfSxcbiAgb2lkYzoge1xuICAgIGdldE9pZGNDdXN0b21TdWJUZW1wbGF0ZUZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICB1cGRhdGVPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gIH0sXG4gIG9yZ3M6IHtcbiAgICBhZGRTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5hZGRTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNhZGQtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhc3NpZ25UZWFtVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBhc3NpZ25Vc2VyVG9PcmdSb2xlOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdXNlcnMve3VzZXJuYW1lfS97cm9sZV9pZH1cIixcbiAgICBdLFxuICAgIGJsb2NrVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNhbmNlbEludml0YXRpb246IFtcIkRFTEVURSAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIl0sXG4gICAgY2hlY2tCbG9ja2VkVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tQdWJsaWNNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgY29udmVydE1lbWJlclRvT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUludml0YXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vaW52aXRhdGlvbnNcIl0sXG4gICAgY3JlYXRlSXNzdWVUeXBlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllczogW1wiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzRm9yUmVwb3M6IFtcbiAgICAgIFwiUEFUQ0ggL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL29yZ3Mve29yZ30vaG9va3NcIl0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL29yZ3Mve29yZ31cIl0sXG4gICAgZGVsZXRlSXNzdWVUeXBlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIGRlbGV0ZVdlYmhvb2s6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3tzZWN1cml0eV9wcm9kdWN0fS97ZW5hYmxlbWVudH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuZW5hYmxlT3JEaXNhYmxlU2VjdXJpdHlQcm9kdWN0T25BbGxPcmdSZXBvcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvb3JncyNlbmFibGUtb3ItZGlzYWJsZS1hLXNlY3VyaXR5LWZlYXR1cmUtZm9yLWFuLW9yZ2FuaXphdGlvblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9vcmdzL3tvcmd9XCJdLFxuICAgIGdldEFsbEN1c3RvbVByb3BlcnRpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYVwiXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0T3JnUm9sZTogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldEhpc3Rvcnk6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiXSxcbiAgICBnZXRPcmdSdWxlc2V0VmVyc2lvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdDogW1wiR0VUIC9vcmdhbml6YXRpb25zXCJdLFxuICAgIGxpc3RBcHBJbnN0YWxsYXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIl0sXG4gICAgbGlzdEJsb2NrZWRVc2VyczogW1wiR0VUIC9vcmdzL3tvcmd9L2Jsb2Nrc1wiXSxcbiAgICBsaXN0Q3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgbGlzdEZhaWxlZEludml0YXRpb25zOiBbXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL29yZ3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9vcmdzXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIl0sXG4gICAgbGlzdElzc3VlVHlwZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBsaXN0TWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIl0sXG4gICAgbGlzdE1lbWJlcnNoaXBzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCJdLFxuICAgIGxpc3RPcmdSb2xlVGVhbXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCJdLFxuICAgIGxpc3RPcmdSb2xlVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3VzZXJzXCJdLFxuICAgIGxpc3RPcmdSb2xlczogW1wiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlc1wiXSxcbiAgICBsaXN0T3JnYW5pemF0aW9uRmluZUdyYWluZWRQZXJtaXNzaW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLWZpbmUtZ3JhaW5lZC1wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdE91dHNpZGVDb2xsYWJvcmF0b3JzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RQYXRHcmFudFJlcG9zaXRvcmllczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0cy97cGF0X3JlcXVlc3RfaWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFBhdEdyYW50UmVxdWVzdHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIl0sXG4gICAgbGlzdFBhdEdyYW50czogW1wiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RQdWJsaWNNZW1iZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIl0sXG4gICAgbGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5saXN0U2VjdXJpdHlNYW5hZ2VyVGVhbXMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL3NlY3VyaXR5LW1hbmFnZXJzI2xpc3Qtc2VjdXJpdHktbWFuYWdlci10ZWFtc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCJdLFxuICAgIGxpc3RXZWJob29rczogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIHBpbmdXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21Qcm9wZXJ0eTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWEve2N1c3RvbV9wcm9wZXJ0eV9uYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlTWVtYmVyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIHJlbW92ZU1lbWJlcnNoaXBGb3JVc2VyOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVPdXRzaWRlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vdXRzaWRlX2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9zZWN1cml0eS1tYW5hZ2Vycy90ZWFtcy97dGVhbV9zbHVnfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Qub3Jncy5yZW1vdmVTZWN1cml0eU1hbmFnZXJUZWFtKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNyZW1vdmUtYS1zZWN1cml0eS1tYW5hZ2VyLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZXZpZXdQYXRHcmFudFJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0c0luQnVsazogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICAgIF0sXG4gICAgcmV2b2tlQWxsT3JnUm9sZXNUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJldm9rZU9yZ1JvbGVUZWFtOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMvdGVhbXMve3RlYW1fc2x1Z30ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBzZXRNZW1iZXJzaGlwRm9yVXNlcjogW1wiUFVUIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgc2V0UHVibGljTWVtYmVyc2hpcEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICB1bmJsb2NrVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL29yZ3Mve29yZ31cIl0sXG4gICAgdXBkYXRlSXNzdWVUeXBlOiBbXCJQVVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXMve2lzc3VlX3R5cGVfaWR9XCJdLFxuICAgIHVwZGF0ZU1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVQYXRBY2Nlc3M6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vucy97cGF0X2lkfVwiXSxcbiAgICB1cGRhdGVQYXRBY2Nlc3NlczogW1wiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vY29uZmlnXCJdLFxuICB9LFxuICBwYWNrYWdlczoge1xuICAgIGRlbGV0ZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeUFuT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInBhY2thZ2VzXCIsIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlPcmdcIl0gfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvckFQYWNrYWdlT3duZWRCeVRoZUF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIHJlbmFtZWQ6IFtcbiAgICAgICAgICBcInBhY2thZ2VzXCIsXG4gICAgICAgICAgXCJnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCIsXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZUZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdERvY2tlck1pZ3JhdGlvbkNvbmZsaWN0aW5nUGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZG9ja2VyL2NvbmZsaWN0c1wiLFxuICAgIF0sXG4gICAgbGlzdFBhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JPcmdhbml6YXRpb246IFtcIkdFVCAvb3Jncy97b3JnfS9wYWNrYWdlc1wiXSxcbiAgICBsaXN0UGFja2FnZXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXNcIl0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3Jlc3RvcmV7P3Rva2VufVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfS9yZXN0b3JlXCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZVZlcnNpb25Gb3JVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gIH0sXG4gIHByaXZhdGVSZWdpc3RyaWVzOiB7XG4gICAgY3JlYXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllc1wiXSxcbiAgICBkZWxldGVPcmdQcml2YXRlUmVnaXN0cnk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRPcmdQcml2YXRlUmVnaXN0cnk6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRPcmdQdWJsaWNLZXk6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMvcHVibGljLWtleVwiXSxcbiAgICBsaXN0T3JnUHJpdmF0ZVJlZ2lzdHJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgdXBkYXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3ByaXZhdGUtcmVnaXN0cmllcy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgcHJvamVjdHM6IHtcbiAgICBhZGRDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5hZGRDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2FkZC1wcm9qZWN0LWNvbGxhYm9yYXRvclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUNhcmQ6IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuY3JlYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2NyZWF0ZS1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuY3JlYXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNjcmVhdGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtdXNlci1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY3JlYXRlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvck9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hbi1vcmdhbml6YXRpb24tcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUZvclJlcG8oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYS1yZXBvc2l0b3J5LXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGU6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmRlbGV0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2RlbGV0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGVDYXJkOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy9jYXJkcy97Y2FyZF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmRlbGV0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNkZWxldGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBkZWxldGVDb2x1bW46IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDb2x1bW4oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI2RlbGV0ZS1hLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0OiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNnZXQtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0Q2FyZDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXRDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZ2V0LWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZ2V0Q29sdW1uOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNnZXQtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldFBlcm1pc3Npb25Gb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5nZXRQZXJtaXNzaW9uRm9yVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbGxhYm9yYXRvcnMjZ2V0LXByb2plY3QtcGVybWlzc2lvbi1mb3ItYS11c2VyXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENhcmRzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfS9jYXJkc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENhcmRzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjbGlzdC1wcm9qZWN0LWNhcmRzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENvbGxhYm9yYXRvcnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2xpc3QtcHJvamVjdC1jb2xsYWJvcmF0b3JzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdENvbHVtbnM6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sdW1uc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdENvbHVtbnMoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI2xpc3QtcHJvamVjdC1jb2x1bW5zXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LW9yZ2FuaXphdGlvbi1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1yZXBvc2l0b3J5LXByb2plY3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdEZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtdXNlci1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIG1vdmVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI21vdmUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ29sdW1uOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vbW92ZXNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLm1vdmVDb2x1bW4oKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2x1bW5zI21vdmUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnJlbW92ZUNvbGxhYm9yYXRvcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbGxhYm9yYXRvcnMjcmVtb3ZlLXVzZXItYXMtYS1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjdXBkYXRlLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHVwZGF0ZUNhcmQ6IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy51cGRhdGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHVwZGF0ZUNvbHVtbjogW1xuICAgICAgXCJQQVRDSCAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyN1cGRhdGUtYW4tZXhpc3RpbmctcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgfSxcbiAgcHVsbHM6IHtcbiAgICBjaGVja0lmTWVyZ2VkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vbWVyZ2VcIl0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBjcmVhdGVSZXBseUZvclJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVwbGllc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmV2aWV3OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgY3JlYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBkZWxldGVQZW5kaW5nUmV2aWV3OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNtaXNzUmV2aWV3OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2Rpc21pc3NhbHNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIGdldFJldmlldzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UmV2aWV3Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiXSxcbiAgICBsaXN0RmlsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiXSxcbiAgICBsaXN0UmVxdWVzdGVkUmV2aWV3ZXJzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0UmV2aWV3Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzXCJdLFxuICAgIGxpc3RSZXZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3c1wiXSxcbiAgICBtZXJnZTogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIHJlbW92ZVJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgcmVxdWVzdFJldmlld2VyczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHN1Ym1pdFJldmlldzogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vZXZlbnRzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9XCJdLFxuICAgIHVwZGF0ZUJyYW5jaDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vdXBkYXRlLWJyYW5jaFwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH1cIixcbiAgICBdLFxuICB9LFxuICByYXRlTGltaXQ6IHsgZ2V0OiBbXCJHRVQgL3JhdGVfbGltaXRcIl0gfSxcbiAgcmVhY3Rpb25zOiB7XG4gICAgY3JlYXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUHVsbFJlcXVlc3RDb21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JSZWxlYXNlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVGb3JUZWFtRGlzY3Vzc2lvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb25Db21tZW50OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3RGb3JDb21taXRDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvcklzc3VlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIl0sXG4gICAgbGlzdEZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUHVsbFJlcXVlc3RSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclJlbGVhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JUZWFtRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gIH0sXG4gIHJlcG9zOiB7XG4gICAgYWNjZXB0SW52aXRhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhY2NlcHRJbnZpdGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGFkZEFwcEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBhZGRTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICBhZGRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIGFkZFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgY2FuY2VsUGFnZXNEZXBsb3ltZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNoZWNrQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tDb2xsYWJvcmF0b3I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnRpbmc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcml2YXRlLXZ1bG5lcmFiaWxpdHktcmVwb3J0aW5nXCIsXG4gICAgXSxcbiAgICBjaGVja1Z1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgY29kZW93bmVyc0Vycm9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlb3duZXJzL2Vycm9yc1wiXSxcbiAgICBjb21wYXJlQ29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlfS4uLntoZWFkfVwiXSxcbiAgICBjb21wYXJlQ29tbWl0c1dpdGhCYXNlaGVhZDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbXBhcmUve2Jhc2VoZWFkfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlQXR0ZXN0YXRpb246IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9uc1wiXSxcbiAgICBjcmVhdGVBdXRvbGluazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGNyZWF0ZUNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTdGF0dXM6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXR1c2VzL3tzaGF9XCJdLFxuICAgIGNyZWF0ZURlcGxveUtleTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURpc3BhdGNoRXZlbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Rpc3BhdGNoZXNcIl0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvcmVwb3NcIl0sXG4gICAgY3JlYXRlRm9yazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgY3JlYXRlSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgY3JlYXRlT3JVcGRhdGVDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcm9wZXJ0aWVzL3ZhbHVlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVFbnZpcm9ubWVudDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRmlsZUNvbnRlbnRzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBjcmVhdGVPcmdSdWxlc2V0OiBbXCJQT1NUIC9vcmdzL3tvcmd9L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlUGFnZXNTaXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBjcmVhdGVSZWxlYXNlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBjcmVhdGVSZXBvUnVsZXNldDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgY3JlYXRlVXNpbmdUZW1wbGF0ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97dGVtcGxhdGVfb3duZXJ9L3t0ZW1wbGF0ZV9yZXBvfS9nZW5lcmF0ZVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgZGVjbGluZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWNsaW5lSW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGRlbGV0ZUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBbkVudmlyb25tZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXV0b2xpbms6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZGVsZXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbW1pdENvbW1lbnQ6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1pdFNpZ25hdHVyZVByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3NpZ25hdHVyZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveUtleTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGRlbGV0ZURlcGxveW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZURlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRmlsZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZGVsZXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlT3JnUnVsZXNldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVQYWdlc1NpdGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZGVsZXRlUHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVsZWFzZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZGVsZXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlcG9SdWxlc2V0OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBkaXNhYmxlQXV0b21hdGVkU2VjdXJpdHlGaXhlczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9tYXRlZC1zZWN1cml0eS1maXhlc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBkaXNhYmxlUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnRpbmc6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wcml2YXRlLXZ1bG5lcmFiaWxpdHktcmVwb3J0aW5nXCIsXG4gICAgXSxcbiAgICBkaXNhYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wicmVwb3NcIiwgXCJkb3dubG9hZFppcGJhbGxBcmNoaXZlXCJdIH0sXG4gICAgXSxcbiAgICBkb3dubG9hZFRhcmJhbGxBcmNoaXZlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhcmJhbGwve3JlZn1cIl0sXG4gICAgZG93bmxvYWRaaXBiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS96aXBiYWxsL3tyZWZ9XCJdLFxuICAgIGVuYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGVuYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZW5hYmxlVnVsbmVyYWJpbGl0eUFsZXJ0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Z1bG5lcmFiaWxpdHktYWxlcnRzXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJlbGVhc2VOb3RlczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9nZW5lcmF0ZS1ub3Rlc1wiLFxuICAgIF0sXG4gICAgZ2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99XCJdLFxuICAgIGdldEFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGdldEFsbEVudmlyb25tZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHNcIl0sXG4gICAgZ2V0QWxsU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsVG9waWNzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICBnZXRBcHBzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgIF0sXG4gICAgZ2V0QXV0b2xpbms6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzL3thdXRvbGlua19pZH1cIl0sXG4gICAgZ2V0QnJhbmNoOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9XCJdLFxuICAgIGdldEJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRCcmFuY2hSdWxlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRDbG9uZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9jbG9uZXNcIl0sXG4gICAgZ2V0Q29kZUZyZXF1ZW5jeVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvZGVfZnJlcXVlbmN5XCJdLFxuICAgIGdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfS9wZXJtaXNzaW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb21iaW5lZFN0YXR1c0ZvclJlZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c1wiXSxcbiAgICBnZXRDb21taXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfVwiXSxcbiAgICBnZXRDb21taXRBY3Rpdml0eVN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL2NvbW1pdF9hY3Rpdml0eVwiXSxcbiAgICBnZXRDb21taXRDb21tZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBnZXRDb21tdW5pdHlQcm9maWxlTWV0cmljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tdW5pdHkvcHJvZmlsZVwiXSxcbiAgICBnZXRDb250ZW50OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbnRlbnRzL3twYXRofVwiXSxcbiAgICBnZXRDb250cmlidXRvcnNTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb250cmlidXRvcnNcIl0sXG4gICAgZ2V0Q3VzdG9tRGVwbG95bWVudFByb3RlY3Rpb25SdWxlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMve3Byb3RlY3Rpb25fcnVsZV9pZH1cIixcbiAgICBdLFxuICAgIGdldEN1c3RvbVByb3BlcnRpZXNWYWx1ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIl0sXG4gICAgZ2V0RGVwbG95S2V5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH1cIl0sXG4gICAgZ2V0RGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICBnZXREZXBsb3ltZW50U3RhdHVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzL3tzdGF0dXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRFbnZpcm9ubWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldExhdGVzdFBhZ2VzQnVpbGQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzL2xhdGVzdFwiXSxcbiAgICBnZXRMYXRlc3RSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2xhdGVzdFwiXSxcbiAgICBnZXRPcmdSdWxlU3VpdGU6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlczogW1wiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldE9yZ1J1bGVzZXQ6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZ2V0T3JnUnVsZXNldHM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRQYWdlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlc1wiXSxcbiAgICBnZXRQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy97YnVpbGRfaWR9XCJdLFxuICAgIGdldFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzL3twYWdlc19kZXBsb3ltZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UGFnZXNIZWFsdGhDaGVjazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9oZWFsdGhcIl0sXG4gICAgZ2V0UGFydGljaXBhdGlvblN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3BhcnRpY2lwYXRpb25cIl0sXG4gICAgZ2V0UHVsbFJlcXVlc3RSZXZpZXdQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgZ2V0UHVuY2hDYXJkU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvcHVuY2hfY2FyZFwiXSxcbiAgICBnZXRSZWFkbWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVhZG1lXCJdLFxuICAgIGdldFJlYWRtZUluRGlyZWN0b3J5OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZS97ZGlyfVwiXSxcbiAgICBnZXRSZWxlYXNlOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICBnZXRSZWxlYXNlQXNzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvYXNzZXRzL3thc3NldF9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUJ5VGFnOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3RhZ3Mve3RhZ31cIl0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzL3tydWxlX3N1aXRlX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVTdWl0ZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIl0sXG4gICAgZ2V0UmVwb1J1bGVzZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldFJlcG9SdWxlc2V0SGlzdG9yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeS97dmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlc2V0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0c1wiXSxcbiAgICBnZXRTdGF0dXNDaGVja3NQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzXCIsXG4gICAgXSxcbiAgICBnZXRUZWFtc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgXSxcbiAgICBnZXRUb3BQYXRoczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcGF0aHNcIl0sXG4gICAgZ2V0VG9wUmVmZXJyZXJzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvcG9wdWxhci9yZWZlcnJlcnNcIl0sXG4gICAgZ2V0VXNlcnNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgIF0sXG4gICAgZ2V0Vmlld3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy92aWV3c1wiXSxcbiAgICBnZXRXZWJob29rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3RBY3Rpdml0aWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICAgIF0sXG4gICAgbGlzdEF1dG9saW5rczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbGlua3NcIl0sXG4gICAgbGlzdEJyYW5jaGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzXCJdLFxuICAgIGxpc3RCcmFuY2hlc0ZvckhlYWRDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9icmFuY2hlcy13aGVyZS1oZWFkXCIsXG4gICAgXSxcbiAgICBsaXN0Q29sbGFib3JhdG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzXCJdLFxuICAgIGxpc3RDb21tZW50c0ZvckNvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCJdLFxuICAgIGxpc3RDb21taXRTdGF0dXNlc0ZvclJlZjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3RDb21taXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHNcIl0sXG4gICAgbGlzdENvbnRyaWJ1dG9yczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIl0sXG4gICAgbGlzdEN1c3RvbURlcGxveW1lbnRSdWxlSW50ZWdyYXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveUtleXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30va2V5c1wiXSxcbiAgICBsaXN0RGVwbG95bWVudEJyYW5jaFBvbGljaWVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRTdGF0dXNlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlc1wiLFxuICAgIF0sXG4gICAgbGlzdERlcGxveW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3JlcG9zXCJdLFxuICAgIGxpc3RGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3JlcG9zXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvbnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnNcIl0sXG4gICAgbGlzdEludml0YXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RMYW5ndWFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFuZ3VhZ2VzXCJdLFxuICAgIGxpc3RQYWdlc0J1aWxkczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgbGlzdFB1bGxSZXF1ZXN0c0Fzc29jaWF0ZWRXaXRoQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlQXNzZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L2Fzc2V0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlbGVhc2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCJdLFxuICAgIGxpc3RUYWdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RhZ3NcIl0sXG4gICAgbGlzdFRlYW1zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RlYW1zXCJdLFxuICAgIGxpc3RXZWJob29rRGVsaXZlcmllczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L21lcmdlc1wiXSxcbiAgICBtZXJnZVVwc3RyZWFtOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZS11cHN0cmVhbVwiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3BpbmdzXCJdLFxuICAgIHJlZGVsaXZlcldlYmhvb2tEZWxpdmVyeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgcmVtb3ZlQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja0NvbnRleHRzOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zdGF0dXNfY2hlY2tzL2NvbnRleHRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImNvbnRleHRzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZVN0YXR1c0NoZWNrUHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZVVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICByZW5hbWVCcmFuY2g6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3JlbmFtZVwiXSxcbiAgICByZXBsYWNlQWxsVG9waWNzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RvcGljc1wiXSxcbiAgICByZXF1ZXN0UGFnZXNCdWlsZDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIHNldEFkbWluQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL2VuZm9yY2VfYWRtaW5zXCIsXG4gICAgXSxcbiAgICBzZXRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy9hcHBzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcImFwcHNcIiB9LFxuICAgIF0sXG4gICAgc2V0U3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICBzZXRUZWFtQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdGVhbXNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidGVhbXNcIiB9LFxuICAgIF0sXG4gICAgc2V0VXNlckFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIHRlc3RQdXNoV2ViaG9vazogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L3Rlc3RzXCJdLFxuICAgIHRyYW5zZmVyOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFuc2ZlclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICB1cGRhdGVCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29tbWl0Q29tbWVudDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIHVwZGF0ZUluZm9ybWF0aW9uQWJvdXRQYWdlc1NpdGU6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgdXBkYXRlSW52aXRhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdSdWxlc2V0OiBbXCJQVVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9wdWxsX3JlcXVlc3RfcmV2aWV3c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVsZWFzZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfVwiXSxcbiAgICB1cGRhdGVSZWxlYXNlQXNzZXQ6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVSZXBvUnVsZXNldDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwidXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uXCJdIH0sXG4gICAgXSxcbiAgICB1cGRhdGVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgdXBkYXRlV2ViaG9vazogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICB1cGRhdGVXZWJob29rQ29uZmlnRm9yUmVwbzogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiLFxuICAgIF0sXG4gICAgdXBsb2FkUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHN7P25hbWUsbGFiZWx9XCIsXG4gICAgICB7IGJhc2VVcmw6IFwiaHR0cHM6Ly91cGxvYWRzLmdpdGh1Yi5jb21cIiB9LFxuICAgIF0sXG4gIH0sXG4gIHNlYXJjaDoge1xuICAgIGNvZGU6IFtcIkdFVCAvc2VhcmNoL2NvZGVcIl0sXG4gICAgY29tbWl0czogW1wiR0VUIC9zZWFyY2gvY29tbWl0c1wiXSxcbiAgICBpc3N1ZXNBbmRQdWxsUmVxdWVzdHM6IFtcbiAgICAgIFwiR0VUIC9zZWFyY2gvaXNzdWVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5zZWFyY2guaXNzdWVzQW5kUHVsbFJlcXVlc3RzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvc2VhcmNoL3NlYXJjaCNzZWFyY2gtaXNzdWVzLWFuZC1wdWxsLXJlcXVlc3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGFiZWxzOiBbXCJHRVQgL3NlYXJjaC9sYWJlbHNcIl0sXG4gICAgcmVwb3M6IFtcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiXSxcbiAgICB0b3BpY3M6IFtcIkdFVCAvc2VhcmNoL3RvcGljc1wiXSxcbiAgICB1c2VyczogW1wiR0VUIC9zZWFyY2gvdXNlcnNcIl0sXG4gIH0sXG4gIHNlY3JldFNjYW5uaW5nOiB7XG4gICAgY3JlYXRlUHVzaFByb3RlY3Rpb25CeXBhc3M6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3B1c2gtcHJvdGVjdGlvbi1ieXBhc3Nlc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRTY2FuSGlzdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvc2Nhbi1oaXN0b3J5XCJdLFxuICAgIGxpc3RBbGVydHNGb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHNcIl0sXG4gICAgbGlzdExvY2F0aW9uc0ZvckFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZUFsZXJ0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgfSxcbiAgc2VjdXJpdHlBZHZpc29yaWVzOiB7XG4gICAgY3JlYXRlRm9yazogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9mb3Jrc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUHJpdmF0ZVZ1bG5lcmFiaWxpdHlSZXBvcnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy9yZXBvcnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5Q3ZlUmVxdWVzdDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfS9jdmVcIixcbiAgICBdLFxuICAgIGdldEdsb2JhbEFkdmlzb3J5OiBbXCJHRVQgL2Fkdmlzb3JpZXMve2doc2FfaWR9XCJdLFxuICAgIGdldFJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMve2doc2FfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0R2xvYmFsQWR2aXNvcmllczogW1wiR0VUIC9hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RPcmdSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9vcmdzL3tvcmd9L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgbGlzdFJlcG9zaXRvcnlBZHZpc29yaWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIl0sXG4gICAgdXBkYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIHRlYW1zOiB7XG4gICAgYWRkT3JVcGRhdGVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zSW5PcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNhZGQtb3ItdXBkYXRlLXRlYW0tcHJvamVjdC1wZXJtaXNzaW9uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5OiBbXG4gICAgICBcIlBVVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNhZGQtb3ItdXBkYXRlLXRlYW0tcHJvamVjdC1wZXJtaXNzaW9ucy1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVJlcG9QZXJtaXNzaW9uc0luT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5jaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdEluT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjY2hlY2stdGVhbS1wZXJtaXNzaW9ucy1mb3ItYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3k6IFtcbiAgICAgIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5jaGVja1Blcm1pc3Npb25zRm9yUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdC1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjaGVja1Blcm1pc3Npb25zRm9yUmVwb0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zXCJdLFxuICAgIGNyZWF0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uSW5Pcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUluT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0QnlOYW1lOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gICAgZ2V0RGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXREaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JVc2VySW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBsaXN0Q2hpbGRJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCJdLFxuICAgIGxpc3REaXNjdXNzaW9uQ29tbWVudHNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdERpc2N1c3Npb25zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci90ZWFtc1wiXSxcbiAgICBsaXN0TWVtYmVyc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc1wiXSxcbiAgICBsaXN0UGVuZGluZ0ludml0YXRpb25zSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2ludml0YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0UHJvamVjdHNJbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmxpc3RQcm9qZWN0c0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzTGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNsaXN0LXRlYW0tcHJvamVjdHMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbGlzdFJlcG9zSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvc1wiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdEluT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjcmVtb3ZlLWEtcHJvamVjdC1mcm9tLWEtdGVhbVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIHJlbW92ZVByb2plY3RMZWdhY3k6IFtcbiAgICAgIFwiREVMRVRFIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5yZW1vdmVQcm9qZWN0TGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjcmVtb3ZlLWEtcHJvamVjdC1mcm9tLWEtdGVhbS1sZWdhY3lcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVSZXBvSW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zL3tvd25lcn0ve3JlcG99XCIsXG4gICAgXSxcbiAgICB1cGRhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZUluT3JnOiBbXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfVwiXSxcbiAgfSxcbiAgdXNlcnM6IHtcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGFkZEVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZW1haWxzXCJdLFxuICAgIGFkZFNvY2lhbEFjY291bnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgYmxvY2s6IFtcIlBVVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0Jsb2NrZWQ6IFtcIkdFVCAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja0ZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmcve3RhcmdldF91c2VyfVwiXSxcbiAgICBjaGVja1BlcnNvbklzRm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9ncGdfa2V5c1wiXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2tleXNcIl0sXG4gICAgY3JlYXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgZGVsZXRlRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9lbWFpbHNcIl0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgZGVsZXRlU3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBmb2xsb3c6IFtcIlBVVCAvdXNlci9mb2xsb3dpbmcve3VzZXJuYW1lfVwiXSxcbiAgICBnZXRBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXJcIl0sXG4gICAgZ2V0QnlJZDogW1wiR0VUIC91c2VyL3thY2NvdW50X2lkfVwiXSxcbiAgICBnZXRCeVVzZXJuYW1lOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0Q29udGV4dEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ob3ZlcmNhcmRcIl0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJnZXRHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9ncGdfa2V5cy97Z3BnX2tleV9pZH1cIl0sXG4gICAgZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0UHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIva2V5cy97a2V5X2lkfVwiXSxcbiAgICBnZXRTc2hTaWduaW5nS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXMve3NzaF9zaWduaW5nX2tleV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvdXNlcnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ibG9ja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEJsb2NrZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvYmxvY2tzXCJdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEVtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZW1haWxzXCJdLFxuICAgIGxpc3RGb2xsb3dlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZm9sbG93aW5nXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nXCJdLFxuICAgIGxpc3RGb2xsb3dlcnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2Vyc1wiXSxcbiAgICBsaXN0Rm9sbG93aW5nRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0R3BnS2V5c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZ3BnX2tleXNcIl0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdFB1YmxpY0VtYWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcHVibGljX2VtYWlsc1wiXSxcbiAgICBsaXN0UHVibGljS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIva2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdFB1YmxpY1NzaEtleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNvY2lhbEFjY291bnRzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NvY2lhbF9hY2NvdW50c1wiXSxcbiAgICBsaXN0U3NoU2lnbmluZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NzaF9zaWduaW5nX2tleXNcIl0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwic2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBzZXRQcmltYXJ5RW1haWxWaXNpYmlsaXR5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvZW1haWwvdmlzaWJpbGl0eVwiLFxuICAgIF0sXG4gICAgdW5ibG9jazogW1wiREVMRVRFIC91c2VyL2Jsb2Nrcy97dXNlcm5hbWV9XCJdLFxuICAgIHVuZm9sbG93OiBbXCJERUxFVEUgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgdXBkYXRlQXV0aGVudGljYXRlZDogW1wiUEFUQ0ggL3VzZXJcIl0sXG4gIH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBFbmRwb2ludHM7XG4iLCAiaW1wb3J0IHR5cGUgeyBPY3Rva2l0IH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnRPcHRpb25zLCBSZXF1ZXN0UGFyYW1ldGVycywgUm91dGUgfSBmcm9tIFwiQG9jdG9raXQvdHlwZXNcIjtcbmltcG9ydCBFTkRQT0lOVFMgZnJvbSBcIi4vZ2VuZXJhdGVkL2VuZHBvaW50cy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL21ldGhvZC10eXBlcy5qc1wiO1xuaW1wb3J0IHR5cGUgeyBFbmRwb2ludERlY29yYXRpb25zIH0gZnJvbSBcIi4vdHlwZXMuanNcIjtcblxuLy8gVGhlIGZvbGxvd2luZyBjb2RlIHdhcyByZWZhY3RvcmVkIGluOiBodHRwczovL2dpdGh1Yi5jb20vb2N0b2tpdC9wbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzLmpzL3B1bGwvNjIyXG4vLyB0byBvcHRpbWlzZSB0aGUgcnVudGltZSBwZXJmb3JtYW5jZSBvZiBPY3Rva2l0IGluaXRpYWxpemF0aW9uLlxuLy9cbi8vIFRoaXMgb3B0aW1pemF0aW9uIGludm9sdmVzIHR3byBrZXkgY2hhbmdlczpcbi8vIDEuIFByZS1Db21wdXRhdGlvbjogVGhlIGVuZHBvaW50IG1ldGhvZHMgYXJlIHByZS1jb21wdXRlZCBvbmNlIGF0IG1vZHVsZSBsb2FkXG4vLyAgICB0aW1lIGluc3RlYWQgb2YgZWFjaCBpbnZvY2F0aW9uIG9mIGBlbmRwb2ludHNUb01ldGhvZHMoKWAuXG4vLyAyLiBMYXp5IGluaXRpYWxpemF0aW9uIGFuZCBjYWNoaW5nOiBXZSB1c2UgYSBQcm94eSBmb3IgZWFjaCBzY29wZSB0byBvbmx5XG4vLyAgICBpbml0aWFsaXplIG1ldGhvZHMgdGhhdCBhcmUgYWN0dWFsbHkgY2FsbGVkLiBUaGlzIHJlZHVjZXMgcnVudGltZSBvdmVyaGVhZFxuLy8gICAgYXMgdGhlIGluaXRpYWxpemF0aW9uIGludm9sdmVzIGRlZXAgbWVyZ2luZyBvZiBvYmplY3RzLiBUaGUgaW5pdGlhbGl6ZWRcbi8vICAgIG1ldGhvZHMgYXJlIHRoZW4gY2FjaGVkIGZvciBmdXR1cmUgdXNlLlxuXG5jb25zdCBlbmRwb2ludE1ldGhvZHNNYXAgPSBuZXcgTWFwKCk7XG5mb3IgKGNvbnN0IFtzY29wZSwgZW5kcG9pbnRzXSBvZiBPYmplY3QuZW50cmllcyhFTkRQT0lOVFMpKSB7XG4gIGZvciAoY29uc3QgW21ldGhvZE5hbWUsIGVuZHBvaW50XSBvZiBPYmplY3QuZW50cmllcyhlbmRwb2ludHMpKSB7XG4gICAgY29uc3QgW3JvdXRlLCBkZWZhdWx0cywgZGVjb3JhdGlvbnNdID0gZW5kcG9pbnQ7XG4gICAgY29uc3QgW21ldGhvZCwgdXJsXSA9IHJvdXRlLnNwbGl0KC8gLyk7XG4gICAgY29uc3QgZW5kcG9pbnREZWZhdWx0cyA9IE9iamVjdC5hc3NpZ24oXG4gICAgICB7XG4gICAgICAgIG1ldGhvZCxcbiAgICAgICAgdXJsLFxuICAgICAgfSxcbiAgICAgIGRlZmF1bHRzLFxuICAgICk7XG5cbiAgICBpZiAoIWVuZHBvaW50TWV0aG9kc01hcC5oYXMoc2NvcGUpKSB7XG4gICAgICBlbmRwb2ludE1ldGhvZHNNYXAuc2V0KHNjb3BlLCBuZXcgTWFwKCkpO1xuICAgIH1cblxuICAgIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLnNldChtZXRob2ROYW1lLCB7XG4gICAgICBzY29wZSxcbiAgICAgIG1ldGhvZE5hbWUsXG4gICAgICBlbmRwb2ludERlZmF1bHRzLFxuICAgICAgZGVjb3JhdGlvbnMsXG4gICAgfSk7XG4gIH1cbn1cblxudHlwZSBQcm94eVRhcmdldCA9IHtcbiAgb2N0b2tpdDogT2N0b2tpdDtcbiAgc2NvcGU6IHN0cmluZztcbiAgY2FjaGU6IFJlY29yZDxzdHJpbmcsICguLi5hcmdzOiBhbnlbXSkgPT4gYW55Pjtcbn07XG5cbmNvbnN0IGhhbmRsZXIgPSB7XG4gIGhhcyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuaGFzKG1ldGhvZE5hbWUpO1xuICB9LFxuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZhbHVlOiB0aGlzLmdldCh0YXJnZXQsIG1ldGhvZE5hbWUpLCAvLyBlbnN1cmVzIG1ldGhvZCBpcyBpbiB0aGUgY2FjaGVcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB9O1xuICB9LFxuICBkZWZpbmVQcm9wZXJ0eShcbiAgICB0YXJnZXQ6IFByb3h5VGFyZ2V0LFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IsXG4gICkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQuY2FjaGUsIG1ldGhvZE5hbWUsIGRlc2NyaXB0b3IpO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBkZWxldGVQcm9wZXJ0eSh0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICBkZWxldGUgdGFyZ2V0LmNhY2hlW21ldGhvZE5hbWVdO1xuICAgIHJldHVybiB0cnVlO1xuICB9LFxuICBvd25LZXlzKHsgc2NvcGUgfTogUHJveHlUYXJnZXQpIHtcbiAgICByZXR1cm4gWy4uLmVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmtleXMoKV07XG4gIH0sXG4gIHNldCh0YXJnZXQ6IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcsIHZhbHVlOiBhbnkpIHtcbiAgICByZXR1cm4gKHRhcmdldC5jYWNoZVttZXRob2ROYW1lXSA9IHZhbHVlKTtcbiAgfSxcbiAgZ2V0KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlIH06IFByb3h5VGFyZ2V0LCBtZXRob2ROYW1lOiBzdHJpbmcpIHtcbiAgICBpZiAoY2FjaGVbbWV0aG9kTmFtZV0pIHtcbiAgICAgIHJldHVybiBjYWNoZVttZXRob2ROYW1lXTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXRob2QgPSBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5nZXQobWV0aG9kTmFtZSk7XG4gICAgaWYgKCFtZXRob2QpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3QgeyBlbmRwb2ludERlZmF1bHRzLCBkZWNvcmF0aW9ucyB9ID0gbWV0aG9kO1xuXG4gICAgaWYgKGRlY29yYXRpb25zKSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IGRlY29yYXRlKFxuICAgICAgICBvY3Rva2l0LFxuICAgICAgICBzY29wZSxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgICAgZGVjb3JhdGlvbnMsXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWNoZVttZXRob2ROYW1lXSA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhlbmRwb2ludERlZmF1bHRzKTtcbiAgICB9XG5cbiAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gIH0sXG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBSZXN0RW5kcG9pbnRNZXRob2RzIHtcbiAgY29uc3QgbmV3TWV0aG9kcyA9IHt9IGFzIHsgW2tleTogc3RyaW5nXTogb2JqZWN0IH07XG5cbiAgZm9yIChjb25zdCBzY29wZSBvZiBlbmRwb2ludE1ldGhvZHNNYXAua2V5cygpKSB7XG4gICAgbmV3TWV0aG9kc1tzY29wZV0gPSBuZXcgUHJveHkoeyBvY3Rva2l0LCBzY29wZSwgY2FjaGU6IHt9IH0sIGhhbmRsZXIpO1xuICB9XG5cbiAgcmV0dXJuIG5ld01ldGhvZHMgYXMgUmVzdEVuZHBvaW50TWV0aG9kcztcbn1cblxuZnVuY3Rpb24gZGVjb3JhdGUoXG4gIG9jdG9raXQ6IE9jdG9raXQsXG4gIHNjb3BlOiBzdHJpbmcsXG4gIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgZGVmYXVsdHM6IEVuZHBvaW50T3B0aW9ucyxcbiAgZGVjb3JhdGlvbnM6IEVuZHBvaW50RGVjb3JhdGlvbnMsXG4pIHtcbiAgY29uc3QgcmVxdWVzdFdpdGhEZWZhdWx0cyA9IG9jdG9raXQucmVxdWVzdC5kZWZhdWx0cyhkZWZhdWx0cyk7XG5cbiAgLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbiAgZnVuY3Rpb24gd2l0aERlY29yYXRpb25zKFxuICAgIC4uLmFyZ3M6IFtSb3V0ZSwgUmVxdWVzdFBhcmFtZXRlcnM/XSB8IFtFbmRwb2ludE9wdGlvbnNdXG4gICkge1xuICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgIGxldCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcblxuICAgIC8vIFRoZXJlIGFyZSBjdXJyZW50bHkgbm8gb3RoZXIgZGVjb3JhdGlvbnMgdGhhbiBgLm1hcFRvRGF0YWBcbiAgICBpZiAoZGVjb3JhdGlvbnMubWFwVG9EYXRhKSB7XG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywge1xuICAgICAgICBkYXRhOiBvcHRpb25zW2RlY29yYXRpb25zLm1hcFRvRGF0YV0sXG4gICAgICAgIFtkZWNvcmF0aW9ucy5tYXBUb0RhdGFdOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIHJldHVybiByZXF1ZXN0V2l0aERlZmF1bHRzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkKSB7XG4gICAgICBjb25zdCBbbmV3U2NvcGUsIG5ld01ldGhvZE5hbWVdID0gZGVjb3JhdGlvbnMucmVuYW1lZDtcbiAgICAgIG9jdG9raXQubG9nLndhcm4oXG4gICAgICAgIGBvY3Rva2l0LiR7c2NvcGV9LiR7bWV0aG9kTmFtZX0oKSBoYXMgYmVlbiByZW5hbWVkIHRvIG9jdG9raXQuJHtuZXdTY29wZX0uJHtuZXdNZXRob2ROYW1lfSgpYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChkZWNvcmF0aW9ucy5kZXByZWNhdGVkKSB7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKGRlY29yYXRpb25zLmRlcHJlY2F0ZWQpO1xuICAgIH1cblxuICAgIGlmIChkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycykge1xuICAgICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgICBjb25zdCBvcHRpb25zID0gcmVxdWVzdFdpdGhEZWZhdWx0cy5lbmRwb2ludC5tZXJnZSguLi5hcmdzKTtcblxuICAgICAgZm9yIChjb25zdCBbbmFtZSwgYWxpYXNdIG9mIE9iamVjdC5lbnRyaWVzKFxuICAgICAgICBkZWNvcmF0aW9ucy5yZW5hbWVkUGFyYW1ldGVycyxcbiAgICAgICkpIHtcbiAgICAgICAgaWYgKG5hbWUgaW4gb3B0aW9ucykge1xuICAgICAgICAgIG9jdG9raXQubG9nLndhcm4oXG4gICAgICAgICAgICBgXCIke25hbWV9XCIgcGFyYW1ldGVyIGlzIGRlcHJlY2F0ZWQgZm9yIFwib2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KClcIi4gVXNlIFwiJHthbGlhc31cIiBpbnN0ZWFkYCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGlmICghKGFsaWFzIGluIG9wdGlvbnMpKSB7XG4gICAgICAgICAgICBvcHRpb25zW2FsaWFzXSA9IG9wdGlvbnNbbmFtZV07XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlbGV0ZSBvcHRpb25zW25hbWVdO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyguLi5hcmdzKTtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbih3aXRoRGVjb3JhdGlvbnMsIHJlcXVlc3RXaXRoRGVmYXVsdHMpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5cbmV4cG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kVHlwZXMgfSBmcm9tIFwiLi9nZW5lcmF0ZWQvcGFyYW1ldGVycy1hbmQtcmVzcG9uc2UtdHlwZXMuanNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5pbXBvcnQgdHlwZSB7IEFwaSB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBlbmRwb2ludHNUb01ldGhvZHMgfSBmcm9tIFwiLi9lbmRwb2ludHMtdG8tbWV0aG9kcy5qc1wiO1xuXG4vLyBFeHBvcnQgdGhlIHR5cGUgZm9yIGRvd25zdHJlYW0gdXNlcnMgaW4gb3JkZXIgdG8gZml4IGEgVHlwZVNjcmlwdCBlcnJvclxuLy8gVGhlIGluZmVycmVkIHR5cGUgb2YgJ09jdG9raXQnIGNhbm5vdCBiZSBuYW1lZCB3aXRob3V0IGEgcmVmZXJlbmNlIHRvICcuLi9ub2RlX21vZHVsZXMvQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy9kaXN0LXR5cGVzL3R5cGVzLmpzJy4gVGhpcyBpcyBsaWtlbHkgbm90IHBvcnRhYmxlLiBBIHR5cGUgYW5ub3RhdGlvbiBpcyBuZWNlc3NhcnkuXG5leHBvcnQgdHlwZSB7IEFwaSB9O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIHJlc3Q6IGFwaSxcbiAgfTtcbn1cbnJlc3RFbmRwb2ludE1ldGhvZHMuVkVSU0lPTiA9IFZFUlNJT047XG5cbmV4cG9ydCBmdW5jdGlvbiBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzKG9jdG9raXQ6IE9jdG9raXQpOiBBcGlbXCJyZXN0XCJdICYgQXBpIHtcbiAgY29uc3QgYXBpID0gZW5kcG9pbnRzVG9NZXRob2RzKG9jdG9raXQpO1xuICByZXR1cm4ge1xuICAgIC4uLmFwaSxcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5sZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuIiwgImNvbnN0IFZFUlNJT04gPSBcIjIxLjEuMVwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBPY3Rva2l0IGFzIENvcmUgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZyB9IGZyb20gXCJAb2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2dcIjtcbmltcG9ydCB7XG4gIHBhZ2luYXRlUmVzdFxufSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXBhZ2luYXRlLXJlc3RcIjtcbmltcG9ydCB7IGxlZ2FjeVJlc3RFbmRwb2ludE1ldGhvZHMgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc1wiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IE9jdG9raXQgPSBDb3JlLnBsdWdpbihyZXF1ZXN0TG9nLCBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzLCBwYWdpbmF0ZVJlc3QpLmRlZmF1bHRzKFxuICB7XG4gICAgdXNlckFnZW50OiBgb2N0b2tpdC1yZXN0LmpzLyR7VkVSU0lPTn1gXG4gIH1cbik7XG5leHBvcnQge1xuICBPY3Rva2l0XG59O1xuIiwgImV4cG9ydCB7IHBhcnNlQXJnc1N0cmluZ1RvQXJndiB9O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGFyc2VBcmdzU3RyaW5nVG9Bcmd2KHZhbHVlLCBlbnYsIGZpbGUpIHtcbiAgICAvLyAoW15cXHMnXCJdKFteXFxzJ1wiXSooWydcIl0pKFteXFwzXSo/KVxcMykrW15cXHMnXCJdKikgTWF0Y2hlcyBuZXN0ZWQgcXVvdGVzIHVudGlsIHRoZSBmaXJzdCBzcGFjZSBvdXRzaWRlIG9mIHF1b3Rlc1xuICAgIC8vIFteXFxzJ1wiXSsgb3IgTWF0Y2ggaWYgbm90IGEgc3BhY2UgJyBvciBcIlxuICAgIC8vIChbJ1wiXSkoW15cXDVdKj8pXFw1IG9yIE1hdGNoIFwicXVvdGVkIHRleHRcIiB3aXRob3V0IHF1b3Rlc1xuICAgIC8vIGBcXDNgIGFuZCBgXFw1YCBhcmUgYSBiYWNrcmVmZXJlbmNlIHRvIHRoZSBxdW90ZSBzdHlsZSAoJyBvciBcIikgY2FwdHVyZWRcbiAgICB2YXIgbXlSZWdleHAgPSAvKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopfFteXFxzJ1wiXSt8KFsnXCJdKShbXlxcNV0qPylcXDUvZ2k7XG4gICAgdmFyIG15U3RyaW5nID0gdmFsdWU7XG4gICAgdmFyIG15QXJyYXkgPSBbXTtcbiAgICBpZiAoZW52KSB7XG4gICAgICAgIG15QXJyYXkucHVzaChlbnYpO1xuICAgIH1cbiAgICBpZiAoZmlsZSkge1xuICAgICAgICBteUFycmF5LnB1c2goZmlsZSk7XG4gICAgfVxuICAgIHZhciBtYXRjaDtcbiAgICBkbyB7XG4gICAgICAgIC8vIEVhY2ggY2FsbCB0byBleGVjIHJldHVybnMgdGhlIG5leHQgcmVnZXggbWF0Y2ggYXMgYW4gYXJyYXlcbiAgICAgICAgbWF0Y2ggPSBteVJlZ2V4cC5leGVjKG15U3RyaW5nKTtcbiAgICAgICAgaWYgKG1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAvLyBJbmRleCAxIGluIHRoZSBhcnJheSBpcyB0aGUgY2FwdHVyZWQgZ3JvdXAgaWYgaXQgZXhpc3RzXG4gICAgICAgICAgICAvLyBJbmRleCAwIGlzIHRoZSBtYXRjaGVkIHRleHQsIHdoaWNoIHdlIHVzZSBpZiBubyBjYXB0dXJlZCBncm91cCBleGlzdHNcbiAgICAgICAgICAgIG15QXJyYXkucHVzaChmaXJzdFN0cmluZyhtYXRjaFsxXSwgbWF0Y2hbNl0sIG1hdGNoWzBdKSk7XG4gICAgICAgIH1cbiAgICB9IHdoaWxlIChtYXRjaCAhPT0gbnVsbCk7XG4gICAgcmV0dXJuIG15QXJyYXk7XG59XG4vLyBBY2NlcHRzIGFueSBudW1iZXIgb2YgYXJndW1lbnRzLCBhbmQgcmV0dXJucyB0aGUgZmlyc3Qgb25lIHRoYXQgaXMgYSBzdHJpbmdcbi8vIChldmVuIGFuIGVtcHR5IHN0cmluZylcbmZ1bmN0aW9uIGZpcnN0U3RyaW5nKCkge1xuICAgIHZhciBhcmdzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3NbaV07XG4gICAgICAgIGlmICh0eXBlb2YgYXJnID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gYXJnO1xuICAgICAgICB9XG4gICAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw0RUFBQUEsVUFBQTtBQUdBLFFBQU1DLGtCQUFOLGNBQTZCLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU9qQyxZQUFZLFVBQVUsTUFBTSxTQUFTO0FBQ25DLGNBQU0sT0FBTztBQUViLGNBQU0sa0JBQWtCLE1BQU0sS0FBSyxXQUFXO0FBQzlDLGFBQUssT0FBTyxLQUFLLFlBQVk7QUFDN0IsYUFBSyxPQUFPO0FBQ1osYUFBSyxXQUFXO0FBQ2hCLGFBQUssY0FBYztBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUtBLFFBQU1DLHdCQUFOLGNBQW1DRCxnQkFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLaEQsWUFBWSxTQUFTO0FBQ25CLGNBQU0sR0FBRyw2QkFBNkIsT0FBTztBQUU3QyxjQUFNLGtCQUFrQixNQUFNLEtBQUssV0FBVztBQUM5QyxhQUFLLE9BQU8sS0FBSyxZQUFZO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBRUEsSUFBQUQsU0FBUSxpQkFBaUJDO0FBQ3pCLElBQUFELFNBQVEsdUJBQXVCRTtBQUFBO0FBQUE7OztBQ3RDL0I7QUFBQSwrRUFBQUMsVUFBQTtBQUFBLFFBQU0sRUFBRSxzQkFBQUMsc0JBQXFCLElBQUk7QUFFakMsUUFBTUMsWUFBTixNQUFlO0FBQUE7QUFBQTtB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O0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBRUEsSUFBQUQsUUFBTyxVQUFVO0FBQUEsTUFDZjtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBLHNCQUFBQztBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsSUFDRjtBQUFBO0FBQUE7OztBQ3JPQTtBQUFBLCtFQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFHQSxRQUFNLDZCQUE2QixDQUFDO0FBR3BDLFFBQU0sdUJBQXVCO0FBQUEsTUFDM0I7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFBQSxNQUNBO0FBQUEsTUFDQTtBQUFBLE1BQ0E7QUFB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QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEs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QUFBO0FBQUE7QUFFQSxRQUFNLFVBQVU7QUFFaEIsUUFBTSxNQUFNO0FBQUEsTUFDVjtBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEs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LEdBQUcsSUFBSTs7TUFFZixDQUFDO0FBRUQsYUFBTztJQUNUO0FBWEEsSUFBQUksU0FBQSxZQUFBOzs7Ozs7Ozs7O0FDSkEsUUFBQSxVQUFBO0FBTUEsUUFBWTtBQUFaLEtBQUEsU0FBWUMsUUFBSztBQUNmLE1BQUFBLE9BQUFBLE9BQUEsSUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsVUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsUUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsYUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsMkJBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLG1CQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxnQkFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsYUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsa0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGlCQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxzQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsd0JBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLG9CQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxnQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsbUJBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLDJCQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsT0FBQUEsT0FBQSxrQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEscUJBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLHFCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxpQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsbUJBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxPQUFBQSxPQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGdCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxtQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLE9BQUFBLE9BQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtJQUNGLEdBN0JZLFFBQUFDLFNBQUEsVUFBQUEsU0FBQSxRQUFLLENBQUEsRUFBQTtBQStCakIsUUFBWTtBQUFaLEtBQUEsU0FBWUMsT0FBSTtBQUNkLE1BQUFBLE1BQUFBLE1BQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE1BQUFBLE1BQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE1BQUFBLE1BQUEsVUFBQSxJQUFBLENBQUEsSUFBQTtJQUNGLEdBSlksT0FBQUQsU0FBQSxTQUFBQSxTQUFBLE9BQUksQ0FBQSxFQUFBO0FBTWhCLFFBQVk7QUFBWixLQUFBLFNBQVlFLFFBQUs7QUFDZixNQUFBQSxPQUFBQSxPQUFBLHVCQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxrQkFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsb0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLFNBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLFNBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGdCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBRUEsTUFBQUEsT0FBQUEsT0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtJQUNGLEdBWFksUUFBQUYsU0FBQSxVQUFBQSxTQUFBLFFBQUssQ0FBQSxFQUFBO0FBYWpCLFFBQVk7QUFBWixLQUFBLFNBQVlHLGdCQUFhO0FBQ3ZCLE1BQUFBLGVBQUFBLGVBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLGVBQUFBLGVBQUEsZ0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxlQUFBQSxlQUFBLFlBQUEsSUFBQSxDQUFBLElBQUE7SUFDRixHQUpZLGdCQUFBSCxTQUFBLGtCQUFBQSxTQUFBLGdCQUFhLENBQUEsRUFBQTtBQU16QixRQUFZO0FBQVosS0FBQSxTQUFZSSxVQUFPO0FBQ2pCLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsYUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtJQUNGLEdBMURZLFVBQUFKLFNBQUEsWUFBQUEsU0FBQSxVQUFPLENBQUEsRUFBQTtBQTRETixJQUFBQSxTQUFBLGVBQWU7TUFDMUIsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUSxVQUFVO01BQ2xCLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTs7TUFHUixRQUFR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LEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFB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LFNBQVlJLFlBQVM7QUFDbkIsTUFBQUEsV0FBQUEsV0FBQSxJQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxpQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsa0JBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGFBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGFBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLG1CQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsWUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsY0FBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsaUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFdBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGtCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxlQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSw2QkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsZ0JBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLE1BQUEsSUFBQSxHQUFBLElB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WSxPQUE4QjtBQUNqRCxTQUFPLE1BQU0sS0FBSyxFQUFFLFVBQVUsSUFBSSxPQUFPO0FBQzNDO0FBRUEsU0FBUyxhQUFhLE9BQXdCO0FBQzVDLFFBQU0sYUFBYSxNQUFNLEtBQUssRUFBRSxZQUFZO0FBQzVDLE1BQUksQ0FBQyxRQUFRLEtBQUssT0FBTyxHQUFHLEVBQUUsU0FBUyxVQUFVLEdBQUc7QUFDbEQsV0FBTztBQUFBLEVBQ1Q7QUFDQSxNQUFJLENBQUMsU0FBUyxLQUFLLE1BQU0sR0FBRyxFQUFFLFNBQVMsVUFBVSxHQUFHO0FBQ2xELFdBQU87QUFBQSxFQUNUO0FBQ0EsUUFBTSxJQUFJLE1BQU0sMEJBQTBCLEtBQUssRUFBRTtBQUNuRDtBQUVBLEtBQUs7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJBcmd1bWVudCIsICJleHBvcnRzIiwgIkhlbHAiLCAiY21kIiwgImV4cG9ydHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiT3B0aW9uIiwgInN0ciIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJmcyIsICJwcm9jZXNzIiwgIkFyZ3VtZW50IiwgIkNvbW1hbmRlckVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgIkNvbW1hbmQiLCAiaG9vayIsICJvcHRpb24iLCAiZXhwb3J0cyIsICJBcmd1bWVudCIsICJDb21tYW5kIiwgIkNvbW1hbmRlckVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgImV4cG9ydHMiLCAiQ29tbWFuZCIsICJleHBvcnRzIiwgImZzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9wdGlvbnMiLCAic29ja2V0IiwgInJlcXVpcmVfdHVubmVsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkJsb2IiLCAicGF0aCIsICJpZHgiLCAic3RyZWFtIiwgImVyciIsICJoYW5kbGVyIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInN0cnVjdHVyZWRDbG9uZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGVyZm9ybWFuY2UiLCAicmVxdWVzdCIsICJpdGVyYXRvciIsICJraW5kIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImF0b2IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImVudHJ5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJCbG9iIiwgImNodW5rIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBhdGgiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImVyciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInNlc3Npb24iLCAib25Db25uZWN0VGltZW91dCIsICJleHBvcnRzIiwgIkVSUk9SIiwgImV4cG9ydHMiLCAiVFlQRSIsICJGTEFHUyIsICJMRU5JRU5UX0ZMQUdTIiwgIk1FVEhPRFMiLCAiRklOSVNIIiwgIkhFQURFUl9TVEFURSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjb25uZWN0IiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJzb2NrZXQiLCAicGF0aCIsICJoZWFkZXJzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJXZWFrUmVmIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJub29wIiwgImNvbnN1bWUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiY2FsbGJhY2siLCAicmVzIiwgIm9wYXF1ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibW9ja0Rpc3BhdGNoIiwgInBhdGgiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInN0YXR1c0NvZGUiLCAiZGF0YSIsICJyZXNwb25zZU9wdGlvbnMiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJVUkwiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAib3B0cyIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImVyciIsICJyZXF1aXJlX2dsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJyZXF1aXJlX3JlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWVzdCIsICJhYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAicmVxdWVzdCIsICJnbG9iYWxUaGlzIiwgIml0ZXJhdG9yIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInR5cGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJIdHRwQ29kZXMiLCAiZXhwb3J0cyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAidXNlckFnZW50IiwgImluZm8iLCAiaGFuZGxlciIsICJsb3dlcmNhc2VLZXlzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJmcyIsICJwYXRoIiwgImV4cG9ydHMiLCAiX2EiLCAicGF0aCIsICJleHBvcnRzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJFeGl0Q29kZSIsICJleHBvcnRzIiwgInNldE91dHB1dCIsICJpbmZvIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIk51bGxPYmplY3QiLCAicGFyc2UiLCAic2FmZVBhcnNlIiwgImNvbW1hbmRlciIsICJwcm9ncmFtIiwgInBhdGgiLCAicGF0aCIsICJmcyIsICJjb3JlIiwgIm5hbWUiLCAibWV0aG9kIiwgImhvb2siLCAiaG9vayIsICJWRVJTSU9OIiwgImlzUGxhaW5PYmplY3QiLCAid2l0aERlZmF1bHRzIiwgIlZFUlNJT04iLCAid2l0aERlZmF1bHRzIiwgInJlcXVlc3QiLCAiZW5kcG9pbnQiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgImhvb2siLCAiYXV0aCIsICJWRVJTSU9OIiwgInJlcXVlc3QiLCAicGF0aCIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgImVuZHBvaW50IiwgIm9wdGlvbnMiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIk9jdG9raXQiLCAiVkVSU0lPTiIsICJPY3Rva2l0IiwgInByb2dyYW0iXQp9Cg== diff --git a/src/main.ts b/src/main.ts index cde79fe..d07aa94 100644 --- a/src/main.ts +++ b/src/main.ts @@ -70,6 +70,10 @@ export async function main() { "--output-file ", "Path where the final message from `codex exec` will be written." ) + .requiredOption( + "--output-schema-file ", + "Path to a schema file to pass to `codex exec --output-schema`." + ) .requiredOption( "--safety-strategy ", "Safety strategy to use. One of 'drop_sudo', 'read_only', 'unprivileged_user', or 'unsafe'." @@ -87,6 +91,7 @@ export async function main() { proxyPort: number; extraArgs: Array; outputFile: string; + outputSchemaFile: string; safetyStrategy: string; codexUser: string; }) => { @@ -98,6 +103,7 @@ export async function main() { proxyPort, extraArgs, outputFile, + outputSchemaFile, safetyStrategy, codexUser, } = options; @@ -124,6 +130,7 @@ export async function main() { proxyPort, extraArgs, explicitOutputFile: emptyAsNull(outputFile), + outputSchemaFile: emptyAsNull(outputSchemaFile), safetyStrategy: toSafetyStrategy(safetyStrategy), codexUser: emptyAsNull(codexUser), }); diff --git a/src/runCodexExec.ts b/src/runCodexExec.ts index d9f02b2..2ebbd33 100644 --- a/src/runCodexExec.ts +++ b/src/runCodexExec.ts @@ -26,6 +26,7 @@ export async function runCodexExec({ proxyPort, extraArgs, explicitOutputFile, + outputSchemaFile, safetyStrategy, codexUser, }: { @@ -35,6 +36,7 @@ export async function runCodexExec({ proxyPort: number; extraArgs: Array; explicitOutputFile: string | null; + outputSchemaFile: string | null; safetyStrategy: SafetyStrategy; codexUser: string | null; }): Promise { @@ -84,6 +86,11 @@ export async function runCodexExec({ "--output-last-message", outputFile.file ); + + if (outputSchemaFile != null) { + command.push("--output-schema", outputSchemaFile); + } + command.push(...extraArgs); // Note that if profiles expand to support their own sandbox policies, a