sakuga 0.0.3 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/sakuga CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import "../dist/cli.js";
3
+ import "../dist/index.js";
package/dist/index.js CHANGED
@@ -96,7 +96,7 @@ var resolveTheme = Effect2.fn(function* resolveTheme2(theme) {
96
96
  import { availableParallelism } from "node:os";
97
97
  import * as FileSystem from "@effect/platform/FileSystem";
98
98
  import { createCanvas } from "@napi-rs/canvas";
99
- import { Effect as Effect5, Stream as Stream2 } from "effect";
99
+ import { Effect as Effect5, Exit, Stream as Stream2 } from "effect";
100
100
 
101
101
  // src/lib/ffmpeg.ts
102
102
  import { Command as ShellCommand } from "@effect/platform";
@@ -822,7 +822,7 @@ var renderVideo = Effect5.fn(function* renderVideo2(outputPath, theme, codeBlock
822
822
  format,
823
823
  outputPath,
824
824
  stage: "init"
825
- }))), (process3) => process3.kill("SIGTERM").pipe(Effect5.orDie));
825
+ }))), (process3, exit) => Effect5.ignore(Exit.isFailure(exit) ? process3.kill("SIGTERM") : Effect5.whenEffect(process3.kill("SIGTERM"), process3.isRunning)));
826
826
  const exitCode = yield* process2.exitCode;
827
827
  if (exitCode === null || Number(exitCode) !== 0) {
828
828
  return yield* new FfmpegRenderFailed({
@@ -995,7 +995,7 @@ var render_default = Command.make("render", {
995
995
  }))));
996
996
 
997
997
  // src/index.ts
998
- var version = await "0.0.3";
998
+ var version = await "0.0.4";
999
999
  var main = Command2.make("sakuga").pipe(Command2.withDescription("Create code animation videos from Markdown."), Command2.withSubcommands([render_default]));
1000
1000
  var program = Command2.run(main, { name: "sakuga", version });
