@cartanova/qgrid-cli 2.6.1 → 2.6.2

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 (56) hide show
  1. package/README.ko.md +2 -0
  2. package/README.md +2 -0
  3. package/bundle/dist/application/qgrid/oauth.js +21 -3
  4. package/bundle/dist/application/qgrid/qgrid.frame.js +31 -18
  5. package/bundle/dist/application/qgrid/token-death.js +52 -0
  6. package/bundle/dist/application/queries.generated.js +2 -2
  7. package/bundle/dist/application/request-log/request-log.model.js +69 -27
  8. package/bundle/dist/application/sonamu.generated.js +20 -3
  9. package/bundle/dist/application/sonamu.generated.sso.js +18 -2
  10. package/bundle/dist/application/token/token.model.js +42 -1
  11. package/bundle/dist/migrations/20260807133553_manual__backfill_request_log_cost.js +49 -0
  12. package/bundle/dist/migrations/20260807145144_alter_request_logs_alter1.js +13 -0
  13. package/bundle/dist/utils/providers/openai/openai-refresh.js +12 -1
  14. package/bundle/dist/utils/slack-notify.js +65 -0
  15. package/bundle/src/application/qgrid/oauth.ts +20 -1
  16. package/bundle/src/application/qgrid/qgrid-oauth-redirect.test.ts +18 -3
  17. package/bundle/src/application/qgrid/qgrid.frame.ts +58 -47
  18. package/bundle/src/application/qgrid/token-death.test.ts +120 -0
  19. package/bundle/src/application/qgrid/token-death.ts +67 -0
  20. package/bundle/src/application/queries.generated.ts +2 -2
  21. package/bundle/src/application/request-log/request-log.entity.json +20 -6
  22. package/bundle/src/application/request-log/request-log.model.test.ts +153 -42
  23. package/bundle/src/application/request-log/request-log.model.ts +86 -40
  24. package/bundle/src/application/sonamu.generated.http +13 -1
  25. package/bundle/src/application/sonamu.generated.sso.ts +16 -0
  26. package/bundle/src/application/sonamu.generated.ts +16 -1
  27. package/bundle/src/application/token/token.model.test.ts +39 -0
  28. package/bundle/src/application/token/token.model.ts +77 -0
  29. package/bundle/src/migrations/20260807133553_manual__backfill_request_log_cost.ts +110 -0
  30. package/bundle/src/migrations/20260807145144_alter_request_logs_alter1.ts +13 -0
  31. package/bundle/src/utils/providers/openai/openai-refresh.ts +17 -0
  32. package/bundle/src/utils/slack-notify.test.ts +97 -0
  33. package/bundle/src/utils/slack-notify.ts +74 -0
  34. package/bundle/web-dist/client/assets/index-2cAgaLOm.css +1 -0
  35. package/bundle/web-dist/client/assets/{index-BGGBFmzE.js → index-BgWzzjvj.js} +3 -3
  36. package/bundle/web-dist/client/assets/logs-Lyv8OfHE.js +1 -0
  37. package/bundle/web-dist/client/assets/{monit-CyqMmy1G.js → monit-BSa5lSZp.js} +1 -1
  38. package/bundle/web-dist/client/assets/{routes-Cy0gCq8c.js → routes-Cp0re-Nn.js} +2 -2
  39. package/bundle/web-dist/client/assets/{services.generated-BuT6Gp8V.js → services.generated-B-dMUtEu.js} +1 -1
  40. package/bundle/web-dist/client/assets/{show-C5WxfoAt.js → show-C1jEPhuS.js} +1 -1
  41. package/bundle/web-dist/client/assets/tokens-1e66MAC0.js +1 -0
  42. package/bundle/web-dist/client/assets/{use-update-token-mutation-DBkxL29Y.js → use-update-token-mutation-DueEppqt.js} +1 -1
  43. package/bundle/web-dist/client/index.html +2 -2
  44. package/bundle/web-dist/server/assets/{logs-D0z1Ghj1.js → logs-CwoOsveV.js} +11 -4
  45. package/bundle/web-dist/server/assets/{monit-dBXxnAyI.js → monit-DIsEsDJN.js} +1 -1
  46. package/bundle/web-dist/server/assets/{routes-B3p7fuwk.js → routes-Bts-KJ9W.js} +7 -3
  47. package/bundle/web-dist/server/assets/{services.generated-BNuxWs7K.js → services.generated-Bh7Vs8Ds.js} +7 -7
  48. package/bundle/web-dist/server/assets/{show-0iNioJ2I.js → show-DJfaCNUw.js} +1 -1
  49. package/bundle/web-dist/server/assets/{tokens-CvytQ9Xy.js → tokens-BA4vwDat.js} +206 -108
  50. package/bundle/web-dist/server/assets/{use-update-token-mutation-BBCC2GKM.js → use-update-token-mutation-BQRzEPy2.js} +1 -1
  51. package/bundle/web-dist/server/entry-server.generated.js +6 -6
  52. package/package.json +1 -1
  53. package/skills/qgrid/references/token-auth-quota-lifecycle.md +11 -0
  54. package/bundle/web-dist/client/assets/index-GA9b-zy4.css +0 -1
  55. package/bundle/web-dist/client/assets/logs-Dh19u6Tk.js +0 -1
  56. package/bundle/web-dist/client/assets/tokens-Ciolqw4l.js +0 -1
@@ -93,15 +93,12 @@ var RequestLogModelClass = class extends BaseModelClass {
93
93
  });
94
94
  return rows[0] ?? null;
95
95
  }
