sonamu 0.7.8 → 0.7.9

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 (34) hide show
  1. package/dist/database/base-model.d.ts +47 -2
  2. package/dist/database/base-model.d.ts.map +1 -1
  3. package/dist/database/base-model.js +87 -5
  4. package/dist/entity/entity-manager.d.ts +5 -5
  5. package/dist/entity/entity.d.ts +9 -0
  6. package/dist/entity/entity.d.ts.map +1 -1
  7. package/dist/entity/entity.js +16 -1
  8. package/dist/migration/code-generation.d.ts.map +1 -1
  9. package/dist/migration/code-generation.js +12 -9
  10. package/dist/migration/migration-set.js +3 -1
  11. package/dist/migration/postgresql-schema-reader.d.ts.map +1 -1
  12. package/dist/migration/postgresql-schema-reader.js +3 -2
  13. package/dist/template/implementations/generated.template.d.ts.map +1 -1
  14. package/dist/template/implementations/generated.template.js +3 -2
  15. package/dist/types/types.d.ts +30 -25
  16. package/dist/types/types.d.ts.map +1 -1
  17. package/dist/types/types.js +10 -7
  18. package/dist/vector/config.d.ts.map +1 -1
  19. package/dist/vector/config.js +2 -2
  20. package/dist/vector/embedding.d.ts +12 -8
  21. package/dist/vector/embedding.d.ts.map +1 -1
  22. package/dist/vector/embedding.js +59 -74
  23. package/dist/vector/vector-search.js +2 -2
  24. package/package.json +12 -5
  25. package/src/database/base-model.ts +132 -7
  26. package/src/entity/entity.ts +19 -0
  27. package/src/migration/code-generation.ts +15 -8
  28. package/src/migration/migration-set.ts +2 -0
  29. package/src/migration/postgresql-schema-reader.ts +1 -0
  30. package/src/template/implementations/generated.template.ts +3 -4
  31. package/src/types/types.ts +12 -6
  32. package/src/vector/config.ts +2 -4
  33. package/src/vector/embedding.ts +73 -104
  34. package/src/vector/vector-search.ts +1 -1
@@ -1,5 +1,5 @@
1
1
  import equal from "fast-deep-equal";
2
- import { alphabetical, diff, omit } from "radashi";
2
+ import { alphabetical, diff } from "radashi";
3
3
  import { Naite } from "../index.js";
4
4
  import { formatCode } from "../utils/formatter.js";
5
5
  import { differenceWith, intersectionBy } from "../utils/utils.js";
@@ -168,12 +168,16 @@ function getPgArrayType(column, elementType) {
168
168
  }
169
169
  const methodMap = {
170
170
  index: "INDEX",
171
- fulltext: "INDEX",
172
171
  unique: "UNIQUE INDEX"
173
172
  };
