sonamu 0.7.39 → 0.7.41

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 (27) hide show
  1. package/dist/tasks/workflow-manager.d.ts.map +1 -1
  2. package/dist/tasks/workflow-manager.js +9 -1
  3. package/dist/template/implementations/generated_http.template.d.ts.map +1 -1
  4. package/dist/template/implementations/generated_http.template.js +3 -2
  5. package/dist/template/implementations/queries.template.d.ts.map +1 -1
  6. package/dist/template/implementations/queries.template.js +10 -2
  7. package/dist/template/implementations/sd.template.d.ts.map +1 -1
  8. package/dist/template/implementations/sd.template.js +34 -21
  9. package/dist/template/implementations/view_form.template.d.ts.map +1 -1
  10. package/dist/template/implementations/view_form.template.js +4 -2
  11. package/dist/template/implementations/view_id_async_select.template.js +2 -2
  12. package/dist/template/zod-converter.js +4 -2
  13. package/dist/testing/fixture-manager.d.ts +18 -6
  14. package/dist/testing/fixture-manager.d.ts.map +1 -1
  15. package/dist/testing/fixture-manager.js +124 -46
  16. package/dist/ui-web/assets/{index-Bfv7V57v.css → index-CWExqVO5.css} +1 -1
  17. package/dist/ui-web/assets/{index-DCf469Xl.js → index-DoZuAOiq.js} +69 -67
  18. package/dist/ui-web/index.html +2 -2
  19. package/package.json +3 -3
  20. package/src/tasks/workflow-manager.ts +10 -0
  21. package/src/template/implementations/generated_http.template.ts +2 -1
  22. package/src/template/implementations/queries.template.ts +23 -12
  23. package/src/template/implementations/sd.template.ts +33 -20
  24. package/src/template/implementations/view_form.template.ts +3 -1
  25. package/src/template/implementations/view_id_async_select.template.ts +1 -1
  26. package/src/template/zod-converter.ts +3 -1
  27. package/src/testing/fixture-manager.ts +167 -59