96
- async findMany(subset, rawParams) {
97
- const params = {
98
- num: 24,
99
- page: 1,
100
- search: "id",
101
- orderBy: "id-desc",
102
- ...rawParams
103
- };
104
- const { qb, onSubset: _ } = this.getSubsetQueries(subset);
96
+ /**
97
+ * 목록 필터의 단일 정의. findMany 와 totalCost 가 같은 조건을 보도록 공유한다 —
98
+ * 화면에서 필터를 걸면 행 수와 비용이 함께 좁혀져야 하는데, 두 쿼리가 각자 필터를
99
+ * 구현하면 한쪽에 축을 추가할 때 조용히 어긋난다.
100
+ */
101
+ applyListFilters(qb, params) {
105
102
  if (params.id) qb.whereIn("request_logs.id", asArray(params.id));
106
103
  if (params.token_name) qb.where("request_logs.token_name", params.token_name);
107
104
  if (params.project_name_is_null) qb.where("request_logs.project_name", null);
@@ -112,9 +109,23 @@ var RequestLogModelClass = class extends BaseModelClass {
112
109
  else if (params.search === "token_name") qb.where("request_logs.token_name", "like", `%${params.keyword}%`);
113
110
  else if (params.search === "user_prompt") qb.where("request_logs.user_prompt", "like", `%${params.keyword}%`);
114
111
  else throw new BadRequestException(SD("error.unknownSearchField")(params.search));
112
+ }
113
+ async findMany(subset, rawParams) {
114
+ const params = {
115
+ num: 24,
116
+ page: 1,
117
+ search: "id",
118
+ orderBy: "id-desc",
119
+ ...rawParams
120
+ };
121
+ const { qb, onSubset: _ } = this.getSubsetQueries(subset);
122
+ this.applyListFilters(qb, params);
115
123
  if (params.orderBy) if (params.orderBy === "id-desc") qb.orderBy("request_logs.id", "desc");
116
124
  else exhaustive(params.orderBy);
117
- const enhancers = this.createEnhancers({ A: (row) => normalizeLegacyAnthropicRow(row) });
125
+ const enhancers = this.createEnhancers({
126
+ A: (row) => normalizeLegacyAnthropicRow(row),
127
+ C: (row) => normalizeLegacyAnthropicRow(row)
128
+ });
118
129
  return this.executeSubsetQuery({
119
130
  subset,
120
131
  qb,
@@ -286,21 +297,52 @@ var RequestLogModelClass = class extends BaseModelClass {
286
297
  for (const result of toolResults) await wdb.from("request_log_steps").where("request_log_id", requestLogId).where("tool_call_id", result.toolCallId).where("type", "tool_call").update(result.isError ? { error: result.output } : { tool_result: result.output });
287
298
  return ((await wdb.from("request_log_steps").select({ max_step: Puri.max("step_index") }).where("request_log_id", requestLogId).first())?.max_step ?? -1) + 1;
288
299
  }
289
- async totalCost(params = {}) {
290
- return (await this.getPuri("r").from("request_logs").where(params.token_name ? { token_name: params.token_name } : {}).select({
291
- model_name: "model_name",
292
- input_tokens: "input_tokens",
293
- output_tokens: "output_tokens",
294
- cache_read_tokens: "cache_read_tokens",
295
- cache_creation_tokens: "cache_creation_tokens",
296
- cache_creation_5m_tokens: "cache_creation_5m_tokens",
297
- cache_creation_1h_tokens: "cache_creation_1h_tokens",
298
- cost_usd: "cost_usd",
299
- cost_source: "cost_source"
300
- })).reduce((sum, row) => {
301
- if (row.cost_source && row.cost_usd !== null) return sum + Math.max(row.cost_usd, 0) / MICRO_USD;
300
+ /**
301
+ * 화면 표시용 총 비용. 목록과 같은 필터를 적용한다.
302
+ *
303
+ * 전체를 조건 없이 SUM 한 뒤, `cost_source` 가 없는 legacy row 의 차액만 보정한다.
304
+ * 조건 없는 SUM 이어야 `(project_name, cost_usd)` 커버링 인덱스가 Index Only Scan 을
305
+ * 탄다 — `cost_source IS NOT NULL` 을 걸면 그 컬럼이 인덱스에 없어 heap 을 다시 봐야
306
+ * 하므로 플래너가 인덱스를 버리고 seq scan 으로 돌아간다(실측 230ms → 814ms).
307
+ *
308
+ * legacy 보정을 남겨둔 이유: 백필로 기존 legacy 는 0 이 되었지만, 외부 로거가
309
+ * `AppendStepInput`/`FinishRunInput` 으로 costSource 없이 넣으면 다시 생길 수 있다.
310
+ * 그런 row 는 저장값 대신 현재 가격표 재계산값이 맞으므로 차액을 더한다.
311
+ *
312
+ * 필터 조건을 여기서 다시 구현하지 않고 `applyListFilters` 를 공유하는 것이 핵심이다 —
313
+ * 두 쿼리가 각자 필터를 가지면 화면에서 필터를 걸었을 때 행 수와 비용이 조용히 어긋난다.
314
+ */
315
+ async totalCost(rawParams = {
316
+ num: 0,
317
+ page: 1
318
+ }) {
319
+ const params = {
320
+ num: 0,
321
+ page: 1,
322
+ search: "id",
323
+ ...rawParams
324
+ };
325
+ const { qb: totalQb } = this.getSubsetQueries("C");
326
+ this.applyListFilters(totalQb, params);
327
+ const stored = await totalQb.clear("select").select({ total: Puri.rawNumber("COALESCE(SUM(GREATEST(request_logs.cost_usd, 0)), 0)") }).first();
328
+ const { qb: legacyQb } = this.getSubsetQueries("C");
329
+ this.applyListFilters(legacyQb, params);
330
+ const legacyRows = await legacyQb.whereRaw("request_logs.cost_source IS NULL OR request_logs.cost_usd IS NULL").clear("select").select({
331
+ token_name: "request_logs.token_name",
332
+ model_name: "request_logs.model_name",
333
+ input_tokens: "request_logs.input_tokens",
334
+ output_tokens: "request_logs.output_tokens",
335
+ cache_read_tokens: "request_logs.cache_read_tokens",
336
+ cache_creation_tokens: "request_logs.cache_creation_tokens",
337
+ cache_creation_5m_tokens: "request_logs.cache_creation_5m_tokens",
338
+ cache_creation_1h_tokens: "request_logs.cache_creation_1h_tokens",
339
+ cost_usd: "request_logs.cost_usd"
340
+ });
341
+ const storedTotal = Number(stored?.total ?? 0) / MICRO_USD;
342
+ return legacyRows.reduce((sum, row) => {
343
+ const alreadySummed = Math.max(row.cost_usd ?? 0, 0) / MICRO_USD;
302
344
  const usage = normalizedUsageForCost(row);
303
- if (!usage.model) return sum + Math.max(row.cost_usd ?? 0, 0) / MICRO_USD;
345
+ if (!usage.model) return sum;
304
346
  return sum + calculateCostUsd(usage.model, {
305
347
  inputTokens: usage.inputTokens,
306
348
  outputTokens: usage.outputTokens,
@@ -308,8 +350,8 @@ var RequestLogModelClass = class extends BaseModelClass {
308
350
  cacheCreationInputTokens: usage.cacheCreationInputTokens,
309
351
  cacheCreationInputTokens5m: usage.cacheCreationInputTokens5m,
310
352
  cacheCreationInputTokens1h: usage.cacheCreationInputTokens1h
311
- });
312
- }, 0);
353
+ }) - alreadySummed;
354
+ }, storedTotal);
313
355
  }
314
356
  async distinctProjectNames() {
315
357
  return (await this.getPuri("r").from("request_logs").distinct("project_name").where("project_name", "!=", null).orderBy("project_name", "asc").select({ project_name: "project_name" })).map((r) => r.project_name);
@@ -380,4 +422,4 @@ const RequestLogModel = new RequestLogModelClass();
380
422
  //#endregion
381
423
  export { MICRO_USD, RequestLogModel };
382
424
 
383
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFB1cmksXG4gIHRyYW5zYWN0aW9uYWwsXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zLFxuICB0eXBlIFRvb2xEZWZpbml0aW9ucyxcbn0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5jb25zdCBSRVFVRVNUX0xPR19SVU5fTE9DS19DTEFTU19JRCA9IDcxODtcblxudHlwZSBUb29sUmVzdWx0Q29udGludWF0aW9uID0ge1xuICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gIG91dHB1dDogc3RyaW5nO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUgPSB7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlcjtcbiAgZHVyYXRpb25fbXM6IG51bWJlcjtcbiAgZmFsbGJhY2tfY291bnQ6IG51bWJlcjtcbiAgY29zdF91c2Q6IG51bWJlcjtcbiAgY29zdF9zb3VyY2U/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBTVEVQX0FHR1JFR0FURV9TRUxFQ1QgPSB7XG4gIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gIGR1cmF0aW9uX21zOiBcImR1cmF0aW9uX21zXCIsXG4gIGZhbGxiYWNrX2NvdW50OiBcImZhbGxiYWNrX2NvdW50XCIsXG4gIGNvc3RfdXNkOiBcImNvc3RfdXNkXCIsXG4gIGNvc3Rfc291cmNlOiBcImNvc3Rfc291cmNlXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlIHtcbiAgY29uc3Qgc3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgICByb3dzLnJlZHVjZSgodG90YWwsIHJvdykgPT4gdG90YWwgKyBOdW1iZXIocm93W2ZpZWxkXSA/PyAwKSwgMCk7XG4gIGNvbnN0IG9wdGlvbmFsU3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQgPT5cbiAgICByb3dzLnNvbWUoKHJvdykgPT4gcm93W2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dbZmllbGRdICE9PSB1bmRlZmluZWQpID8gc3VtKGZpZWxkKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29sbGFwc2UgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgcm93c1xuICAgICAgICAgIC5tYXAoKHJvdykgPT4gcm93W2ZpZWxkXSlcbiAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCksXG4gICAgICApLFxuICAgIF07XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPT09IDEgPyB2YWx1ZXNbMF0gOiBcIm1peGVkXCI7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaW5wdXRfdG9rZW5zOiBzdW0oXCJpbnB1dF90b2tlbnNcIiksXG4gICAgb3V0cHV0X3Rva2Vuczogc3VtKFwib3V0cHV0X3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9yZWFkX3Rva2Vuczogc3VtKFwiY2FjaGVfcmVhZF90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBzdW0oXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBvcHRpb25hbFN1bShcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIpLFxuICAgIGR1cmF0aW9uX21zOiBzdW0oXCJkdXJhdGlvbl9tc1wiKSxcbiAgICBmYWxsYmFja19jb3VudDogc3VtKFwiZmFsbGJhY2tfY291bnRcIiksXG4gICAgY29zdF91c2Q6IHN1bShcImNvc3RfdXNkXCIpLFxuICAgIGNvc3Rfc291cmNlOiBjb2xsYXBzZShcImNvc3Rfc291cmNlXCIpLFxuICB9O1xufVxuXG50eXBlIFJlcXVlc3RMb2dVc2FnZVJvdyA9IHtcbiAgdG9rZW5fbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9yZWFkX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBpc0FudGhyb3BpY1VzYWdlUm93KHJvdzogUGljazxSZXF1ZXN0TG9nVXNhZ2VSb3csIFwidG9rZW5fbmFtZVwiIHwgXCJtb2RlbF9uYW1lXCI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcm93LnRva2VuX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJjbGF1ZGUtXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvY2xhdWRlLVwiKSA9PT0gdHJ1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxNb2RlbE5hbWUobW9kZWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbW9kZWxOYW1lLmluY2x1ZGVzKFwiL1wiKSA/IG1vZGVsTmFtZS5zcGxpdChcIi9cIikucG9wKCkhIDogbW9kZWxOYW1lO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdzogUmVxdWVzdExvZ1VzYWdlUm93KToge1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bT86IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg/OiBudW1iZXI7XG59IHtcbiAgY29uc3QgY2FjaGVSZWFkID0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uID0gcm93LmNhY2hlX2NyZWF0aW9uX3Rva2VucztcbiAgY29uc3Qgc3RvcmVkSW5wdXQgPSByb3cuaW5wdXRfdG9rZW5zO1xuICBjb25zdCBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID1cbiAgICBpc0FudGhyb3BpY1VzYWdlUm93KHJvdykgJiYgc3RvcmVkSW5wdXQgPCBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uO1xuICByZXR1cm4ge1xuICAgIG1vZGVsOiByb3cubW9kZWxfbmFtZSA/IGNhbm9uaWNhbE1vZGVsTmFtZShyb3cubW9kZWxfbmFtZSkgOiBudWxsLFxuICAgIGlucHV0VG9rZW5zOiBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID8gc3RvcmVkSW5wdXQgKyBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uIDogc3RvcmVkSW5wdXQsXG4gICAgb3V0cHV0VG9rZW5zOiByb3cub3V0cHV0X3Rva2VucyxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGlvbixcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogcm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogcm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93PFQgZXh0ZW5kcyBSZXF1ZXN0TG9nVXNhZ2VSb3c+KHJvdzogVCk6IFQge1xuICAvLyDsg4ggcm93IOuKlCDri7nsi5zsnZggcHJvdmlkZXIv6rCA6rKp7ZGcIOu5hOyaqeydhCDtmZXsoJUg7KCA7J6l7ZWc64ukLiDtmITsnqwg6rCA6rKp7ZGc66GcIOuNruyWtOyTsOyngCDslYrripTri6QuXG4gIGlmIChyb3cuY29zdF9zb3VyY2UpIHJldHVybiByb3c7XG4gIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdChyb3cpO1xuICBpZiAodXNhZ2UuaW5wdXRUb2tlbnMgPT09IHJvdy5pbnB1dF90b2tlbnMpIHJldHVybiByb3c7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7IC4uLnJvdywgaW5wdXRfdG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyB9O1xuICBpZiAodXNhZ2UubW9kZWwpIHtcbiAgICBub3JtYWxpemVkLmNvc3RfdXNkID0gTWF0aC5yb3VuZChjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB1c2FnZSkgKiBNSUNST19VU0QpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKlxuICBSZXF1ZXN0TG9nIE1vZGVsXG4qL1xuY2xhc3MgUmVxdWVzdExvZ01vZGVsQ2xhc3MgZXh0ZW5kcyBCYXNlTW9kZWxDbGFzczxcbiAgUmVxdWVzdExvZ1N1YnNldEtleSxcbiAgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcsXG4gIHR5cGVvZiByZXF1ZXN0TG9nU3Vic2V0UXVlcmllcyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzXG4+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJSZXF1ZXN0TG9nXCIsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLCByZXF1ZXN0TG9nTG9hZGVyUXVlcmllcyk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlJlcXVlc3RMb2dcIiB9KVxuICBhc3luYyBmaW5kQnlJZDxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGlkOiBudW1iZXIsXG4gICk6IFByb21pc2U8UmVxdWVzdExvZ1N1YnNldE1hcHBpbmdbVF0+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICBpZCxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG4gICAgaWYgKCFyb3dzWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oU0QoXCJlcnJvci5lbnRpdHlOb3RGb3VuZFwiKShcIlJlcXVlc3RMb2dcIiwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1swXTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmU8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBsaXN0UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXSB8IG51bGw+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcblxuICAgIHJldHVybiByb3dzWzBdID8/IG51bGw7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlJlcXVlc3RMb2dzXCIgfSlcbiAgYXN5bmMgZmluZE1hbnk8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXksIExQIGV4dGVuZHMgUmVxdWVzdExvZ0xpc3RQYXJhbXM+KFxuICAgIHN1YnNldDogVCxcbiAgICByYXdQYXJhbXM/OiBMUCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PExQLCBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDI0LFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaDogXCJpZFwiIGFzIGNvbnN0LFxuICAgICAgb3JkZXJCeTogXCJpZC1kZXNjXCIgYXMgY29uc3QsXG4gICAgICAuLi5yYXdQYXJhbXMsXG4gICAgfSBzYXRpc2ZpZXMgUmVxdWVzdExvZ0xpc3RQYXJhbXM7XG5cbiAgICBjb25zdCB7IHFiLCBvblN1YnNldDogXyB9ID0gdGhpcy5nZXRTdWJzZXRRdWVyaWVzKHN1YnNldCk7XG5cbiAgICBpZiAocGFyYW1zLmlkKSB7XG4gICAgICBxYi53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGFzQXJyYXkocGFyYW1zLmlkKSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy50b2tlbl9uYW1lXCIsIHBhcmFtcy50b2tlbl9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnByb2plY3RfbmFtZV9pc19udWxsKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5wcm9qZWN0X25hbWVcIiwgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX25vdF9udWxsKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5wcm9qZWN0X25hbWVcIiwgXCIhPVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBwYXJhbXMucHJvamVjdF9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLm1vZGVsX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLm1vZGVsX25hbWVcIiwgcGFyYW1zLm1vZGVsX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5rZXl3b3JkICYmIHBhcmFtcy5rZXl3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChwYXJhbXMuc2VhcmNoID09PSBcImlkXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgTnVtYmVyKHBhcmFtcy5rZXl3b3JkKSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwidG9rZW5fbmFtZVwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgXCJsaWtlXCIsIGAlJHtwYXJhbXMua2V5d29yZH0lYCk7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwidXNlcl9wcm9tcHRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy51c2VyX3Byb21wdFwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwiZXJyb3IudW5rbm93blNlYXJjaEZpZWxkXCIpKHBhcmFtcy5zZWFyY2gpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBvcmRlckJ5XG4gICAgaWYgKHBhcmFtcy5vcmRlckJ5KSB7XG4gICAgICAvLyBkZWZhdWx0IG9yZGVyQnlcbiAgICAgIGlmIChwYXJhbXMub3JkZXJCeSA9PT0gXCJpZC1kZXNjXCIpIHtcbiAgICAgICAgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGhhdXN0aXZlKHBhcmFtcy5vcmRlckJ5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbmhhbmNlcnMgPSB0aGlzLmNyZWF0ZUVuaGFuY2Vycyh7XG4gICAgICBBOiAocm93KSA9PiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3cocm93KSxcbiAgICB9KTtcblxuICAgIHJldHVybiB0aGlzLmV4ZWN1dGVTdWJzZXRRdWVyeSh7XG4gICAgICBzdWJzZXQsXG4gICAgICBxYixcbiAgICAgIHBhcmFtcyxcbiAgICAgIGVuaGFuY2VycyxcbiAgICAgIGRlYnVnOiBmYWxzZSxcbiAgICB9KTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBzYXZlKHNwYTogUmVxdWVzdExvZ1NhdmVQYXJhbXNbXSk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuXG4gICAgLy8gcmVnaXN0ZXJcbiAgICBzcGEuZm9yRWFjaCgoc3ApID0+IHtcbiAgICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dzXCIsIHNwKTtcbiAgICB9KTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG5cbiAgICAgIHJldHVybiBpZHM7XG4gICAgfSk7XG4gIH1cblxuICAvLyDilIDilIAgUnVuIExpZmVjeWNsZSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBcblxuICBhc3luYyBjcmVhdGVSdW4ocGFyYW1zOiB7XG4gICAgdXNlcl9wcm9tcHQ6IHN0cmluZztcbiAgICBzeXN0ZW1fcHJvbXB0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgZWZmb3J0Pzogc3RyaW5nIHwgbnVsbDtcbiAgICBwcm9qZWN0X25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgIGhpc3Rvcnk/OiB1bmtub3duO1xuICAgIHRvb2xzPzogVG9vbERlZmluaXRpb25zO1xuICAgIGlzX2ltYWdlX2dlbmVyYXRpb24/OiBib29sZWFuO1xuICB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dzXCIsIHtcbiAgICAgIHVzZXJfcHJvbXB0OiBwYXJhbXMudXNlcl9wcm9tcHQsXG4gICAgICBzeXN0ZW1fcHJvbXB0OiBwYXJhbXMuc3lzdGVtX3Byb21wdCA/PyBudWxsLFxuICAgICAgLy8gcHJvdmlkZXIg7Iuk7ZaJIOyghOydtOuvgOuhnCBzZXJ2aW5nIG1vZGVs7J2AIOyVhOyngSDslYwg7IiYIOyXhuuLpC5cbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiBwYXJhbXMucmVxdWVzdGVkX21vZGVsX25hbWUgPz8gbnVsbCxcbiAgICAgIG1vZGVsX25hbWU6IG51bGwsXG4gICAgICBlZmZvcnQ6IHBhcmFtcy5lZmZvcnQgPz8gbnVsbCxcbiAgICAgIHByb2plY3RfbmFtZTogcGFyYW1zLnByb2plY3RfbmFtZSA/PyBudWxsLFxuICAgICAgc3RhdHVzOiBcInJ1bm5pbmdcIixcbiAgICAgIHJlc3BvbnNlOiBcIlwiLFxuICAgICAgaW5wdXRfdG9rZW5zOiAwLFxuICAgICAgb3V0cHV0X3Rva2VuczogMCxcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiAwLFxuICAgICAgZHVyYXRpb25fbXM6IDAsXG4gICAgICB0b29sX2NhbGxfY291bnQ6IDAsXG4gICAgICAvLyDsnbTrr7jsp4AgdHVybiDsi53rs4QoUjEzKS4gcnVuIOqyveuhnCh0b29scytpbWFnZSDsobDtlakp64+EIGF1dG8g6rK966Gc7JmAIOuPmeydvO2VmOqyjCDrp4jtgrkuXG4gICAgICBpc19pbWFnZV9nZW5lcmF0aW9uOiBwYXJhbXMuaXNfaW1hZ2VfZ2VuZXJhdGlvbiA/PyBmYWxzZSxcbiAgICAgIC4uLihwYXJhbXMuaGlzdG9yeSAhPT0gdW5kZWZpbmVkID8geyBoaXN0b3J5OiBwYXJhbXMuaGlzdG9yeSBhcyB7IHR5cGU6IHN0cmluZyB9W10gfSA6IHt9KSxcbiAgICAgIC4uLihwYXJhbXMudG9vbHMgIT09IHVuZGVmaW5lZCA/IHsgdG9vbHM6IHBhcmFtcy50b29scyB9IDoge30pLFxuICAgIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dzXCIpO1xuICAgICAgcmV0dXJuIGlkc1swXSE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBhcHBlbmRTdGVwKHJlcXVlc3RMb2dJZDogbnVtYmVyLCBzdGVwOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nX3N0ZXBzXCIsIHsgcmVxdWVzdF9sb2dfaWQ6IHJlcXVlc3RMb2dJZCwgLi4uc3RlcCB9KTtcbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nX3N0ZXBzXCIpO1xuICAgICAgaWYgKHN0ZXAudHlwZSA9PT0gXCJ0b29sX2NhbGxcIikge1xuICAgICAgICBhd2FpdCB0cnguZnJvbShcInJlcXVlc3RfbG9nc1wiKS53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZCkuaW5jcmVtZW50KFwidG9vbF9jYWxsX2NvdW50XCIsIDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGlkc1swXSE7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaW5pc2hSdW4oXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgcGFyYW1zOiB7XG4gICAgICBzdGF0dXM6IHN0cmluZztcbiAgICAgIHJlc3BvbnNlPzogc3RyaW5nO1xuICAgICAgdG9rZW5fbmFtZT86IHN0cmluZztcbiAgICAgIGlucHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIG91dHB1dF90b2tlbnM/OiBudW1iZXI7XG4gICAgICBjYWNoZV9yZWFkX3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG4gICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM/OiBudW1iZXIgfCBudWxsO1xuICAgICAgZHVyYXRpb25fbXM/OiBudW1iZXI7XG4gICAgICByZXF1ZXN0ZWRfbW9kZWxfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgICBtb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGZhbGxiYWNrX2NvdW50PzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNvc3RfdXNkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNvc3Rfc291cmNlPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIGhpc3Rvcnk/OiB1bmtub3duO1xuICAgICAgZXJyb3JfbWVzc2FnZT86IHN0cmluZztcbiAgICAgIHRvb2xfY2FsbF9jb3VudD86IG51bWJlcjtcbiAgICAgIGltYWdlX2Nvc3RfdXNkPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGltYWdlX2Nvc3RfbWV0aG9kPzogc3RyaW5nIHwgbnVsbDtcbiAgICB9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAocGFyYW1zLnN0YXR1cyA9PT0gXCJzdWNjZWVkZWRcIiAmJiAhcGFyYW1zLnRva2VuX25hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcInRva2VuTmFtZSBpcyByZXF1aXJlZCBmb3Igc3VjY2VlZGVkIHJ1bnNcIik7XG4gICAgfVxuICAgIGNvbnN0IHVwZGF0ZTogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7IGlkOiByZXF1ZXN0TG9nSWQsIHN0YXR1czogcGFyYW1zLnN0YXR1cyB9O1xuICAgIGNvbnN0IGZpZWxkcyA9IFtcbiAgICAgIFwicmVzcG9uc2VcIixcbiAgICAgIFwidG9rZW5fbmFtZVwiLFxuICAgICAgXCJpbnB1dF90b2tlbnNcIixcbiAgICAgIFwib3V0cHV0X3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9yZWFkX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuc1wiLFxuICAgICAgXCJkdXJhdGlvbl9tc1wiLFxuICAgICAgXCJyZXF1ZXN0ZWRfbW9kZWxfbmFtZVwiLFxuICAgICAgXCJtb2RlbF9uYW1lXCIsXG4gICAgICBcImZhbGxiYWNrX2NvdW50XCIsXG4gICAgICBcImNvc3RfdXNkXCIsXG4gICAgICBcImNvc3Rfc291cmNlXCIsXG4gICAgICBcImVycm9yX21lc3NhZ2VcIixcbiAgICAgIFwidG9vbF9jYWxsX2NvdW50XCIsXG4gICAgICBcImltYWdlX2Nvc3RfdXNkXCIsXG4gICAgICBcImltYWdlX2Nvc3RfbWV0aG9kXCIsXG4gICAgXSBhcyBjb25zdDtcbiAgICBmb3IgKGNvbnN0IGtleSBvZiBmaWVsZHMpIHtcbiAgICAgIGlmIChwYXJhbXNba2V5XSAhPT0gdW5kZWZpbmVkKSB1cGRhdGVba2V5XSA9IHBhcmFtc1trZXldO1xuICAgIH1cbiAgICBpZiAocGFyYW1zLmhpc3RvcnkgIT09IHVuZGVmaW5lZCkgdXBkYXRlLmhpc3RvcnkgPSBwYXJhbXMuaGlzdG9yeTtcbiAgICB1cGRhdGUudHRmdF9tcyA9IChhd2FpdCB0aGlzLmZpcnN0R2VuZXJhdGVTdGVwVHRmdChyZXF1ZXN0TG9nSWQpKSA/PyAwO1xuXG4gICAgLy8g7ISc67KEIHJ1biDqsr3roZzripQgc3RlcCDsl5DshJwg7ZmV7KCV7ZWcIGV4YWN0IGNvc3Qg66W8IOuEmOq4tOuLpC4g7Jm467aAL2xlZ2FjeSBjYWxsZXIg6rCAIOu5hOyaqeydhFxuICAgIC8vIOyDneuete2VnCDqsr3smrDsl5Drp4wg7KCA7J6l65CcIOuqqOuNuCt1c2FnZSDroZwg6rOE7IKw7ZWc64ukLlxuICAgIGlmIChcbiAgICAgIHBhcmFtcy5jb3N0X3VzZCA9PT0gdW5kZWZpbmVkICYmXG4gICAgICBwYXJhbXMuaW5wdXRfdG9rZW5zICE9PSB1bmRlZmluZWQgJiZcbiAgICAgIHBhcmFtcy5vdXRwdXRfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICApIHtcbiAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgICAgLnNlbGVjdCh7IG1vZGVsX25hbWU6IFwibW9kZWxfbmFtZVwiIH0pXG4gICAgICAgIC53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgICAgLmZpcnN0KCk7XG4gICAgICBjb25zdCBlZmZlY3RpdmVNb2RlbE5hbWUgPSBwYXJhbXMubW9kZWxfbmFtZSA/PyByb3c/Lm1vZGVsX25hbWU7XG4gICAgICBpZiAoZWZmZWN0aXZlTW9kZWxOYW1lKSB7XG4gICAgICAgIGNvbnN0IG1vZGVsID0gY2Fub25pY2FsTW9kZWxOYW1lKGVmZmVjdGl2ZU1vZGVsTmFtZSk7XG4gICAgICAgIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdCh7XG4gICAgICAgICAgdG9rZW5fbmFtZTogcGFyYW1zLnRva2VuX25hbWUsXG4gICAgICAgICAgbW9kZWxfbmFtZTogZWZmZWN0aXZlTW9kZWxOYW1lLFxuICAgICAgICAgIGlucHV0X3Rva2VuczogcGFyYW1zLmlucHV0X3Rva2VucyxcbiAgICAgICAgICBvdXRwdXRfdG9rZW5zOiBwYXJhbXMub3V0cHV0X3Rva2VucyxcbiAgICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogcGFyYW1zLmNhY2hlX3JlYWRfdG9rZW5zID8/IDAsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBwYXJhbXMuY2FjaGVfY3JlYXRpb25fdG9rZW5zID8/IDAsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBwYXJhbXMuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogcGFyYW1zLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyxcbiAgICAgICAgfSk7XG4gICAgICAgIHVwZGF0ZS5jb3N0X3VzZCA9IE1hdGgucm91bmQoXG4gICAgICAgICAgY2FsY3VsYXRlQ29zdFVzZChtb2RlbCwge1xuICAgICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgICAgb3V0cHV0VG9rZW5zOiB1c2FnZS5vdXRwdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bSxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaCxcbiAgICAgICAgICB9KSAqIDFfMDAwXzAwMCxcbiAgICAgICAgKTtcbiAgICAgICAgdXBkYXRlLmNvc3Rfc291cmNlID0gXCJwcmljaW5nX3RhYmxlXCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICB3ZGIudWJSZWdpc3RlcihcInJlcXVlc3RfbG9nc1wiLCB1cGRhdGUpO1xuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmaXJzdEdlbmVyYXRlU3RlcFR0ZnQocmVxdWVzdExvZ0lkOiBudW1iZXIpOiBQcm9taXNlPG51bWJlciB8IG51bGw+IHtcbiAgICBjb25zdCByb3cgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgdHRmdF9tczogXCJ0dGZ0X21zXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLndoZXJlKFwidHRmdF9tc1wiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInN0ZXBfaW5kZXhcIiwgXCJhc2NcIilcbiAgICAgIC5vcmRlckJ5KFwiaWRcIiwgXCJhc2NcIilcbiAgICAgIC5maXJzdCgpO1xuICAgIHJldHVybiByb3c/LnR0ZnRfbXMgPT09IG51bGwgfHwgcm93Py50dGZ0X21zID09PSB1bmRlZmluZWQgPyBudWxsIDogTnVtYmVyKHJvdy50dGZ0X21zKTtcbiAgfVxuXG4gIGFzeW5jIGFnZ3JlZ2F0ZVN0ZXBVc2FnZShyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8UmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGU+IHtcbiAgICBjb25zdCByb3dzID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdChTVEVQX0FHR1JFR0FURV9TRUxFQ1QpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwiZ2VuZXJhdGVcIik7XG4gICAgcmV0dXJuIGFnZ3JlZ2F0ZUdlbmVyYXRlU3RlcFJvd3Mocm93cyBhcyBBcnJheTxSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmRzIHN0YWxlIGNhbmRpZGF0ZXMsIHRoZW4gZXhwaXJlcyBlYWNoIHJ1biBpbiBpdHMgb3duIHNob3J0IHRyYW5zYWN0aW9uLlxuICAgKiBUaGUgY2FuZGlkYXRlIHF1ZXJ5IGlzIG9ubHkgYSBoaW50OyB0aGUgdHJhbnNhY3Rpb25hbCBvcGVyYXRpb24gcmVjaGVja3MgaXRcbiAgICogYWZ0ZXIgYWNxdWlyaW5nIHRoZSBhZHZpc29yeSBsb2NrIHNoYXJlZCB3aXRoIHRvb2wgZm9sbG93LXVwcy5cbiAgICovXG4gIGFzeW5jIGV4cGlyZVN0YWxlVG9vbFdhaXRpbmdSdW5zKFxuICAgIHRocmVzaG9sZE1zOiBudW1iZXIsXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gICAgbGltaXQ6IG51bWJlciA9IDEwLFxuICApOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3QgdGhyZXNob2xkID0gbmV3IERhdGUoRGF0ZS5ub3coKSAtIHRocmVzaG9sZE1zKTtcbiAgICBjb25zdCBjYW5kaWRhdGVJZHMgPSBhd2FpdCB0aGlzLmZpbmRTdGFsZVRvb2xXYWl0aW5nUnVuQ2FuZGlkYXRlcyh0aHJlc2hvbGQsIGxpbWl0KTtcbiAgICBjb25zdCBleHBpcmVkSWRzOiBudW1iZXJbXSA9IFtdO1xuICAgIGZvciAoY29uc3QgcmVxdWVzdExvZ0lkIG9mIGNhbmRpZGF0ZUlkcykge1xuICAgICAgaWYgKGF3YWl0IHRoaXMudHJ5RXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bihyZXF1ZXN0TG9nSWQsIHRocmVzaG9sZCwgZXJyb3JNZXNzYWdlKSkge1xuICAgICAgICBleHBpcmVkSWRzLnB1c2gocmVxdWVzdExvZ0lkKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGV4cGlyZWRJZHM7XG4gIH1cblxuICBhc3luYyBmaW5kU3RhbGVUb29sV2FpdGluZ1J1bkNhbmRpZGF0ZXModGhyZXNob2xkOiBEYXRlLCBsaW1pdDogbnVtYmVyKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJ3XCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLmpvaW4oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiLCBcInJlcXVlc3RfbG9ncy5pZFwiLCBcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIpXG4gICAgICAuZGlzdGluY3QoXCJyZXF1ZXN0X2xvZ3MuaWRcIilcbiAgICAgIC5zZWxlY3QoeyBpZDogXCJyZXF1ZXN0X2xvZ3MuaWRcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dzLnN0YXR1c1wiLCBcInJ1bm5pbmdcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLnR5cGVcIiwgXCJ0b29sX2NhbGxcIilcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLmNyZWF0ZWRfYXRcIiwgXCI8XCIsIHRocmVzaG9sZClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLnRvb2xfcmVzdWx0XCIsIG51bGwpXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19zdGVwcy5lcnJvclwiLCBudWxsKVxuICAgICAgLmxpbWl0KGxpbWl0KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHsgaWQgfSkgPT4gaWQpO1xuICB9XG5cbiAgQHRyYW5zYWN0aW9uYWwoeyBkYlByZXNldDogXCJ3XCIgfSlcbiAgYXN5bmMgdHJ5RXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0aHJlc2hvbGQ6IERhdGUsXG4gICAgZXJyb3JNZXNzYWdlOiBzdHJpbmcsXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgY29uc3QgbG9ja1Jlc3VsdCA9IChhd2FpdCB3ZGIua25leC5yYXcoXCJTRUxFQ1QgcGdfdHJ5X2Fkdmlzb3J5X3hhY3RfbG9jayg/LCA/KSBBUyBhY3F1aXJlZFwiLCBbXG4gICAgICBSRVFVRVNUX0xPR19SVU5fTE9DS19DTEFTU19JRCxcbiAgICAgIHJlcXVlc3RMb2dJZCxcbiAgICBdKSkgYXMgeyByb3dzPzogQXJyYXk8eyBhY3F1aXJlZD86IGJvb2xlYW4gfT4gfTtcbiAgICBpZiAobG9ja1Jlc3VsdC5yb3dzPy5bMF0/LmFjcXVpcmVkICE9PSB0cnVlKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBUaGUgZm9sbG93LXVwIHBhdGggdXNlcyB0aGUgc2FtZSB3cml0ZXIgdHJhbnNhY3Rpb24gbG9jay4gUmVjaGVjayBhZnRlclxuICAgIC8vIGxvY2tpbmcgc28gYSByZXN1bHQgY29tbWl0dGVkIGR1cmluZyBjYW5kaWRhdGUgZGlzY292ZXJ5IG1ha2VzIHRoaXMgYSBuby1vcC5cbiAgICBjb25zdCB1bnJlc29sdmVkID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgaWQ6IFwiaWRcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgLndoZXJlKFwiY3JlYXRlZF9hdFwiLCBcIjxcIiwgdGhyZXNob2xkKVxuICAgICAgLndoZXJlKFwidG9vbF9yZXN1bHRcIiwgbnVsbClcbiAgICAgIC53aGVyZShcImVycm9yXCIsIG51bGwpXG4gICAgICAuZmlyc3QoKTtcbiAgICBpZiAoIXVucmVzb2x2ZWQpIHJldHVybiBmYWxzZTtcblxuICAgIGNvbnN0IHN0ZXBSb3dzID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KFNURVBfQUdHUkVHQVRFX1NFTEVDVClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKTtcbiAgICBjb25zdCBhZ2dyZWdhdGUgPSBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHN0ZXBSb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik7XG4gICAgY29uc3QgZmlyc3RUdGZ0ID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KHsgdHRmdF9tczogXCJ0dGZ0X21zXCIgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKVxuICAgICAgLndoZXJlKFwidHRmdF9tc1wiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInN0ZXBfaW5kZXhcIiwgXCJhc2NcIilcbiAgICAgIC5vcmRlckJ5KFwiaWRcIiwgXCJhc2NcIilcbiAgICAgIC5maXJzdCgpO1xuXG4gICAgY29uc3QgdXBkYXRlZCA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInN0YXR1c1wiLCBcInJ1bm5pbmdcIilcbiAgICAgIC51cGRhdGUoe1xuICAgICAgICBzdGF0dXM6IFwiZXJyb3JcIixcbiAgICAgICAgZXJyb3JfbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgICAgICBpbnB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5pbnB1dF90b2tlbnMsXG4gICAgICAgIG91dHB1dF90b2tlbnM6IGFnZ3JlZ2F0ZS5vdXRwdXRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX3JlYWRfdG9rZW5zLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl90b2tlbnMsXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IHsgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnMgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICBkdXJhdGlvbl9tczogYWdncmVnYXRlLmR1cmF0aW9uX21zLFxuICAgICAgICBmYWxsYmFja19jb3VudDogYWdncmVnYXRlLmZhbGxiYWNrX2NvdW50LFxuICAgICAgICBjb3N0X3VzZDogYWdncmVnYXRlLmNvc3RfdXNkLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNvc3Rfc291cmNlICE9PSB1bmRlZmluZWQgPyB7IGNvc3Rfc291cmNlOiBhZ2dyZWdhdGUuY29zdF9zb3VyY2UgfSA6IHt9KSxcbiAgICAgICAgdHRmdF9tczpcbiAgICAgICAgICBmaXJzdFR0ZnQ/LnR0ZnRfbXMgPT09IG51bGwgfHwgZmlyc3RUdGZ0Py50dGZ0X21zID09PSB1bmRlZmluZWRcbiAgICAgICAgICAgID8gMFxuICAgICAgICAgICAgOiBOdW1iZXIoZmlyc3RUdGZ0LnR0ZnRfbXMpLFxuICAgICAgfSk7XG4gICAgcmV0dXJuIHVwZGF0ZWQgPiAwO1xuICB9XG5cbiAgLyoqXG4gICAqIEFwcGxpZXMgYSBuYXRpdmUgcWdyaWQgdG9vbCBmb2xsb3ctdXAgYW5kIGNvbXB1dGVzIGl0cyBuZXh0IHN0ZXAgaW5kZXggd2hpbGVcbiAgICogaG9sZGluZyB0aGUgcGVyLXJ1biBhZHZpc29yeSBsb2NrIHNoYXJlZCB3aXRoIHN0YWxlIGNsZWFudXAuXG4gICAqL1xuICBAdHJhbnNhY3Rpb25hbCh7IGRiUHJlc2V0OiBcIndcIiB9KVxuICBhc3luYyBjb250aW51ZVRvb2xSdW4oXG4gICAgcmVxdWVzdExvZ0lkOiBudW1iZXIsXG4gICAgdG9vbFJlc3VsdHM6IFRvb2xSZXN1bHRDb250aW51YXRpb25bXSxcbiAgKTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIGF3YWl0IHdkYi5rbmV4LnJhdyhcIlNFTEVDVCBwZ19hZHZpc29yeV94YWN0X2xvY2soPywgPylcIiwgW1xuICAgICAgUkVRVUVTVF9MT0dfUlVOX0xPQ0tfQ0xBU1NfSUQsXG4gICAgICByZXF1ZXN0TG9nSWQsXG4gICAgXSk7XG5cbiAgICBjb25zdCBydW4gPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuc2VsZWN0KHsgc3RhdHVzOiBcInN0YXR1c1wiIH0pXG4gICAgICAud2hlcmUoXCJpZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAuZmlyc3QoKTtcbiAgICBpZiAoIXJ1bikgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGxvZyBydW4gJHtyZXF1ZXN0TG9nSWR9IG5vdCBmb3VuZGApO1xuICAgIGlmIChydW4uc3RhdHVzICE9PSBcInJ1bm5pbmdcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGByZXF1ZXN0IGxvZyBydW4gJHtyZXF1ZXN0TG9nSWR9IGlzIGFscmVhZHkgJHtydW4uc3RhdHVzfWApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHRvb2xSZXN1bHRzKSB7XG4gICAgICBhd2FpdCB3ZGJcbiAgICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAgIC53aGVyZShcInRvb2xfY2FsbF9pZFwiLCByZXN1bHQudG9vbENhbGxJZClcbiAgICAgICAgLndoZXJlKFwidHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgICAudXBkYXRlKHJlc3VsdC5pc0Vycm9yID8geyBlcnJvcjogcmVzdWx0Lm91dHB1dCB9IDogeyB0b29sX3Jlc3VsdDogcmVzdWx0Lm91dHB1dCB9KTtcbiAgICB9XG5cbiAgICBjb25zdCByb3cgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyBtYXhfc3RlcDogUHVyaS5tYXgoXCJzdGVwX2luZGV4XCIpIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAuZmlyc3QoKTtcbiAgICByZXR1cm4gKHJvdz8ubWF4X3N0ZXAgPz8gLTEpICsgMTtcbiAgfVxuXG4gIC8vIFNvbmFtdSBmaW5kTWFueeuKlCBzdWJzZXQg7KCE7LK0IOy7rOufvCh0ZXh0IO2PrO2VqCnsnYQg7Y6Y7LmY7ZWY66+A66GcIOu5hOyaqSDqs4TsgrDsl5Ag7ZWE7JqU7ZWcIOy7rOufvOunjCDsobDtmoztlZzri6QuXG4gIGFzeW5jIHRvdGFsQ29zdChwYXJhbXM6IHsgdG9rZW5fbmFtZT86IHN0cmluZyB9ID0ge30pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIC8vIOq4sOyhtCBjb3N0X3VzZCDsl5DripQg6rO86rGwIEFudGhyb3BpYyBjYWNoZSDqs4TsgrAg67KE6re466GcIOydjOyImOqwgCDsoIDsnqXrkJwgcm93IOqwgCDsnojsnYQg7IiYIOyeiOuLpC5cbiAgICAvLyDtmZTrqbQg7KeR6rOE64qUIOyggOyepeqwkiBzdW0g7J20IOyVhOuLiOudvCDtmITsnqwg6rOE7IKw7Iud7Jy866GcIHVzYWdlIOulvCDsnqzqs4TsgrDtlbQg6rO86rGwIOuhnOq3uOuPhCDsponsi5wg67O07KCV7ZWc64ukLlxuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLndoZXJlKHBhcmFtcy50b2tlbl9uYW1lID8geyB0b2tlbl9uYW1lOiBwYXJhbXMudG9rZW5fbmFtZSB9IDoge30pXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgbW9kZWxfbmFtZTogXCJtb2RlbF9uYW1lXCIsXG4gICAgICAgIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgICAgICAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICAgIGNvc3RfdXNkOiBcImNvc3RfdXNkXCIsXG4gICAgICAgIGNvc3Rfc291cmNlOiBcImNvc3Rfc291cmNlXCIsXG4gICAgICB9KTtcblxuICAgIHJldHVybiByb3dzLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIC8vIGNvc3Rfc291cmNlIOqwgCDsnojsnLzrqbQg7IOIIOqzhOyVveycvOuhnCDtmZXsoJUg7KCA7J6l65CcIOqwkuydtOuLpC4g7ZSE66Gc66qo7IWYL+qwgOqyqSDrs4Dqsr0g7J207ZuE7JeQ64+EXG4gICAgICAvLyDri7nsi5wg67mE7Jqp7J2EIOycoOyngO2VnOuLpC4gTlVMTOyduCBsZWdhY3kgcm93IOunjCDtmITsnqwg6rCA6rKp7ZGc66GcIOuztOygle2VnOuLpC5cbiAgICAgIGlmIChyb3cuY29zdF9zb3VyY2UgJiYgcm93LmNvc3RfdXNkICE9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBzdW0gKyBNYXRoLm1heChyb3cuY29zdF91c2QsIDApIC8gTUlDUk9fVVNEO1xuICAgICAgfVxuICAgICAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdyk7XG4gICAgICBpZiAoIXVzYWdlLm1vZGVsKSByZXR1cm4gc3VtICsgTWF0aC5tYXgocm93LmNvc3RfdXNkID8/IDAsIDApIC8gTUlDUk9fVVNEO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgc3VtICtcbiAgICAgICAgY2FsY3VsYXRlQ29zdFVzZCh1c2FnZS5tb2RlbCwge1xuICAgICAgICAgIGlucHV0VG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyxcbiAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZWRJbnB1dFRva2VuczogdXNhZ2UuY2FjaGVkSW5wdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMsXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW06IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtLFxuICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoOiB1c2FnZS5jYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaCxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICBhc3luYyBkaXN0aW5jdFByb2plY3ROYW1lcygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuZGlzdGluY3QoXCJwcm9qZWN0X25hbWVcIilcbiAgICAgIC53aGVyZShcInByb2plY3RfbmFtZVwiLCBcIiE9XCIsIG51bGwpXG4gICAgICAub3JkZXJCeShcInByb2plY3RfbmFtZVwiLCBcImFzY1wiKVxuICAgICAgLnNlbGVjdCh7XG4gICAgICAgIHByb2plY3RfbmFtZTogXCJwcm9qZWN0X25hbWVcIixcbiAgICAgIH0pO1xuICAgIHJldHVybiByb3dzLm1hcCgocikgPT4gci5wcm9qZWN0X25hbWUhKTtcbiAgfVxuXG4gIEBhcGkoeyBodHRwTWV0aG9kOiBcIlBPU1RcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1tdXRhdGlvblwiXSB9KVxuICBhc3luYyBkZWwoaWRzOiBudW1iZXJbXSk6IFByb21pc2U8bnVtYmVyPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcblxuICAgIC8vIHRyYW5zYWN0aW9uXG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeFxuICAgICAgICAudGFibGUoXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgICAud2hlcmVJbihcInJlcXVlc3RfbG9nX3N0ZXBzLnJlcXVlc3RfbG9nX2lkXCIsIGlkcylcbiAgICAgICAgLmRlbGV0ZSgpO1xuICAgICAgcmV0dXJuIHRyeC50YWJsZShcInJlcXVlc3RfbG9nc1wiKS53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGlkcykuZGVsZXRlKCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gaWRzLmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ01vZGVsID0gbmV3IFJlcXVlc3RMb2dNb2RlbENsYXNzKCk7XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUF1QkEsTUFBYSxZQUFZO0FBQ3pCLE1BQU0sZ0NBQWdDO0FBcUJ0QyxNQUFNLHdCQUF3QjtDQUM1QixjQUFjO0NBQ2QsZUFBZTtDQUNmLG1CQUFtQjtDQUNuQix1QkFBdUI7Q0FDdkIsMEJBQTBCO0NBQzFCLDBCQUEwQjtDQUMxQixhQUFhO0NBQ2IsZ0JBQWdCO0NBQ2hCLFVBQVU7Q0FDVixhQUFhO0FBQ2Y7QUFFQSxTQUFTLDBCQUEwQixNQUErRDtDQUNoRyxNQUFNLE9BQU8sVUFDWCxL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
425
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC1sb2cubW9kZWwuanMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2FwcGxpY2F0aW9uL3JlcXVlc3QtbG9nL3JlcXVlc3QtbG9nLm1vZGVsLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIGFwaSxcbiAgYXNBcnJheSxcbiAgQmFkUmVxdWVzdEV4Y2VwdGlvbixcbiAgQmFzZU1vZGVsQ2xhc3MsXG4gIGV4aGF1c3RpdmUsXG4gIHR5cGUgTGlzdFJlc3VsdCxcbiAgTm90Rm91bmRFeGNlcHRpb24sXG4gIFB1cmksXG4gIHRyYW5zYWN0aW9uYWwsXG59IGZyb20gXCJzb25hbXVcIjtcblxuaW1wb3J0IHsgU0QgfSBmcm9tIFwiLi4vLi4vaTE4bi9zZC5nZW5lcmF0ZWRcIjtcbmltcG9ydCB7IGNhbGN1bGF0ZUNvc3RVc2QgfSBmcm9tIFwiLi4vLi4vdXRpbHMvcHJvdmlkZXJzL2NvbW1vbi9tb2RlbC1jb3N0XCI7XG5pbXBvcnQgeyB0eXBlIFJlcXVlc3RMb2dTdWJzZXRLZXksIHR5cGUgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcgfSBmcm9tIFwiLi4vc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHsgcmVxdWVzdExvZ0xvYWRlclF1ZXJpZXMsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzIH0gZnJvbSBcIi4uL3NvbmFtdS5nZW5lcmF0ZWQuc3NvXCI7XG5pbXBvcnQge1xuICB0eXBlIFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICB0eXBlIFJlcXVlc3RMb2dTYXZlUGFyYW1zLFxuICB0eXBlIFRvb2xEZWZpbml0aW9ucyxcbn0gZnJvbSBcIi4vcmVxdWVzdC1sb2cudHlwZXNcIjtcblxuLy8gY29zdF91c2TripQg7KCV7IiYIG1pY3JvLVVTROuhnCDsoIDsnqUuIOyLpOygnCBVU0QgPSBjb3N0X3VzZCAvIE1JQ1JPX1VTRC5cbmV4cG9ydCBjb25zdCBNSUNST19VU0QgPSAxXzAwMF8wMDA7XG5jb25zdCBSRVFVRVNUX0xPR19SVU5fTE9DS19DTEFTU19JRCA9IDcxODtcblxudHlwZSBUb29sUmVzdWx0Q29udGludWF0aW9uID0ge1xuICB0b29sQ2FsbElkOiBzdHJpbmc7XG4gIG91dHB1dDogc3RyaW5nO1xuICBpc0Vycm9yPzogYm9vbGVhbjtcbn07XG5cbnR5cGUgUmVxdWVzdExvZ1N0ZXBBZ2dyZWdhdGUgPSB7XG4gIGlucHV0X3Rva2VuczogbnVtYmVyO1xuICBvdXRwdXRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM/OiBudW1iZXI7XG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlcjtcbiAgZHVyYXRpb25fbXM6IG51bWJlcjtcbiAgZmFsbGJhY2tfY291bnQ6IG51bWJlcjtcbiAgY29zdF91c2Q6IG51bWJlcjtcbiAgY29zdF9zb3VyY2U/OiBzdHJpbmc7XG59O1xuXG5jb25zdCBTVEVQX0FHR1JFR0FURV9TRUxFQ1QgPSB7XG4gIGlucHV0X3Rva2VuczogXCJpbnB1dF90b2tlbnNcIixcbiAgb3V0cHV0X3Rva2VuczogXCJvdXRwdXRfdG9rZW5zXCIsXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gIGR1cmF0aW9uX21zOiBcImR1cmF0aW9uX21zXCIsXG4gIGZhbGxiYWNrX2NvdW50OiBcImZhbGxiYWNrX2NvdW50XCIsXG4gIGNvc3RfdXNkOiBcImNvc3RfdXNkXCIsXG4gIGNvc3Rfc291cmNlOiBcImNvc3Rfc291cmNlXCIsXG59IGFzIGNvbnN0O1xuXG5mdW5jdGlvbiBhZ2dyZWdhdGVHZW5lcmF0ZVN0ZXBSb3dzKHJvd3M6IEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik6IFJlcXVlc3RMb2dTdGVwQWdncmVnYXRlIHtcbiAgY29uc3Qgc3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgPT5cbiAgICByb3dzLnJlZHVjZSgodG90YWwsIHJvdykgPT4gdG90YWwgKyBOdW1iZXIocm93W2ZpZWxkXSA/PyAwKSwgMCk7XG4gIGNvbnN0IG9wdGlvbmFsU3VtID0gKGZpZWxkOiBzdHJpbmcpOiBudW1iZXIgfCB1bmRlZmluZWQgPT5cbiAgICByb3dzLnNvbWUoKHJvdykgPT4gcm93W2ZpZWxkXSAhPT0gbnVsbCAmJiByb3dbZmllbGRdICE9PSB1bmRlZmluZWQpID8gc3VtKGZpZWxkKSA6IHVuZGVmaW5lZDtcbiAgY29uc3QgY29sbGFwc2UgPSAoZmllbGQ6IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCA9PiB7XG4gICAgY29uc3QgdmFsdWVzID0gW1xuICAgICAgLi4ubmV3IFNldChcbiAgICAgICAgcm93c1xuICAgICAgICAgIC5tYXAoKHJvdykgPT4gcm93W2ZpZWxkXSlcbiAgICAgICAgICAuZmlsdGVyKCh2YWx1ZSk6IHZhbHVlIGlzIHN0cmluZyA9PiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiYgdmFsdWUubGVuZ3RoID4gMCksXG4gICAgICApLFxuICAgIF07XG4gICAgaWYgKHZhbHVlcy5sZW5ndGggPT09IDApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIHZhbHVlcy5sZW5ndGggPT09IDEgPyB2YWx1ZXNbMF0gOiBcIm1peGVkXCI7XG4gIH07XG4gIHJldHVybiB7XG4gICAgaW5wdXRfdG9rZW5zOiBzdW0oXCJpbnB1dF90b2tlbnNcIiksXG4gICAgb3V0cHV0X3Rva2Vuczogc3VtKFwib3V0cHV0X3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9yZWFkX3Rva2Vuczogc3VtKFwiY2FjaGVfcmVhZF90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBzdW0oXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIiksXG4gICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBvcHRpb25hbFN1bShcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiKSxcbiAgICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IG9wdGlvbmFsU3VtKFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIpLFxuICAgIGR1cmF0aW9uX21zOiBzdW0oXCJkdXJhdGlvbl9tc1wiKSxcbiAgICBmYWxsYmFja19jb3VudDogc3VtKFwiZmFsbGJhY2tfY291bnRcIiksXG4gICAgY29zdF91c2Q6IHN1bShcImNvc3RfdXNkXCIpLFxuICAgIGNvc3Rfc291cmNlOiBjb2xsYXBzZShcImNvc3Rfc291cmNlXCIpLFxuICB9O1xufVxuXG50eXBlIFJlcXVlc3RMb2dVc2FnZVJvdyA9IHtcbiAgdG9rZW5fbmFtZT86IHN0cmluZyB8IG51bGw7XG4gIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICBpbnB1dF90b2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0X3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9yZWFkX3Rva2VuczogbnVtYmVyO1xuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IG51bWJlcjtcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICBjb3N0X3NvdXJjZT86IHN0cmluZyB8IG51bGw7XG59O1xuXG5mdW5jdGlvbiBpc0FudGhyb3BpY1VzYWdlUm93KHJvdzogUGljazxSZXF1ZXN0TG9nVXNhZ2VSb3csIFwidG9rZW5fbmFtZVwiIHwgXCJtb2RlbF9uYW1lXCI+KTogYm9vbGVhbiB7XG4gIHJldHVybiAoXG4gICAgcm93LnRva2VuX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJjbGF1ZGUtXCIpID09PSB0cnVlIHx8XG4gICAgcm93Lm1vZGVsX25hbWU/LnN0YXJ0c1dpdGgoXCJhbnRocm9waWMvY2xhdWRlLVwiKSA9PT0gdHJ1ZVxuICApO1xufVxuXG5mdW5jdGlvbiBjYW5vbmljYWxNb2RlbE5hbWUobW9kZWxOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gbW9kZWxOYW1lLmluY2x1ZGVzKFwiL1wiKSA/IG1vZGVsTmFtZS5zcGxpdChcIi9cIikucG9wKCkhIDogbW9kZWxOYW1lO1xufVxuXG5mdW5jdGlvbiBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHJvdzogUmVxdWVzdExvZ1VzYWdlUm93KToge1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgaW5wdXRUb2tlbnM6IG51bWJlcjtcbiAgb3V0cHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlZElucHV0VG9rZW5zOiBudW1iZXI7XG4gIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogbnVtYmVyO1xuICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bT86IG51bWJlcjtcbiAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg/OiBudW1iZXI7XG59IHtcbiAgY29uc3QgY2FjaGVSZWFkID0gcm93LmNhY2hlX3JlYWRfdG9rZW5zO1xuICBjb25zdCBjYWNoZUNyZWF0aW9uID0gcm93LmNhY2hlX2NyZWF0aW9uX3Rva2VucztcbiAgY29uc3Qgc3RvcmVkSW5wdXQgPSByb3cuaW5wdXRfdG9rZW5zO1xuICBjb25zdCBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID1cbiAgICBpc0FudGhyb3BpY1VzYWdlUm93KHJvdykgJiYgc3RvcmVkSW5wdXQgPCBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uO1xuICByZXR1cm4ge1xuICAgIG1vZGVsOiByb3cubW9kZWxfbmFtZSA/IGNhbm9uaWNhbE1vZGVsTmFtZShyb3cubW9kZWxfbmFtZSkgOiBudWxsLFxuICAgIGlucHV0VG9rZW5zOiBsZWdhY3lBbnRocm9waWNTcGxpdElucHV0ID8gc3RvcmVkSW5wdXQgKyBjYWNoZVJlYWQgKyBjYWNoZUNyZWF0aW9uIDogc3RvcmVkSW5wdXQsXG4gICAgb3V0cHV0VG9rZW5zOiByb3cub3V0cHV0X3Rva2VucyxcbiAgICBjYWNoZWRJbnB1dFRva2VuczogY2FjaGVSZWFkLFxuICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogY2FjaGVDcmVhdGlvbixcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogcm93LmNhY2hlX2NyZWF0aW9uXzVtX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgICAuLi4ocm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyAhPT0gbnVsbCAmJiByb3cuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zICE9PSB1bmRlZmluZWRcbiAgICAgID8geyBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnMxaDogcm93LmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyB9XG4gICAgICA6IHt9KSxcbiAgfTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplTGVnYWN5QW50aHJvcGljUm93PFQgZXh0ZW5kcyBSZXF1ZXN0TG9nVXNhZ2VSb3c+KHJvdzogVCk6IFQge1xuICAvLyDsg4ggcm93IOuKlCDri7nsi5zsnZggcHJvdmlkZXIv6rCA6rKp7ZGcIOu5hOyaqeydhCDtmZXsoJUg7KCA7J6l7ZWc64ukLiDtmITsnqwg6rCA6rKp7ZGc66GcIOuNruyWtOyTsOyngCDslYrripTri6QuXG4gIGlmIChyb3cuY29zdF9zb3VyY2UpIHJldHVybiByb3c7XG4gIGNvbnN0IHVzYWdlID0gbm9ybWFsaXplZFVzYWdlRm9yQ29zdChyb3cpO1xuICBpZiAodXNhZ2UuaW5wdXRUb2tlbnMgPT09IHJvdy5pbnB1dF90b2tlbnMpIHJldHVybiByb3c7XG4gIGNvbnN0IG5vcm1hbGl6ZWQgPSB7IC4uLnJvdywgaW5wdXRfdG9rZW5zOiB1c2FnZS5pbnB1dFRva2VucyB9O1xuICBpZiAodXNhZ2UubW9kZWwpIHtcbiAgICBub3JtYWxpemVkLmNvc3RfdXNkID0gTWF0aC5yb3VuZChjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB1c2FnZSkgKiBNSUNST19VU0QpO1xuICB9XG4gIHJldHVybiBub3JtYWxpemVkO1xufVxuXG4vKlxuICBSZXF1ZXN0TG9nIE1vZGVsXG4qL1xuY2xhc3MgUmVxdWVzdExvZ01vZGVsQ2xhc3MgZXh0ZW5kcyBCYXNlTW9kZWxDbGFzczxcbiAgUmVxdWVzdExvZ1N1YnNldEtleSxcbiAgUmVxdWVzdExvZ1N1YnNldE1hcHBpbmcsXG4gIHR5cGVvZiByZXF1ZXN0TG9nU3Vic2V0UXVlcmllcyxcbiAgdHlwZW9mIHJlcXVlc3RMb2dMb2FkZXJRdWVyaWVzXG4+IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoXCJSZXF1ZXN0TG9nXCIsIHJlcXVlc3RMb2dTdWJzZXRRdWVyaWVzLCByZXF1ZXN0TG9nTG9hZGVyUXVlcmllcyk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlJlcXVlc3RMb2dcIiB9KVxuICBhc3luYyBmaW5kQnlJZDxUIGV4dGVuZHMgUmVxdWVzdExvZ1N1YnNldEtleT4oXG4gICAgc3Vic2V0OiBULFxuICAgIGlkOiBudW1iZXIsXG4gICk6IFByb21pc2U8UmVxdWVzdExvZ1N1YnNldE1hcHBpbmdbVF0+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICBpZCxcbiAgICAgIG51bTogMSxcbiAgICAgIHBhZ2U6IDEsXG4gICAgfSk7XG4gICAgaWYgKCFyb3dzWzBdKSB7XG4gICAgICB0aHJvdyBuZXcgTm90Rm91bmRFeGNlcHRpb24oU0QoXCJlcnJvci5lbnRpdHlOb3RGb3VuZFwiKShcIlJlcXVlc3RMb2dcIiwgaWQpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gcm93c1swXTtcbiAgfVxuXG4gIGFzeW5jIGZpbmRPbmU8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXk+KFxuICAgIHN1YnNldDogVCxcbiAgICBsaXN0UGFyYW1zOiBSZXF1ZXN0TG9nTGlzdFBhcmFtcyxcbiAgKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXSB8IG51bGw+IHtcbiAgICBjb25zdCB7IHJvd3MgfSA9IGF3YWl0IHRoaXMuZmluZE1hbnkoc3Vic2V0LCB7XG4gICAgICAuLi5saXN0UGFyYW1zLFxuICAgICAgbnVtOiAxLFxuICAgICAgcGFnZTogMSxcbiAgICB9KTtcblxuICAgIHJldHVybiByb3dzWzBdID8/IG51bGw7XG4gIH1cblxuICAvKipcbiAgICog66qp66GdIO2VhO2EsOydmCDri6jsnbwg7KCV7J2YLiBmaW5kTWFueSDsmYAgdG90YWxDb3N0IOqwgCDqsJnsnYAg7KGw6rG07J2EIOuztOuPhOuhnSDqs7XsnKDtlZzri6Qg4oCUXG4gICAqIO2ZlOuptOyXkOyEnCDtlYTthLDrpbwg6rG466m0IO2WiSDsiJjsmYAg67mE7Jqp7J20IO2VqOq7mCDsooHtmIDsoLjslbwg7ZWY64qU642wLCDrkZAg7L+866as6rCAIOqwgeyekCDtlYTthLDrpbxcbiAgICog6rWs7ZiE7ZWY66m0IO2VnOyqveyXkCDstpXsnYQg7LaU6rCA7ZWgIOuVjCDsobDsmqntnogg7Ja06riL64Kc64ukLlxuICAgKi9cbiAgcHJpdmF0ZSBhcHBseUxpc3RGaWx0ZXJzKFxuICAgIHFiOiBSZXR1cm5UeXBlPFJlcXVlc3RMb2dNb2RlbENsYXNzW1wiZ2V0U3Vic2V0UXVlcmllc1wiXT5bXCJxYlwiXSxcbiAgICBwYXJhbXM6IFJlcXVlc3RMb2dMaXN0UGFyYW1zLFxuICApOiB2b2lkIHtcbiAgICBpZiAocGFyYW1zLmlkKSB7XG4gICAgICBxYi53aGVyZUluKFwicmVxdWVzdF9sb2dzLmlkXCIsIGFzQXJyYXkocGFyYW1zLmlkKSk7XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtcy50b2tlbl9uYW1lKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy50b2tlbl9uYW1lXCIsIHBhcmFtcy50b2tlbl9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLnByb2plY3RfbmFtZV9pc19udWxsKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5wcm9qZWN0X25hbWVcIiwgbnVsbCk7XG4gICAgfSBlbHNlIGlmIChwYXJhbXMucHJvamVjdF9uYW1lX2lzX25vdF9udWxsKSB7XG4gICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy5wcm9qZWN0X25hbWVcIiwgXCIhPVwiLCBudWxsKTtcbiAgICB9IGVsc2UgaWYgKHBhcmFtcy5wcm9qZWN0X25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnByb2plY3RfbmFtZVwiLCBwYXJhbXMucHJvamVjdF9uYW1lKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zLm1vZGVsX25hbWUpIHtcbiAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLm1vZGVsX25hbWVcIiwgcGFyYW1zLm1vZGVsX25hbWUpO1xuICAgIH1cblxuICAgIGlmIChwYXJhbXMuc2VhcmNoICYmIHBhcmFtcy5rZXl3b3JkICYmIHBhcmFtcy5rZXl3b3JkLmxlbmd0aCA+IDApIHtcbiAgICAgIGlmIChwYXJhbXMuc2VhcmNoID09PSBcImlkXCIpIHtcbiAgICAgICAgcWIud2hlcmUoXCJyZXF1ZXN0X2xvZ3MuaWRcIiwgTnVtYmVyKHBhcmFtcy5rZXl3b3JkKSk7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwidG9rZW5fbmFtZVwiKSB7XG4gICAgICAgIHFiLndoZXJlKFwicmVxdWVzdF9sb2dzLnRva2VuX25hbWVcIiwgXCJsaWtlXCIsIGAlJHtwYXJhbXMua2V5d29yZH0lYCk7XG4gICAgICB9IGVsc2UgaWYgKHBhcmFtcy5zZWFyY2ggPT09IFwidXNlcl9wcm9tcHRcIikge1xuICAgICAgICBxYi53aGVyZShcInJlcXVlc3RfbG9ncy51c2VyX3Byb21wdFwiLCBcImxpa2VcIiwgYCUke3BhcmFtcy5rZXl3b3JkfSVgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBCYWRSZXF1ZXN0RXhjZXB0aW9uKFNEKFwiZXJyb3IudW5rbm93blNlYXJjaEZpZWxkXCIpKHBhcmFtcy5zZWFyY2gpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJHRVRcIiwgY2xpZW50czogW1wiYXhpb3NcIiwgXCJ0YW5zdGFjay1xdWVyeVwiXSwgcmVzb3VyY2VOYW1lOiBcIlJlcXVlc3RMb2dzXCIgfSlcbiAgYXN5bmMgZmluZE1hbnk8VCBleHRlbmRzIFJlcXVlc3RMb2dTdWJzZXRLZXksIExQIGV4dGVuZHMgUmVxdWVzdExvZ0xpc3RQYXJhbXM+KFxuICAgIHN1YnNldDogVCxcbiAgICByYXdQYXJhbXM/OiBMUCxcbiAgKTogUHJvbWlzZTxMaXN0UmVzdWx0PExQLCBSZXF1ZXN0TG9nU3Vic2V0TWFwcGluZ1tUXT4+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDI0LFxuICAgICAgcGFnZTogMSxcbiAgICAgIHNlYXJjaDogXCJpZFwiIGFzIGNvbnN0LFxuICAgICAgb3JkZXJCeTogXCJpZC1kZXNjXCIgYXMgY29uc3QsXG4gICAgICAuLi5yYXdQYXJhbXMsXG4gICAgfSBzYXRpc2ZpZXMgUmVxdWVzdExvZ0xpc3RQYXJhbXM7XG5cbiAgICBjb25zdCB7IHFiLCBvblN1YnNldDogXyB9ID0gdGhpcy5nZXRTdWJzZXRRdWVyaWVzKHN1YnNldCk7XG5cbiAgICB0aGlzLmFwcGx5TGlzdEZpbHRlcnMocWIsIHBhcmFtcyk7XG5cbiAgICAvLyBvcmRlckJ5XG4gICAgaWYgKHBhcmFtcy5vcmRlckJ5KSB7XG4gICAgICAvLyBkZWZhdWx0IG9yZGVyQnlcbiAgICAgIGlmIChwYXJhbXMub3JkZXJCeSA9PT0gXCJpZC1kZXNjXCIpIHtcbiAgICAgICAgcWIub3JkZXJCeShcInJlcXVlc3RfbG9ncy5pZFwiLCBcImRlc2NcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBleGhhdXN0aXZlKHBhcmFtcy5vcmRlckJ5KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBlbmhhbmNlcnMgPSB0aGlzLmNyZWF0ZUVuaGFuY2Vycyh7XG4gICAgICBBOiAocm93KSA9PiBub3JtYWxpemVMZWdhY3lBbnRocm9waWNSb3cocm93KSxcbiAgICAgIEM6IChyb3cpID0+IG5vcm1hbGl6ZUxlZ2FjeUFudGhyb3BpY1Jvdyhyb3cpLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXMuZXhlY3V0ZVN1YnNldFF1ZXJ5KHtcbiAgICAgIHN1YnNldCxcbiAgICAgIHFiLFxuICAgICAgcGFyYW1zLFxuICAgICAgZW5oYW5jZXJzLFxuICAgICAgZGVidWc6IGZhbHNlLFxuICAgIH0pO1xuICB9XG5cbiAgQGFwaSh7IGh0dHBNZXRob2Q6IFwiUE9TVFwiLCBjbGllbnRzOiBbXCJheGlvc1wiLCBcInRhbnN0YWNrLW11dGF0aW9uXCJdIH0pXG4gIGFzeW5jIHNhdmUoc3BhOiBSZXF1ZXN0TG9nU2F2ZVBhcmFtc1tdKTogUHJvbWlzZTxudW1iZXJbXT4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyByZWdpc3RlclxuICAgIHNwYS5mb3JFYWNoKChzcCkgPT4ge1xuICAgICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwgc3ApO1xuICAgIH0pO1xuXG4gICAgLy8gdHJhbnNhY3Rpb25cbiAgICByZXR1cm4gd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGNvbnN0IGlkcyA9IGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcblxuICAgICAgcmV0dXJuIGlkcztcbiAgICB9KTtcbiAgfVxuXG4gIC8vIOKUgOKUgCBSdW4gTGlmZWN5Y2xlIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgFxuXG4gIGFzeW5jIGNyZWF0ZVJ1bihwYXJhbXM6IHtcbiAgICB1c2VyX3Byb21wdDogc3RyaW5nO1xuICAgIHN5c3RlbV9wcm9tcHQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICBlZmZvcnQ/OiBzdHJpbmcgfCBudWxsO1xuICAgIHByb2plY3RfbmFtZT86IHN0cmluZyB8IG51bGw7XG4gICAgaGlzdG9yeT86IHVua25vd247XG4gICAgdG9vbHM/OiBUb29sRGVmaW5pdGlvbnM7XG4gICAgaXNfaW1hZ2VfZ2VuZXJhdGlvbj86IGJvb2xlYW47XG4gIH0pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgd2RiLnViUmVnaXN0ZXIoXCJyZXF1ZXN0X2xvZ3NcIiwge1xuICAgICAgdXNlcl9wcm9tcHQ6IHBhcmFtcy51c2VyX3Byb21wdCxcbiAgICAgIHN5c3RlbV9wcm9tcHQ6IHBhcmFtcy5zeXN0ZW1fcHJvbXB0ID8/IG51bGwsXG4gICAgICAvLyBwcm92aWRlciDsi6Ttlokg7KCE7J2066+A66GcIHNlcnZpbmcgbW9kZWzsnYAg7JWE7KeBIOyVjCDsiJgg7JeG64ukLlxuICAgICAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHBhcmFtcy5yZXF1ZXN0ZWRfbW9kZWxfbmFtZSA/PyBudWxsLFxuICAgICAgbW9kZWxfbmFtZTogbnVsbCxcbiAgICAgIGVmZm9ydDogcGFyYW1zLmVmZm9ydCA/PyBudWxsLFxuICAgICAgcHJvamVjdF9uYW1lOiBwYXJhbXMucHJvamVjdF9uYW1lID8/IG51bGwsXG4gICAgICBzdGF0dXM6IFwicnVubmluZ1wiLFxuICAgICAgcmVzcG9uc2U6IFwiXCIsXG4gICAgICBpbnB1dF90b2tlbnM6IDAsXG4gICAgICBvdXRwdXRfdG9rZW5zOiAwLFxuICAgICAgY2FjaGVfcmVhZF90b2tlbnM6IDAsXG4gICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IDAsXG4gICAgICBkdXJhdGlvbl9tczogMCxcbiAgICAgIHRvb2xfY2FsbF9jb3VudDogMCxcbiAgICAgIC8vIOydtOuvuOyngCB0dXJuIOyLneuzhChSMTMpLiBydW4g6rK966GcKHRvb2xzK2ltYWdlIOyhsO2VqSnrj4QgYXV0byDqsr3roZzsmYAg64+Z7J287ZWY6rKMIOuniO2CuS5cbiAgICAgIGlzX2ltYWdlX2dlbmVyYXRpb246IHBhcmFtcy5pc19pbWFnZV9nZW5lcmF0aW9uID8/IGZhbHNlLFxuICAgICAgLi4uKHBhcmFtcy5oaXN0b3J5ICE9PSB1bmRlZmluZWQgPyB7IGhpc3Rvcnk6IHBhcmFtcy5oaXN0b3J5IGFzIHsgdHlwZTogc3RyaW5nIH1bXSB9IDoge30pLFxuICAgICAgLi4uKHBhcmFtcy50b29scyAhPT0gdW5kZWZpbmVkID8geyB0b29sczogcGFyYW1zLnRvb2xzIH0gOiB7fSksXG4gICAgfSk7XG4gICAgcmV0dXJuIHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBjb25zdCBpZHMgPSBhd2FpdCB0cngudWJVcHNlcnQoXCJyZXF1ZXN0X2xvZ3NcIik7XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGFwcGVuZFN0ZXAocmVxdWVzdExvZ0lkOiBudW1iZXIsIHN0ZXA6IFJlY29yZDxzdHJpbmcsIHVua25vd24+KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dfc3RlcHNcIiwgeyByZXF1ZXN0X2xvZ19pZDogcmVxdWVzdExvZ0lkLCAuLi5zdGVwIH0pO1xuICAgIHJldHVybiB3ZGIudHJhbnNhY3Rpb24oYXN5bmMgKHRyeCkgPT4ge1xuICAgICAgY29uc3QgaWRzID0gYXdhaXQgdHJ4LnViVXBzZXJ0KFwicmVxdWVzdF9sb2dfc3RlcHNcIik7XG4gICAgICBpZiAoc3RlcC50eXBlID09PSBcInRvb2xfY2FsbFwiKSB7XG4gICAgICAgIGF3YWl0IHRyeC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKS5pbmNyZW1lbnQoXCJ0b29sX2NhbGxfY291bnRcIiwgMSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gaWRzWzBdITtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpbmlzaFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICBwYXJhbXM6IHtcbiAgICAgIHN0YXR1czogc3RyaW5nO1xuICAgICAgcmVzcG9uc2U/OiBzdHJpbmc7XG4gICAgICB0b2tlbl9uYW1lPzogc3RyaW5nO1xuICAgICAgaW5wdXRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgb3V0cHV0X3Rva2Vucz86IG51bWJlcjtcbiAgICAgIGNhY2hlX3JlYWRfdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zPzogbnVtYmVyO1xuICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zPzogbnVtYmVyIHwgbnVsbDtcbiAgICAgIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vucz86IG51bWJlciB8IG51bGw7XG4gICAgICBkdXJhdGlvbl9tcz86IG51bWJlcjtcbiAgICAgIHJlcXVlc3RlZF9tb2RlbF9uYW1lPzogc3RyaW5nIHwgbnVsbDtcbiAgICAgIG1vZGVsX25hbWU/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgZmFsbGJhY2tfY291bnQ/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgY29zdF9zb3VyY2U/OiBzdHJpbmcgfCBudWxsO1xuICAgICAgaGlzdG9yeT86IHVua25vd247XG4gICAgICBlcnJvcl9tZXNzYWdlPzogc3RyaW5nO1xuICAgICAgdG9vbF9jYWxsX2NvdW50PzogbnVtYmVyO1xuICAgICAgaW1hZ2VfY29zdF91c2Q/OiBudW1iZXIgfCBudWxsO1xuICAgICAgaW1hZ2VfY29zdF9tZXRob2Q/OiBzdHJpbmcgfCBudWxsO1xuICAgIH0sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIGlmIChwYXJhbXMuc3RhdHVzID09PSBcInN1Y2NlZWRlZFwiICYmICFwYXJhbXMudG9rZW5fbmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwidG9rZW5OYW1lIGlzIHJlcXVpcmVkIGZvciBzdWNjZWVkZWQgcnVuc1wiKTtcbiAgICB9XG4gICAgY29uc3QgdXBkYXRlOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPiA9IHsgaWQ6IHJlcXVlc3RMb2dJZCwgc3RhdHVzOiBwYXJhbXMuc3RhdHVzIH07XG4gICAgY29uc3QgZmllbGRzID0gW1xuICAgICAgXCJyZXNwb25zZVwiLFxuICAgICAgXCJ0b2tlbl9uYW1lXCIsXG4gICAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgICAgXCJvdXRwdXRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgICAgXCJjYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgICBcInJlcXVlc3RlZF9tb2RlbF9uYW1lXCIsXG4gICAgICBcIm1vZGVsX25hbWVcIixcbiAgICAgIFwiZmFsbGJhY2tfY291bnRcIixcbiAgICAgIFwiY29zdF91c2RcIixcbiAgICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICAgIFwiZXJyb3JfbWVzc2FnZVwiLFxuICAgICAgXCJ0b29sX2NhbGxfY291bnRcIixcbiAgICAgIFwiaW1hZ2VfY29zdF91c2RcIixcbiAgICAgIFwiaW1hZ2VfY29zdF9tZXRob2RcIixcbiAgICBdIGFzIGNvbnN0O1xuICAgIGZvciAoY29uc3Qga2V5IG9mIGZpZWxkcykge1xuICAgICAgaWYgKHBhcmFtc1trZXldICE9PSB1bmRlZmluZWQpIHVwZGF0ZVtrZXldID0gcGFyYW1zW2tleV07XG4gICAgfVxuICAgIGlmIChwYXJhbXMuaGlzdG9yeSAhPT0gdW5kZWZpbmVkKSB1cGRhdGUuaGlzdG9yeSA9IHBhcmFtcy5oaXN0b3J5O1xuICAgIHVwZGF0ZS50dGZ0X21zID0gKGF3YWl0IHRoaXMuZmlyc3RHZW5lcmF0ZVN0ZXBUdGZ0KHJlcXVlc3RMb2dJZCkpID8/IDA7XG5cbiAgICAvLyDshJzrsoQgcnVuIOqyveuhnOuKlCBzdGVwIOyXkOyEnCDtmZXsoJXtlZwgZXhhY3QgY29zdCDrpbwg64SY6ri064ukLiDsmbjrtoAvbGVnYWN5IGNhbGxlciDqsIAg67mE7Jqp7J2EXG4gICAgLy8g7IOd65617ZWcIOqyveyasOyXkOunjCDsoIDsnqXrkJwg66qo6424K3VzYWdlIOuhnCDqs4TsgrDtlZzri6QuXG4gICAgaWYgKFxuICAgICAgcGFyYW1zLmNvc3RfdXNkID09PSB1bmRlZmluZWQgJiZcbiAgICAgIHBhcmFtcy5pbnB1dF90b2tlbnMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgcGFyYW1zLm91dHB1dF90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgY29uc3Qgcm93ID0gYXdhaXQgdGhpcy5nZXRQdXJpKFwiclwiKVxuICAgICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgICAuc2VsZWN0KHsgbW9kZWxfbmFtZTogXCJtb2RlbF9uYW1lXCIgfSlcbiAgICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgICAuZmlyc3QoKTtcbiAgICAgIGNvbnN0IGVmZmVjdGl2ZU1vZGVsTmFtZSA9IHBhcmFtcy5tb2RlbF9uYW1lID8/IHJvdz8ubW9kZWxfbmFtZTtcbiAgICAgIGlmIChlZmZlY3RpdmVNb2RlbE5hbWUpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBjYW5vbmljYWxNb2RlbE5hbWUoZWZmZWN0aXZlTW9kZWxOYW1lKTtcbiAgICAgICAgY29uc3QgdXNhZ2UgPSBub3JtYWxpemVkVXNhZ2VGb3JDb3N0KHtcbiAgICAgICAgICB0b2tlbl9uYW1lOiBwYXJhbXMudG9rZW5fbmFtZSxcbiAgICAgICAgICBtb2RlbF9uYW1lOiBlZmZlY3RpdmVNb2RlbE5hbWUsXG4gICAgICAgICAgaW5wdXRfdG9rZW5zOiBwYXJhbXMuaW5wdXRfdG9rZW5zLFxuICAgICAgICAgIG91dHB1dF90b2tlbnM6IHBhcmFtcy5vdXRwdXRfdG9rZW5zLFxuICAgICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBwYXJhbXMuY2FjaGVfcmVhZF90b2tlbnMgPz8gMCxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl90b2tlbnMgPz8gMCxcbiAgICAgICAgICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHBhcmFtcy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMsXG4gICAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBwYXJhbXMuY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zLFxuICAgICAgICB9KTtcbiAgICAgICAgdXBkYXRlLmNvc3RfdXNkID0gTWF0aC5yb3VuZChcbiAgICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKG1vZGVsLCB7XG4gICAgICAgICAgICBpbnB1dFRva2VuczogdXNhZ2UuaW5wdXRUb2tlbnMsXG4gICAgICAgICAgICBvdXRwdXRUb2tlbnM6IHVzYWdlLm91dHB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICAgIGNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW06IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczVtLFxuICAgICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICAgIH0pICogMV8wMDBfMDAwLFxuICAgICAgICApO1xuICAgICAgICB1cGRhdGUuY29zdF9zb3VyY2UgPSBcInByaWNpbmdfdGFibGVcIjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCB3ZGIgPSB0aGlzLmdldFB1cmkoXCJ3XCIpO1xuICAgIHdkYi51YlJlZ2lzdGVyKFwicmVxdWVzdF9sb2dzXCIsIHVwZGF0ZSk7XG4gICAgYXdhaXQgd2RiLnRyYW5zYWN0aW9uKGFzeW5jICh0cngpID0+IHtcbiAgICAgIGF3YWl0IHRyeC51YlVwc2VydChcInJlcXVlc3RfbG9nc1wiKTtcbiAgICB9KTtcbiAgfVxuXG4gIGFzeW5jIGZpcnN0R2VuZXJhdGVTdGVwVHRmdChyZXF1ZXN0TG9nSWQ6IG51bWJlcik6IFByb21pc2U8bnVtYmVyIHwgbnVsbD4ge1xuICAgIGNvbnN0IHJvdyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcInJcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyB0dGZ0X21zOiBcInR0ZnRfbXNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpXG4gICAgICAud2hlcmUoXCJ0dGZ0X21zXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwic3RlcF9pbmRleFwiLCBcImFzY1wiKVxuICAgICAgLm9yZGVyQnkoXCJpZFwiLCBcImFzY1wiKVxuICAgICAgLmZpcnN0KCk7XG4gICAgcmV0dXJuIHJvdz8udHRmdF9tcyA9PT0gbnVsbCB8fCByb3c/LnR0ZnRfbXMgPT09IHVuZGVmaW5lZCA/IG51bGwgOiBOdW1iZXIocm93LnR0ZnRfbXMpO1xuICB9XG5cbiAgYXN5bmMgYWdncmVnYXRlU3RlcFVzYWdlKHJlcXVlc3RMb2dJZDogbnVtYmVyKTogUHJvbWlzZTxSZXF1ZXN0TG9nU3RlcEFnZ3JlZ2F0ZT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAuc2VsZWN0KFNURVBfQUdHUkVHQVRFX1NFTEVDVClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC53aGVyZShcInR5cGVcIiwgXCJnZW5lcmF0ZVwiKTtcbiAgICByZXR1cm4gYWdncmVnYXRlR2VuZXJhdGVTdGVwUm93cyhyb3dzIGFzIEFycmF5PFJlY29yZDxzdHJpbmcsIHVua25vd24+Pik7XG4gIH1cblxuICAvKipcbiAgICogRmluZHMgc3RhbGUgY2FuZGlkYXRlcywgdGhlbiBleHBpcmVzIGVhY2ggcnVuIGluIGl0cyBvd24gc2hvcnQgdHJhbnNhY3Rpb24uXG4gICAqIFRoZSBjYW5kaWRhdGUgcXVlcnkgaXMgb25seSBhIGhpbnQ7IHRoZSB0cmFuc2FjdGlvbmFsIG9wZXJhdGlvbiByZWNoZWNrcyBpdFxuICAgKiBhZnRlciBhY3F1aXJpbmcgdGhlIGFkdmlzb3J5IGxvY2sgc2hhcmVkIHdpdGggdG9vbCBmb2xsb3ctdXBzLlxuICAgKi9cbiAgYXN5bmMgZXhwaXJlU3RhbGVUb29sV2FpdGluZ1J1bnMoXG4gICAgdGhyZXNob2xkTXM6IG51bWJlcixcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgICBsaW1pdDogbnVtYmVyID0gMTAsXG4gICk6IFByb21pc2U8bnVtYmVyW10+IHtcbiAgICBjb25zdCB0aHJlc2hvbGQgPSBuZXcgRGF0ZShEYXRlLm5vdygpIC0gdGhyZXNob2xkTXMpO1xuICAgIGNvbnN0IGNhbmRpZGF0ZUlkcyA9IGF3YWl0IHRoaXMuZmluZFN0YWxlVG9vbFdhaXRpbmdSdW5DYW5kaWRhdGVzKHRocmVzaG9sZCwgbGltaXQpO1xuICAgIGNvbnN0IGV4cGlyZWRJZHM6IG51bWJlcltdID0gW107XG4gICAgZm9yIChjb25zdCByZXF1ZXN0TG9nSWQgb2YgY2FuZGlkYXRlSWRzKSB7XG4gICAgICBpZiAoYXdhaXQgdGhpcy50cnlFeHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVuKHJlcXVlc3RMb2dJZCwgdGhyZXNob2xkLCBlcnJvck1lc3NhZ2UpKSB7XG4gICAgICAgIGV4cGlyZWRJZHMucHVzaChyZXF1ZXN0TG9nSWQpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZXhwaXJlZElkcztcbiAgfVxuXG4gIGFzeW5jIGZpbmRTdGFsZVRvb2xXYWl0aW5nUnVuQ2FuZGlkYXRlcyh0aHJlc2hvbGQ6IERhdGUsIGxpbWl0OiBudW1iZXIpOiBQcm9taXNlPG51bWJlcltdPiB7XG4gICAgY29uc3Qgcm93cyA9IGF3YWl0IHRoaXMuZ2V0UHVyaShcIndcIilcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dzXCIpXG4gICAgICAuam9pbihcInJlcXVlc3RfbG9nX3N0ZXBzXCIsIFwicmVxdWVzdF9sb2dzLmlkXCIsIFwicmVxdWVzdF9sb2dfc3RlcHMucmVxdWVzdF9sb2dfaWRcIilcbiAgICAgIC5kaXN0aW5jdChcInJlcXVlc3RfbG9ncy5pZFwiKVxuICAgICAgLnNlbGVjdCh7IGlkOiBcInJlcXVlc3RfbG9ncy5pZFwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ3Muc3RhdHVzXCIsIFwicnVubmluZ1wiKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMudHlwZVwiLCBcInRvb2xfY2FsbFwiKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMuY3JlYXRlZF9hdFwiLCBcIjxcIiwgdGhyZXNob2xkKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfc3RlcHMudG9vbF9yZXN1bHRcIiwgbnVsbClcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX3N0ZXBzLmVycm9yXCIsIG51bGwpXG4gICAgICAubGltaXQobGltaXQpO1xuICAgIHJldHVybiByb3dzLm1hcCgoeyBpZCB9KSA9PiBpZCk7XG4gIH1cblxuICBAdHJhbnNhY3Rpb25hbCh7IGRiUHJlc2V0OiBcIndcIiB9KVxuICBhc3luYyB0cnlFeHBpcmVTdGFsZVRvb2xXYWl0aW5nUnVuKFxuICAgIHJlcXVlc3RMb2dJZDogbnVtYmVyLFxuICAgIHRocmVzaG9sZDogRGF0ZSxcbiAgICBlcnJvck1lc3NhZ2U6IHN0cmluZyxcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3Qgd2RiID0gdGhpcy5nZXRQdXJpKFwid1wiKTtcbiAgICBjb25zdCBsb2NrUmVzdWx0ID0gKGF3YWl0IHdkYi5rbmV4LnJhdyhcIlNFTEVDVCBwZ190cnlfYWR2aXNvcnlfeGFjdF9sb2NrKD8sID8pIEFTIGFjcXVpcmVkXCIsIFtcbiAgICAgIFJFUVVFU1RfTE9HX1JVTl9MT0NLX0NMQVNTX0lELFxuICAgICAgcmVxdWVzdExvZ0lkLFxuICAgIF0pKSBhcyB7IHJvd3M/OiBBcnJheTx7IGFjcXVpcmVkPzogYm9vbGVhbiB9PiB9O1xuICAgIGlmIChsb2NrUmVzdWx0LnJvd3M/LlswXT8uYWNxdWlyZWQgIT09IHRydWUpIHJldHVybiBmYWxzZTtcblxuICAgIC8vIFRoZSBmb2xsb3ctdXAgcGF0aCB1c2VzIHRoZSBzYW1lIHdyaXRlciB0cmFuc2FjdGlvbiBsb2NrLiBSZWNoZWNrIGFmdGVyXG4gICAgLy8gbG9ja2luZyBzbyBhIHJlc3VsdCBjb21taXR0ZWQgZHVyaW5nIGNhbmRpZGF0ZSBkaXNjb3ZlcnkgbWFrZXMgdGhpcyBhIG5vLW9wLlxuICAgIGNvbnN0IHVucmVzb2x2ZWQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyBpZDogXCJpZFwiIH0pXG4gICAgICAud2hlcmUoXCJyZXF1ZXN0X2xvZ19pZFwiLCByZXF1ZXN0TG9nSWQpXG4gICAgICAud2hlcmUoXCJ0eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAud2hlcmUoXCJjcmVhdGVkX2F0XCIsIFwiPFwiLCB0aHJlc2hvbGQpXG4gICAgICAud2hlcmUoXCJ0b29sX3Jlc3VsdFwiLCBudWxsKVxuICAgICAgLndoZXJlKFwiZXJyb3JcIiwgbnVsbClcbiAgICAgIC5maXJzdCgpO1xuICAgIGlmICghdW5yZXNvbHZlZCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgY29uc3Qgc3RlcFJvd3MgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoU1RFUF9BR0dSRUdBVEVfU0VMRUNUKVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpO1xuICAgIGNvbnN0IGFnZ3JlZ2F0ZSA9IGFnZ3JlZ2F0ZUdlbmVyYXRlU3RlcFJvd3Moc3RlcFJvd3MgYXMgQXJyYXk8UmVjb3JkPHN0cmluZywgdW5rbm93bj4+KTtcbiAgICBjb25zdCBmaXJzdFR0ZnQgPSBhd2FpdCB3ZGJcbiAgICAgIC5mcm9tKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgIC5zZWxlY3QoeyB0dGZ0X21zOiBcInR0ZnRfbXNcIiB9KVxuICAgICAgLndoZXJlKFwicmVxdWVzdF9sb2dfaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwidHlwZVwiLCBcImdlbmVyYXRlXCIpXG4gICAgICAud2hlcmUoXCJ0dGZ0X21zXCIsIFwiIT1cIiwgbnVsbClcbiAgICAgIC5vcmRlckJ5KFwic3RlcF9pbmRleFwiLCBcImFzY1wiKVxuICAgICAgLm9yZGVyQnkoXCJpZFwiLCBcImFzY1wiKVxuICAgICAgLmZpcnN0KCk7XG5cbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgd2RiXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLndoZXJlKFwiaWRcIiwgcmVxdWVzdExvZ0lkKVxuICAgICAgLndoZXJlKFwic3RhdHVzXCIsIFwicnVubmluZ1wiKVxuICAgICAgLnVwZGF0ZSh7XG4gICAgICAgIHN0YXR1czogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcl9tZXNzYWdlOiBlcnJvck1lc3NhZ2UsXG4gICAgICAgIGlucHV0X3Rva2VuczogYWdncmVnYXRlLmlucHV0X3Rva2VucyxcbiAgICAgICAgb3V0cHV0X3Rva2VuczogYWdncmVnYXRlLm91dHB1dF90b2tlbnMsXG4gICAgICAgIGNhY2hlX3JlYWRfdG9rZW5zOiBhZ2dyZWdhdGUuY2FjaGVfcmVhZF90b2tlbnMsXG4gICAgICAgIGNhY2hlX2NyZWF0aW9uX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uX3Rva2VucyxcbiAgICAgICAgLi4uKGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8geyBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IGFnZ3JlZ2F0ZS5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnMgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgICAuLi4oYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgPyB7IGNhY2hlX2NyZWF0aW9uXzFoX3Rva2VuczogYWdncmVnYXRlLmNhY2hlX2NyZWF0aW9uXzFoX3Rva2VucyB9XG4gICAgICAgICAgOiB7fSksXG4gICAgICAgIGR1cmF0aW9uX21zOiBhZ2dyZWdhdGUuZHVyYXRpb25fbXMsXG4gICAgICAgIGZhbGxiYWNrX2NvdW50OiBhZ2dyZWdhdGUuZmFsbGJhY2tfY291bnQsXG4gICAgICAgIGNvc3RfdXNkOiBhZ2dyZWdhdGUuY29zdF91c2QsXG4gICAgICAgIC4uLihhZ2dyZWdhdGUuY29zdF9zb3VyY2UgIT09IHVuZGVmaW5lZCA/IHsgY29zdF9zb3VyY2U6IGFnZ3JlZ2F0ZS5jb3N0X3NvdXJjZSB9IDoge30pLFxuICAgICAgICB0dGZ0X21zOlxuICAgICAgICAgIGZpcnN0VHRmdD8udHRmdF9tcyA9PT0gbnVsbCB8fCBmaXJzdFR0ZnQ/LnR0ZnRfbXMgPT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyAwXG4gICAgICAgICAgICA6IE51bWJlcihmaXJzdFR0ZnQudHRmdF9tcyksXG4gICAgICB9KTtcbiAgICByZXR1cm4gdXBkYXRlZCA+IDA7XG4gIH1cblxuICAvKipcbiAgICogQXBwbGllcyBhIG5hdGl2ZSBxZ3JpZCB0b29sIGZvbGxvdy11cCBhbmQgY29tcHV0ZXMgaXRzIG5leHQgc3RlcCBpbmRleCB3aGlsZVxuICAgKiBob2xkaW5nIHRoZSBwZXItcnVuIGFkdmlzb3J5IGxvY2sgc2hhcmVkIHdpdGggc3RhbGUgY2xlYW51cC5cbiAgICovXG4gIEB0cmFuc2FjdGlvbmFsKHsgZGJQcmVzZXQ6IFwid1wiIH0pXG4gIGFzeW5jIGNvbnRpbnVlVG9vbFJ1bihcbiAgICByZXF1ZXN0TG9nSWQ6IG51bWJlcixcbiAgICB0b29sUmVzdWx0czogVG9vbFJlc3VsdENvbnRpbnVhdGlvbltdLFxuICApOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG4gICAgYXdhaXQgd2RiLmtuZXgucmF3KFwiU0VMRUNUIHBnX2Fkdmlzb3J5X3hhY3RfbG9jayg/LCA/KVwiLCBbXG4gICAgICBSRVFVRVNUX0xPR19SVU5fTE9DS19DTEFTU19JRCxcbiAgICAgIHJlcXVlc3RMb2dJZCxcbiAgICBdKTtcblxuICAgIGNvbnN0IHJ1biA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ3NcIilcbiAgICAgIC5zZWxlY3QoeyBzdGF0dXM6IFwic3RhdHVzXCIgfSlcbiAgICAgIC53aGVyZShcImlkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5maXJzdCgpO1xuICAgIGlmICghcnVuKSB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgbG9nIHJ1biAke3JlcXVlc3RMb2dJZH0gbm90IGZvdW5kYCk7XG4gICAgaWYgKHJ1bi5zdGF0dXMgIT09IFwicnVubmluZ1wiKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYHJlcXVlc3QgbG9nIHJ1biAke3JlcXVlc3RMb2dJZH0gaXMgYWxyZWFkeSAke3J1bi5zdGF0dXN9YCk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCByZXN1bHQgb2YgdG9vbFJlc3VsdHMpIHtcbiAgICAgIGF3YWl0IHdkYlxuICAgICAgICAuZnJvbShcInJlcXVlc3RfbG9nX3N0ZXBzXCIpXG4gICAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgICAgLndoZXJlKFwidG9vbF9jYWxsX2lkXCIsIHJlc3VsdC50b29sQ2FsbElkKVxuICAgICAgICAud2hlcmUoXCJ0eXBlXCIsIFwidG9vbF9jYWxsXCIpXG4gICAgICAgIC51cGRhdGUocmVzdWx0LmlzRXJyb3IgPyB7IGVycm9yOiByZXN1bHQub3V0cHV0IH0gOiB7IHRvb2xfcmVzdWx0OiByZXN1bHQub3V0cHV0IH0pO1xuICAgIH1cblxuICAgIGNvbnN0IHJvdyA9IGF3YWl0IHdkYlxuICAgICAgLmZyb20oXCJyZXF1ZXN0X2xvZ19zdGVwc1wiKVxuICAgICAgLnNlbGVjdCh7IG1heF9zdGVwOiBQdXJpLm1heChcInN0ZXBfaW5kZXhcIikgfSlcbiAgICAgIC53aGVyZShcInJlcXVlc3RfbG9nX2lkXCIsIHJlcXVlc3RMb2dJZClcbiAgICAgIC5maXJzdCgpO1xuICAgIHJldHVybiAocm93Py5tYXhfc3RlcCA/PyAtMSkgKyAxO1xuICB9XG5cbiAgLyoqXG4gICAqIO2ZlOuptCDtkZzsi5zsmqkg7LSdIOu5hOyaqS4g66qp66Gd6rO8IOqwmeydgCDtlYTthLDrpbwg7KCB7Jqp7ZWc64ukLlxuICAgKlxuICAgKiDsoITssrTrpbwg7KGw6rG0IOyXhuydtCBTVU0g7ZWcIOuSpCwgYGNvc3Rfc291cmNlYCDqsIAg7JeG64qUIGxlZ2FjeSByb3cg7J2YIOywqOyVoeunjCDrs7TsoJXtlZzri6QuXG4gICAqIOyhsOqxtCDsl4bripQgU1VNIOydtOyWtOyVvCBgKHByb2plY3RfbmFtZSwgY29zdF91c2QpYCDsu6TrsoTrp4Eg7J24642x7Iqk6rCAIEluZGV4IE9ubHkgU2NhbiDsnYRcbiAgICog7YOE64ukIOKAlCBgY29zdF9zb3VyY2UgSVMgTk9UIE5VTExgIOydhCDqsbjrqbQg6re4IOy7rOufvOydtCDsnbjrjbHsiqTsl5Ag7JeG7Ja0IGhlYXAg7J2EIOuLpOyLnCDrtJDslbxcbiAgICog7ZWY66+A66GcIO2UjOuemOuEiOqwgCDsnbjrjbHsiqTrpbwg67KE66as6rOgIHNlcSBzY2FuIOycvOuhnCDrj4zslYTqsITri6Qo7Iuk7LihIDIzMG1zIOKGkiA4MTRtcykuXG4gICAqXG4gICAqIGxlZ2FjeSDrs7TsoJXsnYQg64Ko6rKo65GUIOydtOycoDog67Cx7ZWE66GcIOq4sOyhtCBsZWdhY3kg64qUIDAg7J20IOuQmOyXiOyngOunjCwg7Jm467aAIOuhnOqxsOqwgFxuICAgKiBgQXBwZW5kU3RlcElucHV0YC9gRmluaXNoUnVuSW5wdXRgIOycvOuhnCBjb3N0U291cmNlIOyXhuydtCDrhKPsnLzrqbQg64uk7IucIOyDneq4uCDsiJgg7J6I64ukLlxuICAgKiDqt7jrn7Agcm93IOuKlCDsoIDsnqXqsJIg64yA7IugIO2YhOyerCDqsIDqsqntkZwg7J6s6rOE7IKw6rCS7J20IOunnuycvOuvgOuhnCDssKjslaHsnYQg642U7ZWc64ukLlxuICAgKlxuICAgKiDtlYTthLAg7KGw6rG07J2EIOyXrOq4sOyEnCDri6Tsi5wg6rWs7ZiE7ZWY7KeAIOyViuqzoCBgYXBwbHlMaXN0RmlsdGVyc2Ag66W8IOqzteycoO2VmOuKlCDqsoPsnbQg7ZW17Ius7J2064ukIOKAlFxuICAgKiDrkZAg7L+866as6rCAIOqwgeyekCDtlYTthLDrpbwg6rCA7KeA66m0IO2ZlOuptOyXkOyEnCDtlYTthLDrpbwg6rG47JeI7J2EIOuVjCDtlokg7IiY7JmAIOu5hOyaqeydtCDsobDsmqntnogg7Ja06riL64Kc64ukLlxuICAgKi9cbiAgYXN5bmMgdG90YWxDb3N0KHJhd1BhcmFtczogUmVxdWVzdExvZ0xpc3RQYXJhbXMgPSB7IG51bTogMCwgcGFnZTogMSB9KTogUHJvbWlzZTxudW1iZXI+IHtcbiAgICBjb25zdCBwYXJhbXMgPSB7XG4gICAgICBudW06IDAsXG4gICAgICBwYWdlOiAxLFxuICAgICAgc2VhcmNoOiBcImlkXCIgYXMgY29uc3QsXG4gICAgICAuLi5yYXdQYXJhbXMsXG4gICAgfSBzYXRpc2ZpZXMgUmVxdWVzdExvZ0xpc3RQYXJhbXM7XG5cbiAgICBjb25zdCB7IHFiOiB0b3RhbFFiIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoXCJDXCIpO1xuICAgIHRoaXMuYXBwbHlMaXN0RmlsdGVycyh0b3RhbFFiLCBwYXJhbXMpO1xuICAgIC8vIHN1YnNldCBxYiDripQg7Lus65+8IOuqqeuhneydtCDsnbTrr7ggU0VMRUNUIOyXkCDrsJXtmIAg7J6I7Ja0IOynkeqzhOulvCDslrnsnLzrqbQgR1JPVVAgQlkg7JeQ65+s6rCAIOuCnOuLpC5cbiAgICAvLyBleGVjdXRlQ291bnRRdWVyeSDsmYAg6rCZ7J2AIOuwqeyLneycvOuhnCBzZWxlY3Qg66W8IOu5hOyasOqzoCDsp5Hqs4Trp4wg64Ko6ri064ukLlxuICAgIGNvbnN0IHN0b3JlZCA9IGF3YWl0IHRvdGFsUWJcbiAgICAgIC5jbGVhcihcInNlbGVjdFwiKVxuICAgICAgLy8g7J2M7IiYIOyggOyepeqwkijqs7zqsbAg67KE6re4KeydgCAwIOycvOuhnCDriIzrn6zshJwg642U7ZWc64ukIOKAlCBKUyDsqr0gTWF0aC5tYXgg7JmAIOqwmeydgCDqt5zsuZkuXG4gICAgICAuc2VsZWN0KHtcbiAgICAgICAgdG90YWw6IFB1cmkucmF3TnVtYmVyKFwiQ09BTEVTQ0UoU1VNKEdSRUFURVNUKHJlcXVlc3RfbG9ncy5jb3N0X3VzZCwgMCkpLCAwKVwiKSxcbiAgICAgIH0pXG4gICAgICAuZmlyc3QoKTtcblxuICAgIGNvbnN0IHsgcWI6IGxlZ2FjeVFiIH0gPSB0aGlzLmdldFN1YnNldFF1ZXJpZXMoXCJDXCIpO1xuICAgIHRoaXMuYXBwbHlMaXN0RmlsdGVycyhsZWdhY3lRYiwgcGFyYW1zKTtcbiAgICBjb25zdCBsZWdhY3lSb3dzID0gYXdhaXQgbGVnYWN5UWJcbiAgICAgIC53aGVyZVJhdyhcInJlcXVlc3RfbG9ncy5jb3N0X3NvdXJjZSBJUyBOVUxMIE9SIHJlcXVlc3RfbG9ncy5jb3N0X3VzZCBJUyBOVUxMXCIpXG4gICAgICAuY2xlYXIoXCJzZWxlY3RcIilcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICB0b2tlbl9uYW1lOiBcInJlcXVlc3RfbG9ncy50b2tlbl9uYW1lXCIsXG4gICAgICAgIG1vZGVsX25hbWU6IFwicmVxdWVzdF9sb2dzLm1vZGVsX25hbWVcIixcbiAgICAgICAgaW5wdXRfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5pbnB1dF90b2tlbnNcIixcbiAgICAgICAgb3V0cHV0X3Rva2VuczogXCJyZXF1ZXN0X2xvZ3Mub3V0cHV0X3Rva2Vuc1wiLFxuICAgICAgICBjYWNoZV9yZWFkX3Rva2VuczogXCJyZXF1ZXN0X2xvZ3MuY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl81bV90b2tlbnNcIixcbiAgICAgICAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiBcInJlcXVlc3RfbG9ncy5jYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICAgICAgY29zdF91c2Q6IFwicmVxdWVzdF9sb2dzLmNvc3RfdXNkXCIsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IHN0b3JlZFRvdGFsID0gTnVtYmVyKHN0b3JlZD8udG90YWwgPz8gMCkgLyBNSUNST19VU0Q7XG5cbiAgICAvLyBsZWdhY3kgcm93IOuKlCDsnIQgU1VNIOyXkCDsoIDsnqXqsJLsnLzroZwg7J2066+4IO2PrO2VqOuQmOyWtCDsnojri6QuIOyerOqzhOyCsOqwkuqzvOydmCDssKjslaHrp4wg642U7ZWc64ukLlxuICAgIHJldHVybiBsZWdhY3lSb3dzLnJlZHVjZSgoc3VtLCByb3cpID0+IHtcbiAgICAgIGNvbnN0IGFscmVhZHlTdW1tZWQgPSBNYXRoLm1heChyb3cuY29zdF91c2QgPz8gMCwgMCkgLyBNSUNST19VU0Q7XG4gICAgICBjb25zdCB1c2FnZSA9IG5vcm1hbGl6ZWRVc2FnZUZvckNvc3Qocm93KTtcbiAgICAgIGlmICghdXNhZ2UubW9kZWwpIHJldHVybiBzdW07XG4gICAgICByZXR1cm4gKFxuICAgICAgICBzdW0gK1xuICAgICAgICBjYWxjdWxhdGVDb3N0VXNkKHVzYWdlLm1vZGVsLCB7XG4gICAgICAgICAgaW5wdXRUb2tlbnM6IHVzYWdlLmlucHV0VG9rZW5zLFxuICAgICAgICAgIG91dHB1dFRva2VuczogdXNhZ2Uub3V0cHV0VG9rZW5zLFxuICAgICAgICAgIGNhY2hlZElucHV0VG9rZW5zOiB1c2FnZS5jYWNoZWRJbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VucyxcbiAgICAgICAgICBjYWNoZUNyZWF0aW9uSW5wdXRUb2tlbnM1bTogdXNhZ2UuY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zNW0sXG4gICAgICAgICAgY2FjaGVDcmVhdGlvbklucHV0VG9rZW5zMWg6IHVzYWdlLmNhY2hlQ3JlYXRpb25JbnB1dFRva2VuczFoLFxuICAgICAgICB9KSAtXG4gICAgICAgIGFscmVhZHlTdW1tZWRcbiAgICAgICk7XG4gICAgfSwgc3RvcmVkVG90YWwpO1xuICB9XG5cbiAgYXN5bmMgZGlzdGluY3RQcm9qZWN0TmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGNvbnN0IHJvd3MgPSBhd2FpdCB0aGlzLmdldFB1cmkoXCJyXCIpXG4gICAgICAuZnJvbShcInJlcXVlc3RfbG9nc1wiKVxuICAgICAgLmRpc3RpbmN0KFwicHJvamVjdF9uYW1lXCIpXG4gICAgICAud2hlcmUoXCJwcm9qZWN0X25hbWVcIiwgXCIhPVwiLCBudWxsKVxuICAgICAgLm9yZGVyQnkoXCJwcm9qZWN0X25hbWVcIiwgXCJhc2NcIilcbiAgICAgIC5zZWxlY3Qoe1xuICAgICAgICBwcm9qZWN0X25hbWU6IFwicHJvamVjdF9uYW1lXCIsXG4gICAgICB9KTtcbiAgICByZXR1cm4gcm93cy5tYXAoKHIpID0+IHIucHJvamVjdF9uYW1lISk7XG4gIH1cblxuICBAYXBpKHsgaHR0cE1ldGhvZDogXCJQT1NUXCIsIGNsaWVudHM6IFtcImF4aW9zXCIsIFwidGFuc3RhY2stbXV0YXRpb25cIl0gfSlcbiAgYXN5bmMgZGVsKGlkczogbnVtYmVyW10pOiBQcm9taXNlPG51bWJlcj4ge1xuICAgIGNvbnN0IHdkYiA9IHRoaXMuZ2V0UHVyaShcIndcIik7XG5cbiAgICAvLyB0cmFuc2FjdGlvblxuICAgIGF3YWl0IHdkYi50cmFuc2FjdGlvbihhc3luYyAodHJ4KSA9PiB7XG4gICAgICBhd2FpdCB0cnhcbiAgICAgICAgLnRhYmxlKFwicmVxdWVzdF9sb2dfc3RlcHNcIilcbiAgICAgICAgLndoZXJlSW4oXCJyZXF1ZXN0X2xvZ19zdGVwcy5yZXF1ZXN0X2xvZ19pZFwiLCBpZHMpXG4gICAgICAgIC5kZWxldGUoKTtcbiAgICAgIHJldHVybiB0cngudGFibGUoXCJyZXF1ZXN0X2xvZ3NcIikud2hlcmVJbihcInJlcXVlc3RfbG9ncy5pZFwiLCBpZHMpLmRlbGV0ZSgpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIGlkcy5sZW5ndGg7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dNb2RlbCA9IG5ldyBSZXF1ZXN0TG9nTW9kZWxDbGFzcygpO1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBdUJBLE1BQWEsWUFBWTtBQUN6QixNQUFNLGdDQUFnQztBQXFCdEMsTUFBTSx3QkFBd0I7Q0FDNUIsY0FBYztDQUNkLGVBQWU7Q0FDZixtQkFBbUI7Q0FDbkIsdUJBQXVCO0NBQ3ZCLDBCQUEwQjtDQUMxQiwwQkFBMEI7Q0FDMUIsYUFBYTtDQUNiLGdCQUFnQjtDQUNoQixVQUFVO0NBQ1YsYUFBYTtBQUNmO0FBRUEsU0FBUywwQkFBMEIsTUFBK0Q7Q0FDaEcsTUFBTSxPQUFPLFVBQ1gsS0FBSyxRQUFRLE9BQU8sUUFBUSxRQUFRLE9BQU8sSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDO0NBQ2hFLE1BQU0sZUFBZSxVQUNuQixLQUFLLE1BQU0sUUFBUSxJQUFJLFdBQVcsUUFBUSxJQUFJLFdBQVcsTUFBUyxJQUFJLElBQUksS0FBSyxJQUFJO0NBQ3JGLE1BQU0sWUFBWSxVQUFzQztFQUN0RCxNQUFNLFNBQVMsQ0FDYixHQUFHLElBQUksSUFDTCxLQUNHLEtBQUssUUFBUSxJQUFJLE1BQU0sQ0FBQyxDQUN4QixRQUFRLFVBQTJCLE9BQU8sVUFBVSxZQUFZLE1BQU0sU0FBUyxDQUFDLENBQ3JGLENBQ0Y7RUFDQSxJQUFJLE9BQU8sV0FBVyxHQUFHLE9BQU87RUFDaEMsT0FBTyxPQUFPLFdBQVcsSUFBSSxPQUFPLEtBQUs7Q0FDM0M7Q0FDQSxPQUFPO0VBQ0wsY0FBYyxJQUFJLGNBQWM7RUFDaEMsZUFBZSxJQUFJLGVBQWU7RUFDbEMsbUJBQW1CLElBQUksbUJBQW1CO0VBQzFDLHVCQUF1QixJQUFJLHVCQUF1QjtFQUNsRCwwQkFBMEIsWUFBWSwwQkFBMEI7RUFDaEUsMEJBQTBC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
@@ -238,7 +238,24 @@ const RequestLogSubsetP = z.object({
238
238
  tool_call_count: z.int(),
239
239
  is_image_generation: z.boolean()
240
240
  });
241
- const RequestLogSubsetKey = z.enum(["A", "P"]);
241
+ const RequestLogSubsetC = z.object({
242
+ id: z.int(),
243
+ token_name: z.string().max(100).nullable(),
244
+ model_name: z.string().max(255).nullable(),
245
+ input_tokens: z.int(),
246
+ output_tokens: z.int(),
247
+ cache_read_tokens: z.int(),
248
+ cache_creation_tokens: z.int(),
249
+ cache_creation_5m_tokens: z.int().nullable(),
250
+ cache_creation_1h_tokens: z.int().nullable(),
251
+ cost_usd: z.int().nullable(),
252
+ cost_source: z.string().max(20).nullable()
253
+ });
254
+ const RequestLogSubsetKey = z.enum([
255
+ "A",
256
+ "P",
257
+ "C"
258
+ ]);
242
259
  const RequestLogStepSubsetA = z.object({
243
260
  id: z.int(),
244
261
  created_at: z.date(),
@@ -316,6 +333,6 @@ const TokenSubsetA = z.object({
316
333
  });
317
334
  const TokenSubsetKey = z.enum(["A"]);
318
335
  //#endregion
319
- export { RequestLogBaseListParams, RequestLogBaseSchema, RequestLogOrderBy, RequestLogOrderByLabel, RequestLogSearchField, RequestLogSearchFieldLabel, RequestLogStatus, RequestLogStatusLabel, RequestLogStepBaseListParams, RequestLogStepBaseSchema, RequestLogStepOrderBy, RequestLogStepOrderByLabel, RequestLogStepSearchField, RequestLogStepSearchFieldLabel, RequestLogStepSubsetA, RequestLogStepSubsetI, RequestLogStepSubsetKey, RequestLogStepSubsetT, RequestLogStepType, RequestLogStepTypeLabel, RequestLogSubsetA, RequestLogSubsetKey, RequestLogSubsetP, TokenBaseListParams, TokenBaseSchema, TokenOrderBy, TokenOrderByLabel, TokenSearchField, TokenSearchFieldLabel, TokenSubsetA, TokenSubsetKey };
336
+ export { RequestLogBaseListParams, RequestLogBaseSchema, RequestLogOrderBy, RequestLogOrderByLabel, RequestLogSearchField, RequestLogSearchFieldLabel, RequestLogStatus, RequestLogStatusLabel, RequestLogStepBaseListParams, RequestLogStepBaseSchema, RequestLogStepOrderBy, RequestLogStepOrderByLabel, RequestLogStepSearchField, RequestLogStepSearchFieldLabel, RequestLogStepSubsetA, RequestLogStepSubsetI, RequestLogStepSubsetKey, RequestLogStepSubsetT, RequestLogStepType, RequestLogStepTypeLabel, RequestLogSubsetA, RequestLogSubsetC, RequestLogSubsetKey, RequestLogSubsetP, TokenBaseListParams, TokenBaseSchema, TokenOrderBy, TokenOrderByLabel, TokenSearchField, TokenSearchFieldLabel, TokenSubsetA, TokenSubsetKey };
320
337
 
321
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmdlbmVyYXRlZC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24vc29uYW11LmdlbmVyYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBnZW5lcmF0ZWRcbiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlxuICovXG5cbi8qIG94bGludC1kaXNhYmxlICovXG5cbmltcG9ydCB7IHpBcnJheWFibGUsIFNvbmFtdVF1ZXJ5TW9kZSwgQXBwbHlTb25hbXVGaWx0ZXIgfSBmcm9tIFwic29uYW11XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBDdXN0b21TY2FsYXI6IEhpc3RvcnlJdGVtc1xuY29uc3QgSGlzdG9yeUl0ZW1zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgcm9sZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNvbnRlbnQ6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyZ3VtZW50czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNhbGxfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvdXRwdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4pO1xudHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyBDdXN0b21TY2FsYXI6IFRva2VuQ3JlZGVudGlhbHNcbmNvbnN0IFRva2VuQ3JlZGVudGlhbHMgPSB6LnVuaW9uKFtcbiAgei5vYmplY3Qoe1xuICAgIGFjY2Vzc1Rva2VuOiB6LnN0cmluZygpLFxuICAgIHJlZnJlc2hUb2tlbjogei5zdHJpbmcoKSxcbiAgICBleHBpcmVzQXQ6IHoubnVtYmVyKCksXG4gICAgYWNjb3VudFV1aWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgYWNjZXNzVG9rZW46IHouc3RyaW5nKCksXG4gICAgcmVmcmVzaFRva2VuOiB6LnN0cmluZygpLFxuICAgIGlkVG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogei5udW1iZXIoKSxcbiAgICBpZFRva2VuRXhwaXJlc0F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgYWNjb3VudElkOiB6LnN0cmluZygpLFxuICAgIHBsYW5UeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuXSk7XG50eXBlIFRva2VuQ3JlZGVudGlhbHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkNyZWRlbnRpYWxzPjtcblxuLy8gQ3VzdG9tU2NhbGFyOiBUb29sRGVmaW5pdGlvbnNcbmNvbnN0IFRvb2xEZWZpbml0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaW5wdXRTY2hlbWE6IHoudW5rbm93bigpLFxuICB9KSxcbik7XG50eXBlIFRvb2xEZWZpbml0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFRvb2xEZWZpbml0aW9ucz47XG5cbi8vIEVudW1zOiBSZXF1ZXN0TG9nXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ09yZGVyQnkgPSB6LmVudW0oW1wiaWQtZGVzY1wiXSkuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nT3JkZXJCeVwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dPcmRlckJ5ID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ09yZGVyQnk+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dPcmRlckJ5TGFiZWwgPSB7IFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIgfTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU2VhcmNoRmllbGQgPSB6XG4gIC5lbnVtKFtcImlkXCIsIFwidG9rZW5fbmFtZVwiLCBcInVzZXJfcHJvbXB0XCJdKVxuICAuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nU2VhcmNoRmllbGRcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU2VhcmNoRmllbGQgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU2VhcmNoRmllbGQ+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTZWFyY2hGaWVsZExhYmVsID0ge1xuICBpZDogXCJJRFwiLFxuICB0b2tlbl9uYW1lOiBcIu2GoO2BsOydtOumhFwiLFxuICB1c2VyX3Byb21wdDogXCLsgqzsmqnsnpAg7ZSE66Gs7ZSE7Yq4XCIsXG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGF0dXMgPSB6XG4gIC5lbnVtKFtcInJ1bm5pbmdcIiwgXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pXG4gIC5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGF0dXNcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0YXR1cz47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0YXR1c0xhYmVsID0ge1xuICBydW5uaW5nOiBcIuyLpO2WiSDspJFcIixcbiAgc3VjY2VlZGVkOiBcIuyEseqztVwiLFxuICBlcnJvcjogXCLsl5Drn6xcIixcbiAgYWJvcnRlZDogXCLspJHri6hcIixcbn07XG5cbi8vIEVudW1zOiBSZXF1ZXN0TG9nU3RlcFxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwVHlwZSA9IHouZW51bShbXCJnZW5lcmF0ZVwiLCBcInRvb2xfY2FsbFwiXSkuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nU3RlcFR5cGVcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFR5cGUgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFR5cGU+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwVHlwZUxhYmVsID0geyBnZW5lcmF0ZTogXCJMTE0g7IOd7ISxXCIsIHRvb2xfY2FsbDogXCJUb29sIO2YuOy2nFwiIH07XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBPcmRlckJ5ID0gei5lbnVtKFtcImlkLWFzY1wiXSkuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nU3RlcE9yZGVyQnlcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcE9yZGVyQnkgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcE9yZGVyQnk+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwT3JkZXJCeUxhYmVsID0geyBcImlkLWFzY1wiOiBcIklE7IicXCIgfTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkID0gei5lbnVtKFtcImlkXCJdKS5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGVwU2VhcmNoRmllbGRcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZD47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZExhYmVsID0geyBpZDogXCJJRFwiIH07XG5cbi8vIEVudW1zOiBUb2tlblxuZXhwb3J0IGNvbnN0IFRva2VuT3JkZXJCeSA9IHouZW51bShbXCJpZC1kZXNjXCIsIFwib3JkLWFzY1wiXSkuZGVzY3JpYmUoXCJUb2tlbk9yZGVyQnlcIik7XG5leHBvcnQgdHlwZSBUb2tlbk9yZGVyQnkgPSB6LmluZmVyPHR5cGVvZiBUb2tlbk9yZGVyQnk+O1xuZXhwb3J0IGNvbnN0IFRva2VuT3JkZXJCeUxhYmVsID0geyBcImlkLWRlc2NcIjogXCJJROy1nOyLoOyInFwiLCBcIm9yZC1hc2NcIjogXCLsiJzshJzsiJxcIiB9O1xuZXhwb3J0IGNvbnN0IFRva2VuU2VhcmNoRmllbGQgPSB6LmVudW0oW1wiaWRcIiwgXCJuYW1lXCJdKS5kZXNjcmliZShcIlRva2VuU2VhcmNoRmllbGRcIik7XG5leHBvcnQgdHlwZSBUb2tlblNlYXJjaEZpZWxkID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TZWFyY2hGaWVsZD47XG5leHBvcnQgY29uc3QgVG9rZW5TZWFyY2hGaWVsZExhYmVsID0geyBpZDogXCJJRFwiLCBuYW1lOiBcIuydtOumhFwiIH07XG5cbi8vIEJhc2VTY2hlbWE6IFJlcXVlc3RMb2dcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nQmFzZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICB0b2tlbl9uYW1lOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHByb2plY3RfbmFtZTogei5zdHJpbmcoKS5tYXgoNTApLm51bGxhYmxlKCksXG4gIG1vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgZmFsbGJhY2tfY291bnQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdXNlcl9wcm9tcHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgc3lzdGVtX3Byb21wdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICByZXNwb25zZTogei5zdHJpbmcoKSxcbiAgaW5wdXRfdG9rZW5zOiB6LmludCgpLFxuICBvdXRwdXRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9yZWFkX3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGR1cmF0aW9uX21zOiB6LmludCgpLFxuICB0dGZ0X21zOiB6LmludCgpLFxuICBjb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3NvdXJjZTogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIGltYWdlX2Nvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGltYWdlX2Nvc3RfbWV0aG9kOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5tYXgoMTApLm51bGxhYmxlKCksXG4gIGhpc3Rvcnk6IEhpc3RvcnlJdGVtcy5udWxsYWJsZSgpLFxuICB0b29sczogVG9vbERlZmluaXRpb25zLm51bGxhYmxlKCksXG4gIHN0YXR1czogUmVxdWVzdExvZ1N0YXR1cyxcbiAgZXJyb3JfbWVzc2FnZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfY291bnQ6IHouaW50KCksXG4gIGlzX2ltYWdlX2dlbmVyYXRpb246IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nQmFzZVNjaGVtYSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dCYXNlU2NoZW1hPiAmIHtcbiAgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFtcbiAgICBcImNyZWF0ZWRfYXRcIixcbiAgICBcInRva2VuX25hbWVcIixcbiAgICBcInByb2plY3RfbmFtZVwiLFxuICAgIFwibW9kZWxfbmFtZVwiLFxuICAgIFwicmVxdWVzdGVkX21vZGVsX25hbWVcIixcbiAgICBcImZhbGxiYWNrX2NvdW50XCIsXG4gICAgXCJ1c2VyX3Byb21wdFwiLFxuICAgIFwic3lzdGVtX3Byb21wdFwiLFxuICAgIFwicmVzcG9uc2VcIixcbiAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgIFwib3V0cHV0X3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgXCJ0dGZ0X21zXCIsXG4gICAgXCJjb3N0X3VzZFwiLFxuICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICBcImltYWdlX2Nvc3RfdXNkXCIsXG4gICAgXCJpbWFnZV9jb3N0X21ldGhvZFwiLFxuICAgIFwiZWZmb3J0XCIsXG4gICAgXCJoaXN0b3J5XCIsXG4gICAgXCJ0b29sc1wiLFxuICAgIFwic3RhdHVzXCIsXG4gICAgXCJlcnJvcl9tZXNzYWdlXCIsXG4gICAgXCJ0b29sX2NhbGxfY291bnRcIixcbiAgICBcImlzX2ltYWdlX2dlbmVyYXRpb25cIixcbiAgICBcImlkXCIsXG4gIF07XG59O1xuXG4vLyBCYXNlU2NoZW1hOiBSZXF1ZXN0TG9nU3RlcFxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwQmFzZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICByZXF1ZXN0X2xvZ19pZDogei5pbnQoKSxcbiAgc3RlcF9pbmRleDogei5pbnQoKSxcbiAgdHlwZTogUmVxdWVzdExvZ1N0ZXBUeXBlLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBvdXRwdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdHRmdF9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBmaW5pc2hfcmVhc29uOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3RleHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaW5kZXg6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2lkOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX2FyZ3M6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9yZXN1bHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9kdXJhdGlvbl9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBlcnJvcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcEJhc2VTY2hlbWEgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcEJhc2VTY2hlbWE+ICYge1xuICByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgW1xuICAgIFwiY3JlYXRlZF9hdFwiLFxuICAgIFwibW9kZWxfbmFtZVwiLFxuICAgIFwicmVxdWVzdGVkX21vZGVsX25hbWVcIixcbiAgICBcImZhbGxiYWNrX2NvdW50XCIsXG4gICAgXCJpbnB1dF90b2tlbnNcIixcbiAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgXCJjb3N0X3VzZFwiLFxuICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgXCJ0dGZ0X21zXCIsXG4gICAgXCJmaW5pc2hfcmVhc29uXCIsXG4gICAgXCJyZWFzb25pbmdfdGV4dFwiLFxuICAgIFwicmVhc29uaW5nX3Rva2Vuc1wiLFxuICAgIFwidG9vbF9jYWxsX2luZGV4XCIsXG4gICAgXCJ0b29sX2NhbGxfaWRcIixcbiAgICBcInRvb2xfbmFtZVwiLFxuICAgIFwidG9vbF9hcmdzXCIsXG4gICAgXCJ0b29sX3Jlc3VsdFwiLFxuICAgIFwidG9vbF9kdXJhdGlvbl9tc1wiLFxuICAgIFwiZXJyb3JcIixcbiAgICBcImlkXCIsXG4gIF07XG59O1xuXG4vLyBCYXNlU2NoZW1hOiBUb2tlblxuZXhwb3J0IGNvbnN0IFRva2VuQmFzZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5tYXgoMjApLFxuICBjcmVkZW50aWFsczogVG9rZW5DcmVkZW50aWFscyxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYWN0aXZlOiB6LmJvb2xlYW4oKSxcbiAgb3JkOiB6LmludCgpLFxuICBxdW90YV90aHJlc2hvbGQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgd2VpZ2h0OiB6LmludCgpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlbkJhc2VTY2hlbWEgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkJhc2VTY2hlbWE+ICYge1xuICByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgW1xuICAgIFwiY3JlYXRlZF9hdFwiLFxuICAgIFwiYWN0aXZlXCIsXG4gICAgXCJvcmRcIixcbiAgICBcInF1b3RhX3RocmVzaG9sZFwiLFxuICAgIFwid2VpZ2h0XCIsXG4gICAgXCJpZFwiLFxuICBdO1xufTtcblxuLy8gQmFzZUxpc3RQYXJhbXM6IFJlcXVlc3RMb2dcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nQmFzZUxpc3RQYXJhbXMgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICAgIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICAgIHNlYXJjaDogUmVxdWVzdExvZ1NlYXJjaEZpZWxkLFxuICAgIGtleXdvcmQ6IHouc3RyaW5nKCksXG4gICAgb3JkZXJCeTogUmVxdWVzdExvZ09yZGVyQnksXG4gICAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gICAgaWQ6IHpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKSxcbiAgICBzb25hbXVGaWx0ZXI6IHouY3VzdG9tPEFwcGx5U29uYW11RmlsdGVyPFJlcXVlc3RMb2dCYXNlU2NoZW1hLCBuZXZlciwgbmV2ZXI+PigpLFxuICAgIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgICBwcm9qZWN0X25hbWU6IHouc3RyaW5nKCkubWF4KDUwKS5udWxsYWJsZSgpLFxuICAgIG1vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgfSlcbiAgLnBhcnRpYWwoKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dCYXNlTGlzdFBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dCYXNlTGlzdFBhcmFtcz47XG5cbi8vIEJhc2VMaXN0UGFyYW1zOiBSZXF1ZXN0TG9nU3RlcFxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwQmFzZUxpc3RQYXJhbXMgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICAgIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICAgIHNlYXJjaDogUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZCxcbiAgICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICAgIG9yZGVyQnk6IFJlcXVlc3RMb2dTdGVwT3JkZXJCeSxcbiAgICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgICBpZDogekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpLFxuICAgIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8UmVxdWVzdExvZ1N0ZXBCYXNlU2NoZW1hLCBuZXZlciwgbmV2ZXI+PigpLFxuICAgIHJlcXVlc3RfbG9nX2lkOiB6LmludCgpLFxuICB9KVxuICAucGFydGlhbCgpO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBCYXNlTGlzdFBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwQmFzZUxpc3RQYXJhbXM+O1xuXG4vLyBCYXNlTGlzdFBhcmFtczogVG9rZW5cbmV4cG9ydCBjb25zdCBUb2tlbkJhc2VMaXN0UGFyYW1zID0gelxuICAub2JqZWN0KHtcbiAgICBudW06IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgICBzZWFyY2g6IFRva2VuU2VhcmNoRmllbGQsXG4gICAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgICBvcmRlckJ5OiBUb2tlbk9yZGVyQnksXG4gICAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gICAgaWQ6IHpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKSxcbiAgICBzb25hbXVGaWx0ZXI6IHouY3VzdG9tPEFwcGx5U29uYW11RmlsdGVyPFRva2VuQmFzZVNjaGVtYSwgbmV2ZXIsIG5ldmVyPj4oKSxcbiAgfSlcbiAgLnBhcnRpYWwoKTtcbmV4cG9ydCB0eXBlIFRva2VuQmFzZUxpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkJhc2VMaXN0UGFyYW1zPjtcblxuLy8gU3Vic2V0czogUmVxdWVzdExvZ1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRBID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgcHJvamVjdF9uYW1lOiB6LnN0cmluZygpLm1heCg1MCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB1c2VyX3Byb21wdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBzeXN0ZW1fcHJvbXB0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHJlc3BvbnNlOiB6LnN0cmluZygpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCksXG4gIHR0ZnRfbXM6IHouaW50KCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF9tZXRob2Q6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm1heCgxMCkubnVsbGFibGUoKSxcbiAgaGlzdG9yeTogSGlzdG9yeUl0ZW1zLm51bGxhYmxlKCksXG4gIHRvb2xzOiBUb29sRGVmaW5pdGlvbnMubnVsbGFibGUoKSxcbiAgc3RhdHVzOiBSZXF1ZXN0TG9nU3RhdHVzLFxuICBlcnJvcl9tZXNzYWdlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9jb3VudDogei5pbnQoKSxcbiAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRBID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N1YnNldEE+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRQID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgcHJvamVjdF9uYW1lOiB6LnN0cmluZygpLm1heCg1MCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCksXG4gIHR0ZnRfbXM6IHouaW50KCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF9tZXRob2Q6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm1heCgxMCkubnVsbGFibGUoKSxcbiAgc3RhdHVzOiBSZXF1ZXN0TG9nU3RhdHVzLFxuICB0b29sX2NhbGxfY291bnQ6IHouaW50KCksXG4gIGlzX2ltYWdlX2dlbmVyYXRpb246IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0UCA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdWJzZXRQPjtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nID0ge1xuICBBOiBSZXF1ZXN0TG9nU3Vic2V0QTtcbiAgUDogUmVxdWVzdExvZ1N1YnNldFA7XG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRLZXkgPSB6LmVudW0oW1wiQVwiLCBcIlBcIl0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdWJzZXRLZXk+O1xuXG4vLyBTdWJzZXRzOiBSZXF1ZXN0TG9nU3RlcFxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU3Vic2V0QSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICBzdGVwX2luZGV4OiB6LmludCgpLFxuICB0eXBlOiBSZXF1ZXN0TG9nU3RlcFR5cGUsXG4gIG1vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgZmFsbGJhY2tfY291bnQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW5wdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfcmVhZF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICBkdXJhdGlvbl9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0dGZ0X21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGZpbmlzaF9yZWFzb246IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxuICByZWFzb25pbmdfdGV4dDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICByZWFzb25pbmdfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9pbmRleDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaWQ6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgdG9vbF9uYW1lOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfYXJnczogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0b29sX3Jlc3VsdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0b29sX2R1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU3Vic2V0QSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwU3Vic2V0QT47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTdWJzZXRUID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHN0ZXBfaW5kZXg6IHouaW50KCksXG4gIHR5cGU6IFJlcXVlc3RMb2dTdGVwVHlwZSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9yZWFkX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3NvdXJjZTogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIGR1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHR0ZnRfbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZmluaXNoX3JlYXNvbjogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIHJlYXNvbmluZ190b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2luZGV4OiB6LmludCgpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9pZDogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgdG9vbF9kdXJhdGlvbl9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBlcnJvcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFN1YnNldFQgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFN1YnNldFQ+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU3Vic2V0SSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIHRvb2xfYXJnczogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFN1YnNldEkgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFN1YnNldEk+O1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBTdWJzZXRNYXBwaW5nID0ge1xuICBBOiBSZXF1ZXN0TG9nU3RlcFN1YnNldEE7XG4gIFQ6IFJlcXVlc3RMb2dTdGVwU3Vic2V0VDtcbiAgSTogUmVxdWVzdExvZ1N0ZXBTdWJzZXRJO1xufTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFN1YnNldEtleSA9IHouZW51bShbXCJBXCIsIFwiVFwiLCBcIklcIl0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBTdWJzZXRLZXkgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFN1YnNldEtleT47XG5cbi8vIFN1YnNldHM6IFRva2VuXG5leHBvcnQgY29uc3QgVG9rZW5TdWJzZXRBID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHByb3ZpZGVyOiB6LnN0cmluZygpLm1heCgyMCksXG4gIGNyZWRlbnRpYWxzOiBUb2tlbkNyZWRlbnRpYWxzLFxuICBuYW1lOiB6LnN0cmluZygpLFxuICBhY3RpdmU6IHouYm9vbGVhbigpLFxuICBvcmQ6IHouaW50KCksXG4gIHF1b3RhX3RocmVzaG9sZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB3ZWlnaHQ6IHouaW50KCksXG59KTtcbmV4cG9ydCB0eXBlIFRva2VuU3Vic2V0QSA9IHouaW5mZXI8dHlwZW9mIFRva2VuU3Vic2V0QT47XG5leHBvcnQgdHlwZSBUb2tlblN1YnNldE1hcHBpbmcgPSB7XG4gIEE6IFRva2VuU3Vic2V0QTtcbn07XG5leHBvcnQgY29uc3QgVG9rZW5TdWJzZXRLZXkgPSB6LmVudW0oW1wiQVwiXSk7XG5leHBvcnQgdHlwZSBUb2tlblN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mIFRva2VuU3Vic2V0S2V5PjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQVdBLE1BQU0sZUFBZSxFQUFFLE1BQ3JCLEVBQUUsT0FBTztDQUNQLE1BQU0sRUFBRSxPQUFPO0NBQ2YsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDMUIsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDMUIsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDN0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDOUIsQ0FBQyxDQUNIO0FBSUEsTUFBTSxtQkFBbUIsRUFBRSxNQUFNLENBQy9CLEVBQUUsT0FBTztDQUNQLGFBQWEsRUFBRSxPQUFPO0NBQ3RCLGNBQWMsRUFBRSxPQUFPO0NBQ3ZCLFdBQVcsRUFBRSxPQUFPO0NBQ3BCLGFBQWEsRUFBRSxPQUFPO0FBQ3hCLENBQUMsR0FDRCxFQUFFLE9BQU87Q0FDUCxhQUFhLEVBQUUsT0FBTztDQUN0QixjQUFjLEVBQUUsT0FBTztDQUN2QixTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUM3QixzQkFBc0IsRUFBRSxPQUFPO0NBQy9CLGtCQUFrQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDdEMsV0FBVyxFQUFFLE9BQU87Q0FDcEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDaEMsQ0FBQyxDQUNILENBQUM7QUFJRCxNQUFNLGtCQUFrQixFQUFFLE1BQ3hCLEVBQUUsT0FBTztDQUNQLE1BQU0sRUFBRSxPQUFPO0NBQ2YsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsYUFBYSxFQUFFLFFBQVE7QUFDekIsQ0FBQyxDQUNIO0FBSUEsTUFBYSxvQkFBb0IsRUFBRSxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxTQUFTLG1CQUFtQjtBQUVqRixNQUFhLHlCQUF5QixFQUFFLFdBQVcsUUFBUTtBQUMzRCxNQUFhLHdCQUF3QixFQUNsQyxLQUFLO0NBQUM7Q0FBTTtDQUFjO0FBQWEsQ0FBQyxDQUFDLENBQ3pDLFNBQVMsdUJBQXVCO0FBRW5DLE1BQWEsNkJBQTZCO0NBQ3hDLElBQUk7Q0FDSixZQUFZO0NBQ1osYUFBYTtBQUNmO0FBQ0EsTUFBYSxtQkFBbUIsRUFDN0IsS0FBSztDQUFDO0NBQVc7Q0FBYTtDQUFTO0FBQVMsQ0FBQyxDQUFDLENBQ2xELFNBQVMsa0JBQWtCO0FBRTlCLE1BQWEsd0JBQXdCO0NBQ25DLFNBQVM7Q0FDVCxXQUFXO0NBQ1gsT0FBTztDQUNQLFNBQVM7QUFDWDtBQUdBLE1BQWEscUJBQXFCLEVBQUUsS0FBSyxDQUFDLFlBQVksV0FBVyxDQUFDLENBQUMsQ0FBQyxTQUFTLG9CQUFvQjtBQUVqRyxNQUFhLDBCQUEwQjtDQUFFLFVBQVU7Q0FBVSxXQUFXO0FBQVU7QUFDbEYsTUFBYSx3QkFBd0IsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxTQUFTLHVCQUF1QjtBQUV4RixNQUFhLDZCQUE2QixFQUFFLFVBQVUsTUFBTTtBQUM1RCxNQUFhLDRCQUE0QixFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsMkJBQTJCO0FBRTVGLE1BQWEsaUNBQWlDLEVBQUUsSUFBSSxLQUFLO0FBR3pELE1BQWEsZUFBZSxFQUFFLEtBQUssQ0FBQyxXQUFXLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxjQUFjO0FBRWxGLE1BQWEsb0JBQW9CO0NBQUUsV0FBVztDQUFTLFdBQVc7QUFBTTtBQUN4RSxNQUFhLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxNQUFNLE1BQU0sQ0FBQyxDQUFDLENBQUMsU0FBUyxrQkFBa0I7QUFFbEYsTUFBYSx3QkFBd0I7Q0FBRSxJQUFJO0NBQU0sTUFBTTtBQUFLO0FBRzVELE1BQWEsdUJBQXVCLEVBQUUsT0FBTztDQUMzQyxJQUFJLEVBQUUsSUFBSTtDQUNWLFlBQVksRUFBRSxLQUFLO0NBQ25CLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDekMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztDQUMxQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUNuRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ25DLFVBQVUsRUFBRSxPQUFPO0NBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3BCLGVBQWUsRUFBRSxJQUFJO0NBQ3JCLG1CQUFtQixFQUFFLElBQUk7Q0FDekIsdUJBQXVCLEVBQUUsSUFBSTtDQUM3QiwwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDM0MsYUFBYSxFQUFFLElBQUk7Q0FDbkIsU0FBUyxFQUFFLElBQUk7Q0FDZixVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMzQixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDakMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQ2hELFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Q0FDcEMsU0FBUyxhQUFhLFNBQVM7Q0FDL0IsT0FBTyxnQkFBZ0IsU0FBUztDQUNoQyxRQUFRO0NBQ1IsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsaUJBQWlCLEVBQUUsSUFBSTtDQUN2QixxQkFBcUIsRUFBRSxRQUFRO0FBQ2pDLENBQUM7QUFvQ0QsTUFBYSwyQkFBMkIsRUFBRSxPQUFPO0NBQy9DLElBQUksRUFBRSxJQUFJO0NBQ1YsWUFBWSxFQUFFLEtBQUs7Q0FDbkIsZ0JBQWdCLEVBQUUsSUFBSTtDQUN0QixZQUFZLEVBQUUsSUFBSTtDQUNsQixNQUFNO0NBQ04sWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUN6QyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDbkQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNqQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMvQixlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNoQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ3BDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDeEMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMzQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNCLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Q0FDekMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDMUIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztDQUMzQyxnQkFBZ0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ3BDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNsQyxjQUFjLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQzNDLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDeEMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDL0IsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDakMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNuQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztBQUM3QixDQUFDO0FBZ0NELE1BQWEsa0JBQWtCLEVBQUUsT0FBTztDQUN0QyxJQUFJLEVBQUUsSUFBSTtDQUNWLFlBQVksRUFBRSxLQUFLO0NBQ25CLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUU7Q0FDM0IsYUFBYTtDQUNiLE1BQU0sRUFBRSxPQUFPO0NBQ2YsUUFBUSxFQUFFLFFBQVE7Q0FDbEIsS0FBSyxFQUFFLElBQUk7Q0FDWCxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ2xDLFFBQVEsRUFBRSxJQUFJO0FBQ2hCLENBQUM7QUFhRCxNQUFhLDJCQUEyQixFQUNyQyxPQUFPO0NBQ04sS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVk7Q0FDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztDQUM1QixRQUFRO0NBQ1IsU0FBUyxFQUFFLE9BQU87Q0FDbEIsU0FBUztDQUNULFdBQVc7Q0FDWCxJQUFJLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7Q0FDMUMsY0FBYyxFQUFFLE9BQThEO0NBQzlFLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDekMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztDQUMxQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0FBQzNDLENBQUMsQ0FBQyxDQUNELFFBQVE7QUFJWCxNQUFhLCtCQUErQixFQUN6QyxPQUFPO0NBQ04sS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVk7Q0FDbEMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQztDQUM1QixRQUFRO0NBQ1IsU0FBUyxFQUFFLE9BQU87Q0FDbEIsU0FBUztDQUNULFdBQVc7Q0FDWCxJQUFJLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUM7Q0FDMUMsY0FBYyxFQUFFLE9BQWtFO0NBQ2xGLGdCQUFnQixFQUFFLElBQUk7QUFDeEIsQ0FBQyxDQUFDLENBQ0QsUUFBUTtBQUlYLE1BQWEsc0JBQXNCLEVBQ2hDLE9BQU87Q0FDTixLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsWUFBWTtDQUNsQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDO0NBQzVCLFFBQVE7Q0FDUixTQUFTLEVBQUUsT0FBTztDQUNsQixTQUFTO0NBQ1QsV0FBVztDQUNYLElBQUksV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQztDQUMxQyxjQUFjLEVBQUUsT0FBeUQ7QUFDM0UsQ0FBQyxDQUFDLENBQ0QsUUFBUTtBQUlYLE1BQWEsb0JBQW9CLEVBQUUsT0FBTztDQUN4QyxJQUFJLEVBQUUsSUFBSTtDQUNWLFlBQVksRUFBRSxLQUFLO0NBQ25CLFlBQVksRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDekMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztDQUMxQyxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUNuRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0NBQ25DLFVBQVUsRUFBRSxPQUFPO0NBQ25CLGNBQWMsRUFBRSxJQUFJO0NBQ3BCLGVBQWUsRUFBRSxJQUFJO0NBQ3JCLG1CQUFtQixFQUFFLElBQUk7Q0FDekIsdUJBQXVCLEVBQUUsSUFBSTtDQUM3QiwwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDM0MsYUFBYSxFQUFFLElBQUk7Q0FDbkIsU0FBUyxFQUFFLElBQUk7Q0FDZixVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMzQixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLGdCQUFnQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDakMsbUJBQW1CLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQ2hELFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Q0FDcEMsU0FBUyxhQUFhLFNBQVM7Q0FDL0IsT0FBTyxnQkFBZ0IsU0FBUztDQUNoQyxRQUFRO0NBQ1IsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsaUJBQWlCLEVBQUUsSUFBSTtDQUN2QixxQkFBcUIsRUFBRSxRQUFRO0FBQ2pDLENBQUM7QUFFRCxNQUFhLG9CQUFvQixFQUFFLE9BQU87Q0FDeEMsSUFBSSxFQUFFLElBQUk7Q0FDVixZQUFZLEVBQUUsS0FBSztDQUNuQixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Q0FDMUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUN6QyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDbkQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNqQyxjQUFjLEVBQUUsSUFBSTtDQUNwQixlQUFlLEVBQUUsSUFBSTtDQUNyQixtQkFBbUIsRUFBRSxJQUFJO0NBQ3pCLHVCQUF1QixFQUFFLElBQUk7Q0FDN0IsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMzQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNDLGFBQWEsRUFBRSxJQUFJO0NBQ25CLFNBQVMsRUFBRSxJQUFJO0NBQ2YsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDM0IsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztDQUN6QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLG1CQUFtQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUNoRCxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTO0NBQ3BDLFFBQVE7Q0FDUixpQkFBaUIsRUFBRSxJQUFJO0NBQ3ZCLHFCQUFxQixFQUFFLFFBQVE7QUFDakMsQ0FBQztBQU1ELE1BQWEsc0JBQXNCLEVBQUUsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDO0FBSXBELE1BQWEsd0JBQXdCLEVBQUUsT0FBTztDQUM1QyxJQUFJLEVBQUUsSUFBSTtDQUNWLFlBQVksRUFBRSxLQUFLO0NBQ25CLFlBQVksRUFBRSxJQUFJO0NBQ2xCLE1BQU07Q0FDTixZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQ3pDLHNCQUFzQixFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUNuRCxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ2pDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQy9CLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ2hDLG1CQUFtQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDcEMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUN4QywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNDLDBCQUEwQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDM0MsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDM0IsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztDQUN6QyxhQUFhLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUM5QixTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMxQixlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxTQUFTO0NBQzNDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7Q0FDcEMsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNuQyxpQkFBaUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ2xDLGNBQWMsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDM0MsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUN4QyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUMvQixhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUMsU0FBUztDQUNqQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ25DLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQzdCLENBQUM7QUFFRCxNQUFhLHdCQUF3QixFQUFFLE9BQU87Q0FDNUMsSUFBSSxFQUFFLElBQUk7Q0FDVixZQUFZLEVBQUUsS0FBSztDQUNuQixZQUFZLEVBQUUsSUFBSTtDQUNsQixNQUFNO0NBQ04sWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUN6QyxzQkFBc0IsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFNBQVM7Q0FDbkQsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNqQyxjQUFjLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMvQixlQUFlLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNoQyxtQkFBbUIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ3BDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDeEMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUMzQywwQkFBMEIsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQzNCLGFBQWEsRUFBRSxPQUFPLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLFNBQVM7Q0FDekMsYUFBYSxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDOUIsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDMUIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsU0FBUztDQUMzQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTO0NBQ25DLGlCQUFpQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDbEMsY0FBYyxFQUFFLE9BQU8sQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsU0FBUztDQUMzQyxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQyxTQUFTO0NBQ3hDLGtCQUFrQixFQUFFLElBQUksQ0FBQyxDQUFDLFNBQVM7Q0FDbkMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDLFNBQVM7QUFDN0IsQ0FBQztBQUVELE1BQWEsd0JBQXdCLEVBQUUsT0FBTztDQUM1QyxJQUFJLEVBQUUsSUFBSTtDQUNWLFdBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTO0FBQ2pDLENBQUM7QUFPRCxNQUFhLDBCQUEwQixFQUFFLEtBQUs7Q0FBQztDQUFLO0NBQUs7QUFBRyxDQUFDO0FBSTdELE1BQWEsZUFBZSxFQUFFLE9BQU87Q0FDbkMsSUFBSSxFQUFFLElBQUk7Q0FDVixZQUFZLEVBQUUsS0FBSztDQUNuQixVQUFVLEVBQUUsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFO0NBQzNCLGFBQWE7Q0FDYixNQUFNLEVBQUUsT0FBTztDQUNmLFFBQVEsRUFBRSxRQUFRO0NBQ2xCLEtBQUssRUFBRSxJQUFJO0NBQ1gsaUJBQWlCLEVBQUUsSUFBSSxDQUFDLENBQUMsU0FBUztDQUNsQyxRQUFRLEVBQUUsSUFBSTtBQUNoQixDQUFDO0FBS0QsTUFBYSxpQkFBaUIsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDIn0=
338
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29uYW11LmdlbmVyYXRlZC5qcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi8uLi9zcmMvYXBwbGljYXRpb24vc29uYW11LmdlbmVyYXRlZC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBnZW5lcmF0ZWRcbiAqIOyngeygkSDsiJjsoJXtlZjsp4Ag66eI7IS47JqULlxuICovXG5cbi8qIG94bGludC1kaXNhYmxlICovXG5cbmltcG9ydCB7IHpBcnJheWFibGUsIFNvbmFtdVF1ZXJ5TW9kZSwgQXBwbHlTb25hbXVGaWx0ZXIgfSBmcm9tIFwic29uYW11XCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuXG4vLyBDdXN0b21TY2FsYXI6IEhpc3RvcnlJdGVtc1xuY29uc3QgSGlzdG9yeUl0ZW1zID0gei5hcnJheShcbiAgei5vYmplY3Qoe1xuICAgIHR5cGU6IHouc3RyaW5nKCksXG4gICAgcm9sZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNvbnRlbnQ6IHoudW5rbm93bigpLm9wdGlvbmFsKCksXG4gICAgbmFtZTogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGFyZ3VtZW50czogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuICAgIGNhbGxfaWQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBvdXRwdXQ6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgfSksXG4pO1xudHlwZSBIaXN0b3J5SXRlbXMgPSB6LmluZmVyPHR5cGVvZiBIaXN0b3J5SXRlbXM+O1xuXG4vLyBDdXN0b21TY2FsYXI6IFRva2VuQ3JlZGVudGlhbHNcbmNvbnN0IFRva2VuQ3JlZGVudGlhbHMgPSB6LnVuaW9uKFtcbiAgei5vYmplY3Qoe1xuICAgIGFjY2Vzc1Rva2VuOiB6LnN0cmluZygpLFxuICAgIHJlZnJlc2hUb2tlbjogei5zdHJpbmcoKSxcbiAgICBleHBpcmVzQXQ6IHoubnVtYmVyKCksXG4gICAgYWNjb3VudFV1aWQ6IHouc3RyaW5nKCksXG4gIH0pLFxuICB6Lm9iamVjdCh7XG4gICAgYWNjZXNzVG9rZW46IHouc3RyaW5nKCksXG4gICAgcmVmcmVzaFRva2VuOiB6LnN0cmluZygpLFxuICAgIGlkVG9rZW46IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcbiAgICBhY2Nlc3NUb2tlbkV4cGlyZXNBdDogei5udW1iZXIoKSxcbiAgICBpZFRva2VuRXhwaXJlc0F0OiB6Lm51bWJlcigpLm9wdGlvbmFsKCksXG4gICAgYWNjb3VudElkOiB6LnN0cmluZygpLFxuICAgIHBsYW5UeXBlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gIH0pLFxuXSk7XG50eXBlIFRva2VuQ3JlZGVudGlhbHMgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkNyZWRlbnRpYWxzPjtcblxuLy8gQ3VzdG9tU2NhbGFyOiBUb29sRGVmaW5pdGlvbnNcbmNvbnN0IFRvb2xEZWZpbml0aW9ucyA9IHouYXJyYXkoXG4gIHoub2JqZWN0KHtcbiAgICBuYW1lOiB6LnN0cmluZygpLFxuICAgIGRlc2NyaXB0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG4gICAgaW5wdXRTY2hlbWE6IHoudW5rbm93bigpLFxuICB9KSxcbik7XG50eXBlIFRvb2xEZWZpbml0aW9ucyA9IHouaW5mZXI8dHlwZW9mIFRvb2xEZWZpbml0aW9ucz47XG5cbi8vIEVudW1zOiBSZXF1ZXN0TG9nXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ09yZGVyQnkgPSB6LmVudW0oW1wiaWQtZGVzY1wiXSkuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nT3JkZXJCeVwiKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dPcmRlckJ5ID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ09yZGVyQnk+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dPcmRlckJ5TGFiZWwgPSB7IFwiaWQtZGVzY1wiOiBcIklE7LWc7Iug7IicXCIgfTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU2VhcmNoRmllbGQgPSB6XG4gIC5lbnVtKFtcImlkXCIsIFwidG9rZW5fbmFtZVwiLCBcInVzZXJfcHJvbXB0XCJdKVxuICAuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nU2VhcmNoRmllbGRcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU2VhcmNoRmllbGQgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU2VhcmNoRmllbGQ+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTZWFyY2hGaWVsZExhYmVsID0ge1xuICBpZDogXCJJRFwiLFxuICB0b2tlbl9uYW1lOiBcIu2GoO2BsOydtOumhFwiLFxuICB1c2VyX3Byb21wdDogXCLsgqzsmqnsnpAg7ZSE66Gs7ZSE7Yq4XCIsXG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGF0dXMgPSB6XG4gIC5lbnVtKFtcInJ1bm5pbmdcIiwgXCJzdWNjZWVkZWRcIiwgXCJlcnJvclwiLCBcImFib3J0ZWRcIl0pXG4gIC5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGF0dXNcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RhdHVzID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0YXR1cz47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0YXR1c0xhYmVsID0ge1xuICBydW5uaW5nOiBcIuyLpO2WiSDspJFcIixcbiAgc3VjY2VlZGVkOiBcIuyEseqztVwiLFxuICBlcnJvcjogXCLsl5Drn6xcIixcbiAgYWJvcnRlZDogXCLspJHri6hcIixcbn07XG5cbi8vIEVudW1zOiBSZXF1ZXN0TG9nU3RlcFxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwVHlwZSA9IHouZW51bShbXCJnZW5lcmF0ZVwiLCBcInRvb2xfY2FsbFwiXSkuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nU3RlcFR5cGVcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFR5cGUgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcFR5cGU+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwVHlwZUxhYmVsID0geyBnZW5lcmF0ZTogXCJMTE0g7IOd7ISxXCIsIHRvb2xfY2FsbDogXCJUb29sIO2YuOy2nFwiIH07XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBPcmRlckJ5ID0gei5lbnVtKFtcImlkLWFzY1wiXSkuZGVzY3JpYmUoXCJSZXF1ZXN0TG9nU3RlcE9yZGVyQnlcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcE9yZGVyQnkgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcE9yZGVyQnk+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwT3JkZXJCeUxhYmVsID0geyBcImlkLWFzY1wiOiBcIklE7IicXCIgfTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkID0gei5lbnVtKFtcImlkXCJdKS5kZXNjcmliZShcIlJlcXVlc3RMb2dTdGVwU2VhcmNoRmllbGRcIik7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFNlYXJjaEZpZWxkID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZD47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZExhYmVsID0geyBpZDogXCJJRFwiIH07XG5cbi8vIEVudW1zOiBUb2tlblxuZXhwb3J0IGNvbnN0IFRva2VuT3JkZXJCeSA9IHouZW51bShbXCJpZC1kZXNjXCIsIFwib3JkLWFzY1wiXSkuZGVzY3JpYmUoXCJUb2tlbk9yZGVyQnlcIik7XG5leHBvcnQgdHlwZSBUb2tlbk9yZGVyQnkgPSB6LmluZmVyPHR5cGVvZiBUb2tlbk9yZGVyQnk+O1xuZXhwb3J0IGNvbnN0IFRva2VuT3JkZXJCeUxhYmVsID0geyBcImlkLWRlc2NcIjogXCJJROy1nOyLoOyInFwiLCBcIm9yZC1hc2NcIjogXCLsiJzshJzsiJxcIiB9O1xuZXhwb3J0IGNvbnN0IFRva2VuU2VhcmNoRmllbGQgPSB6LmVudW0oW1wiaWRcIiwgXCJuYW1lXCJdKS5kZXNjcmliZShcIlRva2VuU2VhcmNoRmllbGRcIik7XG5leHBvcnQgdHlwZSBUb2tlblNlYXJjaEZpZWxkID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TZWFyY2hGaWVsZD47XG5leHBvcnQgY29uc3QgVG9rZW5TZWFyY2hGaWVsZExhYmVsID0geyBpZDogXCJJRFwiLCBuYW1lOiBcIuydtOumhFwiIH07XG5cbi8vIEJhc2VTY2hlbWE6IFJlcXVlc3RMb2dcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nQmFzZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICB0b2tlbl9uYW1lOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHByb2plY3RfbmFtZTogei5zdHJpbmcoKS5tYXgoNTApLm51bGxhYmxlKCksXG4gIG1vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgcmVxdWVzdGVkX21vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgZmFsbGJhY2tfY291bnQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdXNlcl9wcm9tcHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgc3lzdGVtX3Byb21wdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICByZXNwb25zZTogei5zdHJpbmcoKSxcbiAgaW5wdXRfdG9rZW5zOiB6LmludCgpLFxuICBvdXRwdXRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9yZWFkX3Rva2Vuczogei5pbnQoKSxcbiAgY2FjaGVfY3JlYXRpb25fdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGR1cmF0aW9uX21zOiB6LmludCgpLFxuICB0dGZ0X21zOiB6LmludCgpLFxuICBjb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3NvdXJjZTogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIGltYWdlX2Nvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGltYWdlX2Nvc3RfbWV0aG9kOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIGVmZm9ydDogei5zdHJpbmcoKS5tYXgoMTApLm51bGxhYmxlKCksXG4gIGhpc3Rvcnk6IEhpc3RvcnlJdGVtcy5udWxsYWJsZSgpLFxuICB0b29sczogVG9vbERlZmluaXRpb25zLm51bGxhYmxlKCksXG4gIHN0YXR1czogUmVxdWVzdExvZ1N0YXR1cyxcbiAgZXJyb3JfbWVzc2FnZTogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfY291bnQ6IHouaW50KCksXG4gIGlzX2ltYWdlX2dlbmVyYXRpb246IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nQmFzZVNjaGVtYSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dCYXNlU2NoZW1hPiAmIHtcbiAgcmVhZG9ubHkgX19oYXNEZWZhdWx0X186IHJlYWRvbmx5IFtcbiAgICBcImNyZWF0ZWRfYXRcIixcbiAgICBcInRva2VuX25hbWVcIixcbiAgICBcInByb2plY3RfbmFtZVwiLFxuICAgIFwibW9kZWxfbmFtZVwiLFxuICAgIFwicmVxdWVzdGVkX21vZGVsX25hbWVcIixcbiAgICBcImZhbGxiYWNrX2NvdW50XCIsXG4gICAgXCJ1c2VyX3Byb21wdFwiLFxuICAgIFwic3lzdGVtX3Byb21wdFwiLFxuICAgIFwicmVzcG9uc2VcIixcbiAgICBcImlucHV0X3Rva2Vuc1wiLFxuICAgIFwib3V0cHV0X3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfcmVhZF90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnNcIixcbiAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgXCJ0dGZ0X21zXCIsXG4gICAgXCJjb3N0X3VzZFwiLFxuICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICBcImltYWdlX2Nvc3RfdXNkXCIsXG4gICAgXCJpbWFnZV9jb3N0X21ldGhvZFwiLFxuICAgIFwiZWZmb3J0XCIsXG4gICAgXCJoaXN0b3J5XCIsXG4gICAgXCJ0b29sc1wiLFxuICAgIFwic3RhdHVzXCIsXG4gICAgXCJlcnJvcl9tZXNzYWdlXCIsXG4gICAgXCJ0b29sX2NhbGxfY291bnRcIixcbiAgICBcImlzX2ltYWdlX2dlbmVyYXRpb25cIixcbiAgICBcImlkXCIsXG4gIF07XG59O1xuXG4vLyBCYXNlU2NoZW1hOiBSZXF1ZXN0TG9nU3RlcFxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwQmFzZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICByZXF1ZXN0X2xvZ19pZDogei5pbnQoKSxcbiAgc3RlcF9pbmRleDogei5pbnQoKSxcbiAgdHlwZTogUmVxdWVzdExvZ1N0ZXBUeXBlLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBvdXRwdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdHRmdF9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBmaW5pc2hfcmVhc29uOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3RleHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaW5kZXg6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2lkOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX2FyZ3M6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9yZXN1bHQ6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbiAgdG9vbF9kdXJhdGlvbl9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBlcnJvcjogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcEJhc2VTY2hlbWEgPSB6LmluZmVyPHR5cGVvZiBSZXF1ZXN0TG9nU3RlcEJhc2VTY2hlbWE+ICYge1xuICByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgW1xuICAgIFwiY3JlYXRlZF9hdFwiLFxuICAgIFwibW9kZWxfbmFtZVwiLFxuICAgIFwicmVxdWVzdGVkX21vZGVsX25hbWVcIixcbiAgICBcImZhbGxiYWNrX2NvdW50XCIsXG4gICAgXCJpbnB1dF90b2tlbnNcIixcbiAgICBcIm91dHB1dF90b2tlbnNcIixcbiAgICBcImNhY2hlX3JlYWRfdG9rZW5zXCIsXG4gICAgXCJjYWNoZV9jcmVhdGlvbl90b2tlbnNcIixcbiAgICBcImNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuc1wiLFxuICAgIFwiY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zXCIsXG4gICAgXCJjb3N0X3VzZFwiLFxuICAgIFwiY29zdF9zb3VyY2VcIixcbiAgICBcImR1cmF0aW9uX21zXCIsXG4gICAgXCJ0dGZ0X21zXCIsXG4gICAgXCJmaW5pc2hfcmVhc29uXCIsXG4gICAgXCJyZWFzb25pbmdfdGV4dFwiLFxuICAgIFwicmVhc29uaW5nX3Rva2Vuc1wiLFxuICAgIFwidG9vbF9jYWxsX2luZGV4XCIsXG4gICAgXCJ0b29sX2NhbGxfaWRcIixcbiAgICBcInRvb2xfbmFtZVwiLFxuICAgIFwidG9vbF9hcmdzXCIsXG4gICAgXCJ0b29sX3Jlc3VsdFwiLFxuICAgIFwidG9vbF9kdXJhdGlvbl9tc1wiLFxuICAgIFwiZXJyb3JcIixcbiAgICBcImlkXCIsXG4gIF07XG59O1xuXG4vLyBCYXNlU2NoZW1hOiBUb2tlblxuZXhwb3J0IGNvbnN0IFRva2VuQmFzZVNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIGNyZWF0ZWRfYXQ6IHouZGF0ZSgpLFxuICBwcm92aWRlcjogei5zdHJpbmcoKS5tYXgoMjApLFxuICBjcmVkZW50aWFsczogVG9rZW5DcmVkZW50aWFscyxcbiAgbmFtZTogei5zdHJpbmcoKSxcbiAgYWN0aXZlOiB6LmJvb2xlYW4oKSxcbiAgb3JkOiB6LmludCgpLFxuICBxdW90YV90aHJlc2hvbGQ6IHouaW50KCkubnVsbGFibGUoKSxcbiAgd2VpZ2h0OiB6LmludCgpLFxufSk7XG5leHBvcnQgdHlwZSBUb2tlbkJhc2VTY2hlbWEgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkJhc2VTY2hlbWE+ICYge1xuICByZWFkb25seSBfX2hhc0RlZmF1bHRfXzogcmVhZG9ubHkgW1xuICAgIFwiY3JlYXRlZF9hdFwiLFxuICAgIFwiYWN0aXZlXCIsXG4gICAgXCJvcmRcIixcbiAgICBcInF1b3RhX3RocmVzaG9sZFwiLFxuICAgIFwid2VpZ2h0XCIsXG4gICAgXCJpZFwiLFxuICBdO1xufTtcblxuLy8gQmFzZUxpc3RQYXJhbXM6IFJlcXVlc3RMb2dcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nQmFzZUxpc3RQYXJhbXMgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICAgIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICAgIHNlYXJjaDogUmVxdWVzdExvZ1NlYXJjaEZpZWxkLFxuICAgIGtleXdvcmQ6IHouc3RyaW5nKCksXG4gICAgb3JkZXJCeTogUmVxdWVzdExvZ09yZGVyQnksXG4gICAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gICAgaWQ6IHpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKSxcbiAgICBzb25hbXVGaWx0ZXI6IHouY3VzdG9tPEFwcGx5U29uYW11RmlsdGVyPFJlcXVlc3RMb2dCYXNlU2NoZW1hLCBuZXZlciwgbmV2ZXI+PigpLFxuICAgIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgICBwcm9qZWN0X25hbWU6IHouc3RyaW5nKCkubWF4KDUwKS5udWxsYWJsZSgpLFxuICAgIG1vZGVsX25hbWU6IHouc3RyaW5nKCkubWF4KDI1NSkubnVsbGFibGUoKSxcbiAgfSlcbiAgLnBhcnRpYWwoKTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dCYXNlTGlzdFBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dCYXNlTGlzdFBhcmFtcz47XG5cbi8vIEJhc2VMaXN0UGFyYW1zOiBSZXF1ZXN0TG9nU3RlcFxuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwQmFzZUxpc3RQYXJhbXMgPSB6XG4gIC5vYmplY3Qoe1xuICAgIG51bTogei5udW1iZXIoKS5pbnQoKS5ub25uZWdhdGl2ZSgpLFxuICAgIHBhZ2U6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuICAgIHNlYXJjaDogUmVxdWVzdExvZ1N0ZXBTZWFyY2hGaWVsZCxcbiAgICBrZXl3b3JkOiB6LnN0cmluZygpLFxuICAgIG9yZGVyQnk6IFJlcXVlc3RMb2dTdGVwT3JkZXJCeSxcbiAgICBxdWVyeU1vZGU6IFNvbmFtdVF1ZXJ5TW9kZSxcbiAgICBpZDogekFycmF5YWJsZSh6Lm51bWJlcigpLmludCgpLnBvc2l0aXZlKCkpLFxuICAgIHNvbmFtdUZpbHRlcjogei5jdXN0b208QXBwbHlTb25hbXVGaWx0ZXI8UmVxdWVzdExvZ1N0ZXBCYXNlU2NoZW1hLCBuZXZlciwgbmV2ZXI+PigpLFxuICAgIHJlcXVlc3RfbG9nX2lkOiB6LmludCgpLFxuICB9KVxuICAucGFydGlhbCgpO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBCYXNlTGlzdFBhcmFtcyA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwQmFzZUxpc3RQYXJhbXM+O1xuXG4vLyBCYXNlTGlzdFBhcmFtczogVG9rZW5cbmV4cG9ydCBjb25zdCBUb2tlbkJhc2VMaXN0UGFyYW1zID0gelxuICAub2JqZWN0KHtcbiAgICBudW06IHoubnVtYmVyKCkuaW50KCkubm9ubmVnYXRpdmUoKSxcbiAgICBwYWdlOiB6Lm51bWJlcigpLmludCgpLm1pbigxKSxcbiAgICBzZWFyY2g6IFRva2VuU2VhcmNoRmllbGQsXG4gICAga2V5d29yZDogei5zdHJpbmcoKSxcbiAgICBvcmRlckJ5OiBUb2tlbk9yZGVyQnksXG4gICAgcXVlcnlNb2RlOiBTb25hbXVRdWVyeU1vZGUsXG4gICAgaWQ6IHpBcnJheWFibGUoei5udW1iZXIoKS5pbnQoKS5wb3NpdGl2ZSgpKSxcbiAgICBzb25hbXVGaWx0ZXI6IHouY3VzdG9tPEFwcGx5U29uYW11RmlsdGVyPFRva2VuQmFzZVNjaGVtYSwgbmV2ZXIsIG5ldmVyPj4oKSxcbiAgfSlcbiAgLnBhcnRpYWwoKTtcbmV4cG9ydCB0eXBlIFRva2VuQmFzZUxpc3RQYXJhbXMgPSB6LmluZmVyPHR5cGVvZiBUb2tlbkJhc2VMaXN0UGFyYW1zPjtcblxuLy8gU3Vic2V0czogUmVxdWVzdExvZ1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRBID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgcHJvamVjdF9uYW1lOiB6LnN0cmluZygpLm1heCg1MCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICB1c2VyX3Byb21wdDogei5zdHJpbmcoKS5udWxsYWJsZSgpLFxuICBzeXN0ZW1fcHJvbXB0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHJlc3BvbnNlOiB6LnN0cmluZygpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCksXG4gIHR0ZnRfbXM6IHouaW50KCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF9tZXRob2Q6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm1heCgxMCkubnVsbGFibGUoKSxcbiAgaGlzdG9yeTogSGlzdG9yeUl0ZW1zLm51bGxhYmxlKCksXG4gIHRvb2xzOiBUb29sRGVmaW5pdGlvbnMubnVsbGFibGUoKSxcbiAgc3RhdHVzOiBSZXF1ZXN0TG9nU3RhdHVzLFxuICBlcnJvcl9tZXNzYWdlOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9jb3VudDogei5pbnQoKSxcbiAgaXNfaW1hZ2VfZ2VuZXJhdGlvbjogei5ib29sZWFuKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRBID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N1YnNldEE+O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdWJzZXRQID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgcHJvamVjdF9uYW1lOiB6LnN0cmluZygpLm1heCg1MCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCksXG4gIHR0ZnRfbXM6IHouaW50KCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgaW1hZ2VfY29zdF9tZXRob2Q6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgZWZmb3J0OiB6LnN0cmluZygpLm1heCgxMCkubnVsbGFibGUoKSxcbiAgc3RhdHVzOiBSZXF1ZXN0TG9nU3RhdHVzLFxuICB0b29sX2NhbGxfY291bnQ6IHouaW50KCksXG4gIGlzX2ltYWdlX2dlbmVyYXRpb246IHouYm9vbGVhbigpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0UCA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdWJzZXRQPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3Vic2V0QyA9IHoub2JqZWN0KHtcbiAgaWQ6IHouaW50KCksXG4gIHRva2VuX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCksXG4gIG91dHB1dF90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCksXG4gIGNhY2hlX2NyZWF0aW9uXzVtX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl8xaF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF91c2Q6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY29zdF9zb3VyY2U6IHouc3RyaW5nKCkubWF4KDIwKS5udWxsYWJsZSgpLFxufSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0QyA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdWJzZXRDPjtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdWJzZXRNYXBwaW5nID0ge1xuICBBOiBSZXF1ZXN0TG9nU3Vic2V0QTtcbiAgUDogUmVxdWVzdExvZ1N1YnNldFA7XG4gIEM6IFJlcXVlc3RMb2dTdWJzZXRDO1xufTtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3Vic2V0S2V5ID0gei5lbnVtKFtcIkFcIiwgXCJQXCIsIFwiQ1wiXSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N1YnNldEtleT47XG5cbi8vIFN1YnNldHM6IFJlcXVlc3RMb2dTdGVwXG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTdWJzZXRBID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgY3JlYXRlZF9hdDogei5kYXRlKCksXG4gIHN0ZXBfaW5kZXg6IHouaW50KCksXG4gIHR5cGU6IFJlcXVlc3RMb2dTdGVwVHlwZSxcbiAgbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICByZXF1ZXN0ZWRfbW9kZWxfbmFtZTogei5zdHJpbmcoKS5tYXgoMjU1KS5udWxsYWJsZSgpLFxuICBmYWxsYmFja19jb3VudDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBpbnB1dF90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgb3V0cHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9yZWFkX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fNW1fdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uXzFoX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3VzZDogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjb3N0X3NvdXJjZTogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIGR1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHR0ZnRfbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZmluaXNoX3JlYXNvbjogei5zdHJpbmcoKS5tYXgoMjApLm51bGxhYmxlKCksXG4gIHJlYXNvbmluZ190ZXh0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHJlYXNvbmluZ190b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2luZGV4OiB6LmludCgpLm51bGxhYmxlKCksXG4gIHRvb2xfY2FsbF9pZDogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX25hbWU6IHouc3RyaW5nKCkubWF4KDEwMCkubnVsbGFibGUoKSxcbiAgdG9vbF9hcmdzOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfcmVzdWx0OiB6LnN0cmluZygpLm51bGxhYmxlKCksXG4gIHRvb2xfZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgZXJyb3I6IHouc3RyaW5nKCkubnVsbGFibGUoKSxcbn0pO1xuZXhwb3J0IHR5cGUgUmVxdWVzdExvZ1N0ZXBTdWJzZXRBID0gei5pbmZlcjx0eXBlb2YgUmVxdWVzdExvZ1N0ZXBTdWJzZXRBPjtcbmV4cG9ydCBjb25zdCBSZXF1ZXN0TG9nU3RlcFN1YnNldFQgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgc3RlcF9pbmRleDogei5pbnQoKSxcbiAgdHlwZTogUmVxdWVzdExvZ1N0ZXBUeXBlLFxuICBtb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIHJlcXVlc3RlZF9tb2RlbF9uYW1lOiB6LnN0cmluZygpLm1heCgyNTUpLm51bGxhYmxlKCksXG4gIGZhbGxiYWNrX2NvdW50OiB6LmludCgpLm51bGxhYmxlKCksXG4gIGlucHV0X3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBvdXRwdXRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX3JlYWRfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNhY2hlX2NyZWF0aW9uX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBjYWNoZV9jcmVhdGlvbl81bV90b2tlbnM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgY2FjaGVfY3JlYXRpb25fMWhfdG9rZW5zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3RfdXNkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGNvc3Rfc291cmNlOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgZHVyYXRpb25fbXM6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdHRmdF9tczogei5pbnQoKS5udWxsYWJsZSgpLFxuICBmaW5pc2hfcmVhc29uOiB6LnN0cmluZygpLm1heCgyMCkubnVsbGFibGUoKSxcbiAgcmVhc29uaW5nX3Rva2Vuczogei5pbnQoKS5udWxsYWJsZSgpLFxuICB0b29sX2NhbGxfaW5kZXg6IHouaW50KCkubnVsbGFibGUoKSxcbiAgdG9vbF9jYWxsX2lkOiB6LnN0cmluZygpLm1heCgxMDApLm51bGxhYmxlKCksXG4gIHRvb2xfbmFtZTogei5zdHJpbmcoKS5tYXgoMTAwKS5udWxsYWJsZSgpLFxuICB0b29sX2R1cmF0aW9uX21zOiB6LmludCgpLm51bGxhYmxlKCksXG4gIGVycm9yOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU3Vic2V0VCA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwU3Vic2V0VD47XG5leHBvcnQgY29uc3QgUmVxdWVzdExvZ1N0ZXBTdWJzZXRJID0gei5vYmplY3Qoe1xuICBpZDogei5pbnQoKSxcbiAgdG9vbF9hcmdzOiB6LnN0cmluZygpLm51bGxhYmxlKCksXG59KTtcbmV4cG9ydCB0eXBlIFJlcXVlc3RMb2dTdGVwU3Vic2V0SSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwU3Vic2V0ST47XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFN1YnNldE1hcHBpbmcgPSB7XG4gIEE6IFJlcXVlc3RMb2dTdGVwU3Vic2V0QTtcbiAgVDogUmVxdWVzdExvZ1N0ZXBTdWJzZXRUO1xuICBJOiBSZXF1ZXN0TG9nU3RlcFN1YnNldEk7XG59O1xuZXhwb3J0IGNvbnN0IFJlcXVlc3RMb2dTdGVwU3Vic2V0S2V5ID0gei5lbnVtKFtcIkFcIiwgXCJUXCIsIFwiSVwiXSk7XG5leHBvcnQgdHlwZSBSZXF1ZXN0TG9nU3RlcFN1YnNldEtleSA9IHouaW5mZXI8dHlwZW9mIFJlcXVlc3RMb2dTdGVwU3Vic2V0S2V5PjtcblxuLy8gU3Vic2V0czogVG9rZW5cbmV4cG9ydCBjb25zdCBUb2tlblN1YnNldEEgPSB6Lm9iamVjdCh7XG4gIGlkOiB6LmludCgpLFxuICBjcmVhdGVkX2F0OiB6LmRhdGUoKSxcbiAgcHJvdmlkZXI6IHouc3RyaW5nKCkubWF4KDIwKSxcbiAgY3JlZGVudGlhbHM6IFRva2VuQ3JlZGVudGlhbHMsXG4gIG5hbWU6IHouc3RyaW5nKCksXG4gIGFjdGl2ZTogei5ib29sZWFuKCksXG4gIG9yZDogei5pbnQoKSxcbiAgcXVvdGFfdGhyZXNob2xkOiB6LmludCgpLm51bGxhYmxlKCksXG4gIHdlaWdodDogei5pbnQoKSxcbn0pO1xuZXhwb3J0IHR5cGUgVG9rZW5TdWJzZXRBID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdWJzZXRBPjtcbmV4cG9ydCB0eXBlIFRva2VuU3Vic2V0TWFwcGluZyA9IHtcbiAgQTogVG9rZW5TdWJzZXRBO1xufTtcbmV4cG9ydCBjb25zdCBUb2tlblN1YnNldEtleSA9IHouZW51bShbXCJBXCJdKTtcbmV4cG9ydCB0eXBlIFRva2VuU3Vic2V0S2V5ID0gei5pbmZlcjx0eXBlb2YgVG9rZW5TdWJzZXRLZXk+O1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBV0EsTUFBTSxlQUFl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