@cartanova/qgrid-cli 2.10.2 → 2.10.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.
Files changed (118) hide show
  1. package/bundle/dist/application/monit/log-buffer.js +7 -11
  2. package/bundle/dist/application/monit/monit.frame.js +6 -11
  3. package/bundle/dist/application/qgrid/oauth.js +2 -2
  4. package/bundle/dist/application/qgrid/qgrid-run-lifecycle.js +64 -141
  5. package/bundle/dist/application/qgrid/qgrid.dispatcher.js +12 -36
  6. package/bundle/dist/application/qgrid/qgrid.frame.js +3 -6
  7. package/bundle/dist/application/qgrid/qgrid.types.js +2 -1
  8. package/bundle/dist/application/qgrid/token-subscriber.js +4 -7
  9. package/bundle/dist/application/qgrid/token-window-keepalive.js +3 -2
  10. package/bundle/dist/application/qgrid/tool-emulation-schema.js +4 -4
  11. package/bundle/dist/application/qgrid/tool-emulation.js +14 -2
  12. package/bundle/dist/application/request-log/request-log.model.js +7 -5
  13. package/bundle/dist/application/setting/setting.model.js +2 -64
  14. package/bundle/dist/application/setting/setting.store.js +3 -4
  15. package/bundle/dist/application/setting/setting.types.js +2 -12
  16. package/bundle/dist/i18n/en.js +1 -3
  17. package/bundle/dist/i18n/ko.js +1 -3
  18. package/bundle/dist/sonamu.config.js +6 -6
  19. package/bundle/dist/utils/providers/anthropic/anthropic-constants.js +1 -1
  20. package/bundle/dist/utils/providers/anthropic/anthropic-dispatcher.js +53 -84
  21. package/bundle/dist/utils/providers/anthropic/anthropic-thinking.js +55 -0
  22. package/bundle/dist/utils/providers/anthropic/claude-session.js +11 -13
  23. package/bundle/dist/utils/providers/common/effort.js +1 -1
  24. package/bundle/dist/utils/providers/common/smooth-weighted-round-robin.js +3 -3
  25. package/bundle/dist/utils/providers/common/thinking.js +12 -0
  26. package/bundle/dist/utils/providers/openai/openai-backend-protocol.js +3 -2
  27. package/bundle/dist/utils/providers/openai/openai-direct-client.js +6 -16
  28. package/bundle/dist/utils/providers/openai/openai-dispatcher.js +89 -78
  29. package/bundle/src/application/monit/log-buffer.test.ts +3 -4
  30. package/bundle/src/application/monit/log-buffer.ts +13 -27
  31. package/bundle/src/application/monit/monit.frame.test.ts +7 -8
  32. package/bundle/src/application/monit/monit.frame.ts +9 -14
  33. package/bundle/src/application/qgrid/oauth.ts +1 -1
  34. package/bundle/src/application/qgrid/qgrid-run-lifecycle.test.ts +7 -111
  35. package/bundle/src/application/qgrid/qgrid-run-lifecycle.ts +83 -179
  36. package/bundle/src/application/qgrid/qgrid.dispatcher.test.ts +62 -1
  37. package/bundle/src/application/qgrid/qgrid.dispatcher.ts +25 -71
  38. package/bundle/src/application/qgrid/qgrid.frame.test.ts +0 -38
  39. package/bundle/src/application/qgrid/qgrid.frame.ts +4 -12
  40. package/bundle/src/application/qgrid/qgrid.types.ts +2 -0
  41. package/bundle/src/application/qgrid/token-subscriber.test.ts +8 -18
  42. package/bundle/src/application/qgrid/token-subscriber.ts +10 -20
  43. package/bundle/src/application/qgrid/token-window-keepalive.test.ts +2 -2
  44. package/bundle/src/application/qgrid/token-window-keepalive.ts +2 -1
  45. package/bundle/src/application/qgrid/tool-emulation-schema.test.ts +6 -3
  46. package/bundle/src/application/qgrid/tool-emulation-schema.ts +3 -3
  47. package/bundle/src/application/qgrid/tool-emulation.test.ts +8 -1
  48. package/bundle/src/application/qgrid/tool-emulation.ts +29 -0
  49. package/bundle/src/application/request-log/request-log.model.ts +5 -5
  50. package/bundle/src/application/setting/setting.model.test.ts +1 -101
  51. package/bundle/src/application/setting/setting.model.ts +1 -74
  52. package/bundle/src/application/setting/setting.store.ts +2 -3
  53. package/bundle/src/application/setting/setting.types.ts +0 -12
  54. package/bundle/src/application/sonamu.generated.http +2 -7
  55. package/bundle/src/i18n/en.ts +0 -3
  56. package/bundle/src/i18n/ko.ts +0 -3
  57. package/bundle/src/sonamu.config.ts +5 -5
  58. package/bundle/src/utils/providers/anthropic/anthropic-constants.ts +3 -6
  59. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.test.ts +26 -0
  60. package/bundle/src/utils/providers/anthropic/anthropic-dispatcher.ts +70 -148
  61. package/bundle/src/utils/providers/anthropic/anthropic-thinking.test.ts +36 -0
  62. package/bundle/src/utils/providers/anthropic/anthropic-thinking.ts +84 -0
  63. package/bundle/src/utils/providers/anthropic/claude-session.test.ts +74 -13
  64. package/bundle/src/utils/providers/anthropic/claude-session.ts +11 -20
  65. package/bundle/src/utils/providers/common/effort.ts +1 -1
  66. package/bundle/src/utils/providers/common/provider-dispatcher.ts +4 -0
  67. package/bundle/src/utils/providers/common/smooth-weighted-round-robin.ts +4 -4
  68. package/bundle/src/utils/providers/common/thinking.ts +10 -0
  69. package/bundle/src/utils/providers/openai/openai-backend-protocol.ts +7 -3
  70. package/bundle/src/utils/providers/openai/openai-direct-client.test.ts +3 -3
  71. package/bundle/src/utils/providers/openai/openai-direct-client.ts +20 -33
  72. package/bundle/src/utils/providers/openai/openai-dispatcher.test.ts +97 -6
  73. package/bundle/src/utils/providers/openai/openai-dispatcher.ts +113 -77
  74. package/bundle/web-dist/client/assets/index-CvG4UB9v.css +1 -0
  75. package/bundle/web-dist/client/assets/{index-DtRTSTes.js → index-reW8VvJF.js} +4 -4
  76. package/bundle/web-dist/client/assets/{logs-BhVYDEzC.js → logs-DDIt97D1.js} +1 -1
  77. package/bundle/web-dist/client/assets/{monit-BxN4JWqK.js → monit-DkABv7PG.js} +1 -1
  78. package/bundle/web-dist/client/assets/{routes-CBCqRp2o.js → routes-BRmQ4M3-.js} +1 -1
  79. package/bundle/web-dist/client/assets/services.generated-jnPHYMER.js +51 -0
  80. package/bundle/web-dist/client/assets/settings-BHvtycEZ.js +1 -0
  81. package/bundle/web-dist/client/assets/{show-BzYft5N4.js → show-qeTIzgDZ.js} +1 -1
  82. package/bundle/web-dist/client/assets/{tokens-PMybtI8X.js → tokens-5Bep_G-w.js} +1 -1
  83. package/bundle/web-dist/client/assets/{use-oauth-login-flow-C51_d6-6.js → use-oauth-login-flow-Cx-QO25M.js} +1 -1
  84. package/bundle/web-dist/client/assets/{use-update-token-mutation-D-Y8OySK.js → use-update-token-mutation-DQCwCYfR.js} +1 -1
  85. package/bundle/web-dist/client/index.html +3 -3
  86. package/bundle/web-dist/server/assets/{lazyRouteComponent-Bj1cPq6x.js → lazyRouteComponent-CUR-kWzI.js} +2 -2
  87. package/bundle/web-dist/server/assets/{logs-BSk9lOHe.js → logs-CagNGTBj.js} +3 -3
  88. package/bundle/web-dist/server/assets/{monit-D9W4ioUi.js → monit-DSxs4Jnl.js} +3 -3
  89. package/bundle/web-dist/server/assets/{plus-CmvbWuDf.js → plus-Bvdj8Pwx.js} +1 -1
  90. package/bundle/web-dist/server/assets/{react-dom-BjR1Iaz8.js → react-dom-CyuShs9K.js} +1 -1
  91. package/bundle/web-dist/server/assets/{refresh-cw-B8U9BL9-.js → refresh-cw-3QAiSWBd.js} +1 -1
  92. package/bundle/web-dist/server/assets/{routes-C7lB2Q85.js → routes-i-sTqXMX.js} +4 -4
  93. package/bundle/web-dist/server/assets/{services.generated-BM4X3Ecj.js → services.generated-FPwsG9p3.js} +116 -131
  94. package/bundle/web-dist/server/assets/{settings-BFVuldch.js → settings-DeHNwoMv.js} +40 -251
  95. package/bundle/web-dist/server/assets/{show-Cswh_tqs.js → show-C4jk1Hrp.js} +2 -2
  96. package/bundle/web-dist/server/assets/{tokens-DiTUwUwr.js → tokens-odgS2-9q.js} +4 -4
  97. package/bundle/web-dist/server/assets/{use-oauth-login-flow-DYKnG4A2.js → use-oauth-login-flow-DTQKdYBO.js} +1 -1
  98. package/bundle/web-dist/server/assets/{use-update-token-mutation-DqGMopII.js → use-update-token-mutation-xvXbPrCI.js} +1 -1
  99. package/bundle/web-dist/server/entry-server.generated.js +10 -10
  100. package/package.json +1 -1
  101. package/skills/qgrid/SKILL.md +1 -0
  102. package/skills/qgrid/references/ai-sdk-provider-contract.md +2 -1
  103. package/skills/qgrid/references/anthropic-claude-code-runtime.md +7 -4
  104. package/skills/qgrid/references/cli-env-and-server-boot.md +12 -9
  105. package/skills/qgrid/references/decision-rationale.md +9 -0
  106. package/skills/qgrid/references/openai-codex-runtime.md +6 -0
  107. package/skills/qgrid/references/token-auth-quota-lifecycle.md +2 -0
  108. package/skills/qgrid/references/tool-calling-and-multiturn.md +18 -1
  109. package/skills/qgrid/references/verification-and-debugging.md +1 -1
  110. package/bundle/dist/utils/process-supervisor.js +0 -22
  111. package/bundle/dist/utils/server-restart.js +0 -61
  112. package/bundle/src/utils/process-supervisor.test.ts +0 -24
  113. package/bundle/src/utils/process-supervisor.ts +0 -17
  114. package/bundle/src/utils/server-restart.test.ts +0 -76
  115. package/bundle/src/utils/server-restart.ts +0 -68
  116. package/bundle/web-dist/client/assets/index-D_sagzsR.css +0 -1
  117. package/bundle/web-dist/client/assets/services.generated-Cbvg2sGQ.js +0 -51
  118. package/bundle/web-dist/client/assets/settings-hBTEC7Ki.js +0 -1