@@ -130,7 +130,9 @@ export class Template__view_form extends Template {
130
130
  value = Object.keys(col.zodType.enum)[0];
131
131
  } else if (col.zodType instanceof z.ZodBoolean) {
132
132
  value = false;
133
- } else if (col.zodType instanceof z.ZodString) {
133
+ } else if (col.zodType instanceof z.core.$ZodString) {
134
+ // NOTE: z.ZodString으로 비교하면 z.url(), z.email() 등의 타입에서 문제가 생기므로 z.core.$ZodString으로 비교함
135
+ // FIXME: email이나 url 타입 등에 대한 처리가 필요함
134
136
  if (col.renderType === "string-datetime") {
135
137
  value = "now()";
136
138
  } else {
@@ -476,4 +478,4 @@ ${columns.filter((col)=>col.name !== "created_at").map((col)=>{
476
478
  }
477
479
  }
478
480
 
479
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlcmluZ05vZGUsIFRlbXBsYXRlS2V5LCBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVudW1JbmZvRnJvbUNvbE5hbWUsIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcm91dGVzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vZm9ybS50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5jcmVhdGVcIiwgXCJlbnRpdHkuZWRpdFwiLCBcImNvbW1vbi5iYWNrVG9MaXN0XCIsIFwiZm9ybS5jcmVhdGVkQXRcIiwgXCJjb21tb24uc2F2ZVwiXTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+JHtsYWJlbCA/IGBcXG4gIDxMYWJlbD4ke2xhYmVsfTwvTGFiZWw+YCA6IFwiXCJ9YCxcbiAgICAgIGAgICR7Ym9keX1gLFxuICAgICAgYDwvZGl2PmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHdyYXBGRyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSkge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkLCB0YXJnZXRFbnRpdHlOYW1lcyB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtpZH1TZWxlY3RgO1xuICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXRFbnRpdHlOYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChyZWxQcm9wLndpdGgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXROYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIDriqXtlZwg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcIiR7Y29sLm5hbWV9XCIpfWA7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBge1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7Y29sLm5hbWV9XCIpfWA7XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICAgIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPD0gMjU2KSB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxUZXh0YXJlYSBjbGFzc05hbWU9XCJ0ZXh0LXhzIGJnLXdoaXRlXCIgcm93cz17NH0gcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxEYXRlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDxTd2l0Y2ggJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlXCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXhGaWxlcz17MTB9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJlbnVtc1wiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZztcbiAgICAgICAgICBpZiAoY29sLm5hbWUgPT09IFwib3JkZXJCeVwiKSB7XG4gICAgICAgICAgICBlbnVtSWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgZW51bUlkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGA8JHtlbnVtSWR9ICR7cmVnRXhwcn0gJHtjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJ9IC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZmtJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYDwke2ZrSWR9IHN1YnNldD1cIkFcIiAke3JlZ0V4cHJ9ICR7XG4gICAgICAgICAgICBjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgICB9IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzXCIgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLmVudW0pWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nKSB7XG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFNhdmVQYXJhbXMg7YOA7J6F7J2EIOuhnOuTnO2VmOyXrCBzYXZlUGFyYW1zTm9kZSDsg53shLFcbiAgICBjb25zdCB7IGxvYWRUeXBlcyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vc3luY2VyL21vZHVsZS1sb2FkZXJcIik7XG4gICAgY29uc3QgbG9hZGVkVHlwZXMgPSBhd2FpdCBsb2FkVHlwZXMoKTtcbiAgICBjb25zdCBTYXZlUGFyYW1zWm9kVHlwZSA9IGxvYWRlZFR5cGVzW2Ake2VudGl0eUlkfVNhdmVQYXJhbXNgXTtcblxuICAgIGlmICghU2F2ZVBhcmFtc1pvZFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2F2ZVBhcmFtcyBmb3IgJHtlbnRpdHlJZH0gbm90IGZvdW5kLiBEaWQgeW91IHJ1biAnc29uYW11IHN5bmMnP2ApO1xuICAgIH1cblxuICAgIC8vIFpvZCDtg4DsnoXsnYQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZhcbiAgICBjb25zdCB7IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3pvZC1jb252ZXJ0ZXJcIik7XG4gICAgY29uc3Qgc2F2ZVBhcmFtc05vZGUgPSB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKFNhdmVQYXJhbXNab2RUeXBlKTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSAoKHNhdmVQYXJhbXNOb2RlPy5jaGlsZHJlbiA/PyBbXSkgYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJpZFwiKVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BDYW5kaWRhdGUgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2wubmFtZSk7XG4gICAgICAgIGNvbC5sYWJlbCA9IHByb3BDYW5kaWRhdGU/LmRlc2MgPz8gY29sLmxhYmVsO1xuICAgICAgICByZXR1cm4gY29sO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVEZWZhdWx0VmFsdWUoY29sdW1ucyk7XG5cbiAgICAvLyDtlITrpqwg7YWc7ZSM66a/XG4gICAgY29uc3QgcHJlVGVtcGxhdGVzOiBSZW5kZXJlZFRlbXBsYXRlW1wicHJlVGVtcGxhdGVzXCJdID0gKGNvbHVtbnMgYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkXCIpIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1pZFwiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGxldCBrZXk6IFRlbXBsYXRlS2V5O1xuICAgICAgICBsZXQgdGFyZ2V0TWRJZCA9IGVudGl0eUlkO1xuICAgICAgICBsZXQgZW51bUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2VudW1zX3NlbGVjdFwiO1xuICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0RW50aXR5TmFtZXM6IHRhcmdldE1ETmFtZXMsIGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKFxuICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICBjb2wubmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldE1kSWQgPSB0YXJnZXRNRE5hbWVzLmNhcGl0YWw7XG4gICAgICAgICAgZW51bUlkID0gaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2lkX2FzeW5jX3NlbGVjdFwiO1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgdGFyZ2V0TWRJZCA9IHJlbFByb3Aud2l0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAga2V5OiBrZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHRhcmdldE1kSWQsXG4gICAgICAgICAgICBub2RlOiBjb2wsXG4gICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwcmVUZW1wbGF0ZSkgPT4ge1xuICAgICAgICBpZiAocHJlVGVtcGxhdGUua2V5ID09PSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgRW50aXR5TWFuYWdlci5nZXQocHJlVGVtcGxhdGUub3B0aW9ucy5lbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBJbnB1dCwke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJiBjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPiAyNTYpID8gXCJcXG4gIFRleHRhcmVhLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSA/IFwiXFxuICBTZWxlY3QsXFxuICBTZWxlY3RDb250ZW50LFxcbiAgU2VsZWN0SXRlbSxcXG4gIFNlbGVjdFRyaWdnZXIsXFxuICBTZWxlY3RWYWx1ZSxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiYm9vbGVhblwiKSA/IFwiXFxuICBTd2l0Y2gsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIEZpbGVJbnB1dCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wic3RyaW5nLWRhdGV0aW1lXCIsIFwic3RyaW5nLWRhdGVcIiwgXCJkYXRldGltZVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIERhdGVJbnB1dCxcIiA6IFwiXCJ9XG59IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVR5cGVGb3JtIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvbGliXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSwgdXNlUm91dGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOyR7XG4gICAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFwiXFxuaW1wb3J0IHsgXCIgK1xuICAgICAgICAgICAgdW5pcXVlKFxuICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7aWR9LCAke2lkfUxhYmVsYDtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7J1xuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LnNoYXJlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiO1xuJHt1bmlxdWUoXG4gIGNvbHVtbnNcbiAgICAuZmlsdGVyKChjb2wpID0+IFtcIm51bWJlci1ma19pZFwiLCBcImVudW1zXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAubWFwKChjb2wpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZCwgY29sKTtcbiAgICB9KSxcbikuam9pbihcIlxcblwiKX1cbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuaW1wb3J0IEFycm93TGVmdEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvYXJyb3ctbGVmdFwiO1xuaW1wb3J0IFNhdmVJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL3NhdmVcIjtcbmltcG9ydCBGb3JtSWNvbiBmcm9tIFwifmljb25zL21kaS9mb3JtLXNlbGVjdFwiO1xuXG5jb25zdCBmb3JtU2VhcmNoU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZUZpbGVSb3V0ZShcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfS9mb3JtXCIpKHtcbiAgdmFsaWRhdGVTZWFyY2g6IGZvcm1TZWFyY2hTY2hlbWEsXG4gIGNvbXBvbmVudDogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlLFxufSk7XG5cbmZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSgpIHtcbiAgY29uc3QgeyBpZCB9ID0gUm91dGUudXNlU2VhcmNoKCk7XG4gIHJldHVybiA8JHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0gaWQ9e2lkfSAvPjtcbn1cblxudHlwZSAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzID0ge1xuICBpZD86IG51bWJlcjtcbiAgbW9kZT86IFwicGFnZVwiIHwgXCJtb2RhbFwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtKHsgaWQsIG1vZGUgfTogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcykge1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgZm9ybSwgc2V0Rm9ybSwgcmVnaXN0ZXIke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiLCBzdWJtaXRcIiA6IFwiXCJ9IH0gPSB1c2VUeXBlRm9ybSgke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcywgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0VmFsdWUpLnJlcGxhY2UoL1wibm93XFwoXFwpXCIvZywgJ1wiXCInKX0pO1xuJHsoKCkgPT4ge1xuICBjb25zdCBoYXNEYXRldGltZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIik7XG4gIGNvbnN0IGhhc0RhdGUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGVcIik7XG4gIGlmICghaGFzRGF0ZXRpbWUgJiYgIWhhc0RhdGUpIHJldHVybiBcIlwiO1xuXG4gIGxldCBoZWxwZXJzID0gXCJcXG5cIjtcbiAgaWYgKGhhc0RhdGV0aW1lKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRldGltZS1sb2NhbCDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREVEhIOk1NKVxuICBjb25zdCB0b0RhdGV0aW1lTG9jYWxTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpO1xuICB9O1xuXG4gIC8vIGRhdGV0aW1lLWxvY2FsIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZXRpbWVMb2NhbFN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIGlmIChoYXNEYXRlKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRlIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tREQpXG4gIGNvbnN0IHRvRGF0ZVN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gIH07XG5cbiAgLy8gZGF0ZSDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGVTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICByZXR1cm4gaGVscGVycztcbn0pKCl9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5nZXQke25hbWVzLmNhcGl0YWx9KFwiQVwiLCBpZCkudGhlbigocm93KSA9PiB7XG4gICAgICAgIHNldEZvcm0oKHByZXZGb3JtKSA9PiAoe1xuICAgICAgICAgIC4uLnByZXZGb3JtLFxuICAgICAgICAgIC4uLnJvdywkeygoKSA9PiB7XG4gICAgICAgICAgICAvLyByZWxhdGlvbiDtlYTrk5zrk6TsnYQg7LC+7JWE7IScIOuzgO2ZmCDsvZTrk5wg7IOd7ISxXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbkZpZWxkcyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIilcbiAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCA/PyBudWxsLGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpb25GaWVsZHM7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaWQsIHNldEZvcm1dKTtcblxuICBjb25zdCBzYXZlTXV0YXRpb24gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2VTYXZlTXV0YXRpb24oKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gJHtcbiAgICBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAgID8gYHN1Ym1pdChhc3luYyAoZm9ybSkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSlgXG4gICAgICA6IGAoKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9YFxuICB9O1xuXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgdGl0bGU6IGlkID8gU0QoXCJlbnRpdHkuZWRpdFwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSwgaWQpIDogU0QoXCJlbnRpdHkuY3JlYXRlXCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpKSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctWzE4MDBweF0gbXgtYXV0byBwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTYgbWItOFwiPlxuICAgICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPEZvcm1JY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgaC01XCI+e1BBR0UudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7bW9kZSAhPT0gXCJtb2RhbFwiICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KX1cbiAgICAgICAgICAgICAgICBpY29uPXs8QXJyb3dMZWZ0SWNvbiAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5iYWNrVG9MaXN0XCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9ybSBDYXJkICovfVxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImJvcmRlci1ib3JkZXIvNDAgYmctZ3JheS01MCBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInB4LTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgbS0wXCI+XG4gICAgICAgICAgICAgICAge1BBR0UudGl0bGV9XG4gICAgICAgICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxuJHtjb2x1bW5zXG4gIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiY3JlYXRlZF9hdFwiKVxuICAubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9ICgoKSA9PiB7XG4gICAgICBpZiAoY29sLmxhYmVsLmVuZHNXaXRoKFwiSWRcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChjb2wubGFiZWwucmVwbGFjZShcIklkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gZW50aXR5LnRpdGxlID8/IGNvbC5sYWJlbDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICB9KSgpO1xuICAgIHJldHVybiBgICAgICAgICAgICAgICAgIHsvKiAke2xhYmVsfSAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQteHMgbWItMSB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7Y29sLm5hbWV9XCIpfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyQ29sdW1uKGVudGl0eUlkLCBjb2wsIG5hbWVzKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICB9KVxuICAuam9pbihcIlxcblxcblwiKX1cblxuICAgICAgICAgICAgICAgIHsvKiBTYXZlIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwdC00XCI+XG4gICAgICAgICAgICAgICAgICB7Zm9ybS5pZCAmJiBmb3JtLmNyZWF0ZWRfYXQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cIm1yLTIgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZm9ybS5jcmVhdGVkQXRcIil9OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKGZvcm0uY3JlYXRlZF9hdCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgaWNvbj17PFNhdmVJY29uIC8+fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uc2F2ZVwiKX1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIHByZVRlbXBsYXRlcyxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInVuaXF1ZSIsInoiLCJFbnRpdHlNYW5hZ2VyIiwiZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSIsImdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19mb3JtIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwidGFyZ2V0IiwicGF0aCIsImZzUGx1cmFsIiwiZ2V0UmVxdWlyZWREaWN0S2V5cyIsIndyYXBGQyIsImJvZHkiLCJsYWJlbCIsImpvaW4iLCJ3cmFwRkciLCJyZW5kZXJDb2x1bW5JbXBvcnQiLCJlbnRpdHlJZCIsImNvbCIsInJlbmRlclR5cGUiLCJpZCIsInRhcmdldEVudGl0eU5hbWVzIiwibmFtZSIsImNvbXBvbmVudElkIiwiZnMiLCJyZWxQcm9wIiwicmVwbGFjZSIsInRhcmdldE5hbWVzIiwiZ2V0TmFtZXNGcm9tSWQiLCJ3aXRoIiwiRXJyb3IiLCJyZW5kZXJDb2x1bW4iLCJyZWdFeHByIiwicGxhY2Vob2xkZXIiLCJ6b2RUeXBlIiwiWm9kU3RyaW5nIiwibWF4TGVuZ3RoIiwiZW51bUlkIiwiY2FwaXRhbCIsImNhbWVsaXplIiwib3B0aW9uYWwiLCJudWxsYWJsZSIsImZrSWQiLCJyZXNvbHZlRGVmYXVsdFZhbHVlIiwiY29sdW1ucyIsInJlZHVjZSIsInJlc3VsdCIsInZhbHVlIiwiWm9kTnVtYmVyIiwiWm9kRW51bSIsIk9iamVjdCIsImtleXMiLCJlbnVtIiwiWm9kQm9vbGVhbiIsIlpvZEFycmF5IiwiWm9kT2JqZWN0IiwicmVuZGVyIiwiZW50aXR5IiwiZ2V0IiwibG9hZFR5cGVzIiwibG9hZGVkVHlwZXMiLCJTYXZlUGFyYW1zWm9kVHlwZSIsInpvZFR5cGVUb1JlbmRlcmluZ05vZGUiLCJzYXZlUGFyYW1zTm9kZSIsImNoaWxkcmVuIiwiZmlsdGVyIiwibWFwIiwicHJvcENhbmRpZGF0ZSIsInByb3BzIiwiZmluZCIsInByb3AiLCJkZXNjIiwiZGVmYXVsdFZhbHVlIiwicHJlVGVtcGxhdGVzIiwiZW5kc1dpdGgiLCJrZXkiLCJ0YXJnZXRNZElkIiwidGFyZ2V0TUROYW1lcyIsIm9wdGlvbnMiLCJub2RlIiwicHJlVGVtcGxhdGUiLCJzb21lIiwiaW5jbHVkZXMiLCJsZW5ndGgiLCJCb29sZWFuIiwiY2FwaXRhbFBsdXJhbCIsIkpTT04iLCJzdHJpbmdpZnkiLCJoYXNEYXRldGltZSIsImhhc0RhdGUiLCJoZWxwZXJzIiwicmVsYXRpb25GaWVsZHMiLCJyZWxhdGlvbk5hbWUiLCJ0aXRsZSIsInRyaW0iLCJpbXBvcnRLZXlzIl0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxnQkFBZ0IsYUFBYTtBQUNwQyxTQUFTQyxNQUFNLFFBQVEsVUFBVTtBQUNqQyxTQUFTQyxDQUFDLFFBQVEsTUFBTTtBQUN4QixTQUFTQyxhQUFhLFFBQWdDLGlDQUE4QjtBQUVwRixTQUFTQyxzQkFBc0IsRUFBRUMsMEJBQTBCLFFBQVEsZ0JBQWE7QUFFaEYsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBRXZDLE9BQU8sTUFBTUMsNEJBQTRCRDtJQUN2QyxhQUFjO1FBQ1osS0FBSyxDQUFDO0lBQ1I7SUFFQUUsaUJBQWlCQyxLQUF3QixFQUFFO1FBQ3pDLE9BQU87WUFDTEMsUUFBUTtZQUNSQyxNQUFNLEdBQUdGLE1BQU1HLFFBQVEsQ0FBQyxTQUFTLENBQUM7UUFDcEM7SUFDRjtJQUVTQyxzQkFBdUM7UUFDOUMsT0FBTztZQUFDO1lBQWlCO1lBQWU7WUFBcUI7WUFBa0I7U0FBYztJQUMvRjtJQUVBQyxPQUFPQyxJQUFZLEVBQUVDLEtBQWMsRUFBVTtRQUMzQyxPQUFPO1lBQ0wsQ0FBQywyQkFBMkIsRUFBRUEsUUFBUSxDQUFDLFdBQVcsRUFBRUEsTUFBTSxRQUFRLENBQUMsR0FBRyxJQUFJO1lBQzFFLENBQUMsRUFBRSxFQUFFRCxNQUFNO1lBQ1gsQ0FBQyxNQUFNLENBQUM7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
481
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19mb3JtLnRlbXBsYXRlLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBpbmZsZWN0aW9uIGZyb20gXCJpbmZsZWN0aW9uXCI7XG5pbXBvcnQgeyB1bmlxdWUgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIsIHR5cGUgRW50aXR5TmFtZXNSZWNvcmQgfSBmcm9tIFwiLi4vLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQgdHlwZSB7IFJlbmRlcmluZ05vZGUsIFRlbXBsYXRlS2V5LCBUZW1wbGF0ZU9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGdldEVudW1JbmZvRnJvbUNvbE5hbWUsIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIH0gZnJvbSBcIi4uL2hlbHBlcnNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyZWRUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuaW1wb3J0IHsgVGVtcGxhdGUgfSBmcm9tIFwiLi4vdGVtcGxhdGVcIjtcblxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlX192aWV3X2Zvcm0gZXh0ZW5kcyBUZW1wbGF0ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKFwidmlld19mb3JtXCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvcm91dGVzL2FkbWluXCIsXG4gICAgICBwYXRoOiBgJHtuYW1lcy5mc1BsdXJhbH0vZm9ybS50c3hgLFxuICAgIH07XG4gIH1cblxuICBvdmVycmlkZSBnZXRSZXF1aXJlZERpY3RLZXlzKCk6IHN0cmluZ1tdIHwgbnVsbCB7XG4gICAgcmV0dXJuIFtcImVudGl0eS5jcmVhdGVcIiwgXCJlbnRpdHkuZWRpdFwiLCBcImNvbW1vbi5iYWNrVG9MaXN0XCIsIFwiZm9ybS5jcmVhdGVkQXRcIiwgXCJjb21tb24uc2F2ZVwiXTtcbiAgfVxuXG4gIHdyYXBGQyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gW1xuICAgICAgYDxkaXYgY2xhc3NOYW1lPVwic3BhY2UteS0yXCI+JHtsYWJlbCA/IGBcXG4gIDxMYWJlbD4ke2xhYmVsfTwvTGFiZWw+YCA6IFwiXCJ9YCxcbiAgICAgIGAgICR7Ym9keX1gLFxuICAgICAgYDwvZGl2PmAsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHdyYXBGRyhib2R5OiBzdHJpbmcsIGxhYmVsPzogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy53cmFwRkMoYm9keSwgbGFiZWwpO1xuICB9XG5cbiAgcmVuZGVyQ29sdW1uSW1wb3J0KGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSkge1xuICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICBjb25zdCB7IGlkLCB0YXJnZXRFbnRpdHlOYW1lcyB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgY29uc3QgY29tcG9uZW50SWQgPSBgJHtpZH1TZWxlY3RgO1xuICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXRFbnRpdHlOYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgIH0gZWxzZSBpZiAoY29sLnJlbmRlclR5cGUgPT09IFwibnVtYmVyLWZrX2lkXCIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVzID0gRW50aXR5TWFuYWdlci5nZXROYW1lc0Zyb21JZChyZWxQcm9wLndpdGgpO1xuICAgICAgICBjb25zdCBjb21wb25lbnRJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgeyAke2NvbXBvbmVudElkfSB9IGZyb20gXCJAL2NvbXBvbmVudHMvJHt0YXJnZXROYW1lcy5mc30vJHtjb21wb25lbnRJZH1cIjtgO1xuICAgICAgfSBjYXRjaCB7XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOugjOuNlCDrtojqsIDriqXtlZwg7J6E7Y+s7Yq4ICR7Y29sLm5hbWV9ICR7Y29sLnJlbmRlclR5cGV9YCk7XG4gICAgfVxuICB9XG5cbiAgcmVuZGVyQ29sdW1uKGVudGl0eUlkOiBzdHJpbmcsIGNvbDogUmVuZGVyaW5nTm9kZSwgbmFtZXM6IEVudGl0eU5hbWVzUmVjb3JkKTogc3RyaW5nIHtcbiAgICBjb25zdCByZWdFeHByID0gYHsuLi5yZWdpc3RlcihcIiR7Y29sLm5hbWV9XCIpfWA7XG4gICAgY29uc3QgcGxhY2Vob2xkZXIgPSBge1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7Y29sLm5hbWV9XCIpfWA7XG5cbiAgICBzd2l0Y2ggKGNvbC5yZW5kZXJUeXBlKSB7XG4gICAgICBjYXNlIFwic3RyaW5nLXBsYWluXCI6XG4gICAgICAgIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPD0gMjU2KSB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gYDxUZXh0YXJlYSBjbGFzc05hbWU9XCJ0ZXh0LXhzIGJnLXdoaXRlXCIgcm93cz17NH0gcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICAgIH1cbiAgICAgIGNhc2UgXCJkYXRldGltZVwiOlxuICAgICAgICByZXR1cm4gYDxEYXRlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIlxuICAgICAgICAgICAgICAgICAgICAke3JlZ0V4cHJ9XG4gICAgICAgICAgICAgICAgICAvPmA7XG4gICAgICBjYXNlIFwibnVtYmVyLWlkXCI6XG4gICAgICAgIHJldHVybiBgPGlucHV0IHR5cGU9XCJoaWRkZW5cIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgIGNhc2UgXCJudW1iZXItcGxhaW5cIjpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgdHlwZT1cIm51bWJlclwiIGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9JHtwbGFjZWhvbGRlcn0gJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgICAgICByZXR1cm4gYDxTd2l0Y2ggJHtyZWdFeHByfSAvPmA7XG4gICAgICBjYXNlIFwianNvbi1zb25hbXVmaWxlXCI6XG4gICAgICAgIHJldHVybiBgPEZpbGVJbnB1dFxuICAgICAgICAgICAgICAgICAgICB1cGxvYWRNb2RlPVwibGF6eVwiXG4gICAgICAgICAgICAgICAgICAgIHZpZXdNb2RlPVwiaW1hZ2VcIlxuICAgICAgICAgICAgICAgICAgICBwcmV2aWV3U2l6ZT1cIm1kXCJcbiAgICAgICAgICAgICAgICAgICAgJHtyZWdFeHByfVxuICAgICAgICAgICAgICAgICAgLz5gO1xuICAgICAgY2FzZSBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiOlxuICAgICAgICByZXR1cm4gYDxGaWxlSW5wdXRcbiAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGU9e3RydWV9XG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZE1vZGU9XCJsYXp5XCJcbiAgICAgICAgICAgICAgICAgICAgdmlld01vZGU9XCJpbWFnZVwiXG4gICAgICAgICAgICAgICAgICAgIHByZXZpZXdTaXplPVwibWRcIlxuICAgICAgICAgICAgICAgICAgICBtYXhGaWxlcz17MTB9XG4gICAgICAgICAgICAgICAgICAgICR7cmVnRXhwcn1cbiAgICAgICAgICAgICAgICAgIC8+YDtcbiAgICAgIGNhc2UgXCJlbnVtc1wiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGxldCBlbnVtSWQ6IHN0cmluZztcbiAgICAgICAgICBpZiAoY29sLm5hbWUgPT09IFwib3JkZXJCeVwiKSB7XG4gICAgICAgICAgICBlbnVtSWQgPSBgJHtuYW1lcy5jYXBpdGFsfSR7aW5mbGVjdGlvbi5jYW1lbGl6ZShjb2wubmFtZSl9U2VsZWN0YDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgZW51bUlkID0gYCR7aWR9U2VsZWN0YDtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGA8JHtlbnVtSWR9ICR7cmVnRXhwcn0gJHtjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJ9IC8+YDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcIm51bWJlci1ma19pZFwiOlxuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgY29uc3QgZmtJZCA9IGAke3JlbFByb3Aud2l0aH1JZEFzeW5jU2VsZWN0YDtcbiAgICAgICAgICByZXR1cm4gYDwke2ZrSWR9IHN1YnNldD1cIkFcIiAke3JlZ0V4cHJ9ICR7XG4gICAgICAgICAgICBjb2wub3B0aW9uYWwgfHwgY29sLm51bGxhYmxlID8gXCJjbGVhcmFibGVcIiA6IFwiXCJcbiAgICAgICAgICB9IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzXCIgLz5gO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gYDxJbnB1dCB0eXBlPVwibnVtYmVyXCIgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfSAke3JlZ0V4cHJ9IC8+YDtcbiAgICAgICAgfVxuICAgICAgY2FzZSBcImFycmF5XCI6XG4gICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgIHJldHVybiBgPElucHV0IGNsYXNzTmFtZT1cImgtOCB0ZXh0LXhzIGJnLXdoaXRlXCIgcGxhY2Vob2xkZXI9XCIke2NvbC5uYW1lfVwiICR7cmVnRXhwcn0gLz5gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGA8SW5wdXQgY2xhc3NOYW1lPVwiaC04IHRleHQteHMgYmctd2hpdGVcIiAke3JlZ0V4cHJ9IC8+YDtcbiAgICB9XG4gIH1cblxuICByZXNvbHZlRGVmYXVsdFZhbHVlKGNvbHVtbnM6IFJlbmRlcmluZ05vZGVbXSk6IG9iamVjdCB7XG4gICAgcmV0dXJuIGNvbHVtbnMucmVkdWNlKFxuICAgICAgKHJlc3VsdCwgY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wub3B0aW9uYWwpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlOiB1bmtub3duO1xuICAgICAgICBpZiAoY29sLm51bGxhYmxlID09PSB0cnVlKSB7XG4gICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2ROdW1iZXIpIHtcbiAgICAgICAgICB2YWx1ZSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoY29sLnpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICAgICAgICB2YWx1ZSA9IE9iamVjdC5rZXlzKGNvbC56b2RUeXBlLmVudW0pWzBdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgICAgICAgdmFsdWUgPSBmYWxzZTtcbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgICAgICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgICAgICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgICAgICAgaWYgKGNvbC5yZW5kZXJUeXBlID09PSBcInN0cmluZy1kYXRldGltZVwiKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IFwibm93KClcIjtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC56b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPYmplY3QpIHtcbiAgICAgICAgICB2YWx1ZSA9IHt9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmVzdWx0W2NvbC5uYW1lXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfSxcbiAgICAgIHt9IGFzIHsgW2tleTogc3RyaW5nXTogdW5rbm93biB9LFxuICAgICk7XG4gIH1cblxuICBhc3luYyByZW5kZXIoeyBlbnRpdHlJZCB9OiBUZW1wbGF0ZU9wdGlvbnNbXCJ2aWV3X2Zvcm1cIl0pIHtcbiAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChlbnRpdHlJZCk7XG4gICAgY29uc3QgbmFtZXMgPSBFbnRpdHlNYW5hZ2VyLmdldE5hbWVzRnJvbUlkKGVudGl0eUlkKTtcblxuICAgIC8vIFNhdmVQYXJhbXMg7YOA7J6F7J2EIOuhnOuTnO2VmOyXrCBzYXZlUGFyYW1zTm9kZSDsg53shLFcbiAgICBjb25zdCB7IGxvYWRUeXBlcyB9ID0gYXdhaXQgaW1wb3J0KFwiLi4vLi4vc3luY2VyL21vZHVsZS1sb2FkZXJcIik7XG4gICAgY29uc3QgbG9hZGVkVHlwZXMgPSBhd2FpdCBsb2FkVHlwZXMoKTtcbiAgICBjb25zdCBTYXZlUGFyYW1zWm9kVHlwZSA9IGxvYWRlZFR5cGVzW2Ake2VudGl0eUlkfVNhdmVQYXJhbXNgXTtcblxuICAgIGlmICghU2F2ZVBhcmFtc1pvZFR5cGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgU2F2ZVBhcmFtcyBmb3IgJHtlbnRpdHlJZH0gbm90IGZvdW5kLiBEaWQgeW91IHJ1biAnc29uYW11IHN5bmMnP2ApO1xuICAgIH1cblxuICAgIC8vIFpvZCDtg4DsnoXsnYQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZhcbiAgICBjb25zdCB7IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUgfSA9IGF3YWl0IGltcG9ydChcIi4uL3pvZC1jb252ZXJ0ZXJcIik7XG4gICAgY29uc3Qgc2F2ZVBhcmFtc05vZGUgPSB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKFNhdmVQYXJhbXNab2RUeXBlKTtcblxuICAgIGNvbnN0IGNvbHVtbnMgPSAoKHNhdmVQYXJhbXNOb2RlPy5jaGlsZHJlbiA/PyBbXSkgYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wubmFtZSAhPT0gXCJpZFwiKVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGNvbnN0IHByb3BDYW5kaWRhdGUgPSBlbnRpdHkucHJvcHMuZmluZCgocHJvcCkgPT4gcHJvcC5uYW1lID09PSBjb2wubmFtZSk7XG4gICAgICAgIGNvbC5sYWJlbCA9IHByb3BDYW5kaWRhdGU/LmRlc2MgPz8gY29sLmxhYmVsO1xuICAgICAgICByZXR1cm4gY29sO1xuICAgICAgfSk7XG5cbiAgICBjb25zdCBkZWZhdWx0VmFsdWUgPSB0aGlzLnJlc29sdmVEZWZhdWx0VmFsdWUoY29sdW1ucyk7XG5cbiAgICAvLyDtlITrpqwg7YWc7ZSM66a/XG4gICAgY29uc3QgcHJlVGVtcGxhdGVzOiBSZW5kZXJlZFRlbXBsYXRlW1wicHJlVGVtcGxhdGVzXCJdID0gKGNvbHVtbnMgYXMgUmVuZGVyaW5nTm9kZVtdKVxuICAgICAgLmZpbHRlcigoY29sKSA9PiB7XG4gICAgICAgIGlmIChjb2wubmFtZSA9PT0gXCJpZFwiKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbC5uYW1lLmVuZHNXaXRoKFwiX2lkXCIpIHx8IGNvbC5yZW5kZXJUeXBlID09PSBcIm51bWJlci1pZFwiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lKGVudGl0eUlkLCBjb2wubmFtZS5yZXBsYWNlKFwiX2lkXCIsIFwiXCIpKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGdldEVudW1JbmZvRnJvbUNvbE5hbWUoZW50aXR5SWQsIGNvbC5uYW1lKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9KVxuICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgIGxldCBrZXk6IFRlbXBsYXRlS2V5O1xuICAgICAgICBsZXQgdGFyZ2V0TWRJZCA9IGVudGl0eUlkO1xuICAgICAgICBsZXQgZW51bUlkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgICAgIGlmIChjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2VudW1zX3NlbGVjdFwiO1xuICAgICAgICAgIGNvbnN0IHsgdGFyZ2V0RW50aXR5TmFtZXM6IHRhcmdldE1ETmFtZXMsIGlkIH0gPSBnZXRFbnVtSW5mb0Zyb21Db2xOYW1lKFxuICAgICAgICAgICAgZW50aXR5SWQsXG4gICAgICAgICAgICBjb2wubmFtZSxcbiAgICAgICAgICApO1xuICAgICAgICAgIHRhcmdldE1kSWQgPSB0YXJnZXRNRE5hbWVzLmNhcGl0YWw7XG4gICAgICAgICAgZW51bUlkID0gaWQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAga2V5ID0gXCJ2aWV3X2lkX2FzeW5jX3NlbGVjdFwiO1xuICAgICAgICAgIGNvbnN0IHJlbFByb3AgPSBnZXRSZWxhdGlvblByb3BGcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUucmVwbGFjZShcIl9pZFwiLCBcIlwiKSk7XG4gICAgICAgICAgdGFyZ2V0TWRJZCA9IHJlbFByb3Aud2l0aDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAga2V5OiBrZXkgYXMgVGVtcGxhdGVLZXksXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZW50aXR5SWQ6IHRhcmdldE1kSWQsXG4gICAgICAgICAgICBub2RlOiBjb2wsXG4gICAgICAgICAgICBlbnVtSWQsXG4gICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwcmVUZW1wbGF0ZSkgPT4ge1xuICAgICAgICBpZiAocHJlVGVtcGxhdGUua2V5ID09PSBcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpIHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgRW50aXR5TWFuYWdlci5nZXQocHJlVGVtcGxhdGUub3B0aW9ucy5lbnRpdHlJZCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9KTtcblxuICAgIHJldHVybiB7XG4gICAgICAuLi50aGlzLmdldFRhcmdldEFuZFBhdGgobmFtZXMpLFxuICAgICAgYm9keTogYFxuaW1wb3J0IHtcbiAgQnV0dG9uLFxuICBDYXJkLFxuICBDYXJkQ29udGVudCxcbiAgQ2FyZEhlYWRlcixcbiAgQ2FyZFRpdGxlLFxuICBJbnB1dCwke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctcGxhaW5cIiAmJiBjb2wuem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nICYmIChjb2wuem9kVHlwZS5tYXhMZW5ndGggPz8gMCkgPiAyNTYpID8gXCJcXG4gIFRleHRhcmVhLFwiIDogXCJcIn0ke2NvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKSA/IFwiXFxuICBTZWxlY3QsXFxuICBTZWxlY3RDb250ZW50LFxcbiAgU2VsZWN0SXRlbSxcXG4gIFNlbGVjdFRyaWdnZXIsXFxuICBTZWxlY3RWYWx1ZSxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwiYm9vbGVhblwiKSA/IFwiXFxuICBTd2l0Y2gsXCIgOiBcIlwifSR7Y29sdW1ucy5zb21lKChjb2wpID0+IFtcImpzb24tc29uYW11ZmlsZVwiLCBcImpzb24tc29uYW11ZmlsZS1hcnJheVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIEZpbGVJbnB1dCxcIiA6IFwiXCJ9JHtjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wic3RyaW5nLWRhdGV0aW1lXCIsIFwic3RyaW5nLWRhdGVcIiwgXCJkYXRldGltZVwiXS5pbmNsdWRlcyhjb2wucmVuZGVyVHlwZSkpID8gXCJcXG4gIERhdGVJbnB1dCxcIiA6IFwiXCJ9XG59IGZyb20gXCJAc29uYW11LWtpdC9yZWFjdC1jb21wb25lbnRzL2NvbXBvbmVudHNcIjtcbmltcG9ydCB7IHVzZVR5cGVGb3JtIH0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvbGliXCI7XG5pbXBvcnQgeyB1c2VRdWVyeUNsaWVudCB9IGZyb20gXCJAdGFuc3RhY2svcmVhY3QtcXVlcnlcIjtcbmltcG9ydCB7IGNyZWF0ZUZpbGVSb3V0ZSwgdXNlUm91dGVyIH0gZnJvbSBcIkB0YW5zdGFjay9yZWFjdC1yb3V0ZXJcIjtcbmltcG9ydCB7IHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRBIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiOyR7XG4gICAgICAgIGNvbHVtbnMuZmlsdGVyKChjb2wpID0+IGNvbC5yZW5kZXJUeXBlID09PSBcImVudW1zXCIpLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFwiXFxuaW1wb3J0IHsgXCIgK1xuICAgICAgICAgICAgdW5pcXVlKFxuICAgICAgICAgICAgICBjb2x1bW5zXG4gICAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJlbnVtc1wiKVxuICAgICAgICAgICAgICAgIC5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgeyBpZCB9ID0gZ2V0RW51bUluZm9Gcm9tQ29sTmFtZShlbnRpdHlJZCwgY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYCR7aWR9LCAke2lkfUxhYmVsYDtcbiAgICAgICAgICAgICAgICAgIH0gY2F0Y2gge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgLmZpbHRlcihCb29sZWFuKVxuICAgICAgICAgICAgICAuam9pbihcIiwgXCIpICtcbiAgICAgICAgICAgICcgfSBmcm9tIFwiQC9zZXJ2aWNlcy9zb25hbXUuZ2VuZXJhdGVkXCI7J1xuICAgICAgICAgIDogXCJcIlxuICAgICAgfVxuaW1wb3J0IHsgZGVmYXVsdENhdGNoIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LnNoYXJlZFwiO1xuaW1wb3J0IHsgJHtuYW1lcy5jYXBpdGFsfVNhdmVQYXJhbXMgfSBmcm9tIFwiQC9zZXJ2aWNlcy8ke25hbWVzLmZzfS8ke25hbWVzLmZzfS50eXBlc1wiO1xuJHt1bmlxdWUoXG4gIGNvbHVtbnNcbiAgICAuZmlsdGVyKChjb2wpID0+IFtcIm51bWJlci1ma19pZFwiLCBcImVudW1zXCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAubWFwKChjb2wpID0+IHtcbiAgICAgIHJldHVybiB0aGlzLnJlbmRlckNvbHVtbkltcG9ydChlbnRpdHlJZCwgY29sKTtcbiAgICB9KSxcbikuam9pbihcIlxcblwiKX1cbmltcG9ydCB7IFNEIH0gZnJvbSBcIkAvaTE4bi9zZC5nZW5lcmF0ZWRcIjtcblxuaW1wb3J0IEFycm93TGVmdEljb24gZnJvbSBcIn5pY29ucy9sdWNpZGUvYXJyb3ctbGVmdFwiO1xuaW1wb3J0IFNhdmVJY29uIGZyb20gXCJ+aWNvbnMvbHVjaWRlL3NhdmVcIjtcbmltcG9ydCBGb3JtSWNvbiBmcm9tIFwifmljb25zL21kaS9mb3JtLXNlbGVjdFwiO1xuXG5jb25zdCBmb3JtU2VhcmNoU2NoZW1hID0gei5vYmplY3Qoe1xuICBpZDogei5udW1iZXIoKS5vcHRpb25hbCgpLFxufSk7XG5cbmV4cG9ydCBjb25zdCBSb3V0ZSA9IGNyZWF0ZUZpbGVSb3V0ZShcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfS9mb3JtXCIpKHtcbiAgdmFsaWRhdGVTZWFyY2g6IGZvcm1TZWFyY2hTY2hlbWEsXG4gIGNvbXBvbmVudDogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1QYWdlLFxufSk7XG5cbmZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtUGFnZSgpIHtcbiAgY29uc3QgeyBpZCB9ID0gUm91dGUudXNlU2VhcmNoKCk7XG4gIHJldHVybiA8JHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm0gaWQ9e2lkfSAvPjtcbn1cblxudHlwZSAke25hbWVzLmNhcGl0YWxQbHVyYWx9Rm9ybVByb3BzID0ge1xuICBpZD86IG51bWJlcjtcbiAgbW9kZT86IFwicGFnZVwiIHwgXCJtb2RhbFwiO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uICR7bmFtZXMuY2FwaXRhbFBsdXJhbH1Gb3JtKHsgaWQsIG1vZGUgfTogJHtuYW1lcy5jYXBpdGFsUGx1cmFsfUZvcm1Qcm9wcykge1xuICBjb25zdCByb3V0ZXIgPSB1c2VSb3V0ZXIoKTtcbiAgY29uc3QgcXVlcnlDbGllbnQgPSB1c2VRdWVyeUNsaWVudCgpO1xuXG4gIGNvbnN0IHsgZm9ybSwgc2V0Rm9ybSwgcmVnaXN0ZXIke2NvbHVtbnMuc29tZSgoY29sKSA9PiBbXCJqc29uLXNvbmFtdWZpbGVcIiwgXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIl0uaW5jbHVkZXMoY29sLnJlbmRlclR5cGUpKSA/IFwiLCBzdWJtaXRcIiA6IFwiXCJ9IH0gPSB1c2VUeXBlRm9ybSgke25hbWVzLmNhcGl0YWx9U2F2ZVBhcmFtcywgJHtKU09OLnN0cmluZ2lmeShkZWZhdWx0VmFsdWUpLnJlcGxhY2UoL1wibm93XFwoXFwpXCIvZywgJ1wiXCInKX0pO1xuJHsoKCkgPT4ge1xuICBjb25zdCBoYXNEYXRldGltZSA9IGNvbHVtbnMuc29tZSgoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJzdHJpbmctZGF0ZXRpbWVcIik7XG4gIGNvbnN0IGhhc0RhdGUgPSBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gY29sLnJlbmRlclR5cGUgPT09IFwic3RyaW5nLWRhdGVcIik7XG4gIGlmICghaGFzRGF0ZXRpbWUgJiYgIWhhc0RhdGUpIHJldHVybiBcIlwiO1xuXG4gIGxldCBoZWxwZXJzID0gXCJcXG5cIjtcbiAgaWYgKGhhc0RhdGV0aW1lKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRldGltZS1sb2NhbCDtmJXsi53snLzroZwg67OA7ZmYIChZWVlZLU1NLUREVEhIOk1NKVxuICBjb25zdCB0b0RhdGV0aW1lTG9jYWxTdHJpbmcgPSAoZGF0ZTogRGF0ZSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQpOiBzdHJpbmcgPT4ge1xuICAgIGlmICghZGF0ZSkgcmV0dXJuIFwiXCI7XG4gICAgY29uc3QgZCA9IHR5cGVvZiBkYXRlID09PSBcInN0cmluZ1wiID8gbmV3IERhdGUoZGF0ZSkgOiBkYXRlO1xuICAgIHJldHVybiBkLnRvSVNPU3RyaW5nKCkuc2xpY2UoMCwgMTYpO1xuICB9O1xuXG4gIC8vIGRhdGV0aW1lLWxvY2FsIOusuOyekOyXtOydhCBEYXRl66GcIOuzgO2ZmFxuICBjb25zdCBmcm9tRGF0ZXRpbWVMb2NhbFN0cmluZyA9ICh2YWx1ZTogc3RyaW5nKTogRGF0ZSB8IG51bGwgPT4ge1xuICAgIGlmICghdmFsdWUpIHJldHVybiBudWxsO1xuICAgIHJldHVybiBuZXcgRGF0ZSh2YWx1ZSk7XG4gIH07XG5gO1xuICB9XG4gIGlmIChoYXNEYXRlKSB7XG4gICAgaGVscGVycyArPSBgICAvLyBkYXRlIO2YleyLneycvOuhnCDrs4DtmZggKFlZWVktTU0tREQpXG4gIGNvbnN0IHRvRGF0ZVN0cmluZyA9IChkYXRlOiBEYXRlIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKCFkYXRlKSByZXR1cm4gXCJcIjtcbiAgICBjb25zdCBkID0gdHlwZW9mIGRhdGUgPT09IFwic3RyaW5nXCIgPyBuZXcgRGF0ZShkYXRlKSA6IGRhdGU7XG4gICAgcmV0dXJuIGQudG9JU09TdHJpbmcoKS5zcGxpdChcIlRcIilbMF07XG4gIH07XG5cbiAgLy8gZGF0ZSDrrLjsnpDsl7TsnYQgRGF0ZeuhnCDrs4DtmZhcbiAgY29uc3QgZnJvbURhdGVTdHJpbmcgPSAodmFsdWU6IHN0cmluZyk6IERhdGUgfCBudWxsID0+IHtcbiAgICBpZiAoIXZhbHVlKSByZXR1cm4gbnVsbDtcbiAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuICB9O1xuYDtcbiAgfVxuICByZXR1cm4gaGVscGVycztcbn0pKCl9XG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlkKSB7XG4gICAgICAke25hbWVzLmNhcGl0YWx9U2VydmljZS5nZXQke25hbWVzLmNhcGl0YWx9KFwiQVwiLCBpZCkudGhlbigocm93KSA9PiB7XG4gICAgICAgIHNldEZvcm0oKHByZXZGb3JtKSA9PiAoe1xuICAgICAgICAgIC4uLnByZXZGb3JtLFxuICAgICAgICAgIC4uLnJvdywkeygoKSA9PiB7XG4gICAgICAgICAgICAvLyByZWxhdGlvbiDtlYTrk5zrk6TsnYQg7LC+7JWE7IScIOuzgO2ZmCDsvZTrk5wg7IOd7ISxXG4gICAgICAgICAgICBjb25zdCByZWxhdGlvbkZpZWxkcyA9IGNvbHVtbnNcbiAgICAgICAgICAgICAgLmZpbHRlcigoY29sKSA9PiBjb2wucmVuZGVyVHlwZSA9PT0gXCJudW1iZXItZmtfaWRcIilcbiAgICAgICAgICAgICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVsYXRpb25OYW1lID0gY29sLm5hbWUucmVwbGFjZSgvX2lkJC8sIFwiXCIpO1xuICAgICAgICAgICAgICAgIGlmIChjb2wubnVsbGFibGUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCA/PyBudWxsLGA7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBgXFxuICAgICAgICAgICR7Y29sLm5hbWV9OiByb3cuJHtyZWxhdGlvbk5hbWV9Py5pZCxgO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmpvaW4oXCJcIik7XG4gICAgICAgICAgICByZXR1cm4gcmVsYXRpb25GaWVsZHM7XG4gICAgICAgICAgfSkoKX1cbiAgICAgICAgfSkpO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbaWQsIHNldEZvcm1dKTtcblxuICBjb25zdCBzYXZlTXV0YXRpb24gPSAke25hbWVzLmNhcGl0YWx9U2VydmljZS51c2VTYXZlTXV0YXRpb24oKTtcbiAgY29uc3QgaGFuZGxlU3VibWl0ID0gJHtcbiAgICBjb2x1bW5zLnNvbWUoKGNvbCkgPT4gW1wianNvbi1zb25hbXVmaWxlXCIsIFwianNvbi1zb25hbXVmaWxlLWFycmF5XCJdLmluY2x1ZGVzKGNvbC5yZW5kZXJUeXBlKSlcbiAgICAgID8gYHN1Ym1pdChhc3luYyAoZm9ybSkgPT4ge1xuICAgIHNhdmVNdXRhdGlvbi5tdXRhdGUoXG4gICAgICB7IHNwYTogW2Zvcm1dIH0sXG4gICAgICB7XG4gICAgICAgIG9uU3VjY2VzczogKCkgPT4ge1xuICAgICAgICAgIHF1ZXJ5Q2xpZW50LmludmFsaWRhdGVRdWVyaWVzKHtcbiAgICAgICAgICAgIHF1ZXJ5S2V5OiBbXCIke25hbWVzLmNhcGl0YWx9XCJdLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKG1vZGUgPT09IFwibW9kYWxcIikge1xuICAgICAgICAgICAgLy8gbW9kYWwgbW9kZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIG9uRXJyb3I6IGRlZmF1bHRDYXRjaCxcbiAgICAgIH0sXG4gICAgKTtcbiAgfSlgXG4gICAgICA6IGAoKSA9PiB7XG4gICAgc2F2ZU11dGF0aW9uLm11dGF0ZShcbiAgICAgIHsgc3BhOiBbZm9ybV0gfSxcbiAgICAgIHtcbiAgICAgICAgb25TdWNjZXNzOiAoKSA9PiB7XG4gICAgICAgICAgcXVlcnlDbGllbnQuaW52YWxpZGF0ZVF1ZXJpZXMoe1xuICAgICAgICAgICAgcXVlcnlLZXk6IFtcIiR7bmFtZXMuY2FwaXRhbH1cIl0sXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAobW9kZSA9PT0gXCJtb2RhbFwiKSB7XG4gICAgICAgICAgICAvLyBtb2RhbCBtb2RlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJvdXRlci5uYXZpZ2F0ZSh7IHRvOiBcIi9hZG1pbi8ke25hbWVzLmZzUGx1cmFsfVwiIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgb25FcnJvcjogZGVmYXVsdENhdGNoLFxuICAgICAgfSxcbiAgICApO1xuICB9YFxuICB9O1xuXG4gIGNvbnN0IFBBR0UgPSB7XG4gICAgdGl0bGU6IGlkID8gU0QoXCJlbnRpdHkuZWRpdFwiKShTRChcImVudGl0eS4ke2VudGl0eUlkfVwiKSwgaWQpIDogU0QoXCJlbnRpdHkuY3JlYXRlXCIpKFNEKFwiZW50aXR5LiR7ZW50aXR5SWR9XCIpKSxcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleC0xIG92ZXJmbG93LWF1dG9cIj5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPVwibWF4LXctWzE4MDBweF0gbXgtYXV0byBwLThcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJzcGFjZS15LTYgbWItOFwiPlxuICAgICAgICAgIHsvKiBIZWFkZXIgKi99XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9XCJmbGV4IGl0ZW1zLWNlbnRlciBqdXN0aWZ5LWJldHdlZW5cIj5cbiAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTJcIj5cbiAgICAgICAgICAgICAgPEZvcm1JY29uIGNsYXNzTmFtZT1cImgtNSB3LTVcIiAvPlxuICAgICAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9XCJ0ZXh0LWxnIGZvbnQtc2VtaWJvbGQgaC01XCI+e1BBR0UudGl0bGV9PC9zcGFuPlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB7bW9kZSAhPT0gXCJtb2RhbFwiICYmIChcbiAgICAgICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAgICAgIHZhcmlhbnQ9XCJvdXRsaW5lXCJcbiAgICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiByb3V0ZXIubmF2aWdhdGUoeyB0bzogXCIvYWRtaW4vJHtuYW1lcy5mc1BsdXJhbH1cIiB9KX1cbiAgICAgICAgICAgICAgICBpY29uPXs8QXJyb3dMZWZ0SWNvbiAvPn1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtTRChcImNvbW1vbi5iYWNrVG9MaXN0XCIpfVxuICAgICAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgICB7LyogRm9ybSBDYXJkICovfVxuICAgICAgICAgIDxDYXJkIGNsYXNzTmFtZT1cImJvcmRlci1ib3JkZXIvNDAgYmctZ3JheS01MCBzaGFkb3ctc21cIj5cbiAgICAgICAgICAgIDxDYXJkSGVhZGVyIGNsYXNzTmFtZT1cInB4LTQgYm9yZGVyLWIgYm9yZGVyLWdyYXktMjAwIGZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgIDxDYXJkVGl0bGUgY2xhc3NOYW1lPVwidGV4dC1zbSBmb250LW1lZGl1bSBsZWFkaW5nLW5vbmUgbS0wXCI+XG4gICAgICAgICAgICAgICAge1BBR0UudGl0bGV9XG4gICAgICAgICAgICAgIDwvQ2FyZFRpdGxlPlxuICAgICAgICAgICAgPC9DYXJkSGVhZGVyPlxuICAgICAgICAgICAgPENhcmRDb250ZW50IGNsYXNzTmFtZT1cInAtNlwiPlxuICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktNlwiPlxuJHtjb2x1bW5zXG4gIC5maWx0ZXIoKGNvbCkgPT4gY29sLm5hbWUgIT09IFwiY3JlYXRlZF9hdFwiKVxuICAubWFwKChjb2wpID0+IHtcbiAgICBjb25zdCBsYWJlbCA9ICgoKSA9PiB7XG4gICAgICBpZiAoY29sLmxhYmVsLmVuZHNXaXRoKFwiSWRcIikpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBlbnRpdHkgPSBFbnRpdHlNYW5hZ2VyLmdldChjb2wubGFiZWwucmVwbGFjZShcIklkXCIsIFwiXCIpKTtcbiAgICAgICAgICByZXR1cm4gZW50aXR5LnRpdGxlID8/IGNvbC5sYWJlbDtcbiAgICAgICAgfSBjYXRjaCB7XG4gICAgICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbC5sYWJlbDtcbiAgICB9KSgpO1xuICAgIHJldHVybiBgICAgICAgICAgICAgICAgIHsvKiAke2xhYmVsfSAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cInNwYWNlLXktMlwiPlxuICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cImJsb2NrIHRleHQteHMgbWItMSB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZW50aXR5LiR7ZW50aXR5SWR9LiR7Y29sLm5hbWV9XCIpfTwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyQ29sdW1uKGVudGl0eUlkLCBjb2wsIG5hbWVzKX1cbiAgICAgICAgICAgICAgICA8L2Rpdj5gO1xuICB9KVxuICAuam9pbihcIlxcblxcblwiKX1cblxuICAgICAgICAgICAgICAgIHsvKiBTYXZlIEJ1dHRvbiAqL31cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyIGp1c3RpZnktYmV0d2VlbiBwdC00XCI+XG4gICAgICAgICAgICAgICAgICB7Zm9ybS5pZCAmJiBmb3JtLmNyZWF0ZWRfYXQgJiYgKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT1cImZsZXggaXRlbXMtY2VudGVyXCI+XG4gICAgICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzTmFtZT1cIm1yLTIgdGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+e1NEKFwiZm9ybS5jcmVhdGVkQXRcIil9OjwvbGFiZWw+XG4gICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPVwidGV4dC14cyB0ZXh0LWdyYXktNjAwXCI+XG4gICAgICAgICAgICAgICAgICAgICAgICB7U3RyaW5nKGZvcm0uY3JlYXRlZF9hdCl9XG4gICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVN1Ym1pdH1cbiAgICAgICAgICAgICAgICAgICAgaWNvbj17PFNhdmVJY29uIC8+fVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7U0QoXCJjb21tb24uc2F2ZVwiKX1cbiAgICAgICAgICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvQ2FyZENvbnRlbnQ+XG4gICAgICAgICAgPC9DYXJkPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuICAgICAgYC50cmltKCksXG4gICAgICBpbXBvcnRLZXlzOiBbXSxcbiAgICAgIHByZVRlbXBsYXRlcyxcbiAgICB9O1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInVuaXF1ZSIsInoiLCJFbnRpdHlNYW5hZ2VyIiwiZ2V0RW51bUluZm9Gcm9tQ29sTmFtZSIsImdldFJlbGF0aW9uUHJvcEZyb21Db2xOYW1lIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19mb3JtIiwiZ2V0VGFyZ2V0QW5kUGF0aCIsIm5hbWVzIiwidGFyZ2V0IiwicGF0aCIsImZzUGx1cmFsIiwiZ2V0UmVxdWlyZWREaWN0S2V5cyIsIndyYXBGQyIsImJvZHkiLCJsYWJlbCIsImpvaW4iLCJ3cmFwRkciLCJyZW5kZXJDb2x1bW5JbXBvcnQiLCJlbnRpdHlJZCIsImNvbCIsInJlbmRlclR5cGUiLCJpZCIsInRhcmdldEVudGl0eU5hbWVzIiwibmFtZSIsImNvbXBvbmVudElkIiwiZnMiLCJyZWxQcm9wIiwicmVwbGFjZSIsInRhcmdldE5hbWVzIiwiZ2V0TmFtZXNGcm9tSWQiLCJ3aXRoIiwiRXJyb3IiLCJyZW5kZXJDb2x1bW4iLCJyZWdFeHByIiwicGxhY2Vob2xkZXIiLCJ6b2RUeXBlIiwiWm9kU3RyaW5nIiwibWF4TGVuZ3RoIiwiZW51bUlkIiwiY2FwaXRhbCIsImNhbWVsaXplIiwib3B0aW9uYWwiLCJudWxsYWJsZSIsImZrSWQiLCJyZXNvbHZlRGVmYXVsdFZhbHVlIiwiY29sdW1ucyIsInJlZHVjZSIsInJlc3VsdCIsInZhbHVlIiwiWm9kTnVtYmVyIiwiWm9kRW51bSIsIk9iamVjdCIsImtleXMiLCJlbnVtIiwiWm9kQm9vbGVhbiIsImNvcmUiLCIkWm9kU3RyaW5nIiwiWm9kQXJyYXkiLCJab2RPYmplY3QiLCJyZW5kZXIiLCJlbnRpdHkiLCJnZXQiLCJsb2FkVHlwZXMiLCJsb2FkZWRUeXBlcyIsIlNhdmVQYXJhbXNab2RUeXBlIiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsInNhdmVQYXJhbXNOb2RlIiwiY2hpbGRyZW4iLCJmaWx0ZXIiLCJtYXAiLCJwcm9wQ2FuZGlkYXRlIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsImRlc2MiLCJkZWZhdWx0VmFsdWUiLCJwcmVUZW1wbGF0ZXMiLCJlbmRzV2l0aCIsImtleSIsInRhcmdldE1kSWQiLCJ0YXJnZXRNRE5hbWVzIiwib3B0aW9ucyIsIm5vZGUiLCJwcmVUZW1wbGF0ZSIsInNvbWUiLCJpbmNsdWRlcyIsImxlbmd0aCIsIkJvb2xlYW4iLCJjYXBpdGFsUGx1cmFsIiwiSlNPTiIsInN0cmluZ2lmeSIsImhhc0RhdGV0aW1lIiwiaGFzRGF0ZSIsImhlbHBlcnMiLCJyZWxhdGlvbkZpZWxkcyIsInJlbGF0aW9uTmFtZSIsInRpdGxlIiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGdCQUFnQixhQUFhO0FBQ3BDLFNBQVNDLE1BQU0sUUFBUSxVQUFVO0FBQ2pDLFNBQVNDLENBQUMsUUFBUSxNQUFNO0FBQ3hCLFNBQVNDLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLHNCQUFzQixFQUFFQywwQkFBMEIsUUFBUSxnQkFBYTtBQUVoRixTQUFTQyxRQUFRLFFBQVEsaUJBQWM7QUFFdkMsT0FBTyxNQUFNQyw0QkFBNEJEO0lBQ3ZDLGFBQWM7UUFDWixLQUFLLENBQUM7SUFDUjtJQUVBRSxpQkFBaUJDLEtBQXdCLEVBQUU7UUFDekMsT0FBTztZQUNMQyxRQUFRO1lBQ1JDLE1BQU0sR0FBR0YsTUFBTUcsUUFBUSxDQUFDLFNBQVMsQ0FBQztRQUNwQztJQUNGO0lBRVNDLHNCQUF1QztRQUM5QyxPQUFPO1lBQUM7WUFBaUI7WUFBZTtZQUFxQjtZQUFrQjtTQUFjO0lBQy9GO0lBRUFDLE9BQU9DLElBQVksRUFBRUMsS0FBYyxFQUFVO1FBQzNDLE9BQU87WUFDTCxDQUFDLDJCQUEyQixFQUFFQSxRQUFRLENBQUMsV0FBVyxFQUFFQSxNQUFNLFFBQVEsQ0FBQyxHQUFHLElBQUk7WUFDMUUsQ0FBQyxFQUFFLEVBQUVELE1BQU07WUFDWCxDQUFDLE1BQU0sQ0FBQztTQUNULENBQUNFLElBQUksQ0FBQztJQUNUO0lBQ0FDLE9BQU9ILElBQVksRUFBRUMsS0FBYyxFQUFVO1FBQzNDLE9BQU8sSUFBSSxDQUFDRixNQUFNLENBQUNDLE1BQU1DO0lBQzNCO0lBRUFHLG1CQUFtQkMsUUFBZ0IsRUFBRUMsR0FBa0IsRUFBRTtRQUN2RCxJQUFJQSxJQUFJQyxVQUFVLEtBQUssU0FBUztZQUM5QixNQUFNLEVBQUVDLEVBQUUsRUFBRUMsaUJBQWlCLEVBQUUsR0FBR3BCLHVCQUF1QmdCLFVBQVVDLElBQUlJLElBQUk7WUFDM0UsTUFBTUMsY0FBYyxHQUFHSCxHQUFHLE1BQU0sQ0FBQztZQUNqQyxPQUFPLENBQUMsU0FBUyxFQUFFRyxZQUFZLHNCQUFzQixFQUFFRixrQkFBa0JHLEVBQUUsQ0FBQyxDQUFDLEVBQUVELFlBQVksRUFBRSxDQUFDO1FBQ2hHLE9BQU8sSUFBSUwsSUFBSUMsVUFBVSxLQUFLLGdCQUFnQjtZQUM1QyxJQUFJO2dCQUNGLE1BQU1NLFVBQVV2QiwyQkFBMkJlLFVBQVVDLElBQUlJLElBQUksQ0FBQ0ksT0FBTyxDQUFDLE9BQU87Z0JBQzdFLE1BQU1DLGNBQWMzQixjQUFjNEIsY0FBYyxDQUFDSCxRQUFRSSxJQUFJO2dCQUM3RCxNQUFNTixjQUFjLEdBQUdFLFFBQVFJLElBQUksQ0FBQyxhQUFhLENBQUM7Z0JBQ2xELE9BQU8sQ0FBQyxTQUFTLEVBQUVOLFlBQVksc0JBQXNCLEVBQUVJLFlBQVlILEVBQUUsQ0FBQyxDQUFDLEVBQUVELFlBQVksRUFBRSxDQUFDO1lBQzFGLEVBQUUsT0FBTTtnQkFDTixPQUFPO1lBQ1Q7UUFDRixPQUFPO1lBQ0wsTUFBTSxJQUFJTyxNQUFNLENBQUMsWUFBWSxFQUFFWixJQUFJSSxJQUFJLENBQUMsQ0FBQyxFQUFFSixJQUFJQyxVQUFVLEVBQUU7UUFDN0Q7SUFDRjtJQUVBWSxhQUFhZCxRQUFnQixFQUFFQyxHQUFrQixFQUFFWixLQUF3QixFQUFVO1FBQ25GLE1BQU0wQixVQUFVLENBQUMsY0FBYyxFQUFFZCxJQUFJSSxJQUFJLENBQUMsR0FBRyxDQUFDO1FBQzlDLE1BQU1XLGNBQWMsQ0FBQyxZQUFZLEVBQUVoQixTQUFTLENBQUMsRUFBRUMsSUFBSUksSUFBSSxDQUFDLEdBQUcsQ0FBQztRQUU1RCxPQUFRSixJQUFJQyxVQUFVO1lBQ3BCLEtBQUs7Z0JBQ0gsSUFBSUQsSUFBSWdCLE9BQU8sWUFBWW5DLEVBQUVvQyxTQUFTLElBQUksQUFBQ2pCLENBQUFBLElBQUlnQixPQUFPLENBQUNFLFNBQVMsSUFBSSxDQUFBLEtBQU0sS0FBSztvQkFDN0UsT0FBTyxDQUFDLG9EQUFvRCxFQUFFSCxZQUFZLENBQUMsRUFBRUQsUUFBUSxHQUFHLENBQUM7Z0JBQzNGLE9BQU87b0JBQ0wsT0FBTyxDQUFDLDREQUE0RCxFQUFFQyxZQUFZLENBQUMsRUFBRUQsUUFBUSxHQUFHLENBQUM7Z0JBQ25HO1lBQ0YsS0FBSztnQkFDSCxPQUFPLENBQUM7O29CQUVJLEVBQUVBLFFBQVE7b0JBQ1YsQ0FBQztZQUNmLEtBQUs7Z0JBQ0gsT0FBTyxDQUFDLHFCQUFxQixFQUFFQSxRQUFRLEdBQUcsQ0FBQztZQUM3QyxLQUFLO2dCQUNILE9BQU8sQ0FBQyxrRUFBa0UsRUFBRUMsWUFBWSxDQUFDLEVBQUVELFFBQVEsR0FBRyxDQUFDO1lBQ3pHLEtBQUs7Z0JBQ0gsT0FBTyxDQUFDLFFBQVEsRUFBRUEsUUFBUSxHQUFHLENBQUM7WUFDaEMsS0FBSztnQkFDSCxPQUFPLENBQUM7Ozs7b0JBSUksRUFBRUEsUUFBUTtvQkFDVixDQUFDO1lBQ2YsS0FBSztnQkFDSCxPQUFPLENBQUM7Ozs7OztvQkFNSSxFQUFFQSxRQUFRO29CQUNWLENBQUM7WUFDZixLQUFLO2dCQUNILElBQUk7b0JBQ0YsSUFBSUs7b0JBQ0osSUFBSW5CLElBQUlJLElBQUksS0FBSyxXQUFXO3dCQUMxQmUsU0FBUyxHQUFHL0IsTUFBTWdDLE9BQU8sR0FBR3pDLFdBQVcwQyxRQUFRLENBQUNyQixJQUFJSSxJQUFJLEVBQUUsTUFBTSxDQUFDO29CQUNuRSxPQUFPO3dCQUNMLE1BQU0sRUFBRUYsRUFBRSxFQUFFLEdBQUduQix1QkFBdUJnQixVQUFVQyxJQUFJSSxJQUFJO3dCQUN4RGUsU0FBUyxHQUFHakIsR0FBRyxNQUFNLENBQUM7b0JBQ3hCO29CQUNBLE9BQU8sQ0FBQyxDQUFDLEVBQUVpQixPQUFPLENBQUMsRUFBRUwsUUFBUSxDQUFDLEVBQUVkLElBQUlzQixRQUFRLElBQUl0QixJQUFJdUIsUUFBUSxHQUFHLGNBQWMsR0FBRyxHQUFHLENBQUM7Z0JBQ3RGLEVBQUUsT0FBTTtvQkFDTixPQUFPLENBQUMsd0NBQXdDLEVBQUVULFFBQVEsR0FBRyxDQUFDO2dCQUNoRTtZQUNGLEtBQUs7Z0JBQ0gsSUFBSTtvQkFDRixNQUFNUCxVQUFVdkIsMkJBQTJCZSxVQUFVQyxJQUFJSSxJQUFJLENBQUNJLE9BQU8sQ0FBQyxPQUFPO29CQUM3RSxNQUFNZ0IsT0FBTyxHQUFHakIsUUFBUUksSUFBSSxDQUFDLGFBQWEsQ0FBQztvQkFDM0MsT0FBTyxDQUFDLENBQUMsRUFBRWEsS0FBSyxZQUFZLEVBQUVWLFFBQVEsQ0FBQyxFQUNyQ2QsSUFBSXNCLFFBQVEsSUFBSXRCLElBQUl1QixRQUFRLEdBQUcsY0FBYyxHQUM5QywyQkFBMkIsQ0FBQztnQkFDL0IsRUFBRSxPQUFNO29CQUNOLE9BQU8sQ0FBQyxrRUFBa0UsRUFBRVIsWUFBWSxDQUFDLEVBQUVELFFBQVEsR0FBRyxDQUFDO2dCQUN6RztZQUNGLEtBQUs7WUFDTCxLQUFLO2dCQUNILE9BQU8sQ0FBQyxxREFBcUQsRUFBRWQsSUFBSUksSUFBSSxDQUFDLEVBQUUsRUFBRVUsUUFBUSxHQUFHLENBQUM7WUFDMUY7Z0JBQ0UsT0FBTyxDQUFDLHdDQUF3QyxFQUFFQSxRQUFRLEdBQUcsQ0FBQztRQUNsRTtJQUNGO0lBRUFXLG9CQUFvQkMsT0FBd0IsRUFBVTtRQUNwRCxPQUFPQSxRQUFRQyxNQUFNLENBQ25CLENBQUNDLFFBQVE1QjtZQUNQLElBQUlBLElBQUlzQixRQUFRLEVBQUU7Z0JBQ2hCLE9BQU9NO1lBQ1Q7WUFFQSxJQUFJQztZQUNKLElBQUk3QixJQUFJdUIsUUFBUSxLQUFLLE1BQU07Z0JBQ3pCTSxRQUFRO1lBQ1YsT0FBTyxJQUFJN0IsSUFBSWdCLE9BQU8sWUFBWW5DLEVBQUVpRCxTQUFTLEVBQUU7Z0JBQzdDRCxRQUFRO1lBQ1YsT0FBTyxJQUFJN0IsSUFBSWdCLE9BQU8sWUFBWW5DLEVBQUVrRCxPQUFPLEVBQUU7Z0JBQzNDRixRQUFRRyxPQUFPQyxJQUFJLENBQUNqQyxJQUFJZ0IsT0FBTyxDQUFDa0IsSUFBSSxDQUFDLENBQUMsRUFBRTtZQUMxQyxPQUFPLElBQUlsQyxJQUFJZ0IsT0FBTyxZQUFZbkMsRUFBRXNELFVBQVUsRUFBRTtnQkFDOUNOLFFBQVE7WUFDVixPQUFPLElBQUk3QixJQUFJZ0IsT0FBTyxZQUFZbkMsRUFBRXVELElBQUksQ0FBQ0MsVUFBVSxFQUFFO2dCQUNuRCx1RkFBdUY7Z0JBQ3ZGLHNDQUFzQztnQkFDdEMsSUFBSXJDLElBQUlDLFVBQVUsS0FBSyxtQkFBbUI7b0JBQ3hDNEIsUUFBUTtnQkFDVixPQUFPO29CQUNMQSxRQUFRO2dCQUNWO1lBQ0YsT0FBTyxJQUFJN0IsSUFBSWdCLE9BQU8sWUFBWW5DLEVBQUV5RCxRQUFRLEVBQUU7Z0JBQzVDVCxRQUFRLEVBQUU7WUFDWixPQUFPLElBQUk3QixJQUFJZ0IsT0FBTyxZQUFZbkMsRUFBRTBELFNBQVMsRUFBRTtnQkFDN0NWLFFBQVEsQ0FBQztZQUNYO1lBRUFELE1BQU0sQ0FBQzVCLElBQUlJLElBQUksQ0FBQyxHQUFHeUI7WUFDbkIsT0FBT0Q7UUFDVCxHQUNBLENBQUM7SUFFTDtJQUVBLE1BQU1ZLE9BQU8sRUFBRXpDLFFBQVEsRUFBZ0MsRUFBRTtRQUN2RCxNQUFNMEMsU0FBUzNELGNBQWM0RCxHQUFHLENBQUMzQztRQUNqQyxNQUFNWCxRQUFRTixjQUFjNEIsY0FBYyxDQUFDWDtRQUUzQyx3Q0FBd0M7UUFDeEMsTUFBTSxFQUFFNEMsU0FBUyxFQUFFLEdBQUcsTUFBTSxNQUFNLENBQUM7UUFDbkMsTUFBTUMsY0FBYyxNQUFNRDtRQUMxQixNQUFNRSxvQkFBb0JELFdBQVcsQ0FBQyxHQUFHN0MsU0FBUyxVQUFVLENBQUMsQ0FBQztRQUU5RCxJQUFJLENBQUM4QyxtQkFBbUI7WUFDdEIsTUFBTSxJQUFJakMsTUFBTSxDQUFDLGVBQWUsRUFBRWIsU0FBUyxzQ0FBc0MsQ0FBQztRQUNwRjtRQUVBLDRCQUE0QjtRQUM1QixNQUFNLEVBQUUrQyxzQkFBc0IsRUFBRSxHQUFHLE1BQU0sTUFBTSxDQUFDO1FBQ2hELE1BQU1DLGlCQUFpQkQsdUJBQXVCRDtRQUU5QyxNQUFNbkIsVUFBVSxBQUFFcUIsQ0FBQUEsZ0JBQWdCQyxZQUFZLEVBQUUsQUFBRCxFQUM1Q0MsTUFBTSxDQUFDLENBQUNqRCxNQUFRQSxJQUFJSSxJQUFJLEtBQUssTUFDN0I4QyxHQUFHLENBQUMsQ0FBQ2xEO1lBQ0osTUFBTW1ELGdCQUFnQlYsT0FBT1csS0FBSyxDQUFDQyxJQUFJLENBQUMsQ0FBQ0MsT0FBU0EsS0FBS2xELElBQUksS0FBS0osSUFBSUksSUFBSTtZQUN4RUosSUFBSUwsS0FBSyxHQUFHd0QsZUFBZUksUUFBUXZELElBQUlMLEtBQUs7WUFDNUMsT0FBT0s7UUFDVDtRQUVGLE1BQU13RCxlQUFlLElBQUksQ0FBQy9CLG1CQUFtQixDQUFDQztRQUU5QyxTQUFTO1FBQ1QsTUFBTStCLGVBQWlELEFBQUMvQixRQUNyRHVCLE1BQU0sQ0FBQyxDQUFDakQ7WUFDUCxJQUFJQSxJQUFJSSxJQUFJLEtBQUssTUFBTTtnQkFDckIsT0FBTztZQUNULE9BQU8sSUFBSUosSUFBSUksSUFBSSxDQUFDc0QsUUFBUSxDQUFDLFVBQVUxRCxJQUFJQyxVQUFVLEtBQUssYUFBYTtnQkFDckUsSUFBSTtvQkFDRmpCLDJCQUEyQmUsVUFBVUMsSUFBSUksSUFBSSxDQUFDSSxPQUFPLENBQUMsT0FBTztvQkFDN0QsT0FBTztnQkFDVCxFQUFFLE9BQU07b0JBQ04sT0FBTztnQkFDVDtZQUNGLE9BQU8sSUFBSVIsSUFBSUMsVUFBVSxLQUFLLFNBQVM7Z0JBQ3JDLElBQUk7b0JBQ0ZsQix1QkFBdUJnQixVQUFVQyxJQUFJSSxJQUFJO29CQUN6QyxPQUFPO2dCQUNULEVBQUUsT0FBTTtvQkFDTixPQUFPO2dCQUNUO1lBQ0Y7WUFDQSxPQUFPO1FBQ1QsR0FDQzhDLEdBQUcsQ0FBQyxDQUFDbEQ7WUFDSixJQUFJMkQ7WUFDSixJQUFJQyxhQUFhN0Q7WUFDakIsSUFBSW9CO1lBQ0osSUFBSW5CLElBQUlDLFVBQVUsS0FBSyxTQUFTO2dCQUM5QjBELE1BQU07Z0JBQ04sTUFBTSxFQUFFeEQsbUJBQW1CMEQsYUFBYSxFQUFFM0QsRUFBRSxFQUFFLEdBQUduQix1QkFDL0NnQixVQUNBQyxJQUFJSSxJQUFJO2dCQUVWd0QsYUFBYUMsY0FBY3pDLE9BQU87Z0JBQ2xDRCxTQUFTakI7WUFDWCxPQUFPO2dCQUNMeUQsTUFBTTtnQkFDTixNQUFNcEQsVUFBVXZCLDJCQUEyQmUsVUFBVUMsSUFBSUksSUFBSSxDQUFDSSxPQUFPLENBQUMsT0FBTztnQkFDN0VvRCxhQUFhckQsUUFBUUksSUFBSTtZQUMzQjtZQUVBLE9BQU87Z0JBQ0xnRCxLQUFLQTtnQkFDTEcsU0FBUztvQkFDUC9ELFVBQVU2RDtvQkFDVkcsTUFBTS9EO29CQUNObUI7Z0JBQ0Y7WUFDRjtRQUNGLEdBQ0M4QixNQUFNLENBQUMsQ0FBQ2U7WUFDUCxJQUFJQSxZQUFZTCxHQUFHLEtBQUssd0JBQXdCO2dCQUM5QyxJQUFJO29CQUNGN0UsY0FBYzRELEdBQUcsQ0FBQ3NCLFlBQVlGLE9BQU8sQ0FBQy9ELFFBQVE7b0JBQzlDLE9BQU87Z0JBQ1QsRUFBRSxPQUFNO29CQUNOLE9BQU87Z0JBQ1Q7WUFDRjtZQUNBLE9BQU87UUFDVDtRQUVGLE9BQU87WUFDTCxHQUFHLElBQUksQ0FBQ1osZ0JBQWdCLENBQUNDLE1BQU07WUFDL0JNLE1BQU0sQ0FBQzs7Ozs7OztRQU9MLEVBQUVnQyxRQUFRdUMsSUFBSSxDQUFDLENBQUNqRSxNQUFRQSxJQUFJQyxVQUFVLEtBQUssa0JBQWtCRCxJQUFJZ0IsT0FBTyxZQUFZbkMsRUFBRW9DLFNBQVMsSUFBSSxBQUFDakIsQ0FBQUEsSUFBSWdCLE9BQU8sQ0FBQ0UsU0FBUyxJQUFJLENBQUEsSUFBSyxPQUFPLGtCQUFrQixLQUFLUSxRQUFRdUMsSUFBSSxDQUFDLENBQUNqRSxNQUFRQSxJQUFJQyxVQUFVLEtBQUssV0FBVyxtRkFBbUYsS0FBS3lCLFFBQVF1QyxJQUFJLENBQUMsQ0FBQ2pFLE1BQVFBLElBQUlDLFVBQVUsS0FBSyxhQUFhLGdCQUFnQixLQUFLeUIsUUFBUXVDLElBQUksQ0FBQyxDQUFDakUsTUFBUTtvQkFBQztvQkFBbUI7aUJBQXdCLENBQUNrRSxRQUFRLENBQUNsRSxJQUFJQyxVQUFVLEtBQUssbUJBQW1CLEtBQUt5QixRQUFRdUMsSUFBSSxDQUFDLENBQUNqRSxNQUFRO29CQUFDO29CQUFtQjtvQkFBZTtpQkFBVyxDQUFDa0UsUUFBUSxDQUFDbEUsSUFBSUMsVUFBVSxLQUFLLG1CQUFtQixHQUFHOzs7Ozs7O1NBT3BtQixFQUFFYixNQUFNZ0MsT0FBTyxDQUFDO2NBQ1gsRUFBRWhDLE1BQU1nQyxPQUFPLENBQUMsNkNBQTZDLEVBQ25FTSxRQUFRdUIsTUFBTSxDQUFDLENBQUNqRCxNQUFRQSxJQUFJQyxVQUFVLEtBQUssU0FBU2tFLE1BQU0sR0FBRyxJQUN6RCxnQkFDQXZGLE9BQ0U4QyxRQUNHdUIsTUFBTSxDQUFDLENBQUNqRCxNQUFRQSxJQUFJQyxVQUFVLEtBQUssU0FDbkNpRCxHQUFHLENBQUMsQ0FBQ2xEO2dCQUNKLElBQUk7b0JBQ0YsTUFBTSxFQUFFRSxFQUFFLEVBQUUsR0FBR25CLHVCQUF1QmdCLFVBQVVDLElBQUlJLElBQUk7b0JBQ3hELE9BQU8sR0FBR0YsR0FBRyxFQUFFLEVBQUVBLEdBQUcsS0FBSyxDQUFDO2dCQUM1QixFQUFFLE9BQU07b0JBQ04sT0FBTztnQkFDVDtZQUNGLElBRUQrQyxNQUFNLENBQUNtQixTQUNQeEUsSUFBSSxDQUFDLFFBQ1IsMkNBQ0EsR0FDTDs7U0FFRSxFQUFFUixNQUFNZ0MsT0FBTyxDQUFDLDhCQUE4QixFQUFFaEMsTUFBTWtCLEVBQUUsQ0FBQyxDQUFDLEVBQUVsQixNQUFNa0IsRUFBRSxDQUFDO0FBQzlFLEVBQUUxQixPQUNBOEMsUUFDR3VCLE1BQU0sQ0FBQyxDQUFDakQsTUFBUTtvQkFBQztvQkFBZ0I7aUJBQVEsQ0FBQ2tFLFFBQVEsQ0FBQ2xFLElBQUlDLFVBQVUsR0FDakVpRCxHQUFHLENBQUMsQ0FBQ2xEO2dCQUNKLE9BQU8sSUFBSSxDQUFDRixrQkFBa0IsQ0FBQ0MsVUFBVUM7WUFDM0MsSUFDRkosSUFBSSxDQUFDLE1BQU07Ozs7Ozs7Ozs7OzZDQVdnQyxFQUFFUixNQUFNRyxRQUFRLENBQUM7O2FBRWpELEVBQUVILE1BQU1pRixhQUFhLENBQUM7OztTQUcxQixFQUFFakYsTUFBTWlGLGFBQWEsQ0FBQzs7VUFFckIsRUFBRWpGLE1BQU1pRixhQUFhLENBQUM7OztLQUczQixFQUFFakYsTUFBTWlGLGFBQWEsQ0FBQzs7Ozs7Z0JBS1gsRUFBRWpGLE1BQU1pRixhQUFhLENBQUMsbUJBQW1CLEVBQUVqRixNQUFNaUYsYUFBYSxDQUFDOzs7O2lDQUk5QyxFQUFFM0MsUUFBUXVDLElBQUksQ0FBQyxDQUFDakUsTUFBUTtvQkFBQztvQkFBbUI7aUJBQXdCLENBQUNrRSxRQUFRLENBQUNsRSxJQUFJQyxVQUFVLEtBQUssYUFBYSxHQUFHLGlCQUFpQixFQUFFYixNQUFNZ0MsT0FBTyxDQUFDLFlBQVksRUFBRWtELEtBQUtDLFNBQVMsQ0FBQ2YsY0FBY2hELE9BQU8sQ0FBQyxjQUFjLE1BQU07QUFDMVAsRUFBRSxBQUFDLENBQUE7Z0JBQ0QsTUFBTWdFLGNBQWM5QyxRQUFRdUMsSUFBSSxDQUFDLENBQUNqRSxNQUFRQSxJQUFJQyxVQUFVLEtBQUs7Z0JBQzdELE1BQU13RSxVQUFVL0MsUUFBUXVDLElBQUksQ0FBQyxDQUFDakUsTUFBUUEsSUFBSUMsVUFBVSxLQUFLO2dCQUN6RCxJQUFJLENBQUN1RSxlQUFlLENBQUNDLFNBQVMsT0FBTztnQkFFckMsSUFBSUMsVUFBVTtnQkFDZCxJQUFJRixhQUFhO29CQUNmRSxXQUFXLENBQUM7Ozs7Ozs7Ozs7OztBQVloQixDQUFDO2dCQUNDO2dCQUNBLElBQUlELFNBQVM7b0JBQ1hDLFdBQVcsQ0FBQzs7Ozs7Ozs7Ozs7O0FBWWhCLENBQUM7Z0JBQ0M7Z0JBQ0EsT0FBT0E7WUFDVCxDQUFBLElBQUs7OztNQUdDLEVBQUV0RixNQUFNZ0MsT0FBTyxDQUFDLFdBQVcsRUFBRWhDLE1BQU1nQyxPQUFPLENBQUM7OztpQkFHaEMsRUFBRSxBQUFDLENBQUE7Z0JBQ1IsNkJBQTZCO2dCQUM3QixNQUFNdUQsaUJBQWlCakQsUUFDcEJ1QixNQUFNLENBQUMsQ0FBQ2pELE1BQVFBLElBQUlDLFVBQVUsS0FBSyxnQkFDbkNpRCxHQUFHLENBQUMsQ0FBQ2xEO29CQUNKLE1BQU00RSxlQUFlNUUsSUFBSUksSUFBSSxDQUFDSSxPQUFPLENBQUMsUUFBUTtvQkFDOUMsSUFBSVIsSUFBSXVCLFFBQVEsRUFBRTt3QkFDaEIsT0FBTyxDQUFDLFlBQVksRUFBRXZCLElBQUlJLElBQUksQ0FBQyxNQUFNLEVBQUV3RSxhQUFhLGFBQWEsQ0FBQztvQkFDcEUsT0FBTzt3QkFDTCxPQUFPLENBQUMsWUFBWSxFQUFFNUUsSUFBSUksSUFBSSxDQUFDLE1BQU0sRUFBRXdFLGFBQWEsS0FBSyxDQUFDO29CQUM1RDtnQkFDRixHQUNDaEYsSUFBSSxDQUFDO2dCQUNSLE9BQU8rRTtZQUNULENBQUEsSUFBSzs7Ozs7O3VCQU1RLEVBQUV2RixNQUFNZ0MsT0FBTyxDQUFDO3VCQUNoQixFQUNuQk0sUUFBUXVDLElBQUksQ0FBQyxDQUFDakUsTUFBUTtvQkFBQztvQkFBbUI7aUJBQXdCLENBQUNrRSxRQUFRLENBQUNsRSxJQUFJQyxVQUFVLEtBQ3RGLENBQUM7Ozs7Ozt3QkFNZSxFQUFFYixNQUFNZ0MsT0FBTyxDQUFDOzs7Ozs7MENBTUUsRUFBRWhDLE1BQU1HLFFBQVEsQ0FBQzs7Ozs7O0lBTXZELENBQUMsR0FDRyxDQUFDOzs7Ozs7d0JBTWUsRUFBRUgsTUFBTWdDLE9BQU8sQ0FBQzs7Ozs7OzBDQU1FLEVBQUVoQyxNQUFNRyxRQUFRLENBQUM7Ozs7OztHQU14RCxDQUFDLENBQ0Q7Ozs2Q0FHMEMsRUFBRVEsU0FBUyx5Q0FBeUMsRUFBRUEsU0FBUzs7Ozs7Ozs7Ozs7Ozs7Ozs2REFnQi9DLEVBQUVYLE1BQU1HLFFBQVEsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQjlFLEVBQUVtQyxRQUNDdUIsTUFBTSxDQUFDLENBQUNqRCxNQUFRQSxJQUFJSSxJQUFJLEtBQUssY0FDN0I4QyxHQUFHLENBQUMsQ0FBQ2xEO2dCQUNKLE1BQU1MLFFBQVEsQUFBQyxDQUFBO29CQUNiLElBQUlLLElBQUlMLEtBQUssQ0FBQytELFFBQVEsQ0FBQyxPQUFPO3dCQUM1QixJQUFJOzRCQUNGLE1BQU1qQixTQUFTM0QsY0FBYzRELEdBQUcsQ0FBQzFDLElBQUlMLEtBQUssQ0FBQ2EsT0FBTyxDQUFDLE1BQU07NEJBQ3pELE9BQU9pQyxPQUFPb0MsS0FBSyxJQUFJN0UsSUFBSUwsS0FBSzt3QkFDbEMsRUFBRSxPQUFNOzRCQUNOLE9BQU9LLElBQUlMLEtBQUs7d0JBQ2xCO29CQUNGO29CQUNBLE9BQU9LLElBQUlMLEtBQUs7Z0JBQ2xCLENBQUE7Z0JBQ0EsT0FBTyxDQUFDLG9CQUFvQixFQUFFQSxNQUFNOztrRkFFMEMsRUFBRUksU0FBUyxDQUFDLEVBQUVDLElBQUlJLElBQUksQ0FBQztrQkFDdkYsRUFBRSxJQUFJLENBQUNTLFlBQVksQ0FBQ2QsVUFBVUMsS0FBS1osT0FBTztzQkFDdEMsQ0FBQztZQUNyQixHQUNDUSxJQUFJLENBQUMsUUFBUTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O01BMkJWLENBQUMsQ0FBQ2tGLElBQUk7WUFDTkMsWUFBWSxFQUFFO1lBQ2R0QjtRQUNGO0lBQ0Y7QUFDRiJ9
@@ -132,8 +132,8 @@ export function ${names.capital}IdAsyncSelect<T extends ${names.capital}SubsetKe
132
132
  return (
133
133
  <MultiSelect
134
134
  options={options}
135
+ value={multiValue}
135
136
  onValueChange={handleMultiChange}
136
- defaultValue={multiValue}
137
137
  placeholder={placeholder}
138
138
  disabled={disabled}
139
139
  className={className}
@@ -169,4 +169,4 @@ export function ${names.capital}IdAsyncSelect<T extends ${names.capital}SubsetKe
169
169
  }
170
170
  }
171
171
 
172
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hc3luY19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfaWRfYXN5bmNfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkLCB0ZXh0RmllbGQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hc3luY19zZWxlY3RcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgLy8gdGV4dEZpZWxk6rCAIOyngOygleuQmOyngCDslYrsnYAg6rK97JqwIOuqqOuToCBzdWJzZXTsl5Ag6rO17Ya17Jy866GcIOyeiOuKlCDtlYTrk5wg7LC+6riwXG4gICAgaWYgKCF0ZXh0RmllbGQpIHtcbiAgICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgICBpZiAoc3Vic2V0S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIOuqqOuToCBzdWJzZXTsl5Ag6rO17Ya17Jy866GcIO2PrO2VqOuQnCDsp4HsoJEg7ZWE65Oc66eMIOy2lOy2nFxuICAgICAgICBjb25zdCBjb21tb25GaWVsZHMgPSBzdWJzZXRLZXlzLnJlZHVjZShcbiAgICAgICAgICAoY29tbW9uLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IGVudGl0eS5zdWJzZXRzW2tleV1cbiAgICAgICAgICAgICAgLmZpbHRlcigocGF0aCkgPT4gIXBhdGguaW5jbHVkZXMoXCIuXCIpKSAvLyDsp4HsoJEg7ZWE65Oc66eMXG4gICAgICAgICAgICAgIC5tYXAoKHBhdGgpID0+IHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbW1vbi5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZHMuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudGl0eS5zdWJzZXRzW3N1YnNldEtleXNbMF1dLmZpbHRlcigocGF0aCkgPT4gIXBhdGguaW5jbHVkZXMoXCIuXCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDsmrDshKDsiJzsnIQ6IG5hbWUgPiB0aXRsZSA+IOyyqyDrsojsp7ggc3RyaW5nIO2DgOyehVxuICAgICAgICBjb25zdCBwaWNrZWRQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgKHByb3ApID0+IFtcIm5hbWVcIiwgXCJ0aXRsZVwiXS5pbmNsdWRlcyhwcm9wLm5hbWUpICYmIGNvbW1vbkZpZWxkcy5pbmNsdWRlcyhwcm9wLm5hbWUpLFxuICAgICAgICApO1xuICAgICAgICBpZiAocGlja2VkUHJvcCkge1xuICAgICAgICAgIHRleHRGaWVsZCA9IHBpY2tlZFByb3AubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGVQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgICAocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInN0cmluZ1wiICYmIGNvbW1vbkZpZWxkcy5pbmNsdWRlcyhwcm9wLm5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGNhbmRpZGF0ZVByb3ApIHtcbiAgICAgICAgICAgIHRleHRGaWVsZCA9IGNhbmRpZGF0ZVByb3AubmFtZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g6rO17Ya1IO2VhOuTnOqwgCDsl4bsnLzrqbQgaWQg7IKs7JqpXG4gICAgICAgICAgICB0ZXh0RmllbGQgPSBcImlkXCI7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgYFdhcm5pbmc6ICR7ZW50aXR5SWR97JeQIOuqqOuToCBzdWJzZXTsl5Ag6rO17Ya17Jy866GcIO2PrO2VqOuQnCBzdHJpbmcg7ZWE65Oc6rCAIOyXhuyWtCBpZOulvCDsgqzsmqntlanri4jri6RgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7XG4gIEFzeW5jU2VsZWN0LFxuICB0eXBlIEFzeW5jU2VsZWN0T3B0aW9uLFxuICBNdWx0aVNlbGVjdCxcbn0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXksICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHR5cGUgeyAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcyB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnR5cGVzXCI7XG5cbmV4cG9ydCB0eXBlICR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0UHJvcHM8VCBleHRlbmRzICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXk+ID0ge1xuICBzdWJzZXQ6IFQ7XG4gIGJhc2VMaXN0UGFyYW1zPzogJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXM7XG4gIHRleHRGaWVsZD86IGtleW9mICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nW1RdO1xuICB2YWx1ZUZpZWxkPzoga2V5b2YgJHtuYW1lcy5jYXBpdGFsfVN1YnNldE1hcHBpbmdbVF07XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjbGVhcmFibGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xufSAmIChcbiAgfCB7XG4gICAgICBtdWx0aXBsZT86IGZhbHNlO1xuICAgICAgdmFsdWU/OiBudW1iZXIgfCBudWxsO1xuICAgICAgb25WYWx1ZUNoYW5nZT86ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICAgIH1cbiAgfCB7XG4gICAgICBtdWx0aXBsZTogdHJ1ZTtcbiAgICAgIHZhbHVlPzogbnVtYmVyW107XG4gICAgICBvblZhbHVlQ2hhbmdlPzogKHZhbHVlOiBudW1iZXJbXSkgPT4gdm9pZDtcbiAgICB9XG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfUlkQXN5bmNTZWxlY3Q8VCBleHRlbmRzICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXk+KHtcbiAgc3Vic2V0LFxuICB2YWx1ZSxcbiAgb25WYWx1ZUNoYW5nZSxcbiAgYmFzZUxpc3RQYXJhbXMsXG4gIHRleHRGaWVsZCxcbiAgdmFsdWVGaWVsZCxcbiAgcGxhY2Vob2xkZXIgPSBcIiR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNvbnN0YW50fVwiLFxuICBjbGVhcmFibGUsXG4gIGRpc2FibGVkLFxuICBjbGFzc05hbWUsXG4gIG11bHRpcGxlID0gZmFsc2UsXG59OiAke25hbWVzLmNhcGl0YWx9SWRBc3luY1NlbGVjdFByb3BzPFQ+KSB7XG4gIGNvbnN0IFtsaXN0UGFyYW1zLCBzZXRMaXN0UGFyYW1zXSA9IHVzZVN0YXRlPCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zPihiYXNlTGlzdFBhcmFtcyA/PyB7fSk7XG5cbiAgY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLnVzZSR7bmFtZXMuY2FwaXRhbFBsdXJhbH0oc3Vic2V0LCBsaXN0UGFyYW1zKTtcbiAgY29uc3QgeyByb3dzOiAke25hbWVzLmNhbWVsUGx1cmFsfSB9ID0gZGF0YSA/PyB7fTtcblxuICAvLyDsmLXshZgg7IOd7ISxXG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKCR7bmFtZXMuY2FtZWxQbHVyYWx9ID8/IFtdKS5tYXAoKCR7bmFtZXMuY2FtZWx9KSA9PiAoe1xuICAgICAgdmFsdWU6IFN0cmluZygke25hbWVzLmNhbWVsfVt2YWx1ZUZpZWxkID8/IFwiaWRcIl0gYXMgbnVtYmVyKSxcbiAgICAgIGxhYmVsOiBTdHJpbmcoJHtuYW1lcy5jYW1lbH1bdGV4dEZpZWxkID8/IFwiJHt0ZXh0RmllbGQgfHwgXCJpZFwifVwiXSksXG4gICAgfSkpO1xuICB9LCBbJHtuYW1lcy5jYW1lbFBsdXJhbH0sIHRleHRGaWVsZCwgdmFsdWVGaWVsZF0pO1xuXG4gIC8vIGJhc2VMaXN0UGFyYW1zIOuzgOqyvSDsi5wg67CY7JiBXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TGlzdFBhcmFtcygocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICAuLi5iYXNlTGlzdFBhcmFtcyxcbiAgICB9KSk7XG4gIH0sIFtiYXNlTGlzdFBhcmFtc10pO1xuXG4gIC8vIOqygOyDieyWtCDrs4Dqsr0g7ZW465Ok65+sXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9IHVzZUNhbGxiYWNrKChrZXl3b3JkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRMaXN0UGFyYW1zKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIGtleXdvcmQ6IGtleXdvcmQgfHwgdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfSwgW10pO1xuXG4gIC8vIE11bHRpcGxlIHNlbGVjdFxuICBpZiAobXVsdGlwbGUpIHtcbiAgICBjb25zdCBtdWx0aVZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoU3RyaW5nKSA6IFtdO1xuXG4gICAgY29uc3QgaGFuZGxlTXVsdGlDaGFuZ2UgPSAoc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjb25zdCBudW1lcmljVmFsdWVzID0gc2VsZWN0ZWRWYWx1ZXMubWFwKE51bWJlcik7XG4gICAgICAob25WYWx1ZUNoYW5nZSBhcyAoKHZhbHVlOiBudW1iZXJbXSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpPy4obnVtZXJpY1ZhbHVlcyk7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8TXVsdGlTZWxlY3RcbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgb25WYWx1ZUNoYW5nZT17aGFuZGxlTXVsdGlDaGFuZ2V9XG4gICAgICAgIGRlZmF1bHRWYWx1ZT17bXVsdGlWYWx1ZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NOYW1lfVxuICAgICAgLz5cbiAgICApO1xuICB9XG5cbiAgLy8gU2luZ2xlIHNlbGVjdFxuICBjb25zdCBzaW5nbGVWYWx1ZSA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJudW1iZXJcIiA/IHZhbHVlIDogdW5kZWZpbmVkO1xuXG4gIGNvbnN0IGhhbmRsZVNpbmdsZUNoYW5nZSA9ICh2YWx1ZTogc3RyaW5nIHwgdW5kZWZpbmVkKSA9PiB7XG4gICAgY29uc3QgbnVtZXJpY1ZhbHVlID0gdmFsdWUgPyBOdW1iZXIodmFsdWUpIDogdW5kZWZpbmVkO1xuICAgIChvblZhbHVlQ2hhbmdlIGFzICgodmFsdWU6IG51bWJlciB8IHVuZGVmaW5lZCkgPT4gdm9pZCkgfCB1bmRlZmluZWQpPy4obnVtZXJpY1ZhbHVlKTtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxBc3luY1NlbGVjdFxuICAgICAgb3B0aW9ucz17b3B0aW9ucyBhcyBBc3luY1NlbGVjdE9wdGlvbjxzdHJpbmc+W119XG4gICAgICB2YWx1ZT17c2luZ2xlVmFsdWUgIT09IHVuZGVmaW5lZCA/IFN0cmluZyhzaW5nbGVWYWx1ZSkgOiB1bmRlZmluZWR9XG4gICAgICBvblZhbHVlQ2hhbmdlPXtoYW5kbGVTaW5nbGVDaGFuZ2V9XG4gICAgICBpc0xvYWRpbmc9e2lzTG9hZGluZ31cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIGNsZWFyYWJsZT17Y2xlYXJhYmxlfVxuICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICBvblNlYXJjaD17aGFuZGxlU2VhcmNofVxuICAgIC8+XG4gICk7XG59XG4gICAgICBgLnRyaW0oKSxcbiAgICAgIGltcG9ydEtleXM6IFtdLFxuICAgIH07XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJFbnRpdHlNYW5hZ2VyIiwiVGVtcGxhdGUiLCJUZW1wbGF0ZV9fdmlld19pZF9hc3luY19zZWxlY3QiLCJnZXRUYXJnZXRBbmRQYXRoIiwibmFtZXMiLCJ0YXJnZXQiLCJwYXRoIiwiZnMiLCJjYXBpdGFsIiwicmVuZGVyIiwiZW50aXR5SWQiLCJ0ZXh0RmllbGQiLCJnZXROYW1lc0Zyb21JZCIsImVudGl0eSIsImdldCIsInN1YnNldEtleXMiLCJPYmplY3QiLCJrZXlzIiwic3Vic2V0cyIsImxlbmd0aCIsImNvbW1vbkZpZWxkcyIsInJlZHVjZSIsImNvbW1vbiIsImtleSIsImZpZWxkcyIsImZpbHRlciIsImluY2x1ZGVzIiwibWFwIiwiZmllbGQiLCJwaWNrZWRQcm9wIiwicHJvcHMiLCJmaW5kIiwicHJvcCIsIm5hbWUiLCJjYW5kaWRhdGVQcm9wIiwidHlwZSIsImNvbnNvbGUiLCJsb2ciLCJib2R5IiwidGl0bGUiLCJjb25zdGFudCIsImNhcGl0YWxQbHVyYWwiLCJjYW1lbFBsdXJhbCIsImNhbWVsIiwidHJpbSIsImltcG9ydEtleXMiXSwibWFwcGluZ3MiOiJBQUFBLFNBQVNBLGFBQWEsUUFBZ0MsaUNBQThCO0FBRXBGLFNBQVNDLFFBQVEsUUFBUSxpQkFBYztBQUV2QyxPQUFPLE1BQU1DLHVDQUF1Q0Q7SUFDbEQsYUFBYztRQUNaLEtBQUssQ0FBQztJQUNSO0lBRUFFLGlCQUFpQkMsS0FBd0IsRUFBRTtRQUN6QyxPQUFPO1lBQ0xDLFFBQVE7WUFDUkMsTUFBTSxHQUFHRixNQUFNRyxFQUFFLENBQUMsQ0FBQyxFQUFFSCxNQUFNSSxPQUFPLENBQUMsaUJBQWlCLENBQUM7UUFDdkQ7SUFDRjtJQUVBQyxPQUFPLEVBQUVDLFFBQVEsRUFBRUMsU0FBUyxFQUEyQyxFQUFFO1FBQ3ZFLE1BQU1QLFFBQVFKLGNBQWNZLGNBQWMsQ0FBQ0Y7UUFFM0MsTUFBTUcsU0FBU2IsY0FBY2MsR0FBRyxDQUFDSjtRQUVqQyxpREFBaUQ7UUFDakQsSUFBSSxDQUFDQyxXQUFXO1lBQ2QsTUFBTUksYUFBYUMsT0FBT0MsSUFBSSxDQUFDSixPQUFPSyxPQUFPO1lBQzdDLElBQUlILFdBQVdJLE1BQU0sR0FBRyxHQUFHO2dCQUN6QixnQ0FB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
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90ZW1wbGF0ZS9pbXBsZW1lbnRhdGlvbnMvdmlld19pZF9hc3luY19zZWxlY3QudGVtcGxhdGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRW50aXR5TWFuYWdlciwgdHlwZSBFbnRpdHlOYW1lc1JlY29yZCB9IGZyb20gXCIuLi8uLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB0eXBlIHsgVGVtcGxhdGVPcHRpb25zIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3R5cGVzXCI7XG5pbXBvcnQgeyBUZW1wbGF0ZSB9IGZyb20gXCIuLi90ZW1wbGF0ZVwiO1xuXG5leHBvcnQgY2xhc3MgVGVtcGxhdGVfX3ZpZXdfaWRfYXN5bmNfc2VsZWN0IGV4dGVuZHMgVGVtcGxhdGUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihcInZpZXdfaWRfYXN5bmNfc2VsZWN0XCIpO1xuICB9XG5cbiAgZ2V0VGFyZ2V0QW5kUGF0aChuYW1lczogRW50aXR5TmFtZXNSZWNvcmQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdGFyZ2V0OiBcIndlYi9zcmMvY29tcG9uZW50c1wiLFxuICAgICAgcGF0aDogYCR7bmFtZXMuZnN9LyR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0LnRzeGAsXG4gICAgfTtcbiAgfVxuXG4gIHJlbmRlcih7IGVudGl0eUlkLCB0ZXh0RmllbGQgfTogVGVtcGxhdGVPcHRpb25zW1widmlld19pZF9hc3luY19zZWxlY3RcIl0pIHtcbiAgICBjb25zdCBuYW1lcyA9IEVudGl0eU1hbmFnZXIuZ2V0TmFtZXNGcm9tSWQoZW50aXR5SWQpO1xuXG4gICAgY29uc3QgZW50aXR5ID0gRW50aXR5TWFuYWdlci5nZXQoZW50aXR5SWQpO1xuXG4gICAgLy8gdGV4dEZpZWxk6rCAIOyngOygleuQmOyngCDslYrsnYAg6rK97JqwIOuqqOuToCBzdWJzZXTsl5Ag6rO17Ya17Jy866GcIOyeiOuKlCDtlYTrk5wg7LC+6riwXG4gICAgaWYgKCF0ZXh0RmllbGQpIHtcbiAgICAgIGNvbnN0IHN1YnNldEtleXMgPSBPYmplY3Qua2V5cyhlbnRpdHkuc3Vic2V0cyk7XG4gICAgICBpZiAoc3Vic2V0S2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIOuqqOuToCBzdWJzZXTsl5Ag6rO17Ya17Jy866GcIO2PrO2VqOuQnCDsp4HsoJEg7ZWE65Oc66eMIOy2lOy2nFxuICAgICAgICBjb25zdCBjb21tb25GaWVsZHMgPSBzdWJzZXRLZXlzLnJlZHVjZShcbiAgICAgICAgICAoY29tbW9uLCBrZXkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGZpZWxkcyA9IGVudGl0eS5zdWJzZXRzW2tleV1cbiAgICAgICAgICAgICAgLmZpbHRlcigocGF0aCkgPT4gIXBhdGguaW5jbHVkZXMoXCIuXCIpKSAvLyDsp4HsoJEg7ZWE65Oc66eMXG4gICAgICAgICAgICAgIC5tYXAoKHBhdGgpID0+IHBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuIGNvbW1vbi5maWx0ZXIoKGZpZWxkKSA9PiBmaWVsZHMuaW5jbHVkZXMoZmllbGQpKTtcbiAgICAgICAgICB9LFxuICAgICAgICAgIGVudGl0eS5zdWJzZXRzW3N1YnNldEtleXNbMF1dLmZpbHRlcigocGF0aCkgPT4gIXBhdGguaW5jbHVkZXMoXCIuXCIpKSxcbiAgICAgICAgKTtcblxuICAgICAgICAvLyDsmrDshKDsiJzsnIQ6IG5hbWUgPiB0aXRsZSA+IOyyqyDrsojsp7ggc3RyaW5nIO2DgOyehVxuICAgICAgICBjb25zdCBwaWNrZWRQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgKHByb3ApID0+IFtcIm5hbWVcIiwgXCJ0aXRsZVwiXS5pbmNsdWRlcyhwcm9wLm5hbWUpICYmIGNvbW1vbkZpZWxkcy5pbmNsdWRlcyhwcm9wLm5hbWUpLFxuICAgICAgICApO1xuICAgICAgICBpZiAocGlja2VkUHJvcCkge1xuICAgICAgICAgIHRleHRGaWVsZCA9IHBpY2tlZFByb3AubmFtZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb25zdCBjYW5kaWRhdGVQcm9wID0gZW50aXR5LnByb3BzLmZpbmQoXG4gICAgICAgICAgICAocHJvcCkgPT4gcHJvcC50eXBlID09PSBcInN0cmluZ1wiICYmIGNvbW1vbkZpZWxkcy5pbmNsdWRlcyhwcm9wLm5hbWUpLFxuICAgICAgICAgICk7XG4gICAgICAgICAgaWYgKGNhbmRpZGF0ZVByb3ApIHtcbiAgICAgICAgICAgIHRleHRGaWVsZCA9IGNhbmRpZGF0ZVByb3AubmFtZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g6rO17Ya1IO2VhOuTnOqwgCDsl4bsnLzrqbQgaWQg7IKs7JqpXG4gICAgICAgICAgICB0ZXh0RmllbGQgPSBcImlkXCI7XG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgICAgYFdhcm5pbmc6ICR7ZW50aXR5SWR97JeQIOuqqOuToCBzdWJzZXTsl5Ag6rO17Ya17Jy866GcIO2PrO2VqOuQnCBzdHJpbmcg7ZWE65Oc6rCAIOyXhuyWtCBpZOulvCDsgqzsmqntlanri4jri6RgLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4udGhpcy5nZXRUYXJnZXRBbmRQYXRoKG5hbWVzKSxcbiAgICAgIGJvZHk6IGBcbmltcG9ydCB7XG4gIEFzeW5jU2VsZWN0LFxuICB0eXBlIEFzeW5jU2VsZWN0T3B0aW9uLFxuICBNdWx0aVNlbGVjdCxcbn0gZnJvbSBcIkBzb25hbXUta2l0L3JlYWN0LWNvbXBvbmVudHMvY29tcG9uZW50c1wiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlTWVtbywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlIH0gZnJvbSBcIkAvc2VydmljZXMvc2VydmljZXMuZ2VuZXJhdGVkXCI7XG5pbXBvcnQgdHlwZSB7ICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXksICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nIH0gZnJvbSBcIkAvc2VydmljZXMvc29uYW11LmdlbmVyYXRlZFwiO1xuaW1wb3J0IHR5cGUgeyAke25hbWVzLmNhcGl0YWx9TGlzdFBhcmFtcyB9IGZyb20gXCJAL3NlcnZpY2VzLyR7bmFtZXMuZnN9LyR7bmFtZXMuZnN9LnR5cGVzXCI7XG5cbmV4cG9ydCB0eXBlICR7bmFtZXMuY2FwaXRhbH1JZEFzeW5jU2VsZWN0UHJvcHM8VCBleHRlbmRzICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXk+ID0ge1xuICBzdWJzZXQ6IFQ7XG4gIGJhc2VMaXN0UGFyYW1zPzogJHtuYW1lcy5jYXBpdGFsfUxpc3RQYXJhbXM7XG4gIHRleHRGaWVsZD86IGtleW9mICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRNYXBwaW5nW1RdO1xuICB2YWx1ZUZpZWxkPzoga2V5b2YgJHtuYW1lcy5jYXBpdGFsfVN1YnNldE1hcHBpbmdbVF07XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICBjbGVhcmFibGU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xufSAmIChcbiAgfCB7XG4gICAgICBtdWx0aXBsZT86IGZhbHNlO1xuICAgICAgdmFsdWU/OiBudW1iZXIgfCBudWxsO1xuICAgICAgb25WYWx1ZUNoYW5nZT86ICh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkO1xuICAgIH1cbiAgfCB7XG4gICAgICBtdWx0aXBsZTogdHJ1ZTtcbiAgICAgIHZhbHVlPzogbnVtYmVyW107XG4gICAgICBvblZhbHVlQ2hhbmdlPzogKHZhbHVlOiBudW1iZXJbXSkgPT4gdm9pZDtcbiAgICB9XG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gJHtuYW1lcy5jYXBpdGFsfUlkQXN5bmNTZWxlY3Q8VCBleHRlbmRzICR7bmFtZXMuY2FwaXRhbH1TdWJzZXRLZXk+KHtcbiAgc3Vic2V0LFxuICB2YWx1ZSxcbiAgb25WYWx1ZUNoYW5nZSxcbiAgYmFzZUxpc3RQYXJhbXMsXG4gIHRleHRGaWVsZCxcbiAgdmFsdWVGaWVsZCxcbiAgcGxhY2Vob2xkZXIgPSBcIiR7ZW50aXR5LnRpdGxlID8/IG5hbWVzLmNvbnN0YW50fVwiLFxuICBjbGVhcmFibGUsXG4gIGRpc2FibGVkLFxuICBjbGFzc05hbWUsXG4gIG11bHRpcGxlID0gZmFsc2UsXG59OiAke25hbWVzLmNhcGl0YWx9SWRBc3luY1NlbGVjdFByb3BzPFQ+KSB7XG4gIGNvbnN0IFtsaXN0UGFyYW1zLCBzZXRMaXN0UGFyYW1zXSA9IHVzZVN0YXRlPCR7bmFtZXMuY2FwaXRhbH1MaXN0UGFyYW1zPihiYXNlTGlzdFBhcmFtcyA/PyB7fSk7XG5cbiAgY29uc3QgeyBkYXRhLCBpc0xvYWRpbmcgfSA9ICR7bmFtZXMuY2FwaXRhbH1TZXJ2aWNlLnVzZSR7bmFtZXMuY2FwaXRhbFBsdXJhbH0oc3Vic2V0LCBsaXN0UGFyYW1zKTtcbiAgY29uc3QgeyByb3dzOiAke25hbWVzLmNhbWVsUGx1cmFsfSB9ID0gZGF0YSA/PyB7fTtcblxuICAvLyDsmLXshZgg7IOd7ISxXG4gIGNvbnN0IG9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gKCR7bmFtZXMuY2FtZWxQbHVyYWx9ID8/IFtdKS5tYXAoKCR7bmFtZXMuY2FtZWx9KSA9PiAoe1xuICAgICAgdmFsdWU6IFN0cmluZygke25hbWVzLmNhbWVsfVt2YWx1ZUZpZWxkID8/IFwiaWRcIl0gYXMgbnVtYmVyKSxcbiAgICAgIGxhYmVsOiBTdHJpbmcoJHtuYW1lcy5jYW1lbH1bdGV4dEZpZWxkID8/IFwiJHt0ZXh0RmllbGQgfHwgXCJpZFwifVwiXSksXG4gICAgfSkpO1xuICB9LCBbJHtuYW1lcy5jYW1lbFBsdXJhbH0sIHRleHRGaWVsZCwgdmFsdWVGaWVsZF0pO1xuXG4gIC8vIGJhc2VMaXN0UGFyYW1zIOuzgOqyvSDsi5wg67CY7JiBXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TGlzdFBhcmFtcygocHJldikgPT4gKHtcbiAgICAgIC4uLnByZXYsXG4gICAgICAuLi5iYXNlTGlzdFBhcmFtcyxcbiAgICB9KSk7XG4gIH0sIFtiYXNlTGlzdFBhcmFtc10pO1xuXG4gIC8vIOqygOyDieyWtCDrs4Dqsr0g7ZW465Ok65+sXG4gIGNvbnN0IGhhbmRsZVNlYXJjaCA9IHVzZUNhbGxiYWNrKChrZXl3b3JkOiBzdHJpbmcpID0+IHtcbiAgICBzZXRMaXN0UGFyYW1zKChwcmV2KSA9PiAoe1xuICAgICAgLi4ucHJldixcbiAgICAgIGtleXdvcmQ6IGtleXdvcmQgfHwgdW5kZWZpbmVkLFxuICAgIH0pKTtcbiAgfSwgW10pO1xuXG4gIC8vIE11bHRpcGxlIHNlbGVjdFxuICBpZiAobXVsdGlwbGUpIHtcbiAgICBjb25zdCBtdWx0aVZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoU3RyaW5nKSA6IFtdO1xuXG4gICAgY29uc3QgaGFuZGxlTXVsdGlDaGFuZ2UgPSAoc2VsZWN0ZWRWYWx1ZXM6IHN0cmluZ1tdKSA9PiB7XG4gICAgICBjb25zdCBudW1lcmljVmFsdWVzID0gc2VsZWN0ZWRWYWx1ZXMubWFwKE51bWJlcik7XG4gICAgICAob25WYWx1ZUNoYW5nZSBhcyAoKHZhbHVlOiBudW1iZXJbXSkgPT4gdm9pZCkgfCB1bmRlZmluZWQpPy4obnVtZXJpY1ZhbHVlcyk7XG4gICAgfTtcblxuICAgIHJldHVybiAoXG4gICAgICA8TXVsdGlTZWxlY3RcbiAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgdmFsdWU9e211bHRpVmFsdWV9XG4gICAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZU11bHRpQ2hhbmdlfVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc05hbWV9XG4gICAgICAvPlxuICAgICk7XG4gIH1cblxuICAvLyBTaW5nbGUgc2VsZWN0XG4gIGNvbnN0IHNpbmdsZVZhbHVlID0gdHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiID8gdmFsdWUgOiB1bmRlZmluZWQ7XG5cbiAgY29uc3QgaGFuZGxlU2luZ2xlQ2hhbmdlID0gKHZhbHVlOiBzdHJpbmcgfCB1bmRlZmluZWQpID0+IHtcbiAgICBjb25zdCBudW1lcmljVmFsdWUgPSB2YWx1ZSA/IE51bWJlcih2YWx1ZSkgOiB1bmRlZmluZWQ7XG4gICAgKG9uVmFsdWVDaGFuZ2UgYXMgKCh2YWx1ZTogbnVtYmVyIHwgdW5kZWZpbmVkKSA9PiB2b2lkKSB8IHVuZGVmaW5lZCk/LihudW1lcmljVmFsdWUpO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPEFzeW5jU2VsZWN0XG4gICAgICBvcHRpb25zPXtvcHRpb25zIGFzIEFzeW5jU2VsZWN0T3B0aW9uPHN0cmluZz5bXX1cbiAgICAgIHZhbHVlPXtzaW5nbGVWYWx1ZSAhPT0gdW5kZWZpbmVkID8gU3RyaW5nKHNpbmdsZVZhbHVlKSA6IHVuZGVmaW5lZH1cbiAgICAgIG9uVmFsdWVDaGFuZ2U9e2hhbmRsZVNpbmdsZUNoYW5nZX1cbiAgICAgIGlzTG9hZGluZz17aXNMb2FkaW5nfVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgY2xlYXJhYmxlPXtjbGVhcmFibGV9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzTmFtZX1cbiAgICAgIG9uU2VhcmNoPXtoYW5kbGVTZWFyY2h9XG4gICAgLz5cbiAgKTtcbn1cbiAgICAgIGAudHJpbSgpLFxuICAgICAgaW1wb3J0S2V5czogW10sXG4gICAgfTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbIkVudGl0eU1hbmFnZXIiLCJUZW1wbGF0ZSIsIlRlbXBsYXRlX192aWV3X2lkX2FzeW5jX3NlbGVjdCIsImdldFRhcmdldEFuZFBhdGgiLCJuYW1lcyIsInRhcmdldCIsInBhdGgiLCJmcyIsImNhcGl0YWwiLCJyZW5kZXIiLCJlbnRpdHlJZCIsInRleHRGaWVsZCIsImdldE5hbWVzRnJvbUlkIiwiZW50aXR5IiwiZ2V0Iiwic3Vic2V0S2V5cyIsIk9iamVjdCIsImtleXMiLCJzdWJzZXRzIiwibGVuZ3RoIiwiY29tbW9uRmllbGRzIiwicmVkdWNlIiwiY29tbW9uIiwia2V5IiwiZmllbGRzIiwiZmlsdGVyIiwiaW5jbHVkZXMiLCJtYXAiLCJmaWVsZCIsInBpY2tlZFByb3AiLCJwcm9wcyIsImZpbmQiLCJwcm9wIiwibmFtZSIsImNhbmRpZGF0ZVByb3AiLCJ0eXBlIiwiY29uc29sZSIsImxvZyIsImJvZHkiLCJ0aXRsZSIsImNvbnN0YW50IiwiY2FwaXRhbFBsdXJhbCIsImNhbWVsUGx1cmFsIiwiY2FtZWwiLCJ0cmltIiwiaW1wb3J0S2V5cyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBU0EsYUFBYSxRQUFnQyxpQ0FBOEI7QUFFcEYsU0FBU0MsUUFBUSxRQUFRLGlCQUFjO0FBRXZDLE9BQU8sTUFBTUMsdUNBQXVDRDtJQUNsRCxhQUFjO1FBQ1osS0FBSyxDQUFDO0lBQ1I7SUFFQUUsaUJBQWlCQyxLQUF3QixFQUFFO1FBQ3pDLE9BQU87WUFDTEMsUUFBUTtZQUNSQyxNQUFNLEdBQUdGLE1BQU1HLEVBQUUsQ0FBQyxDQUFDLEVBQUVILE1BQU1JLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQztRQUN2RDtJQUNGO0lBRUFDLE9BQU8sRUFBRUMsUUFBUSxFQUFFQyxTQUFTLEVBQTJDLEVBQUU7UUFDdkUsTUFBTVAsUUFBUUosY0FBY1ksY0FBYyxDQUFDRjtRQUUzQyxNQUFNRyxTQUFTYixjQUFjYyxHQUFHLENBQUNKO1FBRWpDLGlEQUFpRDtRQUNqRCxJQUFJLENBQUNDLFdBQVc7WUFDZCxNQUFNSSxhQUFhQyxPQUFPQyxJQUFJLENBQUNKLE9BQU9LLE9BQU87WUFDN0MsSUFBSUgsV0FBV0ksTUFBTSxHQUFHLEdBQUc7Z0JBQ3pCLGdDQUFnQztnQkFD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
@@ -527,7 +527,9 @@ export function zodTypeToTsTypeDef(zt) {
527
527
  */ function resolveRenderType(key, zodType) {
528
528
  if (zodType instanceof z.ZodDate) {
529
529
  return "datetime";
530
- } else if (zodType instanceof z.ZodString) {
530
+ } else if (zodType instanceof z.core.$ZodString) {
531
+ // NOTE: z.ZodString으로 비교하면 z.url(), z.email() 등의 타입에서 문제가 생기므로 z.core.$ZodString으로 비교함
532
+ // FIXME: email이나 url 타입 등에 대한 처리가 필요함
531
533
  if (zodType.description === "SQLDateTimeString") {
532
534
  return "string-datetime";
533
535
  } else if (key.endsWith("date")) {
@@ -562,4 +564,4 @@ export function zodTypeToTsTypeDef(zt) {
562
564
  }
563
565
  }
564
566
 
565
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogem9kLWNvbnZlcnRlciDqtazshLFcbiAqIDEuIOycoO2LuOumrO2LsFxuICogIC0gZ2V0Wm9kVHlwZUJ5SWRcbiAqXG4gKiAyLiBab2Qg7YOA7J6FIOuzgO2ZmCAoRW50aXR5UHJvcCAtPiBab2RUeXBlKVxuICogIC0gcHJvcFRvWm9kVHlwZVxuICpcbiAqIDMuIEVudGl0eVByb3AvTm9kZSAtPiBab2Qg7L2U65OcIOusuOyekOyXtFxuICogIC0gcHJvcFRvWm9kVHlwZURlZlxuICogIC0gcHJvcE5vZGVUb1pvZFR5cGVEZWZcbiAqXG4gKiA0LiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYIChab2RUeXBlIC0+IFpvZENvZGUpXG4gKiAgLSB6b2RUeXBlVG9ab2RDb2RlXG4gKlxuICogNS4gWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZggKFpvZFR5cGUgLT4gUmVuZGVyaW5nTm9kZSlcbiAqICAtIHpvZFR5cGVUb1JlbmRlcmluZ05vZGVcbiAqICAtIHJlc29sdmVSZW5kZXJUeXBlXG4gKi9cblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyAkWm9kTG9vc2VTaGFwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0Jvb2xlYW5BcnJheVByb3AsXG4gIGlzQm9vbGVhblNpbmdsZVByb3AsXG4gIGlzRGF0ZUFycmF5UHJvcCxcbiAgaXNEYXRlU2luZ2xlUHJvcCxcbiAgaXNFbnVtQXJyYXlQcm9wLFxuICBpc0VudW1TaW5nbGVQcm9wLFxuICBpc0ludGVnZXJBcnJheVByb3AsXG4gIGlzSW50ZWdlclNpbmdsZVByb3AsXG4gIGlzSnNvblByb3AsXG4gIGlzTnVtYmVyQXJyYXlQcm9wLFxuICBpc051bWJlclNpbmdsZVByb3AsXG4gIGlzTnVtZXJpY0FycmF5UHJvcCxcbiAgaXNOdW1lcmljU2luZ2xlUHJvcCxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG4gIGlzU3RyaW5nQXJyYXlQcm9wLFxuICBpc1N0cmluZ1NpbmdsZVByb3AsXG4gIGlzVHNWZWN0b3JQcm9wLFxuICBpc1V1aWRBcnJheVByb3AsXG4gIGlzVXVpZFNpbmdsZVByb3AsXG4gIGlzVmVjdG9yQXJyYXlQcm9wLFxuICBpc1ZlY3RvclNpbmdsZVByb3AsXG4gIGlzVmlydHVhbFByb3AsXG4gIHR5cGUgUmVuZGVyaW5nTm9kZSxcbiAgU29uYW11RmlsZUFycmF5U2NoZW1hLFxuICBTb25hbXVGaWxlU2NoZW1hLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDwkWm9kTG9vc2VTaGFwZT47XG50eXBlIEFueVpvZE51bGxhYmxlID0gei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2REZWZhdWx0ID0gei5ab2REZWZhdWx0PHouWm9kVHlwZT47XG50eXBlIEFueVpvZFVuaW9uID0gei5ab2RVbmlvbjx6LlpvZFR5cGVbXT47XG50eXBlIEFueVpvZEFycmF5ID0gei5ab2RBcnJheTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPcHRpb25hbCA9IHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVGVtcGxhdGVMaXRlcmFsID0gei5ab2RUZW1wbGF0ZUxpdGVyYWw8c3RyaW5nPjtcblxuLyoqXG4gKiDrgrTsnqUg7YOA7J6FIOygleydmCAoWm9kIOyKpO2CpOuniCArIFVJIOugjOuNlOungSDtg4DsnoUpXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9UWVBFUyA9IHtcbiAgU29uYW11RmlsZToge1xuICAgIHNjaGVtYTogU29uYW11RmlsZVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZVNjaGVtYVwiLFxuICB9LFxuICBcIlNvbmFtdUZpbGVbXVwiOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVBcnJheVNjaGVtYVwiLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIOuCtOyepSDtg4DsnoUoQlVJTFRfSU5fVFlQRV9JRFMp7J2AIOuwlOuhnCDrsJjtmZjtlZjqs6AsXG4gKiDqt7gg7Jm464qUIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICAvLyDrgrTsnqUg7YOA7J6FIOyymOumrFxuICBpZiAoKEJVSUxUX0lOX1RZUEVfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh6b2RUeXBlSWQpKSB7XG4gICAgY29uc3QgYnVpbHRJblR5cGUgPSBCVUlMVF9JTl9UWVBFU1t6b2RUeXBlSWQgYXMga2V5b2YgdHlwZW9mIEJVSUxUX0lOX1RZUEVTXTtcbiAgICBpZiAoIWJ1aWx0SW5UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOuCtOyepSDtg4DsnoUgJHt6b2RUeXBlSWR97J2YIOyKpO2CpOuniOqwgCDsoJXsnZjrkJjsp4Ag7JWK7JWY7Iq164uI64ukYCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsdEluVHlwZS5zY2hlbWEuZGVzY3JpYmUoem9kVHlwZUlkKTtcbiAgfVxuXG4gIC8vIO2UhOuhnOygne2KuOyXkOyEnCDsoJXsnZjtlZwg7YOA7J6FIOuPmeyggSDroZzrk5xcbiAgY29uc3QgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aCh6b2RUeXBlSWQpO1xuICBjb25zdCBtb2R1bGVBYnNQYXRoID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChgZGlzdC9hcHBsaWNhdGlvbi8ke21vZHVsZVBhdGh9LmpzYCksXG4gICk7XG4gIGNvbnN0IGltcG9ydFVybCA9IGNyZWF0ZUltcG9ydFVybChtb2R1bGVBYnNQYXRoKTtcbiAgY29uc3QgaW1wb3J0ZWQgPSBhd2FpdCBpbXBvcnQoaW1wb3J0VXJsKTtcblxuICBpZiAoIWltcG9ydGVkW3pvZFR5cGVJZF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgem9kVHlwZUlkICR7em9kVHlwZUlkfWApO1xuICB9XG4gIHJldHVybiBpbXBvcnRlZFt6b2RUeXBlSWRdLmRlc2NyaWJlKHpvZFR5cGVJZCk7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSBwcm9w7J2YIO2DgOyeheyXkCDrlLDrnbwg7KCB7KCI7ZWcIFpvZCB2YWxpZGF0b3Lrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvcFRvWm9kVHlwZShwcm9wOiBFbnRpdHlQcm9wKTogUHJvbWlzZTx6LlpvZFR5cGVBbnk+IHtcbiAgbGV0IHpvZFR5cGU6IHouWm9kVHlwZUFueSA9IHoudW5rbm93bigpO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICB9IGVsc2UgaWYgKGlzSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNFbnVtU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc0VudW1BcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gKGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCkubWF4KHByb3AubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpLmFycmF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLmFycmF5KCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJvb2xlYW4oKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzRGF0ZVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouZGF0ZSgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNVdWlkU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei51dWlkKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0pzb25Qcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICB6b2RUeXBlID0gei5udW1iZXIoKS5pbnQoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwcm9w7J2EIHpvZFR5cGXsnLzroZwg67OA7ZmY7ZWY64qU642wIOyLpO2MqCAke3Byb3B9fWApO1xuICB9XG5cbiAgaWYgKChwcm9wIGFzIHsgdW5zaWduZWQ/OiBib29sZWFuIH0pLnVuc2lnbmVkKSB7XG4gICAgem9kVHlwZSA9ICh6b2RUeXBlIGFzIHouWm9kTnVtYmVyKS5ub25uZWdhdGl2ZSgpO1xuICB9XG4gIGlmIChwcm9wLm51bGxhYmxlKSB7XG4gICAgem9kVHlwZSA9IHpvZFR5cGUubnVsbGFibGUoKTtcbiAgfVxuXG4gIHJldHVybiB6b2RUeXBlO1xufVxuXG4vKipcbiAqIEVudGl0eVByb3DsnYQgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlRGVmKHByb3A6IEVudGl0eVByb3AsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgbGV0IHN0bXQ6IHN0cmluZztcbiAgaWYgKGlzSW50ZWdlclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKWA7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouaW50KCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5iaWdpbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc0VudW1BcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfS5hcnJheSgpYDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5tYXgoJHtwcm9wLmxlbmd0aH0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKChCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocHJvcC5pZCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9wLmlkID09PSBcIlNvbmFtdUZpbGVcIiA/IFwiU29uYW11RmlsZVNjaGVtYVwiIDogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIjtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3NjaGVtYU5hbWV9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChzY2hlbWFOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgIGNhc2UgXCJhbnlcIjpcbiAgICBjYXNlIFwidW5rbm93blwiOlxuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIHp0LmRlZi50eXBlO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbktleXMubWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGUuc2hhcGVba2V5XTtcbiAgICAgIHJldHVybiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZEFycmF5PHouWm9kVHlwZUFueT4pLmRlZi5lbGVtZW50O1xuICAgIC8vIHZlY3RvciDtg4DsnoUg7YyQ67OEOiBudW1iZXIg67Cw7Je07J2066m07IScIGVtYmVkZGluZywgdmVjdG9yIOuTseydmCDsnbTrpoTsnYQg6rCA7KeEIOqyveyasFxuICAgIGlmIChcbiAgICAgIGlubmVyVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyICYmXG4gICAgICAoYmFzZUtleS5pbmNsdWRlcyhcImVtYmVkZGluZ1wiKSB8fCBiYXNlS2V5LmluY2x1ZGVzKFwidmVjdG9yXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcInZlY3RvclwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGVsZW1lbnQ6IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uTm9kZXMgPSAoem9kVHlwZSBhcyB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPikuZGVmLm9wdGlvbnMubWFwKChvcHQpID0+XG4gICAgICB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSksXG4gICAgKTtcbiAgICAvLyBUT0RPOiBab2RVbmlvbuydtCDrk6TslrTsnojripQg6rK97JqwIO2VuOuTpOungVxuICAgIHJldHVybiBvcHRpb25Ob2Rlc1swXTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IHJlc29sdmVSZW5kZXJUeXBlKGJhc2VLZXksIHpvZFR5cGUpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F6rO8IO2CpCDsnbTrpoTsnLzroZzrtoDthLAg7KCB7KCI7ZWcIFJlbmRlclR5cGXsnYQg6rKw7KCV7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVuZGVyVHlwZShrZXk6IHN0cmluZywgem9kVHlwZTogei5ab2RUeXBlQW55KTogUmVuZGVyaW5nTm9kZVtcInJlbmRlclR5cGVcIl0ge1xuICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgIHJldHVybiBcImRhdGV0aW1lXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kU3RyaW5nKSB7XG4gICAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICByZXR1cm4gXCJlbnVtc1wiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFJlY29yZCkge1xuICAgIHJldHVybiBcInJlY29yZFwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFueSB8fCB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVGVtcGxhdGVMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInBhdGgiLCJ6IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIkJVSUxUX0lOX1RZUEVfSURTIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0JpZ0ludGVnZXJBcnJheVByb3AiLCJpc0JpZ0ludGVnZXJTaW5nbGVQcm9wIiwiaXNCb29sZWFuQXJyYXlQcm9wIiwiaXNCb29sZWFuU2luZ2xlUHJvcCIsImlzRGF0ZUFycmF5UHJvcCIsImlzRGF0ZVNpbmdsZVByb3AiLCJpc0VudW1BcnJheVByb3AiLCJpc0VudW1TaW5nbGVQcm9wIiwiaXNJbnRlZ2VyQXJyYXlQcm9wIiwiaXNJbnRlZ2VyU2luZ2xlUHJvcCIsImlzSnNvblByb3AiLCJpc051bWJlckFycmF5UHJvcCIsImlzTnVtYmVyU2luZ2xlUHJvcCIsImlzTnVtZXJpY0FycmF5UHJvcCIsImlzTnVtZXJpY1NpbmdsZVByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc1N0cmluZ0FycmF5UHJvcCIsImlzU3RyaW5nU2luZ2xlUHJvcCIsImlzVHNWZWN0b3JQcm9wIiwiaXNVdWlkQXJyYXlQcm9wIiwiaXNVdWlkU2luZ2xlUHJvcCIsImlzVmVjdG9yQXJyYXlQcm9wIiwiaXNWZWN0b3JTaW5nbGVQcm9wIiwiaXNWaXJ0dWFsUHJvcCIsIlNvbmFtdUZpbGVBcnJheVNjaGVtYSIsIlNvbmFtdUZpbGVTY2hlbWEiLCJjcmVhdGVJbXBvcnRVcmwiLCJydW50aW1lUGF0aCIsIkJVSUxUX0lOX1RZUEVTIiwiU29uYW11RmlsZSIsInNjaGVtYSIsInJlbmRlclR5cGUiLCJzY2hlbWFOYW1lIiwiZ2V0Wm9kVHlwZUJ5SWQiLCJ6b2RUeXBlSWQiLCJpbmNsdWRlcyIsImJ1aWx0SW5UeXBlIiwiRXJyb3IiLCJkZXNjcmliZSIsIm1vZHVsZVBhdGgiLCJnZXRNb2R1bGVQYXRoIiwibW9kdWxlQWJzUGF0aCIsImpvaW4iLCJhcGlSb290UGF0aCIsImltcG9ydFVybCIsImltcG9ydGVkIiwicHJvcFRvWm9kVHlwZSIsInByb3AiLCJ6b2RUeXBlIiwidW5rbm93biIsIm51bWJlciIsImludCIsImFycmF5IiwiYmlnaW50IiwiaWQiLCJsZW5ndGgiLCJzdHJpbmciLCJtYXgiLCJib29sZWFuIiwiZGF0ZSIsInV1aWQiLCJoYXNKb2luQ29sdW1uIiwidW5zaWduZWQiLCJub25uZWdhdGl2ZSIsIm51bGxhYmxlIiwicHJvcFRvWm9kVHlwZURlZiIsImluamVjdEltcG9ydEtleXMiLCJzdG10IiwibmFtZSIsInB1c2giLCJyZWxhdGlvblR5cGUiLCJ3aXRoIiwicHJvcE5vZGVUb1pvZFR5cGVEZWYiLCJwcm9wTm9kZSIsIm5vZGVUeXBlIiwiY2hpbGRyZW4iLCJtYXAiLCJjaGlsZFByb3BOb2RlIiwiem9kVHlwZVRvVHNUeXBlRGVmIiwienQiLCJkZWYiLCJ0eXBlIiwiaW5uZXJUeXBlIiwicmVjb3JkVHlwZSIsImtleVR5cGUiLCJ2YWx1ZVR5cGUiLCJBcnJheSIsImZyb20iLCJ2YWx1ZXMiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIm9wdGlvbnMiLCJvcHRpb24iLCJ2YWwiLCJlbGVtZW50Iiwic2hhcGUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwicGFydHMiLCJwYXJ0IiwiX3pvZCIsInpvZFR5cGVUb1pvZENvZGUiLCJ6RGVmYXVsdERlZiIsImRlZmF1bHRWYWx1ZSIsInpSZWNvcmREZWYiLCJpdGVtcyIsImVudHJpZXMiLCJ6SW50ZXJzZWN0aW9uRGVmIiwibGVmdCIsInJpZ2h0Iiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsImJhc2VLZXkiLCJsYWJlbCIsImNhbWVsaXplIiwiZGVzY3JpcHRpb24iLCJab2RPYmplY3QiLCJjb2x1bW5LZXlzIiwiWm9kQXJyYXkiLCJab2ROdW1iZXIiLCJab2RVbmlvbiIsIm9wdGlvbk5vZGVzIiwib3B0IiwiWm9kT3B0aW9uYWwiLCJvcHRpb25hbCIsIlpvZE51bGxhYmxlIiwicmVzb2x2ZVJlbmRlclR5cGUiLCJab2REYXRlIiwiWm9kU3RyaW5nIiwiZW5kc1dpdGgiLCJab2RCb29sZWFuIiwiWm9kRW51bSIsIlpvZFJlY29yZCIsIlpvZEFueSIsIlpvZFVua25vd24iLCJab2RMaXRlcmFsIiwiWm9kVGVt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
567
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90ZW1wbGF0ZS96b2QtY29udmVydGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogem9kLWNvbnZlcnRlciDqtazshLFcbiAqIDEuIOycoO2LuOumrO2LsFxuICogIC0gZ2V0Wm9kVHlwZUJ5SWRcbiAqXG4gKiAyLiBab2Qg7YOA7J6FIOuzgO2ZmCAoRW50aXR5UHJvcCAtPiBab2RUeXBlKVxuICogIC0gcHJvcFRvWm9kVHlwZVxuICpcbiAqIDMuIEVudGl0eVByb3AvTm9kZSAtPiBab2Qg7L2U65OcIOusuOyekOyXtFxuICogIC0gcHJvcFRvWm9kVHlwZURlZlxuICogIC0gcHJvcE5vZGVUb1pvZFR5cGVEZWZcbiAqXG4gKiA0LiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYIChab2RUeXBlIC0+IFpvZENvZGUpXG4gKiAgLSB6b2RUeXBlVG9ab2RDb2RlXG4gKlxuICogNS4gWm9kIO2DgOyeheydhCBVSSDroIzrjZTrp4Hsl5Ag7IKs7Jqp7ZWgIOyImCDsnojripQgUmVuZGVyaW5nTm9kZeuhnCDrs4DtmZggKFpvZFR5cGUgLT4gUmVuZGVyaW5nTm9kZSlcbiAqICAtIHpvZFR5cGVUb1JlbmRlcmluZ05vZGVcbiAqICAtIHJlc29sdmVSZW5kZXJUeXBlXG4gKi9cblxuaW1wb3J0IGluZmxlY3Rpb24gZnJvbSBcImluZmxlY3Rpb25cIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyB6IH0gZnJvbSBcInpvZFwiO1xuaW1wb3J0IHR5cGUgeyAkWm9kTG9vc2VTaGFwZSB9IGZyb20gXCJ6b2QvdjQvY29yZVwiO1xuaW1wb3J0IHsgU29uYW11IH0gZnJvbSBcIi4uL2FwaS9zb25hbXVcIjtcbmltcG9ydCB7IEVudGl0eU1hbmFnZXIgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eS1tYW5hZ2VyXCI7XG5pbXBvcnQge1xuICBCVUlMVF9JTl9UWVBFX0lEUyxcbiAgdHlwZSBFbnRpdHlQcm9wLFxuICB0eXBlIEVudGl0eVByb3BOb2RlLFxuICBpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNCaWdJbnRlZ2VyQXJyYXlQcm9wLFxuICBpc0JpZ0ludGVnZXJTaW5nbGVQcm9wLFxuICBpc0Jvb2xlYW5BcnJheVByb3AsXG4gIGlzQm9vbGVhblNpbmdsZVByb3AsXG4gIGlzRGF0ZUFycmF5UHJvcCxcbiAgaXNEYXRlU2luZ2xlUHJvcCxcbiAgaXNFbnVtQXJyYXlQcm9wLFxuICBpc0VudW1TaW5nbGVQcm9wLFxuICBpc0ludGVnZXJBcnJheVByb3AsXG4gIGlzSW50ZWdlclNpbmdsZVByb3AsXG4gIGlzSnNvblByb3AsXG4gIGlzTnVtYmVyQXJyYXlQcm9wLFxuICBpc051bWJlclNpbmdsZVByb3AsXG4gIGlzTnVtZXJpY0FycmF5UHJvcCxcbiAgaXNOdW1lcmljU2luZ2xlUHJvcCxcbiAgaXNPbmVUb09uZVJlbGF0aW9uUHJvcCxcbiAgaXNSZWxhdGlvblByb3AsXG4gIGlzU3RyaW5nQXJyYXlQcm9wLFxuICBpc1N0cmluZ1NpbmdsZVByb3AsXG4gIGlzVHNWZWN0b3JQcm9wLFxuICBpc1V1aWRBcnJheVByb3AsXG4gIGlzVXVpZFNpbmdsZVByb3AsXG4gIGlzVmVjdG9yQXJyYXlQcm9wLFxuICBpc1ZlY3RvclNpbmdsZVByb3AsXG4gIGlzVmlydHVhbFByb3AsXG4gIHR5cGUgUmVuZGVyaW5nTm9kZSxcbiAgU29uYW11RmlsZUFycmF5U2NoZW1hLFxuICBTb25hbXVGaWxlU2NoZW1hLFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGNyZWF0ZUltcG9ydFVybCB9IGZyb20gXCIuLi91dGlscy9lc20tdXRpbHNcIjtcbmltcG9ydCB7IHJ1bnRpbWVQYXRoIH0gZnJvbSBcIi4uL3V0aWxzL3BhdGgtdXRpbHNcIjtcblxuLy8gPGFueT7rpbwg7J6Q7KCc7ZWY6rOgLCBab2Tsl5DshJwg7KCc7JW97ZWY64qUIOq4sOuzuOyggeyduCBHZW5lcmljIFR5cGUgUGFyYW1ldGVy66W8IOyCrOyaqe2VqC5cbnR5cGUgQW55Wm9kUmVjb3JkID0gei5ab2RSZWNvcmQ8ei5ab2RTdHJpbmcgfCB6LlpvZE51bWJlciB8IHouWm9kU3ltYm9sLCB6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPYmplY3QgPSB6LlpvZE9iamVjdDwkWm9kTG9vc2VTaGFwZT47XG50eXBlIEFueVpvZE51bGxhYmxlID0gei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2REZWZhdWx0ID0gei5ab2REZWZhdWx0PHouWm9kVHlwZT47XG50eXBlIEFueVpvZFVuaW9uID0gei5ab2RVbmlvbjx6LlpvZFR5cGVbXT47XG50eXBlIEFueVpvZEFycmF5ID0gei5ab2RBcnJheTx6LlpvZFR5cGU+O1xudHlwZSBBbnlab2RPcHRpb25hbCA9IHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPjtcbnR5cGUgQW55Wm9kVGVtcGxhdGVMaXRlcmFsID0gei5ab2RUZW1wbGF0ZUxpdGVyYWw8c3RyaW5nPjtcblxuLyoqXG4gKiDrgrTsnqUg7YOA7J6FIOygleydmCAoWm9kIOyKpO2CpOuniCArIFVJIOugjOuNlOungSDtg4DsnoUpXG4gKi9cbmV4cG9ydCBjb25zdCBCVUlMVF9JTl9UWVBFUyA9IHtcbiAgU29uYW11RmlsZToge1xuICAgIHNjaGVtYTogU29uYW11RmlsZVNjaGVtYSxcbiAgICByZW5kZXJUeXBlOiBcImpzb24tc29uYW11ZmlsZVwiLFxuICAgIHNjaGVtYU5hbWU6IFwiU29uYW11RmlsZVNjaGVtYVwiLFxuICB9LFxuICBcIlNvbmFtdUZpbGVbXVwiOiB7XG4gICAgc2NoZW1hOiBTb25hbXVGaWxlQXJyYXlTY2hlbWEsXG4gICAgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIixcbiAgICBzY2hlbWFOYW1lOiBcIlNvbmFtdUZpbGVBcnJheVNjaGVtYVwiLFxuICB9LFxufSBhcyBjb25zdDtcblxuLyoqXG4gKiBab2Qg7YOA7J6FIElE66Gc67aA7YSwIOuPmeyggeycvOuhnCBab2Qg7Iqk7YKk66eI66W8IOuhnOuTnO2VqeuLiOuLpC5cbiAqIOuCtOyepSDtg4DsnoUoQlVJTFRfSU5fVFlQRV9JRFMp7J2AIOuwlOuhnCDrsJjtmZjtlZjqs6AsXG4gKiDqt7gg7Jm464qUIGRpc3Qg65SU66CJ7Yag66as7JeQ7IScIEVTTeycvOuhnCBpbXBvcnTtlZjsl6wg6rCA7KC47Ji164uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Wm9kVHlwZUJ5SWQoem9kVHlwZUlkOiBzdHJpbmcpOiBQcm9taXNlPHouWm9kVHlwZUFueT4ge1xuICAvLyDrgrTsnqUg7YOA7J6FIOyymOumrFxuICBpZiAoKEJVSUxUX0lOX1RZUEVfSURTIGFzIHJlYWRvbmx5IHN0cmluZ1tdKS5pbmNsdWRlcyh6b2RUeXBlSWQpKSB7XG4gICAgY29uc3QgYnVpbHRJblR5cGUgPSBCVUlMVF9JTl9UWVBFU1t6b2RUeXBlSWQgYXMga2V5b2YgdHlwZW9mIEJVSUxUX0lOX1RZUEVTXTtcbiAgICBpZiAoIWJ1aWx0SW5UeXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYOuCtOyepSDtg4DsnoUgJHt6b2RUeXBlSWR97J2YIOyKpO2CpOuniOqwgCDsoJXsnZjrkJjsp4Ag7JWK7JWY7Iq164uI64ukYCk7XG4gICAgfVxuICAgIHJldHVybiBidWlsdEluVHlwZS5zY2hlbWEuZGVzY3JpYmUoem9kVHlwZUlkKTtcbiAgfVxuXG4gIC8vIO2UhOuhnOygne2KuOyXkOyEnCDsoJXsnZjtlZwg7YOA7J6FIOuPmeyggSDroZzrk5xcbiAgY29uc3QgbW9kdWxlUGF0aCA9IEVudGl0eU1hbmFnZXIuZ2V0TW9kdWxlUGF0aCh6b2RUeXBlSWQpO1xuICBjb25zdCBtb2R1bGVBYnNQYXRoID0gcGF0aC5qb2luKFxuICAgIFNvbmFtdS5hcGlSb290UGF0aCxcbiAgICBydW50aW1lUGF0aChgZGlzdC9hcHBsaWNhdGlvbi8ke21vZHVsZVBhdGh9LmpzYCksXG4gICk7XG4gIGNvbnN0IGltcG9ydFVybCA9IGNyZWF0ZUltcG9ydFVybChtb2R1bGVBYnNQYXRoKTtcbiAgY29uc3QgaW1wb3J0ZWQgPSBhd2FpdCBpbXBvcnQoaW1wb3J0VXJsKTtcblxuICBpZiAoIWltcG9ydGVkW3pvZFR5cGVJZF0pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYOyhtOyerO2VmOyngCDslYrripQgem9kVHlwZUlkICR7em9kVHlwZUlkfWApO1xuICB9XG4gIHJldHVybiBpbXBvcnRlZFt6b2RUeXBlSWRdLmRlc2NyaWJlKHpvZFR5cGVJZCk7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcOydhCBab2Qg7YOA7J6F7Jy866GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOqwgSBwcm9w7J2YIO2DgOyeheyXkCDrlLDrnbwg7KCB7KCI7ZWcIFpvZCB2YWxpZGF0b3Lrpbwg7IOd7ISx7ZWp64uI64ukLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJvcFRvWm9kVHlwZShwcm9wOiBFbnRpdHlQcm9wKTogUHJvbWlzZTx6LlpvZFR5cGVBbnk+IHtcbiAgbGV0IHpvZFR5cGU6IHouWm9kVHlwZUFueSA9IHoudW5rbm93bigpO1xuICBpZiAoaXNJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpO1xuICB9IGVsc2UgaWYgKGlzSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpLmludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpO1xuICB9IGVsc2UgaWYgKGlzQmlnSW50ZWdlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJpZ2ludCgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNFbnVtU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc0VudW1BcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gKGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzU3RyaW5nU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCkubWF4KHByb3AubGVuZ3RoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgem9kVHlwZSA9IHouc3RyaW5nKCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzU3RyaW5nQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICB6b2RUeXBlID0gei5zdHJpbmcoKS5tYXgocHJvcC5sZW5ndGgpLmFycmF5KCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHpvZFR5cGUgPSB6LnN0cmluZygpLmFycmF5KCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6Lm51bWJlcigpO1xuICB9IGVsc2UgaWYgKGlzTnVtYmVyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHoubnVtYmVyKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc051bWVyaWNTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCk7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouc3RyaW5nKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0Jvb2xlYW5TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYm9vbGVhbigpO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmJvb2xlYW4oKS5hcnJheSgpO1xuICB9IGVsc2UgaWYgKGlzRGF0ZVNpbmdsZVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei5kYXRlKCk7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouZGF0ZSgpLmFycmF5KCk7XG4gIH0gZWxzZSBpZiAoaXNVdWlkU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LnV1aWQoKTtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICB6b2RUeXBlID0gei51dWlkKCkuYXJyYXkoKTtcbiAgfSBlbHNlIGlmIChpc0pzb25Qcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IGF3YWl0IGdldFpvZFR5cGVCeUlkKHByb3AuaWQpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSB6LmFycmF5KHoubnVtYmVyKCkpO1xuICB9IGVsc2UgaWYgKGlzVmVjdG9yQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgem9kVHlwZSA9IHouYXJyYXkoei5hcnJheSh6Lm51bWJlcigpKSk7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHpvZFR5cGUgPSBhd2FpdCBnZXRab2RUeXBlQnlJZChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgIGlmIChpc0JlbG9uZ3NUb09uZVJlbGF0aW9uUHJvcChwcm9wKSB8fCAoaXNPbmVUb09uZVJlbGF0aW9uUHJvcChwcm9wKSAmJiBwcm9wLmhhc0pvaW5Db2x1bW4pKSB7XG4gICAgICB6b2RUeXBlID0gei5udW1iZXIoKS5pbnQoKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBwcm9w7J2EIHpvZFR5cGXsnLzroZwg67OA7ZmY7ZWY64qU642wIOyLpO2MqCAke3Byb3B9fWApO1xuICB9XG5cbiAgaWYgKChwcm9wIGFzIHsgdW5zaWduZWQ/OiBib29sZWFuIH0pLnVuc2lnbmVkKSB7XG4gICAgem9kVHlwZSA9ICh6b2RUeXBlIGFzIHouWm9kTnVtYmVyKS5ub25uZWdhdGl2ZSgpO1xuICB9XG4gIGlmIChwcm9wLm51bGxhYmxlKSB7XG4gICAgem9kVHlwZSA9IHpvZFR5cGUubnVsbGFibGUoKTtcbiAgfVxuXG4gIHJldHVybiB6b2RUeXBlO1xufVxuXG4vKipcbiAqIEVudGl0eVByb3DsnYQgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wVG9ab2RUeXBlRGVmKHByb3A6IEVudGl0eVByb3AsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgbGV0IHN0bXQ6IHN0cmluZztcbiAgaWYgKGlzSW50ZWdlclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5pbnQoKWA7XG4gIH0gZWxzZSBpZiAoaXNJbnRlZ2VyQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouaW50KCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNCaWdJbnRlZ2VyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJpZ2ludCgpYDtcbiAgfSBlbHNlIGlmIChpc0JpZ0ludGVnZXJBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5iaWdpbnQoKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc0VudW1TaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgIGluamVjdEltcG9ydEtleXMucHVzaChwcm9wLmlkKTtcbiAgfSBlbHNlIGlmIChpc0VudW1BcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogJHtwcm9wLmlkfS5hcnJheSgpYDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNTdHJpbmdTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgaWYgKHByb3AubGVuZ3RoKSB7XG4gICAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKS5tYXgoJHtwcm9wLmxlbmd0aH0pYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKClgO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1N0cmluZ0FycmF5UHJvcChwcm9wKSkge1xuICAgIGlmIChwcm9wLmxlbmd0aCkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkubWF4KCR7cHJvcC5sZW5ndGh9KS5hcnJheSgpYDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gICAgfVxuICB9IGVsc2UgaWYgKGlzTnVtYmVyU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpYDtcbiAgfSBlbHNlIGlmIChpc051bWJlckFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6Lm51bWJlcigpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzTnVtZXJpY1NpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNOdW1lcmljQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouc3RyaW5nKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlU2luZ2xlUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmRhdGUoKWA7XG4gIH0gZWxzZSBpZiAoaXNEYXRlQXJyYXlQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHouZGF0ZSgpLmFycmF5KClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhblNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5ib29sZWFuKClgO1xuICB9IGVsc2UgaWYgKGlzQm9vbGVhbkFycmF5UHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiB6LmJvb2xlYW4oKS5hcnJheSgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRTaW5nbGVQcm9wKHByb3ApKSB7XG4gICAgc3RtdCA9IGAke3Byb3AubmFtZX06IHoudXVpZCgpYDtcbiAgfSBlbHNlIGlmIChpc1V1aWRBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei51dWlkKCkuYXJyYXkoKWA7XG4gIH0gZWxzZSBpZiAoaXNKc29uUHJvcChwcm9wKSkge1xuICAgIC8vIOuCtOyepSDtg4DsnoXsnbgg6rK97JqwIOyKpO2CpOuniCDsnbTrpoTsnLzroZwg67OA7ZmYXG4gICAgaWYgKChCVUlMVF9JTl9UWVBFX0lEUyBhcyByZWFkb25seSBzdHJpbmdbXSkuaW5jbHVkZXMocHJvcC5pZCkpIHtcbiAgICAgIGNvbnN0IHNjaGVtYU5hbWUgPSBwcm9wLmlkID09PSBcIlNvbmFtdUZpbGVcIiA/IFwiU29uYW11RmlsZVNjaGVtYVwiIDogXCJTb25hbXVGaWxlQXJyYXlTY2hlbWFcIjtcbiAgICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3NjaGVtYU5hbWV9YDtcbiAgICAgIGluamVjdEltcG9ydEtleXMucHVzaChzY2hlbWFOYW1lKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX06ICR7cHJvcC5pZH1gO1xuICAgICAgaW5qZWN0SW1wb3J0S2V5cy5wdXNoKHByb3AuaWQpO1xuICAgIH1cbiAgfSBlbHNlIGlmIChpc1ZlY3RvclNpbmdsZVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6Lm51bWJlcigpKWA7XG4gIH0gZWxzZSBpZiAoaXNWZWN0b3JBcnJheVByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5hcnJheSh6LmFycmF5KHoubnVtYmVyKCkpKWA7XG4gIH0gZWxzZSBpZiAoaXNUc1ZlY3RvclByb3AocHJvcCkpIHtcbiAgICBzdG10ID0gYCR7cHJvcC5uYW1lfTogei5zdHJpbmcoKWA7XG4gIH0gZWxzZSBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgIHN0bXQgPSBgJHtwcm9wLm5hbWV9OiAke3Byb3AuaWR9YDtcbiAgICBpbmplY3RJbXBvcnRLZXlzLnB1c2gocHJvcC5pZCk7XG4gIH0gZWxzZSBpZiAoaXNSZWxhdGlvblByb3AocHJvcCkpIHtcbiAgICBpZiAoaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHwgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKSkge1xuICAgICAgc3RtdCA9IGAke3Byb3AubmFtZX1faWQ6IHouaW50KClgO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyDqt7jsmbggcmVsYXRpb24g7LyA7J207IqkIOygnOyZuFxuICAgICAgcmV0dXJuIGAvLyAke3Byb3AubmFtZX06ICR7cHJvcC5yZWxhdGlvblR5cGV9ICR7cHJvcC53aXRofWA7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBcIi8vIHVuYWJsZSB0byByZXNvbHZlXCI7XG4gIH1cblxuICBpZiAoKHByb3AgYXMgeyB1bnNpZ25lZD86IGJvb2xlYW4gfSkudW5zaWduZWQpIHtcbiAgICBzdG10ICs9IFwiLm5vbm5lZ2F0aXZlKClcIjtcbiAgfVxuICBpZiAocHJvcC5udWxsYWJsZSkge1xuICAgIHN0bXQgKz0gXCIubnVsbGFibGUoKVwiO1xuICB9XG5cbiAgcmV0dXJuIGAke3N0bXR9LGA7XG59XG5cbi8qKlxuICogRW50aXR5UHJvcE5vZGXrpbwgWm9kIO2DgOyehSDsoJXsnZgg7L2U65OcIOusuOyekOyXtOuhnCDrs4DtmZjtlanri4jri6QuXG4gKiBwbGFpbiwgYXJyYXksIG9iamVjdCDrhbjrk5wg7YOA7J6F7J2EIOyerOq3gOyggeycvOuhnCDsspjrpqztlZjsl6wg7KSR7LKpIOq1rOyhsOulvCDsp4Dsm5Dtlanri4jri6QuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wTm9kZVRvWm9kVHlwZURlZihwcm9wTm9kZTogRW50aXR5UHJvcE5vZGUsIGluamVjdEltcG9ydEtleXM6IHN0cmluZ1tdKTogc3RyaW5nIHtcbiAgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcInBsYWluXCIpIHtcbiAgICByZXR1cm4gcHJvcFRvWm9kVHlwZURlZihwcm9wTm9kZS5wcm9wLCBpbmplY3RJbXBvcnRLZXlzKTtcbiAgfSBlbHNlIGlmIChwcm9wTm9kZS5ub2RlVHlwZSA9PT0gXCJhcnJheVwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5hcnJheSh6Lm9iamVjdCh7XCIsXG4gICAgICBwcm9wTm9kZS5jaGlsZHJlblxuICAgICAgICAubWFwKChjaGlsZFByb3BOb2RlKSA9PiBwcm9wTm9kZVRvWm9kVHlwZURlZihjaGlsZFByb3BOb2RlLCBpbmplY3RJbXBvcnRLZXlzKSlcbiAgICAgICAgLmpvaW4oXCJcXG5cIiksXG4gICAgICBcIlwiLFxuICAgICAgXCJ9KSksXCIsXG4gICAgXS5qb2luKFwiXFxuXCIpO1xuICB9IGVsc2UgaWYgKHByb3BOb2RlLm5vZGVUeXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIHByb3BOb2RlLnByb3AgPyBgJHtwcm9wTm9kZS5wcm9wLm5hbWV9OiBgIDogXCJcIixcbiAgICAgIFwiei5vYmplY3Qoe1wiLFxuICAgICAgcHJvcE5vZGUuY2hpbGRyZW5cbiAgICAgICAgLm1hcCgoY2hpbGRQcm9wTm9kZSkgPT4gcHJvcE5vZGVUb1pvZFR5cGVEZWYoY2hpbGRQcm9wTm9kZSwgaW5qZWN0SW1wb3J0S2V5cykpXG4gICAgICAgIC5qb2luKFwiXFxuXCIpLFxuICAgICAgXCJcIixcbiAgICAgIGB9KSR7cHJvcE5vZGUucHJvcD8ubnVsbGFibGUgPyBcIi5udWxsYWJsZSgpXCIgOiBcIlwifSxgLFxuICAgIF0uam9pbihcIlxcblwiKTtcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBFcnJvcjtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvVHNUeXBlRGVmKHp0OiB6LlpvZFR5cGUpOiBzdHJpbmcge1xuICBzd2l0Y2ggKHp0LmRlZi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICBjYXNlIFwiYm9vbGVhblwiOlxuICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICBjYXNlIFwiZGF0ZVwiOlxuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgY2FzZSBcInVuZGVmaW5lZFwiOlxuICAgIGNhc2UgXCJhbnlcIjpcbiAgICBjYXNlIFwidW5rbm93blwiOlxuICAgIGNhc2UgXCJuZXZlclwiOlxuICAgICAgcmV0dXJuIHp0LmRlZi50eXBlO1xuICAgIGNhc2UgXCJudWxsYWJsZVwiOlxuICAgICAgcmV0dXJuIGAke3pvZFR5cGVUb1RzVHlwZURlZigoenQgYXMgQW55Wm9kTnVsbGFibGUpLmRlZi5pbm5lclR5cGUpfSB8IG51bGxgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6XG4gICAgICByZXR1cm4gem9kVHlwZVRvVHNUeXBlRGVmKCh6dCBhcyBBbnlab2REZWZhdWx0KS5kZWYuaW5uZXJUeXBlKTtcbiAgICBjYXNlIFwicmVjb3JkXCI6IHtcbiAgICAgIGNvbnN0IHJlY29yZFR5cGUgPSB6dCBhcyBBbnlab2RSZWNvcmQ7XG4gICAgICByZXR1cm4gYHsgWyBrZXk6ICR7em9kVHlwZVRvVHNUeXBlRGVmKHJlY29yZFR5cGUuZGVmLmtleVR5cGUpfSBdOiAke3pvZFR5cGVUb1RzVHlwZURlZihyZWNvcmRUeXBlLmRlZi52YWx1ZVR5cGUpfX1gO1xuICAgIH1cbiAgICBjYXNlIFwibGl0ZXJhbFwiOlxuICAgICAgcmV0dXJuIEFycmF5LmZyb20oKHp0IGFzIHouWm9kTGl0ZXJhbCkudmFsdWVzKVxuICAgICAgICAubWFwKCh2YWx1ZSkgPT4ge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgXCIke3ZhbHVlfVwiYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBgbnVsbGA7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBgdW5kZWZpbmVkYDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgICAgfSlcbiAgICAgICAgLmpvaW4oXCIgfCBcIik7XG4gICAgY2FzZSBcInVuaW9uXCI6XG4gICAgICByZXR1cm4gYCR7KHp0IGFzIEFueVpvZFVuaW9uKS5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbikgPT4gem9kVHlwZVRvVHNUeXBlRGVmKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiIHwgXCIpfWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIHJldHVybiBgJHsoenQgYXMgei5ab2RFbnVtKS5vcHRpb25zLm1hcCgodmFsKSA9PiBgXCIke3ZhbH1cImApLmpvaW4oXCIgfCBcIil9YDtcbiAgICBjYXNlIFwiYXJyYXlcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZEFycmF5KS5lbGVtZW50KX1bXWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4ge1xuICAgICAgICAgIGlmIChzaGFwZVtrZXldLmRlZi50eXBlID09PSBcIm9wdGlvbmFsXCIpIHtcbiAgICAgICAgICAgIHJldHVybiBgJHtrZXl9PzogJHt6b2RUeXBlVG9Uc1R5cGVEZWYoc2hhcGVba2V5XS5kZWYuaW5uZXJUeXBlKX0sYDtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGAke2tleX06ICR7em9kVHlwZVRvVHNUeXBlRGVmKHNoYXBlW2tleV0pfSxgO1xuICAgICAgICAgIH1cbiAgICAgICAgfSksXG4gICAgICAgIFwifVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9Uc1R5cGVEZWYoKHp0IGFzIEFueVpvZE9wdGlvbmFsKS5kZWYuaW5uZXJUeXBlKX0gfCB1bmRlZmluZWRgO1xuICAgIGNhc2UgXCJ0ZW1wbGF0ZV9saXRlcmFsXCI6IHtcbiAgICAgIGNvbnN0IGRlZiA9ICh6dCBhcyBBbnlab2RUZW1wbGF0ZUxpdGVyYWwpLmRlZjtcblxuICAgICAgLy8g67mIIHRlbXBsYXRlIGxpdGVyYWzsnYAgc3RyaW5n7Jy866GcIO2PtOuwsVxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJzdHJpbmdcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgVHlwZVNjcmlwdCDtg4DsnoUg66y47J6Q7Je066GcIOuzgO2ZmFxuICAgICAgY29uc3QgcGFydHMgPSBkZWYucGFydHMubWFwKChwYXJ0OiB1bmtub3duKSA9PiB7XG4gICAgICAgIC8vIOumrO2EsOuftCDqsJIgKHN0cmluZywgbnVtYmVyLCBib29sZWFuLCBudWxsLCB1bmRlZmluZWQpXG4gICAgICAgIGlmICh0eXBlb2YgcGFydCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIHJldHVybiBgJHtwYXJ0fWA7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICBjb25zdCBpbm5lclR5cGUgPSB6b2RUeXBlVG9Uc1R5cGVEZWYocGFydCBhcyB6LlpvZFR5cGUpO1xuICAgICAgICAgIHJldHVybiBgJFxceyR7aW5uZXJUeXBlfX1gO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8g7Y+067CxXG4gICAgICAgIHJldHVybiBgXFwke3N0cmluZ31gO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgXFxgJHtwYXJ0cy5qb2luKFwiXCIpfVxcYGA7XG4gICAgfVxuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICByZXR1cm4gXCJGaWxlXCI7XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6FIOyduOyKpO2EtOyKpOulvCDtlbTri7ntlZjripQgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmY7ZWp64uI64ukLlxuICovXG5leHBvcnQgZnVuY3Rpb24gem9kVHlwZVRvWm9kQ29kZSh6dDogei5ab2RUeXBlKTogc3RyaW5nIHtcbiAgc3dpdGNoICh6dC5kZWYudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInouc3RyaW5nKClcIjtcbiAgICBjYXNlIFwibnVtYmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bWJlcigpXCI7XG4gICAgY2FzZSBcImJpZ2ludFwiOlxuICAgICAgcmV0dXJuIFwiei5iaWdpbnQoKVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJ6LmJvb2xlYW4oKVwiO1xuICAgIGNhc2UgXCJkYXRlXCI6XG4gICAgICByZXR1cm4gXCJ6LmRhdGUoKVwiO1xuICAgIGNhc2UgXCJudWxsXCI6XG4gICAgICByZXR1cm4gXCJ6Lm51bGwoKVwiO1xuICAgIGNhc2UgXCJ1bmRlZmluZWRcIjpcbiAgICAgIHJldHVybiBcInoudW5kZWZpbmVkKClcIjtcbiAgICBjYXNlIFwiYW55XCI6XG4gICAgICByZXR1cm4gXCJ6LmFueSgpXCI7XG4gICAgY2FzZSBcInVua25vd25cIjpcbiAgICAgIHJldHVybiBcInoudW5rbm93bigpXCI7XG4gICAgY2FzZSBcIm5ldmVyXCI6XG4gICAgICByZXR1cm4gXCJ6Lm5ldmVyKClcIjtcbiAgICBjYXNlIFwibnVsbGFibGVcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyBBbnlab2ROdWxsYWJsZSkuZGVmLmlubmVyVHlwZSl9Lm51bGxhYmxlKClgO1xuICAgIGNhc2UgXCJkZWZhdWx0XCI6IHtcbiAgICAgIGNvbnN0IHpEZWZhdWx0RGVmID0gKHp0IGFzIEFueVpvZERlZmF1bHQpLmRlZjtcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKHpEZWZhdWx0RGVmLmlubmVyVHlwZSl9LmRlZmF1bHQoJHt6RGVmYXVsdERlZi5kZWZhdWx0VmFsdWV9KWA7XG4gICAgfVxuICAgIGNhc2UgXCJyZWNvcmRcIjoge1xuICAgICAgY29uc3QgelJlY29yZERlZiA9ICh6dCBhcyBBbnlab2RSZWNvcmQpLmRlZjtcbiAgICAgIHJldHVybiBgei5yZWNvcmQoJHt6b2RUeXBlVG9ab2RDb2RlKHpSZWNvcmREZWYua2V5VHlwZSl9LCAke3pvZFR5cGVUb1pvZENvZGUoXG4gICAgICAgIHpSZWNvcmREZWYudmFsdWVUeXBlLFxuICAgICAgKX0pYDtcbiAgICB9XG4gICAgY2FzZSBcImxpdGVyYWxcIjoge1xuICAgICAgY29uc3QgaXRlbXMgPSBBcnJheS5mcm9tKCh6dCBhcyB6LlpvZExpdGVyYWw8c3RyaW5nIHwgbnVtYmVyPikudmFsdWVzKS5tYXAoKHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHt2YWx1ZX1cImA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUgPT09IG51bGwpIHtcbiAgICAgICAgICByZXR1cm4gYG51bGxgO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gYHVuZGVmaW5lZGA7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYCR7dmFsdWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgIHJldHVybiBgei5saXRlcmFsKCR7aXRlbXNbMF19KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYHoubGl0ZXJhbChbJHtpdGVtcy5qb2luKFwiLCBcIil9XSlgO1xuICAgIH1cbiAgICBjYXNlIFwidW5pb25cIjpcbiAgICAgIHJldHVybiBgei51bmlvbihbJHsoenQgYXMgQW55Wm9kVW5pb24pLmRlZi5vcHRpb25zXG4gICAgICAgIC5tYXAoKG9wdGlvbjogei5ab2RUeXBlKSA9PiB6b2RUeXBlVG9ab2RDb2RlKG9wdGlvbikpXG4gICAgICAgIC5qb2luKFwiLFwiKX1dKWA7XG4gICAgY2FzZSBcImVudW1cIjpcbiAgICAgIC8vIE5PVEU6IHouZW51bShbXCJBXCIsIFwiQlwiXSnrj4Qgei5lbnVtKHsgQTogXCJBXCIsIEI6IFwiQlwiIH0p66GcIOyymOumrOuQqC5cbiAgICAgIHJldHVybiBgei5lbnVtKHske09iamVjdC5lbnRyaWVzKCh6dCBhcyB6LlpvZEVudW0pLmRlZi5lbnRyaWVzKVxuICAgICAgICAubWFwKChba2V5LCB2YWxdKSA9PiAodHlwZW9mIHZhbCA9PT0gXCJzdHJpbmdcIiA/IGAke2tleX06IFwiJHt2YWx9XCJgIDogYCR7a2V5fTogJHt2YWx9YCkpXG4gICAgICAgIC5qb2luKFwiLCBcIil9fSlgO1xuICAgIGNhc2UgXCJhcnJheVwiOlxuICAgICAgcmV0dXJuIGB6LmFycmF5KCR7em9kVHlwZVRvWm9kQ29kZSgoenQgYXMgei5ab2RBcnJheTx6LlpvZFR5cGU+KS5kZWYuZWxlbWVudCl9KWA7XG4gICAgY2FzZSBcIm9iamVjdFwiOiB7XG4gICAgICBjb25zdCBzaGFwZSA9ICh6dCBhcyBBbnlab2RPYmplY3QpLnNoYXBlO1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAgXCJ6Lm9iamVjdCh7XCIsXG4gICAgICAgIC4uLk9iamVjdC5rZXlzKHNoYXBlKS5tYXAoKGtleSkgPT4gYCR7a2V5fTogJHt6b2RUeXBlVG9ab2RDb2RlKHNoYXBlW2tleV0pfSxgKSxcbiAgICAgICAgXCJ9KVwiLFxuICAgICAgXS5qb2luKFwiXFxuXCIpO1xuICAgIH1cbiAgICBjYXNlIFwib3B0aW9uYWxcIjpcbiAgICAgIHJldHVybiBgJHt6b2RUeXBlVG9ab2RDb2RlKCh6dCBhcyB6LlpvZE9wdGlvbmFsPHouWm9kVHlwZT4pLmRlZi5pbm5lclR5cGUpfS5vcHRpb25hbCgpYDtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIGB6LmZpbGUoKWA7XG4gICAgY2FzZSBcInRlbXBsYXRlX2xpdGVyYWxcIjoge1xuICAgICAgY29uc3QgZGVmID0gKHp0IGFzIEFueVpvZFRlbXBsYXRlTGl0ZXJhbCkuZGVmO1xuXG4gICAgICAvLyDruYggdGVtcGxhdGUgbGl0ZXJhbFxuICAgICAgaWYgKCFkZWYucGFydHMgfHwgZGVmLnBhcnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gXCJ6LnRlbXBsYXRlTGl0ZXJhbChbXSlcIjtcbiAgICAgIH1cblxuICAgICAgLy8g6rCBIHBhcnTrpbwgWm9kIOy9lOuTnCDrrLjsnpDsl7TroZwg67OA7ZmYXG4gICAgICBjb25zdCBwYXJ0cyA9IGRlZi5wYXJ0cy5tYXAoKHBhcnQ6IHVua25vd24pID0+IHtcbiAgICAgICAgLy8g66y47J6Q7Je0IOumrO2EsOuftFxuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICByZXR1cm4gYFwiJHtwYXJ0fVwiYDtcbiAgICAgICAgfVxuICAgICAgICAvLyBab2RUeXBlIC0g7J6s6reA7KCB7Jy866GcIOuzgO2ZmFxuICAgICAgICBpZiAocGFydCAmJiB0eXBlb2YgcGFydCA9PT0gXCJvYmplY3RcIiAmJiAocGFydCBhcyB6LlpvZFR5cGUpLl96b2QpIHtcbiAgICAgICAgICByZXR1cm4gem9kVHlwZVRvWm9kQ29kZShwYXJ0IGFzIHouWm9kVHlwZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyDtj7TrsLFcbiAgICAgICAgcmV0dXJuIFwiei5zdHJpbmcoKVwiO1xuICAgICAgfSk7XG5cbiAgICAgIHJldHVybiBgei50ZW1wbGF0ZUxpdGVyYWwoWyR7cGFydHMuam9pbihcIiwgXCIpfV0pYDtcbiAgICB9XG4gICAgY2FzZSBcImludGVyc2VjdGlvblwiOiB7XG4gICAgICBjb25zdCB6SW50ZXJzZWN0aW9uRGVmID0gKHp0IGFzIHouWm9kSW50ZXJzZWN0aW9uPHouWm9kVHlwZSwgei5ab2RUeXBlPikuZGVmO1xuICAgICAgcmV0dXJuIGB6LmludGVyc2VjdGlvbigke3pvZFR5cGVUb1pvZENvZGUoekludGVyc2VjdGlvbkRlZi5sZWZ0KX0sICR7em9kVHlwZVRvWm9kQ29kZSh6SW50ZXJzZWN0aW9uRGVmLnJpZ2h0KX0pYDtcbiAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgIHRocm93IG5ldyBFcnJvcihg7LKY66as65CY7KeAIOyViuydgCBab2RUeXBlICR7enQuZGVmLnR5cGV9YCk7XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F7J2EIFVJIOugjOuNlOungeyXkCDsgqzsmqntlaAg7IiYIOyeiOuKlCBSZW5kZXJpbmdOb2Rl66GcIOuzgO2ZmO2VqeuLiOuLpC5cbiAqIOyerOq3gOyggeycvOuhnCDspJHssqnrkJwg7YOA7J6F65Ok7J2EIOyymOumrO2VqeuLiOuLpC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoXG4gIHpvZFR5cGU6IHouWm9kVHlwZUFueSxcbiAgYmFzZUtleTogc3RyaW5nID0gXCJyb290XCIsXG4pOiBSZW5kZXJpbmdOb2RlIHtcbiAgY29uc3QgZGVmID0ge1xuICAgIG5hbWU6IGJhc2VLZXksXG4gICAgbGFiZWw6IGluZmxlY3Rpb24uY2FtZWxpemUoYmFzZUtleSwgZmFsc2UpLFxuICAgIHpvZFR5cGUsXG4gIH07XG5cbiAgLyoqXG4gICAqIOy8gOydtOyKpCDsspjrpqwg7Iic7IScXG4gICAqXG4gICAqIDEuIO2KueyImCDsvIDsnbTsiqQgKGRlc2NyaXB0aW9uIOq4sOuwmClcbiAgICogICAgLSBTb25hbXVGaWxlL1NvbmFtdUZpbGVbXSA6IHoub2JqZWN0L3ouYXJyYXnsnbTsp4Drp4wg7YyM7J28IOyXheuhnOuTnOyaqSDrgrTsnqUg7YOA7J6FXG4gICAqXG4gICAqIDIuIOydvOuwmCDsvIDsnbTsiqQgKGluc3RhbmNlb2Yg6riw67CYKVxuICAgKiAgICAtIHouWm9kT2JqZWN0IDog7J2867CYIOqwneyytFxuICAgKiAgICAtIHouWm9kQXJyYXkgOiDsnbzrsJgg67Cw7Je0XG4gICAqICAgICAgLSB2ZWN0b3IgOiB6LmFycmF5KHoubnVtYmVyKeydtOyngOunjCDrhKTsnbTrsI0g6riw67CY7Jy866GcIOuyoe2EsCDsnoTrsqDrlKlcbiAgICogICAgICAtIOydvOuwmCDrsLDsl7QgOiDqt7gg7Jm4XG4gICAqICAgIC0gei5ab2RVbmlvbiwgei5ab2RPcHRpb25hbCwgei5ab2ROdWxsYWJsZSA6IOycoO2LuOumrO2LsCDtg4DsnoVcbiAgICogICAgLSDquLDtg4AgOiByZXNvbHZlUmVuZGVyVHlwZSgp7Jy866GcIOyymOumrFxuICAgKi9cblxuICAvLyDtirnsiJgg7LyA7J207IqkOiBTb25hbXVGaWxlW10g7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlW11cIikge1xuICAgIHJldHVybiB7IC4uLmRlZiwgcmVuZGVyVHlwZTogXCJqc29uLXNvbmFtdWZpbGUtYXJyYXlcIiB9O1xuICB9XG5cbiAgLy8g7Yq57IiYIOy8gOydtOyKpDogU29uYW11RmlsZSDri6jsnbwg7YOA7J6FIOqwkOyngFxuICBpZiAoem9kVHlwZS5kZXNjcmlwdGlvbiA9PT0gXCJTb25hbXVGaWxlXCIpIHtcbiAgICByZXR1cm4geyAuLi5kZWYsIHJlbmRlclR5cGU6IFwianNvbi1zb25hbXVmaWxlXCIgfTtcbiAgfVxuXG4gIC8vIOydvOuwmCDsvIDsnbTsiqQ6IFpvZE9iamVjdCDssrTtgaxcbiAgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE9iamVjdCkge1xuICAgIGNvbnN0IGNvbHVtbktleXMgPSBPYmplY3Qua2V5cyh6b2RUeXBlLnNoYXBlKTtcbiAgICBjb25zdCBjaGlsZHJlbiA9IGNvbHVtbktleXMubWFwKChrZXkpID0+IHtcbiAgICAgIGNvbnN0IGlubmVyVHlwZSA9IHpvZFR5cGUuc2hhcGVba2V5XTtcbiAgICAgIHJldHVybiB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKGlubmVyVHlwZSwga2V5KTtcbiAgICB9KTtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmLFxuICAgICAgcmVuZGVyVHlwZTogXCJvYmplY3RcIixcbiAgICAgIGNoaWxkcmVuLFxuICAgIH07XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kQXJyYXkpIHtcbiAgICBjb25zdCBpbm5lclR5cGUgPSAoem9kVHlwZSBhcyB6LlpvZEFycmF5PHouWm9kVHlwZUFueT4pLmRlZi5lbGVtZW50O1xuICAgIC8vIHZlY3RvciDtg4DsnoUg7YyQ67OEOiBudW1iZXIg67Cw7Je07J2066m07IScIGVtYmVkZGluZywgdmVjdG9yIOuTseydmCDsnbTrpoTsnYQg6rCA7KeEIOqyveyasFxuICAgIGlmIChcbiAgICAgIGlubmVyVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyICYmXG4gICAgICAoYmFzZUtleS5pbmNsdWRlcyhcImVtYmVkZGluZ1wiKSB8fCBiYXNlS2V5LmluY2x1ZGVzKFwidmVjdG9yXCIpKVxuICAgICkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4uZGVmLFxuICAgICAgICByZW5kZXJUeXBlOiBcInZlY3RvclwiLFxuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IFwiYXJyYXlcIixcbiAgICAgIGVsZW1lbnQ6IHpvZFR5cGVUb1JlbmRlcmluZ05vZGUoaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFVuaW9uKSB7XG4gICAgY29uc3Qgb3B0aW9uTm9kZXMgPSAoem9kVHlwZSBhcyB6LlpvZFVuaW9uPHouWm9kVHlwZVtdPikuZGVmLm9wdGlvbnMubWFwKChvcHQpID0+XG4gICAgICB6b2RUeXBlVG9SZW5kZXJpbmdOb2RlKG9wdCwgYmFzZUtleSksXG4gICAgKTtcbiAgICAvLyBUT0RPOiBab2RVbmlvbuydtCDrk6TslrTsnojripQg6rK97JqwIO2VuOuTpOungVxuICAgIHJldHVybiBvcHRpb25Ob2Rlc1swXTtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RPcHRpb25hbCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi56b2RUeXBlVG9SZW5kZXJpbmdOb2RlKCh6b2RUeXBlIGFzIHouWm9kT3B0aW9uYWw8ei5ab2RUeXBlPikuZGVmLmlubmVyVHlwZSwgYmFzZUtleSksXG4gICAgICBvcHRpb25hbDogdHJ1ZSxcbiAgICB9O1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZE51bGxhYmxlKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLnpvZFR5cGVUb1JlbmRlcmluZ05vZGUoKHpvZFR5cGUgYXMgei5ab2ROdWxsYWJsZTx6LlpvZFR5cGU+KS5kZWYuaW5uZXJUeXBlLCBiYXNlS2V5KSxcbiAgICAgIG51bGxhYmxlOiB0cnVlLFxuICAgIH07XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZixcbiAgICAgIHJlbmRlclR5cGU6IHJlc29sdmVSZW5kZXJUeXBlKGJhc2VLZXksIHpvZFR5cGUpLFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBab2Qg7YOA7J6F6rO8IO2CpCDsnbTrpoTsnLzroZzrtoDthLAg7KCB7KCI7ZWcIFJlbmRlclR5cGXsnYQg6rKw7KCV7ZWp64uI64ukLlxuICovXG5mdW5jdGlvbiByZXNvbHZlUmVuZGVyVHlwZShrZXk6IHN0cmluZywgem9kVHlwZTogei5ab2RUeXBlQW55KTogUmVuZGVyaW5nTm9kZVtcInJlbmRlclR5cGVcIl0ge1xuICBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kRGF0ZSkge1xuICAgIHJldHVybiBcImRhdGV0aW1lXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouY29yZS4kWm9kU3RyaW5nKSB7XG4gICAgLy8gTk9URTogei5ab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWY66m0IHoudXJsKCksIHouZW1haWwoKSDrk7HsnZgg7YOA7J6F7JeQ7IScIOusuOygnOqwgCDsg53quLDrr4DroZwgei5jb3JlLiRab2RTdHJpbmfsnLzroZwg67mE6rWQ7ZWoXG4gICAgLy8gRklYTUU6IGVtYWls7J2064KYIHVybCDtg4DsnoUg65Ox7JeQIOuMgO2VnCDsspjrpqzqsIAg7ZWE7JqU7ZWoXG4gICAgaWYgKHpvZFR5cGUuZGVzY3JpcHRpb24gPT09IFwiU1FMRGF0ZVRpbWVTdHJpbmdcIikge1xuICAgICAgcmV0dXJuIFwic3RyaW5nLWRhdGV0aW1lXCI7XG4gICAgfSBlbHNlIGlmIChrZXkuZW5kc1dpdGgoXCJkYXRlXCIpKSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctZGF0ZVwiO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgICB9XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kTnVtYmVyKSB7XG4gICAgaWYgKGtleSA9PT0gXCJpZFwiKSB7XG4gICAgICByZXR1cm4gXCJudW1iZXItaWRcIjtcbiAgICB9IGVsc2UgaWYgKGtleS5lbmRzV2l0aChcIl9pZFwiKSkge1xuICAgICAgcmV0dXJuIFwibnVtYmVyLWZrX2lkXCI7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBcIm51bWJlci1wbGFpblwiO1xuICAgIH1cbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RCb29sZWFuKSB7XG4gICAgcmV0dXJuIFwiYm9vbGVhblwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEVudW0pIHtcbiAgICByZXR1cm4gXCJlbnVtc1wiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZFJlY29yZCkge1xuICAgIHJldHVybiBcInJlY29yZFwiO1xuICB9IGVsc2UgaWYgKHpvZFR5cGUgaW5zdGFuY2VvZiB6LlpvZEFueSB8fCB6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RVbmtub3duKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVW5pb24pIHtcbiAgICByZXR1cm4gXCJzdHJpbmctcGxhaW5cIjtcbiAgfSBlbHNlIGlmICh6b2RUeXBlIGluc3RhbmNlb2Ygei5ab2RMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSBpZiAoem9kVHlwZSBpbnN0YW5jZW9mIHouWm9kVGVtcGxhdGVMaXRlcmFsKSB7XG4gICAgcmV0dXJuIFwic3RyaW5nLXBsYWluXCI7XG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGDtg4DsnoUg7YyM7IuxIOu2iOqwgCAke2tleX0gJHt6b2RUeXBlLmRlZi50eXBlfWApO1xuICB9XG59XG4iXSwibmFtZXMiOlsiaW5mbGVjdGlvbiIsInBhdGgiLCJ6IiwiU29uYW11IiwiRW50aXR5TWFuYWdlciIsIkJVSUxUX0lOX1RZUEVfSURTIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0JpZ0ludGVnZXJBcnJheVByb3AiLCJpc0JpZ0ludGVnZXJTaW5nbGVQcm9wIiwiaXNCb29sZWFuQXJyYXlQcm9wIiwiaXNCb29sZWFuU2luZ2xlUHJvcCIsImlzRGF0ZUFycmF5UHJvcCIsImlzRGF0ZVNpbmdsZVByb3AiLCJpc0VudW1BcnJheVByb3AiLCJpc0VudW1TaW5nbGVQcm9wIiwiaXNJbnRlZ2VyQXJyYXlQcm9wIiwiaXNJbnRlZ2VyU2luZ2xlUHJvcCIsImlzSnNvblByb3AiLCJpc051bWJlckFycmF5UHJvcCIsImlzTnVtYmVyU2luZ2xlUHJvcCIsImlzTnVtZXJpY0FycmF5UHJvcCIsImlzTnVtZXJpY1NpbmdsZVByb3AiLCJpc09uZVRvT25lUmVsYXRpb25Qcm9wIiwiaXNSZWxhdGlvblByb3AiLCJpc1N0cmluZ0FycmF5UHJvcCIsImlzU3RyaW5nU2luZ2xlUHJvcCIsImlzVHNWZWN0b3JQcm9wIiwiaXNVdWlkQXJyYXlQcm9wIiwiaXNVdWlkU2luZ2xlUHJvcCIsImlzVmVjdG9yQXJyYXlQcm9wIiwiaXNWZWN0b3JTaW5nbGVQcm9wIiwiaXNWaXJ0dWFsUHJvcCIsIlNvbmFtdUZpbGVBcnJheVNjaGVtYSIsIlNvbmFtdUZpbGVTY2hlbWEiLCJjcmVhdGVJbXBvcnRVcmwiLCJydW50aW1lUGF0aCIsIkJVSUxUX0lOX1RZUEVTIiwiU29uYW11RmlsZSIsInNjaGVtYSIsInJlbmRlclR5cGUiLCJzY2hlbWFOYW1lIiwiZ2V0Wm9kVHlwZUJ5SWQiLCJ6b2RUeXBlSWQiLCJpbmNsdWRlcyIsImJ1aWx0SW5UeXBlIiwiRXJyb3IiLCJkZXNjcmliZSIsIm1vZHVsZVBhdGgiLCJnZXRNb2R1bGVQYXRoIiwibW9kdWxlQWJzUGF0aCIsImpvaW4iLCJhcGlSb290UGF0aCIsImltcG9ydFVybCIsImltcG9ydGVkIiwicHJvcFRvWm9kVHlwZSIsInByb3AiLCJ6b2RUeXBlIiwidW5rbm93biIsIm51bWJlciIsImludCIsImFycmF5IiwiYmlnaW50IiwiaWQiLCJsZW5ndGgiLCJzdHJpbmciLCJtYXgiLCJib29sZWFuIiwiZGF0ZSIsInV1aWQiLCJoYXNKb2luQ29sdW1uIiwidW5zaWduZWQiLCJub25uZWdhdGl2ZSIsIm51bGxhYmxlIiwicHJvcFRvWm9kVHlwZURlZiIsImluamVjdEltcG9ydEtleXMiLCJzdG10IiwibmFtZSIsInB1c2giLCJyZWxhdGlvblR5cGUiLCJ3aXRoIiwicHJvcE5vZGVUb1pvZFR5cGVEZWYiLCJwcm9wTm9kZSIsIm5vZGVUeXBlIiwiY2hpbGRyZW4iLCJtYXAiLCJjaGlsZFByb3BOb2RlIiwiem9kVHlwZVRvVHNUeXBlRGVmIiwienQiLCJkZWYiLCJ0eXBlIiwiaW5uZXJUeXBlIiwicmVjb3JkVHlwZSIsImtleVR5cGUiLCJ2YWx1ZVR5cGUiLCJBcnJheSIsImZyb20iLCJ2YWx1ZXMiLCJ2YWx1ZSIsInVuZGVmaW5lZCIsIm9wdGlvbnMiLCJvcHRpb24iLCJ2YWwiLCJlbGVtZW50Iiwic2hhcGUiLCJPYmplY3QiLCJrZXlzIiwia2V5IiwicGFydHMiLCJwYXJ0IiwiX3pvZCIsInpvZFR5cGVUb1pvZENvZGUiLCJ6RGVmYXVsdERlZiIsImRlZmF1bHRWYWx1ZSIsInpSZWNvcmREZWYiLCJpdGVtcyIsImVudHJpZXMiLCJ6SW50ZXJzZWN0aW9uRGVmIiwibGVmdCIsInJpZ2h0Iiwiem9kVHlwZVRvUmVuZGVyaW5nTm9kZSIsImJhc2VLZXkiLCJsYWJlbCIsImNhbWVsaXplIiwiZGVzY3JpcHRpb24iLCJab2RPYmplY3QiLCJjb2x1bW5LZXlzIiwiWm9kQXJyYXkiLCJab2ROdW1iZXIiLCJab2RVbmlvbiIsIm9wdGlvbk5vZGVzIiwib3B0IiwiWm9kT3B0aW9uYWwiLCJvcHRpb25hbCIsIlpvZE51bGxhYmxlIiwicmVzb2x2ZVJlbmRlclR5cGUiLCJab2REYXRlIiwiY29yZSIsIiRab2RTdHJpbmciLCJlbmRzV2l0aCIsIlpvZEJvb2xlYW4iLCJab2RFbnVtIiwiWm9kUmVjb3JkIiwiWm9kQW55IiwiWm9kVW5rbm93biIsIlpvZExpdGVyYWwiLCJab2RUZW1wbGF0ZUxpdGVyYWwiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0FrQkMsR0FFRCxPQUFPQSxnQkFBZ0IsYUFBYTtBQUNwQyxPQUFPQyxVQUFVLE9BQU87QUFDeEIsU0FBU0MsQ0FBQyxRQUFRLE1BQU07QUFFeEIsU0FBU0MsTUFBTSxRQUFRLG1CQUFnQjtBQUN2QyxTQUFTQyxhQUFhLFFBQVEsOEJBQTJCO0FBQ3pELFNBQ0VDLGlCQUFpQixFQUdqQkMsMEJBQTBCLEVBQzFCQyxxQkFBcUIsRUFDckJDLHNCQUFzQixFQUN0QkMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLGVBQWUsRUFDZkMsZ0JBQWdCLEVBQ2hCQyxlQUFlLEVBQ2ZDLGdCQUFnQixFQUNoQkMsa0JBQWtCLEVBQ2xCQyxtQkFBbUIsRUFDbkJDLFVBQVUsRUFDVkMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJDLGtCQUFrQixFQUNsQkMsbUJBQW1CLEVBQ25CQyxzQkFBc0IsRUFDdEJDLGNBQWMsRUFDZEMsaUJBQWlCLEVBQ2pCQyxrQkFBa0IsRUFDbEJDLGNBQWMsRUFDZEMsZUFBZSxFQUNmQyxnQkFBZ0IsRUFDaEJDLGlCQUFpQixFQUNqQkMsa0JBQWtCLEVBQ2xCQyxhQUFhLEVBRWJDLHFCQUFxQixFQUNyQkMsZ0JBQWdCLFFBQ1gsb0JBQWlCO0FBQ3hCLFNBQVNDLGVBQWUsUUFBUSx3QkFBcUI7QUFDckQsU0FBU0MsV0FBVyxRQUFRLHlCQUFzQjtBQVlsRDs7Q0FFQyxHQUNELE9BQU8sTUFBTUMs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
@@ -19,7 +19,6 @@ export declare class FixtureManagerClass {
19
19
  private relationGraph;
20
20
  private builder;
21
21
  private fixtureRefMap;
22
- private uuidToFixtureId;
23
22
  private skippedFixtures;
24
23
  init(): void;
25
24
  /**
@@ -41,23 +40,36 @@ export declare class FixtureManagerClass {
41
40
  }): Promise<FixtureRecord[]>;
42
41
  /**
43
42
  * 1. RelationGraph로 fixture 단위 삽입 순서 계산 (self-reference 포함)
44
- * 2. 순서대로 UpsertBuilder에 등록 (UBRef로 참조 관계 표현)
45
- * 3. 테이블별 upsert 실행 (ID는 DB 자동 할당)
43
+ * 2. 테이블별 레벨별로 UpsertBuilder에 등록 upsert 실행
44
+ * 3. 순서 기반 uuid→id 매핑 (UpsertBuilder가 uuid를 DB 저장하지 않으므로)
45
+ *
46
+ * UpsertBuilder는 self-reference가 있으면 buildInsertLevels()로 재정렬하여
47
+ * 등록 순서와 반환 순서가 달라질 수 있습니다. 이를 방지하기 위해
48
+ * FixtureManager가 레벨별로 나눠서 처리하여 각 upsert 호출에서는
49
+ * self-reference가 없도록 합니다.
46
50
  */
47
51
  insertFixtures(dbName: keyof SonamuDBConfig, _fixtures: FixtureRecord[]): Promise<FixtureImportResult[]>;
48
52
  /**
49
53
  * FixtureRecord를 UpsertBuilder에 등록
54
+ * @param insertedIdsByTable 이미 upsert된 테이블의 uuid→id 매핑 (레벨별 처리 시 사용)
50
55
  */
51
56
  private registerFixture;
52
57
  /**
53
58
  * 컬럼 값 변환
54
59
  */
55
60
  private convertColumnValue;
61
+ private processManyToManyRelations;
56
62
  /**
57
- * 테이블 순서 추출 (fixtures에 포함된 테이블만)
63
+ * 같은 테이블 fixture들을 self-reference 레벨별로 분할
64
+ * - self-reference가 없는 fixture들: Level 0
65
+ * - Level 0을 참조하는 fixture들: Level 1
66
+ * - 반복
67
+ *
68
+ * UpsertBuilder가 self-reference가 있으면 buildInsertLevels()로 재정렬하여
69
+ * 등록 순서와 반환 순서가 달라질 수 있습니다.
70
+ * 이를 방지하기 위해 FixtureManager가 레벨별로 나눠서 처리합니다.
58
71
  */
59
- private getTableOrder;
60
- private processManyToManyRelations;
72
+ private groupFixturesByLevel;
61
73
  private checkUniqueViolation;
62
74
  private checkDuplicateByColumns;
63
75
  addFixtureLoader(code: string): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAQ1B,MAAM,gBAAgB,CAAC;AAGxB,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE;QACR,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IAED,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IACD,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,eAAe,CAAkC;IACzD,OAAO,CAAC,eAAe,CAAoE;IAE3F,IAAI;IAuBJ;;;MAGE;IACI,IAAI;IAsCV,OAAO,CAAC,cAAc,CAAqB;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAoB7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyEhF,OAAO;IAYP,WAAW,CACf,YAAY,EAAE,MAAM,cAAc,EAClC,YAAY,EAAE,MAAM,cAAc,EAClC,aAAa,EAAE,oBAAoB,EACnC,cAAc,CAAC,EAAE,qBAAqB;IAmFlC,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;KACjD,EACD,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,GACA,OAAO,CAAC,aAAa,EAAE,CAAC;IAoF3B;;;;OAIG;IACG,cAAc,CAClB,MAAM,EAAE,MAAM,cAAc,EAC5B,SAAS,EAAE,aAAa,EAAE,GACzB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA6HjC;;OAEG;IACH,OAAO,CAAC,eAAe;IAoEvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAqB1B;;OAEG;IACH,OAAO,CAAC,aAAa;YAeP,0BAA0B;YAgF1B,oBAAoB;YA6CpB,uBAAuB;IA8B/B,gBAAgB,CAAC,IAAI,EAAE,MAAM;CAepC;AAED,eAAO,MAAM,cAAc,qBAA4B,CAAC"}
1
+ {"version":3,"file":"fixture-manager.d.ts","sourceRoot":"","sources":["../../src/testing/fixture-manager.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAKjC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGrD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAIL,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,oBAAoB,EAS1B,MAAM,gBAAgB,CAAC;AAGxB,sCAAsC;AACtC,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE;QACR,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;KAC9B,CAAC;CACH;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IAED,OAAO,CAAC,IAAI,CAAqB;IACjC,IAAI,GAAG,CAAC,GAAG,EAAE,IAAI,EAEhB;IACD,IAAI,GAAG,IAAI,IAAI,CAKd;IACD,gBAAgB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAQ;IAEzC,OAAO,CAAC,aAAa,CAAuB;IAG5C,OAAO,CAAC,OAAO,CAAsC;IACrD,OAAO,CAAC,aAAa,CAAiC;IACtD,OAAO,CAAC,eAAe,CAAoE;IAE3F,IAAI;IAuBJ;;;MAGE;IACI,IAAI;IAsCV,OAAO,CAAC,cAAc,CAAqB;IACrC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE;IAoB7C,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAyEhF,OAAO;IAYP,WAAW,CACf,YAAY,EAAE,MAAM,cAAc,EAClC,YAAY,EAAE,MAAM,cAAc,EAClC,aAAa,EAAE,oBAAoB,EACnC,cAAc,CAAC,EAAE,qBAAqB;IAmFlC,mBAAmB,CACvB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE;QACH,EAAE,EAAE,MAAM,CAAC;QACX,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;KACjD,EACD,OAAO,CAAC,EAAE;QACR,YAAY,CAAC,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,IAAI,CAAC;KACZ,GACA,OAAO,CAAC,aAAa,EAAE,CAAC;IAoF3B;;;;;;;;;OASG;IACG,cAAc,CAClB,MAAM,EAAE,MAAM,cAAc,EAC5B,SAAS,EAAE,aAAa,EAAE,GACzB,OAAO,CAAC,mBAAmB,EAAE,CAAC;IA0JjC;;;OAGG;IACH,OAAO,CAAC,eAAe;IAqFvB;;OAEG;IACH,OAAO,CAAC,kBAAkB;YAqBZ,0BAA0B;IAgFxC;;;;;;;;;OASG;IACH,OAAO,CAAC,oBAAoB;YA+Dd,oBAAoB;YA6CpB,uBAAuB;IA8B/B,gBAAgB,CAAC,IAAI,EAAE,MAAM;CAepC;AAED,eAAO,MAAM,cAAc,qBAA4B,CAAC"}