174
- const nullsNotDistinctClause = index.nullsNotDistinct === undefined ? "" : ` NULLS ${index.nullsNotDistinct ? "NOT DISTINCT" : "DISTINCT"}`;
173
+ const nullsNotDistinctClause = index.type === "unique" && index.nullsNotDistinct !== undefined ? ` NULLS ${index.nullsNotDistinct ? "NOT DISTINCT" : "DISTINCT"}` : "";
174
+ const usingClause = index.using === undefined ? "" : `USING ${index.using}`;
175
175
  return `await knex.raw(
176
- \`CREATE ${methodMap[index.type]} ${index.name} ON ${table} (${index.columns.map((col)=>{
176
+ \`CREATE ${methodMap[index.type]} ${index.name} ON ${table} ${usingClause}(${index.columns.map((col)=>{
177
+ // 정렬 옵션은 btree만 사용 가능
178
+ if (index.using !== "btree" && index.using !== undefined) {
179
+ return `${col.name}`;
180
+ }
177
181
  const sortOrderClause = col.sortOrder === undefined ? "" : ` ${col.sortOrder}`;
178
182
  const nullsFirstClause = col.nullsFirst === undefined ? "" : ` NULLS ${col.nullsFirst ? "FIRST" : "LAST"}`;
179
183
  return `${col.name}${sortOrderClause}${nullsFirstClause}`;
@@ -609,7 +613,8 @@ function getPgArrayType(column, elementType) {
609
613
  // sortOrder에 따라 nullsFirst의 default 값 설정
610
614
  nullsFirst: col.nullsFirst ?? col.sortOrder === "DESC"
611
615
  })),
612
- nullsNotDistinct: index.nullsNotDistinct ?? false
616
+ nullsNotDistinct: index.nullsNotDistinct ?? false,
617
+ using: index.using ?? "btree"
613
618
  };
614
619
  }
615
620
  /**
@@ -788,9 +793,7 @@ function getPgArrayType(column, elementType) {
788
793
  const alterCodes = [];
789
794
  // 1. columnsAndIndexes 처리
790
795
  const isEqualColumns = equal(entityColumns.map(normalizeColumnForComparison), dbColumns.map(normalizeColumnForComparison));
791
- const isEqualIndexes = equal(entityIndexes.map((index)=>omit(index, [
792
- "parser"
793
- ])).map(setMigrationIndexDefaults), dbIndexes);
796
+ const isEqualIndexes = equal(entityIndexes.map(setMigrationIndexDefaults), dbIndexes.map(setMigrationIndexDefaults));
794
797
  if (!isEqualColumns || !isEqualIndexes) {
795
798
  alterCodes.push(await generateAlterCode_ColumnAndIndexes(entitySet.table, entityColumns, entityIndexes, dbColumns, dbIndexes, dbSet.foreigns));
796
799
  }
@@ -804,4 +807,4 @@ function getPgArrayType(column, elementType) {
804
807
  return alterCodes.filter((alterCode)=>alterCode !== null).flat();
805
808
  }
806
809
 
807
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vY29kZS1nZW5lcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyBhbHBoYWJldGljYWwsIGRpZmYsIG9taXQgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB0eXBlIHtcbiAgR2VuTWlncmF0aW9uQ29kZSxcbiAgTWlncmF0aW9uQ29sdW1uLFxuICBNaWdyYXRpb25Gb3JlaWduLFxuICBNaWdyYXRpb25JbmRleCxcbiAgTWlncmF0aW9uU2V0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlV2l0aCwgaW50ZXJzZWN0aW9uQnkgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuLyoqXG4gKiDsu6zrn7wg7KCV7J2YIOqysOqzvCDtg4DsnoVcbiAqIC0gYnVpbGRlcjogS25leCB0YWJsZSBidWlsZGVyIOuplOyEnOuTnOuhnCDsi6TtlontlaAg6rWs66y4ICh0YWJsZS54eHgoKSlcbiAqIC0gcmF3OiBrbmV4LnJhdygp66GcIOyLpO2Wie2VoCDqtazrrLhcbiAqL1xudHlwZSBDb2x1bW5EZWZpbml0aW9uUmVzdWx0ID0ge1xuICBidWlsZGVyOiBzdHJpbmdbXTtcbiAgcmF3OiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICog7YWM7J2067iUIOyDneyEse2VmOuKlCDsvIDsnbTsiqQgLSDsu6zrn7wv7J24642x7IqkIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGVfQ29sdW1uQW5kSW5kZXhlcyhcbiAgdGFibGU6IHN0cmluZyxcbiAgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIGluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGU+IHtcbiAgY29uc3QgY29sdW1uRGVmcyA9IGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBjb2x1bW5zKTtcblxuICAvLyDsu6zrn7wsIOyduOuNseyKpCDsspjrpqxcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGBhd2FpdCBrbmV4LnNjaGVtYS5jcmVhdGVUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4uY29sdW1uRGVmcy5idWlsZGVyLFxuICAgIFwifSk7XCIsXG4gICAgLy8gcmF3IOq1rOusuCAoR2VuZXJhdGVkIENvbHVtbiDrk7EpXG4gICAgLi4uY29sdW1uRGVmcy5yYXcsXG4gICAgLy8gaW5kZXjripQga25leC5yYXfroZwg7LKY66as7ZWY66+A66GcIGNyZWF0ZVRhYmxlIOuwluyXkOyEnCDsi6TtlolcbiAgICAuLi5pbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGAgcmV0dXJuIGtuZXguc2NoZW1hLmRyb3BUYWJsZShcIiR7dGFibGV9XCIpO2AsXG4gICAgXCJ9XCIsXG4gIF07XG4gIHJldHVybiB7XG4gICAgdGFibGUsXG4gICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB0aXRsZTogYGNyZWF0ZV9fJHt0YWJsZX1gLFxuICAgIGZvcm1hdHRlZDogZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Db2x1bW5bXSDsnb3slrTshJwg7Lus65+8IOygleydmO2VmOuKlCDqtazrrLgg7IOd7ISxXG4gKiBAcmV0dXJucyBidWlsZGVyOiB0YWJsZSBidWlsZGVyIOuplOyEnOuTnCwgcmF3OiBrbmV4LnJhdygpIOq1rOusuFxuICovXG5mdW5jdGlvbiBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZTogc3RyaW5nLCBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSk6IENvbHVtbkRlZmluaXRpb25SZXN1bHQge1xuICBjb25zdCByZXN1bHQ6IENvbHVtbkRlZmluaXRpb25SZXN1bHQgPSB7XG4gICAgYnVpbGRlcjogW10sXG4gICAgcmF3OiBbXSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgLy8gR2VuZXJhdGVkIENvbHVtbuydgCByYXfroZwg7LKY66asXG4gICAgaWYgKGNvbHVtbi5nZW5lcmF0ZWQpIHtcbiAgICAgIHJlc3VsdC5yYXcucHVzaChnZW5HZW5lcmF0ZWRDb2x1bW5EZWZpbml0aW9uKHRhYmxlLCBjb2x1bW4pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOydvOuwmCDsu6zrn7zsnYAgYnVpbGRlcuuhnCDsspjrpqxcbiAgICByZXN1bHQuYnVpbGRlci5wdXNoKGdlbk5vcm1hbENvbHVtbkRlZmluaXRpb24oY29sdW1uKSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlZCBDb2x1bW4g7KCV7J2YIOyDneyEsSAoQUxURVIgVEFCTEUgQUREIENPTFVNTiDsgqzsmqkpXG4gKi9cbmZ1bmN0aW9uIGdlbkdlbmVyYXRlZENvbHVtbkRlZmluaXRpb24odGFibGU6IHN0cmluZywgY29sdW1uOiBNaWdyYXRpb25Db2x1bW4pOiBzdHJpbmcge1xuICBpZiAoIWNvbHVtbi5nZW5lcmF0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0ZWQgY29sdW1uIGRlZmluaXRpb24gcmVxdWlyZWRcIik7XG4gIH1cbiAgY29uc3QgcGdUeXBlID0gZ2V0UGdUeXBlRm9yQ29sdW1uKGNvbHVtbik7XG4gIGNvbnN0IHN0b3JhZ2VUeXBlID0gY29sdW1uLmdlbmVyYXRlZC50eXBlID09PSBcIlZJUlRVQUxcIiA/IFwiIFZJUlRVQUxcIiA6IFwiIFNUT1JFRFwiO1xuICBjb25zdCBudWxsYWJsZUNsYXVzZSA9IGNvbHVtbi5udWxsYWJsZSA/IFwiXCIgOiBcIiBOT1QgTlVMTFwiO1xuICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxcYEFMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09MVU1OIFwiJHtjb2x1bW4ubmFtZX1cIiAke3BnVHlwZX0gR0VORVJBVEVEIEFMV0FZUyBBUyAoJHtjb2x1bW4uZ2VuZXJhdGVkLmV4cHJlc3Npb259KSR7c3RvcmFnZVR5cGV9JHtudWxsYWJsZUNsYXVzZX1cXGApO2A7XG59XG5cbi8qKlxuICog7J2867CYIOy7rOufvCDsoJXsnZgg7IOd7ISxICh0YWJsZS54eHgoKSDssrTsnbgpXG4gKi9cbmZ1bmN0aW9uIGdlbk5vcm1hbENvbHVtbkRlZmluaXRpb24oY29sdW1uOiBNaWdyYXRpb25Db2x1bW4pOiBzdHJpbmcge1xuICBjb25zdCBjaGFpbnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGNvbHVtbi5uYW1lID09PSBcImlkXCIpIHtcbiAgICByZXR1cm4gYHRhYmxlLmluY3JlbWVudHMoKS5wcmltYXJ5KCk7YDtcbiAgfVxuXG4gIC8vIOuwsOyXtCDtg4DsnoUg7LKY66asXG4gIGlmIChjb2x1bW4udHlwZS5lbmRzV2l0aChcIltdXCIpKSB7XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSBjb2x1bW4udHlwZS5zbGljZSgwLCAtMik7IC8vIFwiaW50ZWdlcltdXCIgLT4gXCJpbnRlZ2VyXCJcbiAgICBjb25zdCBwZ1R5cGUgPSBnZXRQZ0FycmF5VHlwZShjb2x1bW4sIGVsZW1lbnRUeXBlKTtcbiAgICBjaGFpbnMucHVzaChgc3BlY2lmaWNUeXBlKCcke2NvbHVtbi5uYW1lfScsICcke3BnVHlwZX0nKWApO1xuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcInZlY3RvclwiKSB7XG4gICAgLy8gS25leOuKlCB2ZWN0b3Ig7YOA7J6F7J2EIOyngeygkSDsp4Dsm5DtlZjsp4Ag7JWK7Jy866+A66GcIHNwZWNpZmljVHlwZSDsgqzsmqlcbiAgICBjaGFpbnMucHVzaChgc3BlY2lmaWNUeXBlKCcke2NvbHVtbi5uYW1lfScsICd2ZWN0b3IoJHtjb2x1bW4uZGltZW5zaW9uc30pJylgKTtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJudW1iZXJPck51bWVyaWNcIikge1xuICAgIC8vIG51bWJlclxuICAgIGlmIChjb2x1bW4ubnVtYmVyVHlwZSA9PT0gXCJyZWFsXCIpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBmbG9hdCgnJHtjb2x1bW4ubmFtZX0nKWApO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSB7XG4gICAgICBjaGFpbnMucHVzaChgZG91YmxlKCcke2NvbHVtbi5uYW1lfScpYCk7XG4gICAgfSBlbHNlIGlmICgoY29sdW1uLm51bWJlclR5cGUgPz8gXCJudW1lcmljXCIpID09PSBcIm51bWVyaWNcIikge1xuICAgICAgY2hhaW5zLnB1c2goYGRlY2ltYWwoJyR7Y29sdW1uLm5hbWV9JywgJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KWApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIC8vIHN0cmluZ1xuICAgIGlmIChjb2x1bW4ubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBzdHJpbmcoJyR7Y29sdW1uLm5hbWV9JywgJHtjb2x1bW4ubGVuZ3RofSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhaW5zLnB1c2goYHRleHQoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwiZGF0ZVwiKSB7XG4gICAgLy8gZGF0ZVxuICAgIGNoYWlucy5wdXNoKGB0aW1lc3RhbXAoJyR7Y29sdW1uLm5hbWV9JywgeyB1c2VUejogdHJ1ZSB9KWApO1xuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcImpzb25cIikge1xuICAgIC8vIGpzb25cbiAgICBjaGFpbnMucHVzaChganNvbmIoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0eXBlLCBsZW5ndGhcbiAgICBsZXQgZXh0cmFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY2hhaW5zLnB1c2goXG4gICAgICBgJHtjb2x1bW4udHlwZX0oJyR7Y29sdW1uLm5hbWV9JyR7XG4gICAgICAgIGNvbHVtbi5sZW5ndGggPyBgLCAke2NvbHVtbi5sZW5ndGh9YCA6IFwiXCJcbiAgICAgIH0ke2V4dHJhVHlwZSA/IGAsICcke2V4dHJhVHlwZX0nYCA6IFwiXCJ9KWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIG51bGxhYmxlXG4gIGNoYWlucy5wdXNoKGNvbHVtbi5udWxsYWJsZSA/IFwibnVsbGFibGUoKVwiIDogXCJub3ROdWxsYWJsZSgpXCIpO1xuXG4gIC8vIGRlZmF1bHRUb1xuICBpZiAoY29sdW1uLmRlZmF1bHRUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4uZGVmYXVsdFRvID09PSBcInN0cmluZ1wiICYmIGNvbHVtbi5kZWZhdWx0VG8uc3RhcnRzV2l0aChgXCJgKSkge1xuICAgICAgY2hhaW5zLnB1c2goYGRlZmF1bHRUbygke2NvbHVtbi5kZWZhdWx0VG99KWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKGtuZXgucmF3KCcke2NvbHVtbi5kZWZhdWx0VG99JykpYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGB0YWJsZS4ke2NoYWlucy5qb2luKFwiLlwiKX07YDtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Db2x1bW7snZgg7YOA7J6F7J2EIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAqL1xuZnVuY3Rpb24gZ2V0UGdUeXBlRm9yQ29sdW1uKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbHVtbi50eXBlLmVuZHNXaXRoKFwiW11cIikpIHtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGNvbHVtbi50eXBlLnNsaWNlKDAsIC0yKTtcbiAgICByZXR1cm4gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sdW1uLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICBjYXNlIFwibnVtYmVyT3JOdW1lcmljXCI6XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSByZXR1cm4gXCJyZWFsXCI7XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSByZXR1cm4gXCJkb3VibGUgcHJlY2lzaW9uXCI7XG4gICAgICByZXR1cm4gYG51bWVyaWMoJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KWA7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcInRpbWVzdGFtcHR6XCI7XG4gICAgY2FzZSBcImpzb25cIjpcbiAgICAgIHJldHVybiBcImpzb25iXCI7XG4gICAgY2FzZSBcInZlY3RvclwiOlxuICAgICAgcmV0dXJuIGB2ZWN0b3IoJHtjb2x1bW4uZGltZW5zaW9uc30pYDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbHVtbi50eXBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBnQXJyYXlUeXBlKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uLCBlbGVtZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcIm51bWJlck9yTnVtZXJpY1wiKSB7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcInJlYWxcIikgcmV0dXJuIFwicmVhbFtdXCI7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikgcmV0dXJuIFwiZG91YmxlIHByZWNpc2lvbltdXCI7XG4gICAgcmV0dXJuIGBudW1lcmljKCR7Y29sdW1uLnByZWNpc2lvbn0sICR7Y29sdW1uLnNjYWxlfSlbXWA7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggPyBgdmFyY2hhcigke2NvbHVtbi5sZW5ndGh9KVtdYCA6IFwidGV4dFtdXCI7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImRhdGVcIikgcmV0dXJuIFwidGltZXN0YW1wdHpbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiaW50ZWdlclwiKSByZXR1cm4gXCJpbnRlZ2VyW11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJpZ0ludGVnZXJcIikgcmV0dXJuIFwiYmlnaW50W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gXCJ1dWlkXCIpIHJldHVybiBcInV1aWRbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiZW51bVwiKSByZXR1cm4gXCJ0ZXh0W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInZlY3RvclwiKSByZXR1cm4gYHZlY3Rvcigke2NvbHVtbi5kaW1lbnNpb25zfSlbXWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFycmF5IGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gKTtcbn1cblxuLyoqXG4gKiDqsJzrs4Qg7J24642x7IqkIOygleydmCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIHJldHVybiBnZW5WZWN0b3JJbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZE1hcCA9IHtcbiAgICBpbmRleDogXCJJTkRFWFwiLFxuICAgIGZ1bGx0ZXh0OiBcIklOREVYXCIsXG4gICAgdW5pcXVlOiBcIlVOSVFVRSBJTkRFWFwiLFxuICB9O1xuXG4gIGNvbnN0IG51bGxzTm90RGlzdGluY3RDbGF1c2UgPVxuICAgIGluZGV4Lm51bGxzTm90RGlzdGluY3QgPT09IHVuZGVmaW5lZFxuICAgICAgPyBcIlwiXG4gICAgICA6IGAgTlVMTFMgJHtpbmRleC5udWxsc05vdERpc3RpbmN0ID8gXCJOT1QgRElTVElOQ1RcIiA6IFwiRElTVElOQ1RcIn1gO1xuXG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXG4gIFxcYENSRUFURSAke21ldGhvZE1hcFtpbmRleC50eXBlXX0gJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSAoJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sKSA9PiB7XG4gICAgICBjb25zdCBzb3J0T3JkZXJDbGF1c2UgPSBjb2wuc29ydE9yZGVyID09PSB1bmRlZmluZWQgPyBcIlwiIDogYCAke2NvbC5zb3J0T3JkZXJ9YDtcbiAgICAgIGNvbnN0IG51bGxzRmlyc3RDbGF1c2UgPVxuICAgICAgICBjb2wubnVsbHNGaXJzdCA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgTlVMTFMgJHtjb2wubnVsbHNGaXJzdCA/IFwiRklSU1RcIiA6IFwiTEFTVFwifWA7XG4gICAgICByZXR1cm4gYCR7Y29sLm5hbWV9JHtzb3J0T3JkZXJDbGF1c2V9JHtudWxsc0ZpcnN0Q2xhdXNlfWA7XG4gICAgfSlcbiAgICAuam9pbihcIiwgXCIpfSkke251bGxzTm90RGlzdGluY3RDbGF1c2V9O1xcYFxuICApO2A7XG59XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKiAtIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpOiDripDrprAg67mM65OcLCDruaDrpbgg6rKA7IOJIOyGjeuPhCwg64aS7J2AIOuplOuqqOumrCDrsI8g7KCV7ZmV64+EXG4gKiAtIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKTog67mg66W4IOu5jOuTnCwg7KSR6rCEIOqygOyDiSDsho3rj4QsIOuCruydgCDrqZTrqqjrpqxcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gSE5TVyDsnbjrjbHsiqQgKOq2jOyepSAtIOu5oOuluCDqsoDsg4ksIOuGkuydgCDsoJXtmZXrj4QpXG4gKiBDUkVBVEUgSU5ERVggaWR4X2VtYmVkZGluZyBPTiBpdGVtcyBVU0lORyBobnN3IChlbWJlZGRpbmcgdmVjdG9yX2Nvc2luZV9vcHMpIFdJVEggKG0gPSAxNiwgZWZfY29uc3RydWN0aW9uID0gNjQpO1xuICpcbiAqIC8vIElWRkZsYXQg7J24642x7IqkICjrjIDsmqnrn4kg642w7J207YSwLCDruYTsmqkg7KSR7JqUIOyLnClcbiAqIENSRUFURSBJTkRFWCBpZHhfZW1iZWRkaW5nIE9OIGl0ZW1zIFVTSU5HIGl2ZmZsYXQgKGVtYmVkZGluZyB2ZWN0b3JfY29zaW5lX29wcykgV0lUSCAobGlzdHMgPSAxMDApO1xuICovXG5mdW5jdGlvbiBnZW5WZWN0b3JJbmRleERlZmluaXRpb24oaW5kZXg6IE1pZ3JhdGlvbkluZGV4LCB0YWJsZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgY29uc3QgY29sdW1uID0gaW5kZXguY29sdW1uc1swXTtcbiAgY29uc3QgdmVjdG9yT3BzID0gY29sdW1uLnZlY3Rvck9wcyA/PyBcInZlY3Rvcl9jb3NpbmVfb3BzXCI7XG5cbiAgLy8gSE5TVyAoSGllcmFyY2hpY2FsIE5hdmlnYWJsZSBTbWFsbCBXb3JsZCkgLSDqtozsnqU6IOu5oOuluCDqsoDsg4ksIOuGkuydgCDsoJXtmZXrj4RcbiAgaWYgKGluZGV4LnR5cGUgPT09IFwiaG5zd1wiKSB7XG4gICAgY29uc3QgbSA9IGluZGV4Lm0gPz8gMTY7XG4gICAgY29uc3QgZWZDb25zdHJ1Y3Rpb24gPSBpbmRleC5lZkNvbnN0cnVjdGlvbiA/PyA2NDtcbiAgICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxcYENSRUFURSBJTkRFWCAke2luZGV4Lm5hbWV9IE9OICR7dGFibGV9IFVTSU5HIGhuc3cgKCR7Y29sdW1uLm5hbWV9ICR7dmVjdG9yT3BzfSkgV0lUSCAobSA9ICR7bX0sIGVmX2NvbnN0cnVjdGlvbiA9ICR7ZWZDb25zdHJ1Y3Rpb259KVxcYCk7YDtcbiAgfVxuXG4gIC8vIElWRkZsYXQgKEludmVydGVkIEZpbGUgd2l0aCBGbGF0IENvbXByZXNzaW9uKSAtIOuMgOyaqeufiSwg67mE7JqpIOykkeyalCDsi5xcbiAgaWYgKGluZGV4LnR5cGUgPT09IFwiaXZmZmxhdFwiKSB7XG4gICAgY29uc3QgbGlzdHMgPSBpbmRleC5saXN0cyA/PyAxMDA7XG4gICAgcmV0dXJuIGBhd2FpdCBrbmV4LnJhdyhcXGBDUkVBVEUgSU5ERVggJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSBVU0lORyBpdmZmbGF0ICgke2NvbHVtbi5uYW1lfSAke3ZlY3Rvck9wc30pIFdJVEggKGxpc3RzID0gJHtsaXN0c30pXFxgKTtgO1xuICB9XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIHJhdyBTUUwgaW5kZXggdHlwZTogJHtpbmRleC50eXBlfWApO1xufVxuXG4vKipcbiAqIO2FjOydtOu4lCDsg53shLHtlZjripQg7LyA7J207IqkIC0gRksg7IOd7ISxXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQ3JlYXRlQ29kZV9Gb3JlaWduKFxuICB0YWJsZTogc3RyaW5nLFxuICBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuKTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgaWYgKGZvcmVpZ25zLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IHsgdXAsIGRvd24gfSA9IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZm9yZWlnbnMpO1xuICBpZiAodXAubGVuZ3RoID09PSAwICYmIGRvd24ubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coXCJmayDqsIAg662U6rCAIOuLpOumheuLiOuLpFwiKTtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYHJldHVybiBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICBcIi8vIGNyZWF0ZSBma1wiLFxuICAgIC4uLnVwLFxuICAgIFwifSk7XCIsXG4gICAgXCJ9XCIsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIFwiLy8gZHJvcCBma1wiLFxuICAgIC4uLmRvd24sXG4gICAgXCJ9KTtcIixcbiAgICBcIn1cIixcbiAgXTtcblxuICBjb25zdCBmb3JlaWduS2V5c1N0cmluZyA9IGZvcmVpZ25zLm1hcCgoZm9yZWlnbikgPT4gZm9yZWlnbi5jb2x1bW5zLmpvaW4oXCJfXCIpKS5qb2luKFwiX1wiKTtcbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHR5cGU6IFwiZm9yZWlnblwiLFxuICAgICAgdGl0bGU6IGBmb3JlaWduX18ke3RhYmxlfV9fJHtmb3JlaWduS2V5c1N0cmluZ31gLFxuICAgICAgZm9ybWF0dGVkOiBmb3JtYXRDb2RlKGxpbmVzLmpvaW4oXCJcXG5cIiksIFwidHlwZXNjcmlwdFwiLCBgc3JjL21pZ3JhdGlvbi8ke3RhYmxlfS50c2ApLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICogTWlncmF0aW9uRm9yZWlnbltdIOydveyWtOyEnCDsmbjrtoDtgqQgY29uc3RyYWludCDsoJXsnZjtlZjripQg6rWs66y4IOyDneyEsVxuICovXG5mdW5jdGlvbiBnZW5Gb3JlaWduRGVmaW5pdGlvbnMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4pOiB7IHVwOiBzdHJpbmdbXTsgZG93bjogc3RyaW5nW10gfSB7XG4gIHJldHVybiBmb3JlaWducy5yZWR1Y2UoXG4gICAgKHIsIGZvcmVpZ24pID0+IHtcbiAgICAgIGNvbnN0IGNvbHVtbnNTdHJpbmdRdW90ZSA9IGZvcmVpZ24uY29sdW1uc1xuICAgICAgICAubWFwKChjb2wpID0+IGAnJHtjb2wucmVwbGFjZShgJHt0YWJsZX0uYCwgXCJcIil9J2ApXG4gICAgICAgIC5qb2luKFwiLFwiKTtcbiAgICAgIHIudXAucHVzaChcbiAgICAgICAgYHRhYmxlLmZvcmVpZ24oJyR7Zm9yZWlnbi5jb2x1bW5zLmpvaW4oXCIsXCIpfScpXG4gICAgICAgICAgICAucmVmZXJlbmNlcygnJHtmb3JlaWduLnRvfScpXG4gICAgICAgICAgICAub25VcGRhdGUoJyR7Zm9yZWlnbi5vblVwZGF0ZX0nKVxuICAgICAgICAgICAgLm9uRGVsZXRlKCcke2ZvcmVpZ24ub25EZWxldGV9JylgLFxuICAgICAgKTtcbiAgICAgIHIuZG93bi5wdXNoKGB0YWJsZS5kcm9wRm9yZWlnbihbJHtjb2x1bW5zU3RyaW5nUXVvdGV9XSlgKTtcbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAge1xuICAgICAgdXA6IFtdIGFzIHN0cmluZ1tdLFxuICAgICAgZG93bjogW10gYXMgc3RyaW5nW10sXG4gICAgfSxcbiAgKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg67OA6rK9IOy8gOydtOyKpCAtIOy7rOufvC/snbjrjbHsiqQg67OA6rK9XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXMoXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBlbnRpdHlJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuICBkYkNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICBkYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIC8qXG4gICAg7IS467aAIOu5hOq1kCDtm4Qg64uk66W47KCQIOywvuyVhOyEnCDsvZTrk5wg7IOd7ISxXG5cbiAgICAxLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsnojsnLzrgpgsIERC7JeQIOyXhuuLpOuptCDstpTqsIBcbiAgICAyLiDsu6zrn7zqsK/siJgg64uk66aEOiBNROyXkCDsl4bsnLzrgpgsIERC7JeQIOyeiOuLpOuptCDsgq3soJxcbiAgICAzLiDqt7jsmbgg7Lus65+8KOy7rOufvCDqsK/siJjqsIAg64+Z7J287ZWY6rGw64KYLCDri6Trpbgg6rK97JqwIOuPmeydvO2VnCDsu6zrn7zrgbzrpqwpID0+IGFsdGVyXG4gICAgNC4g64uk66W46rGwIOuLpCDrj5nsnbztlZjqs6AgaW5kZXjrp4wg67OA6rK965CY64qUIOqyveyasFxuXG4gICAgKiog7Lus65+866qF7J2EIOuzgOqyve2VmOuKlCDqsr3smrDripQg65Sw66GcIO2VuOuTpOunge2VmOyngCDslYrsnYxcbiAgICA9PiBkcm9wL2FkZCDtmJXtg5zsnZgg66eI7J206re466CI7J207IWYIOy9lOuTnOqwgCDsg53shLHrkJjripTrjbAsIOyImOuPmeycvOuhnCByZW5hbWUg7L2U65Oc66GcIOyImOygle2VmOyXrCDsspjrpqxcbiAgKi9cblxuICAvLyDqsIEg7Lus65+8IOydtOumhCDquLDspIDsnLzroZwgYWRkLCBkcm9wLCBhbHRlciDsl6zrtoAg7ZmV7J24XG4gIGNvbnN0IGFsdGVyQ29sdW1uc1RvID0gZ2V0QWx0ZXJDb2x1bW5zVG8oZW50aXR5Q29sdW1ucywgZGJDb2x1bW5zKTtcblxuICAvLyDstpTstpzrkJwg7Lus65+865Ok7J2EIOq4sOykgOycvOuhnCDqsIHqsIEg65287J24IOyDneyEsVxuICBjb25zdCBhbHRlckNvbHVtbkxpbmVzVG8gPSBnZXRBbHRlckNvbHVtbkxpbmVzVG8oXG4gICAgYWx0ZXJDb2x1bW5zVG8sXG4gICAgZW50aXR5Q29sdW1ucyxcbiAgICB0YWJsZSxcbiAgICBkYkZvcmVpZ25zLFxuICApO1xuXG4gIC8vIOyduOuNseyKpOydmCBhZGQsIGRyb3Ag7Jes67aAIO2ZleyduFxuICBjb25zdCBhbHRlckluZGV4ZXNUbyA9IGdldEFsdGVySW5kZXhlc1RvKGVudGl0eUluZGV4ZXMsIGRiSW5kZXhlcyk7XG5cbiAgLy8g7J24642x7Iqk6rCAIOyCreygnOuQmOuKlCDqsr3smrAsIOy7rOufvOqzvCDqsJnsnbQg7IKt7KCc65CcIOy8gOydtOyKpOyXkOuKlCBkcm9w7JeQ7IScIOygnOyZuO2VtOyVvO2VqCFcbiAgY29uc3QgaW5kZXhOZWVkc1RvRHJvcCA9IGFsdGVySW5kZXhlc1RvLmRyb3AuZmlsdGVyKFxuICAgIChpbmRleCkgPT5cbiAgICAgIGluZGV4LmNvbHVtbnMuZXZlcnkoKHsgbmFtZSB9KSA9PlxuICAgICAgICBhbHRlckNvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBjb2wubmFtZSkuaW5jbHVkZXMobmFtZSksXG4gICAgICApID09PSBmYWxzZSxcbiAgKTtcblxuICAvLyDruYgg7L2U65OcIOyDneyEsSDrsKnsp4BcbiAgY29uc3QgaGFzVXBDaGFuZ2VzID1cbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAucmF3Lmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC51cC5idWlsZGVyLmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAuYnVpbGRlci5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJJbmRleGVzVG8uYWRkLmxlbmd0aCA+IDAgfHxcbiAgICBpbmRleE5lZWRzVG9Ecm9wLmxlbmd0aCA+IDA7XG4gIGlmICghaGFzVXBDaGFuZ2VzKSB7XG4gICAgTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXM6ZW1wdHlDb2RlR2VuZXJhdGlvbkVycm9yXCIsIHtcbiAgICAgIGVudGl0eUNvbHVtbnMsXG4gICAgICBkYkNvbHVtbnMsXG4gICAgICBlbnRpdHlJbmRleGVzLFxuICAgICAgZGJJbmRleGVzLFxuICAgIH0pO1xuICAgIC8vIHRocm93IG5ldyBFcnJvcihcIuy7rOufvC/snbjrjbHsiqQg67OA6rK9IOy9lOuTnCDsg53shLEg7Jik66WYXCIpO1xuICB9XG4gIE5haXRlLnQoXCJtaWdyYXRvcjpnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzOmRlYnVnXCIsIHtcbiAgICBcImFsdGVyQ29sdW1uc1RvLmFkZC5sZW5ndGhcIjogYWx0ZXJDb2x1bW5zVG8uYWRkLmxlbmd0aCxcbiAgICBcImFsdGVyQ29sdW1uc1RvLmRyb3AubGVuZ3RoXCI6IGFsdGVyQ29sdW1uc1RvLmRyb3AubGVuZ3RoLFxuICAgIFwiYWx0ZXJDb2x1bW5zVG8uYWx0ZXIubGVuZ3RoXCI6IGFsdGVyQ29sdW1uc1RvLmFsdGVyLmxlbmd0aCxcbiAgICBcImFsdGVySW5kZXhlc1RvLmFkZC5sZW5ndGhcIjogYWx0ZXJJbmRleGVzVG8uYWRkLmxlbmd0aCxcbiAgICBcImFsdGVySW5kZXhlc1RvLmRyb3AubGVuZ3RoXCI6IGFsdGVySW5kZXhlc1RvLmRyb3AubGVuZ3RoLFxuICAgIFwiaW5kZXhOZWVkc1RvRHJvcC5sZW5ndGhcIjogaW5kZXhOZWVkc1RvRHJvcC5sZW5ndGgsXG4gIH0pO1xuICAvLyBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlczphbHRlckNvbHVtbnNUb1wiLCBhbHRlckNvbHVtbnNUbyk7XG5cbiAgLy8gVE9ETzog7J24642x7Iqk66qFIOuzgOqyveuQnCDqsr3smrAg7LKY66asXG5cbiAgLy8gdGFibGUgYnVpbGRlciDrqZTshJzrk5zroZwg7Iuk7ZaJ7ZWgIOy9lOuTnCAoZHJvcCDihpIgYWRkIOKGkiBhbHRlciDsiJzshJwpXG4gIGNvbnN0IHVwQnVpbGRlckxpbmVzID0gW1xuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC51cC5idWlsZGVyIDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5idWlsZGVyIDogW10pLFxuICAgIC4uLmluZGV4TmVlZHNUb0Ryb3AubWFwKGdlbkluZGV4RHJvcERlZmluaXRpb24pLFxuICBdO1xuXG4gIC8vIGtuZXgucmF3KCnroZwg7Iuk7ZaJ7ZWgIOy9lOuTnFxuICBjb25zdCB1cFJhd0xpbmVzID0gW1xuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLnJhdy5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5yYXcgOiBbXSksXG4gICAgLi4uYWx0ZXJJbmRleGVzVG8uYWRkLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgXTtcblxuICAvLyBkb3du7J2AIHVw7J2YIOyXreyInCAoYWRkLmRvd24gPSBkcm9wIHJvbGxiYWNrLCBkcm9wLmRvd24gPSBhZGQgcm9sbGJhY2spXG4gIGNvbnN0IGRvd25CdWlsZGVyTGluZXMgPSBbXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hZGQuZG93bi5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLmRvd24uYnVpbGRlciA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLmRvd24uYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICA/IGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLmJ1aWxkZXJcbiAgICAgIDogW10pLFxuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLmJ1aWxkZXIubGVuZ3RoID4gMFxuICAgICAgPyBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLmJ1aWxkZXJcbiAgICAgIDogW10pLFxuICAgIC4uLmFsdGVySW5kZXhlc1RvLmFkZFxuICAgICAgLmZpbHRlcihcbiAgICAgICAgKGluZGV4KSA9PlxuICAgICAgICAgIGluZGV4LmNvbHVtbnMuZXZlcnkoKGluZGV4Q29sKSA9PlxuICAgICAgICAgICAgYWx0ZXJDb2x1bW5zVG8uYWRkLm1hcCgoY29sKSA9PiBjb2wubmFtZSkuaW5jbHVkZXMoaW5kZXhDb2wubmFtZSksXG4gICAgICAgICAgKSA9PT0gZmFsc2UsXG4gICAgICApXG4gICAgICAubWFwKGdlbkluZGV4RHJvcERlZmluaXRpb24pLFxuICBdO1xuXG4gIGNvbnN0IGRvd25SYXdMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLmRvd24ucmF3IDogW10pLFxuICAgIC4uLmluZGV4TmVlZHNUb0Ryb3AubWFwKChpbmRleCkgPT4gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4LCB0YWJsZSkpLFxuICBdO1xuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICAuLi4odXBCdWlsZGVyTGluZXMubGVuZ3RoID4gMFxuICAgICAgPyBbYGF3YWl0IGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLCAuLi51cEJ1aWxkZXJMaW5lcywgXCJ9KTtcIl1cbiAgICAgIDogW10pLFxuICAgIC4uLnVwUmF3TGluZXMsXG4gICAgXCJ9XCIsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3duKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICAuLi4oZG93bkJ1aWxkZXJMaW5lcy5sZW5ndGggPiAwXG4gICAgICA/IFtgYXdhaXQga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsIC4uLmRvd25CdWlsZGVyTGluZXMsIFwifSk7XCJdXG4gICAgICA6IFtdKSxcbiAgICAuLi5kb3duUmF3TGluZXMsXG4gICAgXCJ9XCIsXG4gIF07XG5cbiAgY29uc3QgZm9ybWF0dGVkID0gZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKTtcbiAgY29uc3QgdGl0bGUgPSBbXG4gICAgXCJhbHRlclwiLFxuICAgIHRhYmxlLFxuICAgIC4uLihbXCJhZGRcIiwgXCJkcm9wXCIsIFwiYWx0ZXJcIl0gYXMgY29uc3QpXG4gICAgICAubWFwKChhY3Rpb24pID0+IHtcbiAgICAgICAgY29uc3QgbGVuID0gYWx0ZXJDb2x1bW5zVG9bYWN0aW9uXS5sZW5ndGg7XG4gICAgICAgIGlmIChsZW4gPiAwKSB7XG4gICAgICAgICAgcmV0dXJuIGFjdGlvbiArIGxlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0pXG4gICAgICAuZmlsdGVyKChwYXJ0KSA9PiBwYXJ0ICE9PSBudWxsKSxcbiAgXS5qb2luKFwiX1wiKTtcblxuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHRhYmxlLFxuICAgICAgdGl0bGUsXG4gICAgICBmb3JtYXR0ZWQsXG4gICAgICB0eXBlOiBcIm5vcm1hbFwiLFxuICAgIH0sXG4gIF07XG59XG5cbi8qKlxuICog7Lus65+8IOu5hOq1kOulvCDsnITtlbQgR2VuZXJhdGVkIENvbHVtbuydmCBleHByZXNzaW9u7J2EIOygnOyZuO2VnCDqsJ3ssrTrpbwg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIG5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24oY29sOiBNaWdyYXRpb25Db2x1bW4pOiBNaWdyYXRpb25Db2x1bW4ge1xuICBpZiAoY29sLmdlbmVyYXRlZCkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5jb2wsXG4gICAgICBnZW5lcmF0ZWQ6IHtcbiAgICAgICAgdHlwZTogY29sLmdlbmVyYXRlZC50eXBlLFxuICAgICAgICBleHByZXNzaW9uOiBcIlwiLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG4gIHJldHVybiBjb2w7XG59XG5cbi8qKlxuICog6rCBIOy7rOufvCDsnbTrpoQg6riw7KSA7Jy866GcIGFkZCwgZHJvcCwgYWx0ZXIg7Jes67aAIO2ZleyduFxuICovXG5mdW5jdGlvbiBnZXRBbHRlckNvbHVtbnNUbyhlbnRpdHlDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSwgZGJDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSkge1xuICBjb25zdCBjb2x1bW5zVG8gPSB7XG4gICAgYWRkOiBbXSBhcyBNaWdyYXRpb25Db2x1bW5bXSxcbiAgICBkcm9wOiBbXSBhcyBNaWdyYXRpb25Db2x1bW5bXSxcbiAgICBhbHRlcjogW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gIH07XG5cbiAgLy8g7Lus65+866qFIOq4sOykgCDruYTqtZBcbiAgY29uc3QgZXh0cmFDb2x1bW5zID0ge1xuICAgIGRiOiBkaWZmKGRiQ29sdW1ucywgZW50aXR5Q29sdW1ucywgKGNvbCkgPT4gW2NvbC5uYW1lLCBjb2wuZ2VuZXJhdGVkPy50eXBlXS5qb2luKFwiLy8vXCIpKSxcbiAgICBlbnRpdHk6IGRpZmYoZW50aXR5Q29sdW1ucywgZGJDb2x1bW5zLCAoY29sKSA9PiBbY29sLm5hbWUsIGNvbC5nZW5lcmF0ZWQ/LnR5cGVdLmpvaW4oXCIvLy9cIikpLFxuICB9O1xuICBpZiAoZXh0cmFDb2x1bW5zLmVudGl0eS5sZW5ndGggPiAwKSB7XG4gICAgY29sdW1uc1RvLmFkZCA9IGNvbHVtbnNUby5hZGQuY29uY2F0KGV4dHJhQ29sdW1ucy5lbnRpdHkpO1xuICB9XG4gIGlmIChleHRyYUNvbHVtbnMuZGIubGVuZ3RoID4gMCkge1xuICAgIGNvbHVtbnNUby5kcm9wID0gY29sdW1uc1RvLmRyb3AuY29uY2F0KGV4dHJhQ29sdW1ucy5kYik7XG4gIH1cblxuICAvLyDrj5nsnbwg7Lus65+866qF7J2YIOyEuOu2gCDtlYTrk5wg67mE6rWQIChHZW5lcmF0ZWQgQ29sdW1uIGV4cHJlc3Npb24g7KCc7Jm4KVxuICBjb25zdCBzYW1lRGJDb2x1bW5zID0gaW50ZXJzZWN0aW9uQnkoZGJDb2x1bW5zLCBlbnRpdHlDb2x1bW5zLCAoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IHNhbWVNZENvbHVtbnMgPSBpbnRlcnNlY3Rpb25CeShlbnRpdHlDb2x1bW5zLCBkYkNvbHVtbnMsIChjb2wpID0+IGNvbC5uYW1lKTtcbiAgY29sdW1uc1RvLmFsdGVyID0gZGlmZmVyZW5jZVdpdGgoXG4gICAgc2FtZURiQ29sdW1ucyxcbiAgICBzYW1lTWRDb2x1bW5zLFxuICAgIChhLCBiKSA9PiBlcXVhbCh7IC4uLmEsIGdlbmVyYXRlZDogdW5kZWZpbmVkIH0sIHsgLi4uYiwgZ2VuZXJhdGVkOiB1bmRlZmluZWQgfSksIC8vIGdlbmVyYXRlZCDsu6zrn7zsnYAgYWx0ZXLroZwg7LKY66as7ZWY7KeAIOyViuydjFxuICApO1xuXG4gIHJldHVybiBjb2x1bW5zVG87XG59XG5cbi8qKlxuICog7LaU7Lac65CcIOy7rOufvOuTpOydhCDquLDspIDsnLzroZwg6rCB6rCBIOudvOyduCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2V0QWx0ZXJDb2x1bW5MaW5lc1RvKFxuICBjb2x1bW5zVG86IFJldHVyblR5cGU8dHlwZW9mIGdldEFsdGVyQ29sdW1uc1RvPixcbiAgZW50aXR5Q29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIHRhYmxlOiBzdHJpbmcsXG4gIGRiRm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbikge1xuICBjb25zdCBsaW5lc1RvID0ge1xuICAgIGFkZDoge1xuICAgICAgdXA6IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICAgIGRvd246IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICB9LFxuICAgIGRyb3A6IHtcbiAgICAgIHVwOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgICBkb3duOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgfSxcbiAgICBhbHRlcjoge1xuICAgICAgdXA6IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICAgIGRvd246IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIGFkZCBjb2x1bW5zXG4gIGNvbnN0IGFkZENvbHVtbkRlZnMgPSBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmFkZCk7XG4gIGxpbmVzVG8uYWRkLnVwID0ge1xuICAgIGJ1aWxkZXI6IGFkZENvbHVtbkRlZnMuYnVpbGRlci5sZW5ndGggPiAwID8gW1wiLy8gYWRkXCIsIC4uLmFkZENvbHVtbkRlZnMuYnVpbGRlcl0gOiBbXSxcbiAgICByYXc6IGFkZENvbHVtbkRlZnMucmF3Lmxlbmd0aCA+IDAgPyBbXCIvLyBhZGQgKGdlbmVyYXRlZClcIiwgLi4uYWRkQ29sdW1uRGVmcy5yYXddIDogW10sXG4gIH07XG4gIGxpbmVzVG8uYWRkLmRvd24gPSB7XG4gICAgYnVpbGRlcjpcbiAgICAgIGNvbHVtbnNUby5hZGQubGVuZ3RoID4gMFxuICAgICAgICA/IFtcbiAgICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBhZGRcIixcbiAgICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygke2NvbHVtbnNUby5hZGQubWFwKChjb2wpID0+IGAnJHtjb2wubmFtZX0nYCkuam9pbihcIiwgXCIpfSlgLFxuICAgICAgICAgIF1cbiAgICAgICAgOiBbXSxcbiAgICByYXc6IFtdLFxuICB9O1xuXG4gIC8vIGRyb3DtlaAg7Lus65+87JeQIOqxuOumsCBGSyDssL7quLBcbiAgY29uc3QgZHJvcENvbHVtbk5hbWVzID0gY29sdW1uc1RvLmRyb3AubWFwKChjb2wpID0+IGNvbC5uYW1lKTtcbiAgY29uc3QgZmtUb0Ryb3BCZWZvcmVDb2x1bW4gPSBkYkZvcmVpZ25zLmZpbHRlcigoZmspID0+XG4gICAgZmsuY29sdW1ucy5zb21lKChjb2wpID0+IGRyb3BDb2x1bW5OYW1lcy5pbmNsdWRlcyhjb2wpKSxcbiAgKTtcblxuICBjb25zdCBkcm9wRmtMaW5lcyA9IGZrVG9Ecm9wQmVmb3JlQ29sdW1uLm1hcCgoZmspID0+IHtcbiAgICBjb25zdCBjb2x1bW5zU3RyaW5nUXVvdGUgPSBmay5jb2x1bW5zLm1hcCgoY29sKSA9PiBgJyR7Y29sfSdgKS5qb2luKFwiLFwiKTtcbiAgICByZXR1cm4gYHRhYmxlLmRyb3BGb3JlaWduKFske2NvbHVtbnNTdHJpbmdRdW90ZX1dKWA7XG4gIH0pO1xuXG4gIGNvbnN0IHJlc3RvcmVGa0xpbmVzID0gZ2VuRm9yZWlnbkRlZmluaXRpb25zKHRhYmxlLCBma1RvRHJvcEJlZm9yZUNvbHVtbikudXA7XG5cbiAgLy8gZHJvcOydmCByb2xsYmFja+yLnOyXkOuKlCBnZW5lcmF0ZWQgY29sdW1u64+EIOuzteybkO2VtOyVvCDtlahcbiAgY29uc3QgZHJvcENvbHVtbkRlZnMgPSBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgY29sdW1uc1RvLmRyb3ApO1xuICBsaW5lc1RvLmRyb3AgPSB7XG4gICAgdXA6IHtcbiAgICAgIGJ1aWxkZXI6IFtcbiAgICAgICAgLi4uKGRyb3BGa0xpbmVzLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcIi8vIGRyb3AgZm9yZWlnbiBrZXlzIG9uIGNvbHVtbnMgdG8gYmUgZHJvcHBlZFwiLCAuLi5kcm9wRmtMaW5lc11cbiAgICAgICAgICA6IFtdKSxcbiAgICAgICAgLi4uKGNvbHVtbnNUby5kcm9wLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgICAgXCIvLyBkcm9wIGNvbHVtbnNcIixcbiAgICAgICAgICAgICAgYHRhYmxlLmRyb3BDb2x1bW5zKCR7Y29sdW1uc1RvLmRyb3AubWFwKChjb2wpID0+IGAnJHtjb2wubmFtZX0nYCkuam9pbihcIiwgXCIpfSlgLFxuICAgICAgICAgICAgXVxuICAgICAgICAgIDogW10pLFxuICAgICAgXSxcbiAgICAgIHJhdzogW10sXG4gICAgfSxcbiAgICBkb3duOiB7XG4gICAgICBidWlsZGVyOiBbXG4gICAgICAgIC4uLihkcm9wQ29sdW1uRGVmcy5idWlsZGVyLmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcIi8vIHJvbGxiYWNrIC0gZHJvcCBjb2x1bW5zXCIsIC4uLmRyb3BDb2x1bW5EZWZzLmJ1aWxkZXJdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLihyZXN0b3JlRmtMaW5lcy5sZW5ndGggPiAwID8gW1wiLy8gcmVzdG9yZSBmb3JlaWduIGtleXNcIiwgLi4ucmVzdG9yZUZrTGluZXNdIDogW10pLFxuICAgICAgXSxcbiAgICAgIHJhdzpcbiAgICAgICAgZHJvcENvbHVtbkRlZnMucmF3Lmxlbmd0aCA+IDBcbiAgICAgICAgICA/IFtcIi8vIHJvbGxiYWNrIC0gZHJvcCBjb2x1bW5zIChnZW5lcmF0ZWQpXCIsIC4uLmRyb3BDb2x1bW5EZWZzLnJhd11cbiAgICAgICAgICA6IFtdLFxuICAgIH0sXG4gIH07XG5cbiAgLy8gYWx0ZXIgY29sdW1ucyAoR2VuZXJhdGVkIENvbHVtbuydgCBBTFRFUiDrtojqsIDtlZjrr4DroZwgZHJvcCDtm4Qg7J6s7IOd7ISxKVxuICBsaW5lc1RvLmFsdGVyID0gY29sdW1uc1RvLmFsdGVyLnJlZHVjZShcbiAgICAociwgZGJDb2x1bW4pID0+IHtcbiAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eUNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZSA9PT0gZGJDb2x1bW4ubmFtZSk7XG4gICAgICBpZiAoZW50aXR5Q29sdW1uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHI7XG4gICAgICB9XG5cbiAgICAgIC8vIOy7rOufvCDrs4Dqsr3sgqztla1cbiAgICAgIGNvbnN0IGNvbHVtbkRpZmZVcCA9IGRpZmYoXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZW50aXR5Q29sdW1uXSkuYnVpbGRlcixcbiAgICAgICAgZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIFtkYkNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICApO1xuICAgICAgY29uc3QgY29sdW1uRGlmZkRvd24gPSBkaWZmKFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2RiQ29sdW1uXSkuYnVpbGRlcixcbiAgICAgICAgZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIFtlbnRpdHlDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgKTtcbiAgICAgIGlmIChjb2x1bW5EaWZmVXAubGVuZ3RoID4gMCkge1xuICAgICAgICByLnVwLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci51cC5idWlsZGVyLFxuICAgICAgICAgIFwiLy8gYWx0ZXIgY29sdW1uXCIsXG4gICAgICAgICAgLi4uY29sdW1uRGlmZlVwLm1hcCgobCkgPT4gYCR7bC5yZXBsYWNlKFwiO1wiLCBcIlwiKX0uYWx0ZXIoKTtgKSxcbiAgICAgICAgXTtcbiAgICAgICAgci5kb3duLmJ1aWxkZXIgPSBbXG4gICAgICAgICAgLi4uci5kb3duLmJ1aWxkZXIsXG4gICAgICAgICAgXCIvLyByb2xsYmFjayAtIGFsdGVyIGNvbHVtblwiLFxuICAgICAgICAgIC4uLmNvbHVtbkRpZmZEb3duLm1hcCgobCkgPT4gYCR7bC5yZXBsYWNlKFwiO1wiLCBcIlwiKX0uYWx0ZXIoKTtgKSxcbiAgICAgICAgXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHI7XG4gICAgfSxcbiAgICB7XG4gICAgICB1cDogeyBidWlsZGVyOiBbXSBhcyBzdHJpbmdbXSwgcmF3OiBbXSBhcyBzdHJpbmdbXSB9LFxuICAgICAgZG93bjogeyBidWlsZGVyOiBbXSBhcyBzdHJpbmdbXSwgcmF3OiBbXSBhcyBzdHJpbmdbXSB9LFxuICAgIH0sXG4gICk7XG5cbiAgcmV0dXJuIGxpbmVzVG87XG59XG5cbi8qKlxuICog7J24642x7Iqk7J2YIGFkZCwgZHJvcCDsl6zrtoAg7ZmV7J24XG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVySW5kZXhlc1RvKGVudGl0eUluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sIGRiSW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSkge1xuICAvLyDsnbjrjbHsiqQg67mE6rWQXG4gIGNvbnN0IGluZGV4ZXNUbyA9IHtcbiAgICBhZGQ6IFtdIGFzIE1pZ3JhdGlvbkluZGV4W10sXG4gICAgZHJvcDogW10gYXMgTWlncmF0aW9uSW5kZXhbXSxcbiAgfTtcblxuICAvLyDsnbjrjbHsiqQg6rOg7JygIOyLneuzhOyekCDsg53shLEgKG5hbWXsnYQg7KCc7Jm47ZWcIOuqqOuToCDtlYTrk5zrpbwg66y47J6Q7Je066GcIOuzgO2ZmO2VmOyXrCDsobDtlakpXG4gIGNvbnN0IGlkZW50aXR5ID0gPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPj4oaW5kZXg6IFQpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhpbmRleClcbiAgICAgIC5maWx0ZXIoKGtleSkgPT4ga2V5ICE9PSBcIm5hbWVcIilcbiAgICAgIC5zb3J0KCk7XG5cbiAgICByZXR1cm4ga2V5c1xuICAgICAgLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgIGlmIChrZXkgPT09IFwibmFtZVwiKSB7XG4gICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoa2V5ID09PSBcImNvbHVtbnNcIikge1xuICAgICAgICAgIHJldHVybiAoaW5kZXhba2V5XSBhcyBNaWdyYXRpb25JbmRleFtcImNvbHVtbnNcIl0pLmZsYXRNYXAoaWRlbnRpdHkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtrZXl9PSR7aW5kZXhba2V5IGFzIGtleW9mIE1pZ3JhdGlvbkluZGV4XX1gO1xuICAgICAgfSlcbiAgICAgIC5qb2luKFwiLy9cIik7XG4gIH07XG5cbiAgY29uc3QgZXh0cmFJbmRleGVzID0ge1xuICAgIGRiOiBkaWZmKGRiSW5kZXhlcywgZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksIGlkZW50aXR5KSxcbiAgICBlbnRpdHk6IGRpZmYoZW50aXR5SW5kZXhlcy5tYXAoc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyksIGRiSW5kZXhlcywgaWRlbnRpdHkpLFxuICB9O1xuICBpZiAoZXh0cmFJbmRleGVzLmVudGl0eS5sZW5ndGggPiAwKSB7XG4gICAgaW5kZXhlc1RvLmFkZCA9IGluZGV4ZXNUby5hZGQuY29uY2F0KGV4dHJhSW5kZXhlcy5lbnRpdHkpO1xuICB9XG4gIGlmIChleHRyYUluZGV4ZXMuZGIubGVuZ3RoID4gMCkge1xuICAgIGluZGV4ZXNUby5kcm9wID0gaW5kZXhlc1RvLmRyb3AuY29uY2F0KGV4dHJhSW5kZXhlcy5kYik7XG4gIH1cblxuICByZXR1cm4gaW5kZXhlc1RvO1xufVxuXG4vKipcbiAqIOyduOuNseyKpCDsgq3soJwg7KCV7J2YIOyDneyEsVxuICovXG5mdW5jdGlvbiBnZW5JbmRleERyb3BEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCkge1xuICByZXR1cm4gYHRhYmxlLmRyb3BJbmRleChbJHtpbmRleC5jb2x1bW5zXG4gICAgLm1hcCgoY29sdW1uKSA9PiBgJyR7Y29sdW1uLm5hbWV9J2ApXG4gICAgLmpvaW4oXCIsXCIpfV0sICcke2luZGV4Lm5hbWV9JylgO1xufVxuXG4vKipcbiAqIERCIOyhsO2ajCDqsrDqs7zsmYAg67mE6rWQ7ZWY6riwIOychO2VnCDsnbjrjbHsiqQg6riw67O46rCSIOyEpOyglVxuICovXG5mdW5jdGlvbiBzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzKGluZGV4OiBNaWdyYXRpb25JbmRleCk6IE1pZ3JhdGlvbkluZGV4IHtcbiAgcmV0dXJuIHtcbiAgICAuLi5pbmRleCxcbiAgICBjb2x1bW5zOiBpbmRleC5jb2x1bW5zLm1hcCgoY29sKSA9PiAoe1xuICAgICAgLi4uY29sLFxuICAgICAgc29ydE9yZGVyOiBjb2wuc29ydE9yZGVyID8/IFwiQVNDXCIsXG4gICAgICAvLyBzb3J0T3JkZXLsl5Ag65Sw6528IG51bGxzRmlyc3TsnZggZGVmYXVsdCDqsJIg7ISk7KCVXG4gICAgICBudWxsc0ZpcnN0OiBjb2wubnVsbHNGaXJzdCA/PyBjb2wuc29ydE9yZGVyID09PSBcIkRFU0NcIixcbiAgICB9KSksXG4gICAgbnVsbHNOb3REaXN0aW5jdDogaW5kZXgubnVsbHNOb3REaXN0aW5jdCA/PyBmYWxzZSxcbiAgfTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg67OA6rK9IOy8gOydtOyKpCAtIEZvcmVpZ24gS2V5IOuzgOqyvVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZV9Gb3JlaWducyhcbiAgdGFibGU6IHN0cmluZyxcbiAgZW50aXR5Rm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgZGJGb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuICBkcm9wcGluZ0NvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdID0gW10sXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICAvLyBjb25zb2xlLmxvZyh7IGVudGl0eUZvcmVpZ25zLCBkYkZvcmVpZ25zIH0pO1xuXG4gIGNvbnN0IGdldEtleSA9IChtZjogTWlncmF0aW9uRm9yZWlnbik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIFttZi5jb2x1bW5zLmpvaW4oXCItXCIpLCBtZi50b10uam9pbihcIi8vL1wiKTtcbiAgfTtcblxuICAvLyDsgq3soJzrkKAg7Lus65+866qFIOuqqeuhnVxuICBjb25zdCBkcm9wcGluZ0NvbHVtbk5hbWVzID0gZHJvcHBpbmdDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG5cbiAgY29uc3QgZmtUbyA9IGVudGl0eUZvcmVpZ25zLnJlZHVjZShcbiAgICAocmVzdWx0LCBlbnRpdHlGKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0RiRiA9IGRiRm9yZWlnbnMuZmluZCgoZGJGKSA9PiBnZXRLZXkoZW50aXR5RikgPT09IGdldEtleShkYkYpKTtcbiAgICAgIGlmICghbWF0Y2hpbmdEYkYpIHtcbiAgICAgICAgcmVzdWx0LmFkZC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoZXF1YWwoZW50aXR5RiwgbWF0Y2hpbmdEYkYpID09PSBmYWxzZSkge1xuICAgICAgICByZXN1bHQuYWx0ZXJTcmMucHVzaChtYXRjaGluZ0RiRik7XG4gICAgICAgIHJlc3VsdC5hbHRlckRzdC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIGFkZDogW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgZHJvcDogW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgYWx0ZXJTcmM6IFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGFsdGVyRHN0OiBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgfSxcbiAgKTtcblxuICAvLyBkYkZvcmVpZ25z7JeQ64qUIOyeiOyngOunjCBlbnRpdHlGb3JlaWduc+yXkOuKlCDsl4bripQg6rK97JqwICjsgq3soJzrkJwgRkspXG4gIC8vIOuLqCwg7IKt7KCc65CgIOy7rOufvOydmCBGS+uKlCDsoJzsmbggKGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXPsl5DshJwg7LKY66asKVxuICBkYkZvcmVpZ25zLmZvckVhY2goKGRiRikgPT4ge1xuICAgIGNvbnN0IG1hdGNoaW5nRW50aXR5RiA9IGVudGl0eUZvcmVpZ25zLmZpbmQoKGVudGl0eUYpID0+IGdldEtleShlbnRpdHlGKSA9PT0gZ2V0S2V5KGRiRikpO1xuICAgIGlmICghbWF0Y2hpbmdFbnRpdHlGKSB7XG4gICAgICAvLyDsnbQgRkvsnZgg7Lus65+87J20IOyCreygnOuQoCDsu6zrn7wg66qp66Gd7JeQIOyeiOuKlOyngCDtmZXsnbhcbiAgICAgIGNvbnN0IGlzQ29sdW1uRHJvcHBpbmcgPSBkYkYuY29sdW1ucy5zb21lKChjb2wpID0+IGRyb3BwaW5nQ29sdW1uTmFtZXMuaW5jbHVkZXMoY29sKSk7XG4gICAgICAvLyDsu6zrn7zsnbQg7IKt7KCc65CY7KeAIOyViuuKlCDqsr3smrDsl5Drp4wgRksgZHJvcCDrqqnroZ3sl5Ag7LaU6rCAXG4gICAgICBpZiAoIWlzQ29sdW1uRHJvcHBpbmcpIHtcbiAgICAgICAgZmtUby5kcm9wLnB1c2goZGJGKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGxpbmVzVG8gPSB7XG4gICAgYWRkOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uYWRkKSxcbiAgICBkcm9wOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uZHJvcCksXG4gICAgYWx0ZXJTcmM6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5hbHRlclNyYyksXG4gICAgYWx0ZXJEc3Q6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5hbHRlckRzdCksXG4gIH07XG5cbiAgLy8gZHJvcCBmayBjb2x1bW5z7J24IOqyveyasCjsg53shLHrkKAg7L2U65OcIOyXhuuKlCDqsr3smrApIO2MqOyKpFxuICBjb25zdCBoYXNMaW5lcyA9IE9iamVjdC52YWx1ZXMobGluZXNUbykuc29tZSgobCkgPT4gbC51cC5sZW5ndGggPiAwIHx8IGwuZG93bi5sZW5ndGggPiAwKTtcbiAgaWYgKCFoYXNMaW5lcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChcbiAgICBsaW5lc1RvLmFkZC51cC5sZW5ndGggPT09IDAgJiZcbiAgICBsaW5lc1RvLmRyb3AudXAubGVuZ3RoID09PSAwICYmXG4gICAgbGluZXNUby5hbHRlclNyYy51cC5sZW5ndGggPT09IDAgJiZcbiAgICBsaW5lc1RvLmFsdGVyRHN0LnVwLmxlbmd0aCA9PT0gMFxuICApIHtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnM6ZmtDaGFuZ2VDb2RlR2VuZXJhdGlvbkVycm9yXCIsIHtcbiAgICAgIHRhYmxlLFxuICAgICAgZW50aXR5Rm9yZWlnbnMsXG4gICAgICBkYkZvcmVpZ25zLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZLIOuzgOqyvSDsvZTrk5wg7IOd7ISxIOyYpOulmFwiKTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIC4uLmxpbmVzVG8uZHJvcC5kb3duLFxuICAgIC4uLmxpbmVzVG8uYWRkLnVwLFxuICAgIC4uLmxpbmVzVG8uYWx0ZXJTcmMuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LnVwLFxuICAgIFwifSlcIixcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4ubGluZXNUby5hZGQuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LmRvd24sXG4gICAgLi4ubGluZXNUby5hbHRlclNyYy51cCxcbiAgICAuLi5saW5lc1RvLmRyb3AudXAsXG4gICAgXCJ9KVwiLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgXCJ0eXBlc2NyaXB0XCIsIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG4gIGNvbnN0IHRpdGxlID0gW1xuICAgIFwiYWx0ZXJcIixcbiAgICB0YWJsZSxcbiAgICBcImZvcmVpZ25zXCIsXG4gICAgLy8gVE9ETyDrsJTrgIzripQg67aA67aEXG4gIF0uam9pbihcIl9cIik7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZm9ybWF0dGVkLFxuICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIOyjvOyWtOynhCBFbnRpdHlTZXTsnYQg6riw67CY7Jy866GcIO2FjOydtOu4lCBDUkVBVEUg66eI7J206re466CI7J207IWYIOy9lOuTnOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5U2V0XG4gKiBAcmV0dXJucyBDUkVBVEUg66eI7J206re466CI7J207IWYIOy9lOuTnFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDcmVhdGVDb2RlKGVudGl0eVNldDogTWlncmF0aW9uU2V0KTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgcmV0dXJuIFtcbiAgICBhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGVfQ29sdW1uQW5kSW5kZXhlcyhcbiAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgIGVudGl0eVNldC5jb2x1bW5zLFxuICAgICAgZW50aXR5U2V0LmluZGV4ZXMsXG4gICAgKSxcbiAgICAuLi4oYXdhaXQgZ2VuZXJhdGVDcmVhdGVDb2RlX0ZvcmVpZ24oZW50aXR5U2V0LnRhYmxlLCBlbnRpdHlTZXQuZm9yZWlnbnMpKSxcbiAgXTtcbn1cblxuLyoqXG4gKiDso7zslrTsp4QgZW50aXR5U2V07J2EIOuqqe2RnOuhnCwgZGJTZXTsnYQg7ZiEIOyDge2ZqeycvOuhnCDtlZjsl6wg7YWM7J2067iUIEFMVEVSIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5zrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIGVudGl0eVNldCDtmIQg7IOB7Zmp7J2YIE1pZ3JhdGlvblNldFxuICogQHBhcmFtIGRiU2V0IOuqqe2RnCDsg4HtmansnZggTWlncmF0aW9uU2V0XG4gKiBAcmV0dXJucyBBTFRFUiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZShcbiAgZW50aXR5U2V0OiBNaWdyYXRpb25TZXQsXG4gIGRiU2V0OiBNaWdyYXRpb25TZXQsXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICBjb25zdCByZXBsYWNlQ29sdW1uRGVmYXVsdFRvID0gKGNvbDogTWlncmF0aW9uQ29sdW1uKSA9PiB7XG4gICAgLy8gZmxvYXTsnbgg6rK97JqwIOq4sOuzuOqwkuydhCAw7Jy866GcIOyngOygle2VmOuKlCDqsr3smrAgXCIwLjAwXCLsnLzroZwg67OA7ZmY65CY64qUIOy8gOydtOyKpCDrjIDsnZFcbiAgICAvLyBpZiAoY29sLnR5cGUgPT09IFwiZmxvYXRcIiAmJiBjb2wuZGVmYXVsdFRvICYmIFN0cmluZyhjb2wuZGVmYXVsdFRvKS5pbmNsdWRlcygnXCInKSA9PT0gZmFsc2UpIHtcbiAgICAvLyAgIGNvbC5kZWZhdWx0VG8gPSBgXCIke051bWJlcihjb2wuZGVmYXVsdFRvKS50b0ZpeGVkKGNvbC5zY2FsZSA/PyAyKX1cImA7XG4gICAgLy8gfVxuICAgIC8vIC8vIHN0cmluZ+yduCDqsr3smrAg6riw67O46rCS7J20IOu5iCDsiqTtirjrp4Hsnbgg6rK97JqwIOuMgOydkVxuICAgIC8vIGlmIChjb2wudHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBjb2wuZGVmYXVsdFRvID09PSBcIlwiKSB7XG4gICAgLy8gICBjb2wuZGVmYXVsdFRvID0gJ1wiXCInO1xuICAgIC8vIH1cbiAgICAvLyAvLyBib29sZWFu7J24IOqyveyasCDquLDrs7jqsJIg7KCV6rec7ZmUIChNeVNRTOyXkOyEnOuKlCBUSU5ZSU5UKDEp66GcIOyggOyepeuQmOuvgOuhnCAwIOuYkOuKlCAx66GcIOygleq3nO2ZlClcbiAgICAvLyAvLyBUT0RPOiBkYi50c+yXkCB0eXBlQ2FzZSDshKTsoJUg7ZmV7J247ZWY7JesIOyymOumrO2VmOuPhOuhnSDsiJjsoJUg7ZWE7JqUXG4gICAgLy8gaWYgKGNvbC50eXBlID09PSBcImJvb2xlYW5cIiAmJiBjb2wuZGVmYXVsdFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIGlmIChjb2wuZGVmYXVsdFRvID09PSBcIjBcIiB8fCBjb2wuZGVmYXVsdFRvLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikge1xuICAgIC8vICAgICBjb2wuZGVmYXVsdFRvID0gXCIwXCI7XG4gICAgLy8gICB9IGVsc2UgaWYgKGNvbC5kZWZhdWx0VG8gPT09IFwiMVwiIHx8IGNvbC5kZWZhdWx0VG8udG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAvLyAgICAgY29sLmRlZmF1bHRUbyA9IFwiMVwiO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIEZJWE1FOiDsnbzri6ggTXlTUUwg7IOB7Zmp7JeQ7IScIOuwnOyDne2WiOuNmCDsnbTsiojsnZggd29ya2Fyb3VuZCDsnbTrr4DroZwgUGfsl5DshJwg7J6s7ZmV7J24IO2bhCDrjIDsnZEg7LaU6rCAXG4gICAgcmV0dXJuIGNvbDtcbiAgfTtcbiAgY29uc3QgZW50aXR5Q29sdW1ucyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuICBjb25zdCBkYkNvbHVtbnMgPSBhbHBoYWJldGljYWwoZGJTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuXG4gIC8qIOuUlOuyhOq5heyaqSDsvZTrk5wsIO2KueyglSDsu6zrn7zsl5DshJwg67aI7J287LmYIOuwnOyDne2VoCDrlYwg7ZmV7J24XG4gICAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eVNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGJDb2x1bW4gPSBkYlNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5kZWJ1Zyh7IGVudGl0eUNvbHVtbiwgZGJDb2x1bW4gfSk7XG4gICAgICAgICAqL1xuXG4gIC8vID9cbiAgY29uc3QgZW50aXR5SW5kZXhlcyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuaW5kZXhlcywgKGEpID0+IFthLnR5cGUsIC4uLmEuY29sdW1uc10uam9pbihcIi1cIikpO1xuICBjb25zdCBkYkluZGV4ZXMgPSBhbHBoYWJldGljYWwoZGJTZXQuaW5kZXhlcywgKGEpID0+IFthLnR5cGUsIC4uLmEuY29sdW1uc10uam9pbihcIi1cIikpO1xuXG4gIGNvbnN0IHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwgPSAoZjogTWlncmF0aW9uRm9yZWlnbikgPT4ge1xuICAgIC8vIE15U1FM7JeQ7IScIFJFU1RSSUNU7JmAIE5PIEFDVElPTuydgCDrj5nsnbztlahcbiAgICBjb25zdCB7IG9uRGVsZXRlLCBvblVwZGF0ZSB9ID0gZjtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZixcbiAgICAgIG9uVXBkYXRlOiBvblVwZGF0ZSA9PT0gXCJSRVNUUklDVFwiID8gXCJOTyBBQ1RJT05cIiA6IG9uVXBkYXRlLFxuICAgICAgb25EZWxldGU6IG9uRGVsZXRlID09PSBcIlJFU1RSSUNUXCIgPyBcIk5PIEFDVElPTlwiIDogb25EZWxldGUsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBlbnRpdHlGb3JlaWducyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuZm9yZWlnbnMsIChhKSA9PlxuICAgIFthLnRvLCAuLi5hLmNvbHVtbnNdLmpvaW4oXCItXCIpLFxuICApLm1hcCgoZikgPT4gcmVwbGFjZU5vQWN0aW9uT25NeVNRTChmKSk7XG4gIGNvbnN0IGRiRm9yZWlnbnMgPSBhbHBoYWJldGljYWwoZGJTZXQuZm9yZWlnbnMsIChhKSA9PiBbYS50bywgLi4uYS5jb2x1bW5zXS5qb2luKFwiLVwiKSkubWFwKChmKSA9PlxuICAgIHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwoZiksXG4gICk7XG5cbiAgLy8g7IKt7KCc65CgIOy7rOufvCDrqqnroZ0g6rOE7IKwXG4gIGNvbnN0IGRyb3BwaW5nQ29sdW1ucyA9IGRpZmYoZGJDb2x1bW5zLCBlbnRpdHlDb2x1bW5zLCAoY29sKSA9PiBjb2wubmFtZSk7XG5cbiAgY29uc3QgYWx0ZXJDb2RlczogKEdlbk1pZ3JhdGlvbkNvZGUgfCBHZW5NaWdyYXRpb25Db2RlW10gfCBudWxsKVtdID0gW107XG5cbiAgLy8gMS4gY29sdW1uc0FuZEluZGV4ZXMg7LKY66asXG4gIGNvbnN0IGlzRXF1YWxDb2x1bW5zID0gZXF1YWwoXG4gICAgZW50aXR5Q29sdW1ucy5tYXAobm9ybWFsaXplQ29sdW1uRm9yQ29tcGFyaXNvbiksXG4gICAgZGJDb2x1bW5zLm1hcChub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKSxcbiAgKTtcbiAgY29uc3QgaXNFcXVhbEluZGV4ZXMgPSBlcXVhbChcbiAgICBlbnRpdHlJbmRleGVzLm1hcCgoaW5kZXgpID0+IG9taXQoaW5kZXgsIFtcInBhcnNlclwiXSkpLm1hcChzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzKSxcbiAgICBkYkluZGV4ZXMsXG4gICk7XG4gIGlmICghaXNFcXVhbENvbHVtbnMgfHwgIWlzRXF1YWxJbmRleGVzKSB7XG4gICAgYWx0ZXJDb2Rlcy5wdXNoKFxuICAgICAgYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlcyhcbiAgICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgICBlbnRpdHlDb2x1bW5zLFxuICAgICAgICBlbnRpdHlJbmRleGVzLFxuICAgICAgICBkYkNvbHVtbnMsXG4gICAgICAgIGRiSW5kZXhlcyxcbiAgICAgICAgZGJTZXQuZm9yZWlnbnMsXG4gICAgICApLFxuICAgICk7XG4gIH1cblxuICAvLyAyLiBmb3JlaWducyDsspjrpqwgKOyCreygnOuQoCDsu6zrn7wg7KCV67O0IOyghOuLrClcbiAgaWYgKGVxdWFsKGVudGl0eUZvcmVpZ25zLCBkYkZvcmVpZ25zKSA9PT0gZmFsc2UpIHtcbiAgICBhbHRlckNvZGVzLnB1c2goXG4gICAgICBhd2FpdCBnZW5lcmF0ZUFsdGVyQ29kZV9Gb3JlaWducyhcbiAgICAgICAgZW50aXR5U2V0LnRhYmxlLFxuICAgICAgICBlbnRpdHlGb3JlaWducyxcbiAgICAgICAgZGJGb3JlaWducyxcbiAgICAgICAgZHJvcHBpbmdDb2x1bW5zLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgaWYgKGFsdGVyQ29kZXMuZXZlcnkoKGFsdGVyQ29kZSkgPT4gYWx0ZXJDb2RlID09PSBudWxsKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHJldHVybiBhbHRlckNvZGVzLmZpbHRlcigoYWx0ZXJDb2RlKSA9PiBhbHRlckNvZGUgIT09IG51bGwpLmZsYXQoKTtcbn1cbiJdLCJuYW1lcyI6WyJlcXVhbCIsImFscGhhYmV0aWNhbCIsImRpZmYiLCJvbWl0IiwiTmFpdGUiLCJmb3JtYXRDb2RlIiwiZGlmZmVyZW5jZVdpdGgiLCJpbnRlcnNlY3Rpb25CeSIsImdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzIiwidGFibGUiLCJjb2x1bW5zIiwiaW5kZXhlcyIsImNvbHVtbkRlZnMiLCJnZW5Db2x1bW5EZWZpbml0aW9ucyIsImxpbmVzIiwiYnVpbGRlciIsInJhdyIsIm1hcCIsImluZGV4IiwiZ2VuSW5kZXhEZWZpbml0aW9uIiwidHlwZSIsInRpdGxlIiwiZm9ybWF0dGVkIiwiam9pbiIsInJlc3VsdCIsImNvbHVtbiIsImdlbmVyYXRlZCIsInB1c2giLCJnZW5HZW5lcmF0ZWRDb2x1bW5EZWZpbml0aW9uIiwiZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbiIsIkVycm9yIiwicGdUeXBlIiwiZ2V0UGdUeXBlRm9yQ29sdW1uIiwic3RvcmFnZVR5cGUiLCJudWxsYWJsZUNsYXVzZSIsIm51bGxhYmxlIiwibmFtZSIsImV4cHJlc3Npb24iLCJjaGFpbnMiLCJlbmRzV2l0aCIsImVsZW1lbnRUeXBlIiwic2xpY2UiLCJnZXRQZ0FycmF5VHlwZSIsImRpbWVuc2lvbnMiLCJudW1iZXJUeXBlIiwicHJlY2lzaW9uIiwic2NhbGUiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJleHRyYVR5cGUiLCJkZWZhdWx0VG8iLCJzdGFydHNXaXRoIiwiZ2VuVmVjdG9ySW5kZXhEZWZpbml0aW9uIiwibWV0aG9kTWFwIiwiZnVsbHRleHQiLCJ1bmlxdWUiLCJudWxsc05vdERpc3RpbmN0Q2xhdXNlIiwibnVsbHNOb3REaXN0aW5jdCIsImNvbCIsInNvcnRPcmRlckNsYXVzZSIsInNvcnRPcmRlciIsIm51bGxzRmlyc3RDbGF1c2UiLCJudWxsc0ZpcnN0IiwidmVjdG9yT3BzIiwibSIsImVmQ29uc3RydWN0aW9uIiwibGlzdHMiLCJnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbiIsImZvcmVpZ25zIiwidXAiLCJkb3duIiwiZ2VuRm9yZWlnbkRlZmluaXRpb25zIiwiY29uc29sZSIsImxvZyIsImZvcmVpZ25LZXlzU3RyaW5nIiwiZm9yZWlnbiIsInJlZHVjZSIsInIiLCJjb2x1bW5zU3RyaW5nUXVvdGUiLCJyZXBsYWNlIiwidG8iLCJvblVwZGF0ZSIsIm9uRGVsZXRlIiwiZ2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlcyIsImVudGl0eUNvbHVtbnMiLCJlbnRpdHlJbmRleGVzIiwiZGJDb2x1bW5zIiwiZGJJbmRleGVzIiwiZGJGb3JlaWducyIsImFsdGVyQ29sdW1uc1RvIiwiZ2V0QWx0ZXJDb2x1bW5zVG8iLCJhbHRlckNvbHVtbkxpbmVzVG8iLCJnZXRBbHRlckNvbHVtbkxpbmVzVG8iLCJhbHRlckluZGV4ZXNUbyIsImdldEFsdGVySW5kZXhlc1RvIiwiaW5kZXhOZWVkc1RvRHJvcCIsImRyb3AiLCJmaWx0ZXIiLCJldmVyeSIsImluY2x1ZGVzIiwiaGFzVXBDaGFuZ2VzIiwiYWRkIiwiYWx0ZXIiLCJ0IiwidXBCdWlsZGVyTGluZXMiLCJnZW5JbmRleERyb3BEZWZpbml0aW9uIiwidXBSYXdMaW5lcyIsImRvd25CdWlsZGVyTGluZXMiLCJpbmRleENvbCIsImRvd25SYXdMaW5lcyIsImFjdGlvbiIsImxlbiIsInBhcnQiLCJub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uIiwiY29sdW1uc1RvIiwiZXh0cmFDb2x1bW5zIiwiZGIiLCJlbnRpdHkiLCJjb25jYXQiLCJzYW1lRGJDb2x1bW5zIiwic2FtZU1kQ29sdW1ucyIsImEiLCJiIiwibGluZXNUbyIsImFkZENvbHVtbkRlZnMiLCJkcm9wQ29sdW1uTmFtZXMiLCJma1RvRHJvcEJlZm9yZUNvbHVtbiIsImZrIiwic29tZSIsImRyb3BGa0xpbmVzIiwicmVzdG9yZUZrTGluZXMiLCJkcm9wQ29sdW1uRGVmcyIsImRiQ29sdW1uIiwiZW50aXR5Q29sdW1uIiwiZmluZCIsImNvbHVtbkRpZmZVcCIsImNvbHVtbkRpZmZEb3duIiwibCIsImluZGV4ZXNUbyIsImlkZW50aXR5Iiwia2V5cyIsIk9iamVjdCIsImtleSIsInNvcnQiLCJmbGF0TWFwIiwiZXh0cmFJbmRleGVzIiwic2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyIsImdlbmVyYXRlQWx0ZXJDb2RlX0ZvcmVpZ25zIiwiZW50aXR5Rm9yZWlnbnMiLCJkcm9wcGluZ0NvbHVtbnMiLCJnZXRLZXkiLCJtZiIsImRyb3BwaW5nQ29sdW1uTmFtZXMiLCJma1RvIiwiZW50aXR5RiIsIm1hdGNoaW5nRGJGIiwiZGJGIiwiYWx0ZXJTcmMiLCJhbHRlckRzdCIsImZvckVhY2giLCJtYXRjaGluZ0VudGl0eUYiLCJpc0NvbHVtbkRyb3BwaW5nIiwiaGFzTGluZXMiLCJ2YWx1ZXMiLCJnZW5lcmF0ZUNyZWF0ZUNvZGUiLCJlbnRpdHlTZXQiLCJnZW5lcmF0ZUFsdGVyQ29kZSIsImRiU2V0IiwicmVwbGFjZUNvbHVtbkRlZmF1bHRUbyIsInJlcGxhY2VOb0FjdGlvbk9uTXlTUUwiLCJmIiwiYWx0ZXJDb2RlcyIsImlzRXF1YWxDb2x1bW5zIiwiaXNFcXVhbEluZGV4ZXMiLCJhbHRlckNvZGUiLCJmbGF0Il0sIm1hcHBpbmdzIjoiQUFBQSxPQUFPQSxXQUFXLGtCQUFrQjtBQUNwQyxTQUFTQyxZQUFZLEVBQUVDLElBQUksRUFBRUMsSUFBSSxRQUFRLFVBQVU7QUFDbkQsU0FBU0MsS0FBSyxRQUFRLGNBQUs7QUFRM0IsU0FBU0MsVUFBVSxRQUFRLHdCQUFxQjtBQUNoRCxTQUFTQyxjQUFjLEVBQUVDLGNBQWMsUUFBUSxvQkFBaUI7QUFZaEU7O0NBRUMsR0FDRCxlQUFlQyxvQ0FDYkMsS0FBYSxFQUNiQyxPQUEwQixFQUMxQkMsT0FBeUI7SUFFekIsTUFBTUMsYUFBYUMscUJBQXFCSixPQUFPQztJQUUvQyxhQUFhO0lBQ2IsTUFBTUksUUFBa0I7UUFDdEI7UUFDQTtRQUNBO1FBQ0EsQ0FBQywrQkFBK0IsRUFBRUwsTUFBTSxlQUFlLENBQUM7V0FDckRHLFdBQVdHLE9BQU87UUFDckI7UUFDQSw4QkFBOEI7V0FDM0JILFdBQVdJLEdBQUc7UUFDakIsNENBQTRDO1dBQ3pDTCxRQUFRTSxHQUFHLENBQUMsQ0FBQ0MsUUFBVUMsbUJBQW1CRCxPQUFPVDtRQUNwRDtRQUNBO1FBQ0E7UUFDQSxDQUFDLCtCQUErQixFQUFFQSxNQUFNLEdBQUcsQ0FBQztRQUM1QztLQUNEO0lBQ0QsT0FBTztRQUNMQTtRQUNBVyxNQUFNO1FBQ05DLE9BQU8sQ0FBQyxRQUFRLEVBQUVaLE9BQU87UUFDekJhLFdBQVdqQixXQUFXUyxNQUFNUyxJQUFJLENBQUMsT0FBTyxjQUFjLENBQUMsY0FBYyxFQUFF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
810
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vY29kZS1nZW5lcmF0aW9uLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBlcXVhbCBmcm9tIFwiZmFzdC1kZWVwLWVxdWFsXCI7XG5pbXBvcnQgeyBhbHBoYWJldGljYWwsIGRpZmYgfSBmcm9tIFwicmFkYXNoaVwiO1xuaW1wb3J0IHsgTmFpdGUgfSBmcm9tIFwiLi5cIjtcbmltcG9ydCB0eXBlIHtcbiAgR2VuTWlncmF0aW9uQ29kZSxcbiAgTWlncmF0aW9uQ29sdW1uLFxuICBNaWdyYXRpb25Gb3JlaWduLFxuICBNaWdyYXRpb25JbmRleCxcbiAgTWlncmF0aW9uU2V0LFxufSBmcm9tIFwiLi4vdHlwZXMvdHlwZXNcIjtcbmltcG9ydCB7IGZvcm1hdENvZGUgfSBmcm9tIFwiLi4vdXRpbHMvZm9ybWF0dGVyXCI7XG5pbXBvcnQgeyBkaWZmZXJlbmNlV2l0aCwgaW50ZXJzZWN0aW9uQnkgfSBmcm9tIFwiLi4vdXRpbHMvdXRpbHNcIjtcblxuLyoqXG4gKiDsu6zrn7wg7KCV7J2YIOqysOqzvCDtg4DsnoVcbiAqIC0gYnVpbGRlcjogS25leCB0YWJsZSBidWlsZGVyIOuplOyEnOuTnOuhnCDsi6TtlontlaAg6rWs66y4ICh0YWJsZS54eHgoKSlcbiAqIC0gcmF3OiBrbmV4LnJhdygp66GcIOyLpO2Wie2VoCDqtazrrLhcbiAqL1xudHlwZSBDb2x1bW5EZWZpbml0aW9uUmVzdWx0ID0ge1xuICBidWlsZGVyOiBzdHJpbmdbXTtcbiAgcmF3OiBzdHJpbmdbXTtcbn07XG5cbi8qKlxuICog7YWM7J2067iUIOyDneyEse2VmOuKlCDsvIDsnbTsiqQgLSDsu6zrn7wv7J24642x7IqkIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGVfQ29sdW1uQW5kSW5kZXhlcyhcbiAgdGFibGU6IHN0cmluZyxcbiAgY29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sXG4gIGluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10sXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGU+IHtcbiAgY29uc3QgY29sdW1uRGVmcyA9IGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBjb2x1bW5zKTtcblxuICAvLyDsu6zrn7wsIOyduOuNseyKpCDsspjrpqxcbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGBhd2FpdCBrbmV4LnNjaGVtYS5jcmVhdGVUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4uY29sdW1uRGVmcy5idWlsZGVyLFxuICAgIFwifSk7XCIsXG4gICAgLy8gcmF3IOq1rOusuCAoR2VuZXJhdGVkIENvbHVtbiDrk7EpXG4gICAgLi4uY29sdW1uRGVmcy5yYXcsXG4gICAgLy8gaW5kZXjripQga25leC5yYXfroZwg7LKY66as7ZWY66+A66GcIGNyZWF0ZVRhYmxlIOuwluyXkOyEnCDsi6TtlolcbiAgICAuLi5pbmRleGVzLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGAgcmV0dXJuIGtuZXguc2NoZW1hLmRyb3BUYWJsZShcIiR7dGFibGV9XCIpO2AsXG4gICAgXCJ9XCIsXG4gIF07XG4gIHJldHVybiB7XG4gICAgdGFibGUsXG4gICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB0aXRsZTogYGNyZWF0ZV9fJHt0YWJsZX1gLFxuICAgIGZvcm1hdHRlZDogZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKSxcbiAgfTtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Db2x1bW5bXSDsnb3slrTshJwg7Lus65+8IOygleydmO2VmOuKlCDqtazrrLgg7IOd7ISxXG4gKiBAcmV0dXJucyBidWlsZGVyOiB0YWJsZSBidWlsZGVyIOuplOyEnOuTnCwgcmF3OiBrbmV4LnJhdygpIOq1rOusuFxuICovXG5mdW5jdGlvbiBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZTogc3RyaW5nLCBjb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSk6IENvbHVtbkRlZmluaXRpb25SZXN1bHQge1xuICBjb25zdCByZXN1bHQ6IENvbHVtbkRlZmluaXRpb25SZXN1bHQgPSB7XG4gICAgYnVpbGRlcjogW10sXG4gICAgcmF3OiBbXSxcbiAgfTtcblxuICBmb3IgKGNvbnN0IGNvbHVtbiBvZiBjb2x1bW5zKSB7XG4gICAgLy8gR2VuZXJhdGVkIENvbHVtbuydgCByYXfroZwg7LKY66asXG4gICAgaWYgKGNvbHVtbi5nZW5lcmF0ZWQpIHtcbiAgICAgIHJlc3VsdC5yYXcucHVzaChnZW5HZW5lcmF0ZWRDb2x1bW5EZWZpbml0aW9uKHRhYmxlLCBjb2x1bW4pKTtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cblxuICAgIC8vIOydvOuwmCDsu6zrn7zsnYAgYnVpbGRlcuuhnCDsspjrpqxcbiAgICByZXN1bHQuYnVpbGRlci5wdXNoKGdlbk5vcm1hbENvbHVtbkRlZmluaXRpb24oY29sdW1uKSk7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEdlbmVyYXRlZCBDb2x1bW4g7KCV7J2YIOyDneyEsSAoQUxURVIgVEFCTEUgQUREIENPTFVNTiDsgqzsmqkpXG4gKi9cbmZ1bmN0aW9uIGdlbkdlbmVyYXRlZENvbHVtbkRlZmluaXRpb24odGFibGU6IHN0cmluZywgY29sdW1uOiBNaWdyYXRpb25Db2x1bW4pOiBzdHJpbmcge1xuICBpZiAoIWNvbHVtbi5nZW5lcmF0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0ZWQgY29sdW1uIGRlZmluaXRpb24gcmVxdWlyZWRcIik7XG4gIH1cbiAgY29uc3QgcGdUeXBlID0gZ2V0UGdUeXBlRm9yQ29sdW1uKGNvbHVtbik7XG4gIGNvbnN0IHN0b3JhZ2VUeXBlID0gY29sdW1uLmdlbmVyYXRlZC50eXBlID09PSBcIlZJUlRVQUxcIiA/IFwiIFZJUlRVQUxcIiA6IFwiIFNUT1JFRFwiO1xuICBjb25zdCBudWxsYWJsZUNsYXVzZSA9IGNvbHVtbi5udWxsYWJsZSA/IFwiXCIgOiBcIiBOT1QgTlVMTFwiO1xuICByZXR1cm4gYGF3YWl0IGtuZXgucmF3KFxcYEFMVEVSIFRBQkxFIFwiJHt0YWJsZX1cIiBBREQgQ09MVU1OIFwiJHtjb2x1bW4ubmFtZX1cIiAke3BnVHlwZX0gR0VORVJBVEVEIEFMV0FZUyBBUyAoJHtjb2x1bW4uZ2VuZXJhdGVkLmV4cHJlc3Npb259KSR7c3RvcmFnZVR5cGV9JHtudWxsYWJsZUNsYXVzZX1cXGApO2A7XG59XG5cbi8qKlxuICog7J2867CYIOy7rOufvCDsoJXsnZgg7IOd7ISxICh0YWJsZS54eHgoKSDssrTsnbgpXG4gKi9cbmZ1bmN0aW9uIGdlbk5vcm1hbENvbHVtbkRlZmluaXRpb24oY29sdW1uOiBNaWdyYXRpb25Db2x1bW4pOiBzdHJpbmcge1xuICBjb25zdCBjaGFpbnM6IHN0cmluZ1tdID0gW107XG5cbiAgaWYgKGNvbHVtbi5uYW1lID09PSBcImlkXCIpIHtcbiAgICByZXR1cm4gYHRhYmxlLmluY3JlbWVudHMoKS5wcmltYXJ5KCk7YDtcbiAgfVxuXG4gIC8vIOuwsOyXtCDtg4DsnoUg7LKY66asXG4gIGlmIChjb2x1bW4udHlwZS5lbmRzV2l0aChcIltdXCIpKSB7XG4gICAgY29uc3QgZWxlbWVudFR5cGUgPSBjb2x1bW4udHlwZS5zbGljZSgwLCAtMik7IC8vIFwiaW50ZWdlcltdXCIgLT4gXCJpbnRlZ2VyXCJcbiAgICBjb25zdCBwZ1R5cGUgPSBnZXRQZ0FycmF5VHlwZShjb2x1bW4sIGVsZW1lbnRUeXBlKTtcbiAgICBjaGFpbnMucHVzaChgc3BlY2lmaWNUeXBlKCcke2NvbHVtbi5uYW1lfScsICcke3BnVHlwZX0nKWApO1xuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcInZlY3RvclwiKSB7XG4gICAgLy8gS25leOuKlCB2ZWN0b3Ig7YOA7J6F7J2EIOyngeygkSDsp4Dsm5DtlZjsp4Ag7JWK7Jy866+A66GcIHNwZWNpZmljVHlwZSDsgqzsmqlcbiAgICBjaGFpbnMucHVzaChgc3BlY2lmaWNUeXBlKCcke2NvbHVtbi5uYW1lfScsICd2ZWN0b3IoJHtjb2x1bW4uZGltZW5zaW9uc30pJylgKTtcbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJudW1iZXJPck51bWVyaWNcIikge1xuICAgIC8vIG51bWJlclxuICAgIGlmIChjb2x1bW4ubnVtYmVyVHlwZSA9PT0gXCJyZWFsXCIpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBmbG9hdCgnJHtjb2x1bW4ubmFtZX0nKWApO1xuICAgIH0gZWxzZSBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSB7XG4gICAgICBjaGFpbnMucHVzaChgZG91YmxlKCcke2NvbHVtbi5uYW1lfScpYCk7XG4gICAgfSBlbHNlIGlmICgoY29sdW1uLm51bWJlclR5cGUgPz8gXCJudW1lcmljXCIpID09PSBcIm51bWVyaWNcIikge1xuICAgICAgY2hhaW5zLnB1c2goYGRlY2ltYWwoJyR7Y29sdW1uLm5hbWV9JywgJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KWApO1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2x1bW4udHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgIC8vIHN0cmluZ1xuICAgIGlmIChjb2x1bW4ubGVuZ3RoICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNoYWlucy5wdXNoKGBzdHJpbmcoJyR7Y29sdW1uLm5hbWV9JywgJHtjb2x1bW4ubGVuZ3RofSlgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2hhaW5zLnB1c2goYHRleHQoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgICB9XG4gIH0gZWxzZSBpZiAoY29sdW1uLnR5cGUgPT09IFwiZGF0ZVwiKSB7XG4gICAgLy8gZGF0ZVxuICAgIGNoYWlucy5wdXNoKGB0aW1lc3RhbXAoJyR7Y29sdW1uLm5hbWV9JywgeyB1c2VUejogdHJ1ZSB9KWApO1xuICB9IGVsc2UgaWYgKGNvbHVtbi50eXBlID09PSBcImpzb25cIikge1xuICAgIC8vIGpzb25cbiAgICBjaGFpbnMucHVzaChganNvbmIoJyR7Y29sdW1uLm5hbWV9JylgKTtcbiAgfSBlbHNlIHtcbiAgICAvLyB0eXBlLCBsZW5ndGhcbiAgICBsZXQgZXh0cmFUeXBlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gICAgY2hhaW5zLnB1c2goXG4gICAgICBgJHtjb2x1bW4udHlwZX0oJyR7Y29sdW1uLm5hbWV9JyR7XG4gICAgICAgIGNvbHVtbi5sZW5ndGggPyBgLCAke2NvbHVtbi5sZW5ndGh9YCA6IFwiXCJcbiAgICAgIH0ke2V4dHJhVHlwZSA/IGAsICcke2V4dHJhVHlwZX0nYCA6IFwiXCJ9KWAsXG4gICAgKTtcbiAgfVxuXG4gIC8vIG51bGxhYmxlXG4gIGNoYWlucy5wdXNoKGNvbHVtbi5udWxsYWJsZSA/IFwibnVsbGFibGUoKVwiIDogXCJub3ROdWxsYWJsZSgpXCIpO1xuXG4gIC8vIGRlZmF1bHRUb1xuICBpZiAoY29sdW1uLmRlZmF1bHRUbyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW4uZGVmYXVsdFRvID09PSBcInN0cmluZ1wiICYmIGNvbHVtbi5kZWZhdWx0VG8uc3RhcnRzV2l0aChgXCJgKSkge1xuICAgICAgY2hhaW5zLnB1c2goYGRlZmF1bHRUbygke2NvbHVtbi5kZWZhdWx0VG99KWApO1xuICAgIH0gZWxzZSB7XG4gICAgICBjaGFpbnMucHVzaChgZGVmYXVsdFRvKGtuZXgucmF3KCcke2NvbHVtbi5kZWZhdWx0VG99JykpYCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGB0YWJsZS4ke2NoYWlucy5qb2luKFwiLlwiKX07YDtcbn1cblxuLyoqXG4gKiBNaWdyYXRpb25Db2x1bW7snZgg7YOA7J6F7J2EIFBvc3RncmVTUUwg7YOA7J6FIOusuOyekOyXtOuhnCDrs4DtmZhcbiAqL1xuZnVuY3Rpb24gZ2V0UGdUeXBlRm9yQ29sdW1uKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uKTogc3RyaW5nIHtcbiAgaWYgKGNvbHVtbi50eXBlLmVuZHNXaXRoKFwiW11cIikpIHtcbiAgICBjb25zdCBlbGVtZW50VHlwZSA9IGNvbHVtbi50eXBlLnNsaWNlKDAsIC0yKTtcbiAgICByZXR1cm4gZ2V0UGdBcnJheVR5cGUoY29sdW1uLCBlbGVtZW50VHlwZSk7XG4gIH1cblxuICBzd2l0Y2ggKGNvbHVtbi50eXBlKSB7XG4gICAgY2FzZSBcInN0cmluZ1wiOlxuICAgICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggIT09IHVuZGVmaW5lZCA/IGB2YXJjaGFyKCR7Y29sdW1uLmxlbmd0aH0pYCA6IFwidGV4dFwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdpbnRcIjtcbiAgICBjYXNlIFwibnVtYmVyT3JOdW1lcmljXCI6XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwicmVhbFwiKSByZXR1cm4gXCJyZWFsXCI7XG4gICAgICBpZiAoY29sdW1uLm51bWJlclR5cGUgPT09IFwiZG91YmxlIHByZWNpc2lvblwiKSByZXR1cm4gXCJkb3VibGUgcHJlY2lzaW9uXCI7XG4gICAgICByZXR1cm4gYG51bWVyaWMoJHtjb2x1bW4ucHJlY2lzaW9ufSwgJHtjb2x1bW4uc2NhbGV9KWA7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcInRpbWVzdGFtcHR6XCI7XG4gICAgY2FzZSBcImpzb25cIjpcbiAgICAgIHJldHVybiBcImpzb25iXCI7XG4gICAgY2FzZSBcInZlY3RvclwiOlxuICAgICAgcmV0dXJuIGB2ZWN0b3IoJHtjb2x1bW4uZGltZW5zaW9uc30pYDtcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGNvbHVtbi50eXBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGdldFBnQXJyYXlUeXBlKGNvbHVtbjogTWlncmF0aW9uQ29sdW1uLCBlbGVtZW50VHlwZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcIm51bWJlck9yTnVtZXJpY1wiKSB7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcInJlYWxcIikgcmV0dXJuIFwicmVhbFtdXCI7XG4gICAgaWYgKGNvbHVtbi5udW1iZXJUeXBlID09PSBcImRvdWJsZSBwcmVjaXNpb25cIikgcmV0dXJuIFwiZG91YmxlIHByZWNpc2lvbltdXCI7XG4gICAgcmV0dXJuIGBudW1lcmljKCR7Y29sdW1uLnByZWNpc2lvbn0sICR7Y29sdW1uLnNjYWxlfSlbXWA7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGNvbHVtbi5sZW5ndGggPyBgdmFyY2hhcigke2NvbHVtbi5sZW5ndGh9KVtdYCA6IFwidGV4dFtdXCI7XG4gIH1cbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImRhdGVcIikgcmV0dXJuIFwidGltZXN0YW1wdHpbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiaW50ZWdlclwiKSByZXR1cm4gXCJpbnRlZ2VyW11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJpZ0ludGVnZXJcIikgcmV0dXJuIFwiYmlnaW50W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcImJvb2xlYW5cIikgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gIGlmIChlbGVtZW50VHlwZSA9PT0gXCJ1dWlkXCIpIHJldHVybiBcInV1aWRbXVwiO1xuICBpZiAoZWxlbWVudFR5cGUgPT09IFwiZW51bVwiKSByZXR1cm4gXCJ0ZXh0W11cIjtcbiAgaWYgKGVsZW1lbnRUeXBlID09PSBcInZlY3RvclwiKSByZXR1cm4gYHZlY3Rvcigke2NvbHVtbi5kaW1lbnNpb25zfSlbXWA7XG5cbiAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGFycmF5IGVsZW1lbnQgdHlwZTogJHtlbGVtZW50VHlwZX1gKTtcbn1cblxuLyoqXG4gKiDqsJzrs4Qg7J24642x7IqkIOygleydmCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuSW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGlmIChpbmRleC50eXBlID09PSBcImhuc3dcIiB8fCBpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIHJldHVybiBnZW5WZWN0b3JJbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKTtcbiAgfVxuXG4gIGNvbnN0IG1ldGhvZE1hcCA9IHtcbiAgICBpbmRleDogXCJJTkRFWFwiLFxuICAgIHVuaXF1ZTogXCJVTklRVUUgSU5ERVhcIixcbiAgfTtcblxuICBjb25zdCBudWxsc05vdERpc3RpbmN0Q2xhdXNlID1cbiAgICBpbmRleC50eXBlID09PSBcInVuaXF1ZVwiICYmIGluZGV4Lm51bGxzTm90RGlzdGluY3QgIT09IHVuZGVmaW5lZFxuICAgICAgPyBgIE5VTExTICR7aW5kZXgubnVsbHNOb3REaXN0aW5jdCA/IFwiTk9UIERJU1RJTkNUXCIgOiBcIkRJU1RJTkNUXCJ9YFxuICAgICAgOiBcIlwiO1xuXG4gIGNvbnN0IHVzaW5nQ2xhdXNlID0gaW5kZXgudXNpbmcgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgVVNJTkcgJHtpbmRleC51c2luZ31gO1xuXG4gIHJldHVybiBgYXdhaXQga25leC5yYXcoXG4gIFxcYENSRUFURSAke21ldGhvZE1hcFtpbmRleC50eXBlXX0gJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSAke3VzaW5nQ2xhdXNlfSgke2luZGV4LmNvbHVtbnNcbiAgICAubWFwKChjb2wpID0+IHtcbiAgICAgIC8vIOygleugrCDsmLXshZjsnYAgYnRyZWXrp4wg7IKs7JqpIOqwgOuKpVxuICAgICAgaWYgKGluZGV4LnVzaW5nICE9PSBcImJ0cmVlXCIgJiYgaW5kZXgudXNpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gYCR7Y29sLm5hbWV9YDtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgc29ydE9yZGVyQ2xhdXNlID0gY29sLnNvcnRPcmRlciA9PT0gdW5kZWZpbmVkID8gXCJcIiA6IGAgJHtjb2wuc29ydE9yZGVyfWA7XG4gICAgICBjb25zdCBudWxsc0ZpcnN0Q2xhdXNlID1cbiAgICAgICAgY29sLm51bGxzRmlyc3QgPT09IHVuZGVmaW5lZCA/IFwiXCIgOiBgIE5VTExTICR7Y29sLm51bGxzRmlyc3QgPyBcIkZJUlNUXCIgOiBcIkxBU1RcIn1gO1xuICAgICAgcmV0dXJuIGAke2NvbC5uYW1lfSR7c29ydE9yZGVyQ2xhdXNlfSR7bnVsbHNGaXJzdENsYXVzZX1gO1xuICAgIH0pXG4gICAgLmpvaW4oXCIsIFwiKX0pJHtudWxsc05vdERpc3RpbmN0Q2xhdXNlfTtcXGBcbiAgKTtgO1xufVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvblxuICogLSBITlNXIChIaWVyYXJjaGljYWwgTmF2aWdhYmxlIFNtYWxsIFdvcmxkKTog64qQ66awIOu5jOuTnCwg67mg66W4IOqygOyDiSDsho3rj4QsIOuGkuydgCDrqZTrqqjrpqwg67CPIOygle2ZleuPhFxuICogLSBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbik6IOu5oOuluCDruYzrk5wsIOykkeqwhCDqsoDsg4kg7IaN64+ELCDrgq7snYAg66mU66qo66asXG4gKlxuICogQGV4YW1wbGVcbiAqIC8vIEhOU1cg7J24642x7IqkICjqtozsnqUgLSDruaDrpbgg6rKA7IOJLCDrhpLsnYAg7KCV7ZmV64+EKVxuICogQ1JFQVRFIElOREVYIGlkeF9lbWJlZGRpbmcgT04gaXRlbXMgVVNJTkcgaG5zdyAoZW1iZWRkaW5nIHZlY3Rvcl9jb3NpbmVfb3BzKSBXSVRIIChtID0gMTYsIGVmX2NvbnN0cnVjdGlvbiA9IDY0KTtcbiAqXG4gKiAvLyBJVkZGbGF0IOyduOuNseyKpCAo64yA7Jqp65+JIOuNsOydtO2EsCwg67mE7JqpIOykkeyalCDsi5wpXG4gKiBDUkVBVEUgSU5ERVggaWR4X2VtYmVkZGluZyBPTiBpdGVtcyBVU0lORyBpdmZmbGF0IChlbWJlZGRpbmcgdmVjdG9yX2Nvc2luZV9vcHMpIFdJVEggKGxpc3RzID0gMTAwKTtcbiAqL1xuZnVuY3Rpb24gZ2VuVmVjdG9ySW5kZXhEZWZpbml0aW9uKGluZGV4OiBNaWdyYXRpb25JbmRleCwgdGFibGU6IHN0cmluZyk6IHN0cmluZyB7XG4gIGNvbnN0IGNvbHVtbiA9IGluZGV4LmNvbHVtbnNbMF07XG4gIGNvbnN0IHZlY3Rvck9wcyA9IGNvbHVtbi52ZWN0b3JPcHMgPz8gXCJ2ZWN0b3JfY29zaW5lX29wc1wiO1xuXG4gIC8vIEhOU1cgKEhpZXJhcmNoaWNhbCBOYXZpZ2FibGUgU21hbGwgV29ybGQpIC0g6raM7J6lOiDruaDrpbgg6rKA7IOJLCDrhpLsnYAg7KCV7ZmV64+EXG4gIGlmIChpbmRleC50eXBlID09PSBcImhuc3dcIikge1xuICAgIGNvbnN0IG0gPSBpbmRleC5tID8/IDE2O1xuICAgIGNvbnN0IGVmQ29uc3RydWN0aW9uID0gaW5kZXguZWZDb25zdHJ1Y3Rpb24gPz8gNjQ7XG4gICAgcmV0dXJuIGBhd2FpdCBrbmV4LnJhdyhcXGBDUkVBVEUgSU5ERVggJHtpbmRleC5uYW1lfSBPTiAke3RhYmxlfSBVU0lORyBobnN3ICgke2NvbHVtbi5uYW1lfSAke3ZlY3Rvck9wc30pIFdJVEggKG0gPSAke219LCBlZl9jb25zdHJ1Y3Rpb24gPSAke2VmQ29uc3RydWN0aW9ufSlcXGApO2A7XG4gIH1cblxuICAvLyBJVkZGbGF0IChJbnZlcnRlZCBGaWxlIHdpdGggRmxhdCBDb21wcmVzc2lvbikgLSDrjIDsmqnrn4ksIOu5hOyaqSDspJHsmpQg7IucXG4gIGlmIChpbmRleC50eXBlID09PSBcIml2ZmZsYXRcIikge1xuICAgIGNvbnN0IGxpc3RzID0gaW5kZXgubGlzdHMgPz8gMTAwO1xuICAgIHJldHVybiBgYXdhaXQga25leC5yYXcoXFxgQ1JFQVRFIElOREVYICR7aW5kZXgubmFtZX0gT04gJHt0YWJsZX0gVVNJTkcgaXZmZmxhdCAoJHtjb2x1bW4ubmFtZX0gJHt2ZWN0b3JPcHN9KSBXSVRIIChsaXN0cyA9ICR7bGlzdHN9KVxcYCk7YDtcbiAgfVxuXG4gIHRocm93IG5ldyBFcnJvcihgVW5rbm93biByYXcgU1FMIGluZGV4IHR5cGU6ICR7aW5kZXgudHlwZX1gKTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg7IOd7ISx7ZWY64qUIOy8gOydtOyKpCAtIEZLIOyDneyEsVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUNyZWF0ZUNvZGVfRm9yZWlnbihcbiAgdGFibGU6IHN0cmluZyxcbiAgZm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbik6IFByb21pc2U8R2VuTWlncmF0aW9uQ29kZVtdPiB7XG4gIGlmIChmb3JlaWducy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCB7IHVwLCBkb3duIH0gPSBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZvcmVpZ25zKTtcbiAgaWYgKHVwLmxlbmd0aCA9PT0gMCAmJiBkb3duLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKFwiZmsg6rCAIOutlOqwgCDri6TrpoXri4jri6RcIik7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgY29uc3QgbGluZXM6IHN0cmluZ1tdID0gW1xuICAgICdpbXBvcnQgeyBLbmV4IH0gZnJvbSBcImtuZXhcIjsnLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gdXAoa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgXCIvLyBjcmVhdGUgZmtcIixcbiAgICAuLi51cCxcbiAgICBcIn0pO1wiLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgYHJldHVybiBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCxcbiAgICBcIi8vIGRyb3AgZmtcIixcbiAgICAuLi5kb3duLFxuICAgIFwifSk7XCIsXG4gICAgXCJ9XCIsXG4gIF07XG5cbiAgY29uc3QgZm9yZWlnbktleXNTdHJpbmcgPSBmb3JlaWducy5tYXAoKGZvcmVpZ24pID0+IGZvcmVpZ24uY29sdW1ucy5qb2luKFwiX1wiKSkuam9pbihcIl9cIik7XG4gIHJldHVybiBbXG4gICAge1xuICAgICAgdGFibGUsXG4gICAgICB0eXBlOiBcImZvcmVpZ25cIixcbiAgICAgIHRpdGxlOiBgZm9yZWlnbl9fJHt0YWJsZX1fXyR7Zm9yZWlnbktleXNTdHJpbmd9YCxcbiAgICAgIGZvcm1hdHRlZDogZm9ybWF0Q29kZShsaW5lcy5qb2luKFwiXFxuXCIpLCBcInR5cGVzY3JpcHRcIiwgYHNyYy9taWdyYXRpb24vJHt0YWJsZX0udHNgKSxcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIE1pZ3JhdGlvbkZvcmVpZ25bXSDsnb3slrTshJwg7Jm467aA7YKkIGNvbnN0cmFpbnQg7KCV7J2Y7ZWY64qUIOq1rOusuCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuRm9yZWlnbkRlZmluaXRpb25zKFxuICB0YWJsZTogc3RyaW5nLFxuICBmb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuKTogeyB1cDogc3RyaW5nW107IGRvd246IHN0cmluZ1tdIH0ge1xuICByZXR1cm4gZm9yZWlnbnMucmVkdWNlKFxuICAgIChyLCBmb3JlaWduKSA9PiB7XG4gICAgICBjb25zdCBjb2x1bW5zU3RyaW5nUXVvdGUgPSBmb3JlaWduLmNvbHVtbnNcbiAgICAgICAgLm1hcCgoY29sKSA9PiBgJyR7Y29sLnJlcGxhY2UoYCR7dGFibGV9LmAsIFwiXCIpfSdgKVxuICAgICAgICAuam9pbihcIixcIik7XG4gICAgICByLnVwLnB1c2goXG4gICAgICAgIGB0YWJsZS5mb3JlaWduKCcke2ZvcmVpZ24uY29sdW1ucy5qb2luKFwiLFwiKX0nKVxuICAgICAgICAgICAgLnJlZmVyZW5jZXMoJyR7Zm9yZWlnbi50b30nKVxuICAgICAgICAgICAgLm9uVXBkYXRlKCcke2ZvcmVpZ24ub25VcGRhdGV9JylcbiAgICAgICAgICAgIC5vbkRlbGV0ZSgnJHtmb3JlaWduLm9uRGVsZXRlfScpYCxcbiAgICAgICk7XG4gICAgICByLmRvd24ucHVzaChgdGFibGUuZHJvcEZvcmVpZ24oWyR7Y29sdW1uc1N0cmluZ1F1b3RlfV0pYCk7XG4gICAgICByZXR1cm4gcjtcbiAgICB9LFxuICAgIHtcbiAgICAgIHVwOiBbXSBhcyBzdHJpbmdbXSxcbiAgICAgIGRvd246IFtdIGFzIHN0cmluZ1tdLFxuICAgIH0sXG4gICk7XG59XG5cbi8qKlxuICog7YWM7J2067iUIOuzgOqyvSDsvIDsnbTsiqQgLSDsu6zrn7wv7J24642x7IqkIOuzgOqyvVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzKFxuICB0YWJsZTogc3RyaW5nLFxuICBlbnRpdHlDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgZW50aXR5SW5kZXhlczogTWlncmF0aW9uSW5kZXhbXSxcbiAgZGJDb2x1bW5zOiBNaWdyYXRpb25Db2x1bW5bXSxcbiAgZGJJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLFxuICBkYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICAvKlxuICAgIOyEuOu2gCDruYTqtZAg7ZuEIOuLpOuluOygkCDssL7slYTshJwg7L2U65OcIOyDneyEsVxuXG4gICAgMS4g7Lus65+86rCv7IiYIOuLpOumhDogTUTsl5Ag7J6I7Jy864KYLCBEQuyXkCDsl4bri6TrqbQg7LaU6rCAXG4gICAgMi4g7Lus65+86rCv7IiYIOuLpOumhDogTUTsl5Ag7JeG7Jy864KYLCBEQuyXkCDsnojri6TrqbQg7IKt7KCcXG4gICAgMy4g6re47Jm4IOy7rOufvCjsu6zrn7wg6rCv7IiY6rCAIOuPmeydvO2VmOqxsOuCmCwg64uk66W4IOqyveyasCDrj5nsnbztlZwg7Lus65+864G866asKSA9PiBhbHRlclxuICAgIDQuIOuLpOuluOqxsCDri6Qg64+Z7J287ZWY6rOgIGluZGV466eMIOuzgOqyveuQmOuKlCDqsr3smrBcblxuICAgICoqIOy7rOufvOuqheydhCDrs4Dqsr3tlZjripQg6rK97Jqw64qUIOuUsOuhnCDtlbjrk6Trp4HtlZjsp4Ag7JWK7J2MXG4gICAgPT4gZHJvcC9hZGQg7ZiV7YOc7J2YIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5zqsIAg7IOd7ISx65CY64qU642wLCDsiJjrj5nsnLzroZwgcmVuYW1lIOy9lOuTnOuhnCDsiJjsoJXtlZjsl6wg7LKY66asXG4gICovXG5cbiAgLy8g6rCBIOy7rOufvCDsnbTrpoQg6riw7KSA7Jy866GcIGFkZCwgZHJvcCwgYWx0ZXIg7Jes67aAIO2ZleyduFxuICBjb25zdCBhbHRlckNvbHVtbnNUbyA9IGdldEFsdGVyQ29sdW1uc1RvKGVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucyk7XG5cbiAgLy8g7LaU7Lac65CcIOy7rOufvOuTpOydhCDquLDspIDsnLzroZwg6rCB6rCBIOudvOyduCDsg53shLFcbiAgY29uc3QgYWx0ZXJDb2x1bW5MaW5lc1RvID0gZ2V0QWx0ZXJDb2x1bW5MaW5lc1RvKFxuICAgIGFsdGVyQ29sdW1uc1RvLFxuICAgIGVudGl0eUNvbHVtbnMsXG4gICAgdGFibGUsXG4gICAgZGJGb3JlaWducyxcbiAgKTtcblxuICAvLyDsnbjrjbHsiqTsnZggYWRkLCBkcm9wIOyXrOu2gCDtmZXsnbhcbiAgY29uc3QgYWx0ZXJJbmRleGVzVG8gPSBnZXRBbHRlckluZGV4ZXNUbyhlbnRpdHlJbmRleGVzLCBkYkluZGV4ZXMpO1xuXG4gIC8vIOyduOuNseyKpOqwgCDsgq3soJzrkJjripQg6rK97JqwLCDsu6zrn7zqs7wg6rCZ7J20IOyCreygnOuQnCDsvIDsnbTsiqTsl5DripQgZHJvcOyXkOyEnCDsoJzsmbjtlbTslbztlaghXG4gIGNvbnN0IGluZGV4TmVlZHNUb0Ryb3AgPSBhbHRlckluZGV4ZXNUby5kcm9wLmZpbHRlcihcbiAgICAoaW5kZXgpID0+XG4gICAgICBpbmRleC5jb2x1bW5zLmV2ZXJ5KCh7IG5hbWUgfSkgPT5cbiAgICAgICAgYWx0ZXJDb2x1bW5zVG8uZHJvcC5tYXAoKGNvbCkgPT4gY29sLm5hbWUpLmluY2x1ZGVzKG5hbWUpLFxuICAgICAgKSA9PT0gZmFsc2UsXG4gICk7XG5cbiAgLy8g67mIIOy9lOuTnCDsg53shLEg67Cp7KeAXG4gIGNvbnN0IGhhc1VwQ2hhbmdlcyA9XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5idWlsZGVyLmxlbmd0aCA+IDAgfHxcbiAgICBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLnJhdy5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlci5sZW5ndGggPiAwIHx8XG4gICAgYWx0ZXJDb2x1bW5MaW5lc1RvLmFsdGVyLnVwLmJ1aWxkZXIubGVuZ3RoID4gMCB8fFxuICAgIGFsdGVySW5kZXhlc1RvLmFkZC5sZW5ndGggPiAwIHx8XG4gICAgaW5kZXhOZWVkc1RvRHJvcC5sZW5ndGggPiAwO1xuICBpZiAoIWhhc1VwQ2hhbmdlcykge1xuICAgIE5haXRlLnQoXCJtaWdyYXRvcjpnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzOmVtcHR5Q29kZUdlbmVyYXRpb25FcnJvclwiLCB7XG4gICAgICBlbnRpdHlDb2x1bW5zLFxuICAgICAgZGJDb2x1bW5zLFxuICAgICAgZW50aXR5SW5kZXhlcyxcbiAgICAgIGRiSW5kZXhlcyxcbiAgICB9KTtcbiAgICAvLyB0aHJvdyBuZXcgRXJyb3IoXCLsu6zrn7wv7J24642x7IqkIOuzgOqyvSDsvZTrk5wg7IOd7ISxIOyYpOulmFwiKTtcbiAgfVxuICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfQ29sdW1uQW5kSW5kZXhlczpkZWJ1Z1wiLCB7XG4gICAgXCJhbHRlckNvbHVtbnNUby5hZGQubGVuZ3RoXCI6IGFsdGVyQ29sdW1uc1RvLmFkZC5sZW5ndGgsXG4gICAgXCJhbHRlckNvbHVtbnNUby5kcm9wLmxlbmd0aFwiOiBhbHRlckNvbHVtbnNUby5kcm9wLmxlbmd0aCxcbiAgICBcImFsdGVyQ29sdW1uc1RvLmFsdGVyLmxlbmd0aFwiOiBhbHRlckNvbHVtbnNUby5hbHRlci5sZW5ndGgsXG4gICAgXCJhbHRlckluZGV4ZXNUby5hZGQubGVuZ3RoXCI6IGFsdGVySW5kZXhlc1RvLmFkZC5sZW5ndGgsXG4gICAgXCJhbHRlckluZGV4ZXNUby5kcm9wLmxlbmd0aFwiOiBhbHRlckluZGV4ZXNUby5kcm9wLmxlbmd0aCxcbiAgICBcImluZGV4TmVlZHNUb0Ryb3AubGVuZ3RoXCI6IGluZGV4TmVlZHNUb0Ryb3AubGVuZ3RoLFxuICB9KTtcbiAgLy8gTmFpdGUudChcIm1pZ3JhdG9yOmdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXM6YWx0ZXJDb2x1bW5zVG9cIiwgYWx0ZXJDb2x1bW5zVG8pO1xuXG4gIC8vIFRPRE86IOyduOuNseyKpOuqhSDrs4Dqsr3rkJwg6rK97JqwIOyymOumrFxuXG4gIC8vIHRhYmxlIGJ1aWxkZXIg66mU7ISc65Oc66GcIOyLpO2Wie2VoCDsvZTrk5wgKGRyb3Ag4oaSIGFkZCDihpIgYWx0ZXIg7Iic7IScKVxuICBjb25zdCB1cEJ1aWxkZXJMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlci5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWRkLnVwLmJ1aWxkZXIgOiBbXSksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci51cC5idWlsZGVyLmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIudXAuYnVpbGRlciA6IFtdKSxcbiAgICAuLi5pbmRleE5lZWRzVG9Ecm9wLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgXTtcblxuICAvLyBrbmV4LnJhdygp66GcIOyLpO2Wie2VoCDsvZTrk5xcbiAgY29uc3QgdXBSYXdMaW5lcyA9IFtcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC51cC5yYXcubGVuZ3RoID4gMCA/IGFsdGVyQ29sdW1uTGluZXNUby5hZGQudXAucmF3IDogW10pLFxuICAgIC4uLmFsdGVySW5kZXhlc1RvLmFkZC5tYXAoKGluZGV4KSA9PiBnZW5JbmRleERlZmluaXRpb24oaW5kZXgsIHRhYmxlKSksXG4gIF07XG5cbiAgLy8gZG93buydgCB1cOydmCDsl63siJwgKGFkZC5kb3duID0gZHJvcCByb2xsYmFjaywgZHJvcC5kb3duID0gYWRkIHJvbGxiYWNrKVxuICBjb25zdCBkb3duQnVpbGRlckxpbmVzID0gW1xuICAgIC4uLihhbHRlckNvbHVtbkxpbmVzVG8uYWRkLmRvd24uYnVpbGRlci5sZW5ndGggPiAwID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmFkZC5kb3duLmJ1aWxkZXIgOiBbXSksXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5hbHRlci5kb3duLmJ1aWxkZXIubGVuZ3RoID4gMFxuICAgICAgPyBhbHRlckNvbHVtbkxpbmVzVG8uYWx0ZXIuZG93bi5idWlsZGVyXG4gICAgICA6IFtdKSxcbiAgICAuLi4oYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5idWlsZGVyLmxlbmd0aCA+IDBcbiAgICAgID8gYWx0ZXJDb2x1bW5MaW5lc1RvLmRyb3AuZG93bi5idWlsZGVyXG4gICAgICA6IFtdKSxcbiAgICAuLi5hbHRlckluZGV4ZXNUby5hZGRcbiAgICAgIC5maWx0ZXIoXG4gICAgICAgIChpbmRleCkgPT5cbiAgICAgICAgICBpbmRleC5jb2x1bW5zLmV2ZXJ5KChpbmRleENvbCkgPT5cbiAgICAgICAgICAgIGFsdGVyQ29sdW1uc1RvLmFkZC5tYXAoKGNvbCkgPT4gY29sLm5hbWUpLmluY2x1ZGVzKGluZGV4Q29sLm5hbWUpLFxuICAgICAgICAgICkgPT09IGZhbHNlLFxuICAgICAgKVxuICAgICAgLm1hcChnZW5JbmRleERyb3BEZWZpbml0aW9uKSxcbiAgXTtcblxuICBjb25zdCBkb3duUmF3TGluZXMgPSBbXG4gICAgLi4uKGFsdGVyQ29sdW1uTGluZXNUby5kcm9wLmRvd24ucmF3Lmxlbmd0aCA+IDAgPyBhbHRlckNvbHVtbkxpbmVzVG8uZHJvcC5kb3duLnJhdyA6IFtdKSxcbiAgICAuLi5pbmRleE5lZWRzVG9Ecm9wLm1hcCgoaW5kZXgpID0+IGdlbkluZGV4RGVmaW5pdGlvbihpbmRleCwgdGFibGUpKSxcbiAgXTtcblxuICBjb25zdCBsaW5lczogc3RyaW5nW10gPSBbXG4gICAgJ2ltcG9ydCB7IEtuZXggfSBmcm9tIFwia25leFwiOycsXG4gICAgXCJcIixcbiAgICBcImV4cG9ydCBhc3luYyBmdW5jdGlvbiB1cChrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKHVwQnVpbGRlckxpbmVzLmxlbmd0aCA+IDBcbiAgICAgID8gW2Bhd2FpdCBrbmV4LnNjaGVtYS5hbHRlclRhYmxlKFwiJHt0YWJsZX1cIiwgKHRhYmxlKSA9PiB7YCwgLi4udXBCdWlsZGVyTGluZXMsIFwifSk7XCJdXG4gICAgICA6IFtdKSxcbiAgICAuLi51cFJhd0xpbmVzLFxuICAgIFwifVwiLFxuICAgIFwiXCIsXG4gICAgXCJleHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bihrbmV4OiBLbmV4KTogUHJvbWlzZTx2b2lkPiB7XCIsXG4gICAgLi4uKGRvd25CdWlsZGVyTGluZXMubGVuZ3RoID4gMFxuICAgICAgPyBbYGF3YWl0IGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLCAuLi5kb3duQnVpbGRlckxpbmVzLCBcIn0pO1wiXVxuICAgICAgOiBbXSksXG4gICAgLi4uZG93blJhd0xpbmVzLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgXCJ0eXBlc2NyaXB0XCIsIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG4gIGNvbnN0IHRpdGxlID0gW1xuICAgIFwiYWx0ZXJcIixcbiAgICB0YWJsZSxcbiAgICAuLi4oW1wiYWRkXCIsIFwiZHJvcFwiLCBcImFsdGVyXCJdIGFzIGNvbnN0KVxuICAgICAgLm1hcCgoYWN0aW9uKSA9PiB7XG4gICAgICAgIGNvbnN0IGxlbiA9IGFsdGVyQ29sdW1uc1RvW2FjdGlvbl0ubGVuZ3RoO1xuICAgICAgICBpZiAobGVuID4gMCkge1xuICAgICAgICAgIHJldHVybiBhY3Rpb24gKyBsZW47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9KVxuICAgICAgLmZpbHRlcigocGFydCkgPT4gcGFydCAhPT0gbnVsbCksXG4gIF0uam9pbihcIl9cIik7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZm9ybWF0dGVkLFxuICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIOy7rOufvCDruYTqtZDrpbwg7JyE7ZW0IEdlbmVyYXRlZCBDb2x1bW7snZggZXhwcmVzc2lvbuydhCDsoJzsmbjtlZwg6rCd7LK066W8IOyDneyEsVxuICovXG5mdW5jdGlvbiBub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKGNvbDogTWlncmF0aW9uQ29sdW1uKTogTWlncmF0aW9uQ29sdW1uIHtcbiAgaWYgKGNvbC5nZW5lcmF0ZWQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY29sLFxuICAgICAgZ2VuZXJhdGVkOiB7XG4gICAgICAgIHR5cGU6IGNvbC5nZW5lcmF0ZWQudHlwZSxcbiAgICAgICAgZXhwcmVzc2lvbjogXCJcIixcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuICByZXR1cm4gY29sO1xufVxuXG4vKipcbiAqIOqwgSDsu6zrn7wg7J2066aEIOq4sOykgOycvOuhnCBhZGQsIGRyb3AsIGFsdGVyIOyXrOu2gCDtmZXsnbhcbiAqL1xuZnVuY3Rpb24gZ2V0QWx0ZXJDb2x1bW5zVG8oZW50aXR5Q29sdW1uczogTWlncmF0aW9uQ29sdW1uW10sIGRiQ29sdW1uczogTWlncmF0aW9uQ29sdW1uW10pIHtcbiAgY29uc3QgY29sdW1uc1RvID0ge1xuICAgIGFkZDogW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gICAgZHJvcDogW10gYXMgTWlncmF0aW9uQ29sdW1uW10sXG4gICAgYWx0ZXI6IFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICB9O1xuXG4gIC8vIOy7rOufvOuqhSDquLDspIAg67mE6rWQXG4gIGNvbnN0IGV4dHJhQ29sdW1ucyA9IHtcbiAgICBkYjogZGlmZihkYkNvbHVtbnMsIGVudGl0eUNvbHVtbnMsIChjb2wpID0+IFtjb2wubmFtZSwgY29sLmdlbmVyYXRlZD8udHlwZV0uam9pbihcIi8vL1wiKSksXG4gICAgZW50aXR5OiBkaWZmKGVudGl0eUNvbHVtbnMsIGRiQ29sdW1ucywgKGNvbCkgPT4gW2NvbC5uYW1lLCBjb2wuZ2VuZXJhdGVkPy50eXBlXS5qb2luKFwiLy8vXCIpKSxcbiAgfTtcbiAgaWYgKGV4dHJhQ29sdW1ucy5lbnRpdHkubGVuZ3RoID4gMCkge1xuICAgIGNvbHVtbnNUby5hZGQgPSBjb2x1bW5zVG8uYWRkLmNvbmNhdChleHRyYUNvbHVtbnMuZW50aXR5KTtcbiAgfVxuICBpZiAoZXh0cmFDb2x1bW5zLmRiLmxlbmd0aCA+IDApIHtcbiAgICBjb2x1bW5zVG8uZHJvcCA9IGNvbHVtbnNUby5kcm9wLmNvbmNhdChleHRyYUNvbHVtbnMuZGIpO1xuICB9XG5cbiAgLy8g64+Z7J28IOy7rOufvOuqheydmCDshLjrtoAg7ZWE65OcIOu5hOq1kCAoR2VuZXJhdGVkIENvbHVtbiBleHByZXNzaW9uIOygnOyZuClcbiAgY29uc3Qgc2FtZURiQ29sdW1ucyA9IGludGVyc2VjdGlvbkJ5KGRiQ29sdW1ucywgZW50aXR5Q29sdW1ucywgKGNvbCkgPT4gY29sLm5hbWUpO1xuICBjb25zdCBzYW1lTWRDb2x1bW5zID0gaW50ZXJzZWN0aW9uQnkoZW50aXR5Q29sdW1ucywgZGJDb2x1bW5zLCAoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbHVtbnNUby5hbHRlciA9IGRpZmZlcmVuY2VXaXRoKFxuICAgIHNhbWVEYkNvbHVtbnMsXG4gICAgc2FtZU1kQ29sdW1ucyxcbiAgICAoYSwgYikgPT4gZXF1YWwoeyAuLi5hLCBnZW5lcmF0ZWQ6IHVuZGVmaW5lZCB9LCB7IC4uLmIsIGdlbmVyYXRlZDogdW5kZWZpbmVkIH0pLCAvLyBnZW5lcmF0ZWQg7Lus65+87J2AIGFsdGVy66GcIOyymOumrO2VmOyngCDslYrsnYxcbiAgKTtcblxuICByZXR1cm4gY29sdW1uc1RvO1xufVxuXG4vKipcbiAqIOy2lOy2nOuQnCDsu6zrn7zrk6TsnYQg6riw7KSA7Jy866GcIOqwgeqwgSDrnbzsnbgg7IOd7ISxXG4gKi9cbmZ1bmN0aW9uIGdldEFsdGVyQ29sdW1uTGluZXNUbyhcbiAgY29sdW1uc1RvOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBbHRlckNvbHVtbnNUbz4sXG4gIGVudGl0eUNvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdLFxuICB0YWJsZTogc3RyaW5nLFxuICBkYkZvcmVpZ25zOiBNaWdyYXRpb25Gb3JlaWduW10sXG4pIHtcbiAgY29uc3QgbGluZXNUbyA9IHtcbiAgICBhZGQ6IHtcbiAgICAgIHVwOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgICBkb3duOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgfSxcbiAgICBkcm9wOiB7XG4gICAgICB1cDogeyBidWlsZGVyOiBbXSBhcyBzdHJpbmdbXSwgcmF3OiBbXSBhcyBzdHJpbmdbXSB9LFxuICAgICAgZG93bjogeyBidWlsZGVyOiBbXSBhcyBzdHJpbmdbXSwgcmF3OiBbXSBhcyBzdHJpbmdbXSB9LFxuICAgIH0sXG4gICAgYWx0ZXI6IHtcbiAgICAgIHVwOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgICBkb3duOiB7IGJ1aWxkZXI6IFtdIGFzIHN0cmluZ1tdLCByYXc6IFtdIGFzIHN0cmluZ1tdIH0sXG4gICAgfSxcbiAgfTtcblxuICAvLyBhZGQgY29sdW1uc1xuICBjb25zdCBhZGRDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5hZGQpO1xuICBsaW5lc1RvLmFkZC51cCA9IHtcbiAgICBidWlsZGVyOiBhZGRDb2x1bW5EZWZzLmJ1aWxkZXIubGVuZ3RoID4gMCA/IFtcIi8vIGFkZFwiLCAuLi5hZGRDb2x1bW5EZWZzLmJ1aWxkZXJdIDogW10sXG4gICAgcmF3OiBhZGRDb2x1bW5EZWZzLnJhdy5sZW5ndGggPiAwID8gW1wiLy8gYWRkIChnZW5lcmF0ZWQpXCIsIC4uLmFkZENvbHVtbkRlZnMucmF3XSA6IFtdLFxuICB9O1xuICBsaW5lc1RvLmFkZC5kb3duID0ge1xuICAgIGJ1aWxkZXI6XG4gICAgICBjb2x1bW5zVG8uYWRkLmxlbmd0aCA+IDBcbiAgICAgICAgPyBbXG4gICAgICAgICAgICBcIi8vIHJvbGxiYWNrIC0gYWRkXCIsXG4gICAgICAgICAgICBgdGFibGUuZHJvcENvbHVtbnMoJHtjb2x1bW5zVG8uYWRkLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICBdXG4gICAgICAgIDogW10sXG4gICAgcmF3OiBbXSxcbiAgfTtcblxuICAvLyBkcm9w7ZWgIOy7rOufvOyXkCDqsbjrprAgRksg7LC+6riwXG4gIGNvbnN0IGRyb3BDb2x1bW5OYW1lcyA9IGNvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gIGNvbnN0IGZrVG9Ecm9wQmVmb3JlQ29sdW1uID0gZGJGb3JlaWducy5maWx0ZXIoKGZrKSA9PlxuICAgIGZrLmNvbHVtbnMuc29tZSgoY29sKSA9PiBkcm9wQ29sdW1uTmFtZXMuaW5jbHVkZXMoY29sKSksXG4gICk7XG5cbiAgY29uc3QgZHJvcEZrTGluZXMgPSBma1RvRHJvcEJlZm9yZUNvbHVtbi5tYXAoKGZrKSA9PiB7XG4gICAgY29uc3QgY29sdW1uc1N0cmluZ1F1b3RlID0gZmsuY29sdW1ucy5tYXAoKGNvbCkgPT4gYCcke2NvbH0nYCkuam9pbihcIixcIik7XG4gICAgcmV0dXJuIGB0YWJsZS5kcm9wRm9yZWlnbihbJHtjb2x1bW5zU3RyaW5nUXVvdGV9XSlgO1xuICB9KTtcblxuICBjb25zdCByZXN0b3JlRmtMaW5lcyA9IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUb0Ryb3BCZWZvcmVDb2x1bW4pLnVwO1xuXG4gIC8vIGRyb3DsnZggcm9sbGJhY2vsi5zsl5DripQgZ2VuZXJhdGVkIGNvbHVtbuuPhCDrs7Xsm5DtlbTslbwg7ZWoXG4gIGNvbnN0IGRyb3BDb2x1bW5EZWZzID0gZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIGNvbHVtbnNUby5kcm9wKTtcbiAgbGluZXNUby5kcm9wID0ge1xuICAgIHVwOiB7XG4gICAgICBidWlsZGVyOiBbXG4gICAgICAgIC4uLihkcm9wRmtMaW5lcy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyBkcm9wIGZvcmVpZ24ga2V5cyBvbiBjb2x1bW5zIHRvIGJlIGRyb3BwZWRcIiwgLi4uZHJvcEZrTGluZXNdXG4gICAgICAgICAgOiBbXSksXG4gICAgICAgIC4uLihjb2x1bW5zVG8uZHJvcC5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXG4gICAgICAgICAgICAgIFwiLy8gZHJvcCBjb2x1bW5zXCIsXG4gICAgICAgICAgICAgIGB0YWJsZS5kcm9wQ29sdW1ucygke2NvbHVtbnNUby5kcm9wLm1hcCgoY29sKSA9PiBgJyR7Y29sLm5hbWV9J2ApLmpvaW4oXCIsIFwiKX0pYCxcbiAgICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6IFtdLFxuICAgIH0sXG4gICAgZG93bjoge1xuICAgICAgYnVpbGRlcjogW1xuICAgICAgICAuLi4oZHJvcENvbHVtbkRlZnMuYnVpbGRlci5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyByb2xsYmFjayAtIGRyb3AgY29sdW1uc1wiLCAuLi5kcm9wQ29sdW1uRGVmcy5idWlsZGVyXVxuICAgICAgICAgIDogW10pLFxuICAgICAgICAuLi4ocmVzdG9yZUZrTGluZXMubGVuZ3RoID4gMCA/IFtcIi8vIHJlc3RvcmUgZm9yZWlnbiBrZXlzXCIsIC4uLnJlc3RvcmVGa0xpbmVzXSA6IFtdKSxcbiAgICAgIF0sXG4gICAgICByYXc6XG4gICAgICAgIGRyb3BDb2x1bW5EZWZzLnJhdy5sZW5ndGggPiAwXG4gICAgICAgICAgPyBbXCIvLyByb2xsYmFjayAtIGRyb3AgY29sdW1ucyAoZ2VuZXJhdGVkKVwiLCAuLi5kcm9wQ29sdW1uRGVmcy5yYXddXG4gICAgICAgICAgOiBbXSxcbiAgICB9LFxuICB9O1xuXG4gIC8vIGFsdGVyIGNvbHVtbnMgKEdlbmVyYXRlZCBDb2x1bW7snYAgQUxURVIg67aI6rCA7ZWY66+A66GcIGRyb3Ag7ZuEIOyerOyDneyEsSlcbiAgbGluZXNUby5hbHRlciA9IGNvbHVtbnNUby5hbHRlci5yZWR1Y2UoXG4gICAgKHIsIGRiQ29sdW1uKSA9PiB7XG4gICAgICBjb25zdCBlbnRpdHlDb2x1bW4gPSBlbnRpdHlDb2x1bW5zLmZpbmQoKGNvbCkgPT4gY29sLm5hbWUgPT09IGRiQ29sdW1uLm5hbWUpO1xuICAgICAgaWYgKGVudGl0eUNvbHVtbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfVxuXG4gICAgICAvLyDsu6zrn7wg67OA6rK97IKs7ZWtXG4gICAgICBjb25zdCBjb2x1bW5EaWZmVXAgPSBkaWZmKFxuICAgICAgICBnZW5Db2x1bW5EZWZpbml0aW9ucyh0YWJsZSwgW2VudGl0eUNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZGJDb2x1bW5dKS5idWlsZGVyLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNvbHVtbkRpZmZEb3duID0gZGlmZihcbiAgICAgICAgZ2VuQ29sdW1uRGVmaW5pdGlvbnModGFibGUsIFtkYkNvbHVtbl0pLmJ1aWxkZXIsXG4gICAgICAgIGdlbkNvbHVtbkRlZmluaXRpb25zKHRhYmxlLCBbZW50aXR5Q29sdW1uXSkuYnVpbGRlcixcbiAgICAgICk7XG4gICAgICBpZiAoY29sdW1uRGlmZlVwLmxlbmd0aCA+IDApIHtcbiAgICAgICAgci51cC5idWlsZGVyID0gW1xuICAgICAgICAgIC4uLnIudXAuYnVpbGRlcixcbiAgICAgICAgICBcIi8vIGFsdGVyIGNvbHVtblwiLFxuICAgICAgICAgIC4uLmNvbHVtbkRpZmZVcC5tYXAoKGwpID0+IGAke2wucmVwbGFjZShcIjtcIiwgXCJcIil9LmFsdGVyKCk7YCksXG4gICAgICAgIF07XG4gICAgICAgIHIuZG93bi5idWlsZGVyID0gW1xuICAgICAgICAgIC4uLnIuZG93bi5idWlsZGVyLFxuICAgICAgICAgIFwiLy8gcm9sbGJhY2sgLSBhbHRlciBjb2x1bW5cIixcbiAgICAgICAgICAuLi5jb2x1bW5EaWZmRG93bi5tYXAoKGwpID0+IGAke2wucmVwbGFjZShcIjtcIiwgXCJcIil9LmFsdGVyKCk7YCksXG4gICAgICAgIF07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAge1xuICAgICAgdXA6IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICAgIGRvd246IHsgYnVpbGRlcjogW10gYXMgc3RyaW5nW10sIHJhdzogW10gYXMgc3RyaW5nW10gfSxcbiAgICB9LFxuICApO1xuXG4gIHJldHVybiBsaW5lc1RvO1xufVxuXG4vKipcbiAqIOyduOuNseyKpOydmCBhZGQsIGRyb3Ag7Jes67aAIO2ZleyduFxuICovXG5mdW5jdGlvbiBnZXRBbHRlckluZGV4ZXNUbyhlbnRpdHlJbmRleGVzOiBNaWdyYXRpb25JbmRleFtdLCBkYkluZGV4ZXM6IE1pZ3JhdGlvbkluZGV4W10pIHtcbiAgLy8g7J24642x7IqkIOu5hOq1kFxuICBjb25zdCBpbmRleGVzVG8gPSB7XG4gICAgYWRkOiBbXSBhcyBNaWdyYXRpb25JbmRleFtdLFxuICAgIGRyb3A6IFtdIGFzIE1pZ3JhdGlvbkluZGV4W10sXG4gIH07XG5cbiAgLy8g7J24642x7IqkIOqzoOycoCDsi53rs4TsnpAg7IOd7ISxIChuYW1l7J2EIOygnOyZuO2VnCDrqqjrk6Ag7ZWE65Oc66W8IOusuOyekOyXtOuhnCDrs4DtmZjtlZjsl6wg7KGw7ZWpKVxuICBjb25zdCBpZGVudGl0eSA9IDxUIGV4dGVuZHMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4+KGluZGV4OiBUKTogc3RyaW5nID0+IHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaW5kZXgpXG4gICAgICAuZmlsdGVyKChrZXkpID0+IGtleSAhPT0gXCJuYW1lXCIpXG4gICAgICAuc29ydCgpO1xuXG4gICAgcmV0dXJuIGtleXNcbiAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5ID09PSBcIm5hbWVcIikge1xuICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGtleSA9PT0gXCJjb2x1bW5zXCIpIHtcbiAgICAgICAgICByZXR1cm4gKGluZGV4W2tleV0gYXMgTWlncmF0aW9uSW5kZXhbXCJjb2x1bW5zXCJdKS5mbGF0TWFwKGlkZW50aXR5KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gYCR7a2V5fT0ke2luZGV4W2tleSBhcyBrZXlvZiBNaWdyYXRpb25JbmRleF19YDtcbiAgICAgIH0pXG4gICAgICAuam9pbihcIi8vXCIpO1xuICB9O1xuXG4gIGNvbnN0IGV4dHJhSW5kZXhlcyA9IHtcbiAgICBkYjogZGlmZihkYkluZGV4ZXMsIGVudGl0eUluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpLCBpZGVudGl0eSksXG4gICAgZW50aXR5OiBkaWZmKGVudGl0eUluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpLCBkYkluZGV4ZXMsIGlkZW50aXR5KSxcbiAgfTtcbiAgaWYgKGV4dHJhSW5kZXhlcy5lbnRpdHkubGVuZ3RoID4gMCkge1xuICAgIGluZGV4ZXNUby5hZGQgPSBpbmRleGVzVG8uYWRkLmNvbmNhdChleHRyYUluZGV4ZXMuZW50aXR5KTtcbiAgfVxuICBpZiAoZXh0cmFJbmRleGVzLmRiLmxlbmd0aCA+IDApIHtcbiAgICBpbmRleGVzVG8uZHJvcCA9IGluZGV4ZXNUby5kcm9wLmNvbmNhdChleHRyYUluZGV4ZXMuZGIpO1xuICB9XG5cbiAgcmV0dXJuIGluZGV4ZXNUbztcbn1cblxuLyoqXG4gKiDsnbjrjbHsiqQg7IKt7KCcIOygleydmCDsg53shLFcbiAqL1xuZnVuY3Rpb24gZ2VuSW5kZXhEcm9wRGVmaW5pdGlvbihpbmRleDogTWlncmF0aW9uSW5kZXgpIHtcbiAgcmV0dXJuIGB0YWJsZS5kcm9wSW5kZXgoWyR7aW5kZXguY29sdW1uc1xuICAgIC5tYXAoKGNvbHVtbikgPT4gYCcke2NvbHVtbi5uYW1lfSdgKVxuICAgIC5qb2luKFwiLFwiKX1dLCAnJHtpbmRleC5uYW1lfScpYDtcbn1cblxuLyoqXG4gKiBEQiDsobDtmowg6rKw6rO87JmAIOu5hOq1kO2VmOq4sCDsnITtlZwg7J24642x7IqkIOq4sOuzuOqwkiDshKTsoJVcbiAqL1xuZnVuY3Rpb24gc2V0TWlncmF0aW9uSW5kZXhEZWZhdWx0cyhpbmRleDogTWlncmF0aW9uSW5kZXgpOiBNaWdyYXRpb25JbmRleCB7XG4gIHJldHVybiB7XG4gICAgLi4uaW5kZXgsXG4gICAgY29sdW1uczogaW5kZXguY29sdW1ucy5tYXAoKGNvbCkgPT4gKHtcbiAgICAgIC4uLmNvbCxcbiAgICAgIHNvcnRPcmRlcjogY29sLnNvcnRPcmRlciA/PyBcIkFTQ1wiLFxuICAgICAgLy8gc29ydE9yZGVy7JeQIOuUsOudvCBudWxsc0ZpcnN07J2YIGRlZmF1bHQg6rCSIOyEpOyglVxuICAgICAgbnVsbHNGaXJzdDogY29sLm51bGxzRmlyc3QgPz8gY29sLnNvcnRPcmRlciA9PT0gXCJERVNDXCIsXG4gICAgfSkpLFxuICAgIG51bGxzTm90RGlzdGluY3Q6IGluZGV4Lm51bGxzTm90RGlzdGluY3QgPz8gZmFsc2UsXG4gICAgdXNpbmc6IGluZGV4LnVzaW5nID8/IFwiYnRyZWVcIixcbiAgfTtcbn1cblxuLyoqXG4gKiDthYzsnbTruJQg67OA6rK9IOy8gOydtOyKpCAtIEZvcmVpZ24gS2V5IOuzgOqyvVxuICovXG5hc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZV9Gb3JlaWducyhcbiAgdGFibGU6IHN0cmluZyxcbiAgZW50aXR5Rm9yZWlnbnM6IE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgZGJGb3JlaWduczogTWlncmF0aW9uRm9yZWlnbltdLFxuICBkcm9wcGluZ0NvbHVtbnM6IE1pZ3JhdGlvbkNvbHVtbltdID0gW10sXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICAvLyBjb25zb2xlLmxvZyh7IGVudGl0eUZvcmVpZ25zLCBkYkZvcmVpZ25zIH0pO1xuXG4gIGNvbnN0IGdldEtleSA9IChtZjogTWlncmF0aW9uRm9yZWlnbik6IHN0cmluZyA9PiB7XG4gICAgcmV0dXJuIFttZi5jb2x1bW5zLmpvaW4oXCItXCIpLCBtZi50b10uam9pbihcIi8vL1wiKTtcbiAgfTtcblxuICAvLyDsgq3soJzrkKAg7Lus65+866qFIOuqqeuhnVxuICBjb25zdCBkcm9wcGluZ0NvbHVtbk5hbWVzID0gZHJvcHBpbmdDb2x1bW5zLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG5cbiAgY29uc3QgZmtUbyA9IGVudGl0eUZvcmVpZ25zLnJlZHVjZShcbiAgICAocmVzdWx0LCBlbnRpdHlGKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGluZ0RiRiA9IGRiRm9yZWlnbnMuZmluZCgoZGJGKSA9PiBnZXRLZXkoZW50aXR5RikgPT09IGdldEtleShkYkYpKTtcbiAgICAgIGlmICghbWF0Y2hpbmdEYkYpIHtcbiAgICAgICAgcmVzdWx0LmFkZC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuXG4gICAgICBpZiAoZXF1YWwoZW50aXR5RiwgbWF0Y2hpbmdEYkYpID09PSBmYWxzZSkge1xuICAgICAgICByZXN1bHQuYWx0ZXJTcmMucHVzaChtYXRjaGluZ0RiRik7XG4gICAgICAgIHJlc3VsdC5hbHRlckRzdC5wdXNoKGVudGl0eUYpO1xuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuICAgIHtcbiAgICAgIGFkZDogW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgZHJvcDogW10gYXMgTWlncmF0aW9uRm9yZWlnbltdLFxuICAgICAgYWx0ZXJTcmM6IFtdIGFzIE1pZ3JhdGlvbkZvcmVpZ25bXSxcbiAgICAgIGFsdGVyRHN0OiBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgfSxcbiAgKTtcblxuICAvLyBkYkZvcmVpZ25z7JeQ64qUIOyeiOyngOunjCBlbnRpdHlGb3JlaWduc+yXkOuKlCDsl4bripQg6rK97JqwICjsgq3soJzrkJwgRkspXG4gIC8vIOuLqCwg7IKt7KCc65CgIOy7rOufvOydmCBGS+uKlCDsoJzsmbggKGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXPsl5DshJwg7LKY66asKVxuICBkYkZvcmVpZ25zLmZvckVhY2goKGRiRikgPT4ge1xuICAgIGNvbnN0IG1hdGNoaW5nRW50aXR5RiA9IGVudGl0eUZvcmVpZ25zLmZpbmQoKGVudGl0eUYpID0+IGdldEtleShlbnRpdHlGKSA9PT0gZ2V0S2V5KGRiRikpO1xuICAgIGlmICghbWF0Y2hpbmdFbnRpdHlGKSB7XG4gICAgICAvLyDsnbQgRkvsnZgg7Lus65+87J20IOyCreygnOuQoCDsu6zrn7wg66qp66Gd7JeQIOyeiOuKlOyngCDtmZXsnbhcbiAgICAgIGNvbnN0IGlzQ29sdW1uRHJvcHBpbmcgPSBkYkYuY29sdW1ucy5zb21lKChjb2wpID0+IGRyb3BwaW5nQ29sdW1uTmFtZXMuaW5jbHVkZXMoY29sKSk7XG4gICAgICAvLyDsu6zrn7zsnbQg7IKt7KCc65CY7KeAIOyViuuKlCDqsr3smrDsl5Drp4wgRksgZHJvcCDrqqnroZ3sl5Ag7LaU6rCAXG4gICAgICBpZiAoIWlzQ29sdW1uRHJvcHBpbmcpIHtcbiAgICAgICAgZmtUby5kcm9wLnB1c2goZGJGKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIGNvbnN0IGxpbmVzVG8gPSB7XG4gICAgYWRkOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uYWRkKSxcbiAgICBkcm9wOiBnZW5Gb3JlaWduRGVmaW5pdGlvbnModGFibGUsIGZrVG8uZHJvcCksXG4gICAgYWx0ZXJTcmM6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5hbHRlclNyYyksXG4gICAgYWx0ZXJEc3Q6IGdlbkZvcmVpZ25EZWZpbml0aW9ucyh0YWJsZSwgZmtUby5hbHRlckRzdCksXG4gIH07XG5cbiAgLy8gZHJvcCBmayBjb2x1bW5z7J24IOqyveyasCjsg53shLHrkKAg7L2U65OcIOyXhuuKlCDqsr3smrApIO2MqOyKpFxuICBjb25zdCBoYXNMaW5lcyA9IE9iamVjdC52YWx1ZXMobGluZXNUbykuc29tZSgobCkgPT4gbC51cC5sZW5ndGggPiAwIHx8IGwuZG93bi5sZW5ndGggPiAwKTtcbiAgaWYgKCFoYXNMaW5lcykge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGlmIChcbiAgICBsaW5lc1RvLmFkZC51cC5sZW5ndGggPT09IDAgJiZcbiAgICBsaW5lc1RvLmRyb3AudXAubGVuZ3RoID09PSAwICYmXG4gICAgbGluZXNUby5hbHRlclNyYy51cC5sZW5ndGggPT09IDAgJiZcbiAgICBsaW5lc1RvLmFsdGVyRHN0LnVwLmxlbmd0aCA9PT0gMFxuICApIHtcbiAgICBOYWl0ZS50KFwibWlncmF0b3I6Z2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnM6ZmtDaGFuZ2VDb2RlR2VuZXJhdGlvbkVycm9yXCIsIHtcbiAgICAgIHRhYmxlLFxuICAgICAgZW50aXR5Rm9yZWlnbnMsXG4gICAgICBkYkZvcmVpZ25zLFxuICAgIH0pO1xuICAgIHRocm93IG5ldyBFcnJvcihcIkZLIOuzgOqyvSDsvZTrk5wg7IOd7ISxIOyYpOulmFwiKTtcbiAgfVxuXG4gIGNvbnN0IGxpbmVzOiBzdHJpbmdbXSA9IFtcbiAgICAnaW1wb3J0IHsgS25leCB9IGZyb20gXCJrbmV4XCI7JyxcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHVwKGtuZXg6IEtuZXgpOiBQcm9taXNlPHZvaWQ+IHtcIixcbiAgICBgcmV0dXJuIGtuZXguc2NoZW1hLmFsdGVyVGFibGUoXCIke3RhYmxlfVwiLCAodGFibGUpID0+IHtgLFxuICAgIC4uLmxpbmVzVG8uZHJvcC5kb3duLFxuICAgIC4uLmxpbmVzVG8uYWRkLnVwLFxuICAgIC4uLmxpbmVzVG8uYWx0ZXJTcmMuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LnVwLFxuICAgIFwifSlcIixcbiAgICBcIn1cIixcbiAgICBcIlwiLFxuICAgIFwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd24oa25leDogS25leCk6IFByb21pc2U8dm9pZD4ge1wiLFxuICAgIGByZXR1cm4ga25leC5zY2hlbWEuYWx0ZXJUYWJsZShcIiR7dGFibGV9XCIsICh0YWJsZSkgPT4ge2AsXG4gICAgLi4ubGluZXNUby5hZGQuZG93bixcbiAgICAuLi5saW5lc1RvLmFsdGVyRHN0LmRvd24sXG4gICAgLi4ubGluZXNUby5hbHRlclNyYy51cCxcbiAgICAuLi5saW5lc1RvLmRyb3AudXAsXG4gICAgXCJ9KVwiLFxuICAgIFwifVwiLFxuICBdO1xuXG4gIGNvbnN0IGZvcm1hdHRlZCA9IGZvcm1hdENvZGUobGluZXMuam9pbihcIlxcblwiKSwgXCJ0eXBlc2NyaXB0XCIsIGBzcmMvbWlncmF0aW9uLyR7dGFibGV9LnRzYCk7XG4gIGNvbnN0IHRpdGxlID0gW1xuICAgIFwiYWx0ZXJcIixcbiAgICB0YWJsZSxcbiAgICBcImZvcmVpZ25zXCIsXG4gICAgLy8gVE9ETyDrsJTrgIzripQg67aA67aEXG4gIF0uam9pbihcIl9cIik7XG5cbiAgcmV0dXJuIFtcbiAgICB7XG4gICAgICB0YWJsZSxcbiAgICAgIHRpdGxlLFxuICAgICAgZm9ybWF0dGVkLFxuICAgICAgdHlwZTogXCJub3JtYWxcIixcbiAgICB9LFxuICBdO1xufVxuXG4vKipcbiAqIOyjvOyWtOynhCBFbnRpdHlTZXTsnYQg6riw67CY7Jy866GcIO2FjOydtOu4lCBDUkVBVEUg66eI7J206re466CI7J207IWYIOy9lOuTnOulvCDsg53shLHtlanri4jri6QuXG4gKiBAcGFyYW0gZW50aXR5U2V0XG4gKiBAcmV0dXJucyBDUkVBVEUg66eI7J206re466CI7J207IWYIOy9lOuTnFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGVDcmVhdGVDb2RlKGVudGl0eVNldDogTWlncmF0aW9uU2V0KTogUHJvbWlzZTxHZW5NaWdyYXRpb25Db2RlW10+IHtcbiAgcmV0dXJuIFtcbiAgICBhd2FpdCBnZW5lcmF0ZUNyZWF0ZUNvZGVfQ29sdW1uQW5kSW5kZXhlcyhcbiAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgIGVudGl0eVNldC5jb2x1bW5zLFxuICAgICAgZW50aXR5U2V0LmluZGV4ZXMsXG4gICAgKSxcbiAgICAuLi4oYXdhaXQgZ2VuZXJhdGVDcmVhdGVDb2RlX0ZvcmVpZ24oZW50aXR5U2V0LnRhYmxlLCBlbnRpdHlTZXQuZm9yZWlnbnMpKSxcbiAgXTtcbn1cblxuLyoqXG4gKiDso7zslrTsp4QgZW50aXR5U2V07J2EIOuqqe2RnOuhnCwgZGJTZXTsnYQg7ZiEIOyDge2ZqeycvOuhnCDtlZjsl6wg7YWM7J2067iUIEFMVEVSIOuniOydtOq3uOugiOydtOyFmCDsvZTrk5zrpbwg7IOd7ISx7ZWp64uI64ukLlxuICogQHBhcmFtIGVudGl0eVNldCDtmIQg7IOB7Zmp7J2YIE1pZ3JhdGlvblNldFxuICogQHBhcmFtIGRiU2V0IOuqqe2RnCDsg4HtmansnZggTWlncmF0aW9uU2V0XG4gKiBAcmV0dXJucyBBTFRFUiDrp4jsnbTqt7jroIjsnbTshZgg7L2U65OcXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZW5lcmF0ZUFsdGVyQ29kZShcbiAgZW50aXR5U2V0OiBNaWdyYXRpb25TZXQsXG4gIGRiU2V0OiBNaWdyYXRpb25TZXQsXG4pOiBQcm9taXNlPEdlbk1pZ3JhdGlvbkNvZGVbXT4ge1xuICBjb25zdCByZXBsYWNlQ29sdW1uRGVmYXVsdFRvID0gKGNvbDogTWlncmF0aW9uQ29sdW1uKSA9PiB7XG4gICAgLy8gZmxvYXTsnbgg6rK97JqwIOq4sOuzuOqwkuydhCAw7Jy866GcIOyngOygle2VmOuKlCDqsr3smrAgXCIwLjAwXCLsnLzroZwg67OA7ZmY65CY64qUIOy8gOydtOyKpCDrjIDsnZFcbiAgICAvLyBpZiAoY29sLnR5cGUgPT09IFwiZmxvYXRcIiAmJiBjb2wuZGVmYXVsdFRvICYmIFN0cmluZyhjb2wuZGVmYXVsdFRvKS5pbmNsdWRlcygnXCInKSA9PT0gZmFsc2UpIHtcbiAgICAvLyAgIGNvbC5kZWZhdWx0VG8gPSBgXCIke051bWJlcihjb2wuZGVmYXVsdFRvKS50b0ZpeGVkKGNvbC5zY2FsZSA/PyAyKX1cImA7XG4gICAgLy8gfVxuICAgIC8vIC8vIHN0cmluZ+yduCDqsr3smrAg6riw67O46rCS7J20IOu5iCDsiqTtirjrp4Hsnbgg6rK97JqwIOuMgOydkVxuICAgIC8vIGlmIChjb2wudHlwZSA9PT0gXCJzdHJpbmdcIiAmJiBjb2wuZGVmYXVsdFRvID09PSBcIlwiKSB7XG4gICAgLy8gICBjb2wuZGVmYXVsdFRvID0gJ1wiXCInO1xuICAgIC8vIH1cbiAgICAvLyAvLyBib29sZWFu7J24IOqyveyasCDquLDrs7jqsJIg7KCV6rec7ZmUIChNeVNRTOyXkOyEnOuKlCBUSU5ZSU5UKDEp66GcIOyggOyepeuQmOuvgOuhnCAwIOuYkOuKlCAx66GcIOygleq3nO2ZlClcbiAgICAvLyAvLyBUT0RPOiBkYi50c+yXkCB0eXBlQ2FzZSDshKTsoJUg7ZmV7J247ZWY7JesIOyymOumrO2VmOuPhOuhnSDsiJjsoJUg7ZWE7JqUXG4gICAgLy8gaWYgKGNvbC50eXBlID09PSBcImJvb2xlYW5cIiAmJiBjb2wuZGVmYXVsdFRvICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyAgIGlmIChjb2wuZGVmYXVsdFRvID09PSBcIjBcIiB8fCBjb2wuZGVmYXVsdFRvLnRvTG93ZXJDYXNlKCkgPT09IFwiZmFsc2VcIikge1xuICAgIC8vICAgICBjb2wuZGVmYXVsdFRvID0gXCIwXCI7XG4gICAgLy8gICB9IGVsc2UgaWYgKGNvbC5kZWZhdWx0VG8gPT09IFwiMVwiIHx8IGNvbC5kZWZhdWx0VG8udG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCIpIHtcbiAgICAvLyAgICAgY29sLmRlZmF1bHRUbyA9IFwiMVwiO1xuICAgIC8vICAgfVxuICAgIC8vIH1cblxuICAgIC8vIEZJWE1FOiDsnbzri6ggTXlTUUwg7IOB7Zmp7JeQ7IScIOuwnOyDne2WiOuNmCDsnbTsiojsnZggd29ya2Fyb3VuZCDsnbTrr4DroZwgUGfsl5DshJwg7J6s7ZmV7J24IO2bhCDrjIDsnZEg7LaU6rCAXG4gICAgcmV0dXJuIGNvbDtcbiAgfTtcbiAgY29uc3QgZW50aXR5Q29sdW1ucyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuICBjb25zdCBkYkNvbHVtbnMgPSBhbHBoYWJldGljYWwoZGJTZXQuY29sdW1ucywgKGEpID0+IGEubmFtZSkubWFwKHJlcGxhY2VDb2x1bW5EZWZhdWx0VG8pO1xuXG4gIC8qIOuUlOuyhOq5heyaqSDsvZTrk5wsIO2KueyglSDsu6zrn7zsl5DshJwg67aI7J287LmYIOuwnOyDne2VoCDrlYwg7ZmV7J24XG4gICAgICAgIGNvbnN0IGVudGl0eUNvbHVtbiA9IGVudGl0eVNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgZGJDb2x1bW4gPSBkYlNldC5jb2x1bW5zLmZpbmQoXG4gICAgICAgICAgKGNvbCkgPT4gY29sLm5hbWUgPT09IFwicHJpY2Vfa3J3XCJcbiAgICAgICAgKTtcbiAgICAgICAgY29uc29sZS5kZWJ1Zyh7IGVudGl0eUNvbHVtbiwgZGJDb2x1bW4gfSk7XG4gICAgICAgICAqL1xuXG4gIC8vID9cbiAgY29uc3QgZW50aXR5SW5kZXhlcyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuaW5kZXhlcywgKGEpID0+IFthLnR5cGUsIC4uLmEuY29sdW1uc10uam9pbihcIi1cIikpO1xuICBjb25zdCBkYkluZGV4ZXMgPSBhbHBoYWJldGljYWwoZGJTZXQuaW5kZXhlcywgKGEpID0+IFthLnR5cGUsIC4uLmEuY29sdW1uc10uam9pbihcIi1cIikpO1xuXG4gIGNvbnN0IHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwgPSAoZjogTWlncmF0aW9uRm9yZWlnbikgPT4ge1xuICAgIC8vIE15U1FM7JeQ7IScIFJFU1RSSUNU7JmAIE5PIEFDVElPTuydgCDrj5nsnbztlahcbiAgICBjb25zdCB7IG9uRGVsZXRlLCBvblVwZGF0ZSB9ID0gZjtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uZixcbiAgICAgIG9uVXBkYXRlOiBvblVwZGF0ZSA9PT0gXCJSRVNUUklDVFwiID8gXCJOTyBBQ1RJT05cIiA6IG9uVXBkYXRlLFxuICAgICAgb25EZWxldGU6IG9uRGVsZXRlID09PSBcIlJFU1RSSUNUXCIgPyBcIk5PIEFDVElPTlwiIDogb25EZWxldGUsXG4gICAgfTtcbiAgfTtcblxuICBjb25zdCBlbnRpdHlGb3JlaWducyA9IGFscGhhYmV0aWNhbChlbnRpdHlTZXQuZm9yZWlnbnMsIChhKSA9PlxuICAgIFthLnRvLCAuLi5hLmNvbHVtbnNdLmpvaW4oXCItXCIpLFxuICApLm1hcCgoZikgPT4gcmVwbGFjZU5vQWN0aW9uT25NeVNRTChmKSk7XG4gIGNvbnN0IGRiRm9yZWlnbnMgPSBhbHBoYWJldGljYWwoZGJTZXQuZm9yZWlnbnMsIChhKSA9PiBbYS50bywgLi4uYS5jb2x1bW5zXS5qb2luKFwiLVwiKSkubWFwKChmKSA9PlxuICAgIHJlcGxhY2VOb0FjdGlvbk9uTXlTUUwoZiksXG4gICk7XG5cbiAgLy8g7IKt7KCc65CgIOy7rOufvCDrqqnroZ0g6rOE7IKwXG4gIGNvbnN0IGRyb3BwaW5nQ29sdW1ucyA9IGRpZmYoZGJDb2x1bW5zLCBlbnRpdHlDb2x1bW5zLCAoY29sKSA9PiBjb2wubmFtZSk7XG5cbiAgY29uc3QgYWx0ZXJDb2RlczogKEdlbk1pZ3JhdGlvbkNvZGUgfCBHZW5NaWdyYXRpb25Db2RlW10gfCBudWxsKVtdID0gW107XG5cbiAgLy8gMS4gY29sdW1uc0FuZEluZGV4ZXMg7LKY66asXG4gIGNvbnN0IGlzRXF1YWxDb2x1bW5zID0gZXF1YWwoXG4gICAgZW50aXR5Q29sdW1ucy5tYXAobm9ybWFsaXplQ29sdW1uRm9yQ29tcGFyaXNvbiksXG4gICAgZGJDb2x1bW5zLm1hcChub3JtYWxpemVDb2x1bW5Gb3JDb21wYXJpc29uKSxcbiAgKTtcbiAgY29uc3QgaXNFcXVhbEluZGV4ZXMgPSBlcXVhbChcbiAgICBlbnRpdHlJbmRleGVzLm1hcChzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzKSxcbiAgICBkYkluZGV4ZXMubWFwKHNldE1pZ3JhdGlvbkluZGV4RGVmYXVsdHMpLFxuICApO1xuICBpZiAoIWlzRXF1YWxDb2x1bW5zIHx8ICFpc0VxdWFsSW5kZXhlcykge1xuICAgIGFsdGVyQ29kZXMucHVzaChcbiAgICAgIGF3YWl0IGdlbmVyYXRlQWx0ZXJDb2RlX0NvbHVtbkFuZEluZGV4ZXMoXG4gICAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgICAgZW50aXR5Q29sdW1ucyxcbiAgICAgICAgZW50aXR5SW5kZXhlcyxcbiAgICAgICAgZGJDb2x1bW5zLFxuICAgICAgICBkYkluZGV4ZXMsXG4gICAgICAgIGRiU2V0LmZvcmVpZ25zLFxuICAgICAgKSxcbiAgICApO1xuICB9XG5cbiAgLy8gMi4gZm9yZWlnbnMg7LKY66asICjsgq3soJzrkKAg7Lus65+8IOygleuztCDsoITri6wpXG4gIGlmIChlcXVhbChlbnRpdHlGb3JlaWducywgZGJGb3JlaWducykgPT09IGZhbHNlKSB7XG4gICAgYWx0ZXJDb2Rlcy5wdXNoKFxuICAgICAgYXdhaXQgZ2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnMoXG4gICAgICAgIGVudGl0eVNldC50YWJsZSxcbiAgICAgICAgZW50aXR5Rm9yZWlnbnMsXG4gICAgICAgIGRiRm9yZWlnbnMsXG4gICAgICAgIGRyb3BwaW5nQ29sdW1ucyxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuXG4gIGlmIChhbHRlckNvZGVzLmV2ZXJ5KChhbHRlckNvZGUpID0+IGFsdGVyQ29kZSA9PT0gbnVsbCkpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICByZXR1cm4gYWx0ZXJDb2Rlcy5maWx0ZXIoKGFsdGVyQ29kZSkgPT4gYWx0ZXJDb2RlICE9PSBudWxsKS5mbGF0KCk7XG59XG4iXSwibmFtZXMiOlsiZXF1YWwiLCJhbHBoYWJldGljYWwiLCJkaWZmIiwiTmFpdGUiLCJmb3JtYXRDb2RlIiwiZGlmZmVyZW5jZVdpdGgiLCJpbnRlcnNlY3Rpb25CeSIsImdlbmVyYXRlQ3JlYXRlQ29kZV9Db2x1bW5BbmRJbmRleGVzIiwidGFibGUiLCJjb2x1bW5zIiwiaW5kZXhlcyIsImNvbHVtbkRlZnMiLCJnZW5Db2x1bW5EZWZpbml0aW9ucyIsImxpbmVzIiwiYnVpbGRlciIsInJhdyIsIm1hcCIsImluZGV4IiwiZ2VuSW5kZXhEZWZpbml0aW9uIiwidHlwZSIsInRpdGxlIiwiZm9ybWF0dGVkIiwiam9pbiIsInJlc3VsdCIsImNvbHVtbiIsImdlbmVyYXRlZCIsInB1c2giLCJnZW5HZW5lcmF0ZWRDb2x1bW5EZWZpbml0aW9uIiwiZ2VuTm9ybWFsQ29sdW1uRGVmaW5pdGlvbiIsIkVycm9yIiwicGdUeXBlIiwiZ2V0UGdUeXBlRm9yQ29sdW1uIiwic3RvcmFnZVR5cGUiLCJudWxsYWJsZUNsYXVzZSIsIm51bGxhYmxlIiwibmFtZSIsImV4cHJlc3Npb24iLCJjaGFpbnMiLCJlbmRzV2l0aCIsImVsZW1lbnRUeXBlIiwic2xpY2UiLCJnZXRQZ0FycmF5VHlwZSIsImRpbWVuc2lvbnMiLCJudW1iZXJUeXBlIiwicHJlY2lzaW9uIiwic2NhbGUiLCJsZW5ndGgiLCJ1bmRlZmluZWQiLCJleHRyYVR5cGUiLCJkZWZhdWx0VG8iLCJzdGFydHNXaXRoIiwiZ2VuVmVjdG9ySW5kZXhEZWZpbml0aW9uIiwibWV0aG9kTWFwIiwidW5pcXVlIiwibnVsbHNOb3REaXN0aW5jdENsYXVzZSIsIm51bGxzTm90RGlzdGluY3QiLCJ1c2luZ0NsYXVzZSIsInVzaW5nIiwiY29sIiwic29ydE9yZGVyQ2xhdXNlIiwic29ydE9yZGVyIiwibnVsbHNGaXJzdENsYXVzZSIsIm51bGxzRmlyc3QiLCJ2ZWN0b3JPcHMiLCJtIiwiZWZDb25zdHJ1Y3Rpb24iLCJsaXN0cyIsImdlbmVyYXRlQ3JlYXRlQ29kZV9Gb3JlaWduIiwiZm9yZWlnbnMiLCJ1cCIsImRvd24iLCJnZW5Gb3JlaWduRGVmaW5pdGlvbnMiLCJjb25zb2xlIiwibG9nIiwiZm9yZWlnbktleXNTdHJpbmciLCJmb3JlaWduIiwicmVkdWNlIiwiciIsImNvbHVtbnNTdHJpbmdRdW90ZSIsInJlcGxhY2UiLCJ0byIsIm9uVXBkYXRlIiwib25EZWxldGUiLCJnZW5lcmF0ZUFsdGVyQ29kZV9Db2x1bW5BbmRJbmRleGVzIiwiZW50aXR5Q29sdW1ucyIsImVudGl0eUluZGV4ZXMiLCJkYkNvbHVtbnMiLCJkYkluZGV4ZXMiLCJkYkZvcmVpZ25zIiwiYWx0ZXJDb2x1bW5zVG8iLCJnZXRBbHRlckNvbHVtbnNUbyIsImFsdGVyQ29sdW1uTGluZXNUbyIsImdldEFsdGVyQ29sdW1uTGluZXNUbyIsImFsdGVySW5kZXhlc1RvIiwiZ2V0QWx0ZXJJbmRleGVzVG8iLCJpbmRleE5lZWRzVG9Ecm9wIiwiZHJvcCIsImZpbHRlciIsImV2ZXJ5IiwiaW5jbHVkZXMiLCJoYXNVcENoYW5nZXMiLCJhZGQiLCJhbHRlciIsInQiLCJ1cEJ1aWxkZXJMaW5lcyIsImdlbkluZGV4RHJvcERlZmluaXRpb24iLCJ1cFJhd0xpbmVzIiwiZG93bkJ1aWxkZXJMaW5lcyIsImluZGV4Q29sIiwiZG93blJhd0xpbmVzIiwiYWN0aW9uIiwibGVuIiwicGFydCIsIm5vcm1hbGl6ZUNvbHVtbkZvckNvbXBhcmlzb24iLCJjb2x1bW5zVG8iLCJleHRyYUNvbHVtbnMiLCJkYiIsImVudGl0eSIsImNvbmNhdCIsInNhbWVEYkNvbHVtbnMiLCJzYW1lTWRDb2x1bW5zIiwiYSIsImIiLCJsaW5lc1RvIiwiYWRkQ29sdW1uRGVmcyIsImRyb3BDb2x1bW5OYW1lcyIsImZrVG9Ecm9wQmVmb3JlQ29sdW1uIiwiZmsiLCJzb21lIiwiZHJvcEZrTGluZXMiLCJyZXN0b3JlRmtMaW5lcyIsImRyb3BDb2x1bW5EZWZzIiwiZGJDb2x1bW4iLCJlbnRpdHlDb2x1bW4iLCJmaW5kIiwiY29sdW1uRGlmZlVwIiwiY29sdW1uRGlmZkRvd24iLCJsIiwiaW5kZXhlc1RvIiwiaWRlbnRpdHkiLCJrZXlzIiwiT2JqZWN0Iiwia2V5Iiwic29ydCIsImZsYXRNYXAiLCJleHRyYUluZGV4ZXMiLCJzZXRNaWdyYXRpb25JbmRleERlZmF1bHRzIiwiZ2VuZXJhdGVBbHRlckNvZGVfRm9yZWlnbnMiLCJlbnRpdHlGb3JlaWducyIsImRyb3BwaW5nQ29sdW1ucyIsImdldEtleSIsIm1mIiwiZHJvcHBpbmdDb2x1bW5OYW1lcyIsImZrVG8iLCJlbnRpdHlGIiwibWF0Y2hpbmdEYkYiLCJkYkYiLCJhbHRlclNyYyIsImFsdGVyRHN0IiwiZm9yRWFjaCIsIm1hdGNoaW5nRW50aXR5RiIsImlzQ29sdW1uRHJvcHBpbmciLCJoYXNMaW5lcyIsInZhbHVlcyIsImdlbmVyYXRlQ3JlYXRlQ29kZSIsImVudGl0eVNldCIsImdlbmVyYXRlQWx0ZXJDb2RlIiwiZGJTZXQiLCJyZXBsYWNlQ29sdW1uRGVmYXVsdFRvIiwicmVwbGFjZU5vQWN0aW9uT25NeVNRTCIsImYiLCJhbHRlckNvZGVzIiwiaXNFcXVhbENvbHVtbnMiLCJpc0VxdWFsSW5kZXhlcyIsImFsdGVyQ29kZSIsImZsYXQiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLFdBQVcsa0JBQWtCO0FBQ3BDLFNBQVNDLFlBQVksRUFBRUMsSUFBSSxRQUFRLFVBQVU7QUFDN0MsU0FBU0MsS0FBSyxRQUFRLGNBQUs7QUFRM0IsU0FBU0MsVUFBVSxRQUFRLHdCQUFxQjtBQUNoRCxTQUFTQyxjQUFjLEVBQUVDLGNBQWMsUUFBUSxvQkFBaUI7QUFZaEU7O0NBRUMsR0FDRCxlQUFlQyxvQ0FDYkMsS0FBYSxFQUNiQyxPQUEwQixFQUMxQkMsT0FBeUI7SUFFekIsTUFBTUMsYUFBYUMscUJBQXFCSixPQUFPQztJQUUvQyxhQUFhO0lBQ2IsTUFBTUksUUFBa0I7UUFDdEI7UUFDQTtRQUNBO1FBQ0EsQ0FBQywrQkFBK0IsRUFBRUwsTUFBTSxlQUFlLENBQUM7V0FDckRHLFdBQVdHLE9BQU87UUFDckI7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
@@ -197,10 +197,12 @@ function resolveEntityPropTypeToMigrationColumnType(prop) {
197
197
  return "vector";
198
198
  case "vector[]":
199
199
  return "vector[]";
200
+ case "tsvector":
201
+ return "tsvector";
200
202
  default:
201
203
  exhaustive(prop);
202
204
  throw new Error(`Unknown entity prop type: ${prop.type}`);
203
205
  }
204
206
  }
205
207
 
206
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vbWlncmF0aW9uLXNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW50aXR5UHJvcCxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzSGFzTWFueVJlbGF0aW9uUHJvcCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc051bWJlclByb3AsXG4gIGlzTnVtZXJpY1Byb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1N0cmluZ1Byb3AsXG4gIGlzVmVjdG9yUHJvcCxcbiAgaXNWaXJ0dWFsUHJvcCxcbiAgdHlwZSBNaWdyYXRpb25Db2x1bW4sXG4gIHR5cGUgTWlncmF0aW9uQ29sdW1uVHlwZSxcbiAgdHlwZSBNaWdyYXRpb25Gb3JlaWduLFxuICB0eXBlIE1pZ3JhdGlvbkluZGV4LFxuICB0eXBlIE1pZ3JhdGlvbkpvaW5UYWJsZSxcbiAgdHlwZSBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZXhoYXVzdGl2ZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG4vKipcbiAqIEVudGl0eeulvCDsnb3slrTshJwgTWlncmF0aW9uU2V0QW5kSm9pblRhYmxl7J2EIOunjOuTpOyWtOyYteuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHkgRW50aXR5IOqwneyytFxuICogQHJldHVybnMgTWlncmF0aW9uU2V0QW5kSm9pblRhYmxlIOqwneyytFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eShlbnRpdHk6IEVudGl0eSk6IE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSB7XG4gIGNvbnN0IG1pZ3JhdGlvblNldDogTWlncmF0aW9uU2V0QW5kSm9pblRhYmxlID0gZW50aXR5LnByb3BzLnJlZHVjZShcbiAgICAociwgcHJvcCkgPT4ge1xuICAgICAgLy8gdmlydHVhbCDtlYTrk5wg7KCc7Jm4XG4gICAgICBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICAgIC8vIEhhc01hbnkg7LyA7J207Iqk64qUIOyVhOustCDsspjrpqzrj4Qg7ZWY7KeAIOyViuydjFxuICAgICAgaWYgKGlzSGFzTWFueVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cblxuICAgICAgLy8g7J2867CYIOy7rOufvFxuICAgICAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB7XG4gICAgICAgICAgbmFtZTogcHJvcC5uYW1lLFxuICAgICAgICAgIHR5cGU6IHJlc29sdmVFbnRpdHlQcm9wVHlwZVRvTWlncmF0aW9uQ29sdW1uVHlwZShwcm9wKSxcbiAgICAgICAgICBudWxsYWJsZTogcHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSxcbiAgICAgICAgICAuLi4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VG86IHByb3AuZGJEZWZhdWx0LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH0pKCksXG4gICAgICAgICAgLy8gU3RyaW5nIO2DgOyeheyXkCBsZW5ndGgg7J6I64qUIOqyveyasCDstpTqsIBcbiAgICAgICAgICAuLi4oaXNTdHJpbmdQcm9wKHByb3ApICYmXG4gICAgICAgICAgICBwcm9wLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgICAgbGVuZ3RoOiBwcm9wLmxlbmd0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIE51bWJlci9OdW1lcmljIO2DgOyeheydmCDqsr3smrAgcHJlY2lzaW9uLCBzY2FsZSDstpTqsIBcbiAgICAgICAgICAuLi4oKGlzTnVtYmVyUHJvcChwcm9wKSB8fCBpc051bWVyaWNQcm9wKHByb3ApKSAmJiB7XG4gICAgICAgICAgICBwcmVjaXNpb246IHByb3AucHJlY2lzaW9uLFxuICAgICAgICAgICAgc2NhbGU6IHByb3Auc2NhbGUsXG4gICAgICAgICAgICBudW1iZXJUeXBlOiBpc051bWJlclByb3AocHJvcCkgPyAocHJvcC5udW1iZXJUeXBlID8/IFwibnVtZXJpY1wiKSA6IFwibnVtZXJpY1wiLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIFZlY3RvciDtg4DsnoXsnZgg6rK97JqwIGRpbWVuc2lvbnMg7LaU6rCAXG4gICAgICAgICAgLi4uKGlzVmVjdG9yUHJvcChwcm9wKSAmJiB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiBwcm9wLmRpbWVuc2lvbnMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsoJXrs7Qg7LaU6rCAXG4gICAgICAgICAgLi4uKHByb3AuZ2VuZXJhdGVkICYmIHtcbiAgICAgICAgICAgIGdlbmVyYXRlZDogcHJvcC5nZW5lcmF0ZWQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG5cbiAgICAgICAgci5jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICAvLyBNYW55VG9NYW55IOy8gOydtOyKpFxuICAgICAgICBjb25zdCByZWxNZCA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IHRhYmxlMSA9IGVudGl0eS50YWJsZTtcbiAgICAgICAgY29uc3QgdGFibGUyID0gcmVsTWQudGFibGU7XG4gICAgICAgIGNvbnN0IGpvaW4gPSB7XG4gICAgICAgICAgZnJvbTogYCR7ZW50aXR5LnRhYmxlfS5pZGAsXG4gICAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgICAgZnJvbTogYCR7cHJvcC5qb2luVGFibGV9LiR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0YWJsZTEpfV9pZGAsXG4gICAgICAgICAgICB0bzogYCR7cHJvcC5qb2luVGFibGV9LiR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0YWJsZTIpfV9pZGAsXG4gICAgICAgICAgICBvblVwZGF0ZTogcHJvcC5vblVwZGF0ZSxcbiAgICAgICAgICAgIG9uRGVsZXRlOiBwcm9wLm9uRGVsZXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG86IGAke3JlbE1kLnRhYmxlfS5pZGAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRocm91Z2ggPSBqb2luLnRocm91Z2g7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IFt0aHJvdWdoLmZyb20sIHRocm91Z2gudG9dO1xuICAgICAgICByLmpvaW5UYWJsZXMucHVzaCh7XG4gICAgICAgICAgdGFibGU6IHRocm91Z2guZnJvbS5zcGxpdChcIi5cIilbMF0sXG4gICAgICAgICAgaW5kZXhlczogW1xuICAgICAgICAgICAgLy8g7KGw7J24IO2FjOydtOu4lOyXkCDqsbjrprAg7J24642x7IqkIOywvuyVhOyZgOyEnCDsl7DqsrBcbiAgICAgICAgICAgIC4uLmVudGl0eS5pbmRleGVzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGluZGV4KSA9PlxuICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZS5pbmNsdWRlcyhgJHtwcm9wLmpvaW5UYWJsZX0uYCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoKGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmluZGV4LFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IGluZGV4LmNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBjb2wubmFtZS5yZXBsYWNlKGAke3Byb3Auam9pblRhYmxlfS5gLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgIG51bGxzRmlyc3Q6IGNvbC5udWxsc0ZpcnN0LFxuICAgICAgICAgICAgICAgICAgc29ydE9yZGVyOiBjb2wuc29ydE9yZGVyLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5zcGxpdChcIi5cIilbMV0sXG4gICAgICAgICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICB9IGFzIE1pZ3JhdGlvbkNvbHVtbjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZm9yZWlnbnM6IGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAvLyDtmITsnqwg7ZWE65Oc6rCAIOyWtOuWpCDthYzsnbTruJTsl5Ag7IaN7ZWY64qU7KeAIO2MkOuLqFxuICAgICAgICAgICAgY29uc3QgY29sID0gZmllbGQuc3BsaXQoXCIuXCIpWzFdO1xuICAgICAgICAgICAgY29uc3QgdG8gPSAoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoYCR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZShqb2luLnRvLnNwbGl0KFwiLlwiKVswXSl9X2lkYCA9PT0gY29sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpvaW4udG87XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpvaW4uZnJvbTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbHVtbnM6IFtjb2xdLFxuICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgICAgb25VcGRhdGU6IHRocm91Z2gub25VcGRhdGUsXG4gICAgICAgICAgICAgIG9uRGVsZXRlOiB0aHJvdWdoLm9uRGVsZXRlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHxcbiAgICAgICAgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC1PbmVSZWxhdGlvbiDsvIDsnbTsiqRcbiAgICAgICAgY29uc3QgaWRDb2x1bW5OYW1lID0gYCR7cHJvcC5uYW1lfV9pZGA7XG4gICAgICAgIHIuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBpZENvbHVtbk5hbWUsXG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgbnVsbGFibGU6IHByb3AubnVsbGFibGUgPz8gZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoKHByb3AudXNlQ29uc3RyYWludCA/PyB0cnVlKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHIuZm9yZWlnbnMucHVzaCh7XG4gICAgICAgICAgICBjb2x1bW5zOiBbaWRDb2x1bW5OYW1lXSxcbiAgICAgICAgICAgIHRvOiBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi5wbHVyYWxpemUocHJvcC53aXRoKSkudG9Mb3dlckNhc2UoKX0uaWRgLFxuICAgICAgICAgICAgb25VcGRhdGU6IHByb3Aub25VcGRhdGUgPz8gXCJSRVNUUklDVFwiLFxuICAgICAgICAgICAgb25EZWxldGU6IHByb3Aub25EZWxldGUgPz8gXCJSRVNUUklDVFwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAge1xuICAgICAgdGFibGU6IGVudGl0eS50YWJsZSxcbiAgICAgIGNvbHVtbnM6IFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICAgICAgaW5kZXhlczogW10gYXMgTWlncmF0aW9uSW5kZXhbXSxcbiAgICAgIGZvcmVpZ25zOiBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgICBqb2luVGFibGVzOiBbXSBhcyBNaWdyYXRpb25Kb2luVGFibGVbXSxcbiAgICB9LFxuICApO1xuXG4gIC8vIGluZGV4ZXNcbiAgbWlncmF0aW9uU2V0LmluZGV4ZXMgPSBlbnRpdHkuaW5kZXhlcy5maWx0ZXIoKGluZGV4KSA9PlxuICAgIGluZGV4LmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZS5pbmNsdWRlcyhcIi5cIikgPT09IGZhbHNlKSxcbiAgKTtcblxuICByZXR1cm4gbWlncmF0aW9uU2V0O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRW50aXR5UHJvcFR5cGVUb01pZ3JhdGlvbkNvbHVtblR5cGUocHJvcDogRW50aXR5UHJvcCk6IE1pZ3JhdGlvbkNvbHVtblR5cGUge1xuICBpZiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgfHwgcHJvcC50eXBlID09PSBcInZpcnR1YWxcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZXNvbHZlZCBjb2x1bW4gdHlwZTogJHtwcm9wLnR5cGV9YCk7XG4gIH1cblxuICBzd2l0Y2ggKHByb3AudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgXCJzdHJpbmdbXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcImVudW1bXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgcmV0dXJuIFwiaW50ZWdlclwiO1xuICAgIGNhc2UgXCJpbnRlZ2VyW11cIjpcbiAgICAgIHJldHVybiBcImludGVnZXJbXVwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdJbnRlZ2VyXCI7XG4gICAgY2FzZSBcImJpZ0ludGVnZXJbXVwiOlxuICAgICAgcmV0dXJuIFwiYmlnSW50ZWdlcltdXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyT3JOdW1lcmljXCI7XG4gICAgY2FzZSBcIm51bWJlcltdXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNbXVwiO1xuICAgIGNhc2UgXCJudW1lcmljXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNcIjtcbiAgICBjYXNlIFwibnVtZXJpY1tdXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNbXVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSBcImJvb2xlYW5bXVwiOlxuICAgICAgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcImRhdGVcIjtcbiAgICBjYXNlIFwiZGF0ZVtdXCI6XG4gICAgICByZXR1cm4gXCJkYXRlW11cIjtcbiAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgcmV0dXJuIFwidXVpZFwiO1xuICAgIGNhc2UgXCJ1dWlkW11cIjpcbiAgICAgIHJldHVybiBcInV1aWRbXVwiO1xuICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICByZXR1cm4gXCJqc29uXCI7XG4gICAgY2FzZSBcInZlY3RvclwiOlxuICAgICAgcmV0dXJuIFwidmVjdG9yXCI7XG4gICAgY2FzZSBcInZlY3RvcltdXCI6XG4gICAgICByZXR1cm4gXCJ2ZWN0b3JbXVwiO1xuICAgIGRlZmF1bHQ6XG4gICAgICBleGhhdXN0aXZlKHByb3ApO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmtub3duIGVudGl0eSBwcm9wIHR5cGU6ICR7KHByb3AgYXMgeyB0eXBlOiBzdHJpbmcgfSkudHlwZX1gKTtcbiAgfVxufVxuIl0sIm5hbWVzIjpbImluZmxlY3Rpb24iLCJFbnRpdHlNYW5hZ2VyIiwiaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AiLCJpc0hhc01hbnlSZWxhdGlvblByb3AiLCJpc01hbnlUb01hbnlSZWxhdGlvblByb3AiLCJpc051bWJlclByb3AiLCJpc051bWVyaWNQcm9wIiwiaXNPbmVUb09uZVJlbGF0aW9uUHJvcCIsImlzUmVsYXRpb25Qcm9wIiwiaXNTdHJpbmdQcm9wIiwiaXNWZWN0b3JQcm9wIiwiaXNWaXJ0dWFsUHJvcCIsImV4aGF1c3RpdmUiLCJnZXRNaWdyYXRpb25TZXRGcm9tRW50aXR5IiwiZW50aXR5IiwibWlncmF0aW9uU2V0IiwicHJvcHMiLCJyZWR1Y2UiLCJyIiwicHJvcCIsImNvbHVtbiIsIm5hbWUiLCJ0eXBlIiwicmVzb2x2ZUVudGl0eVByb3BUeXBlVG9NaWdyYXRpb25Db2x1bW5UeXBlIiwibnVsbGFibGUiLCJkYkRlZmF1bHQiLCJ1bmRlZmluZWQiLCJkZWZhdWx0VG8iLCJsZW5ndGgiLCJwcmVjaXNpb24iLCJzY2FsZSIsIm51bWJlclR5cGUiLCJkaW1lbnNpb25zIiwiZ2VuZXJhdGVkIiwiY29sdW1ucyIsInB1c2giLCJyZWxNZCIsImdldCIsIndpdGgiLCJ0YWJsZTEiLCJ0YWJsZSIsInRhYmxlMiIsImpvaW4iLCJmcm9tIiwidGhyb3VnaCIsImpvaW5UYWJsZSIsInNpbmd1bGFyaXplIiwidG8iLCJvblVwZGF0ZSIsIm9uRGVsZXRlIiwiZmllbGRzIiwiam9pblRhYmxlcyIsInNwbGl0IiwiaW5kZXhlcyIsImZpbHRlciIsImluZGV4IiwiZmluZCIsImNvbCIsImluY2x1ZGVzIiwibWFwIiwicmVwbGFjZSIsIm51bGxzRmlyc3QiLCJzb3J0T3JkZXIiLCJmaWVsZCIsImZvcmVpZ25zIiwiaGFzSm9pbkNvbHVtbiIsImlkQ29sdW1uTmFtZSIsInVzZUNvbnN0cmFpbnQiLCJ1bmRlcnNjb3JlIiwicGx1cmFsaXplIiwidG9Mb3dlckNhc2UiLCJFcnJvciJdLCJtYXBwaW5ncyI6IkFBQUEsT0FBT0EsZ0JBQWdCLGFBQWE7QUFFcEMsU0FBU0MsYUFBYSxRQUFRLDhCQUEyQjtBQUN6RCxTQUVFQywwQkFBMEIsRUFDMUJDLHFCQUFxQixFQUNyQkMsd0JBQXdCLEVBQ3hCQyxZQUFZLEVBQ1pDLGFBQWEsRUFDYkMsc0JBQXNCLEVBQ3RCQyxjQUFjLEVBQ2RDLFlBQVksRUFDWkMsWUFBWSxFQUNaQyxhQUFhLFFBT1Isb0JBQWlCO0FBQ3hCLFNBQVNDLFVBQVUsUUFBUSxvQkFBaUI7QUFFNUM7Ozs7Q0FJQyxHQUNELE9BQU8sU0FBU0MsMEJBQTBCQyxNQUFjO0lBQ3RELE1BQU1DLGVBQXlDRCxPQUFPRSxLQUFLLENBQUNDLE1BQU0sQ0FDaEUsQ0FBQ0MsR0FBR0M7UUFDRixnQkFBZ0I7UUFDaEIsSUFBSVIsY0FBY1EsT0FBTztZQUN2QixPQUFPRDtRQUNUO1FBQ0EsNEJBQTRCO1FBQzVCLElBQUlmLHNCQUFzQmdCLE9BQU87WUFDL0IsT0FBT0Q7UUFDVDtRQUVBLFFBQVE7UUFDUixJQUFJLENBQUNWLGVBQWVXLE9BQU87WUFDekIsTUFBTUMsU0FBUztnQkFDYkMsTUFBTUYsS0FBS0Us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
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9taWdyYXRpb24vbWlncmF0aW9uLXNldC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5mbGVjdGlvbiBmcm9tIFwiaW5mbGVjdGlvblwiO1xuaW1wb3J0IHR5cGUgeyBFbnRpdHkgfSBmcm9tIFwiLi4vZW50aXR5L2VudGl0eVwiO1xuaW1wb3J0IHsgRW50aXR5TWFuYWdlciB9IGZyb20gXCIuLi9lbnRpdHkvZW50aXR5LW1hbmFnZXJcIjtcbmltcG9ydCB7XG4gIHR5cGUgRW50aXR5UHJvcCxcbiAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzSGFzTWFueVJlbGF0aW9uUHJvcCxcbiAgaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wLFxuICBpc051bWJlclByb3AsXG4gIGlzTnVtZXJpY1Byb3AsXG4gIGlzT25lVG9PbmVSZWxhdGlvblByb3AsXG4gIGlzUmVsYXRpb25Qcm9wLFxuICBpc1N0cmluZ1Byb3AsXG4gIGlzVmVjdG9yUHJvcCxcbiAgaXNWaXJ0dWFsUHJvcCxcbiAgdHlwZSBNaWdyYXRpb25Db2x1bW4sXG4gIHR5cGUgTWlncmF0aW9uQ29sdW1uVHlwZSxcbiAgdHlwZSBNaWdyYXRpb25Gb3JlaWduLFxuICB0eXBlIE1pZ3JhdGlvbkluZGV4LFxuICB0eXBlIE1pZ3JhdGlvbkpvaW5UYWJsZSxcbiAgdHlwZSBNaWdyYXRpb25TZXRBbmRKb2luVGFibGUsXG59IGZyb20gXCIuLi90eXBlcy90eXBlc1wiO1xuaW1wb3J0IHsgZXhoYXVzdGl2ZSB9IGZyb20gXCIuLi91dGlscy91dGlsc1wiO1xuXG4vKipcbiAqIEVudGl0eeulvCDsnb3slrTshJwgTWlncmF0aW9uU2V0QW5kSm9pblRhYmxl7J2EIOunjOuTpOyWtOyYteuLiOuLpC5cbiAqIEBwYXJhbSBlbnRpdHkgRW50aXR5IOqwneyytFxuICogQHJldHVybnMgTWlncmF0aW9uU2V0QW5kSm9pblRhYmxlIOqwneyytFxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eShlbnRpdHk6IEVudGl0eSk6IE1pZ3JhdGlvblNldEFuZEpvaW5UYWJsZSB7XG4gIGNvbnN0IG1pZ3JhdGlvblNldDogTWlncmF0aW9uU2V0QW5kSm9pblRhYmxlID0gZW50aXR5LnByb3BzLnJlZHVjZShcbiAgICAociwgcHJvcCkgPT4ge1xuICAgICAgLy8gdmlydHVhbCDtlYTrk5wg7KCc7Jm4XG4gICAgICBpZiAoaXNWaXJ0dWFsUHJvcChwcm9wKSkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cbiAgICAgIC8vIEhhc01hbnkg7LyA7J207Iqk64qUIOyVhOustCDsspjrpqzrj4Qg7ZWY7KeAIOyViuydjFxuICAgICAgaWYgKGlzSGFzTWFueVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICByZXR1cm4gcjtcbiAgICAgIH1cblxuICAgICAgLy8g7J2867CYIOy7rOufvFxuICAgICAgaWYgKCFpc1JlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICBjb25zdCBjb2x1bW4gPSB7XG4gICAgICAgICAgbmFtZTogcHJvcC5uYW1lLFxuICAgICAgICAgIHR5cGU6IHJlc29sdmVFbnRpdHlQcm9wVHlwZVRvTWlncmF0aW9uQ29sdW1uVHlwZShwcm9wKSxcbiAgICAgICAgICBudWxsYWJsZTogcHJvcC5udWxsYWJsZSA9PT0gdHJ1ZSxcbiAgICAgICAgICAuLi4oKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHByb3AuZGJEZWZhdWx0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0VG86IHByb3AuZGJEZWZhdWx0LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgICAgIH0pKCksXG4gICAgICAgICAgLy8gU3RyaW5nIO2DgOyeheyXkCBsZW5ndGgg7J6I64qUIOqyveyasCDstpTqsIBcbiAgICAgICAgICAuLi4oaXNTdHJpbmdQcm9wKHByb3ApICYmXG4gICAgICAgICAgICBwcm9wLmxlbmd0aCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgICAgbGVuZ3RoOiBwcm9wLmxlbmd0aCxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIE51bWJlci9OdW1lcmljIO2DgOyeheydmCDqsr3smrAgcHJlY2lzaW9uLCBzY2FsZSDstpTqsIBcbiAgICAgICAgICAuLi4oKGlzTnVtYmVyUHJvcChwcm9wKSB8fCBpc051bWVyaWNQcm9wKHByb3ApKSAmJiB7XG4gICAgICAgICAgICBwcmVjaXNpb246IHByb3AucHJlY2lzaW9uLFxuICAgICAgICAgICAgc2NhbGU6IHByb3Auc2NhbGUsXG4gICAgICAgICAgICBudW1iZXJUeXBlOiBpc051bWJlclByb3AocHJvcCkgPyAocHJvcC5udW1iZXJUeXBlID8/IFwibnVtZXJpY1wiKSA6IFwibnVtZXJpY1wiLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC8vIFZlY3RvciDtg4DsnoXsnZgg6rK97JqwIGRpbWVuc2lvbnMg7LaU6rCAXG4gICAgICAgICAgLi4uKGlzVmVjdG9yUHJvcChwcm9wKSAmJiB7XG4gICAgICAgICAgICBkaW1lbnNpb25zOiBwcm9wLmRpbWVuc2lvbnMsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLy8gR2VuZXJhdGVkIENvbHVtbiDsoJXrs7Qg7LaU6rCAXG4gICAgICAgICAgLi4uKHByb3AuZ2VuZXJhdGVkICYmIHtcbiAgICAgICAgICAgIGdlbmVyYXRlZDogcHJvcC5nZW5lcmF0ZWQsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG5cbiAgICAgICAgci5jb2x1bW5zLnB1c2goY29sdW1uKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGlzTWFueVRvTWFueVJlbGF0aW9uUHJvcChwcm9wKSkge1xuICAgICAgICAvLyBNYW55VG9NYW55IOy8gOydtOyKpFxuICAgICAgICBjb25zdCByZWxNZCA9IEVudGl0eU1hbmFnZXIuZ2V0KHByb3Aud2l0aCk7XG4gICAgICAgIGNvbnN0IHRhYmxlMSA9IGVudGl0eS50YWJsZTtcbiAgICAgICAgY29uc3QgdGFibGUyID0gcmVsTWQudGFibGU7XG4gICAgICAgIGNvbnN0IGpvaW4gPSB7XG4gICAgICAgICAgZnJvbTogYCR7ZW50aXR5LnRhYmxlfS5pZGAsXG4gICAgICAgICAgdGhyb3VnaDoge1xuICAgICAgICAgICAgZnJvbTogYCR7cHJvcC5qb2luVGFibGV9LiR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0YWJsZTEpfV9pZGAsXG4gICAgICAgICAgICB0bzogYCR7cHJvcC5qb2luVGFibGV9LiR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZSh0YWJsZTIpfV9pZGAsXG4gICAgICAgICAgICBvblVwZGF0ZTogcHJvcC5vblVwZGF0ZSxcbiAgICAgICAgICAgIG9uRGVsZXRlOiBwcm9wLm9uRGVsZXRlLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgdG86IGAke3JlbE1kLnRhYmxlfS5pZGAsXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHRocm91Z2ggPSBqb2luLnRocm91Z2g7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IFt0aHJvdWdoLmZyb20sIHRocm91Z2gudG9dO1xuICAgICAgICByLmpvaW5UYWJsZXMucHVzaCh7XG4gICAgICAgICAgdGFibGU6IHRocm91Z2guZnJvbS5zcGxpdChcIi5cIilbMF0sXG4gICAgICAgICAgaW5kZXhlczogW1xuICAgICAgICAgICAgLy8g7KGw7J24IO2FjOydtOu4lOyXkCDqsbjrprAg7J24642x7IqkIOywvuyVhOyZgOyEnCDsl7DqsrBcbiAgICAgICAgICAgIC4uLmVudGl0eS5pbmRleGVzXG4gICAgICAgICAgICAgIC5maWx0ZXIoKGluZGV4KSA9PlxuICAgICAgICAgICAgICAgIGluZGV4LmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZS5pbmNsdWRlcyhgJHtwcm9wLmpvaW5UYWJsZX0uYCkpLFxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgIC5tYXAoKGluZGV4KSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLmluZGV4LFxuICAgICAgICAgICAgICAgIGNvbHVtbnM6IGluZGV4LmNvbHVtbnMubWFwKChjb2wpID0+ICh7XG4gICAgICAgICAgICAgICAgICBuYW1lOiBjb2wubmFtZS5yZXBsYWNlKGAke3Byb3Auam9pblRhYmxlfS5gLCBcIlwiKSxcbiAgICAgICAgICAgICAgICAgIG51bGxzRmlyc3Q6IGNvbC5udWxsc0ZpcnN0LFxuICAgICAgICAgICAgICAgICAgc29ydE9yZGVyOiBjb2wuc29ydE9yZGVyLFxuICAgICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgY29sdW1uczogW1xuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBuYW1lOiBcImlkXCIsXG4gICAgICAgICAgICAgIHR5cGU6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgICBudWxsYWJsZTogZmFsc2UsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgLi4uZmllbGRzLm1hcCgoZmllbGQpID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBuYW1lOiBmaWVsZC5zcGxpdChcIi5cIilbMV0sXG4gICAgICAgICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgICAgICAgbnVsbGFibGU6IGZhbHNlLFxuICAgICAgICAgICAgICB9IGFzIE1pZ3JhdGlvbkNvbHVtbjtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIF0sXG4gICAgICAgICAgZm9yZWlnbnM6IGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB7XG4gICAgICAgICAgICAvLyDtmITsnqwg7ZWE65Oc6rCAIOyWtOuWpCDthYzsnbTruJTsl5Ag7IaN7ZWY64qU7KeAIO2MkOuLqFxuICAgICAgICAgICAgY29uc3QgY29sID0gZmllbGQuc3BsaXQoXCIuXCIpWzFdO1xuICAgICAgICAgICAgY29uc3QgdG8gPSAoKCkgPT4ge1xuICAgICAgICAgICAgICBpZiAoYCR7aW5mbGVjdGlvbi5zaW5ndWxhcml6ZShqb2luLnRvLnNwbGl0KFwiLlwiKVswXSl9X2lkYCA9PT0gY29sKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpvaW4udG87XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGpvaW4uZnJvbTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSkoKTtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgIGNvbHVtbnM6IFtjb2xdLFxuICAgICAgICAgICAgICB0byxcbiAgICAgICAgICAgICAgb25VcGRhdGU6IHRocm91Z2gub25VcGRhdGUsXG4gICAgICAgICAgICAgIG9uRGVsZXRlOiB0aHJvdWdoLm9uRGVsZXRlLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiByO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgaXNCZWxvbmdzVG9PbmVSZWxhdGlvblByb3AocHJvcCkgfHxcbiAgICAgICAgKGlzT25lVG9PbmVSZWxhdGlvblByb3AocHJvcCkgJiYgcHJvcC5oYXNKb2luQ29sdW1uKVxuICAgICAgKSB7XG4gICAgICAgIC8vIC1PbmVSZWxhdGlvbiDsvIDsnbTsiqRcbiAgICAgICAgY29uc3QgaWRDb2x1bW5OYW1lID0gYCR7cHJvcC5uYW1lfV9pZGA7XG4gICAgICAgIHIuY29sdW1ucy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBpZENvbHVtbk5hbWUsXG4gICAgICAgICAgdHlwZTogXCJpbnRlZ2VyXCIsXG4gICAgICAgICAgbnVsbGFibGU6IHByb3AubnVsbGFibGUgPz8gZmFsc2UsXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoKHByb3AudXNlQ29uc3RyYWludCA/PyB0cnVlKSA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHIuZm9yZWlnbnMucHVzaCh7XG4gICAgICAgICAgICBjb2x1bW5zOiBbaWRDb2x1bW5OYW1lXSxcbiAgICAgICAgICAgIHRvOiBgJHtpbmZsZWN0aW9uLnVuZGVyc2NvcmUoaW5mbGVjdGlvbi5wbHVyYWxpemUocHJvcC53aXRoKSkudG9Mb3dlckNhc2UoKX0uaWRgLFxuICAgICAgICAgICAgb25VcGRhdGU6IHByb3Aub25VcGRhdGUgPz8gXCJSRVNUUklDVFwiLFxuICAgICAgICAgICAgb25EZWxldGU6IHByb3Aub25EZWxldGUgPz8gXCJSRVNUUklDVFwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiByO1xuICAgIH0sXG4gICAge1xuICAgICAgdGFibGU6IGVudGl0eS50YWJsZSxcbiAgICAgIGNvbHVtbnM6IFtdIGFzIE1pZ3JhdGlvbkNvbHVtbltdLFxuICAgICAgaW5kZXhlczogW10gYXMgTWlncmF0aW9uSW5kZXhbXSxcbiAgICAgIGZvcmVpZ25zOiBbXSBhcyBNaWdyYXRpb25Gb3JlaWduW10sXG4gICAgICBqb2luVGFibGVzOiBbXSBhcyBNaWdyYXRpb25Kb2luVGFibGVbXSxcbiAgICB9LFxuICApO1xuXG4gIC8vIGluZGV4ZXNcbiAgbWlncmF0aW9uU2V0LmluZGV4ZXMgPSBlbnRpdHkuaW5kZXhlcy5maWx0ZXIoKGluZGV4KSA9PlxuICAgIGluZGV4LmNvbHVtbnMuZmluZCgoY29sKSA9PiBjb2wubmFtZS5pbmNsdWRlcyhcIi5cIikgPT09IGZhbHNlKSxcbiAgKTtcblxuICByZXR1cm4gbWlncmF0aW9uU2V0O1xufVxuXG5mdW5jdGlvbiByZXNvbHZlRW50aXR5UHJvcFR5cGVUb01pZ3JhdGlvbkNvbHVtblR5cGUocHJvcDogRW50aXR5UHJvcCk6IE1pZ3JhdGlvbkNvbHVtblR5cGUge1xuICBpZiAocHJvcC50eXBlID09PSBcInJlbGF0aW9uXCIgfHwgcHJvcC50eXBlID09PSBcInZpcnR1YWxcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihgVW5yZXNvbHZlZCBjb2x1bW4gdHlwZTogJHtwcm9wLnR5cGV9YCk7XG4gIH1cblxuICBzd2l0Y2ggKHByb3AudHlwZSkge1xuICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgIHJldHVybiBcInN0cmluZ1wiO1xuICAgIGNhc2UgXCJzdHJpbmdbXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwiZW51bVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nXCI7XG4gICAgY2FzZSBcImVudW1bXVwiOlxuICAgICAgcmV0dXJuIFwic3RyaW5nW11cIjtcbiAgICBjYXNlIFwiaW50ZWdlclwiOlxuICAgICAgcmV0dXJuIFwiaW50ZWdlclwiO1xuICAgIGNhc2UgXCJpbnRlZ2VyW11cIjpcbiAgICAgIHJldHVybiBcImludGVnZXJbXVwiO1xuICAgIGNhc2UgXCJiaWdJbnRlZ2VyXCI6XG4gICAgICByZXR1cm4gXCJiaWdJbnRlZ2VyXCI7XG4gICAgY2FzZSBcImJpZ0ludGVnZXJbXVwiOlxuICAgICAgcmV0dXJuIFwiYmlnSW50ZWdlcltdXCI7XG4gICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgcmV0dXJuIFwibnVtYmVyT3JOdW1lcmljXCI7XG4gICAgY2FzZSBcIm51bWJlcltdXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNbXVwiO1xuICAgIGNhc2UgXCJudW1lcmljXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNcIjtcbiAgICBjYXNlIFwibnVtZXJpY1tdXCI6XG4gICAgICByZXR1cm4gXCJudW1iZXJPck51bWVyaWNbXVwiO1xuICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICByZXR1cm4gXCJib29sZWFuXCI7XG4gICAgY2FzZSBcImJvb2xlYW5bXVwiOlxuICAgICAgcmV0dXJuIFwiYm9vbGVhbltdXCI7XG4gICAgY2FzZSBcImRhdGVcIjpcbiAgICAgIHJldHVybiBcImRhdGVcIjtcbiAgICBjYXNlIFwiZGF0ZVtdXCI6XG4gICAgICByZXR1cm4gXCJkYXRlW11cIjtcbiAgICBjYXNlIFwidXVpZFwiOlxuICAgICAgcmV0dXJuIFwidXVpZFwiO1xuICAgIGNhc2UgXCJ1dWlkW11cIjpcbiAgICAgIHJldHVybiBcInV1aWRbXVwiO1xuICAgIGNhc2UgXCJqc29uXCI6XG4gICAgICByZXR1cm4gXCJqc29uXCI7XG4gICAgY2FzZSBcInZlY3RvclwiOlxuICAgICAgcmV0dXJuIFwidmVjdG9yXCI7XG4gICAgY2FzZSBcInZlY3RvcltdXCI6XG4gICAgICByZXR1cm4gXCJ2ZWN0b3JbXVwiO1xuICAgIGNhc2UgXCJ0c3ZlY3RvclwiOlxuICAgICAgcmV0dXJuIFwidHN2ZWN0b3JcIjtcbiAgICBkZWZhdWx0OlxuICAgICAgZXhoYXVzdGl2ZShwcm9wKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgVW5rbm93biBlbnRpdHkgcHJvcCB0eXBlOiAkeyhwcm9wIGFzIHsgdHlwZTogc3RyaW5nIH0pLnR5cGV9YCk7XG4gIH1cbn1cbiJdLCJuYW1lcyI6WyJpbmZsZWN0aW9uIiwiRW50aXR5TWFuYWdlciIsImlzQmVsb25nc1RvT25lUmVsYXRpb25Qcm9wIiwiaXNIYXNNYW55UmVsYXRpb25Qcm9wIiwiaXNNYW55VG9NYW55UmVsYXRpb25Qcm9wIiwiaXNOdW1iZXJQcm9wIiwiaXNOdW1lcmljUHJvcCIsImlzT25lVG9PbmVSZWxhdGlvblByb3AiLCJpc1JlbGF0aW9uUHJvcCIsImlzU3RyaW5nUHJvcCIsImlzVmVjdG9yUHJvcCIsImlzVmlydHVhbFByb3AiLCJleGhhdXN0aXZlIiwiZ2V0TWlncmF0aW9uU2V0RnJvbUVudGl0eSIsImVudGl0eSIsIm1pZ3JhdGlvblNldCIsInByb3BzIiwicmVkdWNlIiwiciIsInByb3AiLCJjb2x1bW4iLCJuYW1lIiwidHlwZSIsInJlc29sdmVFbnRpdHlQcm9wVHlwZVRvTWlncmF0aW9uQ29sdW1uVHlwZSIsIm51bGxhYmxlIiwiZGJEZWZhdWx0IiwidW5kZWZpbmVkIiwiZGVmYXVsdFRvIiwibGVuZ3RoIiwicHJlY2lzaW9uIiwic2NhbGUiLCJudW1iZXJUeXBlIiwiZGltZW5zaW9ucyIsImdlbmVyYXRlZCIsImNvbHVtbnMiLCJwdXNoIiwicmVsTWQiLCJnZXQiLCJ3aXRoIiwidGFibGUxIiwidGFibGUiLCJ0YWJsZTIiLCJqb2luIiwiZnJvbSIsInRocm91Z2giLCJqb2luVGFibGUiLCJzaW5ndWxhcml6ZSIsInRvIiwib25VcGRhdGUiLCJvbkRlbGV0ZSIsImZpZWxkcyIsImpvaW5UYWJsZXMiLCJzcGxpdCIsImluZGV4ZXMiLCJmaWx0ZXIiLCJpbmRleCIsImZpbmQiLCJjb2wiLCJpbmNsdWRlcyIsIm1hcCIsInJlcGxhY2UiLCJudWxsc0ZpcnN0Iiwic29ydE9yZGVyIiwiZmllbGQiLCJmb3JlaWducyIsImhhc0pvaW5Db2x1bW4iLCJpZENvbHVtbk5hbWUiLCJ1c2VDb25zdHJhaW50IiwidW5kZXJzY29yZSIsInBsdXJhbGl6ZSIsInRvTG93ZXJDYXNlIiwiRXJyb3IiXSwibWFwcGluZ3MiOiJBQUFBLE9BQU9BLGdCQUFnQixhQUFhO0FBRXBDLFNBQVNDLGFBQWEsUUFBUSw4QkFBMkI7QUFDekQsU0FFRUMsMEJBQTBCLEVBQzFCQyxxQkFBcUIsRUFDckJDLHdCQUF3QixFQUN4QkMsWUFBWSxFQUNaQyxhQUFhLEVBQ2JDLHNCQUFzQixFQUN0QkMsY0FBYyxFQUNkQyxZQUFZLEVBQ1pDLFlBQVksRUFDWkMsYUFBYSxRQU9SLG9CQUFpQjtBQUN4QixTQUFTQyxVQUFVLFFBQVEsb0JBQWlCO0FBRTVDOzs7O0NBSUMsR0FDRCxPQUFPLFNBQVNDLDBCQUEwQkMsTUFBYztJQUN0RCxNQUFNQyxlQUF5Q0QsT0FBT0UsS0FBSyxDQUFDQyxNQUFNLENBQ2hFLENBQUNDLEdBQUdDO1FBQ0YsZ0JBQWdCO1FBQ2hCLElBQUlSLGNBQWNRLE9BQU87WUFDdkIsT0FBT0Q7UUFDVDtRQUNBLDRCQUE0QjtRQUM1QixJQUFJZixzQkFBc0JnQixPQUFPO1lBQy9CLE9BQU9EO1FBQ1Q7UUFFQSxRQUFRO1FBQ1IsSUFBSSxD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
@@ -1 +1 @@
1
- {"version":3,"file":"postgresql-schema-reader.d.ts","sourceRoot":"","sources":["../../src/migration/postgresql-schema-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EACV,eAAe,EAGf,YAAY,EAEb,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,cAAM,2BAA2B;IAC/B;;;;;OAKG;IACG,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAwHzF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACG,SAAS,CACb,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAsFhD;;;OAGG;YACW,mBAAmB;IAwBjC;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,QAAQ,GACjB,IAAI,CACL,eAAe,EACf,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,CACxE;CA+FF;AAED,eAAO,MAAM,sBAAsB,6BAAoC,CAAC"}
1
+ {"version":3,"file":"postgresql-schema-reader.d.ts","sourceRoot":"","sources":["../../src/migration/postgresql-schema-reader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAEjC,OAAO,KAAK,EACV,eAAe,EAGf,YAAY,EAEb,MAAM,gBAAgB,CAAC;AAExB,MAAM,MAAM,QAAQ,GAAG;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC,CAAC;AAEF,KAAK,OAAO,GAAG;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,OAAO,CAAC;IACnB,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,KAAK,GAAG,MAAM,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC;CAC7B,CAAC;AAEF,KAAK,SAAS,GAAG;IACf,eAAe,EAAE,MAAM,CAAC;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,cAAM,2BAA2B;IAC/B;;;;;OAKG;IACG,qBAAqB,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC;IAyHzF;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAW3B;;OAEG;IACG,SAAS,CACb,SAAS,EAAE,IAAI,EACf,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IAsFhD;;;OAGG;YACW,mBAAmB;IAwBjC;;OAEG;IACH,gBAAgB,CACd,QAAQ,EAAE,QAAQ,GACjB,IAAI,CACL,eAAe,EACf,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,YAAY,CACxE;CA+FF;AAED,eAAO,MAAM,sBAAsB,6BAAoC,CAAC"}