@@ -128,6 +128,7 @@ const QueryInput = z.looseObject({
128
128
  timeout: QueryTimeoutMs.optional(),
129
129
  jsonSchema: z.string().optional(),
130
130
  tools: z.array(QgridTool).optional(),
131
+ thinking: z.union([z.literal(true), z.literal(false)]).optional(),
131
132
  effort: z.string().optional(),
132
133
  verbosity: Verbosity.optional(),
133
134
  reasoningSummary: ReasoningSummary.optional(),
@@ -334,4 +335,4 @@ function maskToken(token) {
334
335
  //#endregion
335
336
  export { AppendStepInput, CostSource, CreateRunInput, Effort, FinishReason, FinishRunInput, HealthResponse, ImageGenerationMetadata, ImageGenerationOptions, ImageGenerationQuality, ImageGenerationSize, MAX_QUERY_TIMEOUT_MS, ModelFallback, OAuthStartResult, ProcessError, ProviderStartupState, QgridContent, QgridInputPart, QgridRunContext, QgridThreadCoord, QgridTool, QgridToolResultInput, QueryInput, QueryOutput, QueryTimeoutMs, QuotaError, QuotaThresholdExceededError, ReasoningSummary, ServiceTier, StreamEvents, SubscriberStatus, TimeoutError, TokenStats, UsageResponse, Verbosity, maskToken };
336
337
 
337
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuLy8gT2JzZXJ2ZWQgc3RhbmRhbG9uZSBJbWFnZXMgcmVzcG9uc2UgdmFsdWVzLCBkaXN0aW5jdCBmcm9tIHJlcXVlc3RlZCBnZW5lcmF0aW9uIGhpbnRzLlxuZXhwb3J0IGNvbnN0IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICByb3V0ZTogei5saXRlcmFsKFwiY29kZXgtaW1hZ2VzXCIpLFxuICBtb2RlbDogei5saXRlcmFsKFwiZ3B0LWltYWdlLTJcIiksXG4gIGJhY2tncm91bmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcXVhbGl0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzaXplOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIHRvdGFsX3Rva2Vuczogei5udW1iZXIoKS5ub25uZWdhdGl2ZSgpLFxuICAgICAgaW5wdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgICBjYWNoZWRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBvdXRwdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YT47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZENvbnRlbnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRvb2wtY2FsbFwiKSxcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcImltYWdlXCIpLFxuICAgIC8vIEJhc2U2NCBpbWFnZSBieXRlczsgb2xkZXIgcmVzcG9uc2VzIHdpdGhvdXQgbWVkaWFUeXBlIGFyZSBQTkcuXG4gICAgZGF0YTogei5zdHJpbmcoKSxcbiAgICBtZWRpYVR5cGU6IHouZW51bShbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2Uvd2VicFwiXSkub3B0aW9uYWwoKSxcbiAgICByZXZpc2VkUHJvbXB0OiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBnZW5lcmF0aW9uOiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHpcbiAgLm9iamVjdCh7XG4gICAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICAgIHNpemU6IEltYWdlR2VuZXJhdGlvblNpemUub3B0aW9uYWwoKSxcbiAgICBiYWNrZ3JvdW5kOiB6LmVudW0oW1wiYXV0b1wiLCBcIm9wYXF1ZVwiLCBcInRyYW5zcGFyZW50XCJdKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dEZvcm1hdDogei5lbnVtKFtcInBuZ1wiLCBcImpwZWdcIiwgXCJ3ZWJwXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAucmVmaW5lKFxuICAgIChvcHRpb25zKSA9PlxuICAgICAgb3B0aW9ucy5iYWNrZ3JvdW5kICE9PSBcInRyYW5zcGFyZW50XCIgfHxcbiAgICAgICFvcHRpb25zLm91dHB1dEZvcm1hdCB8fFxuICAgICAgb3B0aW9ucy5vdXRwdXRGb3JtYXQgPT09IFwicG5nXCIsXG4gICAgeyBtZXNzYWdlOiBcIlRyYW5zcGFyZW50IGltYWdlIGdlbmVyYXRpb24gb25seSBzdXBwb3J0cyBQTkcgb3V0cHV0XCIsIHBhdGg6IFtcIm91dHB1dEZvcm1hdFwiXSB9LFxuICApO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvbk9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgUWdyaWRJbnB1dFBhcnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICAgIHRleHRfZWxlbWVudHM6IHouYXJyYXkoei5uZXZlcigpKS5kZWZhdWx0KFtdKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJpbWFnZVwiKSxcbiAgICB1cmw6IHouc3RyaW5nKCksXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBRZ3JpZElucHV0UGFydCA9IHouaW5mZXI8dHlwZW9mIFFncmlkSW5wdXRQYXJ0PjtcblxuZXhwb3J0IGNvbnN0IE1BWF9RVUVSWV9USU1FT1VUX01TID0gMzAgKiA2MF8wMDA7XG5leHBvcnQgY29uc3QgUXVlcnlUaW1lb3V0TXMgPSB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkubWF4KE1BWF9RVUVSWV9USU1FT1VUX01TKTtcblxuLy8g4pSA4pSA4pSAIFJ1biBMaWZlY3ljbGUgQ29udGV4dCAoU0RLIOKGlCBTZXJ2ZXIgY29udHJhY3QpIOKUgOKUgOKUgFxuXG4vLyBPcGVuQUkgY2FjaGUgYWZmaW5pdHkg7KKM7ZGcKOq1rCBjb2RleCB0aHJlYWQg7KKM7ZGcKS4gcHJvbXB0X2NhY2hlX2tleSDrpbwg6rOg7KCV7ZW0XG4vLyBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7J2EIOyCtOumrOq4sCDsnITtlZwg7ZW465OkLiDshJzrsoTqsIAg67Cc6riJ7ZWY6rOgIO2BtOudvOqwgCDri6TsnYwg7JqU7LKt7JeQIOq3uOuMgOuhnCDtmozshqHtlZzri6QuXG4vLyDtlbjrk6Qg66+47KCE7IahIOyLnCDquLDsobQgXCLrp6QgdHVybiDsg4ggdGhyZWFkICsgaGlzdG9yeSBpbmplY3RcIiDrj5nsnpHsnLzroZwg7Y+067CxKFFncmlkUnVuQ29udGV4dCDssLjsobApLlxuZXhwb3J0IGNvbnN0IFFncmlkVGhyZWFkQ29vcmQgPSB6Lm9iamVjdCh7XG4gIHdvcmtlcklkOiB6Lm51bWJlcigpLCAvLyDqs6DsoJUg65287Jqw7YyFICh0aHJlYWQg64qUIHdvcmtlciDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerClcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksIC8vIG9wYXF1ZSBjYWNoZSBhZmZpbml0eSBrZXkgPSBwcm9tcHRfY2FjaGVfa2V5XG4gIGVwb2NoOiB6Lm51bWJlcigpLCAvLyB3b3JrZXIgc3Bhd24g7Lm07Jq07YSwLiByZXN0YXJ0IOuhnCB0aHJlYWQg7Kad67CcIOqwkOyngFxuICBzeXN0ZW1IYXNoOiB6LnN0cmluZygpLCAvLyBzeXN0ZW1fcHJvbXB0IO2VtOyLnC4g64uk66W4IOuMgO2ZlCDsmKTsoJHsho0g67Cp7KeAXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVGhyZWFkQ29vcmQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZFRocmVhZENvb3JkPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkUnVuQ29udGV4dCA9IHoub2JqZWN0KHtcbiAgLy8gdG9vbC1jYWxsIHJ1buydhCDqs4Tsho3tlaAg65WM66eMIOuwnOq4iS4g7J2867CYIOuMgO2ZlOuKlCB0aHJlYWRDb29yZCDrp4wg7JmV67O1LlxuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdGhyZWFkQ29vcmQ6IFFncmlkVGhyZWFkQ29vcmQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRSdW5Db250ZXh0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRSdW5Db250ZXh0PjtcblxuZXhwb3J0IGNvbnN0IFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5vYmplY3Qoe1xuICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBvdXRwdXQ6IHouc3RyaW5nKCksXG4gIGlzRXJyb3I6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sUmVzdWx0SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlJbnB1dCA9IHoubG9vc2VPYmplY3Qoe1xuICBzeXN0ZW06IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvbXB0OiB6LnN0cmluZygpLFxuICBpbnB1dDogei5hcnJheShRZ3JpZElucHV0UGFydCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGltZW91dDogUXVlcnlUaW1lb3V0TXMub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sczogei5hcnJheShRZ3JpZFRvb2wpLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2ZXJib3NpdHk6IFZlcmJvc2l0eS5vcHRpb25hbCgpLFxuICByZWFzb25pbmdTdW1tYXJ5OiBSZWFzb25pbmdTdW1tYXJ5Lm9wdGlvbmFsKCksXG4gIHNlcnZpY2VUaWVyOiBTZXJ2aWNlVGllci5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIHJhdy9kYXNoYm9hcmTsmYAg6rO16rCcIEFJIFNESyBwcm92aWRlck9wdGlvbnMucWdyaWQudG9rZW5OYW1l7J20IOqzteycoO2VmOuKlCDsp4DsoJUg7KO87IaMLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gU0RLLWRlcml2ZWQgb3BhcXVlIGFmZmluaXR5LiBJdCBpcyBpbnRlbnRpb25hbGx5IGRpc3RpbmN0IGZyb20gdGhlIGNhbGxlcidzIHNlc3Npb25LZXkuXG4gIGNhY2hlQWZmaW5pdHlLZXk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMC05YS1mXXs2NH0kLylcbiAgICAub3B0aW9uYWwoKSxcbiAgLy8g7IOd65617ZWY66m0IOuhnOq5he2VnOuLpC4gZmFsc2XripQgcmVxdWVzdCBsb2cg7JOw6riw66eMIOuBhOqzoCBkaXNwYXRjaC90aHJlYWTripQg7Jyg7KeA7ZWc64ukLlxuICBsb2dnZXI6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0czogei5hcnJheShRZ3JpZFRvb2xSZXN1bHRJbnB1dCkub3B0aW9uYWwoKSxcbiAgLy8gT3BlbkFJIG9ubHksIG5vbi1zdHJlYW06IHRydWUgcmVxdWlyZXMgYW4gaW1hZ2U7IGF1dG8gcGVybWl0cyB0ZXh0IG9yIG5hdGl2ZSBpbWFnZSB0b29scy5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LnVuaW9uKFt6LmJvb2xlYW4oKSwgei5saXRlcmFsKFwiYXV0b1wiKV0pLm9wdGlvbmFsKCksXG4gIC8vIHFncmlkIOqwgOqyqSDstpTsoJUg67CPIENvZGV4IOydtOuvuOyngCDsmpTssq0g7Z6M7Yq4LiDsnbTrr7jsp4Ag66qo64247J2AIGdwdC1pbWFnZS0yIOuhnCDqs6DsoJUg6rCA7KCV7ZWc64ukLlxuICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5SW5wdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeUlucHV0PjtcblxuZXhwb3J0IGNvbnN0IE1vZGVsRmFsbGJhY2sgPSB6Lm9iamVjdCh7XG4gIHRyaWdnZXI6IHoubGl0ZXJhbChcInJlZnVzYWxcIiksXG4gIGZyb21Nb2RlbDogei5zdHJpbmcoKSxcbiAgdG9Nb2RlbDogei5zdHJpbmcoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhwbGFuYXRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTW9kZWxGYWxsYmFjayA9IHouaW5mZXI8dHlwZW9mIE1vZGVsRmFsbGJhY2s+O1xuXG5leHBvcnQgY29uc3QgQ29zdFNvdXJjZSA9IHouZW51bShbXCJwcm92aWRlclwiLCBcInByaWNpbmdfdGFibGVcIiwgXCJtaXhlZFwiXSk7XG5leHBvcnQgdHlwZSBDb3N0U291cmNlID0gei5pbmZlcjx0eXBlb2YgQ29zdFNvdXJjZT47XG5cbmV4cG9ydCBjb25zdCBRdWVyeU91dHB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeU91dHB1dD47XG5cbi8vIOKUgOKUgOKUgCBTdHJlYW0gRXZlbnRzIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3RyZWFtRXZlbnRzID0gei5vYmplY3Qoe1xuICBkZWx0YTogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLFxuICB0b29sQ2FsbDogei5vYmplY3Qoe1xuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBkb25lOiB6Lm9iamVjdCh7XG4gICAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICAgIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgfSksXG4gIGVycm9yOiB6Lm9iamVjdCh7IG1lc3NhZ2U6IHouc3RyaW5nKCkgfSksXG59KTtcbmV4cG9ydCB0eXBlIFN0cmVhbUV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFN0cmVhbUV2ZW50cz47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaXNTdHJ1Y3R1cmVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBqc29uU2NoZW1hOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsSW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICB0b3RhbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVzcG9uc2VKc29uT2s6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUnVuSW5wdXQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFRva2VuU3RhdHMgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcmVxdWVzdHM6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuU3RhdHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN0YXRzPjtcblxuLy8g4pSA4pSA4pSAIE9BdXRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgT0F1dGhTdGFydFJlc3VsdCA9IHoub2JqZWN0KHtcbiAgYXV0aFVybDogei5zdHJpbmcoKSxcbiAgLy8gcmVkaXJlY3Q6IOu4jOudvOyasOyggCDsnpDrj5kg67O16reAKOujqO2UhOuwsSDsoJHsho0pLiBjb2RlOiDsvZjshpQg7L2c67CxICsg7L2U65OcIOu2meyXrOuEo+q4sCjsm5Dqsqkg7KCR7IaNKS5cbiAgLy8gT3BlbkFJIOybkOqyqSDqsr3roZzripQg65Ox66Gd65CcIGxvb3BiYWNrIGNhbGxiYWNrIFVSTCDsoITssrTrpbwg67aZ7Jes64Sj64qUIGNvZGUg66qo65Oc66W8IOyTtOuLpC5cbiAgbW9kZTogei5lbnVtKFtcInJlZGlyZWN0XCIsIFwiY29kZVwiXSksXG59KTtcbmV4cG9ydCB0eXBlIE9BdXRoU3RhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBPQXV0aFN0YXJ0UmVzdWx0PjtcblxuY29uc3QgUmF0ZVdpbmRvdyA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXRpbGl6YXRpb246IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICByZXNldHNBdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHdpbmRvd0R1cmF0aW9uTWluczogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5udWxsYWJsZSgpO1xuXG5leHBvcnQgY29uc3QgVXNhZ2VSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZml2ZUhvdXI6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbiAgc2V2ZW5EYXk6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgSGVhbHRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3Vic2NyaWJlclN0YXR1cyA9IHoub2JqZWN0KHtcbiAgY29ubmVjdGVkOiB6LmJvb2xlYW4oKSxcbiAgY29ubmVjdGVkQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGxhc3RSZWNvbmNpbGVBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgYXR0ZW1wdDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlclN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFN1YnNjcmliZXJTdGF0dXM+O1xuXG5leHBvcnQgY29uc3QgUHJvdmlkZXJTdGFydHVwU3RhdGUgPSB6LmVudW0oW1wic3RhcnRpbmdcIiwgXCJyZWFkeVwiLCBcImZhaWxlZFwiXSk7XG5leHBvcnQgdHlwZSBQcm92aWRlclN0YXJ0dXBTdGF0ZSA9IHouaW5mZXI8dHlwZW9mIFByb3ZpZGVyU3RhcnR1cFN0YXRlPjtcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbiAgc3Vic2NyaWJlcjogU3Vic2NyaWJlclN0YXR1cy5udWxsYWJsZSgpLFxuICAvLyBIVFRQIOumrOyKpOuLneydgCBkaXNwYXRjaGVyIOq4sOuPmeuztOuLpCDrqLzsoIAg7Je066aw64ukLiAyMDAg7J2R64u166eM7Jy866Gc64qUIOyalOyyreydhCDsspjrpqztlaAg7IiYXG4gIC8vIOyeiOuKlOyngCDslYwg7IiYIOyXhuyWtCBwcm92aWRlciDrs4Qg7KSA67mEIOyDge2DnOulvCDtlajqu5gg64W47Lac7ZWc64ukLlxuICByZWFkeTogei5ib29sZWFuKCksXG4gIHByb3ZpZGVyczogei5vYmplY3Qoe1xuICAgIG9wZW5haTogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gICAgYW50aHJvcGljOiBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIEhlYWx0aFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgSGVhbHRoUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgRXJyb3JzIOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgUXVvdGFFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfRVhIQVVTVEVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9USFJFU0hPTERfRVhDRUVERURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBSUEsTUFBYSxTQUFTLEVBQUUsS0FBSztDQUFDO0NBQU87Q0FBVTtBQUFNLENBQUM7QUFHdEQsTUFBYSxZQUFZLEVBQUUsT0FBTztDQUNoQyxNQUFNLEVBQUUsT0FBTztDQUNmLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGFBQWEsRUFBRSxRQUFRO0FBQ3pCLENBQUM7QUFJRCxNQUFhLDBCQUEwQixFQUFFLE9BQU87Q0FDOUMsT0FBTyxFQUFFLFFBQVEsY0FBYztDQUMvQixPQUFPLEVBQUUsUUFBUSxhQUFhO0NBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLE9BQU8sRUFDSixPQUFPO0VBQ04sY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDckMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDdEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDckMsc0JBQXNCLEVBQ25CLE9BQU87R0FDTixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWTtHQUNyQyxhQUFhLEVBQUUsT0FB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
338
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicWdyaWQudHlwZXMuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3FncmlkLnR5cGVzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiem9kXCI7XG5cbi8vIOKUgOKUgOKUgCBRdWVyeSDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IEVmZm9ydCA9IHouZW51bShbXCJsb3dcIiwgXCJtZWRpdW1cIiwgXCJoaWdoXCJdKTtcbmV4cG9ydCB0eXBlIEVmZm9ydCA9IHouaW5mZXI8dHlwZW9mIEVmZm9ydD47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZFRvb2wgPSB6Lm9iamVjdCh7XG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGlucHV0U2NoZW1hOiB6LnVua25vd24oKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRUb29sID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sPjtcblxuLy8gT2JzZXJ2ZWQgc3RhbmRhbG9uZSBJbWFnZXMgcmVzcG9uc2UgdmFsdWVzLCBkaXN0aW5jdCBmcm9tIHJlcXVlc3RlZCBnZW5lcmF0aW9uIGhpbnRzLlxuZXhwb3J0IGNvbnN0IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhID0gei5vYmplY3Qoe1xuICByb3V0ZTogei5saXRlcmFsKFwiY29kZXgtaW1hZ2VzXCIpLFxuICBtb2RlbDogei5saXRlcmFsKFwiZ3B0LWltYWdlLTJcIiksXG4gIGJhY2tncm91bmQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcXVhbGl0eTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBzaXplOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHVzYWdlOiB6XG4gICAgLm9iamVjdCh7XG4gICAgICBpbnB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIG91dHB1dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgIHRvdGFsX3Rva2Vuczogei5udW1iZXIoKS5ub25uZWdhdGl2ZSgpLFxuICAgICAgaW5wdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgICBjYWNoZWRfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCkub3B0aW9uYWwoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgICBvdXRwdXRfdG9rZW5zX2RldGFpbHM6IHpcbiAgICAgICAgLm9iamVjdCh7XG4gICAgICAgICAgaW1hZ2VfdG9rZW5zOiB6Lm51bWJlcigpLm5vbm5lZ2F0aXZlKCksXG4gICAgICAgICAgdGV4dF90b2tlbnM6IHoubnVtYmVyKCkubm9ubmVnYXRpdmUoKSxcbiAgICAgICAgfSlcbiAgICAgICAgLm9wdGlvbmFsKCksXG4gICAgfSlcbiAgICAub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uTWV0YWRhdGEgPSB6LmluZmVyPHR5cGVvZiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YT47XG5cbmV4cG9ydCBjb25zdCBRZ3JpZENvbnRlbnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcInRvb2wtY2FsbFwiKSxcbiAgICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICAgIHRvb2xOYW1lOiB6LnN0cmluZygpLFxuICAgIGlucHV0OiB6LnN0cmluZygpLFxuICB9KSxcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHoubGl0ZXJhbChcImltYWdlXCIpLFxuICAgIC8vIEJhc2U2NCBpbWFnZSBieXRlczsgb2xkZXIgcmVzcG9uc2VzIHdpdGhvdXQgbWVkaWFUeXBlIGFyZSBQTkcuXG4gICAgZGF0YTogei5zdHJpbmcoKSxcbiAgICBtZWRpYVR5cGU6IHouZW51bShbXCJpbWFnZS9wbmdcIiwgXCJpbWFnZS9qcGVnXCIsIFwiaW1hZ2Uvd2VicFwiXSkub3B0aW9uYWwoKSxcbiAgICByZXZpc2VkUHJvbXB0OiB6LnN0cmluZygpLm51bGxpc2goKSxcbiAgICBnZW5lcmF0aW9uOiBJbWFnZUdlbmVyYXRpb25NZXRhZGF0YS5vcHRpb25hbCgpLFxuICB9KSxcbl0pO1xuZXhwb3J0IHR5cGUgUWdyaWRDb250ZW50ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRDb250ZW50PjtcblxuZXhwb3J0IGNvbnN0IEZpbmlzaFJlYXNvbiA9IHouZW51bShbXCJzdG9wXCIsIFwidG9vbC1jYWxsc1wiXSk7XG5leHBvcnQgdHlwZSBGaW5pc2hSZWFzb24gPSB6LmluZmVyPHR5cGVvZiBGaW5pc2hSZWFzb24+O1xuXG5leHBvcnQgY29uc3QgVmVyYm9zaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgVmVyYm9zaXR5ID0gei5pbmZlcjx0eXBlb2YgVmVyYm9zaXR5PjtcblxuZXhwb3J0IGNvbnN0IFJlYXNvbmluZ1N1bW1hcnkgPSB6LmVudW0oW1wiYXV0b1wiLCBcImNvbmNpc2VcIiwgXCJkZXRhaWxlZFwiLCBcIm5vbmVcIl0pO1xuZXhwb3J0IHR5cGUgUmVhc29uaW5nU3VtbWFyeSA9IHouaW5mZXI8dHlwZW9mIFJlYXNvbmluZ1N1bW1hcnk+O1xuXG5leHBvcnQgY29uc3QgU2VydmljZVRpZXIgPSB6LmVudW0oW1wiZmFzdFwiLCBcImZsZXhcIl0pO1xuZXhwb3J0IHR5cGUgU2VydmljZVRpZXIgPSB6LmluZmVyPHR5cGVvZiBTZXJ2aWNlVGllcj47XG5cbmV4cG9ydCBjb25zdCBJbWFnZUdlbmVyYXRpb25RdWFsaXR5ID0gei5lbnVtKFtcImxvd1wiLCBcIm1lZGl1bVwiLCBcImhpZ2hcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblF1YWxpdHk+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouZW51bShbXCIxMDI0eDEwMjRcIiwgXCIxMDI0eDE1MzZcIiwgXCIxNTM2eDEwMjRcIl0pO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uU2l6ZSA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvblNpemU+O1xuXG5leHBvcnQgY29uc3QgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHpcbiAgLm9iamVjdCh7XG4gICAgcXVhbGl0eTogSW1hZ2VHZW5lcmF0aW9uUXVhbGl0eS5vcHRpb25hbCgpLFxuICAgIHNpemU6IEltYWdlR2VuZXJhdGlvblNpemUub3B0aW9uYWwoKSxcbiAgICBiYWNrZ3JvdW5kOiB6LmVudW0oW1wiYXV0b1wiLCBcIm9wYXF1ZVwiLCBcInRyYW5zcGFyZW50XCJdKS5vcHRpb25hbCgpLFxuICAgIG91dHB1dEZvcm1hdDogei5lbnVtKFtcInBuZ1wiLCBcImpwZWdcIiwgXCJ3ZWJwXCJdKS5vcHRpb25hbCgpLFxuICB9KVxuICAucmVmaW5lKFxuICAgIChvcHRpb25zKSA9PlxuICAgICAgb3B0aW9ucy5iYWNrZ3JvdW5kICE9PSBcInRyYW5zcGFyZW50XCIgfHxcbiAgICAgICFvcHRpb25zLm91dHB1dEZvcm1hdCB8fFxuICAgICAgb3B0aW9ucy5vdXRwdXRGb3JtYXQgPT09IFwicG5nXCIsXG4gICAgeyBtZXNzYWdlOiBcIlRyYW5zcGFyZW50IGltYWdlIGdlbmVyYXRpb24gb25seSBzdXBwb3J0cyBQTkcgb3V0cHV0XCIsIHBhdGg6IFtcIm91dHB1dEZvcm1hdFwiXSB9LFxuICApO1xuZXhwb3J0IHR5cGUgSW1hZ2VHZW5lcmF0aW9uT3B0aW9ucyA9IHouaW5mZXI8dHlwZW9mIEltYWdlR2VuZXJhdGlvbk9wdGlvbnM+O1xuXG5leHBvcnQgY29uc3QgUWdyaWRJbnB1dFBhcnQgPSB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcInR5cGVcIiwgW1xuICB6Lm9iamVjdCh7XG4gICAgdHlwZTogei5saXRlcmFsKFwidGV4dFwiKSxcbiAgICB0ZXh0OiB6LnN0cmluZygpLFxuICAgIHRleHRfZWxlbWVudHM6IHouYXJyYXkoei5uZXZlcigpKS5kZWZhdWx0KFtdKSxcbiAgfSksXG4gIHoub2JqZWN0KHtcbiAgICB0eXBlOiB6LmxpdGVyYWwoXCJpbWFnZVwiKSxcbiAgICB1cmw6IHouc3RyaW5nKCksXG4gIH0pLFxuXSk7XG5leHBvcnQgdHlwZSBRZ3JpZElucHV0UGFydCA9IHouaW5mZXI8dHlwZW9mIFFncmlkSW5wdXRQYXJ0PjtcblxuZXhwb3J0IGNvbnN0IE1BWF9RVUVSWV9USU1FT1VUX01TID0gMzAgKiA2MF8wMDA7XG5leHBvcnQgY29uc3QgUXVlcnlUaW1lb3V0TXMgPSB6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkubWF4KE1BWF9RVUVSWV9USU1FT1VUX01TKTtcblxuLy8g4pSA4pSA4pSAIFJ1biBMaWZlY3ljbGUgQ29udGV4dCAoU0RLIOKGlCBTZXJ2ZXIgY29udHJhY3QpIOKUgOKUgOKUgFxuXG4vLyBPcGVuQUkgY2FjaGUgYWZmaW5pdHkg7KKM7ZGcKOq1rCBjb2RleCB0aHJlYWQg7KKM7ZGcKS4gcHJvbXB0X2NhY2hlX2tleSDrpbwg6rOg7KCV7ZW0XG4vLyBPcGVuQUkgcHJvbXB0IGNhY2hpbmcg7J2EIOyCtOumrOq4sCDsnITtlZwg7ZW465OkLiDshJzrsoTqsIAg67Cc6riJ7ZWY6rOgIO2BtOudvOqwgCDri6TsnYwg7JqU7LKt7JeQIOq3uOuMgOuhnCDtmozshqHtlZzri6QuXG4vLyDtlbjrk6Qg66+47KCE7IahIOyLnCDquLDsobQgXCLrp6QgdHVybiDsg4ggdGhyZWFkICsgaGlzdG9yeSBpbmplY3RcIiDrj5nsnpHsnLzroZwg7Y+067CxKFFncmlkUnVuQ29udGV4dCDssLjsobApLlxuZXhwb3J0IGNvbnN0IFFncmlkVGhyZWFkQ29vcmQgPSB6Lm9iamVjdCh7XG4gIHdvcmtlcklkOiB6Lm51bWJlcigpLCAvLyDqs6DsoJUg65287Jqw7YyFICh0aHJlYWQg64qUIHdvcmtlciDtlITroZzshLjsiqQg66mU66qo66as7JeQ66eMIOyhtOyerClcbiAgdGhyZWFkSWQ6IHouc3RyaW5nKCksIC8vIG9wYXF1ZSBjYWNoZSBhZmZpbml0eSBrZXkgPSBwcm9tcHRfY2FjaGVfa2V5XG4gIGVwb2NoOiB6Lm51bWJlcigpLCAvLyB3b3JrZXIgc3Bhd24g7Lm07Jq07YSwLiByZXN0YXJ0IOuhnCB0aHJlYWQg7Kad67CcIOqwkOyngFxuICBzeXN0ZW1IYXNoOiB6LnN0cmluZygpLCAvLyBzeXN0ZW1fcHJvbXB0IO2VtOyLnC4g64uk66W4IOuMgO2ZlCDsmKTsoJHsho0g67Cp7KeAXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVGhyZWFkQ29vcmQgPSB6LmluZmVyPHR5cGVvZiBRZ3JpZFRocmVhZENvb3JkPjtcblxuZXhwb3J0IGNvbnN0IFFncmlkUnVuQ29udGV4dCA9IHoub2JqZWN0KHtcbiAgLy8gdG9vbC1jYWxsIHJ1buydhCDqs4Tsho3tlaAg65WM66eMIOuwnOq4iS4g7J2867CYIOuMgO2ZlOuKlCB0aHJlYWRDb29yZCDrp4wg7JmV67O1LlxuICByZXF1ZXN0TG9nSWQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdGhyZWFkQ29vcmQ6IFFncmlkVGhyZWFkQ29vcmQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUWdyaWRSdW5Db250ZXh0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRSdW5Db250ZXh0PjtcblxuZXhwb3J0IGNvbnN0IFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5vYmplY3Qoe1xuICB0b29sQ2FsbElkOiB6LnN0cmluZygpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBvdXRwdXQ6IHouc3RyaW5nKCksXG4gIGlzRXJyb3I6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFFncmlkVG9vbFJlc3VsdElucHV0ID0gei5pbmZlcjx0eXBlb2YgUWdyaWRUb29sUmVzdWx0SW5wdXQ+O1xuXG5leHBvcnQgY29uc3QgUXVlcnlJbnB1dCA9IHoubG9vc2VPYmplY3Qoe1xuICBzeXN0ZW06IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvbXB0OiB6LnN0cmluZygpLFxuICBpbnB1dDogei5hcnJheShRZ3JpZElucHV0UGFydCkub3B0aW9uYWwoKSxcbiAgbW9kZWw6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgdGltZW91dDogUXVlcnlUaW1lb3V0TXMub3B0aW9uYWwoKSxcbiAganNvblNjaGVtYTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sczogei5hcnJheShRZ3JpZFRvb2wpLm9wdGlvbmFsKCksXG4gIC8vIEJvb2xlYW4gbGl0ZXJhbHMga2VlcCBTb25hbXUncyBIVFRQIGNhc3RlciBmcm9tIGFjY2VwdGluZyBcInRydWVcIi9cImZhbHNlXCIgc3RyaW5ncy5cbiAgdGhpbmtpbmc6IHoudW5pb24oW3oubGl0ZXJhbCh0cnVlKSwgei5saXRlcmFsKGZhbHNlKV0pLm9wdGlvbmFsKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB2ZXJib3NpdHk6IFZlcmJvc2l0eS5vcHRpb25hbCgpLFxuICByZWFzb25pbmdTdW1tYXJ5OiBSZWFzb25pbmdTdW1tYXJ5Lm9wdGlvbmFsKCksXG4gIHNlcnZpY2VUaWVyOiBTZXJ2aWNlVGllci5vcHRpb25hbCgpLFxuICBoaXN0b3J5OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIC8vIHJhdy9kYXNoYm9hcmTsmYAg6rO16rCcIEFJIFNESyBwcm92aWRlck9wdGlvbnMucWdyaWQudG9rZW5OYW1l7J20IOqzteycoO2VmOuKlCDsp4DsoJUg7KO87IaMLlxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgLy8gU0RLLWRlcml2ZWQgb3BhcXVlIGFmZmluaXR5LiBJdCBpcyBpbnRlbnRpb25hbGx5IGRpc3RpbmN0IGZyb20gdGhlIGNhbGxlcidzIHNlc3Npb25LZXkuXG4gIGNhY2hlQWZmaW5pdHlLZXk6IHpcbiAgICAuc3RyaW5nKClcbiAgICAucmVnZXgoL15bMC05YS1mXXs2NH0kLylcbiAgICAub3B0aW9uYWwoKSxcbiAgLy8g7IOd65617ZWY66m0IOuhnOq5he2VnOuLpC4gZmFsc2XripQgcmVxdWVzdCBsb2cg7JOw6riw66eMIOuBhOqzoCBkaXNwYXRjaC90aHJlYWTripQg7Jyg7KeA7ZWc64ukLlxuICBsb2dnZXI6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG4gIHJ1bkNvbnRleHQ6IFFncmlkUnVuQ29udGV4dC5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0czogei5hcnJheShRZ3JpZFRvb2xSZXN1bHRJbnB1dCkub3B0aW9uYWwoKSxcbiAgLy8gT3BlbkFJIG9ubHksIG5vbi1zdHJlYW06IHRydWUgcmVxdWlyZXMgYW4gaW1hZ2U7IGF1dG8gcGVybWl0cyB0ZXh0IG9yIG5hdGl2ZSBpbWFnZSB0b29scy5cbiAgaW1hZ2VHZW5lcmF0aW9uOiB6LnVuaW9uKFt6LmJvb2xlYW4oKSwgei5saXRlcmFsKFwiYXV0b1wiKV0pLm9wdGlvbmFsKCksXG4gIC8vIHFncmlkIOqwgOqyqSDstpTsoJUg67CPIENvZGV4IOydtOuvuOyngCDsmpTssq0g7Z6M7Yq4LiDsnbTrr7jsp4Ag66qo64247J2AIGdwdC1pbWFnZS0yIOuhnCDqs6DsoJUg6rCA7KCV7ZWc64ukLlxuICBpbWFnZUdlbmVyYXRpb25PcHRpb25zOiBJbWFnZUdlbmVyYXRpb25PcHRpb25zLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIFF1ZXJ5SW5wdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeUlucHV0PjtcblxuZXhwb3J0IGNvbnN0IE1vZGVsRmFsbGJhY2sgPSB6Lm9iamVjdCh7XG4gIHRyaWdnZXI6IHoubGl0ZXJhbChcInJlZnVzYWxcIiksXG4gIGZyb21Nb2RlbDogei5zdHJpbmcoKSxcbiAgdG9Nb2RlbDogei5zdHJpbmcoKSxcbiAgY2F0ZWdvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZXhwbGFuYXRpb246IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgTW9kZWxGYWxsYmFjayA9IHouaW5mZXI8dHlwZW9mIE1vZGVsRmFsbGJhY2s+O1xuXG5leHBvcnQgY29uc3QgQ29zdFNvdXJjZSA9IHouZW51bShbXCJwcm92aWRlclwiLCBcInByaWNpbmdfdGFibGVcIiwgXCJtaXhlZFwiXSk7XG5leHBvcnQgdHlwZSBDb3N0U291cmNlID0gei5pbmZlcjx0eXBlb2YgQ29zdFNvdXJjZT47XG5cbmV4cG9ydCBjb25zdCBRdWVyeU91dHB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRleHQ6IHouc3RyaW5nKCksXG4gIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgZmluaXNoUmVhc29uOiBGaW5pc2hSZWFzb24sXG4gIHRva2VuTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICByZXF1ZXN0ZWRNb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbEZhbGxiYWNrczogei5hcnJheShNb2RlbEZhbGxiYWNrKS5vcHRpb25hbCgpLFxuICB1c2FnZTogei5vYmplY3Qoe1xuICAgIGlucHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICBvdXRwdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgY2FjaGVfY3JlYXRpb25faW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzVtX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgIGNhY2hlX3JlYWRfaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICB9KSxcbiAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLFxuICBjb3N0VXNkOiB6Lm51bWJlcigpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUXVlcnlPdXRwdXQgPSB6LmluZmVyPHR5cGVvZiBRdWVyeU91dHB1dD47XG5cbi8vIOKUgOKUgOKUgCBTdHJlYW0gRXZlbnRzIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3RyZWFtRXZlbnRzID0gei5vYmplY3Qoe1xuICBkZWx0YTogei5vYmplY3QoeyB0ZXh0OiB6LnN0cmluZygpIH0pLFxuICB0b29sQ2FsbDogei5vYmplY3Qoe1xuICAgIHRvb2xDYWxsSWQ6IHouc3RyaW5nKCksXG4gICAgdG9vbE5hbWU6IHouc3RyaW5nKCksXG4gICAgaW5wdXQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICBkb25lOiB6Lm9iamVjdCh7XG4gICAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgdGV4dDogei5zdHJpbmcoKSxcbiAgICBtb2RlbDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIHJlcXVlc3RlZE1vZGVsOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgbW9kZWxGYWxsYmFja3M6IHouYXJyYXkoTW9kZWxGYWxsYmFjaykub3B0aW9uYWwoKSxcbiAgICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBmaW5pc2hSZWFzb246IEZpbmlzaFJlYXNvbixcbiAgICB1c2FnZTogei5vYmplY3Qoe1xuICAgICAgaW5wdXRfdG9rZW5zOiB6Lm51bWJlcigpLFxuICAgICAgb3V0cHV0X3Rva2Vuczogei5udW1iZXIoKSxcbiAgICAgIHJlYXNvbmluZ190b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgICBjYWNoZV9jcmVhdGlvbl81bV9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX2lucHV0X3Rva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICAgICAgY2FjaGVfcmVhZF9pbnB1dF90b2tlbnM6IHoubnVtYmVyKCksXG4gICAgfSksXG4gICAgZHVyYXRpb25Nczogei5udW1iZXIoKSxcbiAgICB0dGZ0TXM6IHoubnVtYmVyKCksXG4gICAgY29zdFVzZDogei5udW1iZXIoKSxcbiAgICBjb3N0U291cmNlOiBDb3N0U291cmNlLFxuICAgIGNvbnRlbnQ6IHouYXJyYXkoUWdyaWRDb250ZW50KSxcbiAgICBydW5Db250ZXh0OiBRZ3JpZFJ1bkNvbnRleHQub3B0aW9uYWwoKSxcbiAgfSksXG4gIGVycm9yOiB6Lm9iamVjdCh7IG1lc3NhZ2U6IHouc3RyaW5nKCkgfSksXG59KTtcbmV4cG9ydCB0eXBlIFN0cmVhbUV2ZW50cyA9IHouaW5mZXI8dHlwZW9mIFN0cmVhbUV2ZW50cz47XG5cbi8vIOKUgOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgQ3JlYXRlUnVuSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHVzZXJQcm9tcHQ6IHouc3RyaW5nKCksXG4gIHN5c3RlbVByb21wdDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHByb2plY3ROYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGhpc3Rvcnk6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgaXNTdHJ1Y3R1cmVkOiB6LmJvb2xlYW4oKS5vcHRpb25hbCgpLFxuICBqc29uU2NoZW1hOiB6LnN0cmluZygpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgQ3JlYXRlUnVuSW5wdXQgPSB6LmluZmVyPHR5cGVvZiBDcmVhdGVSdW5JbnB1dD47XG5cbmV4cG9ydCBjb25zdCBBcHBlbmRTdGVwSW5wdXQgPSB6Lm9iamVjdCh7XG4gIHJlcXVlc3RMb2dJZDogei5udW1iZXIoKSxcbiAgc3RlcEluZGV4OiB6Lm51bWJlcigpLFxuICB0eXBlOiB6LmVudW0oW1wiZ2VuZXJhdGVcIiwgXCJ0b29sX2NhbGxcIl0pLFxuICBtb2RlbE5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVxdWVzdGVkTW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIGZhbGxiYWNrQ291bnQ6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgb3V0cHV0VG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlUmVhZFRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNhY2hlQ3JlYXRpb241bVRva2Vuczogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjYWNoZUNyZWF0aW9uMWhUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFVzZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxuICBjb3N0U291cmNlOiBDb3N0U291cmNlLm9wdGlvbmFsKCksXG4gIGR1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdHRmdE1zOiB6Lm51bWJlcigpLm51bGxhYmxlKCkub3B0aW9uYWwoKSxcbiAgZmluaXNoUmVhc29uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlYXNvbmluZ1RleHQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVhc29uaW5nVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvb2xDYWxsSW5kZXg6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG9vbENhbGxJZDogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sQXJnczogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b29sUmVzdWx0OiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHRvb2xEdXJhdGlvbk1zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEFwcGVuZFN0ZXBJbnB1dCA9IHouaW5mZXI8dHlwZW9mIEFwcGVuZFN0ZXBJbnB1dD47XG5cbmV4cG9ydCBjb25zdCBGaW5pc2hSdW5JbnB1dCA9IHoub2JqZWN0KHtcbiAgcmVxdWVzdExvZ0lkOiB6Lm51bWJlcigpLFxuICBzdGF0dXM6IHouZW51bShbXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pLFxuICByZXNwb25zZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICB0b2tlbk5hbWU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgbW9kZWxOYW1lOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIHJlcXVlc3RlZE1vZGVsTmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBmYWxsYmFja0NvdW50OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsSW5wdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxPdXRwdXRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZVJlYWRUb2tlbnM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgdG90YWxDYWNoZUNyZWF0aW9uVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjVtVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIHRvdGFsQ2FjaGVDcmVhdGlvbjFoVG9rZW5zOiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gIGNvc3RVc2Q6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgY29zdFNvdXJjZTogQ29zdFNvdXJjZS5vcHRpb25hbCgpLFxuICB0b3RhbER1cmF0aW9uTXM6IHoubnVtYmVyKCkub3B0aW9uYWwoKSxcbiAgaGlzdG9yeTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICBlcnJvck1lc3NhZ2U6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcmVzcG9uc2VKc29uT2s6IHouYm9vbGVhbigpLm9wdGlvbmFsKCksXG59KTtcbmV4cG9ydCB0eXBlIEZpbmlzaFJ1bklucHV0ID0gei5pbmZlcjx0eXBlb2YgRmluaXNoUnVuSW5wdXQ+O1xuXG4vLyDilIDilIDilIAgVG9rZW4gTWFuYWdlbWVudCDilIDilIDilIBcblxuZXhwb3J0IGNvbnN0IFRva2VuU3RhdHMgPSB6Lm9iamVjdCh7XG4gIHRva2VuOiB6LnN0cmluZygpLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKSxcbiAgcmVxdWVzdHM6IHoubnVtYmVyKCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuU3RhdHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlblN0YXRzPjtcblxuLy8g4pSA4pSA4pSAIE9BdXRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgT0F1dGhTdGFydFJlc3VsdCA9IHoub2JqZWN0KHtcbiAgYXV0aFVybDogei5zdHJpbmcoKSxcbiAgLy8gcmVkaXJlY3Q6IOu4jOudvOyasOyggCDsnpDrj5kg67O16reAKOujqO2UhOuwsSDsoJHsho0pLiBjb2RlOiDsvZjshpQg7L2c67CxICsg7L2U65OcIOu2meyXrOuEo+q4sCjsm5Dqsqkg7KCR7IaNKS5cbiAgLy8gT3BlbkFJIOybkOqyqSDqsr3roZzripQg65Ox66Gd65CcIGxvb3BiYWNrIGNhbGxiYWNrIFVSTCDsoITssrTrpbwg67aZ7Jes64Sj64qUIGNvZGUg66qo65Oc66W8IOyTtOuLpC5cbiAgbW9kZTogei5lbnVtKFtcInJlZGlyZWN0XCIsIFwiY29kZVwiXSksXG59KTtcbmV4cG9ydCB0eXBlIE9BdXRoU3RhcnRSZXN1bHQgPSB6LmluZmVyPHR5cGVvZiBPQXV0aFN0YXJ0UmVzdWx0PjtcblxuY29uc3QgUmF0ZVdpbmRvdyA9IHpcbiAgLm9iamVjdCh7XG4gICAgdXRpbGl6YXRpb246IHoubnVtYmVyKCkubnVsbGFibGUoKSxcbiAgICByZXNldHNBdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICAgIHdpbmRvd0R1cmF0aW9uTWluczogei5udW1iZXIoKS5udWxsYWJsZSgpLm9wdGlvbmFsKCksXG4gIH0pXG4gIC5udWxsYWJsZSgpO1xuXG5leHBvcnQgY29uc3QgVXNhZ2VSZXNwb25zZSA9IHoub2JqZWN0KHtcbiAgZXJyb3I6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgZml2ZUhvdXI6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbiAgc2V2ZW5EYXk6IFJhdGVXaW5kb3cub3B0aW9uYWwoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVXNhZ2VSZXNwb25zZSA9IHouaW5mZXI8dHlwZW9mIFVzYWdlUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgSGVhbHRoIOKUgOKUgOKUgFxuXG5leHBvcnQgY29uc3QgU3Vic2NyaWJlclN0YXR1cyA9IHoub2JqZWN0KHtcbiAgY29ubmVjdGVkOiB6LmJvb2xlYW4oKSxcbiAgY29ubmVjdGVkQXQ6IHouZGF0ZSgpLm51bGxhYmxlKCksXG4gIGxhc3RSZWNvbmNpbGVBdDogei5kYXRlKCkubnVsbGFibGUoKSxcbiAgYXR0ZW1wdDogei5udW1iZXIoKSxcbn0pO1xuZXhwb3J0IHR5cGUgU3Vic2NyaWJlclN0YXR1cyA9IHouaW5mZXI8dHlwZW9mIFN1YnNjcmliZXJTdGF0dXM+O1xuXG5leHBvcnQgY29uc3QgUHJvdmlkZXJTdGFydHVwU3RhdGUgPSB6LmVudW0oW1wic3RhcnRpbmdcIiwgXCJyZWFkeVwiLCBcImZhaWxlZFwiXSk7XG5leHBvcnQgdHlwZSBQcm92aWRlclN0YXJ0dXBTdGF0ZSA9IHouaW5mZXI8dHlwZW9mIFByb3ZpZGVyU3RhcnR1cFN0YXRlPjtcblxuZXhwb3J0IGNvbnN0IEhlYWx0aFJlc3BvbnNlID0gei5vYmplY3Qoe1xuICBzdGF0dXM6IHouc3RyaW5nKCksXG4gIGFjdGl2ZVRva2Vuczogei5udW1iZXIoKSxcbiAgc3Vic2NyaWJlcjogU3Vic2NyaWJlclN0YXR1cy5udWxsYWJsZSgpLFxuICAvLyBIVFRQIOumrOyKpOuLneydgCBkaXNwYXRjaGVyIOq4sOuPmeuztOuLpCDrqLzsoIAg7Je066aw64ukLiAyMDAg7J2R64u166eM7Jy866Gc64qUIOyalOyyreydhCDsspjrpqztlaAg7IiYXG4gIC8vIOyeiOuKlOyngCDslYwg7IiYIOyXhuyWtCBwcm92aWRlciDrs4Qg7KSA67mEIOyDge2DnOulvCDtlajqu5gg64W47Lac7ZWc64ukLlxuICByZWFkeTogei5ib29sZWFuKCksXG4gIHByb3ZpZGVyczogei5vYmplY3Qoe1xuICAgIG9wZW5haTogUHJvdmlkZXJTdGFydHVwU3RhdGUsXG4gICAgYW50aHJvcGljOiBQcm92aWRlclN0YXJ0dXBTdGF0ZSxcbiAgfSksXG59KTtcbmV4cG9ydCB0eXBlIEhlYWx0aFJlc3BvbnNlID0gei5pbmZlcjx0eXBlb2YgSGVhbHRoUmVzcG9uc2U+O1xuXG4vLyDilIDilIDilIAgRXJyb3JzIOKUgOKUgOKUgFxuXG5leHBvcnQgY2xhc3MgUXVvdGFFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgcmVhZG9ubHkgY29kZSA9IFwiUVVPVEFfRVhIQVVTVEVEXCIgYXMgY29uc3Q7XG59XG5leHBvcnQgY2xhc3MgUXVvdGFUaHJlc2hvbGRFeGNlZWRlZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICByZWFkb25seSBjb2RlID0gXCJRVU9UQV9USFJFU0hPTERfRVhDRUVERURcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBUaW1lb3V0RXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlRJTUVPVVRcIiBhcyBjb25zdDtcbn1cbmV4cG9ydCBjbGFzcyBQcm9jZXNzRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIHJlYWRvbmx5IGNvZGUgPSBcIlBST0NFU1NfRVJST1JcIiBhcyBjb25zdDtcbn1cblxuLy8g4pSA4pSA4pSAIFV0aWxzIOKUgOKUgOKUgFxuXG5leHBvcnQgZnVuY3Rpb24gbWFza1Rva2VuKHRva2VuOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gdG9rZW4ubGVuZ3RoID4gNCA/IGAuLi4ke3Rva2VuLnNsaWNlKC00KX1gIDogdG9rZW47XG59XG4iXSwibWFwcGluZ3MiOiI7O0FBSUEsTUFBYSxTQUFTLEVBQUUsS0FBSztDQUFDO0NBQU87Q0FBVTtBQUFNLENBQUM7QUFHdEQsTUFBYSxZQUFZLEVBQUUsT0FBTztDQUNoQyxNQUFNLEVBQUUsT0FBTztDQUNmLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGFBQWEsRUFBRSxRQUFRO0FBQ3pCLENBQUM7QUFJRCxNQUFhLDBCQUEwQixFQUFFLE9BQU87Q0FDOUMsT0FBTyxFQUFFLFFBQVEsY0FBYztDQUMvQixPQUFPLEVBQUUsUUFBUSxhQUFhO0NBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzFCLE9BQU8sRUFDSixPQUFPO0VBQ04sY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDckMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDdEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFlBQVk7RUFDckMsc0JBQXNCLEVBQ25CLE9BQU87R0FDTixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWTtHQUNyQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWTtHQUNwQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsU0FBUztFQUNuRCxDQUFDLENBQUMsQ0FDRCxTQUFTO0VBQ1osdUJBQXVCLEVBQ3BCLE9BQU87R0FDTixjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWTtHQUNyQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsWUFBWTtFQUN0QyxDQUFDLENBQUMsQ0FDRCxTQUFTO0NBQ2QsQ0FBQyxDQUFDLENBQ0QsU0FBUztBQUNkLENBQUM7QUFHRCxNQUFhLGVBQWUsRUFBRSxtQkFBbUIsUUFBUTtDQUN2RCxFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxNQUFNO0VBQ3RCLE1BQU0sRUFBRSxPQUFPO0NBQ2pCLENBQUM7Q0FDRCxFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxXQUFXO0VBQzNCLFlBQVksRUFBRSxPQUFPO0VBQ3JCLFVBQVUsRUFBRSxPQUFPO0VBQ25CLE9BQU8sRUFBRSxPQUFPO0NBQ2xCLENBQUM7Q0FDRCxFQUFFLE9BQU87RUFDUCxNQUFNLEVBQUUsUUFBUSxPQUFPO0VBRXZCLE1BQU0sRUFBRSxPQUFPO0VBQ2YsV0FBVyxFQUFFLEtBQUs7R0FBQztHQUFhO0dBQWM7RUFBWSxDQUFDLENBQUMsQ0FBQyxTQUFTO0VBQ3RFLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxRQUFRO0VBQ2xDLFlBQVksd0JBQXdCLFNBQVM7Q0FDL0MsQ0FBQztBQUNILENBQUM7QUFHRCxNQUFhLGVBQWUsRUFBRSxLQUFLLENBQUMsUUFBUSxZQUFZLENBQUM7QUFHekQsTUFBYSxZQUFZLEVBQUUsS0FBSztDQUFDO0NBQU87Q0FBVTtBQUFNLENBQUM7QUFHekQsTUFBYSxtQkFBbUIsRUFBRSxLQUFLO0NBQUM7Q0FBUTtDQUFXO0NBQVk7QUFBTSxDQUFDO0FBRzlFLE1BQWEsY0FBYyxFQUFFLEtBQUssQ0FBQyxRQUFRLE1BQU0sQ0FBQztBQUdsRCxNQUFhLHlCQUF5QixFQUFFLEtBQUs7Q0FBQztDQUFPO0NBQVU7QUFBTSxDQUFDO0FBR3RFLE1BQWEsc0JBQXNCLEVBQUUsS0FBSztDQUFDO0NBQWE7Q0FBYTtBQUFXLENBQUM7QUFHakYsTUFBYSx5QkFBeUIsRUFDbkMsT0FBTztDQUNOLFNBQVMsdUJBQXVCLFNBQVM7Q0FDekMsTUFBTSxvQkFBb0IsU0FBUztDQUNuQyxZQUFZLEVBQUUsS0FBSztFQUFDO0VBQVE7RUFBVTtDQUFhLENBQUMsQ0FBQyxDQUFDLFNBQVM7Q0FDL0QsY0FBYyxFQUFFLEtBQUs7RUFBQztFQUFPO0VBQVE7Q0FBTSxDQUFDLENBQUMsQ0FBQyxTQUFTO0FBQ3pELENBQUMsQ0FBQyxDQUNELFFBQ0UsWUFDQyxRQUFRLGVBQWUsaUJBQ3ZCLENBQUMsUUFBUSxnQkFDVCxRQUFRLGlCQUFpQixPQUMzQjtDQUFFLFNBQVM7Q0FBeUQsTUFBTSxDQUFDLGNBQWM7QUFBRSxDQUM3RjtBQUdGLE1BQWEsaUJBQWlCLEVBQUUsbUJBQW1CLFFBQVEsQ0FDekQsRUFBRSxPQUFPO0NBQ1AsTUFBTSxFQUFFLFFBQVEsTUFBTTtDQUN0QixNQUFNLEVBQUUsT0FBTztDQUNmLGVBQWUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUM5QyxDQUFDLEdBQ0QsRUFBRSxPQUFPO0NBQ1AsTUFBTSxFQUFFLFFBQVEsT0FBTztDQUN2QixLQUFLLEVBQUUsT0FBTztBQUNoQixDQUFDLENBQ0gsQ0FBQztBQUdELE1BQWEsdUJBQXVCLEtBQUs7QUFDekMsTUFBYSxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxJQUFJLG9CQUFvQjtBQU9sRixNQUFhLG1CQUFtQixFQUFFLE9BQU87Q0FDdkMsVUFBVSxFQUFFLE9BQU87Q0FDbkIsVUFBVSxFQUFFLE9BQU87Q0FDbkIsT0FBTyxFQUFFLE9BQU87Q0FDaEIsWUFBWSxFQUFFLE9BQU87QUFDdkIsQ0FBQztBQUdELE1BQWEsa0JBQWtCLEVBQUUsT0FBTztDQUV0QyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNsQyxhQUFhLGlCQUFpQixTQUFTO0FBQ3pDLENBQUM7QUFHRCxNQUFhLHVCQUF1QixFQUFFLE9BQU87Q0FDM0MsWUFBWSxFQUFFLE9BQU87Q0FDckIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsUUFBUSxFQUFFLE9BQU87Q0FDakIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7QUFDaEMsQ0FBQztBQUdELE1BQWEsYUFBYSxFQUFFLFlBQVk7Q0FDdEMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDNUIsUUFBUSxFQUFFLE9BQU87Q0FDakIsT0FBTyxFQUFFLE1BQU0sY0FBYyxDQUFDLENBQUMsU0FBUztDQUN4QyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMzQixTQUFTLGVBQWUsU0FBUztDQUNqQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoQyxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUMsQ0FBQyxTQUFTO0NBRW5DLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRSxRQUFRLElBQUksR0FBRyxFQUFFLFFBQVEsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7Q0FDaEUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDNUIsV0FBVyxVQUFVLFNBQVM7Q0FDOUIsa0JBQWtCLGlCQUFpQixTQUFTO0NBQzVDLGFBQWEsWUFBWSxTQUFTO0NBQ2xDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBRWpDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBRS9CLGtCQUFrQixFQUNmLE9BQU8sQ0FBQyxDQUNSLE1BQU0sZ0JBQWdCLENBQUMsQ0FDdkIsU0FBUztDQUVaLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQyxTQUFTO0NBQzdCLFlBQVksZ0JBQWdCLFNBQVM7Q0FDckMsYUFBYSxFQUFFLE1BQU0sb0JBQW9CLENBQUMsQ0FBQyxTQUFTO0NBRXBELGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxFQUFFLFFBQVEsR0FBRyxFQUFFLFFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7Q0FFcEUsd0JBQXdCLHVCQUF1QixTQUFTO0FBQzFELENBQUM7QUFHRCxNQUFhLGdCQUFnQixFQUFFLE9BQU87Q0FDcEMsU0FBUyxFQUFFLFFBQVEsU0FBUztDQUM1QixXQUFXLEVBQUUsT0FBTztDQUNwQixTQUFTLEVBQUUsT0FBTztDQUNsQixVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM5QixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztBQUNuQyxDQUFDO0FBR0QsTUFBYSxhQUFhLEVBQUUsS0FBSztDQUFDO0NBQVk7Q0FBaUI7QUFBTyxDQUFDO0FBR3ZFLE1BQWEsY0FBYyxFQUFFLE9BQU87Q0FDbEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbEMsTUFBTSxFQUFFLE9BQU87Q0FDZixTQUFTLEVBQUUsTUFBTSxZQUFZO0NBQzdCLGNBQWM7Q0FDZCxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMvQixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3BDLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDLENBQUMsU0FBUztDQUNoRCxPQUFPLEVBQUUsT0FBTztFQUNkLGNBQWMsRUFBRSxPQUFPO0VBQ3ZCLGVBQWUsRUFBRSxPQUFPO0VBQ3hCLGtCQUFrQixFQUFFLE9BQU87RUFDM0IsNkJBQTZCLEVBQUUsT0FBTztFQUN0QyxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0VBQ3BELGdDQUFnQyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7RUFDcEQseUJBQXlCLEVBQUUsT0FBTztDQUNwQyxDQUFDO0NBQ0QsWUFBWSxFQUFFLE9BQU87Q0FDckIsUUFBUSxFQUFFLE9BQU87Q0FDakIsU0FBUyxFQUFFLE9BQU87Q0FDbEIsWUFBWTtDQUNaLFlBQVksZ0JBQWdCLFNBQVM7QUFDdkMsQ0FBQztBQUtELE1BQWEsZUFBZSxFQUFFLE9BQU87Q0FDbkMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLENBQUM7Q0FDcEMsVUFBVSxFQUFFLE9BQU87RUFDakIsWUFBWSxFQUFFLE9BQU87RUFDckIsVUFBVSxFQUFFLE9BQU87RUFDbkIsT0FBTyxFQUFFLE9BQU87Q0FDbEIsQ0FBQztDQUNELE1BQU0sRUFBRSxPQUFPO0VBQ2IsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7RUFDbEMsTUFBTSxFQUFFLE9BQU87RUFDZixPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztFQUMzQixnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0VBQ3BDLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDLENBQUMsU0FBUztFQUNoRCxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztFQUMvQixjQUFjO0VBQ2QsT0FBTyxFQUFFLE9BQU87R0FDZCxjQUFjLEVBQUUsT0FBTztHQUN2QixlQUFlLEVBQUUsT0FBTztHQUN4QixrQkFBa0IsRUFBRSxPQUFPO0dBQzNCLDZCQUE2QixFQUFFLE9BQU87R0FDdEMsZ0NBQWdDLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztHQUNwRCxnQ0FBZ0MsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0dBQ3BELHlCQUF5QixFQUFFLE9BQU87RUFDcEMsQ0FBQztFQUNELFlBQVksRUFBRSxPQUFPO0VBQ3JCLFFBQVEsRUFBRSxPQUFPO0VBQ2pCLFNBQVMsRUFBRSxPQUFPO0VBQ2xCLFlBQVk7RUFDWixTQUFTLEVBQUUsTUFBTSxZQUFZO0VBQzdCLFlBQVksZ0JBQWdCLFNBQVM7Q0FDdkMsQ0FBQztDQUNELE9BQU8sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLENBQUM7QUFLRCxNQUFhLGlCQUFpQixFQUFFLE9BQU87Q0FDckMsWUFBWSxFQUFFLE9BQU87Q0FDckIsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDNUIsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDN0IsY0FBYyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVM7QUFDN0MsQ0FBQztBQUdELE1BQWEsa0JBQWtCLEVBQUUsT0FBTztDQUN0QyxjQUFjLEVBQUUsT0FBTztDQUN2QixXQUFXLEVBQUUsT0FBTztDQUNwQixNQUFNLEVBQUUsS0FBSyxDQUFDLFlBQVksV0FBVyxDQUFDO0NBQ3RDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQy9CLG9CQUFvQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDeEMsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbEMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNyQyxxQkFBcUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLHVCQUF1QixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDM0MsdUJBQXVCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMzQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixZQUFZLFdBQVcsU0FBUztDQUNoQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUztDQUN2QyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNsQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNuQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3JDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ25DLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDcEMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDN0IsQ0FBQztBQUdELE1BQWEsaUJBQWlCLEVBQUUsT0FBTztDQUNyQyxjQUFjLEVBQUUsT0FBTztDQUN2QixRQUFRLEVBQUUsS0FBSztFQUFDO0VBQWE7RUFBUztDQUFTLENBQUM7Q0FDaEQsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0Isb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUN4QyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNuQyxrQkFBa0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3RDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDdkMsc0JBQXNCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMxQywwQkFBMEIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlDLDRCQUE0QixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDaEQsNEJBQTRCLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNoRCxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixZQUFZLFdBQVcsU0FBUztDQUNoQyxpQkFBaUIsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3JDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzdCLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2xDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7QUFDdkMsQ0FBQztBQUtELE1BQWEsYUFBYSxFQUFFLE9BQU87Q0FDakMsT0FBTyxFQUFFLE9BQU87Q0FDaEIsTUFBTSxFQUFFLE9BQU87Q0FDZixVQUFVLEVBQUUsT0FBTztDQUNuQixVQUFVLEVBQUUsT0FBTztBQUNyQixDQUFDO0FBS0QsTUFBYSxtQkFBbUIsRUFBRSxPQUFPO0NBQ3ZDLFNBQVMsRUFBRSxPQUFPO0NBR2xCLE1BQU0sRUFBRSxLQUFLLENBQUMsWUFBWSxNQUFNLENBQUM7QUFDbkMsQ0FBQztBQUdELE1BQU0sYUFBYSxFQUNoQixPQUFPO0NBQ04sYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsb0JBQW9CLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsU0FBUztBQUNyRCxDQUFDLENBQUMsQ0FDRCxTQUFTO0FBRVosTUFBYSxnQkFBZ0IsRUFBRSxPQUFPO0NBQ3BDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzNCLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQzlCLFVBQVUsV0FBVyxTQUFTO0NBQzlCLFVBQVUsV0FBVyxTQUFTO0FBQ2hDLENBQUM7QUFLRCxNQUFhLG1CQUFtQixFQUFFLE9BQU87Q0FDdkMsV0FBVyxFQUFFLFFBQVE7Q0FDckIsYUFBYSxFQUFFLEtBQUssQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsaUJBQWlCLEVBQUUsS0FBSyxDQUFDLENBQUMsU0FBUztDQUNuQyxTQUFTLEVBQUUsT0FBTztBQUNwQixDQUFDO0FBR0QsTUFBYSx1QkFBdUIsRUFBRSxLQUFLO0NBQUM7Q0FBWTtDQUFTO0FBQVEsQ0FBQztBQUcxRSxNQUFhLGlCQUFpQixFQUFFLE9BQU87Q0FDckMsUUFBUSxFQUFFLE9BQU87Q0FDakIsY0FBYyxFQUFFLE9BQU87Q0FDdkIsWUFBWSxpQkFBaUIsU0FBUztDQUd0QyxPQUFPLEVBQUUsUUFBUTtDQUNqQixXQUFXLEVBQUUsT0FBTztFQUNsQixRQUFRO0VBQ1IsV0FBVztDQUNiLENBQUM7QUFDSCxDQUFDO0FBS0QsSUFBYSxhQUFiLGNBQWdDLE1BQU07Q0FDcEMsT0FBZ0I7QUFDbEI7QUFDQSxJQUFhLDhCQUFiLGNBQWlELE1BQU07Q0FDckQsT0FBZ0I7QUFDbEI7QUFDQSxJQUFhLGVBQWIsY0FBa0MsTUFBTTtDQUN0QyxPQUFnQjtBQUNsQjtBQUNBLElBQWEsZUFBYixjQUFrQyxNQUFNO0NBQ3RDLE9BQWdCO0FBQ2xCO0FBSUEsU0FBZ0IsVUFBVSxPQUF1QjtDQUMvQyxPQUFPLE1BQU0sU0FBUyxJQUFJLE1BQU0sTUFBTSxNQUFNLEVBQUUsTUFBTTtBQUN0RCJ9
@@ -25,9 +25,6 @@ var TokenSubscriber = class {
25
25
  this.connConfig = connConfig;
26
26
  this.dispatcher = dispatcher;
27
27
  }
28
- setTokenChangeHandler(handler) {
29
- this.tokenChangeHandler = handler;
30
- }
31
28
  notifyTokensChanged() {
32
29
  try {
33
30
  this.tokenChangeHandler?.();
@@ -142,7 +139,7 @@ var TokenSubscriber = class {
142
139
  const previousRow = this.tokenChangeHandler ? this.dispatcher.tokens.get(payload.id) : void 0;
143
140
  const wasKeepaliveTarget = previousRow?.active === true && previousRow.provider === "anthropic";
144
141
  if (payload.op === "DELETE") {
145
- this.dispatcher.removeCache(payload.id);
142
+ this.dispatcher.tokens.delete(payload.id);
146
143
  await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai token remove failed: ${e.message}`));
147
144
  this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
148
145
  logger.info(`NOTIFY ${payload.op} id=${payload.id} → removed from cache`);
@@ -151,14 +148,14 @@ var TokenSubscriber = class {
151
148
  }
152
149
  const row = await TokenModel.findOne("A", { id: payload.id });
153
150
  if (!row) {
154
- this.dispatcher.removeCache(payload.id);
151
+ this.dispatcher.tokens.delete(payload.id);
155
152
  await this.dispatcher.openaiDispatcher?.onTokenRemoved(payload.id).catch((e) => logger.warn(`openai token remove failed: ${e.message}`));
156
153
  this.dispatcher.anthropicDispatcher?.onTokenRemoved(payload.id);
157
154
  logger.info(`NOTIFY ${payload.op} id=${payload.id} → missing, removed from cache`);
158
155
  if (previousRow === void 0 || wasKeepaliveTarget) this.notifyTokensChanged();
159
156
  return;
160
157
  }
161
- this.dispatcher.upsertCache(payload.id, row);
158
+ this.dispatcher.tokens.set(payload.id, row);
162
159
  if (row.provider === "openai") {
163
160
  const creds = row.credentials;
164
161
  const openaiDispatcher = this.dispatcher.openaiDispatcher;
@@ -211,4 +208,4 @@ var TokenSubscriber = class {
211
208
  //#endregion
212
209
  export { TokenSubscriber };
213
210
 
214
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzLCB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBwcml2YXRlIG9wZXJhdGlvbkNoYWluOiBQcm9taXNlPHZvaWQ+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XG4gIHByaXZhdGUgdG9rZW5DaGFuZ2VIYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgY29ubkNvbmZpZzogQ2xpZW50Q29uZmlnLFxuICAgIHB1YmxpYyBkaXNwYXRjaGVyOiBRZ3JpZERpc3BhdGNoZXJDbGFzcyxcbiAgKSB7fVxuXG4gIHNldFRva2VuQ2hhbmdlSGFuZGxlcihoYW5kbGVyOiAoKCkgPT4gdm9pZCkgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy50b2tlbkNoYW5nZUhhbmRsZXIgPSBoYW5kbGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBub3RpZnlUb2tlbnNDaGFuZ2VkKCk6IHZvaWQge1xuICAgIHRyeSB7XG4gICAgICB0aGlzLnRva2VuQ2hhbmdlSGFuZGxlcj8uKCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGxvZ2dlci53YXJuKGB0b2tlbiBjaGFuZ2UgaGFuZGxlciBmYWlsZWQ6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHN0YXJ0KCk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgICB0aGlzLmVuc3VyZVJlY29uY2lsZVRpbWVyKCk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5jb25uZWN0QW5kUmVjb25jaWxlKCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBsb2dnZXIud2Fybihgc3Vic2NyaWJlciBzdGFydCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9LCBzY2hlZHVsaW5nIHJldHJ5YCk7XG4gICAgICB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdG9wKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQgPSB0cnVlO1xuICAgIGlmICh0aGlzLnJlY29uY2lsZVRpbWVyKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMucmVjb25jaWxlVGltZXIpO1xuICAgICAgdGhpcy5yZWNvbmNpbGVUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGlmICh0aGlzLnJlY29ubmVjdFRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGhpcy5yZWNvbm5lY3RUaW1lcik7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5jbG9zZUNsaWVudCgpO1xuICB9XG5cbiAgc3RhdHVzKCk6IFN1YnNjcmliZXJTdGF0dXMge1xuICAgIHJldHVybiB7XG4gICAgICBjb25uZWN0ZWQ6IHRoaXMuY2xpZW50ICE9PSBudWxsICYmIHRoaXMucmVjb25uZWN0VGltZXIgPT09IG51bGwsXG4gICAgICBjb25uZWN0ZWRBdDogdGhpcy5jb25uZWN0ZWRBdCxcbiAgICAgIGxhc3RSZWNvbmNpbGVBdDogdGhpcy5sYXN0UmVjb25jaWxlQXQsXG4gICAgICBhdHRlbXB0OiB0aGlzLmF0dGVtcHQsXG4gICAgfTtcbiAgfVxuXG4gIGVuc3VyZVJlY29uY2lsZVRpbWVyKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnJlY29uY2lsZVRpbWVyKSByZXR1cm47XG5cbiAgICAvLyBMSVNURU4vTk9USUZZIOuKlCDrgYrquLQg64+Z7JWIIOycoOyLpOuQoCDsiJgg7J6I7Ja0IOyjvOq4sOyggeycvOuhnCBEQiDquLDspIDsnLzroZwg66ee7LaY64ukLlxuICAgIHRoaXMucmVjb25jaWxlVGltZXIgPSBzZXRJbnRlcnZhbCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY29uY2lsZSgpLmNhdGNoKChlKSA9PlxuICAgICAgICBsb2dnZXIud2FybihgcGVyaW9kaWMgcmVjb25jaWxlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSxcbiAgICAgICk7XG4gICAgfSwgUkVDT05DSUxFX0lOVEVSVkFMX01TKTtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3RBbmRSZWNvbmNpbGUoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy5jb25uZWN0QW5kTGlzdGVuKCk7XG4gICAgYXdhaXQgdGhpcy5yZWNvbmNpbGUoKTtcbiAgICB0aGlzLmF0dGVtcHQgPSAwO1xuICB9XG5cbiAgYXN5bmMgY29ubmVjdEFuZExpc3RlbigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAgICAgIC4uLnRoaXMuY29ubkNvbmZpZyxcbiAgICAgIGNvbm5lY3Rpb25UaW1lb3V0TWlsbGlzOiBDT05ORUNUSU9OX1RJTUVPVVRfTVMsXG4gICAgICBrZWVwQWxpdmU6IHRydWUsXG4gICAgICBrZWVwQWxpdmVJbml0aWFsRGVsYXlNaWxsaXM6IDEwXzAwMCxcbiAgICAgIGFwcGxpY2F0aW9uX25hbWU6IFwicWdyaWQtbGlzdGVuZXJcIixcbiAgICB9KTtcblxuICAgIGNsaWVudC5vbihcImVycm9yXCIsIChlKSA9PiB7XG4gICAgICBsb2dnZXIud2Fybihgc3Vic2NyaWJlciBlcnJvcjogJHtlLm1lc3NhZ2V9YCk7XG4gICAgICB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICB9KTtcbiAgICBjbGllbnQub24oXCJlbmRcIiwgKCkgPT4ge1xuICAgICAgaWYgKCF0aGlzLnNodXRkb3duUmVxdWVzdGVkKSB0aGlzLnJldHJ5TGF0ZXIoKTtcbiAgICB9KTtcbiAgICBjbGllbnQub24oXCJub3RpZmljYXRpb25cIiwgKG1zZykgPT4ge1xuICAgICAgaWYgKG1zZy5jaGFubmVsICE9PSBUT0tFTlNfQ0hBTkdFRCB8fCAhbXNnLnBheWxvYWQpIHJldHVybjtcbiAgICAgIHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uKG1zZy5wYXlsb2FkKS5jYXRjaCgoZSkgPT5cbiAgICAgICAgbG9nZ2VyLndhcm4oYGhhbmRsZSBOT1RJRlkgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApLFxuICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCBjbGllbnQuY29ubmVjdCgpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KFwiU0VUIHN0YXRlbWVudF90aW1lb3V0ID0gMFwiKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFVCBpZGxlX2luX3RyYW5zYWN0aW9uX3Nlc3Npb25fdGltZW91dCA9IDBcIik7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoYExJU1RFTiAke2NsaWVudC5lc2NhcGVJZGVudGlmaWVyKFRPS0VOU19DSEFOR0VEKX1gKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBjbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgICBhd2FpdCBjbGllbnQuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgdGhyb3cgZTtcbiAgICB9XG5cbiAgICB0aGlzLmNsaWVudCA9IGNsaWVudDtcbiAgICB0aGlzLmNvbm5lY3RlZEF0ID0gbmV3IERhdGUoKTtcbiAgICBsb2dnZXIuaW5mbyhgc3Vic2NyaWJlZCB0byAke1RPS0VOU19DSEFOR0VEfWApO1xuICB9XG5cbiAgcmV0cnlMYXRlcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5zaHV0ZG93blJlcXVlc3RlZCkgcmV0dXJuO1xuICAgIGlmICh0aGlzLnJlY29ubmVjdFRpbWVyKSByZXR1cm47XG5cbiAgICB2b2lkIHRoaXMuY2xvc2VDbGllbnQoKTtcbiAgICB0aGlzLmF0dGVtcHQgKz0gMTtcbiAgICBjb25zdCBjYXAgPSBNYXRoLm1pbihCQUNLT0ZGX0JBU0VfTVMgKiAyICoqIHRoaXMuYXR0ZW1wdCwgQkFDS09GRl9DQVBfTVMpO1xuICAgIGNvbnN0IGRlbGF5ID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2FwKTtcbiAgICBsb2dnZXIuaW5mbyhgcmVjb25uZWN0aW5nIGluICR7ZGVsYXl9bXMgKGF0dGVtcHQgJHt0aGlzLmF0dGVtcHR9KWApO1xuICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMucmVjb25uZWN0VGltZXIgPSBudWxsO1xuICAgICAgdGhpcy5jb25uZWN0QW5kUmVjb25jaWxlKCkuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgcmVjb25uZWN0IGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgICB9KTtcbiAgICB9LCBkZWxheSk7XG4gIH1cblxuICBhc3luYyBjbG9zZUNsaWVudCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzLmNsaWVudDtcbiAgICBpZiAoIWNsaWVudCkgcmV0dXJuO1xuXG4gICAgdGhpcy5jbGllbnQgPSBudWxsO1xuICAgIGNsaWVudC5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICBhd2FpdCBjbGllbnQuZW5kKCkuY2F0Y2goKCkgPT4ge30pO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTm90aWZpY2F0aW9uKHBheWxvYWRKc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnF1ZXVlT3BlcmF0aW9uKCgpID0+IHRoaXMuaGFuZGxlTm90aWZpY2F0aW9uTm93KHBheWxvYWRKc29uKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGhhbmRsZU5vdGlmaWNhdGlvbk5vdyhwYXlsb2FkSnNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcGF5bG9hZCA9IEpTT04ucGFyc2UocGF5bG9hZEpzb24pIGFzIFBheWxvYWQ7XG4gICAgY29uc3QgcHJldmlvdXNSb3cgPSB0aGlzLnRva2VuQ2hhbmdlSGFuZGxlclxuICAgICAgPyB0aGlzLmRpc3BhdGNoZXIudG9rZW5zLmdldChwYXlsb2FkLmlkKVxuICAgICAgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd2FzS2VlcGFsaXZlVGFyZ2V0ID0gcHJldmlvdXNSb3c/LmFjdGl2ZSA9PT0gdHJ1ZSAmJiBwcmV2aW91c1Jvdy5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIjtcbiAgICBpZiAocGF5bG9hZC5vcCA9PT0gXCJERUxFVEVcIikge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnJlbW92ZUNhY2hlKHBheWxvYWQuaWQpO1xuICAgICAgYXdhaXQgdGhpcy5kaXNwYXRjaGVyLm9wZW5haURpc3BhdGNoZXJcbiAgICAgICAgPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKVxuICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gcmVtb3ZlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAvLyBhbnRocm9waWMg7Yag7YGwIOydtOuypO2KuOuKlCDrj5nquLAodm9pZCkg4oCUIHByb3ZpZGVyIOulvCDrqqjrpbTrr4DroZwg66y07ZW07ZWY6rKMIO2VreyDgSDsoJzqsbAg7Iuc64+ELlxuICAgICAgdGhpcy5kaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpO1xuICAgICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0g4oaSIHJlbW92ZWQgZnJvbSBjYWNoZWApO1xuICAgICAgaWYgKHByZXZpb3VzUm93ID09PSB1bmRlZmluZWQgfHwgd2FzS2VlcGFsaXZlVGFyZ2V0KSB0aGlzLm5vdGlmeVRva2Vuc0NoYW5nZWQoKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3Qgcm93ID0gYXdhaXQgVG9rZW5Nb2RlbC5maW5kT25lKFwiQVwiLCB7IGlkOiBwYXlsb2FkLmlkIH0pO1xuICAgIGlmICghcm93KSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIucmVtb3ZlQ2FjaGUocGF5bG9hZC5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB0b2tlbiByZW1vdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9IOKGkiBtaXNzaW5nLCByZW1vdmVkIGZyb20gY2FjaGVgKTtcbiAgICAgIGlmIChwcmV2aW91c1JvdyA9PT0gdW5kZWZpbmVkIHx8IHdhc0tlZXBhbGl2ZVRhcmdldCkgdGhpcy5ub3RpZnlUb2tlbnNDaGFuZ2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyLnVwc2VydENhY2hlKHBheWxvYWQuaWQsIHJvdyk7XG5cbiAgICBpZiAocm93LnByb3ZpZGVyID09PSBcIm9wZW5haVwiKSB7XG4gICAgICBjb25zdCBjcmVkcyA9IHJvdy5jcmVkZW50aWFscyBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgICAgIGNvbnN0IG9wZW5haURpc3BhdGNoZXIgPSB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlcjtcbiAgICAgIGlmIChwYXlsb2FkLm9wID09PSBcIklOU0VSVFwiICYmIHJvdy5hY3RpdmUpIHtcbiAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgID8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgICAgcGF5bG9hZC5pZCxcbiAgICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICByb3cucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgICApXG4gICAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHRva2VuIGFkZCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIGlmIChvcGVuYWlEaXNwYXRjaGVyKSB7XG4gICAgICAgICAgYXdhaXQgb3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICAgICAgLm9uVG9rZW5VcGRhdGVkKFxuICAgICAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgICAgICByb3cubmFtZSxcbiAgICAgICAgICAgICAgY3JlZHMgYXMgT3BlbkFJQ3JlZGVudGlhbHMsXG4gICAgICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgICAgIHJvdy53ZWlnaHQsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAudGhlbigoKSA9PiBvcGVuYWlEaXNwYXRjaGVyLm9uVG9rZW5BY3RpdmF0ZWQocGF5bG9hZC5pZCkpXG4gICAgICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gdXBkYXRlIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9wZW5haURpc3BhdGNoZXI/Lm9uVG9rZW5EZWFjdGl2YXRlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJvdy5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIikge1xuICAgICAgLy8gYW50aHJvcGljIO2GoO2BsCDsnbTrsqTtirjripQg64+Z6riwKHZvaWQpLiB3b3JrZXIg6rCAIOyXhuqzoCDtkoAoTWFwKeunjCDqtIDrpqztlZjrr4DroZwg64uo7IicOlxuICAgICAgLy8gIElOU0VSVCDihpIg7LaU6rCALCBhY3RpdmUg66m0IOqwseyLoChvblRva2VuVXBkYXRlZCDqsIAgaWRlbnRpdHkg67OA6rK964+EIOyymOumrCksIGluYWN0aXZlIOuptCDtkoDsl5DshJwg7KCc6rGwLlxuICAgICAgLy8gICjrs4Trj4QgYWN0aXZhdGUvZGVhY3RpdmF0ZSDsvZzrsLHsnbQg7JeG7Ja0IGFjdGl2ZSDthqDquIDsnYQgYWRkL3JlbW92ZSDroZwg66ek7ZWRLilcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzO1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIgJiYgcm93LmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlbkFkZGVkKFxuICAgICAgICAgIHBheWxvYWQuaWQsXG4gICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgY3JlZHMsXG4gICAgICAgICAgcm93LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgICByb3cud2VpZ2h0LFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChyb3cuYWN0aXZlKSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuVXBkYXRlZChcbiAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgIGNyZWRzLFxuICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIGluYWN0aXZlIOuptCBJTlNFUlQg65OgIFVQREFURSDrk6Ag7ZKA7JeQIOuEo+yngCDslYrripTri6QuXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgbG9nZ2VyLmluZm8oYE5PVElGWSAke3BheWxvYWQub3B9IGlkPSR7cGF5bG9hZC5pZH0gKCR7cm93Lm5hbWV9KSBhY3RpdmU9JHtyb3cuYWN0aXZlfWApO1xuICAgIGNvbnN0IGlzS2VlcGFsaXZlVGFyZ2V0ID0gcm93LmFjdGl2ZSAmJiByb3cucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCI7XG4gICAgaWYgKHdhc0tlZXBhbGl2ZVRhcmdldCAhPT0gaXNLZWVwYWxpdmVUYXJnZXQpIHRoaXMubm90aWZ5VG9rZW5zQ2hhbmdlZCgpO1xuICB9XG5cbiAgYXN5bmMgcmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIHJldHVybiB0aGlzLmVucXVldWVPcGVyYXRpb24oKCkgPT4gdGhpcy5yZWNvbmNpbGVOb3coKSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlY29uY2lsZU5vdygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwcmV2aW91c0FudGhyb3BpY0lkcyA9IHRoaXMudG9rZW5DaGFuZ2VIYW5kbGVyXG4gICAgICA/IG5ldyBTZXQoXG4gICAgICAgICAgWy4uLnRoaXMuZGlzcGF0Y2hlci50b2tlbnMudmFsdWVzKCldXG4gICAgICAgICAgICAuZmlsdGVyKChyb3cpID0+IHJvdy5hY3RpdmUgJiYgcm93LnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKVxuICAgICAgICAgICAgLm1hcCgocm93KSA9PiByb3cuaWQpLFxuICAgICAgICApXG4gICAgICA6IG51bGw7XG4gICAgYXdhaXQgVG9rZW5Nb2RlbC5kZWFjdGl2YXRlRXhwaXJlZFRva2VucygpO1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCBUb2tlbk1vZGVsLmZpbmRBY3RpdmUoXCJBXCIpO1xuICAgIHRoaXMuZGlzcGF0Y2hlci5yZXBsYWNlQ2FjaGUocm93cyk7XG4gICAgLy8gTk9USUZZIOycoOyLpCDrjIDruYQ6IEFudGhyb3BpY0Rpc3BhdGNoZXIg7ZKA64+EIERCIGFjdGl2ZSBhbnRocm9waWMg7Yag7YGwIOq4sOykgOycvOuhnCDsnqzrj5nquLDtmZQuXG4gICAgLy8gKHJvd3Mg64qUIGFjdGl2ZSDrp4wg4oCUIGluYWN0aXZlL+yCreygnOuQnCDthqDtgbDsnYAg7Jes6riwIOyXhuycvOuvgOuhnCByZXBsYWNlVG9rZW5zIOqwgCDtkoDsl5DshJwg7KCc6rGw7ZWc64ukLilcbiAgICBjb25zdCBhbnRocm9waWNSb3dzID0gcm93c1xuICAgICAgLmZpbHRlcigocikgPT4gci5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIilcbiAgICAgIC5tYXAoKHIpID0+ICh7XG4gICAgICAgIGlkOiByLmlkLFxuICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzOiByLmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzLFxuICAgICAgICBxdW90YVRocmVzaG9sZDogci5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgIHdlaWdodDogci53ZWlnaHQsXG4gICAgICB9KSk7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/LnJlcGxhY2VUb2tlbnMoYW50aHJvcGljUm93cyk7XG4gICAgY29uc3Qgb3BlbmFpUm93cyA9IHJvd3NcbiAgICAgIC5maWx0ZXIoKHIpID0+IHIucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpXG4gICAgICAubWFwKChyKSA9PiAoe1xuICAgICAgICBpZDogci5pZCxcbiAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICBjcmVkZW50aWFsczogci5jcmVkZW50aWFscyBhcyBPcGVuQUlDcmVkZW50aWFscyxcbiAgICAgICAgcXVvdGFUaHJlc2hvbGQ6IHIucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICB3ZWlnaHQ6IHIud2VpZ2h0LFxuICAgICAgfSkpO1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICA/LnJlcGxhY2VUb2tlbnMob3BlbmFpUm93cylcbiAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSByZWNvbmNpbGUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICB0aGlzLmxhc3RSZWNvbmNpbGVBdCA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKFxuICAgICAgcHJldmlvdXNBbnRocm9waWNJZHMgJiZcbiAgICAgIChwcmV2aW91c0FudGhyb3BpY0lkcy5zaXplICE9PSBhbnRocm9waWNSb3dzLmxlbmd0aCB8fFxuICAgICAgICBhbnRocm9waWNSb3dzLnNvbWUoKHJvdykgPT4gIXByZXZpb3VzQW50aHJvcGljSWRzLmhhcyhyb3cuaWQpKSlcbiAgICApIHtcbiAgICAgIHRoaXMubm90aWZ5VG9rZW5zQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZW5xdWV1ZU9wZXJhdGlvbihvcGVyYXRpb246ICgpID0+IFByb21pc2U8dm9pZD4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBuZXh0ID0gdGhpcy5vcGVyYXRpb25DaGFpbi50aGVuKG9wZXJhdGlvbiwgb3BlcmF0aW9uKTtcbiAgICB0aGlzLm9wZXJhdGlvbkNoYWluID0gbmV4dC5jYXRjaCgoKSA9PiB7fSk7XG4gICAgcmV0dXJuIG5leHQ7XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsWUFBWSxDQUFDO0FB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
211
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4tc3Vic2NyaWJlci5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4tc3Vic2NyaWJlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogdG9rZW5zX2NoYW5nZWQgTElTVEVOIHN1YnNjcmliZXIuICovXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgQ2xpZW50LCB0eXBlIENsaWVudENvbmZpZyB9IGZyb20gXCJwZ1wiO1xuXG5pbXBvcnQgeyBUb2tlbk1vZGVsIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLm1vZGVsXCI7XG5pbXBvcnQgeyB0eXBlIEFudGhyb3BpY0NyZWRlbnRpYWxzLCB0eXBlIE9wZW5BSUNyZWRlbnRpYWxzIH0gZnJvbSBcIi4uL3Rva2VuL3Rva2VuLnR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkRGlzcGF0Y2hlckNsYXNzIH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgdHlwZSBTdWJzY3JpYmVyU3RhdHVzIH0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwic3Vic2NyaWJlclwiXSk7XG5cbmNvbnN0IFRPS0VOU19DSEFOR0VEID0gXCJ0b2tlbnNfY2hhbmdlZFwiO1xuY29uc3QgUkVDT05DSUxFX0lOVEVSVkFMX01TID0gMTAgKiA2MCAqIDEwMDA7XG5jb25zdCBDT05ORUNUSU9OX1RJTUVPVVRfTVMgPSA1XzAwMDtcbmNvbnN0IEJBQ0tPRkZfQkFTRV9NUyA9IDUwMDtcbmNvbnN0IEJBQ0tPRkZfQ0FQX01TID0gMzBfMDAwO1xuXG50eXBlIFBheWxvYWQgPSB7IG9wOiBcIklOU0VSVFwiIHwgXCJVUERBVEVcIiB8IFwiREVMRVRFXCI7IGlkOiBudW1iZXIgfTtcblxuZXhwb3J0IGNsYXNzIFRva2VuU3Vic2NyaWJlciB7XG4gIGNsaWVudDogQ2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHJlY29uY2lsZVRpbWVyOiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsO1xuICByZWNvbm5lY3RUaW1lcjogTm9kZUpTLlRpbWVvdXQgfCBudWxsID0gbnVsbDtcbiAgc2h1dGRvd25SZXF1ZXN0ZWQgPSBmYWxzZTtcbiAgYXR0ZW1wdCA9IDA7XG4gIGNvbm5lY3RlZEF0OiBEYXRlIHwgbnVsbCA9IG51bGw7XG4gIGxhc3RSZWNvbmNpbGVBdDogRGF0ZSB8IG51bGwgPSBudWxsO1xuICBvcGVyYXRpb25DaGFpbjogUHJvbWlzZTx2b2lkPiA9IFByb21pc2UucmVzb2x2ZSgpO1xuICB0b2tlbkNoYW5nZUhhbmRsZXI6ICgoKSA9PiB2b2lkKSB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBjb25uQ29uZmlnOiBDbGllbnRDb25maWcsXG4gICAgcHVibGljIGRpc3BhdGNoZXI6IFFncmlkRGlzcGF0Y2hlckNsYXNzLFxuICApIHt9XG5cbiAgbm90aWZ5VG9rZW5zQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICB0cnkge1xuICAgICAgdGhpcy50b2tlbkNoYW5nZUhhbmRsZXI/LigpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBsb2dnZXIud2FybihgdG9rZW4gY2hhbmdlIGhhbmRsZXIgZmFpbGVkOiAkeyhlcnJvciBhcyBFcnJvcikubWVzc2FnZX1gKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBzdGFydCgpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gZmFsc2U7XG4gICAgdGhpcy5lbnN1cmVSZWNvbmNpbGVUaW1lcigpO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgc3RhcnQgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfSwgc2NoZWR1bGluZyByZXRyeWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0aGlzLnNodXRkb3duUmVxdWVzdGVkID0gdHJ1ZTtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikge1xuICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnJlY29uY2lsZVRpbWVyKTtcbiAgICAgIHRoaXMucmVjb25jaWxlVGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikge1xuICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVjb25uZWN0VGltZXIpO1xuICAgICAgdGhpcy5yZWNvbm5lY3RUaW1lciA9IG51bGw7XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuY2xvc2VDbGllbnQoKTtcbiAgfVxuXG4gIHN0YXR1cygpOiBTdWJzY3JpYmVyU3RhdHVzIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29ubmVjdGVkOiB0aGlzLmNsaWVudCAhPT0gbnVsbCAmJiB0aGlzLnJlY29ubmVjdFRpbWVyID09PSBudWxsLFxuICAgICAgY29ubmVjdGVkQXQ6IHRoaXMuY29ubmVjdGVkQXQsXG4gICAgICBsYXN0UmVjb25jaWxlQXQ6IHRoaXMubGFzdFJlY29uY2lsZUF0LFxuICAgICAgYXR0ZW1wdDogdGhpcy5hdHRlbXB0LFxuICAgIH07XG4gIH1cblxuICBlbnN1cmVSZWNvbmNpbGVUaW1lcigpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5yZWNvbmNpbGVUaW1lcikgcmV0dXJuO1xuXG4gICAgLy8gTElTVEVOL05PVElGWSDripQg64GK6ri0IOuPmeyViCDsnKDsi6TrkKAg7IiYIOyeiOyWtCDso7zquLDsoIHsnLzroZwgREIg6riw7KSA7Jy866GcIOunnuy2mOuLpC5cbiAgICB0aGlzLnJlY29uY2lsZVRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgICAgdGhpcy5yZWNvbmNpbGUoKS5jYXRjaCgoZSkgPT5cbiAgICAgICAgbG9nZ2VyLndhcm4oYHBlcmlvZGljIHJlY29uY2lsZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCksXG4gICAgICApO1xuICAgIH0sIFJFQ09OQ0lMRV9JTlRFUlZBTF9NUyk7XG4gIH1cblxuICBhc3luYyBjb25uZWN0QW5kUmVjb25jaWxlKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuY29ubmVjdEFuZExpc3RlbigpO1xuICAgIGF3YWl0IHRoaXMucmVjb25jaWxlKCk7XG4gICAgdGhpcy5hdHRlbXB0ID0gMDtcbiAgfVxuXG4gIGFzeW5jIGNvbm5lY3RBbmRMaXN0ZW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gbmV3IENsaWVudCh7XG4gICAgICAuLi50aGlzLmNvbm5Db25maWcsXG4gICAgICBjb25uZWN0aW9uVGltZW91dE1pbGxpczogQ09OTkVDVElPTl9USU1FT1VUX01TLFxuICAgICAga2VlcEFsaXZlOiB0cnVlLFxuICAgICAga2VlcEFsaXZlSW5pdGlhbERlbGF5TWlsbGlzOiAxMF8wMDAsXG4gICAgICBhcHBsaWNhdGlvbl9uYW1lOiBcInFncmlkLWxpc3RlbmVyXCIsXG4gICAgfSk7XG5cbiAgICBjbGllbnQub24oXCJlcnJvclwiLCAoZSkgPT4ge1xuICAgICAgbG9nZ2VyLndhcm4oYHN1YnNjcmliZXIgZXJyb3I6ICR7ZS5tZXNzYWdlfWApO1xuICAgICAgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwiZW5kXCIsICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5zaHV0ZG93blJlcXVlc3RlZCkgdGhpcy5yZXRyeUxhdGVyKCk7XG4gICAgfSk7XG4gICAgY2xpZW50Lm9uKFwibm90aWZpY2F0aW9uXCIsIChtc2cpID0+IHtcbiAgICAgIGlmIChtc2cuY2hhbm5lbCAhPT0gVE9LRU5TX0NIQU5HRUQgfHwgIW1zZy5wYXlsb2FkKSByZXR1cm47XG4gICAgICB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbihtc2cucGF5bG9hZCkuY2F0Y2goKGUpID0+XG4gICAgICAgIGxvZ2dlci53YXJuKGBoYW5kbGUgTk9USUZZIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSxcbiAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0cnkge1xuICAgICAgYXdhaXQgY2xpZW50LmNvbm5lY3QoKTtcbiAgICAgIGF3YWl0IGNsaWVudC5xdWVyeShcIlNFVCBzdGF0ZW1lbnRfdGltZW91dCA9IDBcIik7XG4gICAgICBhd2FpdCBjbGllbnQucXVlcnkoXCJTRVQgaWRsZV9pbl90cmFuc2FjdGlvbl9zZXNzaW9uX3RpbWVvdXQgPSAwXCIpO1xuICAgICAgYXdhaXQgY2xpZW50LnF1ZXJ5KGBMSVNURU4gJHtjbGllbnQuZXNjYXBlSWRlbnRpZmllcihUT0tFTlNfQ0hBTkdFRCl9YCk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgY2xpZW50LnJlbW92ZUFsbExpc3RlbmVycygpO1xuICAgICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy5jb25uZWN0ZWRBdCA9IG5ldyBEYXRlKCk7XG4gICAgbG9nZ2VyLmluZm8oYHN1YnNjcmliZWQgdG8gJHtUT0tFTlNfQ0hBTkdFRH1gKTtcbiAgfVxuXG4gIHJldHJ5TGF0ZXIoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuc2h1dGRvd25SZXF1ZXN0ZWQpIHJldHVybjtcbiAgICBpZiAodGhpcy5yZWNvbm5lY3RUaW1lcikgcmV0dXJuO1xuXG4gICAgdm9pZCB0aGlzLmNsb3NlQ2xpZW50KCk7XG4gICAgdGhpcy5hdHRlbXB0ICs9IDE7XG4gICAgY29uc3QgY2FwID0gTWF0aC5taW4oQkFDS09GRl9CQVNFX01TICogMiAqKiB0aGlzLmF0dGVtcHQsIEJBQ0tPRkZfQ0FQX01TKTtcbiAgICBjb25zdCBkZWxheSA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNhcCk7XG4gICAgbG9nZ2VyLmluZm8oYHJlY29ubmVjdGluZyBpbiAke2RlbGF5fW1zIChhdHRlbXB0ICR7dGhpcy5hdHRlbXB0fSlgKTtcbiAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICB0aGlzLnJlY29ubmVjdFRpbWVyID0gbnVsbDtcbiAgICAgIHRoaXMuY29ubmVjdEFuZFJlY29uY2lsZSgpLmNhdGNoKChlKSA9PiB7XG4gICAgICAgIGxvZ2dlci53YXJuKGBzdWJzY3JpYmVyIHJlY29ubmVjdCBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgICAgIHRoaXMucmV0cnlMYXRlcigpO1xuICAgICAgfSk7XG4gICAgfSwgZGVsYXkpO1xuICB9XG5cbiAgYXN5bmMgY2xvc2VDbGllbnQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpcy5jbGllbnQ7XG4gICAgaWYgKCFjbGllbnQpIHJldHVybjtcblxuICAgIHRoaXMuY2xpZW50ID0gbnVsbDtcbiAgICBjbGllbnQucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgYXdhaXQgY2xpZW50LmVuZCgpLmNhdGNoKCgpID0+IHt9KTtcbiAgfVxuXG4gIGFzeW5jIGhhbmRsZU5vdGlmaWNhdGlvbihwYXlsb2FkSnNvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgcmV0dXJuIHRoaXMuZW5xdWV1ZU9wZXJhdGlvbigoKSA9PiB0aGlzLmhhbmRsZU5vdGlmaWNhdGlvbk5vdyhwYXlsb2FkSnNvbikpO1xuICB9XG5cbiAgYXN5bmMgaGFuZGxlTm90aWZpY2F0aW9uTm93KHBheWxvYWRKc29uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBwYXlsb2FkID0gSlNPTi5wYXJzZShwYXlsb2FkSnNvbikgYXMgUGF5bG9hZDtcbiAgICBjb25zdCBwcmV2aW91c1JvdyA9IHRoaXMudG9rZW5DaGFuZ2VIYW5kbGVyXG4gICAgICA/IHRoaXMuZGlzcGF0Y2hlci50b2tlbnMuZ2V0KHBheWxvYWQuaWQpXG4gICAgICA6IHVuZGVmaW5lZDtcbiAgICBjb25zdCB3YXNLZWVwYWxpdmVUYXJnZXQgPSBwcmV2aW91c1Jvdz8uYWN0aXZlID09PSB0cnVlICYmIHByZXZpb3VzUm93LnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiO1xuICAgIGlmIChwYXlsb2FkLm9wID09PSBcIkRFTEVURVwiKSB7XG4gICAgICB0aGlzLmRpc3BhdGNoZXIudG9rZW5zLmRlbGV0ZShwYXlsb2FkLmlkKTtcbiAgICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgID8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZClcbiAgICAgICAgLmNhdGNoKChlKSA9PiBsb2dnZXIud2Fybihgb3BlbmFpIHRva2VuIHJlbW92ZSBmYWlsZWQ6ICR7KGUgYXMgRXJyb3IpLm1lc3NhZ2V9YCkpO1xuICAgICAgLy8g7IKt7KCc65CcIO2GoO2BsOydmCBwcm92aWRlcuulvCDrqqjrpbwg7IiYIOyeiOycvOuvgOuhnCDslpHsqr0g7ZKA7JeQ7IScIOygnOqxsO2VnOuLpC5cbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9IOKGkiByZW1vdmVkIGZyb20gY2FjaGVgKTtcbiAgICAgIGlmIChwcmV2aW91c1JvdyA9PT0gdW5kZWZpbmVkIHx8IHdhc0tlZXBhbGl2ZVRhcmdldCkgdGhpcy5ub3RpZnlUb2tlbnNDaGFuZ2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZE9uZShcIkFcIiwgeyBpZDogcGF5bG9hZC5pZCB9KTtcbiAgICBpZiAoIXJvdykge1xuICAgICAgdGhpcy5kaXNwYXRjaGVyLnRva2Vucy5kZWxldGUocGF5bG9hZC5pZCk7XG4gICAgICBhd2FpdCB0aGlzLmRpc3BhdGNoZXIub3BlbmFpRGlzcGF0Y2hlclxuICAgICAgICA/Lm9uVG9rZW5SZW1vdmVkKHBheWxvYWQuaWQpXG4gICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB0b2tlbiByZW1vdmUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgIHRoaXMuZGlzcGF0Y2hlci5hbnRocm9waWNEaXNwYXRjaGVyPy5vblRva2VuUmVtb3ZlZChwYXlsb2FkLmlkKTtcbiAgICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9IOKGkiBtaXNzaW5nLCByZW1vdmVkIGZyb20gY2FjaGVgKTtcbiAgICAgIGlmIChwcmV2aW91c1JvdyA9PT0gdW5kZWZpbmVkIHx8IHdhc0tlZXBhbGl2ZVRhcmdldCkgdGhpcy5ub3RpZnlUb2tlbnNDaGFuZ2VkKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyLnRva2Vucy5zZXQocGF5bG9hZC5pZCwgcm93KTtcblxuICAgIGlmIChyb3cucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpIHtcbiAgICAgIGNvbnN0IGNyZWRzID0gcm93LmNyZWRlbnRpYWxzIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICAgICAgY29uc3Qgb3BlbmFpRGlzcGF0Y2hlciA9IHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyO1xuICAgICAgaWYgKHBheWxvYWQub3AgPT09IFwiSU5TRVJUXCIgJiYgcm93LmFjdGl2ZSkge1xuICAgICAgICBhd2FpdCBvcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgICAgPy5vblRva2VuQWRkZWQoXG4gICAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgICAgcm93Lm5hbWUsXG4gICAgICAgICAgICBjcmVkcyBhcyBPcGVuQUlDcmVkZW50aWFscyxcbiAgICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgICByb3cud2VpZ2h0LFxuICAgICAgICAgIClcbiAgICAgICAgICAuY2F0Y2goKGUpID0+IGxvZ2dlci53YXJuKGBvcGVuYWkgdG9rZW4gYWRkIGZhaWxlZDogJHsoZSBhcyBFcnJvcikubWVzc2FnZX1gKSk7XG4gICAgICB9IGVsc2UgaWYgKHJvdy5hY3RpdmUpIHtcbiAgICAgICAgaWYgKG9wZW5haURpc3BhdGNoZXIpIHtcbiAgICAgICAgICBhd2FpdCBvcGVuYWlEaXNwYXRjaGVyXG4gICAgICAgICAgICAub25Ub2tlblVwZGF0ZWQoXG4gICAgICAgICAgICAgIHBheWxvYWQuaWQsXG4gICAgICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgICAgICBjcmVkcyBhcyBPcGVuQUlDcmVkZW50aWFscyxcbiAgICAgICAgICAgICAgcm93LnF1b3RhX3RocmVzaG9sZCxcbiAgICAgICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC50aGVuKCgpID0+IG9wZW5haURpc3BhdGNoZXIub25Ub2tlbkFjdGl2YXRlZChwYXlsb2FkLmlkKSlcbiAgICAgICAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSB0b2tlbiB1cGRhdGUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3BlbmFpRGlzcGF0Y2hlcj8ub25Ub2tlbkRlYWN0aXZhdGVkKHBheWxvYWQuaWQpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAocm93LnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiKSB7XG4gICAgICBjb25zdCBjcmVkcyA9IHJvdy5jcmVkZW50aWFscyBhcyBBbnRocm9waWNDcmVkZW50aWFscztcbiAgICAgIGlmIChwYXlsb2FkLm9wID09PSBcIklOU0VSVFwiICYmIHJvdy5hY3RpdmUpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/Lm9uVG9rZW5BZGRlZChcbiAgICAgICAgICBwYXlsb2FkLmlkLFxuICAgICAgICAgIHJvdy5uYW1lLFxuICAgICAgICAgIGNyZWRzLFxuICAgICAgICAgIHJvdy5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgICAgcm93LndlaWdodCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSBpZiAocm93LmFjdGl2ZSkge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlblVwZGF0ZWQoXG4gICAgICAgICAgcGF5bG9hZC5pZCxcbiAgICAgICAgICByb3cubmFtZSxcbiAgICAgICAgICBjcmVkcyxcbiAgICAgICAgICByb3cucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICAgIHJvdy53ZWlnaHQsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmRpc3BhdGNoZXIuYW50aHJvcGljRGlzcGF0Y2hlcj8ub25Ub2tlblJlbW92ZWQocGF5bG9hZC5pZCk7XG4gICAgICB9XG4gICAgfVxuICAgIGxvZ2dlci5pbmZvKGBOT1RJRlkgJHtwYXlsb2FkLm9wfSBpZD0ke3BheWxvYWQuaWR9ICgke3Jvdy5uYW1lfSkgYWN0aXZlPSR7cm93LmFjdGl2ZX1gKTtcbiAgICBjb25zdCBpc0tlZXBhbGl2ZVRhcmdldCA9IHJvdy5hY3RpdmUgJiYgcm93LnByb3ZpZGVyID09PSBcImFudGhyb3BpY1wiO1xuICAgIGlmICh3YXNLZWVwYWxpdmVUYXJnZXQgIT09IGlzS2VlcGFsaXZlVGFyZ2V0KSB0aGlzLm5vdGlmeVRva2Vuc0NoYW5nZWQoKTtcbiAgfVxuXG4gIGFzeW5jIHJlY29uY2lsZSgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICByZXR1cm4gdGhpcy5lbnF1ZXVlT3BlcmF0aW9uKCgpID0+IHRoaXMucmVjb25jaWxlTm93KCkpO1xuICB9XG5cbiAgYXN5bmMgcmVjb25jaWxlTm93KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHByZXZpb3VzQW50aHJvcGljSWRzID0gdGhpcy50b2tlbkNoYW5nZUhhbmRsZXJcbiAgICAgID8gbmV3IFNldChcbiAgICAgICAgICBbLi4udGhpcy5kaXNwYXRjaGVyLnRva2Vucy52YWx1ZXMoKV1cbiAgICAgICAgICAgIC5maWx0ZXIoKHJvdykgPT4gcm93LmFjdGl2ZSAmJiByb3cucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIpXG4gICAgICAgICAgICAubWFwKChyb3cpID0+IHJvdy5pZCksXG4gICAgICAgIClcbiAgICAgIDogbnVsbDtcbiAgICBhd2FpdCBUb2tlbk1vZGVsLmRlYWN0aXZhdGVFeHBpcmVkVG9rZW5zKCk7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IFRva2VuTW9kZWwuZmluZEFjdGl2ZShcIkFcIik7XG4gICAgdGhpcy5kaXNwYXRjaGVyLnJlcGxhY2VDYWNoZShyb3dzKTtcbiAgICBjb25zdCBhbnRocm9waWNSb3dzID0gcm93c1xuICAgICAgLmZpbHRlcigocikgPT4gci5wcm92aWRlciA9PT0gXCJhbnRocm9waWNcIilcbiAgICAgIC5tYXAoKHIpID0+ICh7XG4gICAgICAgIGlkOiByLmlkLFxuICAgICAgICBuYW1lOiByLm5hbWUsXG4gICAgICAgIGNyZWRlbnRpYWxzOiByLmNyZWRlbnRpYWxzIGFzIEFudGhyb3BpY0NyZWRlbnRpYWxzLFxuICAgICAgICBxdW90YVRocmVzaG9sZDogci5xdW90YV90aHJlc2hvbGQsXG4gICAgICAgIHdlaWdodDogci53ZWlnaHQsXG4gICAgICB9KSk7XG4gICAgdGhpcy5kaXNwYXRjaGVyLmFudGhyb3BpY0Rpc3BhdGNoZXI/LnJlcGxhY2VUb2tlbnMoYW50aHJvcGljUm93cyk7XG4gICAgY29uc3Qgb3BlbmFpUm93cyA9IHJvd3NcbiAgICAgIC5maWx0ZXIoKHIpID0+IHIucHJvdmlkZXIgPT09IFwib3BlbmFpXCIpXG4gICAgICAubWFwKChyKSA9PiAoe1xuICAgICAgICBpZDogci5pZCxcbiAgICAgICAgbmFtZTogci5uYW1lLFxuICAgICAgICBjcmVkZW50aWFsczogci5jcmVkZW50aWFscyBhcyBPcGVuQUlDcmVkZW50aWFscyxcbiAgICAgICAgcXVvdGFUaHJlc2hvbGQ6IHIucXVvdGFfdGhyZXNob2xkLFxuICAgICAgICB3ZWlnaHQ6IHIud2VpZ2h0LFxuICAgICAgfSkpO1xuICAgIGF3YWl0IHRoaXMuZGlzcGF0Y2hlci5vcGVuYWlEaXNwYXRjaGVyXG4gICAgICA/LnJlcGxhY2VUb2tlbnMob3BlbmFpUm93cylcbiAgICAgIC5jYXRjaCgoZSkgPT4gbG9nZ2VyLndhcm4oYG9wZW5haSByZWNvbmNpbGUgZmFpbGVkOiAkeyhlIGFzIEVycm9yKS5tZXNzYWdlfWApKTtcbiAgICB0aGlzLmxhc3RSZWNvbmNpbGVBdCA9IG5ldyBEYXRlKCk7XG4gICAgaWYgKFxuICAgICAgcHJldmlvdXNBbnRocm9waWNJZHMgJiZcbiAgICAgIChwcmV2aW91c0FudGhyb3BpY0lkcy5zaXplICE9PSBhbnRocm9waWNSb3dzLmxlbmd0aCB8fFxuICAgICAgICBhbnRocm9waWNSb3dzLnNvbWUoKHJvdykgPT4gIXByZXZpb3VzQW50aHJvcGljSWRzLmhhcyhyb3cuaWQpKSlcbiAgICApIHtcbiAgICAgIHRoaXMubm90aWZ5VG9rZW5zQ2hhbmdlZCgpO1xuICAgIH1cbiAgfVxuXG4gIGVucXVldWVPcGVyYXRpb24ob3BlcmF0aW9uOiAoKSA9PiBQcm9taXNlPHZvaWQ+KTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgbmV4dCA9IHRoaXMub3BlcmF0aW9uQ2hhaW4udGhlbihvcGVyYXRpb24sIG9wZXJhdGlvbik7XG4gICAgdGhpcy5vcGVyYXRpb25DaGFpbiA9IG5leHQuY2F0Y2goKCkgPT4ge30pO1xuICAg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
@@ -8,7 +8,7 @@ const logger = getLogger(["qgrid", "token-window-keepalive"]);
8
8
  const FIVE_HOURS_MS = 300 * 60 * 1e3;
9
9
  const RESET_GRACE_MS = 1e3;
10
10
  const POST_KEEPALIVE_USAGE_DELAY_MS = 61e3;
11
- const KEEPALIVE_MODEL = "anthropic/claude-haiku-4-5";
11
+ const KEEPALIVE_MODEL = "anthropic/claude-haiku-5-5";
12
12
  const KEEPALIVE_PROJECT_NAME = "qgrid-token-window-keepalive";
13
13
  const KEEPALIVE_SETTING_KEY = "qgrid.tokenWindowKeepaliveEnabled";
14
14
  const KEEPALIVE_ENV_KEY = TOKEN_WINDOW_KEEPALIVE_RUNNER_ENV_KEY;
@@ -104,6 +104,7 @@ async function inspectToken(token, deps, expectedGeneration, allowFire) {
104
104
  await deps.dispatch({
105
105
  prompt: "Reply OK.",
106
106
  model: KEEPALIVE_MODEL,
107
+ thinking: false,
107
108
  effort: "low",
108
109
  projectName: KEEPALIVE_PROJECT_NAME,
109
110
  preferredTokenId: token.id
@@ -156,4 +157,4 @@ function stopTokenWindowKeepalive() {
156
157
  //#endregion
157
158
  export { KEEPALIVE_ENV_KEY, KEEPALIVE_MODEL, KEEPALIVE_PROJECT_NAME, KEEPALIVE_SETTING_KEY, POST_KEEPALIVE_USAGE_DELAY_MS, rescheduleTokenWindowKeepalive, startTokenWindowKeepalive, stopTokenWindowKeepalive };
158
159
 
159
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4td2luZG93LWtlZXBhbGl2ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4td2luZG93LWtlZXBhbGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBUT0tFTl9XSU5ET1dfS0VFUEFMSVZFX1JVTk5FUl9FTlZfS0VZIH0gZnJvbSBcIi4uL3NldHRpbmcvc2V0dGluZy5jb25zdGFudFwiO1xuaW1wb3J0IHsgZ2V0U2V0dGluZyB9IGZyb20gXCIuLi9zZXR0aW5nL3NldHRpbmcuc3RvcmVcIjtcbmltcG9ydCB7IFRva2VuTW9kZWwgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxRdWVyeUlucHV0IH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgUWdyaWRGcmFtZSB9IGZyb20gXCIuL3FncmlkLmZyYW1lXCI7XG5pbXBvcnQgeyB0eXBlIFVzYWdlUmVzcG9uc2UgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJ0b2tlbi13aW5kb3cta2VlcGFsaXZlXCJdKTtcblxuY29uc3QgRklWRV9IT1VSU19NUyA9IDUgKiA2MCAqIDYwICogMV8wMDA7XG5jb25zdCBSRVNFVF9HUkFDRV9NUyA9IDFfMDAwO1xuXG4vLyB1c2FnZSBBUEkg7ISx6rO1IOydkeuLteydgCAx67aEIOy6kOyLnOuQnOuLpC4ga2VlcGFsaXZlIOynge2bhCDsponsi5wg7J6s7KGw7ZqM7ZWY66m0IOydtOyghCDsnIjrj4TsmrDrpbxcbi8vIOuLpOyLnCDrs7Trr4DroZwg7LqQ7Iuc6rCAIOyngOuCnCDrkqQg7ZWcIOuyiCDtmZXsnbjtlZjqs6AsIOq3uOuVjOuPhCDsg4gg7JyI64+E7Jqw6rCAIOyXhuycvOuptCDri6TsnYwgNWjquYzsp4Ag6riw64uk66aw64ukLlxuZXhwb3J0IGNvbnN0IFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TID0gNjFfMDAwO1xuZXhwb3J0IGNvbnN0IEtFRVBBTElWRV9NT0RFTCA9IFwiYW50aHJvcGljL2NsYXVkZS1oYWlrdS00LTVcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfUFJPSkVDVF9OQU1FID0gXCJxZ3JpZC10b2tlbi13aW5kb3cta2VlcGFsaXZlXCI7XG5leHBvcnQgY29uc3QgS0VFUEFMSVZFX1NFVFRJTkdfS0VZID0gXCJxZ3JpZC50b2tlbldpbmRvd0tlZXBhbGl2ZUVuYWJsZWRcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfRU5WX0tFWSA9IFRPS0VOX1dJTkRPV19LRUVQQUxJVkVfUlVOTkVSX0VOVl9LRVk7XG5cbnR5cGUgS2VlcGFsaXZlVG9rZW4gPSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgYWN0aXZlOiBib29sZWFuO1xuICBrZWVwYWxpdmVfZW5hYmxlZDogYm9vbGVhbjtcbn07XG5cbnR5cGUgVGltZXJIYW5kbGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuZXhwb3J0IHR5cGUgVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0ge1xuICBmaW5kVG9rZW5zOiAoKSA9PiBQcm9taXNlPEtlZXBhbGl2ZVRva2VuW10+O1xuICByZWFkVXNhZ2U6ICh0b2tlbklkOiBudW1iZXIpID0+IFByb21pc2U8VXNhZ2VSZXNwb25zZT47XG4gIGRpc3BhdGNoOiAoaW5wdXQ6IEludGVybmFsUXVlcnlJbnB1dCkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgcmVhZFNldHRpbmc6IHR5cGVvZiBnZXRTZXR0aW5nO1xuICBpc1J1bm5lckVuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG4gIG5vdzogKCkgPT4gbnVtYmVyO1xuICBzZXRUaW1lcjogKGNhbGxiYWNrOiAoKSA9PiB2b2lkLCBkZWxheU1zOiBudW1iZXIpID0+IFRpbWVySGFuZGxlO1xuICBjbGVhclRpbWVyOiAoaGFuZGxlOiBUaW1lckhhbmRsZSkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGRlZmF1bHREZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMgPSB7XG4gIGZpbmRUb2tlbnM6ICgpID0+IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpLFxuICByZWFkVXNhZ2U6ICh0b2tlbklkKSA9PiBRZ3JpZEZyYW1lLnVzYWdlKHRva2VuSWQpLFxuICBkaXNwYXRjaDogKGlucHV0KSA9PiBRZ3JpZEZyYW1lLnF1ZXJ5KGlucHV0KSxcbiAgcmVhZFNldHRpbmc6IGdldFNldHRpbmcsXG4gIGlzUnVubmVyRW5hYmxlZDogKCkgPT4gcHJvY2Vzcy5lbnZbS0VFUEFMSVZFX0VOVl9LRVldID09PSBcInRydWVcIixcbiAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxuICBzZXRUaW1lcjogKGNhbGxiYWNrLCBkZWxheU1zKSA9PiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheU1zKSxcbiAgY2xlYXJUaW1lcjogKGhhbmRsZSkgPT4gY2xlYXJUaW1lb3V0KGhhbmRsZSksXG59O1xuXG5jb25zdCB0aW1lcnMgPSBuZXcgTWFwPG51bWJlciwgeyBoYW5kbGU6IFRpbWVySGFuZGxlOyBjbGVhcjogKGhhbmRsZTogVGltZXJIYW5kbGUpID0+IHZvaWQgfT4oKTtcbmNvbnN0IGZpcmVHdWFyZHMgPSBuZXcgTWFwPG51bWJlciwgeyB1bnRpbE1zOiBudW1iZXI7IGFsbG93RmlyZUF0RXhwaXJ5OiBib29sZWFuIH0+KCk7XG5sZXQgZ2VuZXJhdGlvbiA9IDA7XG5cbmZ1bmN0aW9uIGNsZWFyVG9rZW5UaW1lcih0b2tlbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgdGltZXIgPSB0aW1lcnMuZ2V0KHRva2VuSWQpO1xuICBpZiAoIXRpbWVyKSByZXR1cm47XG4gIHRpbWVyLmNsZWFyKHRpbWVyLmhhbmRsZSk7XG4gIHRpbWVycy5kZWxldGUodG9rZW5JZCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiB2b2lkIHtcbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICBjbGVhclRva2VuVGltZXIodG9rZW4uaWQpO1xuICBjb25zdCBoYW5kbGUgPSBkZXBzLnNldFRpbWVyKFxuICAgICgpID0+IHtcbiAgICAgIHRpbWVycy5kZWxldGUodG9rZW4uaWQpO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgdm9pZCBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgYWxsb3dGaXJlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYGtlZXBhbGl2ZSBjeWNsZSBmYWlsZWQgZm9yICR7dG9rZW4ubmFtZX06ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICBzY2hlZHVsZUZhbGxiYWNrKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBNYXRoLm1heCgwLCBkZWxheU1zKSxcbiAgKTtcbiAgdGltZXJzLnNldCh0b2tlbi5pZCwgeyBoYW5kbGUsIGNsZWFyOiBkZXBzLmNsZWFyVGltZXIgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmVyVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmVBdEV4cGlyeTogYm9vbGVhbixcbik6IHZvaWQge1xuICBjb25zdCB1bnRpbE1zID0gZGVwcy5ub3coKSArIGRlbGF5TXM7XG4gIGZpcmVHdWFyZHMuc2V0KHRva2VuLmlkLCB7IHVudGlsTXMsIGFsbG93RmlyZUF0RXhwaXJ5IH0pO1xuICBzY2hlZHVsZVRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIGRlbGF5TXMsIGFsbG93RmlyZUF0RXhwaXJ5KTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVGYWxsYmFjayhcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGRlZmVyVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgRklWRV9IT1VSU19NUywgdHJ1ZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3BlY3RUb2tlbihcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgbm93ID0gZGVwcy5ub3coKTtcbiAgY29uc3QgZ3VhcmQgPSBmaXJlR3VhcmRzLmdldCh0b2tlbi5pZCk7XG4gIGlmIChndWFyZCAmJiBndWFyZC51bnRpbE1zID4gbm93KSB7XG4gICAgc2NoZWR1bGVUb2tlbih0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uLCBndWFyZC51bnRpbE1zIC0gbm93LCBndWFyZC5hbGxvd0ZpcmVBdEV4cGlyeSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChndWFyZCkgZmlyZUd1YXJkcy5kZWxldGUodG9rZW4uaWQpO1xuXG4gIGxldCB1c2FnZTogVXNhZ2VSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICB1c2FnZSA9IGF3YWl0IGRlcHMucmVhZFVzYWdlKHRva2VuLmlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2FybihgdXNhZ2UgbG9va3VwIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuXG4gIGlmICh1c2FnZS5lcnJvcikge1xuICAgIGxvZ2dlci53YXJuKGB1c2FnZSBsb29rdXAgZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAke3VzYWdlLmVycm9yfWApO1xuICAgIHNjaGVkdWxlRmFsbGJhY2sodG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzZXRzQXQgPSB1c2FnZS5maXZlSG91cj8ucmVzZXRzQXQ7XG4gIGlmIChyZXNldHNBdCkge1xuICAgIGNvbnN0IHJlc2V0TXMgPSBEYXRlLnBhcnNlKHJlc2V0c0F0KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXNldE1zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYGludmFsaWQgZml2ZS1ob3VyIHJlc2V0IGZvciAke3Rva2VuLm5hbWV9OiAke3Jlc2V0c0F0fWApO1xuICAgICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zcGVjdGVkQXQgPSBkZXBzLm5vdygpO1xuICAgIGlmIChyZXNldE1zID4gaW5zcGVjdGVkQXQpIHtcbiAgICAgIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuLmlkKTtcbiAgICAgIHNjaGVkdWxlVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgcmVzZXRNcyAtIGluc3BlY3RlZEF0ICsgUkVTRVRfR1JBQ0VfTVMsIHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIOuwnOyCrCDsp4Htm4Qg7ZmV7J247JeQ7ISc64qUIOy6kOyLnOuQnCBudWxsL+qzvOqxsCByZXNldOydhCDrtJDrj4Qg64uk7IucIOuwnOyCrO2VmOyngCDslYrripTri6QuXG4gIGlmICghYWxsb3dGaXJlKSB7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWZlclRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TLCBmYWxzZSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZGVwcy5kaXNwYXRjaCh7XG4gICAgICBwcm9tcHQ6IFwiUmVwbHkgT0suXCIsXG4gICAgICBtb2RlbDogS0VFUEFMSVZFX01PREVMLFxuICAgICAgZWZmb3J0OiBcImxvd1wiLFxuICAgICAgcHJvamVjdE5hbWU6IEtFRVBBTElWRV9QUk9KRUNUX05BTUUsXG4gICAgICBwcmVmZXJyZWRUb2tlbklkOiB0b2tlbi5pZCxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhga2VlcGFsaXZlIHNlbnQgZm9yICR7dG9rZW4ubmFtZX1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2Fybihga2VlcGFsaXZlIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb3N0RmlyZUd1YXJkID0gZmlyZUd1YXJkcy5nZXQodG9rZW4uaWQpO1xuICBpZiAocG9zdEZpcmVHdWFyZCkge1xuICAgIHNjaGVkdWxlVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIGRlcHMsXG4gICAgICBleHBlY3RlZEdlbmVyYXRpb24sXG4gICAgICBNYXRoLm1heCgwLCBwb3N0RmlyZUd1YXJkLnVudGlsTXMgLSBkZXBzLm5vdygpKSxcbiAgICAgIHBvc3RGaXJlR3VhcmQuYWxsb3dGaXJlQXRFeHBpcnksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhclNjaGVkdWxlZFRpbWVycygpOiB2b2lkIHtcbiAgZ2VuZXJhdGlvbisrO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgdGltZXJzLmtleXMoKSkgY2xlYXJUb2tlblRpbWVyKHRva2VuSWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY2xlYXJTY2hlZHVsZWRUaW1lcnMoKTtcbiAgaWYgKCFkZXBzLmlzUnVubmVyRW5hYmxlZCgpKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJ0b2tlbiB3aW5kb3cga2VlcGFsaXZlIHJ1bm5lciBkaXNhYmxlZCBmb3IgdGhpcyBpbnN0YW5jZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRlcHMucmVhZFNldHRpbmcoS0VFUEFMSVZFX1NFVFRJTkdfS0VZKSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJ0b2tlbiB3aW5kb3cga2VlcGFsaXZlIGRpc2FibGVkXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleHBlY3RlZEdlbmVyYXRpb24gPSBnZW5lcmF0aW9uO1xuXG4gIGxldCB0b2tlbnM6IEtlZXBhbGl2ZVRva2VuW107XG4gIHRyeSB7XG4gICAgdG9rZW5zID0gYXdhaXQgZGVwcy5maW5kVG9rZW5zKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLndhcm4oYHRva2VuIGRpc2NvdmVyeSBmYWlsZWQ6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZ2VuZXJhdGlvbiAhPT0gZXhwZWN0ZWRHZW5lcmF0aW9uKSByZXR1cm47XG5cbiAgY29uc3QgdGFyZ2V0cyA9IHRva2Vucy5maWx0ZXIoXG4gICAgKHRva2VuKSA9PiB0b2tlbi5hY3RpdmUgJiYgdG9rZW4ucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIgJiYgdG9rZW4ua2VlcGFsaXZlX2VuYWJsZWQsXG4gICk7XG4gIGNvbnN0IHRhcmdldElkcyA9IG5ldyBTZXQodGFyZ2V0cy5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCkpO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgZmlyZUd1YXJkcy5rZXlzKCkpIHtcbiAgICBpZiAoIXRhcmdldElkcy5oYXModG9rZW5JZCkpIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuSWQpO1xuICB9XG4gIGxvZ2dlci5pbmZvKGB0b2tlbiB3aW5kb3cga2VlcGFsaXZlIHNjaGVkdWxpbmcgJHt0YXJnZXRzLmxlbmd0aH0gdG9rZW4ocylgKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwodGFyZ2V0cy5tYXAoKHRva2VuKSA9PiBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgdHJ1ZSkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2NoZWR1bGVUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHN0YXJ0VG9rZW5XaW5kb3dLZWVwYWxpdmUoZGVwcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wVG9rZW5XaW5kb3dLZWVwYWxpdmUoKTogdm9pZCB7XG4gIGNsZWFyU2No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
160
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4td2luZG93LWtlZXBhbGl2ZS5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXBwbGljYXRpb24vcWdyaWQvdG9rZW4td2luZG93LWtlZXBhbGl2ZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuXG5pbXBvcnQgeyBUT0tFTl9XSU5ET1dfS0VFUEFMSVZFX1JVTk5FUl9FTlZfS0VZIH0gZnJvbSBcIi4uL3NldHRpbmcvc2V0dGluZy5jb25zdGFudFwiO1xuaW1wb3J0IHsgZ2V0U2V0dGluZyB9IGZyb20gXCIuLi9zZXR0aW5nL3NldHRpbmcuc3RvcmVcIjtcbmltcG9ydCB7IFRva2VuTW9kZWwgfSBmcm9tIFwiLi4vdG9rZW4vdG9rZW4ubW9kZWxcIjtcbmltcG9ydCB7IHR5cGUgSW50ZXJuYWxRdWVyeUlucHV0IH0gZnJvbSBcIi4vcWdyaWQuZGlzcGF0Y2hlclwiO1xuaW1wb3J0IHsgUWdyaWRGcmFtZSB9IGZyb20gXCIuL3FncmlkLmZyYW1lXCI7XG5pbXBvcnQgeyB0eXBlIFVzYWdlUmVzcG9uc2UgfSBmcm9tIFwiLi9xZ3JpZC50eXBlc1wiO1xuXG5jb25zdCBsb2dnZXIgPSBnZXRMb2dnZXIoW1wicWdyaWRcIiwgXCJ0b2tlbi13aW5kb3cta2VlcGFsaXZlXCJdKTtcblxuY29uc3QgRklWRV9IT1VSU19NUyA9IDUgKiA2MCAqIDYwICogMV8wMDA7XG5jb25zdCBSRVNFVF9HUkFDRV9NUyA9IDFfMDAwO1xuXG4vLyB1c2FnZSBBUEkg7ISx6rO1IOydkeuLteydgCAx67aEIOy6kOyLnOuQnOuLpC4ga2VlcGFsaXZlIOynge2bhCDsponsi5wg7J6s7KGw7ZqM7ZWY66m0IOydtOyghCDsnIjrj4TsmrDrpbxcbi8vIOuLpOyLnCDrs7Trr4DroZwg7LqQ7Iuc6rCAIOyngOuCnCDrkqQg7ZWcIOuyiCDtmZXsnbjtlZjqs6AsIOq3uOuVjOuPhCDsg4gg7JyI64+E7Jqw6rCAIOyXhuycvOuptCDri6TsnYwgNWjquYzsp4Ag6riw64uk66aw64ukLlxuZXhwb3J0IGNvbnN0IFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TID0gNjFfMDAwO1xuZXhwb3J0IGNvbnN0IEtFRVBBTElWRV9NT0RFTCA9IFwiYW50aHJvcGljL2NsYXVkZS1oYWlrdS01LTVcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfUFJPSkVDVF9OQU1FID0gXCJxZ3JpZC10b2tlbi13aW5kb3cta2VlcGFsaXZlXCI7XG5leHBvcnQgY29uc3QgS0VFUEFMSVZFX1NFVFRJTkdfS0VZID0gXCJxZ3JpZC50b2tlbldpbmRvd0tlZXBhbGl2ZUVuYWJsZWRcIjtcbmV4cG9ydCBjb25zdCBLRUVQQUxJVkVfRU5WX0tFWSA9IFRPS0VOX1dJTkRPV19LRUVQQUxJVkVfUlVOTkVSX0VOVl9LRVk7XG5cbnR5cGUgS2VlcGFsaXZlVG9rZW4gPSB7XG4gIGlkOiBudW1iZXI7XG4gIG5hbWU6IHN0cmluZztcbiAgcHJvdmlkZXI6IHN0cmluZztcbiAgYWN0aXZlOiBib29sZWFuO1xuICBrZWVwYWxpdmVfZW5hYmxlZDogYm9vbGVhbjtcbn07XG5cbnR5cGUgVGltZXJIYW5kbGUgPSBSZXR1cm5UeXBlPHR5cGVvZiBzZXRUaW1lb3V0PjtcblxuZXhwb3J0IHR5cGUgVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0ge1xuICBmaW5kVG9rZW5zOiAoKSA9PiBQcm9taXNlPEtlZXBhbGl2ZVRva2VuW10+O1xuICByZWFkVXNhZ2U6ICh0b2tlbklkOiBudW1iZXIpID0+IFByb21pc2U8VXNhZ2VSZXNwb25zZT47XG4gIGRpc3BhdGNoOiAoaW5wdXQ6IEludGVybmFsUXVlcnlJbnB1dCkgPT4gUHJvbWlzZTx1bmtub3duPjtcbiAgcmVhZFNldHRpbmc6IHR5cGVvZiBnZXRTZXR0aW5nO1xuICBpc1J1bm5lckVuYWJsZWQ6ICgpID0+IGJvb2xlYW47XG4gIG5vdzogKCkgPT4gbnVtYmVyO1xuICBzZXRUaW1lcjogKGNhbGxiYWNrOiAoKSA9PiB2b2lkLCBkZWxheU1zOiBudW1iZXIpID0+IFRpbWVySGFuZGxlO1xuICBjbGVhclRpbWVyOiAoaGFuZGxlOiBUaW1lckhhbmRsZSkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGRlZmF1bHREZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMgPSB7XG4gIGZpbmRUb2tlbnM6ICgpID0+IFRva2VuTW9kZWwuZmluZEFjdGl2ZUJ5UHJvdmlkZXIoXCJBXCIsIFwiYW50aHJvcGljXCIpLFxuICByZWFkVXNhZ2U6ICh0b2tlbklkKSA9PiBRZ3JpZEZyYW1lLnVzYWdlKHRva2VuSWQpLFxuICBkaXNwYXRjaDogKGlucHV0KSA9PiBRZ3JpZEZyYW1lLnF1ZXJ5KGlucHV0KSxcbiAgcmVhZFNldHRpbmc6IGdldFNldHRpbmcsXG4gIGlzUnVubmVyRW5hYmxlZDogKCkgPT4gcHJvY2Vzcy5lbnZbS0VFUEFMSVZFX0VOVl9LRVldID09PSBcInRydWVcIixcbiAgbm93OiAoKSA9PiBEYXRlLm5vdygpLFxuICBzZXRUaW1lcjogKGNhbGxiYWNrLCBkZWxheU1zKSA9PiBzZXRUaW1lb3V0KGNhbGxiYWNrLCBkZWxheU1zKSxcbiAgY2xlYXJUaW1lcjogKGhhbmRsZSkgPT4gY2xlYXJUaW1lb3V0KGhhbmRsZSksXG59O1xuXG5jb25zdCB0aW1lcnMgPSBuZXcgTWFwPG51bWJlciwgeyBoYW5kbGU6IFRpbWVySGFuZGxlOyBjbGVhcjogKGhhbmRsZTogVGltZXJIYW5kbGUpID0+IHZvaWQgfT4oKTtcbmNvbnN0IGZpcmVHdWFyZHMgPSBuZXcgTWFwPG51bWJlciwgeyB1bnRpbE1zOiBudW1iZXI7IGFsbG93RmlyZUF0RXhwaXJ5OiBib29sZWFuIH0+KCk7XG5sZXQgZ2VuZXJhdGlvbiA9IDA7XG5cbmZ1bmN0aW9uIGNsZWFyVG9rZW5UaW1lcih0b2tlbklkOiBudW1iZXIpOiB2b2lkIHtcbiAgY29uc3QgdGltZXIgPSB0aW1lcnMuZ2V0KHRva2VuSWQpO1xuICBpZiAoIXRpbWVyKSByZXR1cm47XG4gIHRpbWVyLmNsZWFyKHRpbWVyLmhhbmRsZSk7XG4gIHRpbWVycy5kZWxldGUodG9rZW5JZCk7XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiB2b2lkIHtcbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICBjbGVhclRva2VuVGltZXIodG9rZW4uaWQpO1xuICBjb25zdCBoYW5kbGUgPSBkZXBzLnNldFRpbWVyKFxuICAgICgpID0+IHtcbiAgICAgIHRpbWVycy5kZWxldGUodG9rZW4uaWQpO1xuICAgICAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuICAgICAgdm9pZCBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgYWxsb3dGaXJlKS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgbG9nZ2VyLndhcm4oYGtlZXBhbGl2ZSBjeWNsZSBmYWlsZWQgZm9yICR7dG9rZW4ubmFtZX06ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICBzY2hlZHVsZUZhbGxiYWNrKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24pO1xuICAgICAgfSk7XG4gICAgfSxcbiAgICBNYXRoLm1heCgwLCBkZWxheU1zKSxcbiAgKTtcbiAgdGltZXJzLnNldCh0b2tlbi5pZCwgeyBoYW5kbGUsIGNsZWFyOiBkZXBzLmNsZWFyVGltZXIgfSk7XG59XG5cbmZ1bmN0aW9uIGRlZmVyVG9rZW4oXG4gIHRva2VuOiBLZWVwYWxpdmVUb2tlbixcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzLFxuICBleHBlY3RlZEdlbmVyYXRpb246IG51bWJlcixcbiAgZGVsYXlNczogbnVtYmVyLFxuICBhbGxvd0ZpcmVBdEV4cGlyeTogYm9vbGVhbixcbik6IHZvaWQge1xuICBjb25zdCB1bnRpbE1zID0gZGVwcy5ub3coKSArIGRlbGF5TXM7XG4gIGZpcmVHdWFyZHMuc2V0KHRva2VuLmlkLCB7IHVudGlsTXMsIGFsbG93RmlyZUF0RXhwaXJ5IH0pO1xuICBzY2hlZHVsZVRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIGRlbGF5TXMsIGFsbG93RmlyZUF0RXhwaXJ5KTtcbn1cblxuZnVuY3Rpb24gc2NoZWR1bGVGYWxsYmFjayhcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuKTogdm9pZCB7XG4gIGRlZmVyVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgRklWRV9IT1VSU19NUywgdHJ1ZSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGluc3BlY3RUb2tlbihcbiAgdG9rZW46IEtlZXBhbGl2ZVRva2VuLFxuICBkZXBzOiBUb2tlbldpbmRvd0tlZXBhbGl2ZURlcHMsXG4gIGV4cGVjdGVkR2VuZXJhdGlvbjogbnVtYmVyLFxuICBhbGxvd0ZpcmU6IGJvb2xlYW4sXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3Qgbm93ID0gZGVwcy5ub3coKTtcbiAgY29uc3QgZ3VhcmQgPSBmaXJlR3VhcmRzLmdldCh0b2tlbi5pZCk7XG4gIGlmIChndWFyZCAmJiBndWFyZC51bnRpbE1zID4gbm93KSB7XG4gICAgc2NoZWR1bGVUb2tlbih0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uLCBndWFyZC51bnRpbE1zIC0gbm93LCBndWFyZC5hbGxvd0ZpcmVBdEV4cGlyeSk7XG4gICAgcmV0dXJuO1xuICB9XG4gIGlmIChndWFyZCkgZmlyZUd1YXJkcy5kZWxldGUodG9rZW4uaWQpO1xuXG4gIGxldCB1c2FnZTogVXNhZ2VSZXNwb25zZTtcbiAgdHJ5IHtcbiAgICB1c2FnZSA9IGF3YWl0IGRlcHMucmVhZFVzYWdlKHRva2VuLmlkKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2FybihgdXNhZ2UgbG9va3VwIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGdlbmVyYXRpb24gIT09IGV4cGVjdGVkR2VuZXJhdGlvbikgcmV0dXJuO1xuXG4gIGlmICh1c2FnZS5lcnJvcikge1xuICAgIGxvZ2dlci53YXJuKGB1c2FnZSBsb29rdXAgZmFpbGVkIGZvciAke3Rva2VuLm5hbWV9OiAke3VzYWdlLmVycm9yfWApO1xuICAgIHNjaGVkdWxlRmFsbGJhY2sodG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbik7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgY29uc3QgcmVzZXRzQXQgPSB1c2FnZS5maXZlSG91cj8ucmVzZXRzQXQ7XG4gIGlmIChyZXNldHNBdCkge1xuICAgIGNvbnN0IHJlc2V0TXMgPSBEYXRlLnBhcnNlKHJlc2V0c0F0KTtcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXNldE1zKSkge1xuICAgICAgbG9nZ2VyLndhcm4oYGludmFsaWQgZml2ZS1ob3VyIHJlc2V0IGZvciAke3Rva2VuLm5hbWV9OiAke3Jlc2V0c0F0fWApO1xuICAgICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgaW5zcGVjdGVkQXQgPSBkZXBzLm5vdygpO1xuICAgIGlmIChyZXNldE1zID4gaW5zcGVjdGVkQXQpIHtcbiAgICAgIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuLmlkKTtcbiAgICAgIHNjaGVkdWxlVG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgcmVzZXRNcyAtIGluc3BlY3RlZEF0ICsgUkVTRVRfR1JBQ0VfTVMsIHRydWUpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIC8vIOuwnOyCrCDsp4Htm4Qg7ZmV7J247JeQ7ISc64qUIOy6kOyLnOuQnCBudWxsL+qzvOqxsCByZXNldOydhCDrtJDrj4Qg64uk7IucIOuwnOyCrO2VmOyngCDslYrripTri6QuXG4gIGlmICghYWxsb3dGaXJlKSB7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBkZWZlclRva2VuKHRva2VuLCBkZXBzLCBleHBlY3RlZEdlbmVyYXRpb24sIFBPU1RfS0VFUEFMSVZFX1VTQUdFX0RFTEFZX01TLCBmYWxzZSk7XG4gIHRyeSB7XG4gICAgYXdhaXQgZGVwcy5kaXNwYXRjaCh7XG4gICAgICBwcm9tcHQ6IFwiUmVwbHkgT0suXCIsXG4gICAgICBtb2RlbDogS0VFUEFMSVZFX01PREVMLFxuICAgICAgdGhpbmtpbmc6IGZhbHNlLFxuICAgICAgZWZmb3J0OiBcImxvd1wiLFxuICAgICAgcHJvamVjdE5hbWU6IEtFRVBBTElWRV9QUk9KRUNUX05BTUUsXG4gICAgICBwcmVmZXJyZWRUb2tlbklkOiB0b2tlbi5pZCxcbiAgICB9KTtcbiAgICBsb2dnZXIuaW5mbyhga2VlcGFsaXZlIHNlbnQgZm9yICR7dG9rZW4ubmFtZX1gKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsb2dnZXIud2Fybihga2VlcGFsaXZlIGZhaWxlZCBmb3IgJHt0b2tlbi5uYW1lfTogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9YCk7XG4gICAgc2NoZWR1bGVGYWxsYmFjayh0b2tlbiwgZGVwcywgZXhwZWN0ZWRHZW5lcmF0aW9uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBwb3N0RmlyZUd1YXJkID0gZmlyZUd1YXJkcy5nZXQodG9rZW4uaWQpO1xuICBpZiAocG9zdEZpcmVHdWFyZCkge1xuICAgIHNjaGVkdWxlVG9rZW4oXG4gICAgICB0b2tlbixcbiAgICAgIGRlcHMsXG4gICAgICBleHBlY3RlZEdlbmVyYXRpb24sXG4gICAgICBNYXRoLm1heCgwLCBwb3N0RmlyZUd1YXJkLnVudGlsTXMgLSBkZXBzLm5vdygpKSxcbiAgICAgIHBvc3RGaXJlR3VhcmQuYWxsb3dGaXJlQXRFeHBpcnksXG4gICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjbGVhclNjaGVkdWxlZFRpbWVycygpOiB2b2lkIHtcbiAgZ2VuZXJhdGlvbisrO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgdGltZXJzLmtleXMoKSkgY2xlYXJUb2tlblRpbWVyKHRva2VuSWQpO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3RhcnRUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY2xlYXJTY2hlZHVsZWRUaW1lcnMoKTtcbiAgaWYgKCFkZXBzLmlzUnVubmVyRW5hYmxlZCgpKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJ0b2tlbiB3aW5kb3cga2VlcGFsaXZlIHJ1bm5lciBkaXNhYmxlZCBmb3IgdGhpcyBpbnN0YW5jZVwiKTtcbiAgICByZXR1cm47XG4gIH1cbiAgaWYgKGRlcHMucmVhZFNldHRpbmcoS0VFUEFMSVZFX1NFVFRJTkdfS0VZKSA9PT0gXCJmYWxzZVwiKSB7XG4gICAgbG9nZ2VyLmluZm8oXCJ0b2tlbiB3aW5kb3cga2VlcGFsaXZlIGRpc2FibGVkXCIpO1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBleHBlY3RlZEdlbmVyYXRpb24gPSBnZW5lcmF0aW9uO1xuXG4gIGxldCB0b2tlbnM6IEtlZXBhbGl2ZVRva2VuW107XG4gIHRyeSB7XG4gICAgdG9rZW5zID0gYXdhaXQgZGVwcy5maW5kVG9rZW5zKCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgbG9nZ2VyLndhcm4oYHRva2VuIGRpc2NvdmVyeSBmYWlsZWQ6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoZ2VuZXJhdGlvbiAhPT0gZXhwZWN0ZWRHZW5lcmF0aW9uKSByZXR1cm47XG5cbiAgY29uc3QgdGFyZ2V0cyA9IHRva2Vucy5maWx0ZXIoXG4gICAgKHRva2VuKSA9PiB0b2tlbi5hY3RpdmUgJiYgdG9rZW4ucHJvdmlkZXIgPT09IFwiYW50aHJvcGljXCIgJiYgdG9rZW4ua2VlcGFsaXZlX2VuYWJsZWQsXG4gICk7XG4gIGNvbnN0IHRhcmdldElkcyA9IG5ldyBTZXQodGFyZ2V0cy5tYXAoKHRva2VuKSA9PiB0b2tlbi5pZCkpO1xuICBmb3IgKGNvbnN0IHRva2VuSWQgb2YgZmlyZUd1YXJkcy5rZXlzKCkpIHtcbiAgICBpZiAoIXRhcmdldElkcy5oYXModG9rZW5JZCkpIGZpcmVHdWFyZHMuZGVsZXRlKHRva2VuSWQpO1xuICB9XG4gIGxvZ2dlci5pbmZvKGB0b2tlbiB3aW5kb3cga2VlcGFsaXZlIHNjaGVkdWxpbmcgJHt0YXJnZXRzLmxlbmd0aH0gdG9rZW4ocylgKTtcbiAgYXdhaXQgUHJvbWlzZS5hbGwodGFyZ2V0cy5tYXAoKHRva2VuKSA9PiBpbnNwZWN0VG9rZW4odG9rZW4sIGRlcHMsIGV4cGVjdGVkR2VuZXJhdGlvbiwgdHJ1ZSkpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHJlc2NoZWR1bGVUb2tlbldpbmRvd0tlZXBhbGl2ZShcbiAgZGVwczogVG9rZW5XaW5kb3dLZWVwYWxpdmVEZXBzID0gZGVmYXVsdERlcHMsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgcmV0dXJuIHN0YXJ0VG9rZW5XaW5kb3dLZWVwYWxpdmUoZGVwcyk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzdG9wVG9rZW5XaW5kb3dLZWVwYWxpdmUoKTogdm9pZCB7XG4gIGNsZWFyU2NoZWR1bGVkVGltZXJzKCk7XG4gIGZpcmVHdWFyZHMuY2xlYXIoKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBU0EsTUFBTSxTQUFTLFVBQVUsQ0FBQyxTQUFTLHdCQUF3QixDQUFDO0FBRTVELE1BQU0sZ0JBQWdCLE1BQVMsS0FBSztBQUNwQyxNQUFNLGlCQUFpQjtBQUl2QixNQUFhLGdDQUFnQztBQUM3QyxNQUFhLGtCQUFrQjtBQUMvQixNQUFhLHlCQUF5QjtBQUN0QyxNQUFhLHdCQUF3QjtBQUNyQyxNQUFhLG9CQUFvQjtBQXVCakMsTUFBTSxjQUF3QztDQUM1QyxrQkFBa0IsV0FBVyxxQkFBcUIsS0FBSyxXQUFXO0NBQ2xFLFlBQVksWUFBWSxXQUFXLE1BQU0sT0FBTztDQUNoRCxXQUFXLFVBQVUsV0FBVyxNQUFNLEtBQUs7Q0FDM0MsYUFBYTtDQUNiLHVCQUF1QixRQUFRLElBQUksdUJBQXVCO0NBQzFELFdBQVcsS0FBSyxJQUFJO0NBQ3BCLFdBQVcsVUFBVSxZQUFZLFdBQVcsVUFBVSxPQUFPO0NBQzdELGFBQWEsV0FBVyxhQUFhLE1BQU07QUFDN0M7QUFFQSxNQUFNLHlCQUFTLElBQUksSUFBMkU7QUFDOUYsTUFBTSw2QkFBYSxJQUFJLElBQTZEO0FBQ3BGLElBQUksYUFBYTtBQUVqQixTQUFTLGdCQUFnQixTQUF1QjtDQUM5QyxNQUFNLFFBQVEsT0FBTyxJQUFJLE9BQU87Q0FDaEMsSUFBSSxDQUFDLE9BQU87Q0FDWixNQUFNLE1BQU0sTUFBTSxNQUFNO0NBQ3hCLE9BQU8sT0FBTyxPQUFPO0FBQ3ZCO0FBRUEsU0FBUyxjQUNQLE9BQ0EsTUFDQSxvQkFDQSxTQUNBLFdBQ007Q0FDTixJQUFJLGVBQWUsb0JBQW9CO0NBQ3ZDLGdCQUFnQixNQUFNLEVBQUU7Q0FDeEIsTUFBTSxTQUFTLEtBQUssZUFDWjtFQUNKLE9BQU8sT0FBTyxNQUFNLEVBQUU7RUFDdEIsSUFBSSxlQUFlLG9CQUFvQjtFQUN2QyxBQUFLLGFBQWEsT0FBTyxNQUFNLG9CQUFv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
@@ -30,7 +30,7 @@ function buildToolCallSchema(tools, answerSchema) {
30
30
  const normalizedAnswerSchema = answerSchema === void 0 ? void 0 : rebaseUserOutputSchema(answerSchema);
31
31
  return {
32
32
  type: "object",
33
- description: "Use this schema only through StructuredOutput. Do not invoke listed client tools as native Claude Code tools. To request client-side tool execution, set result.action to tool_call and include result.toolCalls. Use action answer only when no further client tool result is needed.",
33
+ description: "Return exactly one JSON object matching this schema as your final response, including when requesting a tool. This object is the response body, not a call to a built-in tool. To request client-side tools, set result.action to tool_call and include result.toolCalls, then end your turn. The client executes those tools and supplies their results in a later request. Do not invent tool results or emit an answer before receiving the required results.",
34
34
  properties: { result: { anyOf: [{
35
35
  type: "object",
36
36
  description: "Final answer. Use only when no further client tool result is needed.",
@@ -50,7 +50,7 @@ function buildToolCallSchema(tools, answerSchema) {
50
50
  additionalProperties: false
51
51
  }, {
52
52
  type: "object",
53
- description: "Request client-side tool execution through this structured output. Do not call these tools as native Claude Code tools.",
53
+ description: "Request client-side tool execution. Return this object as the complete response, then wait for the next request containing tool results.",
54
54
  properties: {
55
55
  action: {
56
56
  type: "string",
@@ -66,7 +66,7 @@ function buildToolCallSchema(tools, answerSchema) {
66
66
  toolName: {
67
67
  type: "string",
68
68
  enum: tools.map((tool) => tool.name),
69
- description: `Client-side tool name to request through structured output. Do not call this as a native Claude Code tool.\n${toolDescriptions}`
69
+ description: `Client-side tool name. The caller executes these tools after receiving your JSON response.\n${toolDescriptions}`
70
70
  },
71
71
  args: {
72
72
  type: "string",
@@ -122,4 +122,4 @@ function isJsonObject(value) {
122
122
  //#endregion
123
123
  export { ToolSchemaCompositionError, buildToolCallSchema };
124
124
 
125
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24tc2NoZW1hLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC90b29sLWVtdWxhdGlvbi1zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0b29sIGVudmVsb3BlICsg7IKs7Jqp7J6QIG91dHB1dCDsiqTtgqTrp4gg7ZWp7ISxICjsmpTssq0g67Cp7ZalKS4g7J2R64u1IO2VtOyEneydgCB0b29sLWVtdWxhdGlvbi50cy5cbiAqXG4gKiB0b29scyDqsIAg7J6I7Ja064+EIOy1nOyihSBhbnN3ZXIg6rCAIOyCrOyaqeyekCDsiqTtgqTrp4jroZwg6rCV7KCc65CY6rKMIO2VmOugpOqzoCBlbnZlbG9wZSDsnZggYW5zd2VyIOu4jOuenOy5mOyXkFxuICog7IKs7Jqp7J6QIOyKpO2CpOuniOulvCDsi6zripTri6QuIO2GteynuOuhnCDspJHssqntlaAg7IiYIOyXhuuKlCDsnbTsnKDripQgYCRyZWZgIOqwgCDrrLjshJwg7KCI64yAIOqyveuhnOydtOq4sCDrlYzrrLgg4oCUXG4gKiBgI2Ag7J2AIFwi7J20IOyhsOqwgeydmCDro6jtirhcIuqwgCDslYTri4jrnbwgXCLstZzsooUg66y47ISc7J2YIOujqO2KuFwi6528LCDqt7jrjIDroZwg64Sj7Jy866m0IO2PrOyduO2EsOqwgCBlbnZlbG9wZSDsnYRcbiAqIOqwgOumrOy8nCDsobDsmqntnogg7JeJ65qx7ZWcIOqxuCDqsoDspp3tlZjqsowg65Cc64ukLiDqt7jrnpjshJwg7JiI7JW9IOydtOumhCDslYTrnpjroZwg7Jiu6riw6rOgIOuhnOy7rCDtj6zsnbjthLDrpbwg7J6s7J6R7ISx7ZWc64ukLlxuICpcbiAqIOuwsOqyvcK37Iuk7LihwrfsmIjsi5zCt+qxsOu2gCDrqqnroZ3snYAg7Iqk7YKsIOusuOyEnOulvCDrs7wg6rKDOlxuICogICBwYWNrYWdlcy9jbGkvc2tpbGxzL3FncmlkL3JlZmVyZW5jZXMvdG9vbC1jYWxsaW5nLWFuZC1tdWx0aXR1cm4ubWRcbiAqICAg4oaSIFwiQ29tcG9zaW5nIFRvb2xzIFdpdGggQSBVc2VyIE91dHB1dCBTY2hlbWFcIlxuICovXG5cbmltcG9ydCB7XG4gIFNDSEVNQV9BUlJBWV9LRVlXT1JEUyxcbiAgU0NIRU1BX0RFUEVOREVOQ0lFU19LRVlXT1JELFxuICBTQ0hFTUFfTUFQX0tFWVdPUkRTLFxuICBTQ0hFTUFfU0lOR0xFX0tFWVdPUkRTLFxuICBVTlNVUFBPUlRFRF9SRUZFUkVOQ0VfS0VZV09SRFMsXG59IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL2pzb24tc2NoZW1hLWtleXdvcmRzXCI7XG5pbXBvcnQgeyB0eXBlIEpzb25WYWx1ZSB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3Byb3ZpZGVyLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkVG9vbCB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IFVTRVJfT1VUUFVUX0RFRklOSVRJT04gPSBcIl9fcWdyaWRfdXNlcl9vdXRwdXRcIjtcbmNvbnN0IFVTRVJfT1VUUFVUX1JFRiA9IGAjLyRkZWZzLyR7VVNFUl9PVVRQVVRfREVGSU5JVElPTn1gO1xuXG5leHBvcnQgY2xhc3MgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihgdG9vbCBzY2hlbWEgY29tcG9zaXRpb246ICR7bWVzc2FnZX0gKGF0ICR7cGF0aH0pYCk7XG4gICAgdGhpcy5uYW1lID0gXCJUb29sU2NoZW1hQ29tcG9zaXRpb25FcnJvclwiO1xuICB9XG59XG5cbi8vIGVudmVsb3BlIOuKlCByZXN1bHQg7ZWcIOqyuSDslYTrnpjsl5AgZGlzY3JpbWluYXRlZCB1bmlvbiDsnYQg65GU64ukLiDrkZAg67OA7ZiV7J2EIOusuOuylSDsiJjspIDsl5DshJxcbi8vIOyDge2YuOuwsO2DgOuhnCDrp4zrk6TslrQoYW5zd2VyIOuzgO2YleydgCBhbnN3ZXIg67mEbnVsbCDtlYTsiJgsIHRvb2xfY2FsbCDrs4DtmJXsnYAgdG9vbENhbGxzIDHqsJwg7J207IOBKVxuLy8gYGFjdGlvbjpcImFuc3dlclwiLCBhbnN3ZXI6bnVsbGAg6rCZ7J2AIO2HtO2ZlCDsobDtlansnYQg7JuQ7LKcIOywqOuLqO2VnOuLpCDigJQg7Y+J7Y+J7ZWcIOyKpO2CpOuniCDsi5zsoIhcbi8vIOydtCDsobDtlansnbQgY29uc3RyYWluZWQgZGVjb2Rpbmcg7J2EIO2GteqzvO2VtCAxMy41ayDqsbTsnZgg7Jik7Je8IOydkeuLteydhCDrp4zrk6Ag7Iuk7IKs6rOg6rCAIOq3vOqxsC5cbi8vIHVuaW9uIOydhCByZXN1bHQgcHJvcGVydHkg7JWI7JeQIOykkeyyqe2VmOuKlCDsnbTsnKA6IE9wZW5BSSBzdHJ1Y3R1cmVkIG91dHB1dHMg64qUIOujqO2KuOqwgFxuLy8gb2JqZWN0IOyXrOyVvCDtlZjqs6AgdG9wLWxldmVsIGFueU9mIOulvCDqsbDrtoDtlZzri6QuIOykkeyyqSBhbnlPZiDsmYAgbWluSXRlbXMg64qUIOyngOybkOuQnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvb2xDYWxsU2NoZW1hKHRvb2xzOiBRZ3JpZFRvb2xbXSwgYW5zd2VyU2NoZW1hPzogSnNvblZhbHVlKTogSnNvblZhbHVlIHtcbiAgY29uc3QgdG9vbERlc2NyaXB0aW9ucyA9IHRvb2xzXG4gICAgLm1hcCgodG9vbCkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gSlNPTi5zdHJpbmdpZnkodG9vbC5pbnB1dFNjaGVtYSk7XG4gICAgICByZXR1cm4gYC0gJHt0b29sLm5hbWV9OiAke3Rvb2wuZGVzY3JpcHRpb24gPz8gXCJcIn1cXG4gIGlucHV0U2NoZW1hOiAke3NjaGVtYX1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3Qgbm9ybWFsaXplZEFuc3dlclNjaGVtYSA9XG4gICAgYW5zd2VyU2NoZW1hID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWJhc2VVc2VyT3V0cHV0U2NoZW1hKGFuc3dlclNjaGVtYSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJVc2UgdGhpcyBzY2hlbWEgb25seSB0aHJvdWdoIFN0cnVjdHVyZWRPdXRwdXQuIERvIG5vdCBpbnZva2UgbGlzdGVkIGNsaWVudCB0b29scyBhcyBuYXRpdmUgQ2xhdWRlIENvZGUgdG9vbHMuIFRvIHJlcXVlc3QgY2xpZW50LXNpZGUgdG9vbCBleGVjdXRpb24sIHNldCByZXN1bHQuYWN0aW9uIHRvIHRvb2xfY2FsbCBhbmQgaW5jbHVkZSByZXN1bHQudG9vbENhbGxzLiBVc2UgYWN0aW9uIGFuc3dlciBvbmx5IHdoZW4gbm8gZnVydGhlciBjbGllbnQgdG9vbCByZXN1bHQgaXMgbmVlZGVkLlwiLFxuICAgIHByb3BlcnRpZXM6IHtcbiAgICAgIHJlc3VsdDoge1xuICAgICAgICBhbnlPZjogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjogXCJGaW5hbCBhbnN3ZXIuIFVzZSBvbmx5IHdoZW4gbm8gZnVydGhlciBjbGllbnQgdG9vbCByZXN1bHQgaXMgbmVlZGVkLlwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBhY3Rpb246IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1wiYW5zd2VyXCJdIH0sXG4gICAgICAgICAgICAgIGFuc3dlcjpcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkQW5zd2VyU2NoZW1hID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgID8geyB0eXBlOiBcInN0cmluZ1wiIH1cbiAgICAgICAgICAgICAgICAgIDogeyAkcmVmOiBVU0VSX09VVFBVVF9SRUYgfSxcbiAgICAgICAgICAgICAgdG9vbENhbGxzOiB7IHR5cGU6IFwibnVsbFwiIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcmVxdWlyZWQ6IFtcImFjdGlvblwiLCBcImFuc3dlclwiLCBcInRvb2xDYWxsc1wiXSxcbiAgICAgICAgICAgIGFkZGl0aW9uYWxQcm9wZXJ0aWVzOiBmYWxzZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbjpcbiAgICAgICAgICAgICAgXCJSZXF1ZXN0IGNsaWVudC1zaWRlIHRvb2wgZXhlY3V0aW9uIHRocm91Z2ggdGhpcyBzdHJ1Y3R1cmVkIG91dHB1dC4gRG8gbm90IGNhbGwgdGhlc2UgdG9vbHMgYXMgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2xzLlwiLFxuICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICBhY3Rpb246IHsgdHlwZTogXCJzdHJpbmdcIiwgZW51bTogW1widG9vbF9jYWxsXCJdIH0sXG4gICAgICAgICAgICAgIGFuc3dlcjogeyB0eXBlOiBcIm51bGxcIiB9LFxuICAgICAgICAgICAgICB0b29sQ2FsbHM6IHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImFycmF5XCIsXG4gICAgICAgICAgICAgICAgbWluSXRlbXM6IDEsXG4gICAgICAgICAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICAgICAgICAgIHR5cGU6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgICAgICAgIHRvb2xOYW1lOiB7XG4gICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICBlbnVtOiB0b29scy5tYXAoKHRvb2wpID0+IHRvb2wubmFtZSksXG4gICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246IGBDbGllbnQtc2lkZSB0b29sIG5hbWUgdG8gcmVxdWVzdCB0aHJvdWdoIHN0cnVjdHVyZWQgb3V0cHV0LiBEbyBub3QgY2FsbCB0aGlzIGFzIGEgbmF0aXZlIENsYXVkZSBDb2RlIHRvb2wuXFxuJHt0b29sRGVzY3JpcHRpb25zfWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRvb2wgYXJndW1lbnRzIGFzIGEgSlNPTiBzdHJpbmcgZm9yIHRoZSBjbGllbnQtc2lkZSB0b29sLlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbXCJ0b29sTmFtZVwiLCBcImFyZ3NcIl0sXG4gICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogW1wiYWN0aW9uXCIsIFwiYW5zd2VyXCIsIFwidG9vbENhbGxzXCJdLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFtcInJlc3VsdFwiXSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgLi4uKG5vcm1hbGl6ZWRBbnN3ZXJTY2hlbWEgPT09IHVuZGVmaW5lZFxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgJGRlZnM6IHtcbiAgICAgICAgICAgIFtVU0VSX09VVFBVVF9ERUZJTklUSU9OXTogbm9ybWFsaXplZEFuc3dlclNjaGVtYSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmViYXNlVXNlck91dHB1dFNjaGVtYShzY2hlbWE6IEpzb25WYWx1ZSk6IEpzb25WYWx1ZSB7XG4gIHJldHVybiByZXdyaXRlU2NoZW1hTm9kZShzY2hlbWEsIFwiJFwiKTtcbn1cblxuY29uc3QgTUFQX0tFWVdPUkRTID0gbmV3IFNldDxzdHJpbmc+KFNDSEVNQV9NQVBfS0VZV09SRFMpO1xuY29uc3QgQVJSQVlfS0VZV09SRFMgPSBuZXcgU2V0PHN0cmluZz4oU0NIRU1BX0FSUkFZX0tFWVdPUkRTKTtcbmNvbnN0IFNJTkdMRV9LRVlXT1JEUyA9IG5ldyBTZXQ8c3RyaW5nPihTQ0hFTUFfU0lOR0xFX0tFWVdPUkRTKTtcblxuZnVuY3Rpb24gcmV3cml0ZVNjaGVtYU5vZGUodmFsdWU6IEpzb25WYWx1ZSwgcGF0aDogc3RyaW5nKTogSnNvblZhbHVlIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gIGNvbnN0IHNvdXJjZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIEpzb25WYWx1ZT47XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPiA9IHsgLi4uc291cmNlIH07XG5cbiAgZm9yIChjb25zdCB1bnN1cHBvcnRlZEtleXdvcmQgb2YgVU5TVVBQT1JURURfUkVGRVJFTkNFX0tFWVdPUkRTKSB7XG4gICAgaWYgKE9iamVjdC5oYXNPd24oc291cmNlLCB1bnN1cHBvcnRlZEtleXdvcmQpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3IoXG4gICAgICAgIGAke3Vuc3VwcG9ydGVkS2V5d29yZH0gaXMgbm90IHN1cHBvcnRlZGAsXG4gICAgICAgIGAke3BhdGh9LiR7dW5zdXBwb3J0ZWRLZXl3b3JkfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcIiRyZWZcIiBpbiBzb3VyY2UpIHtcbiAgICBjb25zdCByZWYgPSBzb3VyY2UuJHJlZjtcbiAgICBpZiAodHlwZW9mIHJlZiAhPT0gXCJzdHJpbmdcIiB8fCAocmVmICE9PSBcIiNcIiAmJiAhcmVmLnN0YXJ0c1dpdGgoXCIjL1wiKSkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sU2NoZW1hQ29tcG9zaXRpb25FcnJvcihcbiAgICAgICAgXCJvbmx5IHJvb3QtcmVsYXRpdmUgSlNPTiBQb2ludGVyICRyZWYgdmFsdWVzIGFyZSBzdXBwb3J0ZWRcIixcbiAgICAgICAgYCR7cGF0aH0uJHJlZmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXN1bHQuJHJlZiA9IGAke1VTRVJfT1VUUFVUX1JFRn0ke3JlZi5zbGljZSgxKX1gO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5d29yZCwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBrZXl3b3JkUGF0aCA9IGAke3BhdGh9LiR7a2V5d29yZH1gO1xuXG4gICAgaWYgKE1BUF9LRVlXT1JEUy5oYXMoa2V5d29yZCkgJiYgaXNKc29uT2JqZWN0KGNoaWxkKSkge1xuICAgICAgcmVzdWx0W2tleXdvcmRdID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhjaGlsZCkubWFwKChbbmFtZSwgc2NoZW1hXSkgPT4gW1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBgJHtrZXl3b3JkUGF0aH0uJHtuYW1lfWApLFxuICAgICAgICBdKSxcbiAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gU0NIRU1BX0RFUEVOREVOQ0lFU19LRVlXT1JEICYmIGlzSnNvbk9iamVjdChjaGlsZCkpIHtcbiAgICAgIHJlc3VsdFtrZXl3b3JkXSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hpbGQpLm1hcCgoW25hbWUsIGRlcGVuZGVuY3ldKSA9PiBbXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGRlcGVuZGVuY3kpXG4gICAgICAgICAgICA/IGRlcGVuZGVuY3lcbiAgICAgICAgICAgIDogcmV3cml0ZVNjaGVtYU5vZGUoZGVwZW5kZW5jeSwgYCR7a2V5d29yZFBhdGh9LiR7bmFtZX1gKSxcbiAgICAgICAgXSksXG4gICAgICApIGFzIEpzb25WYWx1ZTtcbiAgICB9IGVsc2UgaWYgKEFSUkFZX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSAmJiBBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgcmVzdWx0W2tleXdvcmRdID0gY2hpbGQubWFwKChzY2hlbWEsIGluZGV4KSA9PlxuICAgICAgICByZXdyaXRlU2NoZW1hTm9kZShzY2hlbWEsIGAke2tleXdvcmRQYXRofVske2luZGV4fV1gKSxcbiAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgIH0gZWxzZSBpZiAoU0lOR0xFX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSkge1xuICAgICAgaWYgKGtleXdvcmQgPT09IFwiaXRlbXNcIiAmJiBBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICByZXN1bHRba2V5d29yZF0gPSBjaGlsZC5tYXAoKHNjaGVtYSwgaW5kZXgpID0+XG4gICAgICAgICAgcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBgJHtrZXl3b3JkUGF0aH1bJHtpbmRleH1dYCksXG4gICAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleXdvcmRdID0gcmV3cml0ZVNjaGVtYU5vZGUoY2hpbGQsIGtleXdvcmRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIEpzb25WYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNKc29uT2JqZWN0KHZhbHVlOiBKc29uVmFsdWUpOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCBKc29uVmFsdWU+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sa0JBQWtCLFdBQVc7QUFFbkMsSUFBYSw2QkFBYixjQUFnRCxNQUFNO0NBRzNDO0NBRlQsWUFDRSxTQUNBLE1BQ0E7RUFDQSxNQUFNLDRCQUE0QixRQUFRLE9BQU8sS0FBSyxFQUFFO0VBRmpELEtBQUEsT0FBQTtFQUdQLEtBQUssT0FBTztDQUNkO0FBQ0Y7QUFRQSxTQUFnQixvQkFBb0IsT0FBb0IsY0FBcUM7Q0FDM0YsTUFBTSxtQkFBbUIsTUFDdEIsS0FBSyxTQUFTO0VBQ2IsTUFBTSxTQUFTLEtBQUssVUFBVSxLQUFLLFdBQVc7RUFDOUMsT0FBTyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssZUFBZSxHQUFHLG1CQUFtQjtDQUN0RSxDQUFDLENBQUMsQ0FDRCxLQUFLLElBQUk7Q0FFWixNQUFNLHlCQUNKLGlCQUFpQixTQUFZLFNBQVksdUJBQXVCLFlBQVk7Q0FFOUUsT0FBTztFQUNMLE1BQU07RUFDTixhQUNFO0VBQ0YsWUFBWSxFQUNWLFFBQVEsRUFDTixPQUFPLENBQ0w7R0FDRSxNQUFNO0dBQ04sYUFBYTtHQUNiLFlBQVk7SUFDVixRQUFRO0tBQUUsTUFBTTtLQUFVLE1BQU0sQ0FBQyxRQUFRO0lBQUU7SUFDM0MsUUFDRSwyQkFBMkIsU0FDdkIsRUFBRSxNQUFNLFNBQVMsSUFDakIsRUFBRSxNQUFNLGdCQUFnQjtJQUM5QixXQUFXLEVBQUUsTUFBTSxPQUFPO0dBQzVCO0dBQ0EsVUFBVTtJQUFDO0lBQVU7SUFBVTtHQUFXO0dBQzFDLHNCQUFzQjtFQUN4QixHQUNBO0dBQ0UsTUFBTTtHQUNOLGFBQ0U7R0FDRixZQUFZO0lBQ1YsUUFBUTtLQUFFLE1BQU07S0FBVSxNQUFNLENBQUMsV0FBVztJQUFFO0lB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
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24tc2NoZW1hLmpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcHBsaWNhdGlvbi9xZ3JpZC90b29sLWVtdWxhdGlvbi1zY2hlbWEudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiB0b29sIGVudmVsb3BlICsg7IKs7Jqp7J6QIG91dHB1dCDsiqTtgqTrp4gg7ZWp7ISxICjsmpTssq0g67Cp7ZalKS4g7J2R64u1IO2VtOyEneydgCB0b29sLWVtdWxhdGlvbi50cy5cbiAqXG4gKiB0b29scyDqsIAg7J6I7Ja064+EIOy1nOyihSBhbnN3ZXIg6rCAIOyCrOyaqeyekCDsiqTtgqTrp4jroZwg6rCV7KCc65CY6rKMIO2VmOugpOqzoCBlbnZlbG9wZSDsnZggYW5zd2VyIOu4jOuenOy5mOyXkFxuICog7IKs7Jqp7J6QIOyKpO2CpOuniOulvCDsi6zripTri6QuIO2GteynuOuhnCDspJHssqntlaAg7IiYIOyXhuuKlCDsnbTsnKDripQgYCRyZWZgIOqwgCDrrLjshJwg7KCI64yAIOqyveuhnOydtOq4sCDrlYzrrLgg4oCUXG4gKiBgI2Ag7J2AIFwi7J20IOyhsOqwgeydmCDro6jtirhcIuqwgCDslYTri4jrnbwgXCLstZzsooUg66y47ISc7J2YIOujqO2KuFwi6528LCDqt7jrjIDroZwg64Sj7Jy866m0IO2PrOyduO2EsOqwgCBlbnZlbG9wZSDsnYRcbiAqIOqwgOumrOy8nCDsobDsmqntnogg7JeJ65qx7ZWcIOqxuCDqsoDspp3tlZjqsowg65Cc64ukLiDqt7jrnpjshJwg7JiI7JW9IOydtOumhCDslYTrnpjroZwg7Jiu6riw6rOgIOuhnOy7rCDtj6zsnbjthLDrpbwg7J6s7J6R7ISx7ZWc64ukLlxuICpcbiAqIOuwsOqyvcK37Iuk7LihwrfsmIjsi5zCt+qxsOu2gCDrqqnroZ3snYAg7Iqk7YKsIOusuOyEnOulvCDrs7wg6rKDOlxuICogICBwYWNrYWdlcy9jbGkvc2tpbGxzL3FncmlkL3JlZmVyZW5jZXMvdG9vbC1jYWxsaW5nLWFuZC1tdWx0aXR1cm4ubWRcbiAqICAg4oaSIFwiQ29tcG9zaW5nIFRvb2xzIFdpdGggQSBVc2VyIE91dHB1dCBTY2hlbWFcIlxuICovXG5cbmltcG9ydCB7XG4gIFNDSEVNQV9BUlJBWV9LRVlXT1JEUyxcbiAgU0NIRU1BX0RFUEVOREVOQ0lFU19LRVlXT1JELFxuICBTQ0hFTUFfTUFQX0tFWVdPUkRTLFxuICBTQ0hFTUFfU0lOR0xFX0tFWVdPUkRTLFxuICBVTlNVUFBPUlRFRF9SRUZFUkVOQ0VfS0VZV09SRFMsXG59IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL2pzb24tc2NoZW1hLWtleXdvcmRzXCI7XG5pbXBvcnQgeyB0eXBlIEpzb25WYWx1ZSB9IGZyb20gXCIuLi8uLi91dGlscy9wcm92aWRlcnMvY29tbW9uL3Byb3ZpZGVyLXR5cGVzXCI7XG5pbXBvcnQgeyB0eXBlIFFncmlkVG9vbCB9IGZyb20gXCIuL3FncmlkLnR5cGVzXCI7XG5cbmNvbnN0IFVTRVJfT1VUUFVUX0RFRklOSVRJT04gPSBcIl9fcWdyaWRfdXNlcl9vdXRwdXRcIjtcbmNvbnN0IFVTRVJfT1VUUFVUX1JFRiA9IGAjLyRkZWZzLyR7VVNFUl9PVVRQVVRfREVGSU5JVElPTn1gO1xuXG5leHBvcnQgY2xhc3MgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIG1lc3NhZ2U6IHN0cmluZyxcbiAgICBwdWJsaWMgcGF0aDogc3RyaW5nLFxuICApIHtcbiAgICBzdXBlcihgdG9vbCBzY2hlbWEgY29tcG9zaXRpb246ICR7bWVzc2FnZX0gKGF0ICR7cGF0aH0pYCk7XG4gICAgdGhpcy5uYW1lID0gXCJUb29sU2NoZW1hQ29tcG9zaXRpb25FcnJvclwiO1xuICB9XG59XG5cbi8vIGVudmVsb3BlIOuKlCByZXN1bHQg7ZWcIOqyuSDslYTrnpjsl5AgZGlzY3JpbWluYXRlZCB1bmlvbiDsnYQg65GU64ukLiDrkZAg67OA7ZiV7J2EIOusuOuylSDsiJjspIDsl5DshJxcbi8vIOyDge2YuOuwsO2DgOuhnCDrp4zrk6TslrQoYW5zd2VyIOuzgO2YleydgCBhbnN3ZXIg67mEbnVsbCDtlYTsiJgsIHRvb2xfY2FsbCDrs4DtmJXsnYAgdG9vbENhbGxzIDHqsJwg7J207IOBKVxuLy8gYGFjdGlvbjpcImFuc3dlclwiLCBhbnN3ZXI6bnVsbGAg6rCZ7J2AIO2HtO2ZlCDsobDtlansnYQg7JuQ7LKcIOywqOuLqO2VnOuLpCDigJQg7Y+J7Y+J7ZWcIOyKpO2CpOuniCDsi5zsoIhcbi8vIOydtCDsobDtlansnbQgY29uc3RyYWluZWQgZGVjb2Rpbmcg7J2EIO2GteqzvO2VtCAxMy41ayDqsbTsnZgg7Jik7Je8IOydkeuLteydhCDrp4zrk6Ag7Iuk7IKs6rOg6rCAIOq3vOqxsC5cbi8vIHVuaW9uIOydhCByZXN1bHQgcHJvcGVydHkg7JWI7JeQIOykkeyyqe2VmOuKlCDsnbTsnKA6IE9wZW5BSSBzdHJ1Y3R1cmVkIG91dHB1dHMg64qUIOujqO2KuOqwgFxuLy8gb2JqZWN0IOyXrOyVvCDtlZjqs6AgdG9wLWxldmVsIGFueU9mIOulvCDqsbDrtoDtlZzri6QuIOykkeyyqSBhbnlPZiDsmYAgbWluSXRlbXMg64qUIOyngOybkOuQnOuLpC5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZFRvb2xDYWxsU2NoZW1hKHRvb2xzOiBRZ3JpZFRvb2xbXSwgYW5zd2VyU2NoZW1hPzogSnNvblZhbHVlKTogSnNvblZhbHVlIHtcbiAgY29uc3QgdG9vbERlc2NyaXB0aW9ucyA9IHRvb2xzXG4gICAgLm1hcCgodG9vbCkgPT4ge1xuICAgICAgY29uc3Qgc2NoZW1hID0gSlNPTi5zdHJpbmdpZnkodG9vbC5pbnB1dFNjaGVtYSk7XG4gICAgICByZXR1cm4gYC0gJHt0b29sLm5hbWV9OiAke3Rvb2wuZGVzY3JpcHRpb24gPz8gXCJcIn1cXG4gIGlucHV0U2NoZW1hOiAke3NjaGVtYX1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCJcXG5cIik7XG5cbiAgY29uc3Qgbm9ybWFsaXplZEFuc3dlclNjaGVtYSA9XG4gICAgYW5zd2VyU2NoZW1hID09PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiByZWJhc2VVc2VyT3V0cHV0U2NoZW1hKGFuc3dlclNjaGVtYSk7XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgIGRlc2NyaXB0aW9uOlxuICAgICAgXCJSZXR1cm4gZXhhY3RseSBvbmUgSlNPTiBvYmplY3QgbWF0Y2hpbmcgdGhpcyBzY2hlbWEgYXMgeW91ciBmaW5hbCByZXNwb25zZSwgaW5jbHVkaW5nIHdoZW4gcmVxdWVzdGluZyBhIHRvb2wuIFRoaXMgb2JqZWN0IGlzIHRoZSByZXNwb25zZSBib2R5LCBub3QgYSBjYWxsIHRvIGEgYnVpbHQtaW4gdG9vbC4gVG8gcmVxdWVzdCBjbGllbnQtc2lkZSB0b29scywgc2V0IHJlc3VsdC5hY3Rpb24gdG8gdG9vbF9jYWxsIGFuZCBpbmNsdWRlIHJlc3VsdC50b29sQ2FsbHMsIHRoZW4gZW5kIHlvdXIgdHVybi4gVGhlIGNsaWVudCBleGVjdXRlcyB0aG9zZSB0b29scyBhbmQgc3VwcGxpZXMgdGhlaXIgcmVzdWx0cyBpbiBhIGxhdGVyIHJlcXVlc3QuIERvIG5vdCBpbnZlbnQgdG9vbCByZXN1bHRzIG9yIGVtaXQgYW4gYW5zd2VyIGJlZm9yZSByZWNlaXZpbmcgdGhlIHJlcXVpcmVkIHJlc3VsdHMuXCIsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgcmVzdWx0OiB7XG4gICAgICAgIGFueU9mOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIkZpbmFsIGFuc3dlci4gVXNlIG9ubHkgd2hlbiBubyBmdXJ0aGVyIGNsaWVudCB0b29sIHJlc3VsdCBpcyBuZWVkZWQuXCIsXG4gICAgICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgICAgIGFjdGlvbjogeyB0eXBlOiBcInN0cmluZ1wiLCBlbnVtOiBbXCJhbnN3ZXJcIl0gfSxcbiAgICAgICAgICAgICAgYW5zd2VyOlxuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRBbnN3ZXJTY2hlbWEgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgICAgICAgPyB7IHR5cGU6IFwic3RyaW5nXCIgfVxuICAgICAgICAgICAgICAgICAgOiB7ICRyZWY6IFVTRVJfT1VUUFVUX1JFRiB9LFxuICAgICAgICAgICAgICB0b29sQ2FsbHM6IHsgdHlwZTogXCJudWxsXCIgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogW1wiYWN0aW9uXCIsIFwiYW5zd2VyXCIsIFwidG9vbENhbGxzXCJdLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogXCJvYmplY3RcIixcbiAgICAgICAgICAgIGRlc2NyaXB0aW9uOlxuICAgICAgICAgICAgICBcIlJlcXVlc3QgY2xpZW50LXNpZGUgdG9vbCBleGVjdXRpb24uIFJldHVybiB0aGlzIG9iamVjdCBhcyB0aGUgY29tcGxldGUgcmVzcG9uc2UsIHRoZW4gd2FpdCBmb3IgdGhlIG5leHQgcmVxdWVzdCBjb250YWluaW5nIHRvb2wgcmVzdWx0cy5cIixcbiAgICAgICAgICAgIHByb3BlcnRpZXM6IHtcbiAgICAgICAgICAgICAgYWN0aW9uOiB7IHR5cGU6IFwic3RyaW5nXCIsIGVudW06IFtcInRvb2xfY2FsbFwiXSB9LFxuICAgICAgICAgICAgICBhbnN3ZXI6IHsgdHlwZTogXCJudWxsXCIgfSxcbiAgICAgICAgICAgICAgdG9vbENhbGxzOiB7XG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgIG1pbkl0ZW1zOiAxLFxuICAgICAgICAgICAgICAgIGl0ZW1zOiB7XG4gICAgICAgICAgICAgICAgICB0eXBlOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgICAgICAgICAgICB0b29sTmFtZToge1xuICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgZW51bTogdG9vbHMubWFwKCh0b29sKSA9PiB0b29sLm5hbWUpLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBgQ2xpZW50LXNpZGUgdG9vbCBuYW1lLiBUaGUgY2FsbGVyIGV4ZWN1dGVzIHRoZXNlIHRvb2xzIGFmdGVyIHJlY2VpdmluZyB5b3VyIEpTT04gcmVzcG9uc2UuXFxuJHt0b29sRGVzY3JpcHRpb25zfWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIGFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBcIlRvb2wgYXJndW1lbnRzIGFzIGEgSlNPTiBzdHJpbmcgZm9yIHRoZSBjbGllbnQtc2lkZSB0b29sLlwiLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgIHJlcXVpcmVkOiBbXCJ0b29sTmFtZVwiLCBcImFyZ3NcIl0sXG4gICAgICAgICAgICAgICAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXF1aXJlZDogW1wiYWN0aW9uXCIsIFwiYW5zd2VyXCIsIFwidG9vbENhbGxzXCJdLFxuICAgICAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFtcInJlc3VsdFwiXSxcbiAgICBhZGRpdGlvbmFsUHJvcGVydGllczogZmFsc2UsXG4gICAgLi4uKG5vcm1hbGl6ZWRBbnN3ZXJTY2hlbWEgPT09IHVuZGVmaW5lZFxuICAgICAgPyB7fVxuICAgICAgOiB7XG4gICAgICAgICAgJGRlZnM6IHtcbiAgICAgICAgICAgIFtVU0VSX09VVFBVVF9ERUZJTklUSU9OXTogbm9ybWFsaXplZEFuc3dlclNjaGVtYSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcmViYXNlVXNlck91dHB1dFNjaGVtYShzY2hlbWE6IEpzb25WYWx1ZSk6IEpzb25WYWx1ZSB7XG4gIHJldHVybiByZXdyaXRlU2NoZW1hTm9kZShzY2hlbWEsIFwiJFwiKTtcbn1cblxuY29uc3QgTUFQX0tFWVdPUkRTID0gbmV3IFNldDxzdHJpbmc+KFNDSEVNQV9NQVBfS0VZV09SRFMpO1xuY29uc3QgQVJSQVlfS0VZV09SRFMgPSBuZXcgU2V0PHN0cmluZz4oU0NIRU1BX0FSUkFZX0tFWVdPUkRTKTtcbmNvbnN0IFNJTkdMRV9LRVlXT1JEUyA9IG5ldyBTZXQ8c3RyaW5nPihTQ0hFTUFfU0lOR0xFX0tFWVdPUkRTKTtcblxuZnVuY3Rpb24gcmV3cml0ZVNjaGVtYU5vZGUodmFsdWU6IEpzb25WYWx1ZSwgcGF0aDogc3RyaW5nKTogSnNvblZhbHVlIHtcbiAgaWYgKHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCBBcnJheS5pc0FycmF5KHZhbHVlKSkgcmV0dXJuIHZhbHVlO1xuXG4gIGNvbnN0IHNvdXJjZSA9IHZhbHVlIGFzIFJlY29yZDxzdHJpbmcsIEpzb25WYWx1ZT47XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgSnNvblZhbHVlPiA9IHsgLi4uc291cmNlIH07XG5cbiAgZm9yIChjb25zdCB1bnN1cHBvcnRlZEtleXdvcmQgb2YgVU5TVVBQT1JURURfUkVGRVJFTkNFX0tFWVdPUkRTKSB7XG4gICAgaWYgKE9iamVjdC5oYXNPd24oc291cmNlLCB1bnN1cHBvcnRlZEtleXdvcmQpKSB7XG4gICAgICB0aHJvdyBuZXcgVG9vbFNjaGVtYUNvbXBvc2l0aW9uRXJyb3IoXG4gICAgICAgIGAke3Vuc3VwcG9ydGVkS2V5d29yZH0gaXMgbm90IHN1cHBvcnRlZGAsXG4gICAgICAgIGAke3BhdGh9LiR7dW5zdXBwb3J0ZWRLZXl3b3JkfWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGlmIChcIiRyZWZcIiBpbiBzb3VyY2UpIHtcbiAgICBjb25zdCByZWYgPSBzb3VyY2UuJHJlZjtcbiAgICBpZiAodHlwZW9mIHJlZiAhPT0gXCJzdHJpbmdcIiB8fCAocmVmICE9PSBcIiNcIiAmJiAhcmVmLnN0YXJ0c1dpdGgoXCIjL1wiKSkpIHtcbiAgICAgIHRocm93IG5ldyBUb29sU2NoZW1hQ29tcG9zaXRpb25FcnJvcihcbiAgICAgICAgXCJvbmx5IHJvb3QtcmVsYXRpdmUgSlNPTiBQb2ludGVyICRyZWYgdmFsdWVzIGFyZSBzdXBwb3J0ZWRcIixcbiAgICAgICAgYCR7cGF0aH0uJHJlZmAsXG4gICAgICApO1xuICAgIH1cbiAgICByZXN1bHQuJHJlZiA9IGAke1VTRVJfT1VUUFVUX1JFRn0ke3JlZi5zbGljZSgxKX1gO1xuICB9XG5cbiAgZm9yIChjb25zdCBba2V5d29yZCwgY2hpbGRdIG9mIE9iamVjdC5lbnRyaWVzKHNvdXJjZSkpIHtcbiAgICBjb25zdCBrZXl3b3JkUGF0aCA9IGAke3BhdGh9LiR7a2V5d29yZH1gO1xuXG4gICAgaWYgKE1BUF9LRVlXT1JEUy5oYXMoa2V5d29yZCkgJiYgaXNKc29uT2JqZWN0KGNoaWxkKSkge1xuICAgICAgcmVzdWx0W2tleXdvcmRdID0gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgICAgICBPYmplY3QuZW50cmllcyhjaGlsZCkubWFwKChbbmFtZSwgc2NoZW1hXSkgPT4gW1xuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBgJHtrZXl3b3JkUGF0aH0uJHtuYW1lfWApLFxuICAgICAgICBdKSxcbiAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgIH0gZWxzZSBpZiAoa2V5d29yZCA9PT0gU0NIRU1BX0RFUEVOREVOQ0lFU19LRVlXT1JEICYmIGlzSnNvbk9iamVjdChjaGlsZCkpIHtcbiAgICAgIHJlc3VsdFtrZXl3b3JkXSA9IE9iamVjdC5mcm9tRW50cmllcyhcbiAgICAgICAgT2JqZWN0LmVudHJpZXMoY2hpbGQpLm1hcCgoW25hbWUsIGRlcGVuZGVuY3ldKSA9PiBbXG4gICAgICAgICAgbmFtZSxcbiAgICAgICAgICBBcnJheS5pc0FycmF5KGRlcGVuZGVuY3kpXG4gICAgICAgICAgICA/IGRlcGVuZGVuY3lcbiAgICAgICAgICAgIDogcmV3cml0ZVNjaGVtYU5vZGUoZGVwZW5kZW5jeSwgYCR7a2V5d29yZFBhdGh9LiR7bmFtZX1gKSxcbiAgICAgICAgXSksXG4gICAgICApIGFzIEpzb25WYWx1ZTtcbiAgICB9IGVsc2UgaWYgKEFSUkFZX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSAmJiBBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgcmVzdWx0W2tleXdvcmRdID0gY2hpbGQubWFwKChzY2hlbWEsIGluZGV4KSA9PlxuICAgICAgICByZXdyaXRlU2NoZW1hTm9kZShzY2hlbWEsIGAke2tleXdvcmRQYXRofVske2luZGV4fV1gKSxcbiAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgIH0gZWxzZSBpZiAoU0lOR0xFX0tFWVdPUkRTLmhhcyhrZXl3b3JkKSkge1xuICAgICAgaWYgKGtleXdvcmQgPT09IFwiaXRlbXNcIiAmJiBBcnJheS5pc0FycmF5KGNoaWxkKSkge1xuICAgICAgICByZXN1bHRba2V5d29yZF0gPSBjaGlsZC5tYXAoKHNjaGVtYSwgaW5kZXgpID0+XG4gICAgICAgICAgcmV3cml0ZVNjaGVtYU5vZGUoc2NoZW1hLCBgJHtrZXl3b3JkUGF0aH1bJHtpbmRleH1dYCksXG4gICAgICAgICkgYXMgSnNvblZhbHVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0W2tleXdvcmRdID0gcmV3cml0ZVNjaGVtYU5vZGUoY2hpbGQsIGtleXdvcmRQYXRoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0IGFzIEpzb25WYWx1ZTtcbn1cblxuZnVuY3Rpb24gaXNKc29uT2JqZWN0KHZhbHVlOiBKc29uVmFsdWUpOiB2YWx1ZSBpcyBSZWNvcmQ8c3RyaW5nLCBKc29uVmFsdWU+IHtcbiAgcmV0dXJuIHZhbHVlICE9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAhQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7O0FBdUJBLE1BQU0seUJBQXlCO0FBQy9CLE1BQU0sa0JBQWtCLFdBQVc7QUFFbkMsSUFBYSw2QkFBYixjQUFnRCxNQUFNO0NBRzNDO0NBRlQsWUFDRSxTQUNBLE1BQ0E7RUFDQSxNQUFNLDRCQUE0QixRQUFRLE9BQU8sS0FBSyxFQUFFO0VBRmpELEtBQUEsT0FBQTtFQUdQLEtBQUssT0FBTztDQUNkO0FBQ0Y7QUFRQSxTQUFnQixvQkFBb0IsT0FBb0IsY0FBcUM7Q0FDM0YsTUFBTSxtQkFBbUIsTUFDdEIsS0FBSyxTQUFTO0VBQ2IsTUFBTSxTQUFTLEtBQUssVUFBVSxLQUFLLFdBQVc7RUFDOUMsT0FBTyxLQUFLLEtBQUssS0FBSyxJQUFJLEtBQUssZUFBZSxHQUFHLG1CQUFtQjtDQUN0RSxDQUFDLENBQUMsQ0FDRCxLQUFLLElBQUk7Q0FFWixNQUFNLHlCQUNKLGlCQUFpQixTQUFZLFNBQVksdUJBQXVCLFlBQVk7Q0FFOUUsT0FBTztFQUNMLE1BQU07RUFDTixhQUNFO0VBQ0YsWUFBWSxFQUNWLFFBQVEsRUFDTixPQUFPLENBQ0w7R0FDRSxNQUFNO0dBQ04sYUFBYTtHQUNiLFlBQVk7SUFDVixRQUFRO0tBQUUsTUFBTTtLQUFVLE1BQU0sQ0FBQyxRQUFRO0lBQUU7SUFDM0MsUUFDRSwyQkFBMkIsU0FDdkIsRUFBRSxNQUFNLFNBQVMsSUFDakIsRUFBRSxNQUFN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
@@ -38,6 +38,18 @@ function applyToolCallEmulation(result, tools, options) {
38
38
  if (parsed.action === "tool_call") return toolCallOutput(result, parsed.toolCalls, images, runContext);
39
39
  return answerOutput(result, answerKind === "text" ? parsed.answer : JSON.stringify(parsed.answer), images, runContext);
40
40
  }
41
+ function isToolCallEnvelope(text, tools, answerKind, phase) {
42
+ if (phase === "commentary") {
43
+ let value;
44
+ try {
45
+ value = JSON.parse(text);
46
+ } catch {
47
+ return false;
48
+ }
49
+ if (!value || typeof value !== "object" || !("result" in value) || !value.result || typeof value.result !== "object" || !("action" in value.result) || value.result.action !== "tool_call") return false;
50
+ }
51
+ return parseEnvelope(text, tools, answerKind).action === "tool_call";
52
+ }
41
53
  function parseEnvelope(text, tools, answerKind) {
42
54
  if (Buffer.byteLength(text, "utf8") > STRUCTURED_ENVELOPE_LIMITS.maxUtf8Bytes) throw new ToolCallEmulationError(`tool envelope exceeds UTF-8 byte limit of ${STRUCTURED_ENVELOPE_LIMITS.maxUtf8Bytes}`);
43
55
  let value;
@@ -125,6 +137,6 @@ function assertStructuredEnvelopeComplexity(root) {
125
137
  }
126
138
  }
127
139
  //#endregion
128
- export { ToolCallEmulationError, applyToolCallEmulation };
140
+ export { ToolCallEmulationError, applyToolCallEmulation, isToolCallEnvelope };
129
141
 
130
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rvb2wtZW11bGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJub2RlOmJ1ZmZlclwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLy8g7J2R64u1KOuqqOuNuCDstpzroKUpIGVudmVsb3BlIOydmCDsnpDsm5Ag7ZWc64+ELiBjYWxsZXIg7Iqk7YKk66eIIOyghOyymOumrCDtlZzrj4QoQ0FMTEVSX1NDSEVNQV9MSU1JVFMp7JmAIOqwkuydtFxuLy8g6rCZ7JWEIOuztOyXrOuPhCDshJzroZwg64uk66W4IOyekOybkOydhCDsp4DtgqTripQg64+F66a9IOyDgeyImOuLpCDigJQg7Iqk7YKk66eIIOq5iuydtOuKlCDsnbjsiqTthLTsiqQg6rmK7J2066W8IGJvdW5kIO2VmOyngFxuLy8g7JWK7Jy866+A66GcKOyerOq3gCAkcmVmIO2XiOyaqSkg7LqY65+sIO2VnOuPhOulvCDsobDsoJXtlbTrj4Qg7J2R64u1IOyImOyaqSDquLDspIDsnbQg65Sw6528IOybgOyngeyXrOyEoCDslYgg65Cc64ukLlxuY29uc3QgU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMgPSB7XG4gIG1heFV0ZjhCeXRlczogNTEyICogMTAyNCxcbiAgbWF4Tm9kZXM6IDIwXzAwMCxcbiAgbWF4RGVwdGg6IDEzMixcbn0gYXMgY29uc3Q7XG5pbXBvcnQge1xuICB0eXBlIEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhLFxuICB0eXBlIFFncmlkQ29udGVudCxcbiAgdHlwZSBRZ3JpZFRocmVhZENvb3JkLFxuICB0eXBlIFFncmlkVG9vbCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9vbC1lbXVsYXRpb25cIl0pO1xuXG50eXBlIEVtdWxhdGlvblJlc3VsdCA9IE9taXQ8UXVlcnlPdXRwdXQsIFwiY29udGVudFwiIHwgXCJmaW5pc2hSZWFzb25cIiB8IFwicnVuQ29udGV4dFwiPjtcbnR5cGUgVG9vbENhbGwgPSB7IHRvb2xOYW1lOiBzdHJpbmc7IGFyZ3M6IHN0cmluZyB9O1xuXG4vLyBlbnZlbG9wZSDripQge3Jlc3VsdDogPHVuaW9uPn0g7ZWcIOqyuSDqtazsobAg4oCUIOyKpO2CpOuniCDqt7zqsbDripQgdG9vbC1lbXVsYXRpb24tc2NoZW1hLnRzIOywuOyhsC5cbi8vIGFuc3dlciDtg4DsnoXrp4wg7JqU7LKtIO2Yle2DnOyXkCDrlLDrnbwg64uk66W064ukOiB0b29scy1vbmx5IOuKlCBzdHJpbmco6re464yA66GcIOuwmO2ZmCksXG4vLyB0b29scytqc29uU2NoZW1hIOuKlCDsgqzsmqnsnpAg7Iqk7YKk66eI7J2YIEpTT04g6rCSKEpTT04uc3RyaW5naWZ5IOuhnCDrsJjtmZgpLlxuZnVuY3Rpb24gYnVpbGRFbnZlbG9wZVNjaGVtYShhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kKSB7XG4gIHJldHVybiB6LnN0cmljdE9iamVjdCh7XG4gICAgcmVzdWx0OiB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcImFjdGlvblwiLCBbXG4gICAgICB6LnN0cmljdE9iamVjdCh7XG4gICAgICAgIGFjdGlvbjogei5saXRlcmFsKFwiYW5zd2VyXCIpLFxuICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgYW5zd2VyS2luZCA9PT0gXCJ0ZXh0XCJcbiAgICAgICAgICAgID8gei5zdHJpbmcoKVxuICAgICAgICAgICAgOiB6Lmpzb24oKS5yZWZpbmUoKGFuc3dlcikgPT4gYW5zd2VyICE9PSBudWxsLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogXCJhbnN3ZXIgbXVzdCBiZSBub24tbnVsbFwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgdG9vbENhbGxzOiB6Lm51bGwoKSxcbiAgICAgIH0pLFxuICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICBhY3Rpb246IHoubGl0ZXJhbChcInRvb2xfY2FsbFwiKSxcbiAgICAgICAgYW5zd2VyOiB6Lm51bGwoKSxcbiAgICAgICAgdG9vbENhbGxzOiB6XG4gICAgICAgICAgLmFycmF5KFxuICAgICAgICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICAgICAgICB0b29sTmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgICAgYXJnczogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWluKDEpLFxuICAgICAgfSksXG4gICAgXSksXG4gIH0pO1xufVxuXG5jb25zdCBURVhUX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcInRleHRcIik7XG5jb25zdCBKU09OX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcImpzb25cIik7XG50eXBlIEVudmVsb3BlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBKU09OX0VOVkVMT1BFPltcInJlc3VsdFwiXTtcblxuZXhwb3J0IGNsYXNzIFRvb2xDYWxsRW11bGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGB0b29sLWNhbGwgZW11bGF0aW9uOiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJUb29sQ2FsbEVtdWxhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuLy8gUHJlc2VydmUgaW1hZ2UgYnl0ZXMgYW5kIHRoZSBwcm92aWRlcidzIHJlc29sdmVkIE1JTUUgdHlwZS5cbmludGVyZmFjZSBFbXVsYXRpb25JbWFnZSB7XG4gIGRhdGE6IHN0cmluZztcbiAgbWVkaWFUeXBlPzogRXh0cmFjdDxRZ3JpZENvbnRlbnQsIHsgdHlwZTogXCJpbWFnZVwiIH0+W1wibWVkaWFUeXBlXCJdO1xuICByZXZpc2VkUHJvbXB0Pzogc3RyaW5nIHwgbnVsbDtcbiAgZ2VuZXJhdGlvbj86IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhO1xufVxuXG4vLyBhbnN3ZXIg7J247L2U65SpIOyiheulmC4gZW52ZWxvcGUg65SU7L2U642U64qUIO2VnCDrsozsnbTqs6Ag7J20IOqwkuydgCBhbnN3ZXIg67iM656c7LmY7J2YIO2DgOyeheqzvFxuLy8g7LWc7KKFIOyngeugrO2ZlCh0ZXh0OiDqt7jrjIDroZwgLyBqc29uOiBKU09OLnN0cmluZ2lmeSnrp4wg6rCA66W464ukLlxuZXhwb3J0IHR5cGUgQW5zd2VyS2luZCA9IFwidGV4dFwiIHwgXCJqc29uXCI7XG5cbmludGVyZmFjZSBUb29sQ2FsbEVtdWxhdGlvbk9wdGlvbnMge1xuICB0aHJlYWRDb29yZD86IFFncmlkVGhyZWFkQ29vcmQ7XG4gIGltYWdlcz86IEVtdWxhdGlvbkltYWdlW107XG4gIC8vIO2VhOyImDog7Zi47Lac67aA6rCAIGFuc3dlciDsnbjsvZTrlKnsnYQg7ZWt7IOBIOuqheyLnO2VtOyVvCDtlZzri6QgKGlucHV0Lmpzb25TY2hlbWEg7Jyg66y066GcIO2MkOyglSkuXG4gIGFuc3dlcktpbmQ6IEFuc3dlcktpbmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVRvb2xDYWxsRW11bGF0aW9uKFxuICByZXN1bHQ6IEVtdWxhdGlvblJlc3VsdCxcbiAgdG9vbHM6IFFncmlkVG9vbFtdIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBUb29sQ2FsbEVtdWxhdGlvbk9wdGlvbnMsXG4pOiBRdWVyeU91dHB1dCB7XG4gIGNvbnN0IHsgdGhyZWFkQ29vcmQsIGltYWdlcywgYW5zd2VyS2luZCB9ID0gb3B0aW9ucztcbiAgY29uc3QgcnVuQ29udGV4dCA9IHRocmVhZENvb3JkID8geyB0aHJlYWRDb29yZCB9IDogdW5kZWZpbmVkO1xuXG4gIGlmICghdG9vbHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBhbnN3ZXJPdXRwdXQocmVzdWx0LCByZXN1bHQudGV4dCwgaW1hZ2VzLCBydW5Db250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRW52ZWxvcGUocmVzdWx0LnRleHQsIHRvb2xzLCBhbnN3ZXJLaW5kKTtcbiAgaWYgKHBhcnNlZC5hY3Rpb24gPT09IFwidG9vbF9jYWxsXCIpIHtcbiAgICByZXR1cm4gdG9vbENhbGxPdXRwdXQocmVzdWx0LCBwYXJzZWQudG9vbENhbGxzLCBpbWFnZXMsIHJ1bkNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlck91dHB1dChcbiAgICByZXN1bHQsXG4gICAgYW5zd2VyS2luZCA9PT0gXCJ0ZXh0XCIgPyAocGFyc2VkLmFuc3dlciBhcyBzdHJpbmcpIDogSlNPTi5zdHJpbmdpZnkocGFyc2VkLmFuc3dlciksXG4gICAgaW1hZ2VzLFxuICAgIHJ1bkNvbnRleHQsXG4gICk7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW52ZWxvcGUodGV4dDogc3RyaW5nLCB0b29sczogUWdyaWRUb29sW10sIGFuc3dlcktpbmQ6IEFuc3dlcktpbmQpIHtcbiAgaWYgKEJ1ZmZlci5ieXRlTGVuZ3RoKHRleHQsIFwidXRmOFwiKSA+IFNUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heFV0ZjhCeXRlcykge1xuICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFxuICAgICAgYHRvb2wgZW52ZWxvcGUgZXhjZWVkcyBVVEYtOCBieXRlIGxpbWl0IG9mICR7U1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4VXRmOEJ5dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIGxldCB2YWx1ZTogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB2YWx1ZSA9IEpTT04ucGFyc2UodGV4dCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8g6rSA7JqpIO2PtOuwsSDsl4bsnYwuIG9wZW5haSDripQgZW52ZWxvcGUg7J20IHN0cnVjdHVyZWQgb3V0cHV0IOycvOuhnCDqsJXsoJzrkJjrr4DroZwg7Jes6riwIOuPhOuLrO2VnFxuICAgIC8vIOu5hCBKU09OIOydgCDrsoTqt7jri6QuIGFudGhyb3BpYyDsnYAg6rOE7JW97J2EIO2UhOuhrO2UhO2KuOuhnOunjCDslYjrgrTtlZjrr4DroZwoU09OLTUzMikg67mEIEpTT04g7J20XG4gICAgLy8gXCLsmIjsg4Eg6rCA64ql7ZWcIOuqqOuNuCDsi6TtjKhcIuyngOunjCwg6re4656Y64+EIOq1rOygnO2VmOyngCDslYrripTri6Qg4oCUIOqzvOqxsOydmCDthY3siqTtirgg6rWs7KCc64qUIO2HtO2ZlFxuICAgIC8vIOu0ie2IrOulvCDri7Xrs4DsnLzroZwg7Z2Y66Ck67O064K0IOyhsOyaqe2VnCDsmKTsl7zsnYQg66eM65Ok7JeI64ukKDIwMjYtMDcgbWVkcGF0aCwgMTMuNWsg6rG0KS5cbiAgICAvLyDsoJXsp4HtlZwg7Iuk7Yyo6rCAIOuztOyXrOyVvCDshozruYTsnpDqsIAg7J6s7Iuc64+E7ZWY6rGw64KYIOq3vOuzuCDsm5DsnbjsnYQg6rOg7Lmc64ukLlxuICAgIC8vIOynhOuLqOyXkOuKlCDsnITrsJgg7JuQ66y47J2YIOuouOumrOqwgCDtlYTsmpTtlZjri6QoU09OLTQ5NSDsoITroYApIOKAlCBwYXJzZSDsl5Drn6wg7JyE7LmY66eM7Jy866Gc64qUXG4gICAgLy8gXCLtlITroZzspojroZwg64u17ZaI64qU7KeAIC8g7Y6c7Iqk6rCAIOuCqOyVmOuKlOyngCAvIEpTT04g7J20IOyemOuguOuKlOyngFwi66W8IOq1rOu2hO2VoCDsiJgg7JeG64ukLlxuICAgIGNvbnN0IGhlYWQgPSBKU09OLnN0cmluZ2lmeSh0ZXh0LnNsaWNlKDAsIDIwMCkpO1xuICAgIGxvZ2dlci53YXJuKGB0b29sIGVudmVsb3BlIHBhcnNlIGZhaWxlZDogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9OyBoZWFkPSR7aGVhZH1gKTtcbiAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgIGBpbnZhbGlkIHRvb2wgZW52ZWxvcGUgKHJlc3BvbnNlIGlzIG5vdCBKU09OIOKAlCB0aGUgbW9kZWwgaWdub3JlZCB0aGUgZW52ZWxvcGUgY29udHJhY3Q7IHJldHJ5IGlzIHRoZSBjYWxsZXIncyBkZWNpc2lvbik6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfTsgcmVzcG9uc2UgaGVhZDogJHtoZWFkfWAsXG4gICAgKTtcbiAgfVxuXG4gIGFzc2VydFN0cnVjdHVyZWRFbnZlbG9wZUNvbXBsZXhpdHkodmFsdWUpO1xuICBjb25zdCBzY2hlbWEgPSBhbnN3ZXJLaW5kID09PSBcInRleHRcIiA/IFRFWFRfRU5WRUxPUEUgOiBKU09OX0VOVkVMT1BFO1xuICBjb25zdCB2YWxpZGF0aW9uID0gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSk7XG4gIGlmICghdmFsaWRhdGlvbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgaXNzdWUgPSB2YWxpZGF0aW9uLmVycm9yLmlzc3Vlc1swXTtcbiAgICBjb25zdCBwYXRoID0gaXNzdWUgJiYgaXNzdWUucGF0aC5sZW5ndGggPiAwID8gYCBhdCAke2lzc3VlLnBhdGguam9pbihcIi5cIil9YCA6IFwiXCI7XG4gICAgY29uc3QgZGV0YWlsID0gaXNzdWU/Lm1lc3NhZ2UgPz8gXCJ1bmtub3duIHZhbGlkYXRpb24gaXNzdWVcIjtcbiAgICAvLyB2YWxpZCBKU09OIOydtOyngOunjCDqs4Tslb0g7JyE67CY7J24IOqyveyasOyXkOuPhCDsm5DrrLgg66i466as66W8IOuCqOq4tOuLpCDigJQgem9kIOqyveuhnOunjOycvOuhnOuKlFxuICAgIC8vIFwi7YKkIOyDneueteyduOyngCAvIOuemO2NvOuhnCDqsJDsjIzripTsp4AgLyDtg4DsnoXsnbQg7YuA66C464qU7KeAXCLsnZgg7Iuk66y87J2EIOuzvCDsiJgg7JeG64ukLlxuICAgIGNvbnN0IGhlYWQgPSBKU09OLnN0cmluZ2lmeSh0ZXh0LnNsaWNlKDAsIDIwMCkpO1xuICAgIGxvZ2dlci53YXJuKGB0b29sIGVudmVsb3BlIHZhbGlkYXRpb24gZmFpbGVkJHtwYXRofTogJHtkZXRhaWx9OyBoZWFkPSR7aGVhZH1gKTtcbiAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgIGBpbnZhbGlkIHRvb2wgZW52ZWxvcGUke3BhdGh9OiAke2RldGFpbH07IHJlc3BvbnNlIGhlYWQ6ICR7aGVhZH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBab2QgY2xvbmVzIEpTT04gb2JqZWN0cyBhbmQgZHJvcHMgb3duIFwiX19wcm90b19fXCIga2V5cy4gVGhlIHBhcnNlZCBKU09OIGlzIHNhZmUgdG8gcmV0dXJuXG4gIC8vIGFmdGVyIHZhbGlkYXRpb24gYW5kIHByZXNlcnZlcyB0aGUgY2FsbGVyJ3MgZXhhY3Qgc3RydWN0dXJlZCB2YWx1ZS5cbiAgY29uc3QgcmVzcG9uc2UgPSAodmFsdWUgYXMgeyByZXN1bHQ6IEVudmVsb3BlUmVzcG9uc2UgfSkucmVzdWx0O1xuICBpZiAocmVzcG9uc2UuYWN0aW9uID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgY29uc3QgdW5rbm93blRvb2wgPSBmaW5kVW5rbm93blRvb2wocmVzcG9uc2UudG9vbENhbGxzLCB0b29scyk7XG4gICAgaWYgKHVua25vd25Ub29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKGB1bmtub3duIGVtdWxhdGVkIHRvb2w6ICR7dW5rbm93blRvb2x9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gdG9vbENhbGxPdXRwdXQoXG4gIHJlc3VsdDogRW11bGF0aW9uUmVzdWx0LFxuICB0b29sQ2FsbHM6IFRvb2xDYWxsW10sXG4gIGltYWdlczogRW11bGF0aW9uSW1hZ2VbXSB8IHVuZGVmaW5lZCxcbiAgcnVuQ29udGV4dDogUXVlcnlPdXRwdXRbXCJydW5Db250ZXh0XCJdLFxuKTogUXVlcnlPdXRwdXQge1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICBjb250ZW50OiBhcHBlbmRJbWFnZXMoXG4gICAgICB0b29sQ2FsbHMubWFwKCh0b29sQ2FsbCkgPT4gKHtcbiAgICAgICAgdHlwZTogXCJ0b29sLWNhbGxcIixcbiAgICAgICAgdG9vbENhbGxJZDogYGNhbGxfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCl9YCxcbiAgICAgICAgdG9vbE5hbWU6IHRvb2xDYWxsLnRvb2xOYW1lLFxuICAgICAgICBpbnB1dDogdG9vbENhbGwuYXJncyxcbiAgICAgIH0pKSxcbiAgICAgIGltYWdlcyxcbiAgICApLFxuICAgIGZpbmlzaFJlYXNvbjogXCJ0b29sLWNhbGxzXCIsXG4gICAgcnVuQ29udGV4dCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYW5zd2VyT3V0cHV0KFxuICByZXN1bHQ6IEVtdWxhdGlvblJlc3VsdCxcbiAgdGV4dDogc3RyaW5nLFxuICBpbWFnZXM6IEVtdWxhdGlvbkltYWdlW10gfCB1bmRlZmluZWQsXG4gIHJ1bkNvbnRleHQ6IFF1ZXJ5T3V0cHV0W1wicnVuQ29udGV4dFwiXSxcbik6IFF1ZXJ5T3V0cHV0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN1bHQsXG4gICAgdGV4dCxcbiAgICBjb250ZW50OiBhcHBlbmRJbWFnZXMoW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQgfV0sIGltYWdlcyksXG4gICAgZmluaXNoUmVhc29uOiBcInN0b3BcIixcbiAgICBydW5Db250ZXh0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kVW5rbm93blRvb2wodG9vbENhbGxzOiBUb29sQ2FsbFtdLCB0b29sczogUWdyaWRUb29sW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBrbm93blRvb2xOYW1lcyA9IG5ldyBTZXQodG9vbHMubWFwKCh0b29sKSA9PiB0b29sLm5hbWUpKTtcbiAgcmV0dXJuIHRvb2xDYWxscy5maW5kKCh0b29sQ2FsbCkgPT4gIWtub3duVG9vbE5hbWVzLmhhcyh0b29sQ2FsbC50b29sTmFtZSkpPy50b29sTmFtZTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kSW1hZ2VzKGNvbnRlbnQ6IFFncmlkQ29udGVudFtdLCBpbWFnZXM/OiBFbXVsYXRpb25JbWFnZVtdKTogUWdyaWRDb250ZW50W10ge1xuICBpZiAoIWltYWdlcz8ubGVuZ3RoKSByZXR1cm4gY29udGVudDtcbiAgcmV0dXJuIFtcbiAgICAuLi5jb250ZW50LFxuICAgIC4uLmltYWdlcy5tYXAoXG4gICAgICAoaW1hZ2UpOiBRZ3JpZENvbnRlbnQgPT4gKHtcbiAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxuICAgICAgICBkYXRhOiBpbWFnZS5kYXRhLFxuICAgICAgICAuLi4oaW1hZ2UubWVkaWFUeXBlID8geyBtZWRpYVR5cGU6IGltYWdlLm1lZGlhVHlwZSB9IDoge30pLFxuICAgICAgICByZXZpc2VkUHJvbXB0OiBpbWFnZS5yZXZpc2VkUHJvbXB0ID8/IG51bGwsXG4gICAgICAgIC4uLihpbWFnZS5nZW5lcmF0aW9uID8geyBnZW5lcmF0aW9uOiBpbWFnZS5nZW5lcmF0aW9uIH0gOiB7fSksXG4gICAgICB9KSxcbiAgICApLFxuICBdO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTdHJ1Y3R1cmVkRW52ZWxvcGVDb21wbGV4aXR5KHJvb3Q6IHVua25vd24pOiB2b2lkIHtcbiAgY29uc3QgbWF4RGVwdGggPSBTVFJVQ1RVUkVEX0VOVkVMT1BFX0xJTUlUUy5tYXhEZXB0aDtcbiAgY29uc3Qgc3RhY2sgPSBbeyB2YWx1ZTogcm9vdCwgZGVwdGg6IDAgfV07XG4gIGxldCBub2RlcyA9IDA7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhY2sucG9wKCkhO1xuICAgIG5vZGVzICs9IDE7XG4gICAgaWYgKG5vZGVzID4gU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4Tm9kZXMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFxuICAgICAgICBgc3RydWN0dXJlZC1vdXRwdXQgZW52ZWxvcGUgZXhjZWVkcyBub2RlIGxpbWl0IG9mICR7U1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4Tm9kZXN9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjdXJyZW50LmRlcHRoID4gbWF4RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFxuICAgICAgICBgc3RydWN0dXJlZC1vdXRwdXQgZW52ZWxvcGUgZXhjZWVkcyBkZXB0aCBsaW1pdCBvZiAke21heERlcHRofWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGN1cnJlbnQudmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIU51bWJlci5pc0Zpbml0ZShjdXJyZW50LnZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xDYWxsRW11bGF0aW9uRXJyb3IoXCJhbnN3ZXIgbXVzdCBiZSB2YWxpZCBKU09OXCIpO1xuICAgIH1cbiAgICBpZiAoY3VycmVudC52YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgY3VycmVudC52YWx1ZSAhPT0gXCJvYmplY3RcIikgY29udGludWU7XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoY3VycmVudC52YWx1ZSkpIHtcbiAgICAgIHN0YWNrLnB1c2goeyB2YWx1ZSwgZGVwdGg6IGN1cnJlbnQuZGVwdGggKyAxIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBUUEsTUFBTSw2QkFBNkI7Q0FDakMsY0FBYyxNQUFNO0NBQ3BCLFVBQVU7Q0FDVixVQUFVO0FBQ1o7QUFTQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZ0JBQWdCLENBQUM7QUFRcEQsU0FBUyxvQkFBb0IsWUFBd0I7Q0FDbkQsT0FBTyxFQUFFLGFBQWEsRUFDcEIsUUFBUSxFQUFFLG1CQUFtQixVQUFVLENBQ3JDLEVBQUUsYUFBYTtFQUNiLFFBQVEsRUFBRSxRQUFRLFFBQVE7RUFDMUIsUUFDRSxlQUFlLFNBQ1gsRUFBRSxP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
142
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC1lbXVsYXRpb24uanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3FncmlkL3Rvb2wtZW11bGF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJ1ZmZlciB9IGZyb20gXCJub2RlOmJ1ZmZlclwiO1xuXG5pbXBvcnQgeyBnZXRMb2dnZXIgfSBmcm9tIFwiQGxvZ3RhcGUvbG9ndGFwZVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcblxuLy8g7J2R64u1KOuqqOuNuCDstpzroKUpIGVudmVsb3BlIOydmCDsnpDsm5Ag7ZWc64+ELiBjYWxsZXIg7Iqk7YKk66eIIOyghOyymOumrCDtlZzrj4QoQ0FMTEVSX1NDSEVNQV9MSU1JVFMp7JmAIOqwkuydtFxuLy8g6rCZ7JWEIOuztOyXrOuPhCDshJzroZwg64uk66W4IOyekOybkOydhCDsp4DtgqTripQg64+F66a9IOyDgeyImOuLpCDigJQg7Iqk7YKk66eIIOq5iuydtOuKlCDsnbjsiqTthLTsiqQg6rmK7J2066W8IGJvdW5kIO2VmOyngFxuLy8g7JWK7Jy866+A66GcKOyerOq3gCAkcmVmIO2XiOyaqSkg7LqY65+sIO2VnOuPhOulvCDsobDsoJXtlbTrj4Qg7J2R64u1IOyImOyaqSDquLDspIDsnbQg65Sw6528IOybgOyngeyXrOyEoCDslYgg65Cc64ukLlxuY29uc3QgU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMgPSB7XG4gIG1heFV0ZjhCeXRlczogNTEyICogMTAyNCxcbiAgbWF4Tm9kZXM6IDIwXzAwMCxcbiAgbWF4RGVwdGg6IDEzMixcbn0gYXMgY29uc3Q7XG5pbXBvcnQge1xuICB0eXBlIEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhLFxuICB0eXBlIFFncmlkQ29udGVudCxcbiAgdHlwZSBRZ3JpZFRocmVhZENvb3JkLFxuICB0eXBlIFFncmlkVG9vbCxcbiAgdHlwZSBRdWVyeU91dHB1dCxcbn0gZnJvbSBcIi4vcWdyaWQudHlwZXNcIjtcblxuY29uc3QgbG9nZ2VyID0gZ2V0TG9nZ2VyKFtcInFncmlkXCIsIFwidG9vbC1lbXVsYXRpb25cIl0pO1xuXG50eXBlIEVtdWxhdGlvblJlc3VsdCA9IE9taXQ8UXVlcnlPdXRwdXQsIFwiY29udGVudFwiIHwgXCJmaW5pc2hSZWFzb25cIiB8IFwicnVuQ29udGV4dFwiPjtcbnR5cGUgVG9vbENhbGwgPSB7IHRvb2xOYW1lOiBzdHJpbmc7IGFyZ3M6IHN0cmluZyB9O1xuXG4vLyBlbnZlbG9wZSDripQge3Jlc3VsdDogPHVuaW9uPn0g7ZWcIOqyuSDqtazsobAg4oCUIOyKpO2CpOuniCDqt7zqsbDripQgdG9vbC1lbXVsYXRpb24tc2NoZW1hLnRzIOywuOyhsC5cbi8vIGFuc3dlciDtg4DsnoXrp4wg7JqU7LKtIO2Yle2DnOyXkCDrlLDrnbwg64uk66W064ukOiB0b29scy1vbmx5IOuKlCBzdHJpbmco6re464yA66GcIOuwmO2ZmCksXG4vLyB0b29scytqc29uU2NoZW1hIOuKlCDsgqzsmqnsnpAg7Iqk7YKk66eI7J2YIEpTT04g6rCSKEpTT04uc3RyaW5naWZ5IOuhnCDrsJjtmZgpLlxuZnVuY3Rpb24gYnVpbGRFbnZlbG9wZVNjaGVtYShhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kKSB7XG4gIHJldHVybiB6LnN0cmljdE9iamVjdCh7XG4gICAgcmVzdWx0OiB6LmRpc2NyaW1pbmF0ZWRVbmlvbihcImFjdGlvblwiLCBbXG4gICAgICB6LnN0cmljdE9iamVjdCh7XG4gICAgICAgIGFjdGlvbjogei5saXRlcmFsKFwiYW5zd2VyXCIpLFxuICAgICAgICBhbnN3ZXI6XG4gICAgICAgICAgYW5zd2VyS2luZCA9PT0gXCJ0ZXh0XCJcbiAgICAgICAgICAgID8gei5zdHJpbmcoKVxuICAgICAgICAgICAgOiB6Lmpzb24oKS5yZWZpbmUoKGFuc3dlcikgPT4gYW5zd2VyICE9PSBudWxsLCB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZTogXCJhbnN3ZXIgbXVzdCBiZSBub24tbnVsbFwiLFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgdG9vbENhbGxzOiB6Lm51bGwoKSxcbiAgICAgIH0pLFxuICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICBhY3Rpb246IHoubGl0ZXJhbChcInRvb2xfY2FsbFwiKSxcbiAgICAgICAgYW5zd2VyOiB6Lm51bGwoKSxcbiAgICAgICAgdG9vbENhbGxzOiB6XG4gICAgICAgICAgLmFycmF5KFxuICAgICAgICAgICAgei5zdHJpY3RPYmplY3Qoe1xuICAgICAgICAgICAgICB0b29sTmFtZTogei5zdHJpbmcoKSxcbiAgICAgICAgICAgICAgYXJnczogei5zdHJpbmcoKSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIClcbiAgICAgICAgICAubWluKDEpLFxuICAgICAgfSksXG4gICAgXSksXG4gIH0pO1xufVxuXG5jb25zdCBURVhUX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcInRleHRcIik7XG5jb25zdCBKU09OX0VOVkVMT1BFID0gYnVpbGRFbnZlbG9wZVNjaGVtYShcImpzb25cIik7XG50eXBlIEVudmVsb3BlUmVzcG9uc2UgPSB6LmluZmVyPHR5cGVvZiBKU09OX0VOVkVMT1BFPltcInJlc3VsdFwiXTtcblxuZXhwb3J0IGNsYXNzIFRvb2xDYWxsRW11bGF0aW9uRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHN1cGVyKGB0b29sLWNhbGwgZW11bGF0aW9uOiAke21lc3NhZ2V9YCk7XG4gICAgdGhpcy5uYW1lID0gXCJUb29sQ2FsbEVtdWxhdGlvbkVycm9yXCI7XG4gIH1cbn1cblxuLy8gUHJlc2VydmUgaW1hZ2UgYnl0ZXMgYW5kIHRoZSBwcm92aWRlcidzIHJlc29sdmVkIE1JTUUgdHlwZS5cbmludGVyZmFjZSBFbXVsYXRpb25JbWFnZSB7XG4gIGRhdGE6IHN0cmluZztcbiAgbWVkaWFUeXBlPzogRXh0cmFjdDxRZ3JpZENvbnRlbnQsIHsgdHlwZTogXCJpbWFnZVwiIH0+W1wibWVkaWFUeXBlXCJdO1xuICByZXZpc2VkUHJvbXB0Pzogc3RyaW5nIHwgbnVsbDtcbiAgZ2VuZXJhdGlvbj86IEltYWdlR2VuZXJhdGlvbk1ldGFkYXRhO1xufVxuXG4vLyBhbnN3ZXIg7J247L2U65SpIOyiheulmC4gZW52ZWxvcGUg65SU7L2U642U64qUIO2VnCDrsozsnbTqs6Ag7J20IOqwkuydgCBhbnN3ZXIg67iM656c7LmY7J2YIO2DgOyeheqzvFxuLy8g7LWc7KKFIOyngeugrO2ZlCh0ZXh0OiDqt7jrjIDroZwgLyBqc29uOiBKU09OLnN0cmluZ2lmeSnrp4wg6rCA66W464ukLlxuZXhwb3J0IHR5cGUgQW5zd2VyS2luZCA9IFwidGV4dFwiIHwgXCJqc29uXCI7XG5cbmludGVyZmFjZSBUb29sQ2FsbEVtdWxhdGlvbk9wdGlvbnMge1xuICB0aHJlYWRDb29yZD86IFFncmlkVGhyZWFkQ29vcmQ7XG4gIGltYWdlcz86IEVtdWxhdGlvbkltYWdlW107XG4gIC8vIO2VhOyImDog7Zi47Lac67aA6rCAIGFuc3dlciDsnbjsvZTrlKnsnYQg7ZWt7IOBIOuqheyLnO2VtOyVvCDtlZzri6QgKGlucHV0Lmpzb25TY2hlbWEg7Jyg66y066GcIO2MkOyglSkuXG4gIGFuc3dlcktpbmQ6IEFuc3dlcktpbmQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhcHBseVRvb2xDYWxsRW11bGF0aW9uKFxuICByZXN1bHQ6IEVtdWxhdGlvblJlc3VsdCxcbiAgdG9vbHM6IFFncmlkVG9vbFtdIHwgdW5kZWZpbmVkLFxuICBvcHRpb25zOiBUb29sQ2FsbEVtdWxhdGlvbk9wdGlvbnMsXG4pOiBRdWVyeU91dHB1dCB7XG4gIGNvbnN0IHsgdGhyZWFkQ29vcmQsIGltYWdlcywgYW5zd2VyS2luZCB9ID0gb3B0aW9ucztcbiAgY29uc3QgcnVuQ29udGV4dCA9IHRocmVhZENvb3JkID8geyB0aHJlYWRDb29yZCB9IDogdW5kZWZpbmVkO1xuXG4gIGlmICghdG9vbHM/Lmxlbmd0aCkge1xuICAgIHJldHVybiBhbnN3ZXJPdXRwdXQocmVzdWx0LCByZXN1bHQudGV4dCwgaW1hZ2VzLCBydW5Db250ZXh0KTtcbiAgfVxuXG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlRW52ZWxvcGUocmVzdWx0LnRleHQsIHRvb2xzLCBhbnN3ZXJLaW5kKTtcbiAgaWYgKHBhcnNlZC5hY3Rpb24gPT09IFwidG9vbF9jYWxsXCIpIHtcbiAgICByZXR1cm4gdG9vbENhbGxPdXRwdXQocmVzdWx0LCBwYXJzZWQudG9vbENhbGxzLCBpbWFnZXMsIHJ1bkNvbnRleHQpO1xuICB9XG5cbiAgcmV0dXJuIGFuc3dlck91dHB1dChcbiAgICByZXN1bHQsXG4gICAgYW5zd2VyS2luZCA9PT0gXCJ0ZXh0XCIgPyAocGFyc2VkLmFuc3dlciBhcyBzdHJpbmcpIDogSlNPTi5zdHJpbmdpZnkocGFyc2VkLmFuc3dlciksXG4gICAgaW1hZ2VzLFxuICAgIHJ1bkNvbnRleHQsXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Rvb2xDYWxsRW52ZWxvcGUoXG4gIHRleHQ6IHN0cmluZyxcbiAgdG9vbHM6IFFncmlkVG9vbFtdLFxuICBhbnN3ZXJLaW5kOiBBbnN3ZXJLaW5kLFxuICBwaGFzZT86IHN0cmluZyxcbik6IGJvb2xlYW4ge1xuICBpZiAocGhhc2UgPT09IFwiY29tbWVudGFyeVwiKSB7XG4gICAgLy8gQ29tbWVudGFyeSBpcyBub3QgdGhlIHN0cnVjdHVyZWQgYW5zd2VyLiBPbmx5IGFuIGV4cGxpY2l0IHRvb2wgY29udHJvbFxuICAgIC8vIG9iamVjdCBpcyBlbGlnaWJsZSwgYW5kIHRoYXQgb2JqZWN0IG11c3Qgc3RpbGwgcGFzcyB0aGUgc3RyaWN0IHBhcnNlci5cbiAgICBsZXQgdmFsdWU6IHVua25vd247XG4gICAgdHJ5IHtcbiAgICAgIHZhbHVlID0gSlNPTi5wYXJzZSh0ZXh0KTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgIXZhbHVlIHx8XG4gICAgICB0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICEoXCJyZXN1bHRcIiBpbiB2YWx1ZSkgfHxcbiAgICAgICF2YWx1ZS5yZXN1bHQgfHxcbiAgICAgIHR5cGVvZiB2YWx1ZS5yZXN1bHQgIT09IFwib2JqZWN0XCIgfHxcbiAgICAgICEoXCJhY3Rpb25cIiBpbiB2YWx1ZS5yZXN1bHQpIHx8XG4gICAgICB2YWx1ZS5yZXN1bHQuYWN0aW9uICE9PSBcInRvb2xfY2FsbFwiXG4gICAgKVxuICAgICAgcmV0dXJuIGZhbHNlO1xuICB9XG4gIHJldHVybiBwYXJzZUVudmVsb3BlKHRleHQsIHRvb2xzLCBhbnN3ZXJLaW5kKS5hY3Rpb24gPT09IFwidG9vbF9jYWxsXCI7XG59XG5cbmZ1bmN0aW9uIHBhcnNlRW52ZWxvcGUodGV4dDogc3RyaW5nLCB0b29sczogUWdyaWRUb29sW10sIGFuc3dlcktpbmQ6IEFuc3dlcktpbmQpIHtcbiAgaWYgKEJ1ZmZlci5ieXRlTGVuZ3RoKHRleHQsIFwidXRmOFwiKSA+IFNUUlVDVFVSRURfRU5WRUxPUEVfTElNSVRTLm1heFV0ZjhCeXRlcykge1xuICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFxuICAgICAgYHRvb2wgZW52ZWxvcGUgZXhjZWVkcyBVVEYtOCBieXRlIGxpbWl0IG9mICR7U1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4VXRmOEJ5dGVzfWAsXG4gICAgKTtcbiAgfVxuXG4gIGxldCB2YWx1ZTogdW5rbm93bjtcbiAgdHJ5IHtcbiAgICB2YWx1ZSA9IEpTT04ucGFyc2UodGV4dCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgLy8g6rSA7JqpIO2PtOuwsSDsl4bsnYwuIG9wZW5haSDripQgZW52ZWxvcGUg7J20IHN0cnVjdHVyZWQgb3V0cHV0IOycvOuhnCDqsJXsoJzrkJjrr4DroZwg7Jes6riwIOuPhOuLrO2VnFxuICAgIC8vIOu5hCBKU09OIOydgCDrsoTqt7jri6QuIGFudGhyb3BpYyDsnYAg6rOE7JW97J2EIO2UhOuhrO2UhO2KuOuhnOunjCDslYjrgrTtlZjrr4DroZwoU09OLTUzMikg67mEIEpTT04g7J20XG4gICAgLy8gXCLsmIjsg4Eg6rCA64ql7ZWcIOuqqOuNuCDsi6TtjKhcIuyngOunjCwg6re4656Y64+EIOq1rOygnO2VmOyngCDslYrripTri6Qg4oCUIOqzvOqxsOydmCDthY3siqTtirgg6rWs7KCc64qUIO2HtO2ZlFxuICAgIC8vIOu0ie2IrOulvCDri7Xrs4DsnLzroZwg7Z2Y66Ck67O064K0IOyhsOyaqe2VnCDsmKTsl7zsnYQg66eM65Ok7JeI64ukKDIwMjYtMDcgbWVkcGF0aCwgMTMuNWsg6rG0KS5cbiAgICAvLyDsoJXsp4HtlZwg7Iuk7Yyo6rCAIOuztOyXrOyVvCDshozruYTsnpDqsIAg7J6s7Iuc64+E7ZWY6rGw64KYIOq3vOuzuCDsm5DsnbjsnYQg6rOg7Lmc64ukLlxuICAgIC8vIOynhOuLqOyXkOuKlCDsnITrsJgg7JuQ66y47J2YIOuouOumrOqwgCDtlYTsmpTtlZjri6QoU09OLTQ5NSDsoITroYApIOKAlCBwYXJzZSDsl5Drn6wg7JyE7LmY66eM7Jy866Gc64qUXG4gICAgLy8gXCLtlITroZzspojroZwg64u17ZaI64qU7KeAIC8g7Y6c7Iqk6rCAIOuCqOyVmOuKlOyngCAvIEpTT04g7J20IOyemOuguOuKlOyngFwi66W8IOq1rOu2hO2VoCDsiJgg7JeG64ukLlxuICAgIGNvbnN0IGhlYWQgPSBKU09OLnN0cmluZ2lmeSh0ZXh0LnNsaWNlKDAsIDIwMCkpO1xuICAgIGxvZ2dlci53YXJuKGB0b29sIGVudmVsb3BlIHBhcnNlIGZhaWxlZDogJHsoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2V9OyBoZWFkPSR7aGVhZH1gKTtcbiAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgIGBpbnZhbGlkIHRvb2wgZW52ZWxvcGUgKHJlc3BvbnNlIGlzIG5vdCBKU09OIOKAlCB0aGUgbW9kZWwgaWdub3JlZCB0aGUgZW52ZWxvcGUgY29udHJhY3Q7IHJldHJ5IGlzIHRoZSBjYWxsZXIncyBkZWNpc2lvbik6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfTsgcmVzcG9uc2UgaGVhZDogJHtoZWFkfWAsXG4gICAgKTtcbiAgfVxuXG4gIGFzc2VydFN0cnVjdHVyZWRFbnZlbG9wZUNvbXBsZXhpdHkodmFsdWUpO1xuICBjb25zdCBzY2hlbWEgPSBhbnN3ZXJLaW5kID09PSBcInRleHRcIiA/IFRFWFRfRU5WRUxPUEUgOiBKU09OX0VOVkVMT1BFO1xuICBjb25zdCB2YWxpZGF0aW9uID0gc2NoZW1hLnNhZmVQYXJzZSh2YWx1ZSk7XG4gIGlmICghdmFsaWRhdGlvbi5zdWNjZXNzKSB7XG4gICAgY29uc3QgaXNzdWUgPSB2YWxpZGF0aW9uLmVycm9yLmlzc3Vlc1swXTtcbiAgICBjb25zdCBwYXRoID0gaXNzdWUgJiYgaXNzdWUucGF0aC5sZW5ndGggPiAwID8gYCBhdCAke2lzc3VlLnBhdGguam9pbihcIi5cIil9YCA6IFwiXCI7XG4gICAgY29uc3QgZGV0YWlsID0gaXNzdWU/Lm1lc3NhZ2UgPz8gXCJ1bmtub3duIHZhbGlkYXRpb24gaXNzdWVcIjtcbiAgICAvLyB2YWxpZCBKU09OIOydtOyngOunjCDqs4Tslb0g7JyE67CY7J24IOqyveyasOyXkOuPhCDsm5DrrLgg66i466as66W8IOuCqOq4tOuLpCDigJQgem9kIOqyveuhnOunjOycvOuhnOuKlFxuICAgIC8vIFwi7YKkIOyDneueteyduOyngCAvIOuemO2NvOuhnCDqsJDsjIzripTsp4AgLyDtg4DsnoXsnbQg7YuA66C464qU7KeAXCLsnZgg7Iuk66y87J2EIOuzvCDsiJgg7JeG64ukLlxuICAgIGNvbnN0IGhlYWQgPSBKU09OLnN0cmluZ2lmeSh0ZXh0LnNsaWNlKDAsIDIwMCkpO1xuICAgIGxvZ2dlci53YXJuKGB0b29sIGVudmVsb3BlIHZhbGlkYXRpb24gZmFpbGVkJHtwYXRofTogJHtkZXRhaWx9OyBoZWFkPSR7aGVhZH1gKTtcbiAgICB0aHJvdyBuZXcgVG9vbENhbGxFbXVsYXRpb25FcnJvcihcbiAgICAgIGBpbnZhbGlkIHRvb2wgZW52ZWxvcGUke3BhdGh9OiAke2RldGFpbH07IHJlc3BvbnNlIGhlYWQ6ICR7aGVhZH1gLFxuICAgICk7XG4gIH1cblxuICAvLyBab2QgY2xvbmVzIEpTT04gb2JqZWN0cyBhbmQgZHJvcHMgb3duIFwiX19wcm90b19fXCIga2V5cy4gVGhlIHBhcnNlZCBKU09OIGlzIHNhZmUgdG8gcmV0dXJuXG4gIC8vIGFmdGVyIHZhbGlkYXRpb24gYW5kIHByZXNlcnZlcyB0aGUgY2FsbGVyJ3MgZXhhY3Qgc3RydWN0dXJlZCB2YWx1ZS5cbiAgY29uc3QgcmVzcG9uc2UgPSAodmFsdWUgYXMgeyByZXN1bHQ6IEVudmVsb3BlUmVzcG9uc2UgfSkucmVzdWx0O1xuICBpZiAocmVzcG9uc2UuYWN0aW9uID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgY29uc3QgdW5rbm93blRvb2wgPSBmaW5kVW5rbm93blRvb2wocmVzcG9uc2UudG9vbENhbGxzLCB0b29scyk7XG4gICAgaWYgKHVua25vd25Ub29sICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKGB1bmtub3duIGVtdWxhdGVkIHRvb2w6ICR7dW5rbm93blRvb2x9YCk7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXNwb25zZTtcbn1cblxuZnVuY3Rpb24gdG9vbENhbGxPdXRwdXQoXG4gIHJlc3VsdDogRW11bGF0aW9uUmVzdWx0LFxuICB0b29sQ2FsbHM6IFRvb2xDYWxsW10sXG4gIGltYWdlczogRW11bGF0aW9uSW1hZ2VbXSB8IHVuZGVmaW5lZCxcbiAgcnVuQ29udGV4dDogUXVlcnlPdXRwdXRbXCJydW5Db250ZXh0XCJdLFxuKTogUXVlcnlPdXRwdXQge1xuICByZXR1cm4ge1xuICAgIC4uLnJlc3VsdCxcbiAgICBjb250ZW50OiBhcHBlbmRJbWFnZXMoXG4gICAgICB0b29sQ2FsbHMubWFwKCh0b29sQ2FsbCkgPT4gKHtcbiAgICAgICAgdHlwZTogXCJ0b29sLWNhbGxcIixcbiAgICAgICAgdG9vbENhbGxJZDogYGNhbGxfJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyLCAxMCl9YCxcbiAgICAgICAgdG9vbE5hbWU6IHRvb2xDYWxsLnRvb2xOYW1lLFxuICAgICAgICBpbnB1dDogdG9vbENhbGwuYXJncyxcbiAgICAgIH0pKSxcbiAgICAgIGltYWdlcyxcbiAgICApLFxuICAgIGZpbmlzaFJlYXNvbjogXCJ0b29sLWNhbGxzXCIsXG4gICAgcnVuQ29udGV4dCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gYW5zd2VyT3V0cHV0KFxuICByZXN1bHQ6IEVtdWxhdGlvblJlc3VsdCxcbiAgdGV4dDogc3RyaW5nLFxuICBpbWFnZXM6IEVtdWxhdGlvbkltYWdlW10gfCB1bmRlZmluZWQsXG4gIHJ1bkNvbnRleHQ6IFF1ZXJ5T3V0cHV0W1wicnVuQ29udGV4dFwiXSxcbik6IFF1ZXJ5T3V0cHV0IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5yZXN1bHQsXG4gICAgdGV4dCxcbiAgICBjb250ZW50OiBhcHBlbmRJbWFnZXMoW3sgdHlwZTogXCJ0ZXh0XCIsIHRleHQgfV0sIGltYWdlcyksXG4gICAgZmluaXNoUmVhc29uOiBcInN0b3BcIixcbiAgICBydW5Db250ZXh0LFxuICB9O1xufVxuXG5mdW5jdGlvbiBmaW5kVW5rbm93blRvb2wodG9vbENhbGxzOiBUb29sQ2FsbFtdLCB0b29sczogUWdyaWRUb29sW10pOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBjb25zdCBrbm93blRvb2xOYW1lcyA9IG5ldyBTZXQodG9vbHMubWFwKCh0b29sKSA9PiB0b29sLm5hbWUpKTtcbiAgcmV0dXJuIHRvb2xDYWxscy5maW5kKCh0b29sQ2FsbCkgPT4gIWtub3duVG9vbE5hbWVzLmhhcyh0b29sQ2FsbC50b29sTmFtZSkpPy50b29sTmFtZTtcbn1cblxuZnVuY3Rpb24gYXBwZW5kSW1hZ2VzKGNvbnRlbnQ6IFFncmlkQ29udGVudFtdLCBpbWFnZXM/OiBFbXVsYXRpb25JbWFnZVtdKTogUWdyaWRDb250ZW50W10ge1xuICBpZiAoIWltYWdlcz8ubGVuZ3RoKSByZXR1cm4gY29udGVudDtcbiAgcmV0dXJuIFtcbiAgICAuLi5jb250ZW50LFxuICAgIC4uLmltYWdlcy5tYXAoXG4gICAgICAoaW1hZ2UpOiBRZ3JpZENvbnRlbnQgPT4gKHtcbiAgICAgICAgdHlwZTogXCJpbWFnZVwiLFxuICAgICAgICBkYXRhOiBpbWFnZS5kYXRhLFxuICAgICAgICAuLi4oaW1hZ2UubWVkaWFUeXBlID8geyBtZWRpYVR5cGU6IGltYWdlLm1lZGlhVHlwZSB9IDoge30pLFxuICAgICAgICByZXZpc2VkUHJvbXB0OiBpbWFnZS5yZXZpc2VkUHJvbXB0ID8/IG51bGwsXG4gICAgICAgIC4uLihpbWFnZS5nZW5lcmF0aW9uID8geyBnZW5lcmF0aW9uOiBpbWFnZS5nZW5lcmF0aW9uIH0gOiB7fSksXG4gICAgICB9KSxcbiAgICApLFxuICBdO1xufVxuXG5mdW5jdGlvbiBhc3NlcnRTdHJ1Y3R1cmVkRW52ZWxvcGVDb21wbGV4aXR5KHJvb3Q6IHVua25vd24pOiB2b2lkIHtcbiAgY29uc3QgbWF4RGVwdGggPSBTVFJVQ1RVUkVEX0VOVkVMT1BFX0xJTUlUUy5tYXhEZXB0aDtcbiAgY29uc3Qgc3RhY2sgPSBbeyB2YWx1ZTogcm9vdCwgZGVwdGg6IDAgfV07XG4gIGxldCBub2RlcyA9IDA7XG5cbiAgd2hpbGUgKHN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICBjb25zdCBjdXJyZW50ID0gc3RhY2sucG9wKCkhO1xuICAgIG5vZGVzICs9IDE7XG4gICAgaWYgKG5vZGVzID4gU1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4Tm9kZXMpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFxuICAgICAgICBgc3RydWN0dXJlZC1vdXRwdXQgZW52ZWxvcGUgZXhjZWVkcyBub2RlIGxpbWl0IG9mICR7U1RSVUNUVVJFRF9FTlZFTE9QRV9MSU1JVFMubWF4Tm9kZXN9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChjdXJyZW50LmRlcHRoID4gbWF4RGVwdGgpIHtcbiAgICAgIHRocm93IG5ldyBUb29sQ2FsbEVtdWxhdGlvbkVycm9yKFxuICAgICAgICBgc3RydWN0dXJlZC1vdXRwdXQgZW52ZWxvcGUgZXhjZWVkcyBkZXB0aCBsaW1pdCBvZiAke21heERlcHRofWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGN1cnJlbnQudmFsdWUgPT09IFwibnVtYmVyXCIgJiYgIU51bWJlci5pc0Zpbml0ZShjdXJyZW50LnZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IFRvb2xDYWxsRW11bGF0aW9uRXJyb3IoXCJhbnN3ZXIgbXVzdCBiZSB2YWxpZCBKU09OXCIpO1xuICAgIH1cbiAgICBpZiAoY3VycmVudC52YWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgY3VycmVudC52YWx1ZSAhPT0gXCJvYmplY3RcIikgY29udGludWU7XG5cbiAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIE9iamVjdC52YWx1ZXMoY3VycmVudC52YWx1ZSkpIHtcbiAgICAgIHN0YWNrLnB1c2goeyB2YWx1ZSwgZGVwdGg6IGN1cnJlbnQuZGVwdGggKyAxIH0pO1xuICAgIH1cbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7O0FBUUEsTUFBTSw2QkFBNkI7Q0FDakMsY0FBYyxNQUFNO0NBQ3BCLFVBQVU7Q0FDVixVQUFVO0FBQ1o7QUFTQSxNQUFNLFNBQVMsVUFBVSxDQUFDLFNBQVMsZ0JBQWdCLENBQUM7QUFRcEQsU0FBUyxvQkFBb0IsWUFBd0I7Q0FDbkQsT0FBTyxFQUFFLGFBQWEsRUFDcEIsUUFBUSxFQUFFLG1CQUFtQixVQUFVLENBQ3JDLEVBQUUsYUFBYTtFQUNiLFFBQVEsRUFBRSxRQUFRLFFBQVE7RUFDMUIsUUFDRSxlQUFlLFNBQ1gsRUFBRSxPQUFPLElBQ1QsRUFBRSxLQUFLLENBQUMsQ0FBQyxRQUFRLFdBQVcsV0FBVyxNQUFNLEVBQzNDLFNBQVMsMEJBQ1gsQ0FBQztFQUNQLFdBQVcsRUFBRSxLQUFLO0NB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