1001
1001
  program(process.argv).pipe(Effect7.catchTags({
@@ -1004,5 +1004,5 @@ program(process.argv).pipe(Effect7.catchTags({
1004
1004
  ` + ` Flags cannot be clustered. Use separate flags instead.`)
1005
1005
  }), Effect7.provide(NodeContext.layer), NodeRuntime.runMain);
1006
1006
 
1007
- //# debugId=1C1251AD4044B63664756E2164756E21
1008
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21tYW5kcy9yZW5kZXIudHMiLCAic3JjL2xpYi9lcnJvcnMudHMiLCAic3JjL2xpYi9tYXJrZG93bi50cyIsICJzcmMvbGliL3RoZW1lLnRzIiwgInNyYy9saWIvdmlkZW8udHMiLCAic3JjL2xpYi9mZm1wZWcudHMiLCAic3JjL2xpYi9yZW5kZXIudHMiLCAic3JjL2xpYi9jb2xvci50cyIsICJzcmMvbGliL3NjZW5lLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9saWIvdGV4dC50cyIsICJzcmMvbGliL3Rva2VuLnRzIiwgInNyYy9saWIvdHJhbnNpdGlvbi50cyIsICJzcmMvY29tbWFuZHMvb3B0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIkBlZmZlY3QvY2xpXCJcbmltcG9ydCB7IE5vZGVDb250ZXh0LCBOb2RlUnVudGltZSB9IGZyb20gXCJAZWZmZWN0L3BsYXRmb3JtLW5vZGVcIlxuaW1wb3J0IHsgQ29uc29sZSwgRWZmZWN0IH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgcmVuZGVyIGZyb20gXCIuL2NvbW1hbmRzL3JlbmRlclwiXG5pbXBvcnQgeyByZWFkVmVyc2lvbiB9IGZyb20gXCIuL2NvbW1hbmRzL3ZlcnNpb25cIiB3aXRoIHsgdHlwZTogXCJtYWNyb1wiIH1cblxuY29uc3QgdmVyc2lvbiA9IGF3YWl0IHJlYWRWZXJzaW9uKClcblxuY29uc3QgbWFpbiA9IENvbW1hbmQubWFrZShcInNha3VnYVwiKS5waXBlKFxuICBDb21tYW5kLndpdGhEZXNjcmlwdGlvbihcIkNyZWF0ZSBjb2RlIGFuaW1hdGlvbiB2aWRlb3MgZnJvbSBNYXJrZG93bi5cIiksXG4gIENvbW1hbmQud2l0aFN1YmNvbW1hbmRzKFtyZW5kZXJdKVxuKVxuXG5jb25zdCBwcm9ncmFtID0gQ29tbWFuZC5ydW4obWFpbiwgeyBuYW1lOiBcInNha3VnYVwiLCB2ZXJzaW9uIH0pXG5cbnByb2dyYW0ocHJvY2Vzcy5hcmd2KS5waXBlKFxuICBFZmZlY3QuY2F0Y2hUYWdzKHtcbiAgICBNdWx0aXBsZVZhbHVlc0RldGVjdGVkOiAoZXJyb3IpID0+XG4gICAgICBDb25zb2xlLmVycm9yKGBNdWx0aXBsZSB2YWx1ZXMgZGV0ZWN0ZWQ6ICR7ZXJyb3IudmFsdWVzLmpvaW4oXCIsIFwiKX1gKSxcbiAgICBVbmNsdXN0ZXJlZEZsYWc6IChlcnJvcikgPT5cbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZsYWcgZm9ybWF0OiBcIiR7ZXJyb3IudW5jbHVzdGVyZWQuam9pbihcIlwiKX1cIi5cXG5gICtcbiAgICAgICAgICBgICBGbGFncyBjYW5ub3QgYmUgY2x1c3RlcmVkLiBVc2Ugc2VwYXJhdGUgZmxhZ3MgaW5zdGVhZC5gXG4gICAgICApLFxuICB9KSxcbiAgRWZmZWN0LnByb3ZpZGUoTm9kZUNvbnRleHQubGF5ZXIpLFxuICBOb2RlUnVudGltZS5ydW5NYWluXG4pXG4iLAogICAgImltcG9ydCB7IEFyZ3MsIENvbW1hbmQgfSBmcm9tIFwiQGVmZmVjdC9jbGlcIlxuaW1wb3J0ICogYXMgRmlsZVN5c3RlbSBmcm9tIFwiQGVmZmVjdC9wbGF0Zm9ybS9GaWxlU3lzdGVtXCJcbmltcG9ydCAqIGFzIFBhdGggZnJvbSBcIkBlZmZlY3QvcGxhdGZvcm0vUGF0aFwiXG5pbXBvcnQgeyBDb25zb2xlLCBFZmZlY3QsIE9wdGlvbiB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHR5cGUgeyBSZW5kZXJDb25maWcgfSBmcm9tIFwiLi4vbGliL3R5cGVzXCJcbmltcG9ydCB7IEludmFsaWRUcmFuc2l0aW9uRHVyYXRpb24sIE5vQ29kZUJsb2Nrc0ZvdW5kIH0gZnJvbSBcIi4uL2xpYi9lcnJvcnNcIlxuaW1wb3J0IHsgcGFyc2VNYXJrZG93bkNvZGVCbG9ja3MgfSBmcm9tIFwiLi4vbGliL21hcmtkb3duXCJcbmltcG9ydCB7IHJlc29sdmVUaGVtZSB9IGZyb20gXCIuLi9saWIvdGhlbWVcIlxuaW1wb3J0IHsgcmVuZGVyVmlkZW8gfSBmcm9tIFwiLi4vbGliL3ZpZGVvXCJcbmltcG9ydCB7XG4gIGJhY2tncm91bmQsXG4gIGJsb2NrRHVyYXRpb24sXG4gIGZvbnRGYW1pbHksXG4gIGZvbnRTaXplLFxuICBmb3JlZ3JvdW5kLFxuICBmb3JtYXQsXG4gIGZwcyxcbiAgaGVpZ2h0LFxuICBsaW5lSGVpZ2h0LFxuICBvdXRwdXQsXG4gIHBhZGRpbmcsXG4gIHRhYlJlcGxhY2VtZW50LFxuICB0aGVtZSxcbiAgdHJhbnNpdGlvbkRyaWZ0LFxuICB0cmFuc2l0aW9uRHVyYXRpb25NcyxcbiAgd2lkdGgsXG59IGZyb20gXCIuL29wdGlvbnNcIlxuXG5jb25zdCBmaWxlID0gQXJncy5maWxlKHsgZXhpc3RzOiBcInllc1wiLCBuYW1lOiBcImlucHV0XCIgfSkucGlwZShcbiAgQXJncy53aXRoRGVzY3JpcHRpb24oXCJNYXJrZG93biBmaWxlIHRvIHJlbmRlclwiKVxuKVxuXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kLm1ha2UoXCJyZW5kZXJcIiwge1xuICBiYWNrZ3JvdW5kLFxuICBibG9ja0R1cmF0aW9uLFxuICBmaWxlLFxuICBmb250RmFtaWx5LFxuICBmb250U2l6ZSxcbiAgZm9yZWdyb3VuZCxcbiAgZm9ybWF0LFxuICBmcHMsXG4gIGhlaWdodCxcbiAgbGluZUhlaWdodCxcbiAgb3V0cHV0LFxuICBwYWRkaW5nLFxuICB0YWJSZXBsYWNlbWVudCxcbiAgdGhlbWUsXG4gIHRyYW5zaXRpb25EcmlmdCxcbiAgdHJhbnNpdGlvbkR1cmF0aW9uTXMsXG4gIHdpZHRoLFxufSkucGlwZShcbiAgQ29tbWFuZC53aXRoRGVzY3JpcHRpb24oXCJSZW5kZXIgYSB2aWRlbyBmcm9tIGNvZGUgYmxvY2tzIGluIGEgTWFya2Rvd24gZmlsZVwiKSxcbiAgQ29tbWFuZC53aXRoSGFuZGxlcihcbiAgICAoe1xuICAgICAgYmFja2dyb3VuZCxcbiAgICAgIGJsb2NrRHVyYXRpb24sXG4gICAgICBmaWxlLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRTaXplLFxuICAgICAgZm9yZWdyb3VuZCxcbiAgICAgIGZwcyxcbiAgICAgIGhlaWdodCxcbiAgICAgIGxpbmVIZWlnaHQsXG4gICAgICBvdXRwdXQsXG4gICAgICBwYWRkaW5nLFxuICAgICAgdGFiUmVwbGFjZW1lbnQsXG4gICAgICB0aGVtZSxcbiAgICAgIHRyYW5zaXRpb25EcmlmdCxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbk1zLFxuICAgICAgd2lkdGgsXG4gICAgICBmb3JtYXQsXG4gICAgfSkgPT5cbiAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmlsZVN5c3RlbSA9IHlpZWxkKiBGaWxlU3lzdGVtLkZpbGVTeXN0ZW1cbiAgICAgICAgY29uc3QgcGF0aCA9IHlpZWxkKiBQYXRoLlBhdGhcblxuICAgICAgICBjb25zdCBtYXJrZG93biA9IHlpZWxkKiBmaWxlU3lzdGVtLnJlYWRGaWxlU3RyaW5nKGZpbGUpXG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IHlpZWxkKiBwYXJzZU1hcmtkb3duQ29kZUJsb2NrcyhtYXJrZG93bilcblxuICAgICAgICBpZiAoYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB5aWVsZCogbmV3IE5vQ29kZUJsb2Nrc0ZvdW5kKHsgcGF0aDogZmlsZSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYW5zaXRpb25EdXJhdGlvbk1zIDw9IDApIHtcbiAgICAgICAgICByZXR1cm4geWllbGQqIG5ldyBJbnZhbGlkVHJhbnNpdGlvbkR1cmF0aW9uKHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25NcyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkVGhlbWUgPSB5aWVsZCogcmVzb2x2ZVRoZW1lKHRoZW1lKVxuICAgICAgICBjb25zdCBvdXRwdXRQYXRoID0gT3B0aW9uLm1hdGNoKG91dHB1dCwge1xuICAgICAgICAgIG9uTm9uZTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlKVxuICAgICAgICAgICAgcmV0dXJuIHBhdGguam9pbihwYXJzZWQuZGlyLCBgJHtwYXJzZWQubmFtZX0uJHtmb3JtYXR9YClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU29tZTogKHZhbHVlKSA9PiB2YWx1ZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyA9IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgIGJsb2NrRHVyYXRpb24sXG4gICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICBmb3JlZ3JvdW5kLFxuICAgICAgICAgIGZwcyxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgbGluZUhlaWdodCxcbiAgICAgICAgICBwYWRkaW5nLFxuICAgICAgICAgIHRhYlJlcGxhY2VtZW50LFxuICAgICAgICAgIHRyYW5zaXRpb25EcmlmdCxcbiAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb25NcyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgfVxuXG4gICAgICAgIHlpZWxkKiBDb25zb2xlLmxvZyhgUmVuZGVyaW5nICR7YmxvY2tzLmxlbmd0aH0gY29kZSBibG9ja3MgdG8gJHtvdXRwdXRQYXRofS4uLmApXG4gICAgICAgIHlpZWxkKiByZW5kZXJWaWRlbyhvdXRwdXRQYXRoLCByZXNvbHZlZFRoZW1lLCBibG9ja3MsIHJlbmRlckNvbmZpZywgeyBmb3JtYXQgfSlcbiAgICAgICAgeWllbGQqIENvbnNvbGUubG9nKGBWaWRlbyBjcmVhdGVkIGF0ICR7b3V0cHV0UGF0aH1gKVxuICAgICAgfSkucGlwZShcbiAgICAgICAgRWZmZWN0LmNhdGNoVGFncyh7XG4gICAgICAgICAgQmFkQXJndW1lbnQ6IChlcnJvcikgPT4gQ29uc29sZS5lcnJvcihgSW52YWxpZCBmaWxlIGFyZ3VtZW50OiAke2Vycm9yLm1lc3NhZ2V9YCksXG4gICAgICAgICAgRmZtcGVnUmVuZGVyRmFpbGVkOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWdlTWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgZmluaXNoOiBcImZpbmFsaXppbmcgdGhlIHZpZGVvIGZpbGVcIixcbiAgICAgICAgICAgICAgaW5pdDogXCJzdGFydGluZyB0aGUgRkZtcGVnIHByb2Nlc3NcIixcbiAgICAgICAgICAgICAgc3RyZWFtOiBcIndyaXRpbmcgdmlkZW8gZnJhbWVzXCIsXG4gICAgICAgICAgICB9W2Vycm9yLnN0YWdlXVxuXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBGRm1wZWcgZmFpbGVkIHdoaWxlICR7c3RhZ2VNZXNzYWdlfS5cXG5gXG4gICAgICAgICAgICBtZXNzYWdlICs9IGAgIE91dHB1dDogJHtlcnJvci5vdXRwdXRQYXRofVxcbmBcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCAgRm9ybWF0OiAke2Vycm9yLmZvcm1hdH1gXG5cbiAgICAgICAgICAgIGlmIChlcnJvci5leGl0Q29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgKz0gYFxcbiAgRXhpdCBjb2RlOiAke2Vycm9yLmV4aXRDb2RlfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvci5zaWduYWwpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSArPSBgXFxuICBTaWduYWw6ICR7ZXJyb3Iuc2lnbmFsfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIENvbnNvbGUuZXJyb3IobWVzc2FnZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIEludmFsaWRUcmFuc2l0aW9uRHVyYXRpb246IChlcnJvcikgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBJbnZhbGlkIHRyYW5zaXRpb24gZHVyYXRpb246ICR7ZXJyb3IuZHVyYXRpb259bXMuXFxuYCArXG4gICAgICAgICAgICAgICAgYCAgTWluaW11bSBhbGxvd2VkOiAke2Vycm9yLm1pbmltdW19bXNgXG4gICAgICAgICAgICApLFxuICAgICAgICAgIE1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZTogKGVycm9yKSA9PlxuICAgICAgICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYE1pc3NpbmcgbGFuZ3VhZ2UgaW4gY29kZSBibG9jay5cXG5gICtcbiAgICAgICAgICAgICAgICBgICAke2Vycm9yLmRldGFpbCA/PyBcIkV2ZXJ5IGZlbmNlZCBjb2RlIGJsb2NrIG5lZWRzIGEgbGFuZ3VhZ2UgKGUuZy4sIGBgYHR5cGVzY3JpcHQpLlwifVxcbmAgK1xuICAgICAgICAgICAgICAgIGAgIFNlZSBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOiBodHRwczovL3NoaWtpLnN0eWxlL2xhbmd1YWdlc2BcbiAgICAgICAgICAgICksXG4gICAgICAgICAgTWlzc2luZ0ZmbXBlZzogKCkgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBGRm1wZWcgaXMgbm90IGluc3RhbGxlZCBvciBub3QgaW4gUEFUSC5cXG5gICtcbiAgICAgICAgICAgICAgICBgICBJbnN0YWxsIEZGbXBlZyB0byByZW5kZXIgdmlkZW9zOiBodHRwczovL2ZmbXBlZy5vcmcvZG93bmxvYWQuaHRtbGBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgTm9Db2RlQmxvY2tzRm91bmQ6IChlcnJvcikgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBObyBjb2RlIGJsb2NrcyBmb3VuZCR7ZXJyb3IucGF0aCA/IGAgaW4gJHtlcnJvci5wYXRofWAgOiBcIlwifS5cXG5gICtcbiAgICAgICAgICAgICAgICBgICBBZGQgZmVuY2VkIGNvZGUgYmxvY2tzIHdpdGggYSBsYW5ndWFnZSB0byB5b3VyIG1hcmtkb3duIGZpbGUuYFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBTY2VuZU1lYXN1cmVGYWlsZWQ6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9XG4gICAgICAgICAgICAgIGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyBgXFxuICBEZXRhaWxzOiAke2Vycm9yLmNhdXNlLm1lc3NhZ2V9YCA6IFwiXCJcbiAgICAgICAgICAgIHJldHVybiBDb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHByb2Nlc3MgY29kZSBibG9jay5cXG4gIFRoZSBzeW50YXggaGlnaGxpZ2h0ZXIgY291bGQgbm90IHRva2VuaXplIHRoZSBjb2RlLiR7ZGV0YWlsc31gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBTeXN0ZW1FcnJvcjogKGVycm9yKSA9PlxuICAgICAgICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byByZWFkIGlucHV0IGZpbGUuXFxuYCArXG4gICAgICAgICAgICAgICAgYCAgUGF0aDogJHtlcnJvci5wYXRoT3JEZXNjcmlwdG9yfVxcbmAgK1xuICAgICAgICAgICAgICAgIGAgIFJlYXNvbjogJHtlcnJvci5yZWFzb259YFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBVbmtub3duVGhlbWU6IChlcnJvcikgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIHRoZW1lOiBcIiR7ZXJyb3IudGhlbWV9XCIuXFxuYCArXG4gICAgICAgICAgICAgICAgYCAgU2VlIGF2YWlsYWJsZSB0aGVtZXM6IGh0dHBzOi8vc2hpa2kuc3R5bGUvdGhlbWVzYFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBVbnN1cHBvcnRlZExhbmd1YWdlOiAoZXJyb3IpID0+XG4gICAgICAgICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgVW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6IFwiJHtlcnJvci5sYW5ndWFnZX1cIi5cXG5gICtcbiAgICAgICAgICAgICAgICBgICBTZWUgc3VwcG9ydGVkIGxhbmd1YWdlczogaHR0cHM6Ly9zaGlraS5zdHlsZS9sYW5ndWFnZXNgXG4gICAgICAgICAgICApLFxuICAgICAgICB9KVxuICAgICAgKVxuICApXG4pXG4iLAogICAgImltcG9ydCB7IERhdGEgfSBmcm9tIFwiZWZmZWN0XCJcblxuZXhwb3J0IHR5cGUgRmZtcGVnRm9ybWF0ID0gXCJtcDRcIiB8IFwid2VibVwiXG5cbmV4cG9ydCBjbGFzcyBTY2VuZU1lYXN1cmVGYWlsZWQgZXh0ZW5kcyBEYXRhLlRhZ2dlZEVycm9yKFwiU2NlbmVNZWFzdXJlRmFpbGVkXCIpPHtcbiAgY2F1c2U6IHVua25vd25cbn0+IHt9XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duVGhlbWUgZXh0ZW5kcyBEYXRhLlRhZ2dlZEVycm9yKFwiVW5rbm93blRoZW1lXCIpPHsgdGhlbWU6IHN0cmluZyB9PiB7fVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0NvZGVCbG9ja0xhbmd1YWdlIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZVwiKTx7XG4gIGNvbnRleHQ6IFwicGFyc2VcIiB8IFwiY29kZUJsb2NrXCJcbiAgZGV0YWlsPzogc3RyaW5nXG59PiB7fVxuXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRMYW5ndWFnZSBleHRlbmRzIERhdGEuVGFnZ2VkRXJyb3IoXCJVbnN1cHBvcnRlZExhbmd1YWdlXCIpPHtcbiAgbGFuZ3VhZ2U6IHN0cmluZ1xufT4ge31cblxuZXhwb3J0IGNsYXNzIE5vQ29kZUJsb2Nrc0ZvdW5kIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk5vQ29kZUJsb2Nrc0ZvdW5kXCIpPHsgcGF0aD86IHN0cmluZyB9PiB7fVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFRyYW5zaXRpb25EdXJhdGlvbiBleHRlbmRzIERhdGEuVGFnZ2VkRXJyb3IoXCJJbnZhbGlkVHJhbnNpdGlvbkR1cmF0aW9uXCIpPHtcbiAgZHVyYXRpb246IG51bWJlclxuICBtaW5pbXVtOiBudW1iZXJcbn0+IHt9XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nRmZtcGVnIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk1pc3NpbmdGZm1wZWdcIik8e1xuICBjb21tYW5kOiBzdHJpbmdcbiAgY2F1c2U/OiB1bmtub3duXG59PiB7fVxuXG5leHBvcnQgY2xhc3MgRmZtcGVnUmVuZGVyRmFpbGVkIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIkZmbXBlZ1JlbmRlckZhaWxlZFwiKTx7XG4gIGZvcm1hdDogRmZtcGVnRm9ybWF0XG4gIG91dHB1dFBhdGg6IHN0cmluZ1xuICBzdGFnZTogXCJpbml0XCIgfCBcInN0cmVhbVwiIHwgXCJmaW5pc2hcIlxuICBjYXVzZT86IHVua25vd25cbiAgZXhpdENvZGU/OiBudW1iZXJcbiAgc2lnbmFsPzogc3RyaW5nXG59PiB7fVxuIiwKICAgICJpbXBvcnQgeyBFZmZlY3QgfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gXCJtYXJrZWRcIlxuaW1wb3J0IHsgYnVuZGxlZExhbmd1YWdlcywgdHlwZSBCdW5kbGVkTGFuZ3VhZ2UgfSBmcm9tIFwic2hpa2lcIlxuaW1wb3J0IHR5cGUgeyBDb2RlQmxvY2sgfSBmcm9tIFwiLi90eXBlc1wiXG5pbXBvcnQgeyBNaXNzaW5nQ29kZUJsb2NrTGFuZ3VhZ2UsIFVuc3VwcG9ydGVkTGFuZ3VhZ2UgfSBmcm9tIFwiLi9lcnJvcnMuanNcIlxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplTGFuZ3VhZ2UgPSAocmF3TGFuZ3VhZ2U6IHN0cmluZykgPT4ge1xuICBjb25zdCB0cmltbWVkID0gcmF3TGFuZ3VhZ2UudHJpbSgpXG4gIGlmICghdHJpbW1lZCkge1xuICAgIHJldHVybiBcIlwiXG4gIH1cblxuICBjb25zdCBwcmltYXJ5ID0gdHJpbW1lZC5zcGxpdCgvXFxzKy8pWzBdID8/IFwiXCJcbiAgcmV0dXJuIHByaW1hcnkudG9Mb3dlckNhc2UoKVxufVxuXG5jb25zdCBjaGVja0lzU3VwcG9ydGVkTGFuZ3VhZ2UgPSAobGFuZ3VhZ2U6IHN0cmluZyk6IGxhbmd1YWdlIGlzIEJ1bmRsZWRMYW5ndWFnZSA9PlxuICBPYmplY3QuaGFzT3duKGJ1bmRsZWRMYW5ndWFnZXMsIGxhbmd1YWdlKVxuXG5leHBvcnQgY29uc3QgcGFyc2VNYXJrZG93bkNvZGVCbG9ja3MgPSBFZmZlY3QuZm4oZnVuY3Rpb24qIHBhcnNlTWFya2Rvd25Db2RlQmxvY2tzKFxuICBtYXJrZG93bjogc3RyaW5nXG4pIHtcbiAgY29uc3QgdG9rZW5zID0geWllbGQqIEVmZmVjdC50cnkoe1xuICAgIGNhdGNoOiAoKSA9PlxuICAgICAgbmV3IE1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZSh7IGNvbnRleHQ6IFwicGFyc2VcIiwgZGV0YWlsOiBcIlVuYWJsZSB0byBwYXJzZSBtYXJrZG93bi5cIiB9KSxcbiAgICB0cnk6ICgpID0+IG1hcmtlZC5sZXhlcihtYXJrZG93biksXG4gIH0pXG4gIGNvbnN0IGJsb2NrczogQ29kZUJsb2NrW10gPSBbXVxuXG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFwiY29kZVwiKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHJhd0xhbmd1YWdlID0gdHlwZW9mIHRva2VuLmxhbmcgPT09IFwic3RyaW5nXCIgPyB0b2tlbi5sYW5nLnRyaW0oKSA6IFwiXCJcbiAgICBjb25zdCBsYW5ndWFnZSA9IG5vcm1hbGl6ZUxhbmd1YWdlKHJhd0xhbmd1YWdlKVxuXG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBuZXcgTWlzc2luZ0NvZGVCbG9ja0xhbmd1YWdlKHtcbiAgICAgICAgY29udGV4dDogXCJjb2RlQmxvY2tcIixcbiAgICAgICAgZGV0YWlsOiBcIkV2ZXJ5IGZlbmNlZCBjb2RlIGJsb2NrIG5lZWRzIGEgbGFuZ3VhZ2UgKGZvciBleGFtcGxlOiBgYGB0cykuXCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICghY2hlY2tJc1N1cHBvcnRlZExhbmd1YWdlKGxhbmd1YWdlKSkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBuZXcgVW5zdXBwb3J0ZWRMYW5ndWFnZSh7XG4gICAgICAgIGxhbmd1YWdlOiByYXdMYW5ndWFnZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYmxvY2tzLnB1c2goe1xuICAgICAgY29kZTogdG9rZW4udGV4dCxcbiAgICAgIGxhbmd1YWdlLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gYmxvY2tzXG59KVxuIiwKICAgICJpbXBvcnQgeyBFZmZlY3QgfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCB7IGJ1bmRsZWRUaGVtZXMsIHR5cGUgQnVuZGxlZFRoZW1lIH0gZnJvbSBcInNoaWtpXCJcbmltcG9ydCB7IFVua25vd25UaGVtZSB9IGZyb20gXCIuL2Vycm9yc1wiXG5cbmNvbnN0IGNoZWNrSXNTdXBwb3J0ZWRUaGVtZSA9ICh0aGVtZTogc3RyaW5nKTogdGhlbWUgaXMgQnVuZGxlZFRoZW1lID0+XG4gIE9iamVjdC5oYXNPd24oYnVuZGxlZFRoZW1lcywgdGhlbWUpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlVGhlbWUgPSBFZmZlY3QuZm4oZnVuY3Rpb24qIHJlc29sdmVUaGVtZSh0aGVtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHRyaW1tZWQgPSB0aGVtZS50cmltKClcbiAgaWYgKCFjaGVja0lzU3VwcG9ydGVkVGhlbWUodHJpbW1lZCkpIHtcbiAgICByZXR1cm4geWllbGQqIG5ldyBVbmtub3duVGhlbWUoeyB0aGVtZSB9KVxuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWRcbn0pXG4iLAogICAgImltcG9ydCB7IGF2YWlsYWJsZVBhcmFsbGVsaXNtIH0gZnJvbSBcIm5vZGU6b3NcIlxuaW1wb3J0IHR5cGUgeyBCdW5kbGVkVGhlbWUgfSBmcm9tIFwic2hpa2lcIlxuaW1wb3J0ICogYXMgRmlsZVN5c3RlbSBmcm9tIFwiQGVmZmVjdC9wbGF0Zm9ybS9GaWxlU3lzdGVtXCJcbmltcG9ydCB7IGNyZWF0ZUNhbnZhcywgdHlwZSBTS1JTQ29udGV4dDJEIH0gZnJvbSBcIkBuYXBpLXJzL2NhbnZhc1wiXG5pbXBvcnQgeyBFZmZlY3QsIFN0cmVhbSB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHR5cGUgeyBDYW52YXNDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiXG5pbXBvcnQgdHlwZSB7IENvZGVCbG9jaywgUmVuZGVyQ29uZmlnLCBSZW5kZXJGcmFtZSB9IGZyb20gXCIuL3R5cGVzXCJcbmltcG9ydCB7IEZmbXBlZ1JlbmRlckZhaWxlZCwgdHlwZSBGZm1wZWdGb3JtYXQgfSBmcm9tIFwiLi9lcnJvcnNcIlxuaW1wb3J0IHsgZW5zdXJlRXZlbkRpbWVuc2lvbnMsIGVuc3VyZUZmbXBlZ0F2YWlsYWJsZSwgc3RhcnRGZm1wZWdQcm9jZXNzIH0gZnJvbSBcIi4vZmZtcGVnXCJcbmltcG9ydCB7IGJ1aWxkRnJhbWVzU3RyZWFtLCBjb21wdXRlRnJhbWVDb3VudHMsIHJlbmRlckZyYW1lIH0gZnJvbSBcIi4vcmVuZGVyXCJcbmltcG9ydCB7IGxheW91dFNjZW5lLCBtZWFzdXJlU2NlbmUsIHJlc29sdmVGcmFtZVNpemUgfSBmcm9tIFwiLi9zY2VuZVwiXG5cbmV4cG9ydCB0eXBlIFJlbmRlclZpZGVvT3B0aW9ucyA9IHtcbiAgY29uY3VycmVuY3k/OiBudW1iZXJcbiAgZm9ybWF0PzogRmZtcGVnRm9ybWF0XG59XG5cbmNvbnN0IGZyYW1lVG9CeXRlcyA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGNvbnRleHQ6IENhbnZhc0NvbnRleHQsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyXG4pID0+XG4gIEVmZmVjdC5mbihcInJlbmRlclZpZGVvLmZyYW1lVG9CeXRlc1wiKSgoZnJhbWU6IFJlbmRlckZyYW1lKSA9PlxuICAgIEVmZmVjdC5zeW5jKCgpID0+IHtcbiAgICAgIHJlbmRlckZyYW1lKGNvbmZpZywgY29udGV4dCwgd2lkdGgsIGhlaWdodCwgZnJhbWUpXG4gICAgICBjb25zdCBieXRlcyA9IChjb250ZXh0IGFzIFNLUlNDb250ZXh0MkQpLmNhbnZhcy5kYXRhKClcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShieXRlcylcbiAgICB9KVxuICApXG5cbmV4cG9ydCBjb25zdCByZW5kZXJWaWRlbyA9IEVmZmVjdC5mbihmdW5jdGlvbiogcmVuZGVyVmlkZW8oXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbiAgdGhlbWU6IEJ1bmRsZWRUaGVtZSxcbiAgY29kZUJsb2NrczogQ29kZUJsb2NrW10sXG4gIGNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBvcHRpb25zOiBSZW5kZXJWaWRlb09wdGlvbnMgPSB7fVxuKSB7XG4gIHlpZWxkKiBlbnN1cmVGZm1wZWdBdmFpbGFibGUoKVxuXG4gIGNvbnN0IGNvbmN1cnJlbmN5ID0gb3B0aW9ucy5jb25jdXJyZW5jeSA/PyBNYXRoLm1pbig0LCBhdmFpbGFibGVQYXJhbGxlbGlzbSgpKVxuICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLmZvcm1hdCA/PyBcIm1wNFwiXG5cbiAgY29uc3QgbWVhc3VyZWRTY2VuZXMgPSB5aWVsZCogRWZmZWN0LmZvckVhY2goXG4gICAgY29kZUJsb2NrcyxcbiAgICAoY29kZUJsb2NrKSA9PlxuICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBtZWFzdXJlbWVudENvbnRleHQgPSBjcmVhdGVDYW52YXMoMSwgMSkuZ2V0Q29udGV4dChcIjJkXCIpXG4gICAgICAgIG1lYXN1cmVtZW50Q29udGV4dC50ZXh0UmVuZGVyaW5nID0gXCJvcHRpbWl6ZUxlZ2liaWxpdHlcIlxuICAgICAgICByZXR1cm4geWllbGQqIG1lYXN1cmVTY2VuZShjb25maWcsIG1lYXN1cmVtZW50Q29udGV4dCwgY29kZUJsb2NrLCB0aGVtZSBhcyBuZXZlcilcbiAgICAgIH0pLFxuICAgIHsgY29uY3VycmVuY3kgfVxuICApXG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSByZXNvbHZlRnJhbWVTaXplKGNvbmZpZywgbWVhc3VyZWRTY2VuZXMpXG4gIGNvbnN0IHsgaGVpZ2h0OiBldmVuSGVpZ2h0LCB3aWR0aDogZXZlbldpZHRoIH0gPSBlbnN1cmVFdmVuRGltZW5zaW9ucyhmb3JtYXQsIHdpZHRoLCBoZWlnaHQpXG5cbiAgY29uc3QgY2FudmFzID0gY3JlYXRlQ2FudmFzKGV2ZW5XaWR0aCwgZXZlbkhlaWdodClcbiAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcbiAgY29udGV4dC50ZXh0UmVuZGVyaW5nID0gXCJvcHRpbWl6ZUxlZ2liaWxpdHlcIlxuXG4gIGNvbnN0IHNjZW5lcyA9IG1lYXN1cmVkU2NlbmVzLm1hcCgobWVhc3VyZWQpID0+XG4gICAgbGF5b3V0U2NlbmUoY29uZmlnLCBtZWFzdXJlZCwgZXZlbldpZHRoLCBldmVuSGVpZ2h0KVxuICApXG5cbiAgY29uc3QgZnJhbWVDb3VudHMgPSBjb21wdXRlRnJhbWVDb3VudHMoXG4gICAgY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbk1zLFxuICAgIGNvbmZpZy5mcHMsXG4gICAgY29uZmlnLmJsb2NrRHVyYXRpb25cbiAgKVxuICBjb25zdCBmcmFtZVN0cmVhbSA9IGJ1aWxkRnJhbWVzU3RyZWFtKFxuICAgIGNvbmZpZyxcbiAgICBzY2VuZXMsXG4gICAgZnJhbWVDb3VudHMuYmxvY2tGcmFtZXMsXG4gICAgZnJhbWVDb3VudHMudHJhbnNpdGlvbkZyYW1lc1xuICApXG4gIGNvbnN0IGZyYW1lQnl0ZXNTdHJlYW0gPSBmcmFtZVN0cmVhbS5waXBlKFxuICAgIFN0cmVhbS5tYXBFZmZlY3QoZnJhbWVUb0J5dGVzKGNvbmZpZywgY29udGV4dCwgZXZlbldpZHRoLCBldmVuSGVpZ2h0KSlcbiAgKVxuXG4gIHJldHVybiB5aWVsZCogRWZmZWN0LnNjb3BlZChcbiAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBmaWxlU3lzdGVtID0geWllbGQqIEZpbGVTeXN0ZW0uRmlsZVN5c3RlbVxuICAgICAgY29uc3QgcmF3UGF0aCA9IHlpZWxkKiBmaWxlU3lzdGVtLm1ha2VUZW1wRmlsZVNjb3BlZCh7IHN1ZmZpeDogXCIucmF3XCIgfSlcblxuICAgICAgeWllbGQqIFN0cmVhbS5ydW4oZnJhbWVCeXRlc1N0cmVhbSwgZmlsZVN5c3RlbS5zaW5rKHJhd1BhdGgpKS5waXBlKFxuICAgICAgICBFZmZlY3QubWFwRXJyb3IoXG4gICAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgICAgbmV3IEZmbXBlZ1JlbmRlckZhaWxlZCh7XG4gICAgICAgICAgICAgIGNhdXNlLFxuICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgIG91dHB1dFBhdGgsXG4gICAgICAgICAgICAgIHN0YWdlOiBcInN0cmVhbVwiLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBwcm9jZXNzID0geWllbGQqIEVmZmVjdC5hY3F1aXJlUmVsZWFzZShcbiAgICAgICAgc3RhcnRGZm1wZWdQcm9jZXNzKGZvcm1hdCwgZXZlbldpZHRoLCBldmVuSGVpZ2h0LCBjb25maWcuZnBzLCByYXdQYXRoLCBvdXRwdXRQYXRoKS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5tYXBFcnJvcihcbiAgICAgICAgICAgIChjYXVzZSkgPT5cbiAgICAgICAgICAgICAgbmV3IEZmbXBlZ1JlbmRlckZhaWxlZCh7XG4gICAgICAgICAgICAgICAgY2F1c2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgICAgIG91dHB1dFBhdGgsXG4gICAgICAgICAgICAgICAgc3RhZ2U6IFwiaW5pdFwiLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgKHByb2Nlc3MpID0+IHByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIikucGlwZShFZmZlY3Qub3JEaWUpXG4gICAgICApXG5cbiAgICAgIGNvbnN0IGV4aXRDb2RlID0geWllbGQqIHByb2Nlc3MuZXhpdENvZGVcbiAgICAgIGlmIChleGl0Q29kZSA9PT0gbnVsbCB8fCBOdW1iZXIoZXhpdENvZGUpICE9PSAwKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCogbmV3IEZmbXBlZ1JlbmRlckZhaWxlZCh7XG4gICAgICAgICAgLi4uKGV4aXRDb2RlICE9PSBudWxsICYmIHsgZXhpdENvZGU6IE51bWJlcihleGl0Q29kZSkgfSksXG4gICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgIG91dHB1dFBhdGgsXG4gICAgICAgICAgc3RhZ2U6IFwiZmluaXNoXCIsXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBvdXRwdXRQYXRoXG4gICAgfSlcbiAgKVxufSlcbiIsCiAgICAiaW1wb3J0IHsgQ29tbWFuZCBhcyBTaGVsbENvbW1hbmQgfSBmcm9tIFwiQGVmZmVjdC9wbGF0Zm9ybVwiXG5pbXBvcnQgeyBFZmZlY3QgfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCB7IE1pc3NpbmdGZm1wZWcsIHR5cGUgRmZtcGVnRm9ybWF0IH0gZnJvbSBcIi4vZXJyb3JzXCJcblxuY29uc3QgRkZNUEVHX0JJTkFSWSA9IFwiZmZtcGVnXCJcblxuY29uc3QgQ09ERUNfQllfRk9STUFUOiBSZWNvcmQ8RmZtcGVnRm9ybWF0LCBzdHJpbmc+ID0ge1xuICBtcDQ6IFwibGlieDI2NFwiLFxuICB3ZWJtOiBcImxpYnZweC12cDlcIixcbn1cblxuY29uc3QgUElYX0ZNVF9CWV9GT1JNQVQ6IFJlY29yZDxGZm1wZWdGb3JtYXQsIHN0cmluZz4gPSB7XG4gIG1wNDogXCJ5dXY0NDRwXCIsXG4gIHdlYm06IFwieXV2NDIwcFwiLFxufVxuXG5jb25zdCBRVUFMSVRZX0FSR1NfQllfRk9STUFUOiBSZWNvcmQ8RmZtcGVnRm9ybWF0LCByZWFkb25seSBzdHJpbmdbXT4gPSB7XG4gIG1wNDogW1wiLWNyZlwiLCBcIjE0XCIsIFwiLXByZXNldFwiLCBcInNsb3dcIl0sXG4gIHdlYm06IFtcIi1jcmZcIiwgXCIxOFwiLCBcIi1iOnZcIiwgXCIwXCJdLFxufVxuXG5jb25zdCBlbnN1cmVFdmVuID0gKHZhbHVlOiBudW1iZXIpID0+ICh2YWx1ZSAlIDIgPT09IDAgPyB2YWx1ZSA6IHZhbHVlICsgMSlcblxuZXhwb3J0IGNvbnN0IGVuc3VyZUV2ZW5EaW1lbnNpb25zID0gKGZvcm1hdDogRmZtcGVnRm9ybWF0LCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICBpZiAoUElYX0ZNVF9CWV9GT1JNQVRbZm9ybWF0XSAhPT0gXCJ5dXY0MjBwXCIpIHtcbiAgICByZXR1cm4geyBoZWlnaHQsIHdpZHRoIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgaGVpZ2h0OiBlbnN1cmVFdmVuKGhlaWdodCksXG4gICAgd2lkdGg6IGVuc3VyZUV2ZW4od2lkdGgpLFxuICB9XG59XG5cbmNvbnN0IGJ1aWxkQXJncyA9IChcbiAgZm9ybWF0OiBGZm1wZWdGb3JtYXQsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBmcHM6IG51bWJlcixcbiAgaW5wdXRQYXRoOiBzdHJpbmcsXG4gIG91dHB1dFBhdGg6IHN0cmluZ1xuKSA9PiBbXG4gIFwiLWZcIixcbiAgXCJyYXd2aWRlb1wiLFxuICBcIi1waXhfZm10XCIsXG4gIFwicmdiYVwiLFxuICBcIi1zXCIsXG4gIGAke3dpZHRofXgke2hlaWdodH1gLFxuICBcIi1yXCIsXG4gIGAke2Zwc31gLFxuICBcIi1pXCIsXG4gIGlucHV0UGF0aCxcbiAgXCItdmZcIixcbiAgXCJ1bnNoYXJwPTU6NTowLjU6NTo1OjAuNVwiLFxuICBcIi1jOnZcIixcbiAgQ09ERUNfQllfRk9STUFUW2Zvcm1hdF0sXG4gIC4uLlFVQUxJVFlfQVJHU19CWV9GT1JNQVRbZm9ybWF0XSxcbiAgXCItcGl4X2ZtdFwiLFxuICBQSVhfRk1UX0JZX0ZPUk1BVFtmb3JtYXRdLFxuICBcIi15XCIsXG4gIG91dHB1dFBhdGgsXG5dXG5cbmNvbnN0IGZmbXBlZ0NoZWNrQ29tbWFuZCA9IHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIiA/IFwid2hlcmVcIiA6IFwid2hpY2hcIlxuXG5leHBvcnQgY29uc3QgZW5zdXJlRmZtcGVnQXZhaWxhYmxlID0gRWZmZWN0LmZuKFwiZW5zdXJlRmZtcGVnQXZhaWxhYmxlXCIpKGZ1bmN0aW9uKiAoKSB7XG4gIGNvbnN0IGV4aXRDb2RlID0geWllbGQqIFNoZWxsQ29tbWFuZC5tYWtlKGZmbXBlZ0NoZWNrQ29tbWFuZCwgRkZNUEVHX0JJTkFSWSkucGlwZShcbiAgICBTaGVsbENvbW1hbmQuc3RkZXJyKFwicGlwZVwiKSxcbiAgICBTaGVsbENvbW1hbmQuc3Rkb3V0KFwicGlwZVwiKSxcbiAgICBTaGVsbENvbW1hbmQuZXhpdENvZGUsXG4gICAgRWZmZWN0Lm1hcEVycm9yKChjYXVzZSkgPT4gbmV3IE1pc3NpbmdGZm1wZWcoeyBjYXVzZSwgY29tbWFuZDogRkZNUEVHX0JJTkFSWSB9KSlcbiAgKVxuXG4gIGlmIChOdW1iZXIoZXhpdENvZGUpICE9PSAwKSB7XG4gICAgcmV0dXJuIHlpZWxkKiBuZXcgTWlzc2luZ0ZmbXBlZyh7IGNvbW1hbmQ6IEZGTVBFR19CSU5BUlkgfSlcbiAgfVxufSlcblxuZXhwb3J0IGNvbnN0IHN0YXJ0RmZtcGVnUHJvY2VzcyA9IChcbiAgZm9ybWF0OiBGZm1wZWdGb3JtYXQsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyLFxuICBmcHM6IG51bWJlcixcbiAgaW5wdXRQYXRoOiBzdHJpbmcsXG4gIG91dHB1dFBhdGg6IHN0cmluZ1xuKSA9PlxuICBTaGVsbENvbW1hbmQubWFrZShcbiAgICBGRk1QRUdfQklOQVJZLFxuICAgIC4uLmJ1aWxkQXJncyhmb3JtYXQsIHdpZHRoLCBoZWlnaHQsIGZwcywgaW5wdXRQYXRoLCBvdXRwdXRQYXRoKVxuICApLnBpcGUoXG4gICAgU2hlbGxDb21tYW5kLnN0ZGluKFwiaW5oZXJpdFwiKSxcbiAgICBTaGVsbENvbW1hbmQuc3Rkb3V0KFwiaW5oZXJpdFwiKSxcbiAgICBTaGVsbENvbW1hbmQuc3RkZXJyKFwiaW5oZXJpdFwiKSxcbiAgICBTaGVsbENvbW1hbmQuc3RhcnRcbiAgKVxuIiwKICAgICJpbXBvcnQgeyBTdHJlYW0gfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCB0eXBlIHsgQ2FudmFzQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIlxuaW1wb3J0IHR5cGUgeyBSZW5kZXJDb25maWcsIFJlbmRlckZyYW1lLCBTY2VuZSB9IGZyb20gXCIuL3R5cGVzXCJcbmltcG9ydCB7IGJsZW5kQ29sb3JzIH0gZnJvbSBcIi4vY29sb3JcIlxuaW1wb3J0IHsgcmVuZGVyU2NlbmVUZXh0IH0gZnJvbSBcIi4vc2NlbmVcIlxuaW1wb3J0IHtcbiAgYnVpbGRUcmFuc2l0aW9uRGlmZixcbiAgYnVpbGRUcmFuc2l0aW9uVG9rZW5zLFxuICBlYXNlSW5PdXRDdWJpYyxcbiAgcmVuZGVyVHJhbnNpdGlvblRva2Vucyxcbn0gZnJvbSBcIi4vdHJhbnNpdGlvblwiXG5cbmV4cG9ydCBjb25zdCByZW5kZXJGcmFtZSA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGNvbnRleHQ6IENhbnZhc0NvbnRleHQsXG4gIGZyYW1lV2lkdGg6IG51bWJlcixcbiAgZnJhbWVIZWlnaHQ6IG51bWJlcixcbiAgZnJhbWU6IFJlbmRlckZyYW1lXG4pID0+IHtcbiAgY29uc3QgZnJhbWVDb250ZXh0ID0gY29udGV4dFxuICBjb25zdCBzdGFydFRyYW5zZm9ybSA9IGZyYW1lQ29udGV4dC5nZXRUcmFuc2Zvcm0oKVxuICBpZiAodHlwZW9mIGZyYW1lQ29udGV4dC5zZXRUcmFuc2Zvcm1NYXRyaXggIT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZyYW1lQ29udGV4dC5zZXRUcmFuc2Zvcm1NYXRyaXggPSAodHJhbnNmb3JtKSA9PiB7XG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiB0cmFuc2Zvcm0gPT09IFwib2JqZWN0XCIgJiZcbiAgICAgICAgdHJhbnNmb3JtICE9PSBudWxsICYmXG4gICAgICAgIFwiYVwiIGluIHRyYW5zZm9ybSAmJlxuICAgICAgICBcImJcIiBpbiB0cmFuc2Zvcm0gJiZcbiAgICAgICAgXCJjXCIgaW4gdHJhbnNmb3JtICYmXG4gICAgICAgIFwiZFwiIGluIHRyYW5zZm9ybSAmJlxuICAgICAgICBcImVcIiBpbiB0cmFuc2Zvcm0gJiZcbiAgICAgICAgXCJmXCIgaW4gdHJhbnNmb3JtXG4gICAgICApIHtcbiAgICAgICAgY29uc3QgbWF0cml4ID0gdHJhbnNmb3JtIGFzIHtcbiAgICAgICAgICBhOiBudW1iZXJcbiAgICAgICAgICBiOiBudW1iZXJcbiAgICAgICAgICBjOiBudW1iZXJcbiAgICAgICAgICBkOiBudW1iZXJcbiAgICAgICAgICBlOiBudW1iZXJcbiAgICAgICAgICBmOiBudW1iZXJcbiAgICAgICAgfVxuICAgICAgICBmcmFtZUNvbnRleHQuc2V0VHJhbnNmb3JtKG1hdHJpeC5hLCBtYXRyaXguYiwgbWF0cml4LmMsIG1hdHJpeC5kLCBtYXRyaXguZSwgbWF0cml4LmYpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZUNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNvbnN0IHN0YXJ0QWxwaGEgPSBmcmFtZUNvbnRleHQuZ2xvYmFsQWxwaGFcbiAgY29uc3Qgc3RhcnRGaWxsU3R5bGUgPSBmcmFtZUNvbnRleHQuZmlsbFN0eWxlXG5cbiAgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybSgxLCAwLCAwLCAxLCAwLCAwKVxuICBmcmFtZUNvbnRleHQuZ2xvYmFsQWxwaGEgPSAxXG4gIGZyYW1lQ29udGV4dC5maWxsU3R5bGUgPSBmcmFtZS5iYWNrZ3JvdW5kXG4gIGZyYW1lQ29udGV4dC5maWxsUmVjdCgwLCAwLCBmcmFtZVdpZHRoLCBmcmFtZUhlaWdodClcblxuICBpZiAoZnJhbWUua2luZCA9PT0gXCJzY2VuZVwiKSB7XG4gICAgcmVuZGVyU2NlbmVUZXh0KFxuICAgICAgY29uZmlnLFxuICAgICAgZnJhbWVDb250ZXh0LFxuICAgICAgZnJhbWUuc2NlbmUsXG4gICAgICBmcmFtZS5vcGFjaXR5LFxuICAgICAgZnJhbWUucG9zaXRpb25YLFxuICAgICAgZnJhbWUucG9zaXRpb25ZXG4gICAgKVxuICB9IGVsc2Uge1xuICAgIHJlbmRlclRyYW5zaXRpb25Ub2tlbnMoY29uZmlnLCBmcmFtZUNvbnRleHQsIGZyYW1lLnRva2VucylcbiAgfVxuXG4gIGlmICh0eXBlb2YgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeChzdGFydFRyYW5zZm9ybSlcbiAgfVxuICBmcmFtZUNvbnRleHQuZ2xvYmFsQWxwaGEgPSBzdGFydEFscGhhXG4gIGZyYW1lQ29udGV4dC5maWxsU3R5bGUgPSBzdGFydEZpbGxTdHlsZVxufVxuXG5leHBvcnQgY29uc3QgY29tcHV0ZUZyYW1lQ291bnRzID0gKFxuICB0cmFuc2l0aW9uRHVyYXRpb25NczogbnVtYmVyLFxuICBmcHM6IG51bWJlcixcbiAgYmxvY2tEdXJhdGlvbjogbnVtYmVyXG4pID0+IHtcbiAgY29uc3QgZnJhbWVEdXJhdGlvbiA9IDEgLyBmcHNcbiAgY29uc3QgYmxvY2tGcmFtZXMgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKGJsb2NrRHVyYXRpb24gKiBmcHMpKVxuICBjb25zdCB0cmFuc2l0aW9uRnJhbWVzID0gTWF0aC5tYXgoMSwgTWF0aC5yb3VuZCgodHJhbnNpdGlvbkR1cmF0aW9uTXMgLyAxMDAwKSAqIGZwcykpXG5cbiAgcmV0dXJuIHtcbiAgICBibG9ja0ZyYW1lcyxcbiAgICBmcmFtZUR1cmF0aW9uLFxuICAgIHRyYW5zaXRpb25GcmFtZXMsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2NlbmVGcmFtZXMgPSAoc2NlbmU6IFNjZW5lLCBibG9ja0ZyYW1lczogbnVtYmVyKSA9PlxuICBTdHJlYW0ucmFuZ2UoMSwgYmxvY2tGcmFtZXMpLnBpcGUoXG4gICAgU3RyZWFtLm1hcChcbiAgICAgICgpID0+XG4gICAgICAgICh7XG4gICAgICAgICAgYmFja2dyb3VuZDogc2NlbmUuYmFja2dyb3VuZCxcbiAgICAgICAgICBraW5kOiBcInNjZW5lXCIsXG4gICAgICAgICAgb3BhY2l0eTogMSxcbiAgICAgICAgICBwb3NpdGlvblg6IHNjZW5lLmJsb2NrWCxcbiAgICAgICAgICBwb3NpdGlvblk6IHNjZW5lLmJsb2NrWSxcbiAgICAgICAgICBzY2VuZSxcbiAgICAgICAgfSkgc2F0aXNmaWVzIFJlbmRlckZyYW1lXG4gICAgKVxuICApXG5cbmV4cG9ydCBjb25zdCBidWlsZFRyYW5zaXRpb25GcmFtZXMgPSAoXG4gIGNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBzY2VuZTogU2NlbmUsXG4gIG5leHRTY2VuZTogU2NlbmUsXG4gIHRyYW5zaXRpb25GcmFtZXM6IG51bWJlclxuKSA9PiB7XG4gIGNvbnN0IGRpZmYgPSBidWlsZFRyYW5zaXRpb25EaWZmKHNjZW5lLCBuZXh0U2NlbmUpXG5cbiAgcmV0dXJuIFN0cmVhbS5yYW5nZSgxLCB0cmFuc2l0aW9uRnJhbWVzKS5waXBlKFxuICAgIFN0cmVhbS5tYXAoKGluZGV4KSA9PiB7XG4gICAgICBjb25zdCByYXdQcm9ncmVzcyA9IGluZGV4IC8gdHJhbnNpdGlvbkZyYW1lc1xuICAgICAgY29uc3QgcHJvZ3Jlc3MgPSBlYXNlSW5PdXRDdWJpYyhyYXdQcm9ncmVzcylcbiAgICAgIGNvbnN0IGJsZW5kZWRCYWNrZ3JvdW5kID0gYmxlbmRDb2xvcnMoc2NlbmUuYmFja2dyb3VuZCwgbmV4dFNjZW5lLmJhY2tncm91bmQsIHByb2dyZXNzKVxuICAgICAgY29uc3QgdG9rZW5zID0gYnVpbGRUcmFuc2l0aW9uVG9rZW5zKGNvbmZpZywgZGlmZiwgcHJvZ3Jlc3MpXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhY2tncm91bmQ6IGJsZW5kZWRCYWNrZ3JvdW5kLFxuICAgICAgICBraW5kOiBcInRyYW5zaXRpb25cIixcbiAgICAgICAgdG9rZW5zLFxuICAgICAgfSBzYXRpc2ZpZXMgUmVuZGVyRnJhbWVcbiAgICB9KVxuICApXG59XG5cbmV4cG9ydCBjb25zdCBidWlsZEZyYW1lc1N0cmVhbSA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIHNjZW5lczogU2NlbmVbXSxcbiAgYmxvY2tGcmFtZXM6IG51bWJlcixcbiAgdHJhbnNpdGlvbkZyYW1lczogbnVtYmVyXG4pID0+XG4gIFN0cmVhbS5mcm9tSXRlcmFibGUoc2NlbmVzKS5waXBlKFxuICAgIFN0cmVhbS56aXBXaXRoSW5kZXgsXG4gICAgU3RyZWFtLmZsYXRNYXAoKFtzY2VuZSwgaW5kZXhdKSA9PiB7XG4gICAgICBjb25zdCBuZXh0U2NlbmUgPSBzY2VuZXNbaW5kZXggKyAxXVxuICAgICAgY29uc3QgYmFzZSA9IGJ1aWxkU2NlbmVGcmFtZXMoc2NlbmUsIGJsb2NrRnJhbWVzKVxuICAgICAgcmV0dXJuIG5leHRTY2VuZVxuICAgICAgICA/IFN0cmVhbS5jb25jYXQoYmFzZSwgYnVpbGRUcmFuc2l0aW9uRnJhbWVzKGNvbmZpZywgc2NlbmUsIG5leHRTY2VuZSwgdHJhbnNpdGlvbkZyYW1lcykpXG4gICAgICAgIDogYmFzZVxuICAgIH0pXG4gIClcbiIsCiAgICAiZXhwb3J0IGNvbnN0IGV4cGFuZFNob3J0SGV4ID0gKGhleDogc3RyaW5nKSA9PiB7XG4gIGlmIChoZXgubGVuZ3RoID09PSAzKSB7XG4gICAgY29uc3QgciA9IGhleC5jaGFyQXQoMClcbiAgICBjb25zdCBnID0gaGV4LmNoYXJBdCgxKVxuICAgIGNvbnN0IGIgPSBoZXguY2hhckF0KDIpXG4gICAgcmV0dXJuIHIgKyByICsgZyArIGcgKyBiICsgYlxuICB9XG4gIGlmIChoZXgubGVuZ3RoID09PSA0KSB7XG4gICAgY29uc3QgciA9IGhleC5jaGFyQXQoMClcbiAgICBjb25zdCBnID0gaGV4LmNoYXJBdCgxKVxuICAgIGNvbnN0IGIgPSBoZXguY2hhckF0KDIpXG4gICAgY29uc3QgYSA9IGhleC5jaGFyQXQoMylcbiAgICByZXR1cm4gciArIHIgKyBnICsgZyArIGIgKyBiICsgYSArIGFcbiAgfVxuICByZXR1cm4gaGV4XG59XG5cbmV4cG9ydCBjb25zdCBwYXJzZUhleENvbG9yID0gKGNvbG9yOiBzdHJpbmcpID0+IHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IGV4cGFuZFNob3J0SGV4KGNvbG9yLnJlcGxhY2UoXCIjXCIsIFwiXCIpLnRyaW0oKSlcbiAgaWYgKG5vcm1hbGl6ZWQubGVuZ3RoICE9PSA2ICYmIG5vcm1hbGl6ZWQubGVuZ3RoICE9PSA4KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGFscGhhOiAxLFxuICAgICAgYmx1ZTogMTEsXG4gICAgICBncmVlbjogMTEsXG4gICAgICByZWQ6IDExLFxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlZCA9IE51bWJlci5wYXJzZUludChub3JtYWxpemVkLnNsaWNlKDAsIDIpLCAxNilcbiAgY29uc3QgZ3JlZW4gPSBOdW1iZXIucGFyc2VJbnQobm9ybWFsaXplZC5zbGljZSgyLCA0KSwgMTYpXG4gIGNvbnN0IGJsdWUgPSBOdW1iZXIucGFyc2VJbnQobm9ybWFsaXplZC5zbGljZSg0LCA2KSwgMTYpXG4gIGNvbnN0IGFscGhhID0gbm9ybWFsaXplZC5sZW5ndGggPT09IDggPyBOdW1iZXIucGFyc2VJbnQobm9ybWFsaXplZC5zbGljZSg2LCA4KSwgMTYpIC8gMjU1IDogMVxuXG4gIGlmIChOdW1iZXIuaXNOYU4ocmVkKSB8fCBOdW1iZXIuaXNOYU4oZ3JlZW4pIHx8IE51bWJlci5pc05hTihibHVlKSB8fCBOdW1iZXIuaXNOYU4oYWxwaGEpKSB7XG4gICAgcmV0dXJuIHsgYWxwaGE6IDEsIGJsdWU6IDExLCBncmVlbjogMTEsIHJlZDogMTEgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBhbHBoYSxcbiAgICBibHVlLFxuICAgIGdyZWVuLFxuICAgIHJlZCxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGVycCA9IChzdGFydDogbnVtYmVyLCBlbmQ6IG51bWJlciwgcHJvZ3Jlc3M6IG51bWJlcikgPT5cbiAgc3RhcnQgKyAoZW5kIC0gc3RhcnQpICogcHJvZ3Jlc3NcblxuZXhwb3J0IGNvbnN0IGJsZW5kQ29sb3JzID0gKGZyb206IHN0cmluZywgdG86IHN0cmluZywgcHJvZ3Jlc3M6IG51bWJlcikgPT4ge1xuICBjb25zdCBmcm9tQ29sb3IgPSBwYXJzZUhleENvbG9yKGZyb20pXG4gIGNvbnN0IHRvQ29sb3IgPSBwYXJzZUhleENvbG9yKHRvKVxuXG4gIGNvbnN0IGJsZW5kZWQgPSB7XG4gICAgYWxwaGE6IGxlcnAoZnJvbUNvbG9yLmFscGhhLCB0b0NvbG9yLmFscGhhLCBwcm9ncmVzcyksXG4gICAgYmx1ZTogbGVycChmcm9tQ29sb3IuYmx1ZSwgdG9Db2xvci5ibHVlLCBwcm9ncmVzcyksXG4gICAgZ3JlZW46IGxlcnAoZnJvbUNvbG9yLmdyZWVuLCB0b0NvbG9yLmdyZWVuLCBwcm9ncmVzcyksXG4gICAgcmVkOiBsZXJwKGZyb21Db2xvci5yZWQsIHRvQ29sb3IucmVkLCBwcm9ncmVzcyksXG4gIH1cblxuICByZXR1cm4gYHJnYmEoJHtNYXRoLnJvdW5kKGJsZW5kZWQucmVkKX0sICR7TWF0aC5yb3VuZChibGVuZGVkLmdyZWVuKX0sICR7TWF0aC5yb3VuZChcbiAgICBibGVuZGVkLmJsdWVcbiAgKX0sICR7YmxlbmRlZC5hbHBoYS50b0ZpeGVkKDMpfSlgXG59XG4iLAogICAgImltcG9ydCB7IEVmZmVjdCB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHsgY29kZVRvVG9rZW5zLCB0eXBlIEJ1bmRsZWRUaGVtZSwgdHlwZSBUaGVtZWRUb2tlbiB9IGZyb20gXCJzaGlraVwiXG5pbXBvcnQgdHlwZSB7IENhbnZhc0NvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCJcbmltcG9ydCB0eXBlIHtcbiAgQ29kZUJsb2NrLFxuICBMYXlvdXRUb2tlbixcbiAgUmVuZGVyQ29uZmlnLFxuICBTY2VuZSxcbiAgU2NlbmVMYXlvdXQsXG4gIFRva2VuQ2F0ZWdvcnksXG59IGZyb20gXCIuL3R5cGVzXCJcbmltcG9ydCB7XG4gIEZPTlRfU1RZTEVfQk9MRCxcbiAgRk9OVF9TVFlMRV9JVEFMSUMsXG4gIEZPTlRfU1RZTEVfTk9ORSxcbiAgRk9OVF9TVFlMRV9VTkRFUkxJTkUsXG59IGZyb20gXCIuL2NvbnN0YW50c1wiXG5pbXBvcnQgeyBTY2VuZU1lYXN1cmVGYWlsZWQgfSBmcm9tIFwiLi9lcnJvcnNcIlxuaW1wb3J0IHsgYnVpbGRGb250LCBkcmF3VW5kZXJsaW5lIH0gZnJvbSBcIi4vdGV4dFwiXG5pbXBvcnQgeyBjYXRlZ29yaXplVG9rZW4gfSBmcm9tIFwiLi90b2tlblwiXG5cbmNvbnN0IG5vcm1hbGl6ZVRva2VuQ29udGVudCA9IChjb25maWc6IFJlbmRlckNvbmZpZywgY29udGVudDogc3RyaW5nKSA9PlxuICBjb250ZW50LnNwbGl0KFwiXFx0XCIpLmpvaW4oY29uZmlnLnRhYlJlcGxhY2VtZW50KVxuXG5jb25zdCBtZWFzdXJlVG9rZW5XaWR0aCA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGNvbnRleHQ6IENhbnZhc0NvbnRleHQsXG4gIGNvbnRlbnQ6IHN0cmluZyxcbiAgaXNJdGFsaWM6IGJvb2xlYW4sXG4gIGlzQm9sZDogYm9vbGVhblxuKSA9PiB7XG4gIGNvbnN0IG1lYXN1cmVDb250ZXh0ID0gY29udGV4dFxuICBjb25zdCBwcmV2aW91c0ZvbnQgPSBtZWFzdXJlQ29udGV4dC5mb250XG4gIG1lYXN1cmVDb250ZXh0LmZvbnQgPSBidWlsZEZvbnQoY29uZmlnLCBpc0l0YWxpYywgaXNCb2xkKVxuICBjb25zdCB3aWR0aCA9IG1lYXN1cmVDb250ZXh0Lm1lYXN1cmVUZXh0KGNvbnRlbnQpLndpZHRoXG4gIG1lYXN1cmVDb250ZXh0LmZvbnQgPSBwcmV2aW91c0ZvbnRcbiAgcmV0dXJuIHdpZHRoXG59XG5cbmNvbnN0IHJlc29sdmVUb2tlbkNhdGVnb3J5ID0gKHRva2VuOiBUaGVtZWRUb2tlbikgPT4ge1xuICBjb25zdCBzY29wZXMgPVxuICAgIHRva2VuLmV4cGxhbmF0aW9uPy5mbGF0TWFwKChleHBsYW5hdGlvbikgPT5cbiAgICAgIGV4cGxhbmF0aW9uLnNjb3Blcy5tYXAoKHNjb3BlKSA9PiBzY29wZS5zY29wZU5hbWUpXG4gICAgKSA/PyBbXVxuICByZXR1cm4gY2F0ZWdvcml6ZVRva2VuKHNjb3Blcylcbn1cblxudHlwZSBNZWFzdXJlZFRva2VuID0ge1xuICBjYXRlZ29yeTogVG9rZW5DYXRlZ29yeVxuICBjb2xvcjogc3RyaW5nXG4gIGNvbnRlbnQ6IHN0cmluZ1xuICBmb250U3R5bGU6IG51bWJlclxuICB3aWR0aDogbnVtYmVyXG59XG5cbnR5cGUgTWVhc3VyZWRMaW5lID0ge1xuICB0b2tlbnM6IE1lYXN1cmVkVG9rZW5bXVxuICB3aWR0aDogbnVtYmVyXG59XG5cbmV4cG9ydCB0eXBlIE1lYXN1cmVkU2NlbmUgPSB7XG4gIGJhY2tncm91bmQ6IHN0cmluZ1xuICBibG9ja0hlaWdodDogbnVtYmVyXG4gIGJsb2NrV2lkdGg6IG51bWJlclxuICBjb250ZW50SGVpZ2h0OiBudW1iZXJcbiAgY29udGVudFdpZHRoOiBudW1iZXJcbiAgZm9yZWdyb3VuZDogc3RyaW5nXG4gIGxpbmVzOiBNZWFzdXJlZExpbmVbXVxuICB0b2tlbnM6IFRoZW1lZFRva2VuW11bXVxufVxuXG5leHBvcnQgY29uc3QgbWVhc3VyZVNjZW5lID0gRWZmZWN0LmZuKGZ1bmN0aW9uKiBtZWFzdXJlU2NlbmUoXG4gIGNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBjb250ZXh0OiBDYW52YXNDb250ZXh0LFxuICBjb2RlQmxvY2s6IENvZGVCbG9jayxcbiAgdGhlbWU6IEJ1bmRsZWRUaGVtZVxuKSB7XG4gIHJldHVybiB5aWVsZCogRWZmZWN0LnRyeVByb21pc2Uoe1xuICAgIGNhdGNoOiAoY2F1c2U6IHVua25vd24pID0+IG5ldyBTY2VuZU1lYXN1cmVGYWlsZWQoeyBjYXVzZSB9KSxcbiAgICB0cnk6IGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHRva2VuUmVzdWx0ID0gYXdhaXQgY29kZVRvVG9rZW5zKGNvZGVCbG9jay5jb2RlLCB7XG4gICAgICAgIGluY2x1ZGVFeHBsYW5hdGlvbjogXCJzY29wZU5hbWVcIixcbiAgICAgICAgbGFuZzogY29kZUJsb2NrLmxhbmd1YWdlLFxuICAgICAgICB0aGVtZSxcbiAgICAgIH0pXG5cbiAgICAgIGNvbnN0IHRva2VucyA9IHRva2VuUmVzdWx0LnRva2Vuc1xuICAgICAgY29uc3QgZm9yZWdyb3VuZCA9IHRva2VuUmVzdWx0LmZnID8/IGNvbmZpZy5mb3JlZ3JvdW5kXG4gICAgICBjb25zdCBiYWNrZ3JvdW5kID0gdG9rZW5SZXN1bHQuYmcgPz8gY29uZmlnLmJhY2tncm91bmRcblxuICAgICAgY29uc3QgbGluZU1ldHJpY3MgPSB0b2tlbnMubWFwKChsaW5lVG9rZW5zKSA9PiB7XG4gICAgICAgIGNvbnN0IG1ldHJpY3M6IE1lYXN1cmVkVG9rZW5bXSA9IFtdXG4gICAgICAgIGxldCBsaW5lV2lkdGggPSAwXG5cbiAgICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiBsaW5lVG9rZW5zKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IG5vcm1hbGl6ZVRva2VuQ29udGVudChjb25maWcsIHRva2VuLmNvbnRlbnQpXG4gICAgICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IHN0eWxlRmxhZ3MgPSB0b2tlbi5mb250U3R5bGUgPz8gRk9OVF9TVFlMRV9OT05FXG4gICAgICAgICAgY29uc3QgaXNJdGFsaWMgPSAoc3R5bGVGbGFncyAmIEZPTlRfU1RZTEVfSVRBTElDKSA9PT0gRk9OVF9TVFlMRV9JVEFMSUNcbiAgICAgICAgICBjb25zdCBpc0JvbGQgPSAoc3R5bGVGbGFncyAmIEZPTlRfU1RZTEVfQk9MRCkgPT09IEZPTlRfU1RZTEVfQk9MRFxuICAgICAgICAgIGNvbnN0IHdpZHRoID0gbWVhc3VyZVRva2VuV2lkdGgoY29uZmlnLCBjb250ZXh0LCBjb250ZW50LCBpc0l0YWxpYywgaXNCb2xkKVxuICAgICAgICAgIGNvbnN0IGNvbG9yID0gdG9rZW4uY29sb3IgPz8gZm9yZWdyb3VuZFxuXG4gICAgICAgICAgbWV0cmljcy5wdXNoKHtcbiAgICAgICAgICAgIGNhdGVnb3J5OiByZXNvbHZlVG9rZW5DYXRlZ29yeSh0b2tlbiksXG4gICAgICAgICAgICBjb2xvcixcbiAgICAgICAgICAgIGNvbnRlbnQsXG4gICAgICAgICAgICBmb250U3R5bGU6IHN0eWxlRmxhZ3MsXG4gICAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICB9KVxuICAgICAgICAgIGxpbmVXaWR0aCArPSB3aWR0aFxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0b2tlbnM6IG1ldHJpY3MsXG4gICAgICAgICAgd2lkdGg6IGxpbmVXaWR0aCxcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgICAgY29uc3QgbWF4TGluZVdpZHRoID1cbiAgICAgICAgbGluZU1ldHJpY3MubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLmxpbmVNZXRyaWNzLm1hcCgobGluZSkgPT4gbGluZS53aWR0aCkpIDogMFxuICAgICAgY29uc3QgY29udGVudFdpZHRoID0gTWF0aC5tYXgoMCwgbWF4TGluZVdpZHRoKVxuICAgICAgY29uc3QgY29udGVudEhlaWdodCA9IHRva2Vucy5sZW5ndGggKiBjb25maWcubGluZUhlaWdodFxuICAgICAgY29uc3QgYmxvY2tXaWR0aCA9IGNvbnRlbnRXaWR0aCArIGNvbmZpZy5wYWRkaW5nICogMlxuICAgICAgY29uc3QgYmxvY2tIZWlnaHQgPSBjb250ZW50SGVpZ2h0ICsgY29uZmlnLnBhZGRpbmcgKiAyXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGJhY2tncm91bmQsXG4gICAgICAgIGJsb2NrSGVpZ2h0LFxuICAgICAgICBibG9ja1dpZHRoLFxuICAgICAgICBjb250ZW50SGVpZ2h0LFxuICAgICAgICBjb250ZW50V2lkdGgsXG4gICAgICAgIGZvcmVncm91bmQsXG4gICAgICAgIGxpbmVzOiBsaW5lTWV0cmljcyxcbiAgICAgICAgdG9rZW5zLFxuICAgICAgfSBzYXRpc2ZpZXMgTWVhc3VyZWRTY2VuZVxuICAgIH0sXG4gIH0pXG59KVxuXG5leHBvcnQgY29uc3QgcmVzb2x2ZUZyYW1lU2l6ZSA9IChjb25maWc6IFJlbmRlckNvbmZpZywgbWVhc3VyZWRTY2VuZXM6IE1lYXN1cmVkU2NlbmVbXSkgPT4ge1xuICBjb25zdCBtYXhCbG9ja1dpZHRoID1cbiAgICBtZWFzdXJlZFNjZW5lcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4ubWVhc3VyZWRTY2VuZXMubWFwKChzY2VuZSkgPT4gc2NlbmUuYmxvY2tXaWR0aCkpIDogMFxuICBjb25zdCBtYXhCbG9ja0hlaWdodCA9XG4gICAgbWVhc3VyZWRTY2VuZXMubGVuZ3RoID4gMCA/IE1hdGgubWF4KC4uLm1lYXN1cmVkU2NlbmVzLm1hcCgoc2NlbmUpID0+IHNjZW5lLmJsb2NrSGVpZ2h0KSkgOiAwXG5cbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IE1hdGgubWF4KGNvbmZpZy5oZWlnaHQsIE1hdGguY2VpbChtYXhCbG9ja0hlaWdodCkpLFxuICAgIHdpZHRoOiBNYXRoLm1heChjb25maWcud2lkdGgsIE1hdGguY2VpbChtYXhCbG9ja1dpZHRoKSksXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGxheW91dFNjZW5lID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgbWVhc3VyZWQ6IE1lYXN1cmVkU2NlbmUsXG4gIGZyYW1lV2lkdGg6IG51bWJlcixcbiAgZnJhbWVIZWlnaHQ6IG51bWJlclxuKTogU2NlbmUgPT4ge1xuICBjb25zdCBibG9ja1ggPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChmcmFtZVdpZHRoIC0gbWVhc3VyZWQuYmxvY2tXaWR0aCkgLyAyKSlcbiAgY29uc3QgYmxvY2tZID0gTWF0aC5tYXgoMCwgTWF0aC5yb3VuZCgoZnJhbWVIZWlnaHQgLSBtZWFzdXJlZC5ibG9ja0hlaWdodCkgLyAyKSlcblxuICBjb25zdCBsYXlvdXQ6IFNjZW5lTGF5b3V0ID0ge1xuICAgIGxpbmVzOiBtZWFzdXJlZC5saW5lcy5tYXAoKGxpbmUsIGxpbmVJbmRleCkgPT4ge1xuICAgICAgbGV0IGN1cnNvclggPSBibG9ja1ggKyBjb25maWcucGFkZGluZ1xuICAgICAgY29uc3QgY3Vyc29yWSA9IGJsb2NrWSArIGNvbmZpZy5wYWRkaW5nICsgbGluZUluZGV4ICogY29uZmlnLmxpbmVIZWlnaHRcbiAgICAgIGNvbnN0IGxheW91dFRva2VuczogTGF5b3V0VG9rZW5bXSA9IGxpbmUudG9rZW5zLm1hcCgodG9rZW4pID0+IHtcbiAgICAgICAgY29uc3QgbGF5b3V0VG9rZW4gPSB7XG4gICAgICAgICAgLi4udG9rZW4sXG4gICAgICAgICAgeDogTWF0aC5yb3VuZChjdXJzb3JYKSxcbiAgICAgICAgICB5OiBNYXRoLnJvdW5kKGN1cnNvclkpLFxuICAgICAgICB9XG4gICAgICAgIGN1cnNvclggKz0gdG9rZW4ud2lkdGhcbiAgICAgICAgcmV0dXJuIGxheW91dFRva2VuXG4gICAgICB9KVxuXG4gICAgICByZXR1cm4ge1xuICAgICAgICB0b2tlbnM6IGxheW91dFRva2VucyxcbiAgICAgIH1cbiAgICB9KSxcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgYmFja2dyb3VuZDogbWVhc3VyZWQuYmFja2dyb3VuZCxcbiAgICBibG9ja1gsXG4gICAgYmxvY2tZLFxuICAgIGNvbnRlbnRIZWlnaHQ6IG1lYXN1cmVkLmNvbnRlbnRIZWlnaHQsXG4gICAgY29udGVudFdpZHRoOiBtZWFzdXJlZC5jb250ZW50V2lkdGgsXG4gICAgZm9yZWdyb3VuZDogbWVhc3VyZWQuZm9yZWdyb3VuZCxcbiAgICBsYXlvdXQsXG4gICAgdG9rZW5zOiBtZWFzdXJlZC50b2tlbnMsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHJlbmRlclNjZW5lVGV4dCA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGNvbnRleHQ6IENhbnZhc0NvbnRleHQsXG4gIHNjZW5lOiBTY2VuZSxcbiAgb3BhY2l0eTogbnVtYmVyLFxuICBibG9ja1g6IG51bWJlcixcbiAgYmxvY2tZOiBudW1iZXJcbikgPT4ge1xuICBpZiAob3BhY2l0eSA8PSAwKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB0ZXh0Q29udGV4dCA9IGNvbnRleHRcbiAgY29uc3Qgc3RhcnRYID0gYmxvY2tYICsgY29uZmlnLnBhZGRpbmdcbiAgY29uc3Qgc3RhcnRZID0gYmxvY2tZICsgY29uZmlnLnBhZGRpbmdcbiAgY29uc3QgcHJldmlvdXNBbHBoYSA9IHRleHRDb250ZXh0Lmdsb2JhbEFscGhhXG4gIGNvbnN0IHByZXZpb3VzQmFzZWxpbmUgPSB0ZXh0Q29udGV4dC50ZXh0QmFzZWxpbmVcbiAgY29uc3QgcHJldmlvdXNBbGlnbiA9IHRleHRDb250ZXh0LnRleHRBbGlnblxuICBjb25zdCBwcmV2aW91c0ZvbnQgPSB0ZXh0Q29udGV4dC5mb250XG4gIGNvbnN0IHByZXZpb3VzRmlsbFN0eWxlID0gdGV4dENvbnRleHQuZmlsbFN0eWxlXG5cbiAgdGV4dENvbnRleHQuZ2xvYmFsQWxwaGEgPSBvcGFjaXR5XG4gIHRleHRDb250ZXh0LnRleHRCYXNlbGluZSA9IFwidG9wXCJcbiAgdGV4dENvbnRleHQudGV4dEFsaWduID0gXCJsZWZ0XCJcblxuICBmb3IgKGxldCBsaW5lSW5kZXggPSAwOyBsaW5lSW5kZXggPCBzY2VuZS50b2tlbnMubGVuZ3RoOyBsaW5lSW5kZXggKz0gMSkge1xuICAgIGNvbnN0IGxpbmVUb2tlbnMgPSBzY2VuZS50b2tlbnNbbGluZUluZGV4XSA/PyBbXVxuICAgIGxldCBjdXJzb3JYID0gc3RhcnRYXG4gICAgY29uc3QgY3Vyc29yWSA9IHN0YXJ0WSArIGxpbmVJbmRleCAqIGNvbmZpZy5saW5lSGVpZ2h0XG5cbiAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGxpbmVUb2tlbnMpIHtcbiAgICAgIGNvbnN0IGNvbnRlbnQgPSBub3JtYWxpemVUb2tlbkNvbnRlbnQoY29uZmlnLCB0b2tlbi5jb250ZW50KVxuICAgICAgaWYgKCFjb250ZW50KSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZvbnRTdHlsZSA9IHRva2VuLmZvbnRTdHlsZSA/PyBGT05UX1NUWUxFX05PTkVcbiAgICAgIGNvbnN0IGlzSXRhbGljID0gKGZvbnRTdHlsZSAmIEZPTlRfU1RZTEVfSVRBTElDKSA9PT0gRk9OVF9TVFlMRV9JVEFMSUNcbiAgICAgIGNvbnN0IGlzQm9sZCA9IChmb250U3R5bGUgJiBGT05UX1NUWUxFX0JPTEQpID09PSBGT05UX1NUWUxFX0JPTERcbiAgICAgIGNvbnN0IGlzVW5kZXJsaW5lID0gKGZvbnRTdHlsZSAmIEZPTlRfU1RZTEVfVU5ERVJMSU5FKSA9PT0gRk9OVF9TVFlMRV9VTkRFUkxJTkVcblxuICAgICAgdGV4dENvbnRleHQuZm9udCA9IGJ1aWxkRm9udChjb25maWcsIGlzSXRhbGljLCBpc0JvbGQpXG4gICAgICB0ZXh0Q29udGV4dC5maWxsU3R5bGUgPSB0b2tlbi5jb2xvciA/PyBzY2VuZS5mb3JlZ3JvdW5kXG4gICAgICB0ZXh0Q29udGV4dC5maWxsVGV4dChjb250ZW50LCBNYXRoLnJvdW5kKGN1cnNvclgpLCBNYXRoLnJvdW5kKGN1cnNvclkpKVxuXG4gICAgICBjb25zdCB0b2tlbldpZHRoID0gdGV4dENvbnRleHQubWVhc3VyZVRleHQoY29udGVudCkud2lkdGhcblxuICAgICAgaWYgKGlzVW5kZXJsaW5lKSB7XG4gICAgICAgIGRyYXdVbmRlcmxpbmUoY29uZmlnLCB0ZXh0Q29udGV4dCwgTWF0aC5yb3VuZChjdXJzb3JYKSwgTWF0aC5yb3VuZChjdXJzb3JZKSwgdG9rZW5XaWR0aClcbiAgICAgIH1cblxuICAgICAgY3Vyc29yWCArPSB0b2tlbldpZHRoXG4gICAgfVxuICB9XG5cbiAgdGV4dENvbnRleHQuZ2xvYmFsQWxwaGEgPSBwcmV2aW91c0FscGhhXG4gIHRleHRDb250ZXh0LnRleHRCYXNlbGluZSA9IHByZXZpb3VzQmFzZWxpbmVcbiAgdGV4dENvbnRleHQudGV4dEFsaWduID0gcHJldmlvdXNBbGlnblxuICB0ZXh0Q29udGV4dC5mb250ID0gcHJldmlvdXNGb250XG4gIHRleHRDb250ZXh0LmZpbGxTdHlsZSA9IHByZXZpb3VzRmlsbFN0eWxlXG59XG4iLAogICAgImV4cG9ydCBjb25zdCBGT05UX1NUWUxFX05PTkUgPSAwXG5leHBvcnQgY29uc3QgRk9OVF9TVFlMRV9JVEFMSUMgPSAxXG5leHBvcnQgY29uc3QgRk9OVF9TVFlMRV9CT0xEID0gMlxuZXhwb3J0IGNvbnN0IEZPTlRfU1RZTEVfVU5ERVJMSU5FID0gNFxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbnZhc0NvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCJcbmltcG9ydCB0eXBlIHsgUmVuZGVyQ29uZmlnIH0gZnJvbSBcIi4vdHlwZXNcIlxuXG5leHBvcnQgY29uc3QgYnVpbGRGb250ID0gKGNvbmZpZzogUmVuZGVyQ29uZmlnLCBpc0l0YWxpYzogYm9vbGVhbiwgaXNCb2xkOiBib29sZWFuKSA9PiB7XG4gIGNvbnN0IHN0eWxlID0gYCR7aXNJdGFsaWMgPyBcIml0YWxpYyBcIiA6IFwiXCJ9JHtpc0JvbGQgPyBcImJvbGQgXCIgOiBcIlwifWBcbiAgcmV0dXJuIGAke3N0eWxlfSR7Y29uZmlnLmZvbnRTaXplfXB4ICR7Y29uZmlnLmZvbnRGYW1pbHl9YFxufVxuXG5leHBvcnQgY29uc3QgZHJhd1VuZGVybGluZSA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGNvbnRleHQ6IENhbnZhc0NvbnRleHQsXG4gIHg6IG51bWJlcixcbiAgeTogbnVtYmVyLFxuICB3aWR0aDogbnVtYmVyXG4pID0+IHtcbiAgY29uc3QgZHJhd0NvbnRleHQgPSBjb250ZXh0XG4gIGNvbnN0IHByZXZpb3VzU3Ryb2tlU3R5bGUgPSBkcmF3Q29udGV4dC5zdHJva2VTdHlsZVxuICBjb25zdCBwcmV2aW91c0xpbmVXaWR0aCA9IGRyYXdDb250ZXh0LmxpbmVXaWR0aFxuICBjb25zdCB1bmRlcmxpbmVZID0geSArIGNvbmZpZy5mb250U2l6ZSArIDJcblxuICBkcmF3Q29udGV4dC5zdHJva2VTdHlsZSA9IGRyYXdDb250ZXh0LmZpbGxTdHlsZVxuICBkcmF3Q29udGV4dC5saW5lV2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLmZsb29yKGNvbmZpZy5mb250U2l6ZSAvIDEyKSlcbiAgZHJhd0NvbnRleHQuYmVnaW5QYXRoKClcbiAgZHJhd0NvbnRleHQubW92ZVRvKHgsIHVuZGVybGluZVkpXG4gIGRyYXdDb250ZXh0LmxpbmVUbyh4ICsgd2lkdGgsIHVuZGVybGluZVkpXG4gIGRyYXdDb250ZXh0LnN0cm9rZSgpXG5cbiAgZHJhd0NvbnRleHQuc3Ryb2tlU3R5bGUgPSBwcmV2aW91c1N0cm9rZVN0eWxlXG4gIGRyYXdDb250ZXh0LmxpbmVXaWR0aCA9IHByZXZpb3VzTGluZVdpZHRoXG59XG4iLAogICAgImltcG9ydCB0eXBlIHsgVG9rZW5DYXRlZ29yeSB9IGZyb20gXCIuL3R5cGVzXCJcblxuY29uc3QgU0NPUEVfVE9fQ0FURUdPUlk6IEFycmF5PFtSZWdFeHAsIFRva2VuQ2F0ZWdvcnldPiA9IFtcbiAgWy9ea2V5d29yZFxcLm9wZXJhdG9yLywgXCJvcGVyYXRvclwiXSxcbiAgWy9ea2V5d29yZFxcLi8sIFwia2V5d29yZFwiXSxcbiAgWy9ec3RvcmFnZVxcLnR5cGUvLCBcImtleXdvcmRcIl0sXG4gIFsvXnN0b3JhZ2VcXC5tb2RpZmllci8sIFwia2V5d29yZFwiXSxcbiAgWy9eZW50aXR5XFwubmFtZVxcLmZ1bmN0aW9uLywgXCJmdW5jdGlvblwiXSxcbiAgWy9eZW50aXR5XFwubmFtZVxcLnR5cGUvLCBcInR5cGVcIl0sXG4gIFsvXmVudGl0eVxcLm5hbWVcXC5jbGFzcy8sIFwidHlwZVwiXSxcbiAgWy9ec3RyaW5nXFwuLywgXCJzdHJpbmdcIl0sXG4gIFsvXmNvbnN0YW50XFwubnVtZXJpYy8sIFwibnVtYmVyXCJdLFxuICBbL15jb21tZW50XFwuLywgXCJjb21tZW50XCJdLFxuICBbL15wdW5jdHVhdGlvblxcLi8sIFwicHVuY3R1YXRpb25cIl0sXG4gIFsvXm1ldGFcXC5icmFjZS8sIFwicHVuY3R1YXRpb25cIl0sXG4gIFsvXnZhcmlhYmxlXFwuLywgXCJpZGVudGlmaWVyXCJdLFxuICBbL15lbnRpdHlcXC5uYW1lXFwuLywgXCJpZGVudGlmaWVyXCJdLFxuXVxuXG5leHBvcnQgY29uc3QgY2F0ZWdvcml6ZVRva2VuID0gKHNjb3Blczogc3RyaW5nW10pOiBUb2tlbkNhdGVnb3J5ID0+IHtcbiAgZm9yIChjb25zdCBzY29wZSBvZiBzY29wZXMpIHtcbiAgICBpZiAoIXNjb3BlKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cbiAgICBpZiAoc2NvcGUuc3RhcnRzV2l0aChcInN0cmluZy5cIikpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiXG4gICAgfVxuICAgIGlmIChzY29wZS5zdGFydHNXaXRoKFwicHVuY3R1YXRpb24uZGVmaW5pdGlvbi5zdHJpbmdcIikpIHtcbiAgICAgIHJldHVybiBcInN0cmluZ1wiXG4gICAgfVxuICB9XG5cbiAgZm9yIChsZXQgaW5kZXggPSBzY29wZXMubGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXggLT0gMSkge1xuICAgIGNvbnN0IHNjb3BlID0gc2NvcGVzW2luZGV4XVxuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGZvciAoY29uc3QgW3BhdHRlcm4sIGNhdGVnb3J5XSBvZiBTQ09QRV9UT19DQVRFR09SWSkge1xuICAgICAgaWYgKHBhdHRlcm4udGVzdChzY29wZSkpIHtcbiAgICAgICAgcmV0dXJuIGNhdGVnb3J5XG4gICAgICB9XG4gICAgfVxuICB9XG4gIHJldHVybiBcIm90aGVyXCJcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBDYW52YXNDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiXG5pbXBvcnQgdHlwZSB7IERyYXdUb2tlbiwgTGF5b3V0VG9rZW4sIFJlbmRlckNvbmZpZywgU2NlbmUsIFRyYW5zaXRpb25EaWZmIH0gZnJvbSBcIi4vdHlwZXNcIlxuaW1wb3J0IHsgYmxlbmRDb2xvcnMsIGxlcnAgfSBmcm9tIFwiLi9jb2xvclwiXG5pbXBvcnQgeyBGT05UX1NUWUxFX0JPTEQsIEZPTlRfU1RZTEVfSVRBTElDLCBGT05UX1NUWUxFX1VOREVSTElORSB9IGZyb20gXCIuL2NvbnN0YW50c1wiXG5pbXBvcnQgeyBidWlsZEZvbnQsIGRyYXdVbmRlcmxpbmUgfSBmcm9tIFwiLi90ZXh0XCJcblxuY29uc3QgYnVpbGRFeGFjdEtleSA9ICh0b2tlbjogTGF5b3V0VG9rZW4pID0+IGBleGFjdDo6JHt0b2tlbi5jb250ZW50fTo6JHt0b2tlbi5mb250U3R5bGV9YFxuY29uc3QgYnVpbGRDYXRlZ29yeUtleSA9ICh0b2tlbjogTGF5b3V0VG9rZW4pID0+IGBjYXRlZ29yeTo6JHt0b2tlbi5jYXRlZ29yeX1gXG5cbmNvbnN0IGJ1aWxkVG9rZW5TZXF1ZW5jZSA9ICh0b2tlbnM6IExheW91dFRva2VuW10sIGJ1aWxkS2V5OiAodG9rZW46IExheW91dFRva2VuKSA9PiBzdHJpbmcpID0+XG4gIHRva2Vucy5tYXAoKHRva2VuKSA9PiAoe1xuICAgIGtleTogYnVpbGRLZXkodG9rZW4pLFxuICAgIHRva2VuLFxuICB9KSlcblxudHlwZSBUb2tlbldpdGhJbmRleCA9IHtcbiAgaW5kZXg6IG51bWJlclxuICB0b2tlbjogTGF5b3V0VG9rZW5cbn1cblxuY29uc3QgZ3JvdXBCeUtleSA9ICh0b2tlbnM6IExheW91dFRva2VuW10sIGJ1aWxkS2V5OiAodG9rZW46IExheW91dFRva2VuKSA9PiBzdHJpbmcpID0+IHtcbiAgY29uc3QgZ3JvdXBlZCA9IG5ldyBNYXA8c3RyaW5nLCBUb2tlbldpdGhJbmRleFtdPigpXG4gIHRva2Vucy5mb3JFYWNoKCh0b2tlbiwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBrZXkgPSBidWlsZEtleSh0b2tlbilcbiAgICBjb25zdCBncm91cCA9IGdyb3VwZWQuZ2V0KGtleSkgPz8gW11cbiAgICBncm91cC5wdXNoKHsgaW5kZXgsIHRva2VuIH0pXG4gICAgZ3JvdXBlZC5zZXQoa2V5LCBncm91cClcbiAgfSlcbiAgcmV0dXJuIGdyb3VwZWRcbn1cblxuY29uc3QgZGlmZkJ5S2V5ID0gKFxuICBmcm9tVG9rZW5zOiBMYXlvdXRUb2tlbltdLFxuICB0b1Rva2VuczogTGF5b3V0VG9rZW5bXSxcbiAgYnVpbGRLZXk6ICh0b2tlbjogTGF5b3V0VG9rZW4pID0+IHN0cmluZ1xuKSA9PiB7XG4gIGNvbnN0IGZyb21JdGVtcyA9IGJ1aWxkVG9rZW5TZXF1ZW5jZShmcm9tVG9rZW5zLCBidWlsZEtleSlcbiAgY29uc3QgdG9JdGVtcyA9IGJ1aWxkVG9rZW5TZXF1ZW5jZSh0b1Rva2VucywgYnVpbGRLZXkpXG4gIGNvbnN0IGZyb21LZXlzID0gZnJvbUl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5rZXkpXG4gIGNvbnN0IHRvS2V5cyA9IHRvSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmtleSlcbiAgY29uc3QgbWF0cml4ID0gQXJyYXkuZnJvbSh7IGxlbmd0aDogZnJvbUtleXMubGVuZ3RoICsgMSB9LCAoKSA9PlxuICAgIEFycmF5LmZyb20oeyBsZW5ndGg6IHRvS2V5cy5sZW5ndGggKyAxIH0sICgpID0+IDApXG4gIClcblxuICBmb3IgKGxldCBpID0gZnJvbUtleXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpIC09IDEpIHtcbiAgICBjb25zdCByb3cgPSBtYXRyaXhbaV1cbiAgICBpZiAoIXJvdykge1xuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICBmb3IgKGxldCBqID0gdG9LZXlzLmxlbmd0aCAtIDE7IGogPj0gMDsgaiAtPSAxKSB7XG4gICAgICBjb25zdCBmcm9tS2V5ID0gZnJvbUtleXNbaV0gPz8gXCJcIlxuICAgICAgY29uc3QgdG9LZXkgPSB0b0tleXNbal0gPz8gXCJcIlxuXG4gICAgICBpZiAoZnJvbUtleSA9PT0gdG9LZXkpIHtcbiAgICAgICAgcm93W2pdID0gKG1hdHJpeFtpICsgMV0/LltqICsgMV0gPz8gMCkgKyAxXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBuZXh0Um93ID0gbWF0cml4W2kgKyAxXVxuICAgICAgICBjb25zdCBjdXJyZW50Um93ID0gbWF0cml4W2ldXG4gICAgICAgIHJvd1tqXSA9IE1hdGgubWF4KG5leHRSb3c/LltqXSA/PyAwLCBjdXJyZW50Um93Py5baiArIDFdID8/IDApXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWF0Y2hlczogQXJyYXk8W251bWJlciwgbnVtYmVyXT4gPSBbXVxuICBsZXQgaSA9IDBcbiAgbGV0IGogPSAwXG5cbiAgd2hpbGUgKGkgPCBmcm9tS2V5cy5sZW5ndGggJiYgaiA8IHRvS2V5cy5sZW5ndGgpIHtcbiAgICBjb25zdCBmcm9tS2V5ID0gZnJvbUtleXNbaV0gPz8gXCJcIlxuICAgIGNvbnN0IHRvS2V5ID0gdG9LZXlzW2pdID8/IFwiXCJcblxuICAgIGlmIChmcm9tS2V5ID09PSB0b0tleSkge1xuICAgICAgbWF0Y2hlcy5wdXNoKFtpLCBqXSlcbiAgICAgIGkgKz0gMVxuICAgICAgaiArPSAxXG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHNraXBGcm9tID0gbWF0cml4W2kgKyAxXT8uW2pdID8/IDBcbiAgICBjb25zdCBza2lwVG8gPSBtYXRyaXhbaV0/LltqICsgMV0gPz8gMFxuXG4gICAgaWYgKHNraXBGcm9tID49IHNraXBUbykge1xuICAgICAgaSArPSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIGogKz0gMVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IG1hdGNoZWRGcm9tID0gbmV3IFNldChtYXRjaGVzLm1hcCgoW2luZGV4XSkgPT4gaW5kZXgpKVxuICBjb25zdCBtYXRjaGVkVG8gPSBuZXcgU2V0KG1hdGNoZXMubWFwKChbLCBpbmRleF0pID0+IGluZGV4KSlcblxuICBjb25zdCBtYXRjaGVkID0gbWF0Y2hlcy5mbGF0TWFwKChbZnJvbUluZGV4LCB0b0luZGV4XSkgPT4ge1xuICAgIGNvbnN0IGZyb21JdGVtID0gZnJvbUl0ZW1zW2Zyb21JbmRleF1cbiAgICBjb25zdCB0b0l0ZW0gPSB0b0l0ZW1zW3RvSW5kZXhdXG5cbiAgICBpZiAoIWZyb21JdGVtIHx8ICF0b0l0ZW0pIHtcbiAgICAgIHJldHVybiBbXVxuICAgIH1cblxuICAgIHJldHVybiBbeyBmcm9tOiBmcm9tSXRlbS50b2tlbiwgdG86IHRvSXRlbS50b2tlbiB9XVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgYWRkZWQ6IHRvSXRlbXMuZmlsdGVyKChfLCBpbmRleCkgPT4gIW1hdGNoZWRUby5oYXMoaW5kZXgpKS5tYXAoKGl0ZW0pID0+IGl0ZW0udG9rZW4pLFxuICAgIG1hdGNoZWQsXG4gICAgcmVtb3ZlZDogZnJvbUl0ZW1zLmZpbHRlcigoXywgaW5kZXgpID0+ICFtYXRjaGVkRnJvbS5oYXMoaW5kZXgpKS5tYXAoKGl0ZW0pID0+IGl0ZW0udG9rZW4pLFxuICB9XG59XG5cbmNvbnN0IG1hdGNoQnlDYXRlZ29yeSA9IChyZW1vdmVkOiBMYXlvdXRUb2tlbltdLCBhZGRlZDogTGF5b3V0VG9rZW5bXSkgPT4ge1xuICBjb25zdCBtYXRjaGVkOiBBcnJheTx7IGZyb206IExheW91dFRva2VuOyB0bzogTGF5b3V0VG9rZW4gfT4gPSBbXVxuICBjb25zdCB1c2VkRnJvbSA9IG5ldyBTZXQ8bnVtYmVyPigpXG4gIGNvbnN0IHVzZWRUbyA9IG5ldyBTZXQ8bnVtYmVyPigpXG4gIGNvbnN0IHJlbW92ZWRCeUNhdGVnb3J5ID0gZ3JvdXBCeUtleShyZW1vdmVkLCBidWlsZENhdGVnb3J5S2V5KVxuICBjb25zdCBhZGRlZEJ5Q2F0ZWdvcnkgPSBncm91cEJ5S2V5KGFkZGVkLCBidWlsZENhdGVnb3J5S2V5KVxuXG4gIGZvciAoY29uc3QgW2NhdGVnb3J5S2V5LCBmcm9tR3JvdXBdIG9mIHJlbW92ZWRCeUNhdGVnb3J5KSB7XG4gICAgY29uc3QgdG9Hcm91cCA9IGFkZGVkQnlDYXRlZ29yeS5nZXQoY2F0ZWdvcnlLZXkpID8/IFtdXG5cbiAgICBmb3IgKGNvbnN0IGZyb21FbnRyeSBvZiBmcm9tR3JvdXApIHtcbiAgICAgIGlmICh1c2VkRnJvbS5oYXMoZnJvbUVudHJ5LmluZGV4KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBsZXQgYmVzdE1hdGNoOiBUb2tlbldpdGhJbmRleCB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgYmVzdERpc3RhbmNlID0gSW5maW5pdHlcblxuICAgICAgZm9yIChjb25zdCB0b0VudHJ5IG9mIHRvR3JvdXApIHtcbiAgICAgICAgaWYgKHVzZWRUby5oYXModG9FbnRyeS5pbmRleCkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPVxuICAgICAgICAgIE1hdGguYWJzKGZyb21FbnRyeS50b2tlbi55IC0gdG9FbnRyeS50b2tlbi55KSAqIDEwMDAgK1xuICAgICAgICAgIE1hdGguYWJzKGZyb21FbnRyeS50b2tlbi54IC0gdG9FbnRyeS50b2tlbi54KVxuXG4gICAgICAgIGlmIChkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlXG4gICAgICAgICAgYmVzdE1hdGNoID0gdG9FbnRyeVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChiZXN0TWF0Y2gpIHtcbiAgICAgICAgbWF0Y2hlZC5wdXNoKHsgZnJvbTogZnJvbUVudHJ5LnRva2VuLCB0bzogYmVzdE1hdGNoLnRva2VuIH0pXG4gICAgICAgIHVzZWRGcm9tLmFkZChmcm9tRW50cnkuaW5kZXgpXG4gICAgICAgIHVzZWRUby5hZGQoYmVzdE1hdGNoLmluZGV4KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2hlZCxcbiAgICBzdGlsbEFkZGVkOiBhZGRlZC5maWx0ZXIoKF8sIGluZGV4KSA9PiAhdXNlZFRvLmhhcyhpbmRleCkpLFxuICAgIHN0aWxsUmVtb3ZlZDogcmVtb3ZlZC5maWx0ZXIoKF8sIGluZGV4KSA9PiAhdXNlZEZyb20uaGFzKGluZGV4KSksXG4gIH1cbn1cblxuY29uc3QgbWF0Y2hCeUV4YWN0Q29udGVudCA9IChyZW1vdmVkOiBMYXlvdXRUb2tlbltdLCBhZGRlZDogTGF5b3V0VG9rZW5bXSkgPT4ge1xuICBjb25zdCBtYXRjaGVkOiBBcnJheTx7IGZyb206IExheW91dFRva2VuOyB0bzogTGF5b3V0VG9rZW4gfT4gPSBbXVxuICBjb25zdCB1c2VkRnJvbSA9IG5ldyBTZXQ8bnVtYmVyPigpXG4gIGNvbnN0IHVzZWRUbyA9IG5ldyBTZXQ8bnVtYmVyPigpXG4gIGNvbnN0IHJlbW92ZWRCeUNvbnRlbnQgPSBncm91cEJ5S2V5KHJlbW92ZWQsIGJ1aWxkRXhhY3RLZXkpXG4gIGNvbnN0IGFkZGVkQnlDb250ZW50ID0gZ3JvdXBCeUtleShhZGRlZCwgYnVpbGRFeGFjdEtleSlcblxuICBmb3IgKGNvbnN0IFtjb250ZW50S2V5LCBmcm9tR3JvdXBdIG9mIHJlbW92ZWRCeUNvbnRlbnQpIHtcbiAgICBjb25zdCB0b0dyb3VwID0gYWRkZWRCeUNvbnRlbnQuZ2V0KGNvbnRlbnRLZXkpID8/IFtdXG5cbiAgICBmb3IgKGNvbnN0IGZyb21FbnRyeSBvZiBmcm9tR3JvdXApIHtcbiAgICAgIGlmICh1c2VkRnJvbS5oYXMoZnJvbUVudHJ5LmluZGV4KSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBsZXQgYmVzdE1hdGNoOiBUb2tlbldpdGhJbmRleCB8IG51bGwgPSBudWxsXG4gICAgICBsZXQgYmVzdERpc3RhbmNlID0gSW5maW5pdHlcblxuICAgICAgZm9yIChjb25zdCB0b0VudHJ5IG9mIHRvR3JvdXApIHtcbiAgICAgICAgaWYgKHVzZWRUby5oYXModG9FbnRyeS5pbmRleCkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPVxuICAgICAgICAgIE1hdGguYWJzKGZyb21FbnRyeS50b2tlbi55IC0gdG9FbnRyeS50b2tlbi55KSAqIDEwMDAgK1xuICAgICAgICAgIE1hdGguYWJzKGZyb21FbnRyeS50b2tlbi54IC0gdG9FbnRyeS50b2tlbi54KVxuXG4gICAgICAgIGlmIChkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlXG4gICAgICAgICAgYmVzdE1hdGNoID0gdG9FbnRyeVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChiZXN0TWF0Y2gpIHtcbiAgICAgICAgbWF0Y2hlZC5wdXNoKHsgZnJvbTogZnJvbUVudHJ5LnRva2VuLCB0bzogYmVzdE1hdGNoLnRva2VuIH0pXG4gICAgICAgIHVzZWRGcm9tLmFkZChmcm9tRW50cnkuaW5kZXgpXG4gICAgICAgIHVzZWRUby5hZGQoYmVzdE1hdGNoLmluZGV4KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgbWF0Y2hlZCxcbiAgICBzdGlsbEFkZGVkOiBhZGRlZC5maWx0ZXIoKF8sIGluZGV4KSA9PiAhdXNlZFRvLmhhcyhpbmRleCkpLFxuICAgIHN0aWxsUmVtb3ZlZDogcmVtb3ZlZC5maWx0ZXIoKF8sIGluZGV4KSA9PiAhdXNlZEZyb20uaGFzKGluZGV4KSksXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGZsYXR0ZW5TY2VuZVRva2VucyA9IChzY2VuZTogU2NlbmUpID0+XG4gIHNjZW5lLmxheW91dC5saW5lcy5mbGF0TWFwKChsaW5lKSA9PiBsaW5lLnRva2VucylcblxuZXhwb3J0IGNvbnN0IGRpZmZMYXlvdXRUb2tlbnMgPSAoZnJvbVRva2VuczogTGF5b3V0VG9rZW5bXSwgdG9Ub2tlbnM6IExheW91dFRva2VuW10pID0+IHtcbiAgY29uc3QgZXhhY3REaWZmID0gZGlmZkJ5S2V5KGZyb21Ub2tlbnMsIHRvVG9rZW5zLCBidWlsZEV4YWN0S2V5KVxuICBjb25zdCBjb250ZW50TWF0Y2hlcyA9IG1hdGNoQnlFeGFjdENvbnRlbnQoZXhhY3REaWZmLnJlbW92ZWQsIGV4YWN0RGlmZi5hZGRlZClcbiAgY29uc3QgY2F0ZWdvcnlNYXRjaGVzID0gbWF0Y2hCeUNhdGVnb3J5KGNvbnRlbnRNYXRjaGVzLnN0aWxsUmVtb3ZlZCwgY29udGVudE1hdGNoZXMuc3RpbGxBZGRlZClcblxuICByZXR1cm4ge1xuICAgIGFkZGVkOiBjYXRlZ29yeU1hdGNoZXMuc3RpbGxBZGRlZCxcbiAgICBtYXRjaGVkOiBbLi4uZXhhY3REaWZmLm1hdGNoZWQsIC4uLmNvbnRlbnRNYXRjaGVzLm1hdGNoZWQsIC4uLmNhdGVnb3J5TWF0Y2hlcy5tYXRjaGVkXSxcbiAgICByZW1vdmVkOiBjYXRlZ29yeU1hdGNoZXMuc3RpbGxSZW1vdmVkLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBidWlsZFRyYW5zaXRpb25EaWZmID0gKGZyb21TY2VuZTogU2NlbmUsIHRvU2NlbmU6IFNjZW5lKSA9PlxuICBkaWZmTGF5b3V0VG9rZW5zKGZsYXR0ZW5TY2VuZVRva2Vucyhmcm9tU2NlbmUpLCBmbGF0dGVuU2NlbmVUb2tlbnModG9TY2VuZSkpXG5cbmV4cG9ydCBjb25zdCBlYXNlSW5PdXRDdWJpYyA9IChwcm9ncmVzczogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGNsYW1wZWQgPSBNYXRoLm1pbigxLCBNYXRoLm1heCgwLCBwcm9ncmVzcykpXG4gIHJldHVybiBjbGFtcGVkIDwgMC41ID8gNCAqIGNsYW1wZWQgKiBjbGFtcGVkICogY2xhbXBlZCA6IDEgLSAoLTIgKiBjbGFtcGVkICsgMikgKiogMyAvIDJcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkVHJhbnNpdGlvblRva2VucyA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGRpZmY6IFRyYW5zaXRpb25EaWZmLFxuICBwcm9ncmVzczogbnVtYmVyXG4pID0+IHtcbiAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHByb2dyZXNzKSlcbiAgY29uc3QgdG9rZW5zOiBEcmF3VG9rZW5bXSA9IFtdXG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiBkaWZmLnJlbW92ZWQpIHtcbiAgICBjb25zdCBvcGFjaXR5ID0gMSAtIGNsYW1wZWRcbiAgICBpZiAob3BhY2l0eSA8PSAwKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIGNvbG9yOiB0b2tlbi5jb2xvcixcbiAgICAgIGNvbnRlbnQ6IHRva2VuLmNvbnRlbnQsXG4gICAgICBmb250U3R5bGU6IHRva2VuLmZvbnRTdHlsZSxcbiAgICAgIG9wYWNpdHksXG4gICAgICB3aWR0aDogdG9rZW4ud2lkdGgsXG4gICAgICB4OiB0b2tlbi54LFxuICAgICAgeTogdG9rZW4ueSAtIGNvbmZpZy50cmFuc2l0aW9uRHJpZnQgKiBjbGFtcGVkLFxuICAgIH0pXG4gIH1cblxuICBmb3IgKGNvbnN0IG1hdGNoIG9mIGRpZmYubWF0Y2hlZCkge1xuICAgIGNvbnN0IHdpZHRoID0gbGVycChtYXRjaC5mcm9tLndpZHRoLCBtYXRjaC50by53aWR0aCwgY2xhbXBlZClcbiAgICBjb25zdCB4ID0gbGVycChtYXRjaC5mcm9tLngsIG1hdGNoLnRvLngsIGNsYW1wZWQpXG4gICAgY29uc3QgeSA9IGxlcnAobWF0Y2guZnJvbS55LCBtYXRjaC50by55LCBjbGFtcGVkKVxuICAgIGNvbnN0IGhhc01pc21hdGNoID1cbiAgICAgIG1hdGNoLmZyb20uY29udGVudCAhPT0gbWF0Y2gudG8uY29udGVudCB8fCBtYXRjaC5mcm9tLmZvbnRTdHlsZSAhPT0gbWF0Y2gudG8uZm9udFN0eWxlXG5cbiAgICBpZiAoaGFzTWlzbWF0Y2gpIHtcbiAgICAgIGNvbnN0IGZyb21PcGFjaXR5ID0gMSAtIGNsYW1wZWRcbiAgICAgIGlmIChmcm9tT3BhY2l0eSA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgIGNvbG9yOiBtYXRjaC5mcm9tLmNvbG9yLFxuICAgICAgICAgIGNvbnRlbnQ6IG1hdGNoLmZyb20uY29udGVudCxcbiAgICAgICAgICBmb250U3R5bGU6IG1hdGNoLmZyb20uZm9udFN0eWxlLFxuICAgICAgICAgIG9wYWNpdHk6IGZyb21PcGFjaXR5LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgdG9PcGFjaXR5ID0gY2xhbXBlZFxuICAgICAgaWYgKHRvT3BhY2l0eSA+IDApIHtcbiAgICAgICAgdG9rZW5zLnB1c2goe1xuICAgICAgICAgIGNvbG9yOiBtYXRjaC50by5jb2xvcixcbiAgICAgICAgICBjb250ZW50OiBtYXRjaC50by5jb250ZW50LFxuICAgICAgICAgIGZvbnRTdHlsZTogbWF0Y2gudG8uZm9udFN0eWxlLFxuICAgICAgICAgIG9wYWNpdHk6IHRvT3BhY2l0eSxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgICB4LFxuICAgICAgICAgIHksXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIGNvbG9yOiBibGVuZENvbG9ycyhtYXRjaC5mcm9tLmNvbG9yLCBtYXRjaC50by5jb2xvciwgY2xhbXBlZCksXG4gICAgICBjb250ZW50OiBtYXRjaC50by5jb250ZW50LFxuICAgICAgZm9udFN0eWxlOiBtYXRjaC50by5mb250U3R5bGUsXG4gICAgICBvcGFjaXR5OiAxLFxuICAgICAgd2lkdGgsXG4gICAgICB4LFxuICAgICAgeSxcbiAgICB9KVxuICB9XG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiBkaWZmLmFkZGVkKSB7XG4gICAgY29uc3Qgb3BhY2l0eSA9IGNsYW1wZWRcbiAgICBpZiAob3BhY2l0eSA8PSAwKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHRva2Vucy5wdXNoKHtcbiAgICAgIGNvbG9yOiB0b2tlbi5jb2xvcixcbiAgICAgIGNvbnRlbnQ6IHRva2VuLmNvbnRlbnQsXG4gICAgICBmb250U3R5bGU6IHRva2VuLmZvbnRTdHlsZSxcbiAgICAgIG9wYWNpdHksXG4gICAgICB3aWR0aDogdG9rZW4ud2lkdGgsXG4gICAgICB4OiB0b2tlbi54LFxuICAgICAgeTogdG9rZW4ueSArIGNvbmZpZy50cmFuc2l0aW9uRHJpZnQgKiAoMSAtIGNsYW1wZWQpLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gdG9rZW5zXG59XG5cbmV4cG9ydCBjb25zdCByZW5kZXJUcmFuc2l0aW9uVG9rZW5zID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgdG9rZW5zOiBEcmF3VG9rZW5bXVxuKSA9PiB7XG4gIGNvbnN0IHRleHRDb250ZXh0ID0gY29udGV4dFxuICBjb25zdCBwcmV2aW91c0FscGhhID0gdGV4dENvbnRleHQuZ2xvYmFsQWxwaGFcbiAgY29uc3QgcHJldmlvdXNCYXNlbGluZSA9IHRleHRDb250ZXh0LnRleHRCYXNlbGluZVxuICBjb25zdCBwcmV2aW91c0FsaWduID0gdGV4dENvbnRleHQudGV4dEFsaWduXG4gIGNvbnN0IHByZXZpb3VzRm9udCA9IHRleHRDb250ZXh0LmZvbnRcbiAgY29uc3QgcHJldmlvdXNGaWxsU3R5bGUgPSB0ZXh0Q29udGV4dC5maWxsU3R5bGVcblxuICB0ZXh0Q29udGV4dC50ZXh0QmFzZWxpbmUgPSBcInRvcFwiXG4gIHRleHRDb250ZXh0LnRleHRBbGlnbiA9IFwibGVmdFwiXG5cbiAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHtcbiAgICBpZiAodG9rZW4ub3BhY2l0eSA8PSAwKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IGZvbnRTdHlsZSA9IHRva2VuLmZvbnRTdHlsZVxuICAgIGNvbnN0IGlzSXRhbGljID0gKGZvbnRTdHlsZSAmIEZPTlRfU1RZTEVfSVRBTElDKSA9PT0gRk9OVF9TVFlMRV9JVEFMSUNcbiAgICBjb25zdCBpc0JvbGQgPSAoZm9udFN0eWxlICYgRk9OVF9TVFlMRV9CT0xEKSA9PT0gRk9OVF9TVFlMRV9CT0xEXG4gICAgY29uc3QgaXNVbmRlcmxpbmUgPSAoZm9udFN0eWxlICYgRk9OVF9TVFlMRV9VTkRFUkxJTkUpID09PSBGT05UX1NUWUxFX1VOREVSTElORVxuXG4gICAgdGV4dENvbnRleHQuZ2xvYmFsQWxwaGEgPSB0b2tlbi5vcGFjaXR5XG4gICAgdGV4dENvbnRleHQuZm9udCA9IGJ1aWxkRm9udChjb25maWcsIGlzSXRhbGljLCBpc0JvbGQpXG4gICAgdGV4dENvbnRleHQuZmlsbFN0eWxlID0gdG9rZW4uY29sb3JcbiAgICB0ZXh0Q29udGV4dC5maWxsVGV4dCh0b2tlbi5jb250ZW50LCBNYXRoLnJvdW5kKHRva2VuLngpLCBNYXRoLnJvdW5kKHRva2VuLnkpKVxuXG4gICAgaWYgKGlzVW5kZXJsaW5lICYmIHRva2VuLndpZHRoID4gMCkge1xuICAgICAgZHJhd1VuZGVybGluZShjb25maWcsIHRleHRDb250ZXh0LCBNYXRoLnJvdW5kKHRva2VuLngpLCBNYXRoLnJvdW5kKHRva2VuLnkpLCB0b2tlbi53aWR0aClcbiAgICB9XG4gIH1cblxuICB0ZXh0Q29udGV4dC5nbG9iYWxBbHBoYSA9IHByZXZpb3VzQWxwaGFcbiAgdGV4dENvbnRleHQudGV4dEJhc2VsaW5lID0gcHJldmlvdXNCYXNlbGluZVxuICB0ZXh0Q29udGV4dC50ZXh0QWxpZ24gPSBwcmV2aW91c0FsaWduXG4gIHRleHRDb250ZXh0LmZvbnQgPSBwcmV2aW91c0ZvbnRcbiAgdGV4dENvbnRleHQuZmlsbFN0eWxlID0gcHJldmlvdXNGaWxsU3R5bGVcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBCdW5kbGVkVGhlbWUgfSBmcm9tIFwic2hpa2lcIlxuaW1wb3J0IHsgT3B0aW9ucyB9IGZyb20gXCJAZWZmZWN0L2NsaVwiXG5cbmNvbnN0IERFRkFVTFRfVEhFTUU6IEJ1bmRsZWRUaGVtZSA9IFwiZ2l0aHViLWRhcmtcIlxuY29uc3QgREVGQVVMVF9XSURUSCA9IDBcbmNvbnN0IERFRkFVTFRfSEVJR0hUID0gMFxuY29uc3QgREVGQVVMVF9GUFMgPSA2MFxuY29uc3QgREVGQVVMVF9CTE9DS19EVVJBVElPTiA9IDJcbmNvbnN0IERFRkFVTFRfVFJBTlNJVElPTl9EVVJBVElPTl9NUyA9IDgwMFxuY29uc3QgREVGQVVMVF9UUkFOU0lUSU9OX0RSSUZUID0gOFxuY29uc3QgREVGQVVMVF9CQUNLR1JPVU5EID0gXCIjMGIwYjBiXCJcbmNvbnN0IERFRkFVTFRfRk9OVF9GQU1JTFkgPVxuICBcIlNGTW9uby1SZWd1bGFyLCBNZW5sbywgTW9uYWNvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZVwiXG5jb25zdCBERUZBVUxUX0ZPTlRfU0laRSA9IDI0XG5jb25zdCBERUZBVUxUX0ZPUkVHUk9VTkQgPSBcIiNlNmU2ZTZcIlxuY29uc3QgREVGQVVMVF9MSU5FX0hFSUdIVCA9IDM0XG5jb25zdCBERUZBVUxUX1BBRERJTkcgPSA2NFxuY29uc3QgVEFCX1JFUExBQ0VNRU5UID0gXCIgIFwiXG5cbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kID0gT3B0aW9ucy50ZXh0KFwiYmFja2dyb3VuZFwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcImJnXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfQkFDS0dST1VORCksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiQmFja2dyb3VuZCBjb2xvciBiZWhpbmQgdGhlIGNvZGVcIilcbilcblxuZXhwb3J0IGNvbnN0IGJsb2NrRHVyYXRpb24gPSBPcHRpb25zLmZsb2F0KFwiYmxvY2stZHVyYXRpb25cIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJiZFwiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX0JMT0NLX0RVUkFUSU9OKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJTZWNvbmRzIGVhY2ggY29kZSBibG9jayBzdGF5cyBvbiBzY3JlZW5cIilcbilcblxuZXhwb3J0IGNvbnN0IGZvbnRGYW1pbHkgPSBPcHRpb25zLnRleHQoXCJmb250LWZhbWlseVwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcImZmXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfRk9OVF9GQU1JTFkpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIkZvbnQgZmFtaWx5IGZvciB0aGUgdGV4dFwiKVxuKVxuXG5leHBvcnQgY29uc3QgZm9udFNpemUgPSBPcHRpb25zLmludGVnZXIoXCJmb250LXNpemVcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJmc1wiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX0ZPTlRfU0laRSksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiRm9udCBzaXplIGluIHBpeGVsc1wiKVxuKVxuXG5leHBvcnQgY29uc3QgZm9yZWdyb3VuZCA9IE9wdGlvbnMudGV4dChcImZvcmVncm91bmRcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJmZ1wiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX0ZPUkVHUk9VTkQpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIkRlZmF1bHQgdGV4dCBjb2xvclwiKVxuKVxuXG5leHBvcnQgY29uc3QgZm9ybWF0ID0gT3B0aW9ucy5jaG9pY2UoXCJmb3JtYXRcIiwgW1wibXA0XCIsIFwid2VibVwiXSBhcyBjb25zdCkucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJmXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KFwibXA0XCIpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIk91dHB1dCBjb250YWluZXIgZm9ybWF0LlwiKVxuKVxuXG5leHBvcnQgY29uc3QgZnBzID0gT3B0aW9ucy5pbnRlZ2VyKFwiZnBzXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwiclwiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX0ZQUyksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiRnJhbWVzIHBlciBzZWNvbmQgZm9yIHRoZSB2aWRlb1wiKVxuKVxuXG5leHBvcnQgY29uc3QgaGVpZ2h0ID0gT3B0aW9ucy5pbnRlZ2VyKFwiaGVpZ2h0XCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwiaFwiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX0hFSUdIVCksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiTWluaW11bSBvdXRwdXQgaGVpZ2h0IGluIHBpeGVscyAoMCA9IGF1dG8pXCIpXG4pXG5cbmV4cG9ydCBjb25zdCBsaW5lSGVpZ2h0ID0gT3B0aW9ucy5pbnRlZ2VyKFwibGluZS1oZWlnaHRcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJsaFwiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX0xJTkVfSEVJR0hUKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJMaW5lIGhlaWdodCBpbiBwaXhlbHNcIilcbilcblxuZXhwb3J0IGNvbnN0IG91dHB1dCA9IE9wdGlvbnMuZmlsZShcIm91dHB1dFwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcIm9cIiksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiRGVzdGluYXRpb24gdmlkZW8gcGF0aFwiKSxcbiAgT3B0aW9ucy5vcHRpb25hbFxuKVxuXG5leHBvcnQgY29uc3QgcGFkZGluZyA9IE9wdGlvbnMuaW50ZWdlcihcInBhZGRpbmdcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJwXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfUEFERElORyksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiUGFkZGluZyBhcm91bmQgdGhlIGNvZGUgYmxvY2sgaW4gcGl4ZWxzXCIpXG4pXG5cbmV4cG9ydCBjb25zdCB0YWJSZXBsYWNlbWVudCA9IE9wdGlvbnMudGV4dChcInRhYi1yZXBsYWNlbWVudFwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcInRiXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KFRBQl9SRVBMQUNFTUVOVCksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiVGV4dCB1c2VkIGluc3RlYWQgb2YgdGFic1wiKVxuKVxuXG5leHBvcnQgY29uc3QgdGhlbWUgPSBPcHRpb25zLnRleHQoXCJ0aGVtZVwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcInRcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoREVGQVVMVF9USEVNRSksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiU2hpa2kgdGhlbWUgZm9yIHN5bnRheCBoaWdobGlnaHRpbmdcIilcbilcblxuZXhwb3J0IGNvbnN0IHRyYW5zaXRpb25EcmlmdCA9IE9wdGlvbnMuZmxvYXQoXCJ0cmFuc2l0aW9uLWRyaWZ0XCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwidGRcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoREVGQVVMVF9UUkFOU0lUSU9OX0RSSUZUKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJQaXhlbCBkcmlmdCBkdXJpbmcgdHJhbnNpdGlvbnNcIilcbilcblxuZXhwb3J0IGNvbnN0IHRyYW5zaXRpb25EdXJhdGlvbk1zID0gT3B0aW9ucy5pbnRlZ2VyKFwidHJhbnNpdGlvblwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcInRyXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfVFJBTlNJVElPTl9EVVJBVElPTl9NUyksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiVHJhbnNpdGlvbiB0aW1lIGJldHdlZW4gc2xpZGVzIGluIG1zXCIpXG4pXG5cbmV4cG9ydCBjb25zdCB3aWR0aCA9IE9wdGlvbnMuaW50ZWdlcihcIndpZHRoXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwid1wiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX1dJRFRIKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJNaW5pbXVtIG91dHB1dCB3aWR0aCBpbiBwaXhlbHMgKDAgPSBhdXRvKVwiKVxuKVxuIgogIF0sCiAgIm1hcHBpbmdzIjogIjtBQUFBLG9CQUFTO0FBQ1Q7QUFDQSxvQkFBUyxvQkFBUzs7O0FDRmxCO0FBQ0E7QUFDQTtBQUNBLDRCQUFrQjs7O0FDSGxCO0FBQUE7QUFJTyxNQUFNLDJCQUEyQixLQUFLLFlBQVksb0JBQW9CLEVBRTFFO0FBQUM7QUFBQTtBQUVHLE1BQU0scUJBQXFCLEtBQUssWUFBWSxjQUFjLEVBQXFCO0FBQUM7QUFBQTtBQUVoRixNQUFNLGlDQUFpQyxLQUFLLFlBQVksMEJBQTBCLEVBR3RGO0FBQUM7QUFBQTtBQUVHLE1BQU0sNEJBQTRCLEtBQUssWUFBWSxxQkFBcUIsRUFFNUU7QUFBQztBQUFBO0FBRUcsTUFBTSwwQkFBMEIsS0FBSyxZQUFZLG1CQUFtQixFQUFxQjtBQUFDO0FBQUE7QUFFMUYsTUFBTSxrQ0FBa0MsS0FBSyxZQUFZLDJCQUEyQixFQUd4RjtBQUFDO0FBQUE7QUFFRyxNQUFNLHNCQUFzQixLQUFLLFlBQVksZUFBZSxFQUdoRTtBQUFDO0FBQUE7QUFFRyxNQUFNLDJCQUEyQixLQUFLLFlBQVksb0JBQW9CLEVBTzFFO0FBQUM7OztBQ3RDSjtBQUNB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Q0osQ0FDRjs7O0FEdExBLElBQU0sVUFBVSxNQUFNO0FBRXRCLElBQU0sT0FBTyxTQUFRLEtBQUssUUFBUSxFQUFFLEtBQ2xDLFNBQVEsZ0JBQWdCLDZDQUE2QyxHQUNyRSxTQUFRLGdCQUFnQixDQUFDLGNBQU0sQ0FBQyxDQUNsQztBQUVBLElBQU0sVUFBVSxTQUFRLElBQUksTUFBTSxFQUFFLE1BQU0sVUFBVSxRQUFRLENBQUM7QUFFN0QsUUFBUSxRQUFRLElBQUksRUFBRSxLQUNwQixRQUFPLFVBQVU7QUFBQSxFQUNmLHdCQUF3QixDQUFDLFVBQ3ZCLFNBQVEsTUFBTSw2QkFBNkIsTUFBTSxPQUFPLEtBQUssSUFBSSxHQUFHO0FBQUEsRUFDdEUsaUJBQWlCLENBQUMsVUFDaEIsU0FBUSxNQUNOLHlCQUF5QixNQUFNLFlBQVksS0FBSyxFQUFFO0FBQUEsSUFDaEQsMERBQ0o7QUFDSixDQUFDLEdBQ0QsUUFBTyxRQUFRLFlBQVksS0FBSyxHQUNoQyxZQUFZLE9BQ2Q7IiwKICAiZGVidWdJZCI6ICIxQzEyNTFBRDQwNDRCNjM2NjQ3NTZFMjE2NDc1NkUyMSIsCiAgIm5hbWVzIjogW10KfQ==
1007
+ //# debugId=0E345B9AB7D2EE6164756E2164756E21
1008
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsic3JjL2luZGV4LnRzIiwgInNyYy9jb21tYW5kcy9yZW5kZXIudHMiLCAic3JjL2xpYi9lcnJvcnMudHMiLCAic3JjL2xpYi9tYXJrZG93bi50cyIsICJzcmMvbGliL3RoZW1lLnRzIiwgInNyYy9saWIvdmlkZW8udHMiLCAic3JjL2xpYi9mZm1wZWcudHMiLCAic3JjL2xpYi9yZW5kZXIudHMiLCAic3JjL2xpYi9jb2xvci50cyIsICJzcmMvbGliL3NjZW5lLnRzIiwgInNyYy9saWIvY29uc3RhbnRzLnRzIiwgInNyYy9saWIvdGV4dC50cyIsICJzcmMvbGliL3Rva2VuLnRzIiwgInNyYy9saWIvdHJhbnNpdGlvbi50cyIsICJzcmMvY29tbWFuZHMvb3B0aW9ucy50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICJpbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIkBlZmZlY3QvY2xpXCJcbmltcG9ydCB7IE5vZGVDb250ZXh0LCBOb2RlUnVudGltZSB9IGZyb20gXCJAZWZmZWN0L3BsYXRmb3JtLW5vZGVcIlxuaW1wb3J0IHsgQ29uc29sZSwgRWZmZWN0IH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgcmVuZGVyIGZyb20gXCIuL2NvbW1hbmRzL3JlbmRlclwiXG5pbXBvcnQgeyByZWFkVmVyc2lvbiB9IGZyb20gXCIuL2NvbW1hbmRzL3ZlcnNpb25cIiB3aXRoIHsgdHlwZTogXCJtYWNyb1wiIH1cblxuY29uc3QgdmVyc2lvbiA9IGF3YWl0IHJlYWRWZXJzaW9uKClcblxuY29uc3QgbWFpbiA9IENvbW1hbmQubWFrZShcInNha3VnYVwiKS5waXBlKFxuICBDb21tYW5kLndpdGhEZXNjcmlwdGlvbihcIkNyZWF0ZSBjb2RlIGFuaW1hdGlvbiB2aWRlb3MgZnJvbSBNYXJrZG93bi5cIiksXG4gIENvbW1hbmQud2l0aFN1YmNvbW1hbmRzKFtyZW5kZXJdKVxuKVxuXG5jb25zdCBwcm9ncmFtID0gQ29tbWFuZC5ydW4obWFpbiwgeyBuYW1lOiBcInNha3VnYVwiLCB2ZXJzaW9uIH0pXG5cbnByb2dyYW0ocHJvY2Vzcy5hcmd2KS5waXBlKFxuICBFZmZlY3QuY2F0Y2hUYWdzKHtcbiAgICBNdWx0aXBsZVZhbHVlc0RldGVjdGVkOiAoZXJyb3IpID0+XG4gICAgICBDb25zb2xlLmVycm9yKGBNdWx0aXBsZSB2YWx1ZXMgZGV0ZWN0ZWQ6ICR7ZXJyb3IudmFsdWVzLmpvaW4oXCIsIFwiKX1gKSxcbiAgICBVbmNsdXN0ZXJlZEZsYWc6IChlcnJvcikgPT5cbiAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIGZsYWcgZm9ybWF0OiBcIiR7ZXJyb3IudW5jbHVzdGVyZWQuam9pbihcIlwiKX1cIi5cXG5gICtcbiAgICAgICAgICBgICBGbGFncyBjYW5ub3QgYmUgY2x1c3RlcmVkLiBVc2Ugc2VwYXJhdGUgZmxhZ3MgaW5zdGVhZC5gXG4gICAgICApLFxuICB9KSxcbiAgRWZmZWN0LnByb3ZpZGUoTm9kZUNvbnRleHQubGF5ZXIpLFxuICBOb2RlUnVudGltZS5ydW5NYWluXG4pXG4iLAogICAgImltcG9ydCB7IEFyZ3MsIENvbW1hbmQgfSBmcm9tIFwiQGVmZmVjdC9jbGlcIlxuaW1wb3J0ICogYXMgRmlsZVN5c3RlbSBmcm9tIFwiQGVmZmVjdC9wbGF0Zm9ybS9GaWxlU3lzdGVtXCJcbmltcG9ydCAqIGFzIFBhdGggZnJvbSBcIkBlZmZlY3QvcGxhdGZvcm0vUGF0aFwiXG5pbXBvcnQgeyBDb25zb2xlLCBFZmZlY3QsIE9wdGlvbiB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHR5cGUgeyBSZW5kZXJDb25maWcgfSBmcm9tIFwiLi4vbGliL3R5cGVzXCJcbmltcG9ydCB7IEludmFsaWRUcmFuc2l0aW9uRHVyYXRpb24sIE5vQ29kZUJsb2Nrc0ZvdW5kIH0gZnJvbSBcIi4uL2xpYi9lcnJvcnNcIlxuaW1wb3J0IHsgcGFyc2VNYXJrZG93bkNvZGVCbG9ja3MgfSBmcm9tIFwiLi4vbGliL21hcmtkb3duXCJcbmltcG9ydCB7IHJlc29sdmVUaGVtZSB9IGZyb20gXCIuLi9saWIvdGhlbWVcIlxuaW1wb3J0IHsgcmVuZGVyVmlkZW8gfSBmcm9tIFwiLi4vbGliL3ZpZGVvXCJcbmltcG9ydCB7XG4gIGJhY2tncm91bmQsXG4gIGJsb2NrRHVyYXRpb24sXG4gIGZvbnRGYW1pbHksXG4gIGZvbnRTaXplLFxuICBmb3JlZ3JvdW5kLFxuICBmb3JtYXQsXG4gIGZwcyxcbiAgaGVpZ2h0LFxuICBsaW5lSGVpZ2h0LFxuICBvdXRwdXQsXG4gIHBhZGRpbmcsXG4gIHRhYlJlcGxhY2VtZW50LFxuICB0aGVtZSxcbiAgdHJhbnNpdGlvbkRyaWZ0LFxuICB0cmFuc2l0aW9uRHVyYXRpb25NcyxcbiAgd2lkdGgsXG59IGZyb20gXCIuL29wdGlvbnNcIlxuXG5jb25zdCBmaWxlID0gQXJncy5maWxlKHsgZXhpc3RzOiBcInllc1wiLCBuYW1lOiBcImlucHV0XCIgfSkucGlwZShcbiAgQXJncy53aXRoRGVzY3JpcHRpb24oXCJNYXJrZG93biBmaWxlIHRvIHJlbmRlclwiKVxuKVxuXG5leHBvcnQgZGVmYXVsdCBDb21tYW5kLm1ha2UoXCJyZW5kZXJcIiwge1xuICBiYWNrZ3JvdW5kLFxuICBibG9ja0R1cmF0aW9uLFxuICBmaWxlLFxuICBmb250RmFtaWx5LFxuICBmb250U2l6ZSxcbiAgZm9yZWdyb3VuZCxcbiAgZm9ybWF0LFxuICBmcHMsXG4gIGhlaWdodCxcbiAgbGluZUhlaWdodCxcbiAgb3V0cHV0LFxuICBwYWRkaW5nLFxuICB0YWJSZXBsYWNlbWVudCxcbiAgdGhlbWUsXG4gIHRyYW5zaXRpb25EcmlmdCxcbiAgdHJhbnNpdGlvbkR1cmF0aW9uTXMsXG4gIHdpZHRoLFxufSkucGlwZShcbiAgQ29tbWFuZC53aXRoRGVzY3JpcHRpb24oXCJSZW5kZXIgYSB2aWRlbyBmcm9tIGNvZGUgYmxvY2tzIGluIGEgTWFya2Rvd24gZmlsZVwiKSxcbiAgQ29tbWFuZC53aXRoSGFuZGxlcihcbiAgICAoe1xuICAgICAgYmFja2dyb3VuZCxcbiAgICAgIGJsb2NrRHVyYXRpb24sXG4gICAgICBmaWxlLFxuICAgICAgZm9udEZhbWlseSxcbiAgICAgIGZvbnRTaXplLFxuICAgICAgZm9yZWdyb3VuZCxcbiAgICAgIGZwcyxcbiAgICAgIGhlaWdodCxcbiAgICAgIGxpbmVIZWlnaHQsXG4gICAgICBvdXRwdXQsXG4gICAgICBwYWRkaW5nLFxuICAgICAgdGFiUmVwbGFjZW1lbnQsXG4gICAgICB0aGVtZSxcbiAgICAgIHRyYW5zaXRpb25EcmlmdCxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbk1zLFxuICAgICAgd2lkdGgsXG4gICAgICBmb3JtYXQsXG4gICAgfSkgPT5cbiAgICAgIEVmZmVjdC5nZW4oZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZmlsZVN5c3RlbSA9IHlpZWxkKiBGaWxlU3lzdGVtLkZpbGVTeXN0ZW1cbiAgICAgICAgY29uc3QgcGF0aCA9IHlpZWxkKiBQYXRoLlBhdGhcblxuICAgICAgICBjb25zdCBtYXJrZG93biA9IHlpZWxkKiBmaWxlU3lzdGVtLnJlYWRGaWxlU3RyaW5nKGZpbGUpXG4gICAgICAgIGNvbnN0IGJsb2NrcyA9IHlpZWxkKiBwYXJzZU1hcmtkb3duQ29kZUJsb2NrcyhtYXJrZG93bilcblxuICAgICAgICBpZiAoYmxvY2tzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgIHJldHVybiB5aWVsZCogbmV3IE5vQ29kZUJsb2Nrc0ZvdW5kKHsgcGF0aDogZmlsZSB9KVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRyYW5zaXRpb25EdXJhdGlvbk1zIDw9IDApIHtcbiAgICAgICAgICByZXR1cm4geWllbGQqIG5ldyBJbnZhbGlkVHJhbnNpdGlvbkR1cmF0aW9uKHtcbiAgICAgICAgICAgIGR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25NcyxcbiAgICAgICAgICAgIG1pbmltdW06IDEsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkVGhlbWUgPSB5aWVsZCogcmVzb2x2ZVRoZW1lKHRoZW1lKVxuICAgICAgICBjb25zdCBvdXRwdXRQYXRoID0gT3B0aW9uLm1hdGNoKG91dHB1dCwge1xuICAgICAgICAgIG9uTm9uZTogKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gcGF0aC5wYXJzZShmaWxlKVxuICAgICAgICAgICAgcmV0dXJuIHBhdGguam9pbihwYXJzZWQuZGlyLCBgJHtwYXJzZWQubmFtZX0uJHtmb3JtYXR9YClcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9uU29tZTogKHZhbHVlKSA9PiB2YWx1ZSxcbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCByZW5kZXJDb25maWc6IFJlbmRlckNvbmZpZyA9IHtcbiAgICAgICAgICBiYWNrZ3JvdW5kLFxuICAgICAgICAgIGJsb2NrRHVyYXRpb24sXG4gICAgICAgICAgZm9udEZhbWlseSxcbiAgICAgICAgICBmb250U2l6ZSxcbiAgICAgICAgICBmb3JlZ3JvdW5kLFxuICAgICAgICAgIGZwcyxcbiAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgbGluZUhlaWdodCxcbiAgICAgICAgICBwYWRkaW5nLFxuICAgICAgICAgIHRhYlJlcGxhY2VtZW50LFxuICAgICAgICAgIHRyYW5zaXRpb25EcmlmdCxcbiAgICAgICAgICB0cmFuc2l0aW9uRHVyYXRpb25NcyxcbiAgICAgICAgICB3aWR0aCxcbiAgICAgICAgfVxuXG4gICAgICAgIHlpZWxkKiBDb25zb2xlLmxvZyhgUmVuZGVyaW5nICR7YmxvY2tzLmxlbmd0aH0gY29kZSBibG9ja3MgdG8gJHtvdXRwdXRQYXRofS4uLmApXG4gICAgICAgIHlpZWxkKiByZW5kZXJWaWRlbyhvdXRwdXRQYXRoLCByZXNvbHZlZFRoZW1lLCBibG9ja3MsIHJlbmRlckNvbmZpZywgeyBmb3JtYXQgfSlcbiAgICAgICAgeWllbGQqIENvbnNvbGUubG9nKGBWaWRlbyBjcmVhdGVkIGF0ICR7b3V0cHV0UGF0aH1gKVxuICAgICAgfSkucGlwZShcbiAgICAgICAgRWZmZWN0LmNhdGNoVGFncyh7XG4gICAgICAgICAgQmFkQXJndW1lbnQ6IChlcnJvcikgPT4gQ29uc29sZS5lcnJvcihgSW52YWxpZCBmaWxlIGFyZ3VtZW50OiAke2Vycm9yLm1lc3NhZ2V9YCksXG4gICAgICAgICAgRmZtcGVnUmVuZGVyRmFpbGVkOiAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN0YWdlTWVzc2FnZSA9IHtcbiAgICAgICAgICAgICAgZmluaXNoOiBcImZpbmFsaXppbmcgdGhlIHZpZGVvIGZpbGVcIixcbiAgICAgICAgICAgICAgaW5pdDogXCJzdGFydGluZyB0aGUgRkZtcGVnIHByb2Nlc3NcIixcbiAgICAgICAgICAgICAgc3RyZWFtOiBcIndyaXRpbmcgdmlkZW8gZnJhbWVzXCIsXG4gICAgICAgICAgICB9W2Vycm9yLnN0YWdlXVxuXG4gICAgICAgICAgICBsZXQgbWVzc2FnZSA9IGBGRm1wZWcgZmFpbGVkIHdoaWxlICR7c3RhZ2VNZXNzYWdlfS5cXG5gXG4gICAgICAgICAgICBtZXNzYWdlICs9IGAgIE91dHB1dDogJHtlcnJvci5vdXRwdXRQYXRofVxcbmBcbiAgICAgICAgICAgIG1lc3NhZ2UgKz0gYCAgRm9ybWF0OiAke2Vycm9yLmZvcm1hdH1gXG5cbiAgICAgICAgICAgIGlmIChlcnJvci5leGl0Q29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG1lc3NhZ2UgKz0gYFxcbiAgRXhpdCBjb2RlOiAke2Vycm9yLmV4aXRDb2RlfWBcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlcnJvci5zaWduYWwpIHtcbiAgICAgICAgICAgICAgbWVzc2FnZSArPSBgXFxuICBTaWduYWw6ICR7ZXJyb3Iuc2lnbmFsfWBcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIENvbnNvbGUuZXJyb3IobWVzc2FnZSlcbiAgICAgICAgICB9LFxuICAgICAgICAgIEludmFsaWRUcmFuc2l0aW9uRHVyYXRpb246IChlcnJvcikgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBJbnZhbGlkIHRyYW5zaXRpb24gZHVyYXRpb246ICR7ZXJyb3IuZHVyYXRpb259bXMuXFxuYCArXG4gICAgICAgICAgICAgICAgYCAgTWluaW11bSBhbGxvd2VkOiAke2Vycm9yLm1pbmltdW19bXNgXG4gICAgICAgICAgICApLFxuICAgICAgICAgIE1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZTogKGVycm9yKSA9PlxuICAgICAgICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYE1pc3NpbmcgbGFuZ3VhZ2UgaW4gY29kZSBibG9jay5cXG5gICtcbiAgICAgICAgICAgICAgICBgICAke2Vycm9yLmRldGFpbCA/PyBcIkV2ZXJ5IGZlbmNlZCBjb2RlIGJsb2NrIG5lZWRzIGEgbGFuZ3VhZ2UgKGUuZy4sIGBgYHR5cGVzY3JpcHQpLlwifVxcbmAgK1xuICAgICAgICAgICAgICAgIGAgIFNlZSBzdXBwb3J0ZWQgbGFuZ3VhZ2VzOiBodHRwczovL3NoaWtpLnN0eWxlL2xhbmd1YWdlc2BcbiAgICAgICAgICAgICksXG4gICAgICAgICAgTWlzc2luZ0ZmbXBlZzogKCkgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBGRm1wZWcgaXMgbm90IGluc3RhbGxlZCBvciBub3QgaW4gUEFUSC5cXG5gICtcbiAgICAgICAgICAgICAgICBgICBJbnN0YWxsIEZGbXBlZyB0byByZW5kZXIgdmlkZW9zOiBodHRwczovL2ZmbXBlZy5vcmcvZG93bmxvYWQuaHRtbGBcbiAgICAgICAgICAgICksXG4gICAgICAgICAgTm9Db2RlQmxvY2tzRm91bmQ6IChlcnJvcikgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBObyBjb2RlIGJsb2NrcyBmb3VuZCR7ZXJyb3IucGF0aCA/IGAgaW4gJHtlcnJvci5wYXRofWAgOiBcIlwifS5cXG5gICtcbiAgICAgICAgICAgICAgICBgICBBZGQgZmVuY2VkIGNvZGUgYmxvY2tzIHdpdGggYSBsYW5ndWFnZSB0byB5b3VyIG1hcmtkb3duIGZpbGUuYFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBTY2VuZU1lYXN1cmVGYWlsZWQ6IChlcnJvcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGV0YWlscyA9XG4gICAgICAgICAgICAgIGVycm9yLmNhdXNlIGluc3RhbmNlb2YgRXJyb3IgPyBgXFxuICBEZXRhaWxzOiAke2Vycm9yLmNhdXNlLm1lc3NhZ2V9YCA6IFwiXCJcbiAgICAgICAgICAgIHJldHVybiBDb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgRmFpbGVkIHRvIHByb2Nlc3MgY29kZSBibG9jay5cXG4gIFRoZSBzeW50YXggaGlnaGxpZ2h0ZXIgY291bGQgbm90IHRva2VuaXplIHRoZSBjb2RlLiR7ZGV0YWlsc31gXG4gICAgICAgICAgICApXG4gICAgICAgICAgfSxcbiAgICAgICAgICBTeXN0ZW1FcnJvcjogKGVycm9yKSA9PlxuICAgICAgICAgICAgQ29uc29sZS5lcnJvcihcbiAgICAgICAgICAgICAgYEZhaWxlZCB0byByZWFkIGlucHV0IGZpbGUuXFxuYCArXG4gICAgICAgICAgICAgICAgYCAgUGF0aDogJHtlcnJvci5wYXRoT3JEZXNjcmlwdG9yfVxcbmAgK1xuICAgICAgICAgICAgICAgIGAgIFJlYXNvbjogJHtlcnJvci5yZWFzb259YFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBVbmtub3duVGhlbWU6IChlcnJvcikgPT5cbiAgICAgICAgICAgIENvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgIGBVbmtub3duIHRoZW1lOiBcIiR7ZXJyb3IudGhlbWV9XCIuXFxuYCArXG4gICAgICAgICAgICAgICAgYCAgU2VlIGF2YWlsYWJsZSB0aGVtZXM6IGh0dHBzOi8vc2hpa2kuc3R5bGUvdGhlbWVzYFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICBVbnN1cHBvcnRlZExhbmd1YWdlOiAoZXJyb3IpID0+XG4gICAgICAgICAgICBDb25zb2xlLmVycm9yKFxuICAgICAgICAgICAgICBgVW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6IFwiJHtlcnJvci5sYW5ndWFnZX1cIi5cXG5gICtcbiAgICAgICAgICAgICAgICBgICBTZWUgc3VwcG9ydGVkIGxhbmd1YWdlczogaHR0cHM6Ly9zaGlraS5zdHlsZS9sYW5ndWFnZXNgXG4gICAgICAgICAgICApLFxuICAgICAgICB9KVxuICAgICAgKVxuICApXG4pXG4iLAogICAgImltcG9ydCB7IERhdGEgfSBmcm9tIFwiZWZmZWN0XCJcblxuZXhwb3J0IHR5cGUgRmZtcGVnRm9ybWF0ID0gXCJtcDRcIiB8IFwid2VibVwiXG5cbmV4cG9ydCBjbGFzcyBTY2VuZU1lYXN1cmVGYWlsZWQgZXh0ZW5kcyBEYXRhLlRhZ2dlZEVycm9yKFwiU2NlbmVNZWFzdXJlRmFpbGVkXCIpPHtcbiAgY2F1c2U6IHVua25vd25cbn0+IHt9XG5cbmV4cG9ydCBjbGFzcyBVbmtub3duVGhlbWUgZXh0ZW5kcyBEYXRhLlRhZ2dlZEVycm9yKFwiVW5rbm93blRoZW1lXCIpPHsgdGhlbWU6IHN0cmluZyB9PiB7fVxuXG5leHBvcnQgY2xhc3MgTWlzc2luZ0NvZGVCbG9ja0xhbmd1YWdlIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZVwiKTx7XG4gIGNvbnRleHQ6IFwicGFyc2VcIiB8IFwiY29kZUJsb2NrXCJcbiAgZGV0YWlsPzogc3RyaW5nXG59PiB7fVxuXG5leHBvcnQgY2xhc3MgVW5zdXBwb3J0ZWRMYW5ndWFnZSBleHRlbmRzIERhdGEuVGFnZ2VkRXJyb3IoXCJVbnN1cHBvcnRlZExhbmd1YWdlXCIpPHtcbiAgbGFuZ3VhZ2U6IHN0cmluZ1xufT4ge31cblxuZXhwb3J0IGNsYXNzIE5vQ29kZUJsb2Nrc0ZvdW5kIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk5vQ29kZUJsb2Nrc0ZvdW5kXCIpPHsgcGF0aD86IHN0cmluZyB9PiB7fVxuXG5leHBvcnQgY2xhc3MgSW52YWxpZFRyYW5zaXRpb25EdXJhdGlvbiBleHRlbmRzIERhdGEuVGFnZ2VkRXJyb3IoXCJJbnZhbGlkVHJhbnNpdGlvbkR1cmF0aW9uXCIpPHtcbiAgZHVyYXRpb246IG51bWJlclxuICBtaW5pbXVtOiBudW1iZXJcbn0+IHt9XG5cbmV4cG9ydCBjbGFzcyBNaXNzaW5nRmZtcGVnIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIk1pc3NpbmdGZm1wZWdcIik8e1xuICBjb21tYW5kOiBzdHJpbmdcbiAgY2F1c2U/OiB1bmtub3duXG59PiB7fVxuXG5leHBvcnQgY2xhc3MgRmZtcGVnUmVuZGVyRmFpbGVkIGV4dGVuZHMgRGF0YS5UYWdnZWRFcnJvcihcIkZmbXBlZ1JlbmRlckZhaWxlZFwiKTx7XG4gIGZvcm1hdDogRmZtcGVnRm9ybWF0XG4gIG91dHB1dFBhdGg6IHN0cmluZ1xuICBzdGFnZTogXCJpbml0XCIgfCBcInN0cmVhbVwiIHwgXCJmaW5pc2hcIlxuICBjYXVzZT86IHVua25vd25cbiAgZXhpdENvZGU/OiBudW1iZXJcbiAgc2lnbmFsPzogc3RyaW5nXG59PiB7fVxuIiwKICAgICJpbXBvcnQgeyBFZmZlY3QgfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCB7IG1hcmtlZCB9IGZyb20gXCJtYXJrZWRcIlxuaW1wb3J0IHsgYnVuZGxlZExhbmd1YWdlcywgdHlwZSBCdW5kbGVkTGFuZ3VhZ2UgfSBmcm9tIFwic2hpa2lcIlxuaW1wb3J0IHR5cGUgeyBDb2RlQmxvY2sgfSBmcm9tIFwiLi90eXBlc1wiXG5pbXBvcnQgeyBNaXNzaW5nQ29kZUJsb2NrTGFuZ3VhZ2UsIFVuc3VwcG9ydGVkTGFuZ3VhZ2UgfSBmcm9tIFwiLi9lcnJvcnMuanNcIlxuXG5leHBvcnQgY29uc3Qgbm9ybWFsaXplTGFuZ3VhZ2UgPSAocmF3TGFuZ3VhZ2U6IHN0cmluZykgPT4ge1xuICBjb25zdCB0cmltbWVkID0gcmF3TGFuZ3VhZ2UudHJpbSgpXG4gIGlmICghdHJpbW1lZCkge1xuICAgIHJldHVybiBcIlwiXG4gIH1cblxuICBjb25zdCBwcmltYXJ5ID0gdHJpbW1lZC5zcGxpdCgvXFxzKy8pWzBdID8/IFwiXCJcbiAgcmV0dXJuIHByaW1hcnkudG9Mb3dlckNhc2UoKVxufVxuXG5jb25zdCBjaGVja0lzU3VwcG9ydGVkTGFuZ3VhZ2UgPSAobGFuZ3VhZ2U6IHN0cmluZyk6IGxhbmd1YWdlIGlzIEJ1bmRsZWRMYW5ndWFnZSA9PlxuICBPYmplY3QuaGFzT3duKGJ1bmRsZWRMYW5ndWFnZXMsIGxhbmd1YWdlKVxuXG5leHBvcnQgY29uc3QgcGFyc2VNYXJrZG93bkNvZGVCbG9ja3MgPSBFZmZlY3QuZm4oZnVuY3Rpb24qIHBhcnNlTWFya2Rvd25Db2RlQmxvY2tzKFxuICBtYXJrZG93bjogc3RyaW5nXG4pIHtcbiAgY29uc3QgdG9rZW5zID0geWllbGQqIEVmZmVjdC50cnkoe1xuICAgIGNhdGNoOiAoKSA9PlxuICAgICAgbmV3IE1pc3NpbmdDb2RlQmxvY2tMYW5ndWFnZSh7IGNvbnRleHQ6IFwicGFyc2VcIiwgZGV0YWlsOiBcIlVuYWJsZSB0byBwYXJzZSBtYXJrZG93bi5cIiB9KSxcbiAgICB0cnk6ICgpID0+IG1hcmtlZC5sZXhlcihtYXJrZG93biksXG4gIH0pXG4gIGNvbnN0IGJsb2NrczogQ29kZUJsb2NrW10gPSBbXVxuXG4gIGZvciAoY29uc3QgdG9rZW4gb2YgdG9rZW5zKSB7XG4gICAgaWYgKHRva2VuLnR5cGUgIT09IFwiY29kZVwiKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGNvbnN0IHJhd0xhbmd1YWdlID0gdHlwZW9mIHRva2VuLmxhbmcgPT09IFwic3RyaW5nXCIgPyB0b2tlbi5sYW5nLnRyaW0oKSA6IFwiXCJcbiAgICBjb25zdCBsYW5ndWFnZSA9IG5vcm1hbGl6ZUxhbmd1YWdlKHJhd0xhbmd1YWdlKVxuXG4gICAgaWYgKCFsYW5ndWFnZSkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBuZXcgTWlzc2luZ0NvZGVCbG9ja0xhbmd1YWdlKHtcbiAgICAgICAgY29udGV4dDogXCJjb2RlQmxvY2tcIixcbiAgICAgICAgZGV0YWlsOiBcIkV2ZXJ5IGZlbmNlZCBjb2RlIGJsb2NrIG5lZWRzIGEgbGFuZ3VhZ2UgKGZvciBleGFtcGxlOiBgYGB0cykuXCIsXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICghY2hlY2tJc1N1cHBvcnRlZExhbmd1YWdlKGxhbmd1YWdlKSkge1xuICAgICAgcmV0dXJuIHlpZWxkKiBuZXcgVW5zdXBwb3J0ZWRMYW5ndWFnZSh7XG4gICAgICAgIGxhbmd1YWdlOiByYXdMYW5ndWFnZSxcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYmxvY2tzLnB1c2goe1xuICAgICAgY29kZTogdG9rZW4udGV4dCxcbiAgICAgIGxhbmd1YWdlLFxuICAgIH0pXG4gIH1cblxuICByZXR1cm4gYmxvY2tzXG59KVxuIiwKICAgICJpbXBvcnQgeyBFZmZlY3QgfSBmcm9tIFwiZWZmZWN0XCJcbmltcG9ydCB7IGJ1bmRsZWRUaGVtZXMsIHR5cGUgQnVuZGxlZFRoZW1lIH0gZnJvbSBcInNoaWtpXCJcbmltcG9ydCB7IFVua25vd25UaGVtZSB9IGZyb20gXCIuL2Vycm9yc1wiXG5cbmNvbnN0IGNoZWNrSXNTdXBwb3J0ZWRUaGVtZSA9ICh0aGVtZTogc3RyaW5nKTogdGhlbWUgaXMgQnVuZGxlZFRoZW1lID0+XG4gIE9iamVjdC5oYXNPd24oYnVuZGxlZFRoZW1lcywgdGhlbWUpXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlVGhlbWUgPSBFZmZlY3QuZm4oZnVuY3Rpb24qIHJlc29sdmVUaGVtZSh0aGVtZTogc3RyaW5nKSB7XG4gIGNvbnN0IHRyaW1tZWQgPSB0aGVtZS50cmltKClcbiAgaWYgKCFjaGVja0lzU3VwcG9ydGVkVGhlbWUodHJpbW1lZCkpIHtcbiAgICByZXR1cm4geWllbGQqIG5ldyBVbmtub3duVGhlbWUoeyB0aGVtZSB9KVxuICB9XG5cbiAgcmV0dXJuIHRyaW1tZWRcbn0pXG4iLAogICAgImltcG9ydCB7IGF2YWlsYWJsZVBhcmFsbGVsaXNtIH0gZnJvbSBcIm5vZGU6b3NcIlxuaW1wb3J0IHR5cGUgeyBCdW5kbGVkVGhlbWUgfSBmcm9tIFwic2hpa2lcIlxuaW1wb3J0ICogYXMgRmlsZVN5c3RlbSBmcm9tIFwiQGVmZmVjdC9wbGF0Zm9ybS9GaWxlU3lzdGVtXCJcbmltcG9ydCB7IGNyZWF0ZUNhbnZhcywgdHlwZSBTS1JTQ29udGV4dDJEIH0gZnJvbSBcIkBuYXBpLXJzL2NhbnZhc1wiXG5pbXBvcnQgeyBFZmZlY3QsIEV4aXQsIFN0cmVhbSB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHR5cGUgeyBDYW52YXNDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiXG5pbXBvcnQgdHlwZSB7IENvZGVCbG9jaywgUmVuZGVyQ29uZmlnLCBSZW5kZXJGcmFtZSB9IGZyb20gXCIuL3R5cGVzXCJcbmltcG9ydCB7IEZmbXBlZ1JlbmRlckZhaWxlZCwgdHlwZSBGZm1wZWdGb3JtYXQgfSBmcm9tIFwiLi9lcnJvcnNcIlxuaW1wb3J0IHsgZW5zdXJlRXZlbkRpbWVuc2lvbnMsIGVuc3VyZUZmbXBlZ0F2YWlsYWJsZSwgc3RhcnRGZm1wZWdQcm9jZXNzIH0gZnJvbSBcIi4vZmZtcGVnXCJcbmltcG9ydCB7IGJ1aWxkRnJhbWVzU3RyZWFtLCBjb21wdXRlRnJhbWVDb3VudHMsIHJlbmRlckZyYW1lIH0gZnJvbSBcIi4vcmVuZGVyXCJcbmltcG9ydCB7IGxheW91dFNjZW5lLCBtZWFzdXJlU2NlbmUsIHJlc29sdmVGcmFtZVNpemUgfSBmcm9tIFwiLi9zY2VuZVwiXG5cbmV4cG9ydCB0eXBlIFJlbmRlclZpZGVvT3B0aW9ucyA9IHtcbiAgY29uY3VycmVuY3k/OiBudW1iZXJcbiAgZm9ybWF0PzogRmZtcGVnRm9ybWF0XG59XG5cbmNvbnN0IGZyYW1lVG9CeXRlcyA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGNvbnRleHQ6IENhbnZhc0NvbnRleHQsXG4gIHdpZHRoOiBudW1iZXIsXG4gIGhlaWdodDogbnVtYmVyXG4pID0+XG4gIEVmZmVjdC5mbihcInJlbmRlclZpZGVvLmZyYW1lVG9CeXRlc1wiKSgoZnJhbWU6IFJlbmRlckZyYW1lKSA9PlxuICAgIEVmZmVjdC5zeW5jKCgpID0+IHtcbiAgICAgIHJlbmRlckZyYW1lKGNvbmZpZywgY29udGV4dCwgd2lkdGgsIGhlaWdodCwgZnJhbWUpXG4gICAgICBjb25zdCBieXRlcyA9IChjb250ZXh0IGFzIFNLUlNDb250ZXh0MkQpLmNhbnZhcy5kYXRhKClcbiAgICAgIHJldHVybiBCdWZmZXIuZnJvbShieXRlcylcbiAgICB9KVxuICApXG5cbmV4cG9ydCBjb25zdCByZW5kZXJWaWRlbyA9IEVmZmVjdC5mbihmdW5jdGlvbiogcmVuZGVyVmlkZW8oXG4gIG91dHB1dFBhdGg6IHN0cmluZyxcbiAgdGhlbWU6IEJ1bmRsZWRUaGVtZSxcbiAgY29kZUJsb2NrczogQ29kZUJsb2NrW10sXG4gIGNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBvcHRpb25zOiBSZW5kZXJWaWRlb09wdGlvbnMgPSB7fVxuKSB7XG4gIHlpZWxkKiBlbnN1cmVGZm1wZWdBdmFpbGFibGUoKVxuXG4gIGNvbnN0IGNvbmN1cnJlbmN5ID0gb3B0aW9ucy5jb25jdXJyZW5jeSA/PyBNYXRoLm1pbig0LCBhdmFpbGFibGVQYXJhbGxlbGlzbSgpKVxuICBjb25zdCBmb3JtYXQgPSBvcHRpb25zLmZvcm1hdCA/PyBcIm1wNFwiXG5cbiAgY29uc3QgbWVhc3VyZWRTY2VuZXMgPSB5aWVsZCogRWZmZWN0LmZvckVhY2goXG4gICAgY29kZUJsb2NrcyxcbiAgICAoY29kZUJsb2NrKSA9PlxuICAgICAgRWZmZWN0LmdlbihmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBtZWFzdXJlbWVudENvbnRleHQgPSBjcmVhdGVDYW52YXMoMSwgMSkuZ2V0Q29udGV4dChcIjJkXCIpXG4gICAgICAgIG1lYXN1cmVtZW50Q29udGV4dC50ZXh0UmVuZGVyaW5nID0gXCJvcHRpbWl6ZUxlZ2liaWxpdHlcIlxuICAgICAgICByZXR1cm4geWllbGQqIG1lYXN1cmVTY2VuZShjb25maWcsIG1lYXN1cmVtZW50Q29udGV4dCwgY29kZUJsb2NrLCB0aGVtZSBhcyBuZXZlcilcbiAgICAgIH0pLFxuICAgIHsgY29uY3VycmVuY3kgfVxuICApXG5cbiAgY29uc3QgeyB3aWR0aCwgaGVpZ2h0IH0gPSByZXNvbHZlRnJhbWVTaXplKGNvbmZpZywgbWVhc3VyZWRTY2VuZXMpXG4gIGNvbnN0IHsgaGVpZ2h0OiBldmVuSGVpZ2h0LCB3aWR0aDogZXZlbldpZHRoIH0gPSBlbnN1cmVFdmVuRGltZW5zaW9ucyhmb3JtYXQsIHdpZHRoLCBoZWlnaHQpXG5cbiAgY29uc3QgY2FudmFzID0gY3JlYXRlQ2FudmFzKGV2ZW5XaWR0aCwgZXZlbkhlaWdodClcbiAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KFwiMmRcIilcbiAgY29udGV4dC50ZXh0UmVuZGVyaW5nID0gXCJvcHRpbWl6ZUxlZ2liaWxpdHlcIlxuXG4gIGNvbnN0IHNjZW5lcyA9IG1lYXN1cmVkU2NlbmVzLm1hcCgobWVhc3VyZWQpID0+XG4gICAgbGF5b3V0U2NlbmUoY29uZmlnLCBtZWFzdXJlZCwgZXZlbldpZHRoLCBldmVuSGVpZ2h0KVxuICApXG5cbiAgY29uc3QgZnJhbWVDb3VudHMgPSBjb21wdXRlRnJhbWVDb3VudHMoXG4gICAgY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbk1zLFxuICAgIGNvbmZpZy5mcHMsXG4gICAgY29uZmlnLmJsb2NrRHVyYXRpb25cbiAgKVxuICBjb25zdCBmcmFtZVN0cmVhbSA9IGJ1aWxkRnJhbWVzU3RyZWFtKFxuICAgIGNvbmZpZyxcbiAgICBzY2VuZXMsXG4gICAgZnJhbWVDb3VudHMuYmxvY2tGcmFtZXMsXG4gICAgZnJhbWVDb3VudHMudHJhbnNpdGlvbkZyYW1lc1xuICApXG4gIGNvbnN0IGZyYW1lQnl0ZXNTdHJlYW0gPSBmcmFtZVN0cmVhbS5waXBlKFxuICAgIFN0cmVhbS5tYXBFZmZlY3QoZnJhbWVUb0J5dGVzKGNvbmZpZywgY29udGV4dCwgZXZlbldpZHRoLCBldmVuSGVpZ2h0KSlcbiAgKVxuXG4gIHJldHVybiB5aWVsZCogRWZmZWN0LnNjb3BlZChcbiAgICBFZmZlY3QuZ2VuKGZ1bmN0aW9uKiAoKSB7XG4gICAgICBjb25zdCBmaWxlU3lzdGVtID0geWllbGQqIEZpbGVTeXN0ZW0uRmlsZVN5c3RlbVxuICAgICAgY29uc3QgcmF3UGF0aCA9IHlpZWxkKiBmaWxlU3lzdGVtLm1ha2VUZW1wRmlsZVNjb3BlZCh7IHN1ZmZpeDogXCIucmF3XCIgfSlcblxuICAgICAgeWllbGQqIFN0cmVhbS5ydW4oZnJhbWVCeXRlc1N0cmVhbSwgZmlsZVN5c3RlbS5zaW5rKHJhd1BhdGgpKS5waXBlKFxuICAgICAgICBFZmZlY3QubWFwRXJyb3IoXG4gICAgICAgICAgKGNhdXNlKSA9PlxuICAgICAgICAgICAgbmV3IEZmbXBlZ1JlbmRlckZhaWxlZCh7XG4gICAgICAgICAgICAgIGNhdXNlLFxuICAgICAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgICAgIG91dHB1dFBhdGgsXG4gICAgICAgICAgICAgIHN0YWdlOiBcInN0cmVhbVwiLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgKVxuXG4gICAgICBjb25zdCBwcm9jZXNzID0geWllbGQqIEVmZmVjdC5hY3F1aXJlUmVsZWFzZShcbiAgICAgICAgc3RhcnRGZm1wZWdQcm9jZXNzKGZvcm1hdCwgZXZlbldpZHRoLCBldmVuSGVpZ2h0LCBjb25maWcuZnBzLCByYXdQYXRoLCBvdXRwdXRQYXRoKS5waXBlKFxuICAgICAgICAgIEVmZmVjdC5tYXBFcnJvcihcbiAgICAgICAgICAgIChjYXVzZSkgPT5cbiAgICAgICAgICAgICAgbmV3IEZmbXBlZ1JlbmRlckZhaWxlZCh7XG4gICAgICAgICAgICAgICAgY2F1c2UsXG4gICAgICAgICAgICAgICAgZm9ybWF0LFxuICAgICAgICAgICAgICAgIG91dHB1dFBhdGgsXG4gICAgICAgICAgICAgICAgc3RhZ2U6IFwiaW5pdFwiLFxuICAgICAgICAgICAgICB9KVxuICAgICAgICAgIClcbiAgICAgICAgKSxcbiAgICAgICAgKHByb2Nlc3MsIGV4aXQpID0+XG4gICAgICAgICAgRWZmZWN0Lmlnbm9yZShcbiAgICAgICAgICAgIEV4aXQuaXNGYWlsdXJlKGV4aXQpXG4gICAgICAgICAgICAgID8gcHJvY2Vzcy5raWxsKFwiU0lHVEVSTVwiKVxuICAgICAgICAgICAgICA6IEVmZmVjdC53aGVuRWZmZWN0KHByb2Nlc3Mua2lsbChcIlNJR1RFUk1cIiksIHByb2Nlc3MuaXNSdW5uaW5nKVxuICAgICAgICAgIClcbiAgICAgIClcblxuICAgICAgY29uc3QgZXhpdENvZGUgPSB5aWVsZCogcHJvY2Vzcy5leGl0Q29kZVxuICAgICAgaWYgKGV4aXRDb2RlID09PSBudWxsIHx8IE51bWJlcihleGl0Q29kZSkgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkKiBuZXcgRmZtcGVnUmVuZGVyRmFpbGVkKHtcbiAgICAgICAgICAuLi4oZXhpdENvZGUgIT09IG51bGwgJiYgeyBleGl0Q29kZTogTnVtYmVyKGV4aXRDb2RlKSB9KSxcbiAgICAgICAgICBmb3JtYXQsXG4gICAgICAgICAgb3V0cHV0UGF0aCxcbiAgICAgICAgICBzdGFnZTogXCJmaW5pc2hcIixcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG91dHB1dFBhdGhcbiAgICB9KVxuICApXG59KVxuIiwKICAgICJpbXBvcnQgeyBDb21tYW5kIGFzIFNoZWxsQ29tbWFuZCB9IGZyb20gXCJAZWZmZWN0L3BsYXRmb3JtXCJcbmltcG9ydCB7IEVmZmVjdCB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHsgTWlzc2luZ0ZmbXBlZywgdHlwZSBGZm1wZWdGb3JtYXQgfSBmcm9tIFwiLi9lcnJvcnNcIlxuXG5jb25zdCBGRk1QRUdfQklOQVJZID0gXCJmZm1wZWdcIlxuXG5jb25zdCBDT0RFQ19CWV9GT1JNQVQ6IFJlY29yZDxGZm1wZWdGb3JtYXQsIHN0cmluZz4gPSB7XG4gIG1wNDogXCJsaWJ4MjY0XCIsXG4gIHdlYm06IFwibGlidnB4LXZwOVwiLFxufVxuXG5jb25zdCBQSVhfRk1UX0JZX0ZPUk1BVDogUmVjb3JkPEZmbXBlZ0Zvcm1hdCwgc3RyaW5nPiA9IHtcbiAgbXA0OiBcInl1djQ0NHBcIixcbiAgd2VibTogXCJ5dXY0MjBwXCIsXG59XG5cbmNvbnN0IFFVQUxJVFlfQVJHU19CWV9GT1JNQVQ6IFJlY29yZDxGZm1wZWdGb3JtYXQsIHJlYWRvbmx5IHN0cmluZ1tdPiA9IHtcbiAgbXA0OiBbXCItY3JmXCIsIFwiMTRcIiwgXCItcHJlc2V0XCIsIFwic2xvd1wiXSxcbiAgd2VibTogW1wiLWNyZlwiLCBcIjE4XCIsIFwiLWI6dlwiLCBcIjBcIl0sXG59XG5cbmNvbnN0IGVuc3VyZUV2ZW4gPSAodmFsdWU6IG51bWJlcikgPT4gKHZhbHVlICUgMiA9PT0gMCA/IHZhbHVlIDogdmFsdWUgKyAxKVxuXG5leHBvcnQgY29uc3QgZW5zdXJlRXZlbkRpbWVuc2lvbnMgPSAoZm9ybWF0OiBGZm1wZWdGb3JtYXQsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSA9PiB7XG4gIGlmIChQSVhfRk1UX0JZX0ZPUk1BVFtmb3JtYXRdICE9PSBcInl1djQyMHBcIikge1xuICAgIHJldHVybiB7IGhlaWdodCwgd2lkdGggfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBoZWlnaHQ6IGVuc3VyZUV2ZW4oaGVpZ2h0KSxcbiAgICB3aWR0aDogZW5zdXJlRXZlbih3aWR0aCksXG4gIH1cbn1cblxuY29uc3QgYnVpbGRBcmdzID0gKFxuICBmb3JtYXQ6IEZmbXBlZ0Zvcm1hdCxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGZwczogbnVtYmVyLFxuICBpbnB1dFBhdGg6IHN0cmluZyxcbiAgb3V0cHV0UGF0aDogc3RyaW5nXG4pID0+IFtcbiAgXCItZlwiLFxuICBcInJhd3ZpZGVvXCIsXG4gIFwiLXBpeF9mbXRcIixcbiAgXCJyZ2JhXCIsXG4gIFwiLXNcIixcbiAgYCR7d2lkdGh9eCR7aGVpZ2h0fWAsXG4gIFwiLXJcIixcbiAgYCR7ZnBzfWAsXG4gIFwiLWlcIixcbiAgaW5wdXRQYXRoLFxuICBcIi12ZlwiLFxuICBcInVuc2hhcnA9NTo1OjAuNTo1OjU6MC41XCIsXG4gIFwiLWM6dlwiLFxuICBDT0RFQ19CWV9GT1JNQVRbZm9ybWF0XSxcbiAgLi4uUVVBTElUWV9BUkdTX0JZX0ZPUk1BVFtmb3JtYXRdLFxuICBcIi1waXhfZm10XCIsXG4gIFBJWF9GTVRfQllfRk9STUFUW2Zvcm1hdF0sXG4gIFwiLXlcIixcbiAgb3V0cHV0UGF0aCxcbl1cblxuY29uc3QgZmZtcGVnQ2hlY2tDb21tYW5kID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiID8gXCJ3aGVyZVwiIDogXCJ3aGljaFwiXG5cbmV4cG9ydCBjb25zdCBlbnN1cmVGZm1wZWdBdmFpbGFibGUgPSBFZmZlY3QuZm4oXCJlbnN1cmVGZm1wZWdBdmFpbGFibGVcIikoZnVuY3Rpb24qICgpIHtcbiAgY29uc3QgZXhpdENvZGUgPSB5aWVsZCogU2hlbGxDb21tYW5kLm1ha2UoZmZtcGVnQ2hlY2tDb21tYW5kLCBGRk1QRUdfQklOQVJZKS5waXBlKFxuICAgIFNoZWxsQ29tbWFuZC5zdGRlcnIoXCJwaXBlXCIpLFxuICAgIFNoZWxsQ29tbWFuZC5zdGRvdXQoXCJwaXBlXCIpLFxuICAgIFNoZWxsQ29tbWFuZC5leGl0Q29kZSxcbiAgICBFZmZlY3QubWFwRXJyb3IoKGNhdXNlKSA9PiBuZXcgTWlzc2luZ0ZmbXBlZyh7IGNhdXNlLCBjb21tYW5kOiBGRk1QRUdfQklOQVJZIH0pKVxuICApXG5cbiAgaWYgKE51bWJlcihleGl0Q29kZSkgIT09IDApIHtcbiAgICByZXR1cm4geWllbGQqIG5ldyBNaXNzaW5nRmZtcGVnKHsgY29tbWFuZDogRkZNUEVHX0JJTkFSWSB9KVxuICB9XG59KVxuXG5leHBvcnQgY29uc3Qgc3RhcnRGZm1wZWdQcm9jZXNzID0gKFxuICBmb3JtYXQ6IEZmbXBlZ0Zvcm1hdCxcbiAgd2lkdGg6IG51bWJlcixcbiAgaGVpZ2h0OiBudW1iZXIsXG4gIGZwczogbnVtYmVyLFxuICBpbnB1dFBhdGg6IHN0cmluZyxcbiAgb3V0cHV0UGF0aDogc3RyaW5nXG4pID0+XG4gIFNoZWxsQ29tbWFuZC5tYWtlKFxuICAgIEZGTVBFR19CSU5BUlksXG4gICAgLi4uYnVpbGRBcmdzKGZvcm1hdCwgd2lkdGgsIGhlaWdodCwgZnBzLCBpbnB1dFBhdGgsIG91dHB1dFBhdGgpXG4gICkucGlwZShcbiAgICBTaGVsbENvbW1hbmQuc3RkaW4oXCJpbmhlcml0XCIpLFxuICAgIFNoZWxsQ29tbWFuZC5zdGRvdXQoXCJpbmhlcml0XCIpLFxuICAgIFNoZWxsQ29tbWFuZC5zdGRlcnIoXCJpbmhlcml0XCIpLFxuICAgIFNoZWxsQ29tbWFuZC5zdGFydFxuICApXG4iLAogICAgImltcG9ydCB7IFN0cmVhbSB9IGZyb20gXCJlZmZlY3RcIlxuaW1wb3J0IHR5cGUgeyBDYW52YXNDb250ZXh0IH0gZnJvbSBcIi4vY29udGV4dFwiXG5pbXBvcnQgdHlwZSB7IFJlbmRlckNvbmZpZywgUmVuZGVyRnJhbWUsIFNjZW5lIH0gZnJvbSBcIi4vdHlwZXNcIlxuaW1wb3J0IHsgYmxlbmRDb2xvcnMgfSBmcm9tIFwiLi9jb2xvclwiXG5pbXBvcnQgeyByZW5kZXJTY2VuZVRleHQgfSBmcm9tIFwiLi9zY2VuZVwiXG5pbXBvcnQge1xuICBidWlsZFRyYW5zaXRpb25EaWZmLFxuICBidWlsZFRyYW5zaXRpb25Ub2tlbnMsXG4gIGVhc2VJbk91dEN1YmljLFxuICByZW5kZXJUcmFuc2l0aW9uVG9rZW5zLFxufSBmcm9tIFwiLi90cmFuc2l0aW9uXCJcblxuZXhwb3J0IGNvbnN0IHJlbmRlckZyYW1lID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgZnJhbWVXaWR0aDogbnVtYmVyLFxuICBmcmFtZUhlaWdodDogbnVtYmVyLFxuICBmcmFtZTogUmVuZGVyRnJhbWVcbikgPT4ge1xuICBjb25zdCBmcmFtZUNvbnRleHQgPSBjb250ZXh0XG4gIGNvbnN0IHN0YXJ0VHJhbnNmb3JtID0gZnJhbWVDb250ZXh0LmdldFRyYW5zZm9ybSgpXG4gIGlmICh0eXBlb2YgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeCAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgZnJhbWVDb250ZXh0LnNldFRyYW5zZm9ybU1hdHJpeCA9ICh0cmFuc2Zvcm0pID0+IHtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHRyYW5zZm9ybSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICB0cmFuc2Zvcm0gIT09IG51bGwgJiZcbiAgICAgICAgXCJhXCIgaW4gdHJhbnNmb3JtICYmXG4gICAgICAgIFwiYlwiIGluIHRyYW5zZm9ybSAmJlxuICAgICAgICBcImNcIiBpbiB0cmFuc2Zvcm0gJiZcbiAgICAgICAgXCJkXCIgaW4gdHJhbnNmb3JtICYmXG4gICAgICAgIFwiZVwiIGluIHRyYW5zZm9ybSAmJlxuICAgICAgICBcImZcIiBpbiB0cmFuc2Zvcm1cbiAgICAgICkge1xuICAgICAgICBjb25zdCBtYXRyaXggPSB0cmFuc2Zvcm0gYXMge1xuICAgICAgICAgIGE6IG51bWJlclxuICAgICAgICAgIGI6IG51bWJlclxuICAgICAgICAgIGM6IG51bWJlclxuICAgICAgICAgIGQ6IG51bWJlclxuICAgICAgICAgIGU6IG51bWJlclxuICAgICAgICAgIGY6IG51bWJlclxuICAgICAgICB9XG4gICAgICAgIGZyYW1lQ29udGV4dC5zZXRUcmFuc2Zvcm0obWF0cml4LmEsIG1hdHJpeC5iLCBtYXRyaXguYywgbWF0cml4LmQsIG1hdHJpeC5lLCBtYXRyaXguZilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZyYW1lQ29udGV4dC5zZXRUcmFuc2Zvcm0oMSwgMCwgMCwgMSwgMCwgMClcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgY29uc3Qgc3RhcnRBbHBoYSA9IGZyYW1lQ29udGV4dC5nbG9iYWxBbHBoYVxuICBjb25zdCBzdGFydEZpbGxTdHlsZSA9IGZyYW1lQ29udGV4dC5maWxsU3R5bGVcblxuICBmcmFtZUNvbnRleHQuc2V0VHJhbnNmb3JtKDEsIDAsIDAsIDEsIDAsIDApXG4gIGZyYW1lQ29udGV4dC5nbG9iYWxBbHBoYSA9IDFcbiAgZnJhbWVDb250ZXh0LmZpbGxTdHlsZSA9IGZyYW1lLmJhY2tncm91bmRcbiAgZnJhbWVDb250ZXh0LmZpbGxSZWN0KDAsIDAsIGZyYW1lV2lkdGgsIGZyYW1lSGVpZ2h0KVxuXG4gIGlmIChmcmFtZS5raW5kID09PSBcInNjZW5lXCIpIHtcbiAgICByZW5kZXJTY2VuZVRleHQoXG4gICAgICBjb25maWcsXG4gICAgICBmcmFtZUNvbnRleHQsXG4gICAgICBmcmFtZS5zY2VuZSxcbiAgICAgIGZyYW1lLm9wYWNpdHksXG4gICAgICBmcmFtZS5wb3NpdGlvblgsXG4gICAgICBmcmFtZS5wb3NpdGlvbllcbiAgICApXG4gIH0gZWxzZSB7XG4gICAgcmVuZGVyVHJhbnNpdGlvblRva2Vucyhjb25maWcsIGZyYW1lQ29udGV4dCwgZnJhbWUudG9rZW5zKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBmcmFtZUNvbnRleHQuc2V0VHJhbnNmb3JtTWF0cml4ID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBmcmFtZUNvbnRleHQuc2V0VHJhbnNmb3JtTWF0cml4KHN0YXJ0VHJhbnNmb3JtKVxuICB9XG4gIGZyYW1lQ29udGV4dC5nbG9iYWxBbHBoYSA9IHN0YXJ0QWxwaGFcbiAgZnJhbWVDb250ZXh0LmZpbGxTdHlsZSA9IHN0YXJ0RmlsbFN0eWxlXG59XG5cbmV4cG9ydCBjb25zdCBjb21wdXRlRnJhbWVDb3VudHMgPSAoXG4gIHRyYW5zaXRpb25EdXJhdGlvbk1zOiBudW1iZXIsXG4gIGZwczogbnVtYmVyLFxuICBibG9ja0R1cmF0aW9uOiBudW1iZXJcbikgPT4ge1xuICBjb25zdCBmcmFtZUR1cmF0aW9uID0gMSAvIGZwc1xuICBjb25zdCBibG9ja0ZyYW1lcyA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQoYmxvY2tEdXJhdGlvbiAqIGZwcykpXG4gIGNvbnN0IHRyYW5zaXRpb25GcmFtZXMgPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKCh0cmFuc2l0aW9uRHVyYXRpb25NcyAvIDEwMDApICogZnBzKSlcblxuICByZXR1cm4ge1xuICAgIGJsb2NrRnJhbWVzLFxuICAgIGZyYW1lRHVyYXRpb24sXG4gICAgdHJhbnNpdGlvbkZyYW1lcyxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRTY2VuZUZyYW1lcyA9IChzY2VuZTogU2NlbmUsIGJsb2NrRnJhbWVzOiBudW1iZXIpID0+XG4gIFN0cmVhbS5yYW5nZSgxLCBibG9ja0ZyYW1lcykucGlwZShcbiAgICBTdHJlYW0ubWFwKFxuICAgICAgKCkgPT5cbiAgICAgICAgKHtcbiAgICAgICAgICBiYWNrZ3JvdW5kOiBzY2VuZS5iYWNrZ3JvdW5kLFxuICAgICAgICAgIGtpbmQ6IFwic2NlbmVcIixcbiAgICAgICAgICBvcGFjaXR5OiAxLFxuICAgICAgICAgIHBvc2l0aW9uWDogc2NlbmUuYmxvY2tYLFxuICAgICAgICAgIHBvc2l0aW9uWTogc2NlbmUuYmxvY2tZLFxuICAgICAgICAgIHNjZW5lLFxuICAgICAgICB9KSBzYXRpc2ZpZXMgUmVuZGVyRnJhbWVcbiAgICApXG4gIClcblxuZXhwb3J0IGNvbnN0IGJ1aWxkVHJhbnNpdGlvbkZyYW1lcyA9IChcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIHNjZW5lOiBTY2VuZSxcbiAgbmV4dFNjZW5lOiBTY2VuZSxcbiAgdHJhbnNpdGlvbkZyYW1lczogbnVtYmVyXG4pID0+IHtcbiAgY29uc3QgZGlmZiA9IGJ1aWxkVHJhbnNpdGlvbkRpZmYoc2NlbmUsIG5leHRTY2VuZSlcblxuICByZXR1cm4gU3RyZWFtLnJhbmdlKDEsIHRyYW5zaXRpb25GcmFtZXMpLnBpcGUoXG4gICAgU3RyZWFtLm1hcCgoaW5kZXgpID0+IHtcbiAgICAgIGNvbnN0IHJhd1Byb2dyZXNzID0gaW5kZXggLyB0cmFuc2l0aW9uRnJhbWVzXG4gICAgICBjb25zdCBwcm9ncmVzcyA9IGVhc2VJbk91dEN1YmljKHJhd1Byb2dyZXNzKVxuICAgICAgY29uc3QgYmxlbmRlZEJhY2tncm91bmQgPSBibGVuZENvbG9ycyhzY2VuZS5iYWNrZ3JvdW5kLCBuZXh0U2NlbmUuYmFja2dyb3VuZCwgcHJvZ3Jlc3MpXG4gICAgICBjb25zdCB0b2tlbnMgPSBidWlsZFRyYW5zaXRpb25Ub2tlbnMoY29uZmlnLCBkaWZmLCBwcm9ncmVzcylcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZDogYmxlbmRlZEJhY2tncm91bmQsXG4gICAgICAgIGtpbmQ6IFwidHJhbnNpdGlvblwiLFxuICAgICAgICB0b2tlbnMsXG4gICAgICB9IHNhdGlzZmllcyBSZW5kZXJGcmFtZVxuICAgIH0pXG4gIClcbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkRnJhbWVzU3RyZWFtID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgc2NlbmVzOiBTY2VuZVtdLFxuICBibG9ja0ZyYW1lczogbnVtYmVyLFxuICB0cmFuc2l0aW9uRnJhbWVzOiBudW1iZXJcbikgPT5cbiAgU3RyZWFtLmZyb21JdGVyYWJsZShzY2VuZXMpLnBpcGUoXG4gICAgU3RyZWFtLnppcFdpdGhJbmRleCxcbiAgICBTdHJlYW0uZmxhdE1hcCgoW3NjZW5lLCBpbmRleF0pID0+IHtcbiAgICAgIGNvbnN0IG5leHRTY2VuZSA9IHNjZW5lc1tpbmRleCArIDFdXG4gICAgICBjb25zdCBiYXNlID0gYnVpbGRTY2VuZUZyYW1lcyhzY2VuZSwgYmxvY2tGcmFtZXMpXG4gICAgICByZXR1cm4gbmV4dFNjZW5lXG4gICAgICAgID8gU3RyZWFtLmNvbmNhdChiYXNlLCBidWlsZFRyYW5zaXRpb25GcmFtZXMoY29uZmlnLCBzY2VuZSwgbmV4dFNjZW5lLCB0cmFuc2l0aW9uRnJhbWVzKSlcbiAgICAgICAgOiBiYXNlXG4gICAgfSlcbiAgKVxuIiwKICAgICJleHBvcnQgY29uc3QgZXhwYW5kU2hvcnRIZXggPSAoaGV4OiBzdHJpbmcpID0+IHtcbiAgaWYgKGhleC5sZW5ndGggPT09IDMpIHtcbiAgICBjb25zdCByID0gaGV4LmNoYXJBdCgwKVxuICAgIGNvbnN0IGcgPSBoZXguY2hhckF0KDEpXG4gICAgY29uc3QgYiA9IGhleC5jaGFyQXQoMilcbiAgICByZXR1cm4gciArIHIgKyBnICsgZyArIGIgKyBiXG4gIH1cbiAgaWYgKGhleC5sZW5ndGggPT09IDQpIHtcbiAgICBjb25zdCByID0gaGV4LmNoYXJBdCgwKVxuICAgIGNvbnN0IGcgPSBoZXguY2hhckF0KDEpXG4gICAgY29uc3QgYiA9IGhleC5jaGFyQXQoMilcbiAgICBjb25zdCBhID0gaGV4LmNoYXJBdCgzKVxuICAgIHJldHVybiByICsgciArIGcgKyBnICsgYiArIGIgKyBhICsgYVxuICB9XG4gIHJldHVybiBoZXhcbn1cblxuZXhwb3J0IGNvbnN0IHBhcnNlSGV4Q29sb3IgPSAoY29sb3I6IHN0cmluZykgPT4ge1xuICBjb25zdCBub3JtYWxpemVkID0gZXhwYW5kU2hvcnRIZXgoY29sb3IucmVwbGFjZShcIiNcIiwgXCJcIikudHJpbSgpKVxuICBpZiAobm9ybWFsaXplZC5sZW5ndGggIT09IDYgJiYgbm9ybWFsaXplZC5sZW5ndGggIT09IDgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgYWxwaGE6IDEsXG4gICAgICBibHVlOiAxMSxcbiAgICAgIGdyZWVuOiAxMSxcbiAgICAgIHJlZDogMTEsXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmVkID0gTnVtYmVyLnBhcnNlSW50KG5vcm1hbGl6ZWQuc2xpY2UoMCwgMiksIDE2KVxuICBjb25zdCBncmVlbiA9IE51bWJlci5wYXJzZUludChub3JtYWxpemVkLnNsaWNlKDIsIDQpLCAxNilcbiAgY29uc3QgYmx1ZSA9IE51bWJlci5wYXJzZUludChub3JtYWxpemVkLnNsaWNlKDQsIDYpLCAxNilcbiAgY29uc3QgYWxwaGEgPSBub3JtYWxpemVkLmxlbmd0aCA9PT0gOCA/IE51bWJlci5wYXJzZUludChub3JtYWxpemVkLnNsaWNlKDYsIDgpLCAxNikgLyAyNTUgOiAxXG5cbiAgaWYgKE51bWJlci5pc05hTihyZWQpIHx8IE51bWJlci5pc05hTihncmVlbikgfHwgTnVtYmVyLmlzTmFOKGJsdWUpIHx8IE51bWJlci5pc05hTihhbHBoYSkpIHtcbiAgICByZXR1cm4geyBhbHBoYTogMSwgYmx1ZTogMTEsIGdyZWVuOiAxMSwgcmVkOiAxMSB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGFscGhhLFxuICAgIGJsdWUsXG4gICAgZ3JlZW4sXG4gICAgcmVkLFxuICB9XG59XG5cbmV4cG9ydCBjb25zdCBsZXJwID0gKHN0YXJ0OiBudW1iZXIsIGVuZDogbnVtYmVyLCBwcm9ncmVzczogbnVtYmVyKSA9PlxuICBzdGFydCArIChlbmQgLSBzdGFydCkgKiBwcm9ncmVzc1xuXG5leHBvcnQgY29uc3QgYmxlbmRDb2xvcnMgPSAoZnJvbTogc3RyaW5nLCB0bzogc3RyaW5nLCBwcm9ncmVzczogbnVtYmVyKSA9PiB7XG4gIGNvbnN0IGZyb21Db2xvciA9IHBhcnNlSGV4Q29sb3IoZnJvbSlcbiAgY29uc3QgdG9Db2xvciA9IHBhcnNlSGV4Q29sb3IodG8pXG5cbiAgY29uc3QgYmxlbmRlZCA9IHtcbiAgICBhbHBoYTogbGVycChmcm9tQ29sb3IuYWxwaGEsIHRvQ29sb3IuYWxwaGEsIHByb2dyZXNzKSxcbiAgICBibHVlOiBsZXJwKGZyb21Db2xvci5ibHVlLCB0b0NvbG9yLmJsdWUsIHByb2dyZXNzKSxcbiAgICBncmVlbjogbGVycChmcm9tQ29sb3IuZ3JlZW4sIHRvQ29sb3IuZ3JlZW4sIHByb2dyZXNzKSxcbiAgICByZWQ6IGxlcnAoZnJvbUNvbG9yLnJlZCwgdG9Db2xvci5yZWQsIHByb2dyZXNzKSxcbiAgfVxuXG4gIHJldHVybiBgcmdiYSgke01hdGgucm91bmQoYmxlbmRlZC5yZWQpfSwgJHtNYXRoLnJvdW5kKGJsZW5kZWQuZ3JlZW4pfSwgJHtNYXRoLnJvdW5kKFxuICAgIGJsZW5kZWQuYmx1ZVxuICApfSwgJHtibGVuZGVkLmFscGhhLnRvRml4ZWQoMyl9KWBcbn1cbiIsCiAgICAiaW1wb3J0IHsgRWZmZWN0IH0gZnJvbSBcImVmZmVjdFwiXG5pbXBvcnQgeyBjb2RlVG9Ub2tlbnMsIHR5cGUgQnVuZGxlZFRoZW1lLCB0eXBlIFRoZW1lZFRva2VuIH0gZnJvbSBcInNoaWtpXCJcbmltcG9ydCB0eXBlIHsgQ2FudmFzQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIlxuaW1wb3J0IHR5cGUge1xuICBDb2RlQmxvY2ssXG4gIExheW91dFRva2VuLFxuICBSZW5kZXJDb25maWcsXG4gIFNjZW5lLFxuICBTY2VuZUxheW91dCxcbiAgVG9rZW5DYXRlZ29yeSxcbn0gZnJvbSBcIi4vdHlwZXNcIlxuaW1wb3J0IHtcbiAgRk9OVF9TVFlMRV9CT0xELFxuICBGT05UX1NUWUxFX0lUQUxJQyxcbiAgRk9OVF9TVFlMRV9OT05FLFxuICBGT05UX1NUWUxFX1VOREVSTElORSxcbn0gZnJvbSBcIi4vY29uc3RhbnRzXCJcbmltcG9ydCB7IFNjZW5lTWVhc3VyZUZhaWxlZCB9IGZyb20gXCIuL2Vycm9yc1wiXG5pbXBvcnQgeyBidWlsZEZvbnQsIGRyYXdVbmRlcmxpbmUgfSBmcm9tIFwiLi90ZXh0XCJcbmltcG9ydCB7IGNhdGVnb3JpemVUb2tlbiB9IGZyb20gXCIuL3Rva2VuXCJcblxuY29uc3Qgbm9ybWFsaXplVG9rZW5Db250ZW50ID0gKGNvbmZpZzogUmVuZGVyQ29uZmlnLCBjb250ZW50OiBzdHJpbmcpID0+XG4gIGNvbnRlbnQuc3BsaXQoXCJcXHRcIikuam9pbihjb25maWcudGFiUmVwbGFjZW1lbnQpXG5cbmNvbnN0IG1lYXN1cmVUb2tlbldpZHRoID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgY29udGVudDogc3RyaW5nLFxuICBpc0l0YWxpYzogYm9vbGVhbixcbiAgaXNCb2xkOiBib29sZWFuXG4pID0+IHtcbiAgY29uc3QgbWVhc3VyZUNvbnRleHQgPSBjb250ZXh0XG4gIGNvbnN0IHByZXZpb3VzRm9udCA9IG1lYXN1cmVDb250ZXh0LmZvbnRcbiAgbWVhc3VyZUNvbnRleHQuZm9udCA9IGJ1aWxkRm9udChjb25maWcsIGlzSXRhbGljLCBpc0JvbGQpXG4gIGNvbnN0IHdpZHRoID0gbWVhc3VyZUNvbnRleHQubWVhc3VyZVRleHQoY29udGVudCkud2lkdGhcbiAgbWVhc3VyZUNvbnRleHQuZm9udCA9IHByZXZpb3VzRm9udFxuICByZXR1cm4gd2lkdGhcbn1cblxuY29uc3QgcmVzb2x2ZVRva2VuQ2F0ZWdvcnkgPSAodG9rZW46IFRoZW1lZFRva2VuKSA9PiB7XG4gIGNvbnN0IHNjb3BlcyA9XG4gICAgdG9rZW4uZXhwbGFuYXRpb24/LmZsYXRNYXAoKGV4cGxhbmF0aW9uKSA9PlxuICAgICAgZXhwbGFuYXRpb24uc2NvcGVzLm1hcCgoc2NvcGUpID0+IHNjb3BlLnNjb3BlTmFtZSlcbiAgICApID8/IFtdXG4gIHJldHVybiBjYXRlZ29yaXplVG9rZW4oc2NvcGVzKVxufVxuXG50eXBlIE1lYXN1cmVkVG9rZW4gPSB7XG4gIGNhdGVnb3J5OiBUb2tlbkNhdGVnb3J5XG4gIGNvbG9yOiBzdHJpbmdcbiAgY29udGVudDogc3RyaW5nXG4gIGZvbnRTdHlsZTogbnVtYmVyXG4gIHdpZHRoOiBudW1iZXJcbn1cblxudHlwZSBNZWFzdXJlZExpbmUgPSB7XG4gIHRva2VuczogTWVhc3VyZWRUb2tlbltdXG4gIHdpZHRoOiBudW1iZXJcbn1cblxuZXhwb3J0IHR5cGUgTWVhc3VyZWRTY2VuZSA9IHtcbiAgYmFja2dyb3VuZDogc3RyaW5nXG4gIGJsb2NrSGVpZ2h0OiBudW1iZXJcbiAgYmxvY2tXaWR0aDogbnVtYmVyXG4gIGNvbnRlbnRIZWlnaHQ6IG51bWJlclxuICBjb250ZW50V2lkdGg6IG51bWJlclxuICBmb3JlZ3JvdW5kOiBzdHJpbmdcbiAgbGluZXM6IE1lYXN1cmVkTGluZVtdXG4gIHRva2VuczogVGhlbWVkVG9rZW5bXVtdXG59XG5cbmV4cG9ydCBjb25zdCBtZWFzdXJlU2NlbmUgPSBFZmZlY3QuZm4oZnVuY3Rpb24qIG1lYXN1cmVTY2VuZShcbiAgY29uZmlnOiBSZW5kZXJDb25maWcsXG4gIGNvbnRleHQ6IENhbnZhc0NvbnRleHQsXG4gIGNvZGVCbG9jazogQ29kZUJsb2NrLFxuICB0aGVtZTogQnVuZGxlZFRoZW1lXG4pIHtcbiAgcmV0dXJuIHlpZWxkKiBFZmZlY3QudHJ5UHJvbWlzZSh7XG4gICAgY2F0Y2g6IChjYXVzZTogdW5rbm93bikgPT4gbmV3IFNjZW5lTWVhc3VyZUZhaWxlZCh7IGNhdXNlIH0pLFxuICAgIHRyeTogYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgdG9rZW5SZXN1bHQgPSBhd2FpdCBjb2RlVG9Ub2tlbnMoY29kZUJsb2NrLmNvZGUsIHtcbiAgICAgICAgaW5jbHVkZUV4cGxhbmF0aW9uOiBcInNjb3BlTmFtZVwiLFxuICAgICAgICBsYW5nOiBjb2RlQmxvY2subGFuZ3VhZ2UsXG4gICAgICAgIHRoZW1lLFxuICAgICAgfSlcblxuICAgICAgY29uc3QgdG9rZW5zID0gdG9rZW5SZXN1bHQudG9rZW5zXG4gICAgICBjb25zdCBmb3JlZ3JvdW5kID0gdG9rZW5SZXN1bHQuZmcgPz8gY29uZmlnLmZvcmVncm91bmRcbiAgICAgIGNvbnN0IGJhY2tncm91bmQgPSB0b2tlblJlc3VsdC5iZyA/PyBjb25maWcuYmFja2dyb3VuZFxuXG4gICAgICBjb25zdCBsaW5lTWV0cmljcyA9IHRva2Vucy5tYXAoKGxpbmVUb2tlbnMpID0+IHtcbiAgICAgICAgY29uc3QgbWV0cmljczogTWVhc3VyZWRUb2tlbltdID0gW11cbiAgICAgICAgbGV0IGxpbmVXaWR0aCA9IDBcblxuICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIGxpbmVUb2tlbnMpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gbm9ybWFsaXplVG9rZW5Db250ZW50KGNvbmZpZywgdG9rZW4uY29udGVudClcbiAgICAgICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3Qgc3R5bGVGbGFncyA9IHRva2VuLmZvbnRTdHlsZSA/PyBGT05UX1NUWUxFX05PTkVcbiAgICAgICAgICBjb25zdCBpc0l0YWxpYyA9IChzdHlsZUZsYWdzICYgRk9OVF9TVFlMRV9JVEFMSUMpID09PSBGT05UX1NUWUxFX0lUQUxJQ1xuICAgICAgICAgIGNvbnN0IGlzQm9sZCA9IChzdHlsZUZsYWdzICYgRk9OVF9TVFlMRV9CT0xEKSA9PT0gRk9OVF9TVFlMRV9CT0xEXG4gICAgICAgICAgY29uc3Qgd2lkdGggPSBtZWFzdXJlVG9rZW5XaWR0aChjb25maWcsIGNvbnRleHQsIGNvbnRlbnQsIGlzSXRhbGljLCBpc0JvbGQpXG4gICAgICAgICAgY29uc3QgY29sb3IgPSB0b2tlbi5jb2xvciA/PyBmb3JlZ3JvdW5kXG5cbiAgICAgICAgICBtZXRyaWNzLnB1c2goe1xuICAgICAgICAgICAgY2F0ZWdvcnk6IHJlc29sdmVUb2tlbkNhdGVnb3J5KHRva2VuKSxcbiAgICAgICAgICAgIGNvbG9yLFxuICAgICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAgIGZvbnRTdHlsZTogc3R5bGVGbGFncyxcbiAgICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIH0pXG4gICAgICAgICAgbGluZVdpZHRoICs9IHdpZHRoXG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHRva2VuczogbWV0cmljcyxcbiAgICAgICAgICB3aWR0aDogbGluZVdpZHRoLFxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBjb25zdCBtYXhMaW5lV2lkdGggPVxuICAgICAgICBsaW5lTWV0cmljcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4ubGluZU1ldHJpY3MubWFwKChsaW5lKSA9PiBsaW5lLndpZHRoKSkgOiAwXG4gICAgICBjb25zdCBjb250ZW50V2lkdGggPSBNYXRoLm1heCgwLCBtYXhMaW5lV2lkdGgpXG4gICAgICBjb25zdCBjb250ZW50SGVpZ2h0ID0gdG9rZW5zLmxlbmd0aCAqIGNvbmZpZy5saW5lSGVpZ2h0XG4gICAgICBjb25zdCBibG9ja1dpZHRoID0gY29udGVudFdpZHRoICsgY29uZmlnLnBhZGRpbmcgKiAyXG4gICAgICBjb25zdCBibG9ja0hlaWdodCA9IGNvbnRlbnRIZWlnaHQgKyBjb25maWcucGFkZGluZyAqIDJcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFja2dyb3VuZCxcbiAgICAgICAgYmxvY2tIZWlnaHQsXG4gICAgICAgIGJsb2NrV2lkdGgsXG4gICAgICAgIGNvbnRlbnRIZWlnaHQsXG4gICAgICAgIGNvbnRlbnRXaWR0aCxcbiAgICAgICAgZm9yZWdyb3VuZCxcbiAgICAgICAgbGluZXM6IGxpbmVNZXRyaWNzLFxuICAgICAgICB0b2tlbnMsXG4gICAgICB9IHNhdGlzZmllcyBNZWFzdXJlZFNjZW5lXG4gICAgfSxcbiAgfSlcbn0pXG5cbmV4cG9ydCBjb25zdCByZXNvbHZlRnJhbWVTaXplID0gKGNvbmZpZzogUmVuZGVyQ29uZmlnLCBtZWFzdXJlZFNjZW5lczogTWVhc3VyZWRTY2VuZVtdKSA9PiB7XG4gIGNvbnN0IG1heEJsb2NrV2lkdGggPVxuICAgIG1lYXN1cmVkU2NlbmVzLmxlbmd0aCA+IDAgPyBNYXRoLm1heCguLi5tZWFzdXJlZFNjZW5lcy5tYXAoKHNjZW5lKSA9PiBzY2VuZS5ibG9ja1dpZHRoKSkgOiAwXG4gIGNvbnN0IG1heEJsb2NrSGVpZ2h0ID1cbiAgICBtZWFzdXJlZFNjZW5lcy5sZW5ndGggPiAwID8gTWF0aC5tYXgoLi4ubWVhc3VyZWRTY2VuZXMubWFwKChzY2VuZSkgPT4gc2NlbmUuYmxvY2tIZWlnaHQpKSA6IDBcblxuICByZXR1cm4ge1xuICAgIGhlaWdodDogTWF0aC5tYXgoY29uZmlnLmhlaWdodCwgTWF0aC5jZWlsKG1heEJsb2NrSGVpZ2h0KSksXG4gICAgd2lkdGg6IE1hdGgubWF4KGNvbmZpZy53aWR0aCwgTWF0aC5jZWlsKG1heEJsb2NrV2lkdGgpKSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgbGF5b3V0U2NlbmUgPSAoXG4gIGNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBtZWFzdXJlZDogTWVhc3VyZWRTY2VuZSxcbiAgZnJhbWVXaWR0aDogbnVtYmVyLFxuICBmcmFtZUhlaWdodDogbnVtYmVyXG4pOiBTY2VuZSA9PiB7XG4gIGNvbnN0IGJsb2NrWCA9IE1hdGgubWF4KDAsIE1hdGgucm91bmQoKGZyYW1lV2lkdGggLSBtZWFzdXJlZC5ibG9ja1dpZHRoKSAvIDIpKVxuICBjb25zdCBibG9ja1kgPSBNYXRoLm1heCgwLCBNYXRoLnJvdW5kKChmcmFtZUhlaWdodCAtIG1lYXN1cmVkLmJsb2NrSGVpZ2h0KSAvIDIpKVxuXG4gIGNvbnN0IGxheW91dDogU2NlbmVMYXlvdXQgPSB7XG4gICAgbGluZXM6IG1lYXN1cmVkLmxpbmVzLm1hcCgobGluZSwgbGluZUluZGV4KSA9PiB7XG4gICAgICBsZXQgY3Vyc29yWCA9IGJsb2NrWCArIGNvbmZpZy5wYWRkaW5nXG4gICAgICBjb25zdCBjdXJzb3JZID0gYmxvY2tZICsgY29uZmlnLnBhZGRpbmcgKyBsaW5lSW5kZXggKiBjb25maWcubGluZUhlaWdodFxuICAgICAgY29uc3QgbGF5b3V0VG9rZW5zOiBMYXlvdXRUb2tlbltdID0gbGluZS50b2tlbnMubWFwKCh0b2tlbikgPT4ge1xuICAgICAgICBjb25zdCBsYXlvdXRUb2tlbiA9IHtcbiAgICAgICAgICAuLi50b2tlbixcbiAgICAgICAgICB4OiBNYXRoLnJvdW5kKGN1cnNvclgpLFxuICAgICAgICAgIHk6IE1hdGgucm91bmQoY3Vyc29yWSksXG4gICAgICAgIH1cbiAgICAgICAgY3Vyc29yWCArPSB0b2tlbi53aWR0aFxuICAgICAgICByZXR1cm4gbGF5b3V0VG9rZW5cbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHRva2VuczogbGF5b3V0VG9rZW5zLFxuICAgICAgfVxuICAgIH0pLFxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBiYWNrZ3JvdW5kOiBtZWFzdXJlZC5iYWNrZ3JvdW5kLFxuICAgIGJsb2NrWCxcbiAgICBibG9ja1ksXG4gICAgY29udGVudEhlaWdodDogbWVhc3VyZWQuY29udGVudEhlaWdodCxcbiAgICBjb250ZW50V2lkdGg6IG1lYXN1cmVkLmNvbnRlbnRXaWR0aCxcbiAgICBmb3JlZ3JvdW5kOiBtZWFzdXJlZC5mb3JlZ3JvdW5kLFxuICAgIGxheW91dCxcbiAgICB0b2tlbnM6IG1lYXN1cmVkLnRva2VucyxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVuZGVyU2NlbmVUZXh0ID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgc2NlbmU6IFNjZW5lLFxuICBvcGFjaXR5OiBudW1iZXIsXG4gIGJsb2NrWDogbnVtYmVyLFxuICBibG9ja1k6IG51bWJlclxuKSA9PiB7XG4gIGlmIChvcGFjaXR5IDw9IDApIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHRleHRDb250ZXh0ID0gY29udGV4dFxuICBjb25zdCBzdGFydFggPSBibG9ja1ggKyBjb25maWcucGFkZGluZ1xuICBjb25zdCBzdGFydFkgPSBibG9ja1kgKyBjb25maWcucGFkZGluZ1xuICBjb25zdCBwcmV2aW91c0FscGhhID0gdGV4dENvbnRleHQuZ2xvYmFsQWxwaGFcbiAgY29uc3QgcHJldmlvdXNCYXNlbGluZSA9IHRleHRDb250ZXh0LnRleHRCYXNlbGluZVxuICBjb25zdCBwcmV2aW91c0FsaWduID0gdGV4dENvbnRleHQudGV4dEFsaWduXG4gIGNvbnN0IHByZXZpb3VzRm9udCA9IHRleHRDb250ZXh0LmZvbnRcbiAgY29uc3QgcHJldmlvdXNGaWxsU3R5bGUgPSB0ZXh0Q29udGV4dC5maWxsU3R5bGVcblxuICB0ZXh0Q29udGV4dC5nbG9iYWxBbHBoYSA9IG9wYWNpdHlcbiAgdGV4dENvbnRleHQudGV4dEJhc2VsaW5lID0gXCJ0b3BcIlxuICB0ZXh0Q29udGV4dC50ZXh0QWxpZ24gPSBcImxlZnRcIlxuXG4gIGZvciAobGV0IGxpbmVJbmRleCA9IDA7IGxpbmVJbmRleCA8IHNjZW5lLnRva2Vucy5sZW5ndGg7IGxpbmVJbmRleCArPSAxKSB7XG4gICAgY29uc3QgbGluZVRva2VucyA9IHNjZW5lLnRva2Vuc1tsaW5lSW5kZXhdID8/IFtdXG4gICAgbGV0IGN1cnNvclggPSBzdGFydFhcbiAgICBjb25zdCBjdXJzb3JZID0gc3RhcnRZICsgbGluZUluZGV4ICogY29uZmlnLmxpbmVIZWlnaHRcblxuICAgIGZvciAoY29uc3QgdG9rZW4gb2YgbGluZVRva2Vucykge1xuICAgICAgY29uc3QgY29udGVudCA9IG5vcm1hbGl6ZVRva2VuQ29udGVudChjb25maWcsIHRva2VuLmNvbnRlbnQpXG4gICAgICBpZiAoIWNvbnRlbnQpIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgY29uc3QgZm9udFN0eWxlID0gdG9rZW4uZm9udFN0eWxlID8/IEZPTlRfU1RZTEVfTk9ORVxuICAgICAgY29uc3QgaXNJdGFsaWMgPSAoZm9udFN0eWxlICYgRk9OVF9TVFlMRV9JVEFMSUMpID09PSBGT05UX1NUWUxFX0lUQUxJQ1xuICAgICAgY29uc3QgaXNCb2xkID0gKGZvbnRTdHlsZSAmIEZPTlRfU1RZTEVfQk9MRCkgPT09IEZPTlRfU1RZTEVfQk9MRFxuICAgICAgY29uc3QgaXNVbmRlcmxpbmUgPSAoZm9udFN0eWxlICYgRk9OVF9TVFlMRV9VTkRFUkxJTkUpID09PSBGT05UX1NUWUxFX1VOREVSTElORVxuXG4gICAgICB0ZXh0Q29udGV4dC5mb250ID0gYnVpbGRGb250KGNvbmZpZywgaXNJdGFsaWMsIGlzQm9sZClcbiAgICAgIHRleHRDb250ZXh0LmZpbGxTdHlsZSA9IHRva2VuLmNvbG9yID8/IHNjZW5lLmZvcmVncm91bmRcbiAgICAgIHRleHRDb250ZXh0LmZpbGxUZXh0KGNvbnRlbnQsIE1hdGgucm91bmQoY3Vyc29yWCksIE1hdGgucm91bmQoY3Vyc29yWSkpXG5cbiAgICAgIGNvbnN0IHRva2VuV2lkdGggPSB0ZXh0Q29udGV4dC5tZWFzdXJlVGV4dChjb250ZW50KS53aWR0aFxuXG4gICAgICBpZiAoaXNVbmRlcmxpbmUpIHtcbiAgICAgICAgZHJhd1VuZGVybGluZShjb25maWcsIHRleHRDb250ZXh0LCBNYXRoLnJvdW5kKGN1cnNvclgpLCBNYXRoLnJvdW5kKGN1cnNvclkpLCB0b2tlbldpZHRoKVxuICAgICAgfVxuXG4gICAgICBjdXJzb3JYICs9IHRva2VuV2lkdGhcbiAgICB9XG4gIH1cblxuICB0ZXh0Q29udGV4dC5nbG9iYWxBbHBoYSA9IHByZXZpb3VzQWxwaGFcbiAgdGV4dENvbnRleHQudGV4dEJhc2VsaW5lID0gcHJldmlvdXNCYXNlbGluZVxuICB0ZXh0Q29udGV4dC50ZXh0QWxpZ24gPSBwcmV2aW91c0FsaWduXG4gIHRleHRDb250ZXh0LmZvbnQgPSBwcmV2aW91c0ZvbnRcbiAgdGV4dENvbnRleHQuZmlsbFN0eWxlID0gcHJldmlvdXNGaWxsU3R5bGVcbn1cbiIsCiAgICAiZXhwb3J0IGNvbnN0IEZPTlRfU1RZTEVfTk9ORSA9IDBcbmV4cG9ydCBjb25zdCBGT05UX1NUWUxFX0lUQUxJQyA9IDFcbmV4cG9ydCBjb25zdCBGT05UX1NUWUxFX0JPTEQgPSAyXG5leHBvcnQgY29uc3QgRk9OVF9TVFlMRV9VTkRFUkxJTkUgPSA0XG4iLAogICAgImltcG9ydCB0eXBlIHsgQ2FudmFzQ29udGV4dCB9IGZyb20gXCIuL2NvbnRleHRcIlxuaW1wb3J0IHR5cGUgeyBSZW5kZXJDb25maWcgfSBmcm9tIFwiLi90eXBlc1wiXG5cbmV4cG9ydCBjb25zdCBidWlsZEZvbnQgPSAoY29uZmlnOiBSZW5kZXJDb25maWcsIGlzSXRhbGljOiBib29sZWFuLCBpc0JvbGQ6IGJvb2xlYW4pID0+IHtcbiAgY29uc3Qgc3R5bGUgPSBgJHtpc0l0YWxpYyA/IFwiaXRhbGljIFwiIDogXCJcIn0ke2lzQm9sZCA/IFwiYm9sZCBcIiA6IFwiXCJ9YFxuICByZXR1cm4gYCR7c3R5bGV9JHtjb25maWcuZm9udFNpemV9cHggJHtjb25maWcuZm9udEZhbWlseX1gXG59XG5cbmV4cG9ydCBjb25zdCBkcmF3VW5kZXJsaW5lID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgY29udGV4dDogQ2FudmFzQ29udGV4dCxcbiAgeDogbnVtYmVyLFxuICB5OiBudW1iZXIsXG4gIHdpZHRoOiBudW1iZXJcbikgPT4ge1xuICBjb25zdCBkcmF3Q29udGV4dCA9IGNvbnRleHRcbiAgY29uc3QgcHJldmlvdXNTdHJva2VTdHlsZSA9IGRyYXdDb250ZXh0LnN0cm9rZVN0eWxlXG4gIGNvbnN0IHByZXZpb3VzTGluZVdpZHRoID0gZHJhd0NvbnRleHQubGluZVdpZHRoXG4gIGNvbnN0IHVuZGVybGluZVkgPSB5ICsgY29uZmlnLmZvbnRTaXplICsgMlxuXG4gIGRyYXdDb250ZXh0LnN0cm9rZVN0eWxlID0gZHJhd0NvbnRleHQuZmlsbFN0eWxlXG4gIGRyYXdDb250ZXh0LmxpbmVXaWR0aCA9IE1hdGgubWF4KDEsIE1hdGguZmxvb3IoY29uZmlnLmZvbnRTaXplIC8gMTIpKVxuICBkcmF3Q29udGV4dC5iZWdpblBhdGgoKVxuICBkcmF3Q29udGV4dC5tb3ZlVG8oeCwgdW5kZXJsaW5lWSlcbiAgZHJhd0NvbnRleHQubGluZVRvKHggKyB3aWR0aCwgdW5kZXJsaW5lWSlcbiAgZHJhd0NvbnRleHQuc3Ryb2tlKClcblxuICBkcmF3Q29udGV4dC5zdHJva2VTdHlsZSA9IHByZXZpb3VzU3Ryb2tlU3R5bGVcbiAgZHJhd0NvbnRleHQubGluZVdpZHRoID0gcHJldmlvdXNMaW5lV2lkdGhcbn1cbiIsCiAgICAiaW1wb3J0IHR5cGUgeyBUb2tlbkNhdGVnb3J5IH0gZnJvbSBcIi4vdHlwZXNcIlxuXG5jb25zdCBTQ09QRV9UT19DQVRFR09SWTogQXJyYXk8W1JlZ0V4cCwgVG9rZW5DYXRlZ29yeV0+ID0gW1xuICBbL15rZXl3b3JkXFwub3BlcmF0b3IvLCBcIm9wZXJhdG9yXCJdLFxuICBbL15rZXl3b3JkXFwuLywgXCJrZXl3b3JkXCJdLFxuICBbL15zdG9yYWdlXFwudHlwZS8sIFwia2V5d29yZFwiXSxcbiAgWy9ec3RvcmFnZVxcLm1vZGlmaWVyLywgXCJrZXl3b3JkXCJdLFxuICBbL15lbnRpdHlcXC5uYW1lXFwuZnVuY3Rpb24vLCBcImZ1bmN0aW9uXCJdLFxuICBbL15lbnRpdHlcXC5uYW1lXFwudHlwZS8sIFwidHlwZVwiXSxcbiAgWy9eZW50aXR5XFwubmFtZVxcLmNsYXNzLywgXCJ0eXBlXCJdLFxuICBbL15zdHJpbmdcXC4vLCBcInN0cmluZ1wiXSxcbiAgWy9eY29uc3RhbnRcXC5udW1lcmljLywgXCJudW1iZXJcIl0sXG4gIFsvXmNvbW1lbnRcXC4vLCBcImNvbW1lbnRcIl0sXG4gIFsvXnB1bmN0dWF0aW9uXFwuLywgXCJwdW5jdHVhdGlvblwiXSxcbiAgWy9ebWV0YVxcLmJyYWNlLywgXCJwdW5jdHVhdGlvblwiXSxcbiAgWy9edmFyaWFibGVcXC4vLCBcImlkZW50aWZpZXJcIl0sXG4gIFsvXmVudGl0eVxcLm5hbWVcXC4vLCBcImlkZW50aWZpZXJcIl0sXG5dXG5cbmV4cG9ydCBjb25zdCBjYXRlZ29yaXplVG9rZW4gPSAoc2NvcGVzOiBzdHJpbmdbXSk6IFRva2VuQ2F0ZWdvcnkgPT4ge1xuICBmb3IgKGNvbnN0IHNjb3BlIG9mIHNjb3Blcykge1xuICAgIGlmICghc2NvcGUpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuICAgIGlmIChzY29wZS5zdGFydHNXaXRoKFwic3RyaW5nLlwiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCJcbiAgICB9XG4gICAgaWYgKHNjb3BlLnN0YXJ0c1dpdGgoXCJwdW5jdHVhdGlvbi5kZWZpbml0aW9uLnN0cmluZ1wiKSkge1xuICAgICAgcmV0dXJuIFwic3RyaW5nXCJcbiAgICB9XG4gIH1cblxuICBmb3IgKGxldCBpbmRleCA9IHNjb3Blcy5sZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleCAtPSAxKSB7XG4gICAgY29uc3Qgc2NvcGUgPSBzY29wZXNbaW5kZXhdXG4gICAgaWYgKCFzY29wZSkge1xuICAgICAgY29udGludWVcbiAgICB9XG4gICAgZm9yIChjb25zdCBbcGF0dGVybiwgY2F0ZWdvcnldIG9mIFNDT1BFX1RPX0NBVEVHT1JZKSB7XG4gICAgICBpZiAocGF0dGVybi50ZXN0KHNjb3BlKSkge1xuICAgICAgICByZXR1cm4gY2F0ZWdvcnlcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIFwib3RoZXJcIlxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IENhbnZhc0NvbnRleHQgfSBmcm9tIFwiLi9jb250ZXh0XCJcbmltcG9ydCB0eXBlIHsgRHJhd1Rva2VuLCBMYXlvdXRUb2tlbiwgUmVuZGVyQ29uZmlnLCBTY2VuZSwgVHJhbnNpdGlvbkRpZmYgfSBmcm9tIFwiLi90eXBlc1wiXG5pbXBvcnQgeyBibGVuZENvbG9ycywgbGVycCB9IGZyb20gXCIuL2NvbG9yXCJcbmltcG9ydCB7IEZPTlRfU1RZTEVfQk9MRCwgRk9OVF9TVFlMRV9JVEFMSUMsIEZPTlRfU1RZTEVfVU5ERVJMSU5FIH0gZnJvbSBcIi4vY29uc3RhbnRzXCJcbmltcG9ydCB7IGJ1aWxkRm9udCwgZHJhd1VuZGVybGluZSB9IGZyb20gXCIuL3RleHRcIlxuXG5jb25zdCBidWlsZEV4YWN0S2V5ID0gKHRva2VuOiBMYXlvdXRUb2tlbikgPT4gYGV4YWN0Ojoke3Rva2VuLmNvbnRlbnR9Ojoke3Rva2VuLmZvbnRTdHlsZX1gXG5jb25zdCBidWlsZENhdGVnb3J5S2V5ID0gKHRva2VuOiBMYXlvdXRUb2tlbikgPT4gYGNhdGVnb3J5Ojoke3Rva2VuLmNhdGVnb3J5fWBcblxuY29uc3QgYnVpbGRUb2tlblNlcXVlbmNlID0gKHRva2VuczogTGF5b3V0VG9rZW5bXSwgYnVpbGRLZXk6ICh0b2tlbjogTGF5b3V0VG9rZW4pID0+IHN0cmluZykgPT5cbiAgdG9rZW5zLm1hcCgodG9rZW4pID0+ICh7XG4gICAga2V5OiBidWlsZEtleSh0b2tlbiksXG4gICAgdG9rZW4sXG4gIH0pKVxuXG50eXBlIFRva2VuV2l0aEluZGV4ID0ge1xuICBpbmRleDogbnVtYmVyXG4gIHRva2VuOiBMYXlvdXRUb2tlblxufVxuXG5jb25zdCBncm91cEJ5S2V5ID0gKHRva2VuczogTGF5b3V0VG9rZW5bXSwgYnVpbGRLZXk6ICh0b2tlbjogTGF5b3V0VG9rZW4pID0+IHN0cmluZykgPT4ge1xuICBjb25zdCBncm91cGVkID0gbmV3IE1hcDxzdHJpbmcsIFRva2VuV2l0aEluZGV4W10+KClcbiAgdG9rZW5zLmZvckVhY2goKHRva2VuLCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IGtleSA9IGJ1aWxkS2V5KHRva2VuKVxuICAgIGNvbnN0IGdyb3VwID0gZ3JvdXBlZC5nZXQoa2V5KSA/PyBbXVxuICAgIGdyb3VwLnB1c2goeyBpbmRleCwgdG9rZW4gfSlcbiAgICBncm91cGVkLnNldChrZXksIGdyb3VwKVxuICB9KVxuICByZXR1cm4gZ3JvdXBlZFxufVxuXG5jb25zdCBkaWZmQnlLZXkgPSAoXG4gIGZyb21Ub2tlbnM6IExheW91dFRva2VuW10sXG4gIHRvVG9rZW5zOiBMYXlvdXRUb2tlbltdLFxuICBidWlsZEtleTogKHRva2VuOiBMYXlvdXRUb2tlbikgPT4gc3RyaW5nXG4pID0+IHtcbiAgY29uc3QgZnJvbUl0ZW1zID0gYnVpbGRUb2tlblNlcXVlbmNlKGZyb21Ub2tlbnMsIGJ1aWxkS2V5KVxuICBjb25zdCB0b0l0ZW1zID0gYnVpbGRUb2tlblNlcXVlbmNlKHRvVG9rZW5zLCBidWlsZEtleSlcbiAgY29uc3QgZnJvbUtleXMgPSBmcm9tSXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmtleSlcbiAgY29uc3QgdG9LZXlzID0gdG9JdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0ua2V5KVxuICBjb25zdCBtYXRyaXggPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiBmcm9tS2V5cy5sZW5ndGggKyAxIH0sICgpID0+XG4gICAgQXJyYXkuZnJvbSh7IGxlbmd0aDogdG9LZXlzLmxlbmd0aCArIDEgfSwgKCkgPT4gMClcbiAgKVxuXG4gIGZvciAobGV0IGkgPSBmcm9tS2V5cy5sZW5ndGggLSAxOyBpID49IDA7IGkgLT0gMSkge1xuICAgIGNvbnN0IHJvdyA9IG1hdHJpeFtpXVxuICAgIGlmICghcm93KSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGZvciAobGV0IGogPSB0b0tleXMubGVuZ3RoIC0gMTsgaiA+PSAwOyBqIC09IDEpIHtcbiAgICAgIGNvbnN0IGZyb21LZXkgPSBmcm9tS2V5c1tpXSA/PyBcIlwiXG4gICAgICBjb25zdCB0b0tleSA9IHRvS2V5c1tqXSA/PyBcIlwiXG5cbiAgICAgIGlmIChmcm9tS2V5ID09PSB0b0tleSkge1xuICAgICAgICByb3dbal0gPSAobWF0cml4W2kgKyAxXT8uW2ogKyAxXSA/PyAwKSArIDFcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IG5leHRSb3cgPSBtYXRyaXhbaSArIDFdXG4gICAgICAgIGNvbnN0IGN1cnJlbnRSb3cgPSBtYXRyaXhbaV1cbiAgICAgICAgcm93W2pdID0gTWF0aC5tYXgobmV4dFJvdz8uW2pdID8/IDAsIGN1cnJlbnRSb3c/LltqICsgMV0gPz8gMClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBjb25zdCBtYXRjaGVzOiBBcnJheTxbbnVtYmVyLCBudW1iZXJdPiA9IFtdXG4gIGxldCBpID0gMFxuICBsZXQgaiA9IDBcblxuICB3aGlsZSAoaSA8IGZyb21LZXlzLmxlbmd0aCAmJiBqIDwgdG9LZXlzLmxlbmd0aCkge1xuICAgIGNvbnN0IGZyb21LZXkgPSBmcm9tS2V5c1tpXSA/PyBcIlwiXG4gICAgY29uc3QgdG9LZXkgPSB0b0tleXNbal0gPz8gXCJcIlxuXG4gICAgaWYgKGZyb21LZXkgPT09IHRvS2V5KSB7XG4gICAgICBtYXRjaGVzLnB1c2goW2ksIGpdKVxuICAgICAgaSArPSAxXG4gICAgICBqICs9IDFcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3Qgc2tpcEZyb20gPSBtYXRyaXhbaSArIDFdPy5bal0gPz8gMFxuICAgIGNvbnN0IHNraXBUbyA9IG1hdHJpeFtpXT8uW2ogKyAxXSA/PyAwXG5cbiAgICBpZiAoc2tpcEZyb20gPj0gc2tpcFRvKSB7XG4gICAgICBpICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgaiArPSAxXG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWF0Y2hlZEZyb20gPSBuZXcgU2V0KG1hdGNoZXMubWFwKChbaW5kZXhdKSA9PiBpbmRleCkpXG4gIGNvbnN0IG1hdGNoZWRUbyA9IG5ldyBTZXQobWF0Y2hlcy5tYXAoKFssIGluZGV4XSkgPT4gaW5kZXgpKVxuXG4gIGNvbnN0IG1hdGNoZWQgPSBtYXRjaGVzLmZsYXRNYXAoKFtmcm9tSW5kZXgsIHRvSW5kZXhdKSA9PiB7XG4gICAgY29uc3QgZnJvbUl0ZW0gPSBmcm9tSXRlbXNbZnJvbUluZGV4XVxuICAgIGNvbnN0IHRvSXRlbSA9IHRvSXRlbXNbdG9JbmRleF1cblxuICAgIGlmICghZnJvbUl0ZW0gfHwgIXRvSXRlbSkge1xuICAgICAgcmV0dXJuIFtdXG4gICAgfVxuXG4gICAgcmV0dXJuIFt7IGZyb206IGZyb21JdGVtLnRva2VuLCB0bzogdG9JdGVtLnRva2VuIH1dXG4gIH0pXG5cbiAgcmV0dXJuIHtcbiAgICBhZGRlZDogdG9JdGVtcy5maWx0ZXIoKF8sIGluZGV4KSA9PiAhbWF0Y2hlZFRvLmhhcyhpbmRleCkpLm1hcCgoaXRlbSkgPT4gaXRlbS50b2tlbiksXG4gICAgbWF0Y2hlZCxcbiAgICByZW1vdmVkOiBmcm9tSXRlbXMuZmlsdGVyKChfLCBpbmRleCkgPT4gIW1hdGNoZWRGcm9tLmhhcyhpbmRleCkpLm1hcCgoaXRlbSkgPT4gaXRlbS50b2tlbiksXG4gIH1cbn1cblxuY29uc3QgbWF0Y2hCeUNhdGVnb3J5ID0gKHJlbW92ZWQ6IExheW91dFRva2VuW10sIGFkZGVkOiBMYXlvdXRUb2tlbltdKSA9PiB7XG4gIGNvbnN0IG1hdGNoZWQ6IEFycmF5PHsgZnJvbTogTGF5b3V0VG9rZW47IHRvOiBMYXlvdXRUb2tlbiB9PiA9IFtdXG4gIGNvbnN0IHVzZWRGcm9tID0gbmV3IFNldDxudW1iZXI+KClcbiAgY29uc3QgdXNlZFRvID0gbmV3IFNldDxudW1iZXI+KClcbiAgY29uc3QgcmVtb3ZlZEJ5Q2F0ZWdvcnkgPSBncm91cEJ5S2V5KHJlbW92ZWQsIGJ1aWxkQ2F0ZWdvcnlLZXkpXG4gIGNvbnN0IGFkZGVkQnlDYXRlZ29yeSA9IGdyb3VwQnlLZXkoYWRkZWQsIGJ1aWxkQ2F0ZWdvcnlLZXkpXG5cbiAgZm9yIChjb25zdCBbY2F0ZWdvcnlLZXksIGZyb21Hcm91cF0gb2YgcmVtb3ZlZEJ5Q2F0ZWdvcnkpIHtcbiAgICBjb25zdCB0b0dyb3VwID0gYWRkZWRCeUNhdGVnb3J5LmdldChjYXRlZ29yeUtleSkgPz8gW11cblxuICAgIGZvciAoY29uc3QgZnJvbUVudHJ5IG9mIGZyb21Hcm91cCkge1xuICAgICAgaWYgKHVzZWRGcm9tLmhhcyhmcm9tRW50cnkuaW5kZXgpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGxldCBiZXN0TWF0Y2g6IFRva2VuV2l0aEluZGV4IHwgbnVsbCA9IG51bGxcbiAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eVxuXG4gICAgICBmb3IgKGNvbnN0IHRvRW50cnkgb2YgdG9Hcm91cCkge1xuICAgICAgICBpZiAodXNlZFRvLmhhcyh0b0VudHJ5LmluZGV4KSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9XG4gICAgICAgICAgTWF0aC5hYnMoZnJvbUVudHJ5LnRva2VuLnkgLSB0b0VudHJ5LnRva2VuLnkpICogMTAwMCArXG4gICAgICAgICAgTWF0aC5hYnMoZnJvbUVudHJ5LnRva2VuLnggLSB0b0VudHJ5LnRva2VuLngpXG5cbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgYmVzdERpc3RhbmNlID0gZGlzdGFuY2VcbiAgICAgICAgICBiZXN0TWF0Y2ggPSB0b0VudHJ5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJlc3RNYXRjaCkge1xuICAgICAgICBtYXRjaGVkLnB1c2goeyBmcm9tOiBmcm9tRW50cnkudG9rZW4sIHRvOiBiZXN0TWF0Y2gudG9rZW4gfSlcbiAgICAgICAgdXNlZEZyb20uYWRkKGZyb21FbnRyeS5pbmRleClcbiAgICAgICAgdXNlZFRvLmFkZChiZXN0TWF0Y2guaW5kZXgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVkLFxuICAgIHN0aWxsQWRkZWQ6IGFkZGVkLmZpbHRlcigoXywgaW5kZXgpID0+ICF1c2VkVG8uaGFzKGluZGV4KSksXG4gICAgc3RpbGxSZW1vdmVkOiByZW1vdmVkLmZpbHRlcigoXywgaW5kZXgpID0+ICF1c2VkRnJvbS5oYXMoaW5kZXgpKSxcbiAgfVxufVxuXG5jb25zdCBtYXRjaEJ5RXhhY3RDb250ZW50ID0gKHJlbW92ZWQ6IExheW91dFRva2VuW10sIGFkZGVkOiBMYXlvdXRUb2tlbltdKSA9PiB7XG4gIGNvbnN0IG1hdGNoZWQ6IEFycmF5PHsgZnJvbTogTGF5b3V0VG9rZW47IHRvOiBMYXlvdXRUb2tlbiB9PiA9IFtdXG4gIGNvbnN0IHVzZWRGcm9tID0gbmV3IFNldDxudW1iZXI+KClcbiAgY29uc3QgdXNlZFRvID0gbmV3IFNldDxudW1iZXI+KClcbiAgY29uc3QgcmVtb3ZlZEJ5Q29udGVudCA9IGdyb3VwQnlLZXkocmVtb3ZlZCwgYnVpbGRFeGFjdEtleSlcbiAgY29uc3QgYWRkZWRCeUNvbnRlbnQgPSBncm91cEJ5S2V5KGFkZGVkLCBidWlsZEV4YWN0S2V5KVxuXG4gIGZvciAoY29uc3QgW2NvbnRlbnRLZXksIGZyb21Hcm91cF0gb2YgcmVtb3ZlZEJ5Q29udGVudCkge1xuICAgIGNvbnN0IHRvR3JvdXAgPSBhZGRlZEJ5Q29udGVudC5nZXQoY29udGVudEtleSkgPz8gW11cblxuICAgIGZvciAoY29uc3QgZnJvbUVudHJ5IG9mIGZyb21Hcm91cCkge1xuICAgICAgaWYgKHVzZWRGcm9tLmhhcyhmcm9tRW50cnkuaW5kZXgpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGxldCBiZXN0TWF0Y2g6IFRva2VuV2l0aEluZGV4IHwgbnVsbCA9IG51bGxcbiAgICAgIGxldCBiZXN0RGlzdGFuY2UgPSBJbmZpbml0eVxuXG4gICAgICBmb3IgKGNvbnN0IHRvRW50cnkgb2YgdG9Hcm91cCkge1xuICAgICAgICBpZiAodXNlZFRvLmhhcyh0b0VudHJ5LmluZGV4KSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBkaXN0YW5jZSA9XG4gICAgICAgICAgTWF0aC5hYnMoZnJvbUVudHJ5LnRva2VuLnkgLSB0b0VudHJ5LnRva2VuLnkpICogMTAwMCArXG4gICAgICAgICAgTWF0aC5hYnMoZnJvbUVudHJ5LnRva2VuLnggLSB0b0VudHJ5LnRva2VuLngpXG5cbiAgICAgICAgaWYgKGRpc3RhbmNlIDwgYmVzdERpc3RhbmNlKSB7XG4gICAgICAgICAgYmVzdERpc3RhbmNlID0gZGlzdGFuY2VcbiAgICAgICAgICBiZXN0TWF0Y2ggPSB0b0VudHJ5XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGJlc3RNYXRjaCkge1xuICAgICAgICBtYXRjaGVkLnB1c2goeyBmcm9tOiBmcm9tRW50cnkudG9rZW4sIHRvOiBiZXN0TWF0Y2gudG9rZW4gfSlcbiAgICAgICAgdXNlZEZyb20uYWRkKGZyb21FbnRyeS5pbmRleClcbiAgICAgICAgdXNlZFRvLmFkZChiZXN0TWF0Y2guaW5kZXgpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBtYXRjaGVkLFxuICAgIHN0aWxsQWRkZWQ6IGFkZGVkLmZpbHRlcigoXywgaW5kZXgpID0+ICF1c2VkVG8uaGFzKGluZGV4KSksXG4gICAgc3RpbGxSZW1vdmVkOiByZW1vdmVkLmZpbHRlcigoXywgaW5kZXgpID0+ICF1c2VkRnJvbS5oYXMoaW5kZXgpKSxcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgZmxhdHRlblNjZW5lVG9rZW5zID0gKHNjZW5lOiBTY2VuZSkgPT5cbiAgc2NlbmUubGF5b3V0LmxpbmVzLmZsYXRNYXAoKGxpbmUpID0+IGxpbmUudG9rZW5zKVxuXG5leHBvcnQgY29uc3QgZGlmZkxheW91dFRva2VucyA9IChmcm9tVG9rZW5zOiBMYXlvdXRUb2tlbltdLCB0b1Rva2VuczogTGF5b3V0VG9rZW5bXSkgPT4ge1xuICBjb25zdCBleGFjdERpZmYgPSBkaWZmQnlLZXkoZnJvbVRva2VucywgdG9Ub2tlbnMsIGJ1aWxkRXhhY3RLZXkpXG4gIGNvbnN0IGNvbnRlbnRNYXRjaGVzID0gbWF0Y2hCeUV4YWN0Q29udGVudChleGFjdERpZmYucmVtb3ZlZCwgZXhhY3REaWZmLmFkZGVkKVxuICBjb25zdCBjYXRlZ29yeU1hdGNoZXMgPSBtYXRjaEJ5Q2F0ZWdvcnkoY29udGVudE1hdGNoZXMuc3RpbGxSZW1vdmVkLCBjb250ZW50TWF0Y2hlcy5zdGlsbEFkZGVkKVxuXG4gIHJldHVybiB7XG4gICAgYWRkZWQ6IGNhdGVnb3J5TWF0Y2hlcy5zdGlsbEFkZGVkLFxuICAgIG1hdGNoZWQ6IFsuLi5leGFjdERpZmYubWF0Y2hlZCwgLi4uY29udGVudE1hdGNoZXMubWF0Y2hlZCwgLi4uY2F0ZWdvcnlNYXRjaGVzLm1hdGNoZWRdLFxuICAgIHJlbW92ZWQ6IGNhdGVnb3J5TWF0Y2hlcy5zdGlsbFJlbW92ZWQsXG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IGJ1aWxkVHJhbnNpdGlvbkRpZmYgPSAoZnJvbVNjZW5lOiBTY2VuZSwgdG9TY2VuZTogU2NlbmUpID0+XG4gIGRpZmZMYXlvdXRUb2tlbnMoZmxhdHRlblNjZW5lVG9rZW5zKGZyb21TY2VuZSksIGZsYXR0ZW5TY2VuZVRva2Vucyh0b1NjZW5lKSlcblxuZXhwb3J0IGNvbnN0IGVhc2VJbk91dEN1YmljID0gKHByb2dyZXNzOiBudW1iZXIpID0+IHtcbiAgY29uc3QgY2xhbXBlZCA9IE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHByb2dyZXNzKSlcbiAgcmV0dXJuIGNsYW1wZWQgPCAwLjUgPyA0ICogY2xhbXBlZCAqIGNsYW1wZWQgKiBjbGFtcGVkIDogMSAtICgtMiAqIGNsYW1wZWQgKyAyKSAqKiAzIC8gMlxufVxuXG5leHBvcnQgY29uc3QgYnVpbGRUcmFuc2l0aW9uVG9rZW5zID0gKFxuICBjb25maWc6IFJlbmRlckNvbmZpZyxcbiAgZGlmZjogVHJhbnNpdGlvbkRpZmYsXG4gIHByb2dyZXNzOiBudW1iZXJcbikgPT4ge1xuICBjb25zdCBjbGFtcGVkID0gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgcHJvZ3Jlc3MpKVxuICBjb25zdCB0b2tlbnM6IERyYXdUb2tlbltdID0gW11cblxuICBmb3IgKGNvbnN0IHRva2VuIG9mIGRpZmYucmVtb3ZlZCkge1xuICAgIGNvbnN0IG9wYWNpdHkgPSAxIC0gY2xhbXBlZFxuICAgIGlmIChvcGFjaXR5IDw9IDApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgY29sb3I6IHRva2VuLmNvbG9yLFxuICAgICAgY29udGVudDogdG9rZW4uY29udGVudCxcbiAgICAgIGZvbnRTdHlsZTogdG9rZW4uZm9udFN0eWxlLFxuICAgICAgb3BhY2l0eSxcbiAgICAgIHdpZHRoOiB0b2tlbi53aWR0aCxcbiAgICAgIHg6IHRva2VuLngsXG4gICAgICB5OiB0b2tlbi55IC0gY29uZmlnLnRyYW5zaXRpb25EcmlmdCAqIGNsYW1wZWQsXG4gICAgfSlcbiAgfVxuXG4gIGZvciAoY29uc3QgbWF0Y2ggb2YgZGlmZi5tYXRjaGVkKSB7XG4gICAgY29uc3Qgd2lkdGggPSBsZXJwKG1hdGNoLmZyb20ud2lkdGgsIG1hdGNoLnRvLndpZHRoLCBjbGFtcGVkKVxuICAgIGNvbnN0IHggPSBsZXJwKG1hdGNoLmZyb20ueCwgbWF0Y2gudG8ueCwgY2xhbXBlZClcbiAgICBjb25zdCB5ID0gbGVycChtYXRjaC5mcm9tLnksIG1hdGNoLnRvLnksIGNsYW1wZWQpXG4gICAgY29uc3QgaGFzTWlzbWF0Y2ggPVxuICAgICAgbWF0Y2guZnJvbS5jb250ZW50ICE9PSBtYXRjaC50by5jb250ZW50IHx8IG1hdGNoLmZyb20uZm9udFN0eWxlICE9PSBtYXRjaC50by5mb250U3R5bGVcblxuICAgIGlmIChoYXNNaXNtYXRjaCkge1xuICAgICAgY29uc3QgZnJvbU9wYWNpdHkgPSAxIC0gY2xhbXBlZFxuICAgICAgaWYgKGZyb21PcGFjaXR5ID4gMCkge1xuICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgY29sb3I6IG1hdGNoLmZyb20uY29sb3IsXG4gICAgICAgICAgY29udGVudDogbWF0Y2guZnJvbS5jb250ZW50LFxuICAgICAgICAgIGZvbnRTdHlsZTogbWF0Y2guZnJvbS5mb250U3R5bGUsXG4gICAgICAgICAgb3BhY2l0eTogZnJvbU9wYWNpdHksXG4gICAgICAgICAgd2lkdGgsXG4gICAgICAgICAgeCxcbiAgICAgICAgICB5LFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCB0b09wYWNpdHkgPSBjbGFtcGVkXG4gICAgICBpZiAodG9PcGFjaXR5ID4gMCkge1xuICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgY29sb3I6IG1hdGNoLnRvLmNvbG9yLFxuICAgICAgICAgIGNvbnRlbnQ6IG1hdGNoLnRvLmNvbnRlbnQsXG4gICAgICAgICAgZm9udFN0eWxlOiBtYXRjaC50by5mb250U3R5bGUsXG4gICAgICAgICAgb3BhY2l0eTogdG9PcGFjaXR5LFxuICAgICAgICAgIHdpZHRoLFxuICAgICAgICAgIHgsXG4gICAgICAgICAgeSxcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgY29sb3I6IGJsZW5kQ29sb3JzKG1hdGNoLmZyb20uY29sb3IsIG1hdGNoLnRvLmNvbG9yLCBjbGFtcGVkKSxcbiAgICAgIGNvbnRlbnQ6IG1hdGNoLnRvLmNvbnRlbnQsXG4gICAgICBmb250U3R5bGU6IG1hdGNoLnRvLmZvbnRTdHlsZSxcbiAgICAgIG9wYWNpdHk6IDEsXG4gICAgICB3aWR0aCxcbiAgICAgIHgsXG4gICAgICB5LFxuICAgIH0pXG4gIH1cblxuICBmb3IgKGNvbnN0IHRva2VuIG9mIGRpZmYuYWRkZWQpIHtcbiAgICBjb25zdCBvcGFjaXR5ID0gY2xhbXBlZFxuICAgIGlmIChvcGFjaXR5IDw9IDApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgdG9rZW5zLnB1c2goe1xuICAgICAgY29sb3I6IHRva2VuLmNvbG9yLFxuICAgICAgY29udGVudDogdG9rZW4uY29udGVudCxcbiAgICAgIGZvbnRTdHlsZTogdG9rZW4uZm9udFN0eWxlLFxuICAgICAgb3BhY2l0eSxcbiAgICAgIHdpZHRoOiB0b2tlbi53aWR0aCxcbiAgICAgIHg6IHRva2VuLngsXG4gICAgICB5OiB0b2tlbi55ICsgY29uZmlnLnRyYW5zaXRpb25EcmlmdCAqICgxIC0gY2xhbXBlZCksXG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiB0b2tlbnNcbn1cblxuZXhwb3J0IGNvbnN0IHJlbmRlclRyYW5zaXRpb25Ub2tlbnMgPSAoXG4gIGNvbmZpZzogUmVuZGVyQ29uZmlnLFxuICBjb250ZXh0OiBDYW52YXNDb250ZXh0LFxuICB0b2tlbnM6IERyYXdUb2tlbltdXG4pID0+IHtcbiAgY29uc3QgdGV4dENvbnRleHQgPSBjb250ZXh0XG4gIGNvbnN0IHByZXZpb3VzQWxwaGEgPSB0ZXh0Q29udGV4dC5nbG9iYWxBbHBoYVxuICBjb25zdCBwcmV2aW91c0Jhc2VsaW5lID0gdGV4dENvbnRleHQudGV4dEJhc2VsaW5lXG4gIGNvbnN0IHByZXZpb3VzQWxpZ24gPSB0ZXh0Q29udGV4dC50ZXh0QWxpZ25cbiAgY29uc3QgcHJldmlvdXNGb250ID0gdGV4dENvbnRleHQuZm9udFxuICBjb25zdCBwcmV2aW91c0ZpbGxTdHlsZSA9IHRleHRDb250ZXh0LmZpbGxTdHlsZVxuXG4gIHRleHRDb250ZXh0LnRleHRCYXNlbGluZSA9IFwidG9wXCJcbiAgdGV4dENvbnRleHQudGV4dEFsaWduID0gXCJsZWZ0XCJcblxuICBmb3IgKGNvbnN0IHRva2VuIG9mIHRva2Vucykge1xuICAgIGlmICh0b2tlbi5vcGFjaXR5IDw9IDApIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgZm9udFN0eWxlID0gdG9rZW4uZm9udFN0eWxlXG4gICAgY29uc3QgaXNJdGFsaWMgPSAoZm9udFN0eWxlICYgRk9OVF9TVFlMRV9JVEFMSUMpID09PSBGT05UX1NUWUxFX0lUQUxJQ1xuICAgIGNvbnN0IGlzQm9sZCA9IChmb250U3R5bGUgJiBGT05UX1NUWUxFX0JPTEQpID09PSBGT05UX1NUWUxFX0JPTERcbiAgICBjb25zdCBpc1VuZGVybGluZSA9IChmb250U3R5bGUgJiBGT05UX1NUWUxFX1VOREVSTElORSkgPT09IEZPTlRfU1RZTEVfVU5ERVJMSU5FXG5cbiAgICB0ZXh0Q29udGV4dC5nbG9iYWxBbHBoYSA9IHRva2VuLm9wYWNpdHlcbiAgICB0ZXh0Q29udGV4dC5mb250ID0gYnVpbGRGb250KGNvbmZpZywgaXNJdGFsaWMsIGlzQm9sZClcbiAgICB0ZXh0Q29udGV4dC5maWxsU3R5bGUgPSB0b2tlbi5jb2xvclxuICAgIHRleHRDb250ZXh0LmZpbGxUZXh0KHRva2VuLmNvbnRlbnQsIE1hdGgucm91bmQodG9rZW4ueCksIE1hdGgucm91bmQodG9rZW4ueSkpXG5cbiAgICBpZiAoaXNVbmRlcmxpbmUgJiYgdG9rZW4ud2lkdGggPiAwKSB7XG4gICAgICBkcmF3VW5kZXJsaW5lKGNvbmZpZywgdGV4dENvbnRleHQsIE1hdGgucm91bmQodG9rZW4ueCksIE1hdGgucm91bmQodG9rZW4ueSksIHRva2VuLndpZHRoKVxuICAgIH1cbiAgfVxuXG4gIHRleHRDb250ZXh0Lmdsb2JhbEFscGhhID0gcHJldmlvdXNBbHBoYVxuICB0ZXh0Q29udGV4dC50ZXh0QmFzZWxpbmUgPSBwcmV2aW91c0Jhc2VsaW5lXG4gIHRleHRDb250ZXh0LnRleHRBbGlnbiA9IHByZXZpb3VzQWxpZ25cbiAgdGV4dENvbnRleHQuZm9udCA9IHByZXZpb3VzRm9udFxuICB0ZXh0Q29udGV4dC5maWxsU3R5bGUgPSBwcmV2aW91c0ZpbGxTdHlsZVxufVxuIiwKICAgICJpbXBvcnQgdHlwZSB7IEJ1bmRsZWRUaGVtZSB9IGZyb20gXCJzaGlraVwiXG5pbXBvcnQgeyBPcHRpb25zIH0gZnJvbSBcIkBlZmZlY3QvY2xpXCJcblxuY29uc3QgREVGQVVMVF9USEVNRTogQnVuZGxlZFRoZW1lID0gXCJnaXRodWItZGFya1wiXG5jb25zdCBERUZBVUxUX1dJRFRIID0gMFxuY29uc3QgREVGQVVMVF9IRUlHSFQgPSAwXG5jb25zdCBERUZBVUxUX0ZQUyA9IDYwXG5jb25zdCBERUZBVUxUX0JMT0NLX0RVUkFUSU9OID0gMlxuY29uc3QgREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OX01TID0gODAwXG5jb25zdCBERUZBVUxUX1RSQU5TSVRJT05fRFJJRlQgPSA4XG5jb25zdCBERUZBVUxUX0JBQ0tHUk9VTkQgPSBcIiMwYjBiMGJcIlxuY29uc3QgREVGQVVMVF9GT05UX0ZBTUlMWSA9XG4gIFwiU0ZNb25vLVJlZ3VsYXIsIE1lbmxvLCBNb25hY28sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlXCJcbmNvbnN0IERFRkFVTFRfRk9OVF9TSVpFID0gMjRcbmNvbnN0IERFRkFVTFRfRk9SRUdST1VORCA9IFwiI2U2ZTZlNlwiXG5jb25zdCBERUZBVUxUX0xJTkVfSEVJR0hUID0gMzRcbmNvbnN0IERFRkFVTFRfUEFERElORyA9IDY0XG5jb25zdCBUQUJfUkVQTEFDRU1FTlQgPSBcIiAgXCJcblxuZXhwb3J0IGNvbnN0IGJhY2tncm91bmQgPSBPcHRpb25zLnRleHQoXCJiYWNrZ3JvdW5kXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwiYmdcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoREVGQVVMVF9CQUNLR1JPVU5EKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJCYWNrZ3JvdW5kIGNvbG9yIGJlaGluZCB0aGUgY29kZVwiKVxuKVxuXG5leHBvcnQgY29uc3QgYmxvY2tEdXJhdGlvbiA9IE9wdGlvbnMuZmxvYXQoXCJibG9jay1kdXJhdGlvblwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcImJkXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfQkxPQ0tfRFVSQVRJT04pLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIlNlY29uZHMgZWFjaCBjb2RlIGJsb2NrIHN0YXlzIG9uIHNjcmVlblwiKVxuKVxuXG5leHBvcnQgY29uc3QgZm9udEZhbWlseSA9IE9wdGlvbnMudGV4dChcImZvbnQtZmFtaWx5XCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwiZmZcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoREVGQVVMVF9GT05UX0ZBTUlMWSksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiRm9udCBmYW1pbHkgZm9yIHRoZSB0ZXh0XCIpXG4pXG5cbmV4cG9ydCBjb25zdCBmb250U2l6ZSA9IE9wdGlvbnMuaW50ZWdlcihcImZvbnQtc2l6ZVwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcImZzXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfRk9OVF9TSVpFKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJGb250IHNpemUgaW4gcGl4ZWxzXCIpXG4pXG5cbmV4cG9ydCBjb25zdCBmb3JlZ3JvdW5kID0gT3B0aW9ucy50ZXh0KFwiZm9yZWdyb3VuZFwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcImZnXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfRk9SRUdST1VORCksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiRGVmYXVsdCB0ZXh0IGNvbG9yXCIpXG4pXG5cbmV4cG9ydCBjb25zdCBmb3JtYXQgPSBPcHRpb25zLmNob2ljZShcImZvcm1hdFwiLCBbXCJtcDRcIiwgXCJ3ZWJtXCJdIGFzIGNvbnN0KS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcImZcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoXCJtcDRcIiksXG4gIE9wdGlvbnMud2l0aERlc2NyaXB0aW9uKFwiT3V0cHV0IGNvbnRhaW5lciBmb3JtYXQuXCIpXG4pXG5cbmV4cG9ydCBjb25zdCBmcHMgPSBPcHRpb25zLmludGVnZXIoXCJmcHNcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJyXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfRlBTKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJGcmFtZXMgcGVyIHNlY29uZCBmb3IgdGhlIHZpZGVvXCIpXG4pXG5cbmV4cG9ydCBjb25zdCBoZWlnaHQgPSBPcHRpb25zLmludGVnZXIoXCJoZWlnaHRcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJoXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfSEVJR0hUKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJNaW5pbXVtIG91dHB1dCBoZWlnaHQgaW4gcGl4ZWxzICgwID0gYXV0bylcIilcbilcblxuZXhwb3J0IGNvbnN0IGxpbmVIZWlnaHQgPSBPcHRpb25zLmludGVnZXIoXCJsaW5lLWhlaWdodFwiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcImxoXCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfTElORV9IRUlHSFQpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIkxpbmUgaGVpZ2h0IGluIHBpeGVsc1wiKVxuKVxuXG5leHBvcnQgY29uc3Qgb3V0cHV0ID0gT3B0aW9ucy5maWxlKFwib3V0cHV0XCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwib1wiKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJEZXN0aW5hdGlvbiB2aWRlbyBwYXRoXCIpLFxuICBPcHRpb25zLm9wdGlvbmFsXG4pXG5cbmV4cG9ydCBjb25zdCBwYWRkaW5nID0gT3B0aW9ucy5pbnRlZ2VyKFwicGFkZGluZ1wiKS5waXBlKFxuICBPcHRpb25zLndpdGhBbGlhcyhcInBcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoREVGQVVMVF9QQURESU5HKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJQYWRkaW5nIGFyb3VuZCB0aGUgY29kZSBibG9jayBpbiBwaXhlbHNcIilcbilcblxuZXhwb3J0IGNvbnN0IHRhYlJlcGxhY2VtZW50ID0gT3B0aW9ucy50ZXh0KFwidGFiLXJlcGxhY2VtZW50XCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwidGJcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoVEFCX1JFUExBQ0VNRU5UKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJUZXh0IHVzZWQgaW5zdGVhZCBvZiB0YWJzXCIpXG4pXG5cbmV4cG9ydCBjb25zdCB0aGVtZSA9IE9wdGlvbnMudGV4dChcInRoZW1lXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwidFwiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX1RIRU1FKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJTaGlraSB0aGVtZSBmb3Igc3ludGF4IGhpZ2hsaWdodGluZ1wiKVxuKVxuXG5leHBvcnQgY29uc3QgdHJhbnNpdGlvbkRyaWZ0ID0gT3B0aW9ucy5mbG9hdChcInRyYW5zaXRpb24tZHJpZnRcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJ0ZFwiKSxcbiAgT3B0aW9ucy53aXRoRGVmYXVsdChERUZBVUxUX1RSQU5TSVRJT05fRFJJRlQpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIlBpeGVsIGRyaWZ0IGR1cmluZyB0cmFuc2l0aW9uc1wiKVxuKVxuXG5leHBvcnQgY29uc3QgdHJhbnNpdGlvbkR1cmF0aW9uTXMgPSBPcHRpb25zLmludGVnZXIoXCJ0cmFuc2l0aW9uXCIpLnBpcGUoXG4gIE9wdGlvbnMud2l0aEFsaWFzKFwidHJcIiksXG4gIE9wdGlvbnMud2l0aERlZmF1bHQoREVGQVVMVF9UUkFOU0lUSU9OX0RVUkFUSU9OX01TKSxcbiAgT3B0aW9ucy53aXRoRGVzY3JpcHRpb24oXCJUcmFuc2l0aW9uIHRpbWUgYmV0d2VlbiBzbGlkZXMgaW4gbXNcIilcbilcblxuZXhwb3J0IGNvbnN0IHdpZHRoID0gT3B0aW9ucy5pbnRlZ2VyKFwid2lkdGhcIikucGlwZShcbiAgT3B0aW9ucy53aXRoQWxpYXMoXCJ3XCIpLFxuICBPcHRpb25zLndpdGhEZWZhdWx0KERFRkFVTFRfV0lEVEgpLFxuICBPcHRpb25zLndpdGhEZXNjcmlwdGlvbihcIk1pbmltdW0gb3V0cHV0IHdpZHRoIGluIHBpeGVscyAoMCA9IGF1dG8pXCIpXG4pXG4iCiAgXSwKICAibWFwcGluZ3MiOiAiO0FBQUEsb0JBQVM7QUFDVDtBQUNBLG9CQUFTLG9CQUFTOzs7QUNGbEI7QUFDQTtBQUNBO0FBQ0EsNEJBQWtCOzs7QUNIbEI7QUFBQTtBQUlPLE1BQU0sMkJBQTJCLEtBQUssWUFBWSxvQkFBb0IsRUFFMUU7QUFBQztBQUFBO0FBRUcsTUFBTSxxQkFBcUIsS0FBSyxZQUFZLGNBQWMsRUFBcUI7QUFBQztBQUFBO0FBRWhGLE1BQU0saUNBQWlDLEtBQUssWUFBWSwwQkFBMEIsRUFHdEY7QUFBQztBQUFBO0FBRUcsTUFBTSw0QkFBNEIsS0FBSyxZQUFZLHFCQUFxQixFQUU1RTtBQUFDO0FBQUE7QUFFRyxNQUFNLDBCQUEwQixLQUFLLFlBQVksbUJBQW1CLEVBQXFCO0FB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QUFBQSxFQUVGLGFBQWEsQ0FBQyxVQUNaLFFBQVEsTUFDTjtBQUFBLElBQ0UsV0FBVyxNQUFNO0FBQUEsSUFDakIsYUFBYSxNQUFNLFFBQ3ZCO0FBQUEsRUFDRixjQUFjLENBQUMsVUFDYixRQUFRLE1BQ04sbUJBQW1CLE1BQU07QUFBQSxJQUN2QixvREFDSjtBQUFBLEVBQ0YscUJBQXFCLENBQUMsVUFDcEIsUUFBUSxNQUNOLDBCQUEwQixNQUFNO0FBQUEsSUFDOUIsMERBQ0o7QUFDSixDQUFDLENBQ0gsQ0FDSixDQUNGOzs7QUR0TEEsSUFBTSxVQUFVLE1BQU07QUFFdEIsSUFBTSxPQUFPLFNBQVEsS0FBSyxRQUFRLEVBQUUsS0FDbEMsU0FBUSxnQkFBZ0IsNkNBQTZDLEdBQ3JFLFNBQVEsZ0JBQWdCLENBQUMsY0FBTSxDQUFDLENBQ2xDO0FBRUEsSUFBTSxVQUFVLFNBQVEsSUFBSSxNQUFNLEVBQUUsTUFBTSxVQUFVLFFBQVEsQ0FBQztBQUU3RCxRQUFRLFFBQVEsSUFBSSxFQUFFLEtBQ3BCLFFBQU8sVUFBVTtBQUFBLEVBQ2Ysd0JBQXdCLENBQUMsVUFDdkIsU0FBUSxNQUFNLDZCQUE2QixNQUFNLE9BQU8sS0FBSyxJQUFJLEdBQUc7QUFBQSxFQUN0RSxpQkFBaUIsQ0FBQyxVQUNoQixTQUFRLE1BQ04seUJBQXlCLE1BQU0sWUFBWSxLQUFLLEVBQUU7QUFBQSxJQUNoRCwwREFDSjtBQUNKLENBQUMsR0FDRCxRQUFPLFFBQVEsWUFBWSxLQUFLLEdBQ2hDLFlBQVksT0FDZDsiLAogICJkZWJ1Z0lkIjogIjBFMzQ1QjlBQjdEMkVFNjE2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sakuga",
3
- "version": "0.0.3",
3
+ "version": "0.0.4",
4
4
  "description": "Create code animations",
5
5
  "keywords": [
6
6
  "bun",